add &base CGI and form support
authorJulien Moutinho <julm+ikiwiki+newevent@autogeree.net>
Sat, 15 Mar 2014 06:21:41 +0000 (07:21 +0100)
committerJulien Moutinho <julm+ikiwiki+newevent@autogeree.net>
Sat, 15 Mar 2014 06:24:47 +0000 (07:24 +0100)
newevent.pm

index 2d60517..9db731d 100644 (file)
@@ -196,7 +196,8 @@ sub sessioncgi ($$) {
                 : 1;
                my @dow_order = ($week_start_day .. 6, 0 .. $week_start_day-1);
                
-               my $page = Encode::decode_utf8($cgi->param("page"));
+               my $page = Encode::decode_utf8(URI::Escape::uri_unescape(IkiWiki::possibly_foolish_untaint($cgi->param('page'))));
+               my $newevent_base = Encode::decode_utf8(URI::Escape::uri_unescape(IkiWiki::possibly_foolish_untaint($cgi->param('base'))));
                my $tags = $typedlinks{$page}{tag};
                my $buttons = [qw{Preview Create}];
                my ($from_date, $to_date, $end_date, $inc_dur);
@@ -204,7 +205,7 @@ sub sessioncgi ($$) {
                 ( action => IkiWiki::cgiurl()
                 , charset => "utf-8"
                 , fields => [qw{
-                        do
+                        do base
                         from_date from_year from_month from_day from_hour from_minute
                         to_date to_year to_month to_day to_hour to_minute
                         inc_dur inc_year inc_month inc_week inc_day inc_hour inc_minute
@@ -225,7 +226,7 @@ sub sessioncgi ($$) {
                 , name       => "newevent"
                 , stylesheet => 1
                 , params     => $cgi
-                , required   => [qw{do year month day name from_date to_date end_date inc_dur}]
+                , required   => [qw{do base year month day name from_date to_date end_date inc_dur}]
                 , submit     => [qw{Preview Create}]
                 , title      => gettext("newevent")
                 , template   => { template("newevent.tmpl") }
@@ -276,6 +277,7 @@ sub sessioncgi ($$) {
                                         }
                                 } }
                         , name => '/^.+$/'
+                        , base => '/^.*$/'
                         , end_times  => sub { $_[0] =~ m/^\d+$/ and $_[0] >= 0 }
                         , inc_year   => sub { $_[0] =~ m/^\d+$/ and $_[0] >= 0 }
                         , inc_month  => sub { $_[0] =~ m/^\d+$/ and $_[0] >= 0 }
@@ -293,6 +295,8 @@ sub sessioncgi ($$) {
                 );
                $form->title(sprintf(gettext("creating new events"), pagetitle(IkiWiki::basename($page))));
                $form->field(name => "do", type => "hidden", value => 'newevent', force => 1);
+               $form->field(name => "base", type => "hidden", force => 1
+                , value => ($form->field('base') ? $form->field('base') : $newevent_base));
                $form->field(name => "from_date", type => "hidden", value => '1', force => 1);
                $form->field(name => "to_date", type => "hidden", value => '1', force => 1);
                $form->field(name => "end_date", type => "hidden", value => '1', force => 1);
@@ -345,11 +349,10 @@ sub sessioncgi ($$) {
                
                if (($form->submitted eq 'Create' || $form->submitted eq 'Preview') && $form->validate) {
                        #IkiWiki::checksessionexpiry($cgi, $session, $cgi->param('sid'));
-                       my $newevent_base = $cgi->param('base');
-                       $newevent_base = $config{newevent_base}
-                               unless defined $newevent_base;
-                       $newevent_base = gettext('Agenda')
-                               unless defined $newevent_base;
+                       $newevent_base
+                        = $form->field('base')
+                        ? $form->field('base')
+                        : (defined $config{newevent_base} ? $config{newevent_base} : gettext('Agenda'));
                        my $end_times
                         = $form->field('end_times') == 0
                         ? undef : $form->field('end_times');
@@ -556,6 +559,7 @@ sub create ($$$$$) {
                 and not -l $config{srcdir}.'/'.$monthfile
                 and not -e _) {
                        my $tmpl_neweventmonth = template("neweventmonth.tmpl");
+                       $tmpl_neweventmonth->param(base      => $newevent_base);
                        $tmpl_neweventmonth->param(year      => $event->{from}->year());
                        $tmpl_neweventmonth->param(month     => sprintf('%02d', $event->{from}->month()));
                        $tmpl_neweventmonth->param(monthname => $months->{$event->{from}->month()});
@@ -575,6 +579,7 @@ sub create ($$$$$) {
                 and not -l $config{srcdir}.'/'.$dayfile
                 and not -e _) {
                        my $tmpl_neweventday = template("neweventday.tmpl");
+                       $tmpl_neweventday->param(base      => $newevent_base);
                        $tmpl_neweventday->param(year      => $event->{from}->year());
                        $tmpl_neweventday->param(month     => sprintf('%02d', $event->{from}->month()));
                        $tmpl_neweventday->param(monthname => $months->{$event->{from}->month()});