App-Chronicle

 view release on metacpan or  search on metacpan

lib/Chronicle/Plugin/InPlacePosts.pm  view on Meta::CPAN


=head1 NAME

Chronicle::Plugin::InPlacePosts - maintains the input directory structure.

=head1 DESCRIPTION

This plugin is designed to allow blog entries remain in the same
directory structure as the input folder by adding the config
C<entry_inplace>.

The default behaviour of chronicle is to flatten any posts
present in the input folder to the http doc root, however this
plugin sets to replicate the input folder stucture.

=for example begin

input/
    2015/
        June/
            15/
                A_post.post


output/
    2015/
        June/
            15/
                A_post.html

=for example end

See also C<Chronicle::Plugin::Archived>.

=cut

=head1 METHODS

Now follows documentation on the available methods.

=cut

package Chronicle::Plugin::InPlacePosts;

use strict;
use warnings;

our $VERSION = "5.1.7";


=head2 on_insert

The C<on_insert> method is automatically invoked when a new blog post
must be inserted into the SQLite database, that might be because a post
is new, or because it has been updated.

The method is designed to return an updated blog meta-data,
after performing any massaging required.  

If within the config has C<entry_inplace = 1> the posts link meta-data
is changed to reflect the users intent to retain the posts input location.

=cut

sub on_insert
{
    my ( $self, %args ) = (@_);

    my $config = $args{ 'config' };
    my $data   = $args{ 'data' };

    if ( $config->{ 'entry_inplace' } )
    {
        $config->{ 'verbose' } &&
          print "Changing Link to stay in place: $data->{'file'}\n";

        my $inplacelink = $data->{ 'file' };

        # strip off the source dir with the first '/'
        # this will be added back later
        my $input = $config->{ 'input' };
        $inplacelink =~ s#$input/?##;

        # strip off the filename and add the title in its place
        $inplacelink =~ s#/?[^/]+$##;

        # if the $inplacelink variable is empty it means the file lives
        # in the root of the input directory, and does not require a '/'
        # to be added between the inplace link and the file name.
        # Conversely if $inplacelink is not empty the file lives within
        # we need to add a '/' between it ans the file name
        $inplacelink .= '/' if ( $inplacelink !~ /^\s*$/ );

        $data->{ 'link' }->path_prepend($inplacelink);
    }

    return ($data);
}


1;


=head1 LICENSE

This module is free software; you can redistribute it and/or modify it
under the terms of either:

a) the GNU General Public License as published by the Free Software
Foundation; either version 2, or (at your option) any later version,
or

b) the Perl "Artistic License".

=cut

=head1 AUTHOR



( run in 1.389 second using v1.01-cache-2.11-cpan-39bf76dae61 )