App-ZofCMS

 view release on metacpan or  search on metacpan

lib/App/ZofCMS/Plugin/DateSelector.pm  view on Meta::CPAN

    else {
        @out = 0..59;
    }

    @out = grep { not $_ % $s->{minute_step} } @out;

    my $q_value = $q->{ $s->{q_name} . '_' . 'minute' };
    return [
        map +{
            value       => $out[$_],
            vis_value   => sprintf("Minute: %02d", $out[$_]),

            selected    =>
            (
                ( not defined $q_value and $_ == 0 )
                or
                ( defined $q_value and $q_value eq $out[$_] )
            ) ? 1 : 0,

        }, 0..$#out,
    ];
}

sub _prepare_second {
    my ( $s, $q ) = @_;

    my @out;
    if ( $s->{interval_max} eq 'minute'
        and (localtime $s->{start})[5] == (localtime $s->{end})[5]
        and (localtime $s->{start})[4] == (localtime $s->{end})[4]
        and (localtime $s->{start})[3] == (localtime $s->{end})[3]
        and (localtime $s->{start})[2] == (localtime $s->{end})[2]
    ) {
        @out = (localtime $s->{start})[1] .. (localtime $s->{end})[1];
    }
    else {
        @out = 0..59;
    }

    @out = grep { not $_ % $s->{second_step} } @out;

    my $q_value = $q->{ $s->{q_name} . '_' . 'second' };
    return [
        map +{
            value       => $out[$_],
            vis_value   => sprintf("Second: %02d", $out[$_]),

            selected    =>
            (
                ( not defined $q_value and $_ == 0 )
                or
                ( defined $q_value and $q_value eq $out[$_] )
            ) ? 1 : 0,

        }, 0..$#out,
    ];
}

sub _html_template {
    return <<'TEMPLATE_END';
<select name="<tmpl_var escape='html' name='select_name'>" class="<tmpl_var escape='html' name='select_class'>"<tmpl_if name='select_id'> id="<tmpl_var escape='html' name='select_id'>"</tmpl_if>><tmpl_loop name='options'>
    <option value="<tmpl_var escape='html' name='value'>"<tmpl_if name='selected'> selected</tmpl_if>><tmpl_var escape='html' name='vis_value'></option></tmpl_loop>
</select>
TEMPLATE_END
}


1;
__END__

=encoding utf8

=head1 NAME

App::ZofCMS::Plugin::DateSelector - plugin to generate and "parse" <select>s for date/time input

=head1 SYNOPSIS

In ZofCMS Template or Main Config File

    # the Sub plugin is used only for demonstration here

    plugins => [ { DateSelector => 2000 }, { Sub => 3000 } ],

    plug_date_selector => {
        class           => 'date_selector',
        id              => 'date_selector',
        q_name          => 'date',
        t_name          => 'date_selector',
        start           => time() - 30000000,
        end             => time() + 30000000,
        interval_step   => 'minute',
        interval_max    => 'year',
    },

    plug_sub => sub {
        my $t = shift;
        $t->{t}{DATE} = "[$t->{d}{date_selector}{localtime}]";
    },

In L<HTML::Template> template:

    <form...

        <label for="date_selector">When: </label><tmpl_var name="date_selector">

    .../form>

    <tmpl_if name="DATE">
        <p>You selected: <tmpl_var name="DATE"></p>
    <tmpl_else>
        <p>You did not select anything yet</p>
    </tmpl_if>

=head1 DESCRIPTION

The module is a plugin for L<App::ZofCMS> that provides means to generate several
C<< <select> >> elements for date and time selection by the user. Plugin also provides means
to "parse" those C<< <select> >>s from the query to generate either epoch time, same string
as C<localtime()> or access each selection individually from a hashref.

This documentation assumes you've read L<App::ZofCMS>, L<App::ZofCMS::Config> and L<App::ZofCMS::Template>



( run in 0.924 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )