X-Git-Url: https://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/comptes/ajouter.php?a=blobdiff_plain;f=newevent.pm;h=ec34b724877646e25e6c51a9d3ea307134a8a2a6;hb=a6478d7f2e1f28bb2324a2fa6e030f73c412ed4b;hp=9db731d79a417393c283558ae5ea930774b74854;hpb=9b55970ea225ad0192a31737e6f4ab4f3bbab043;p=ikiwiki%2Fevents.git diff --git a/newevent.pm b/newevent.pm index 9db731d..ec34b72 100644 --- a/newevent.pm +++ b/newevent.pm @@ -29,7 +29,7 @@ sub getsetup () { , rebuild => undef , section => "misc" } - , newevent_base => + , base => { type => "string" , example => "Agenda" , description => "prefix of the agenda hierarchy" @@ -38,6 +38,12 @@ sub getsetup () { } ); } +sub tmpl ($$) { + my ($base, $model) = @_; + my $page = IkiWiki::dirname($base).'/'.'templates/'.$model; + my $file = defined srcfile($page, 1) ? '/'.$page : $model; + return template($file); + } sub date_of_form ($$;%) { my ($form, $prefix, %default) = @_; %default = @@ -79,7 +85,7 @@ sub duration_of_form ($$) { return $dur; }; sub page_of_event ($$$$$) { - my ($form, $from_date, $to_date, $name, $newevent_base) = @_; + my ($form, $from_date, $to_date, $name, $base) = @_; my $time = ''; if ($form->field('from_hour') ne '' or $form->field('from_minute') ne '') { if ($from_date->hour() == $to_date->hour() @@ -93,8 +99,8 @@ sub page_of_event ($$$$$) { } } return - ( $newevent_base - . ($newevent_base?'/':'').$from_date->year() + ( $base + . ($base?'/':'').$from_date->year() . '/'.sprintf('%02d', $from_date->month()) . '/'.sprintf('%02d', $from_date->day()) . '/'. ($time ne '' ? $time . '/' : '') @@ -156,7 +162,7 @@ sub post_newevent ($$$) { } sub preprocess (@) { #my %params = - # ( base => ($config{newevent_base} ? $config{newevent_base} : gettext('Agenda')) + # ( base => ($config{base} ? $config{base} : gettext('Agenda')) # , @_ ); #($form, $buttons) = newevent_form() # if not defined $form; @@ -167,6 +173,9 @@ sub sessioncgi ($$) { my ($cgi, $session) = @_; if (defined $cgi->param('do') && $cgi->param('do') eq "newevent") { # TOTRY: decode_cgi_utf8($cgi); + my $base = Encode::decode_utf8(URI::Escape::uri_unescape(IkiWiki::possibly_foolish_untaint($cgi->param('base')))); + &IkiWiki::check_canedit($base, $cgi, $session); + my $page = Encode::decode_utf8(URI::Escape::uri_unescape(IkiWiki::possibly_foolish_untaint($cgi->param('page')))); my $now_date = DateTime->now ( time_zone => 'local' @@ -196,8 +205,6 @@ sub sessioncgi ($$) { : 1; my @dow_order = ($week_start_day .. 6, 0 .. $week_start_day-1); - 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); @@ -293,10 +300,10 @@ sub sessioncgi ($$) { } } ); + $base = $form->field('base') ? $form->field('base') : $base; $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 => "base", type => "hidden", force => 1 , value => $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); @@ -333,7 +340,7 @@ sub sessioncgi ($$) { $form->field(name => "inc_day", type => 'text', value => '0', size => 2); $form->field(name => "inc_hour", type => 'text', value => '0', size => 2); $form->field(name => "inc_minute", type => 'text', value => '0', size => 2); - my $tmpl_neweventcontent = template("neweventcontent.tmpl"); + my $tmpl_neweventcontent = tmpl($base, 'neweventcontent.tmpl'); $tmpl_neweventcontent->param(title => gettext('Title of the event')); $tmpl_neweventcontent->param(tags => [map {{name => $_}} (sort keys %$tags)]); $form->field(name => "content", type => "textarea", size => 30, rows => 20, cols => 80 @@ -349,10 +356,10 @@ sub sessioncgi ($$) { if (($form->submitted eq 'Create' || $form->submitted eq 'Preview') && $form->validate) { #IkiWiki::checksessionexpiry($cgi, $session, $cgi->param('sid')); - $newevent_base + $base = $form->field('base') ? $form->field('base') - : (defined $config{newevent_base} ? $config{newevent_base} : gettext('Agenda')); + : (defined $config{base} ? $config{base} : gettext('Agenda')); my $end_times = $form->field('end_times') == 0 ? undef : $form->field('end_times'); @@ -379,7 +386,7 @@ sub sessioncgi ($$) { while (++$events_try <= $events_max and (not defined $end_times or --$end_times >= 0) and (not defined $end_date or DateTime->compare($from_date, $end_date) <= 0)) { - my $dest = page_of_event($form, $from_date, $to_date, $name, $newevent_base); + my $dest = page_of_event($form, $from_date, $to_date, $name, $base); my $week = $from_date->weekday_of_month(); my $day = $now_date->{locale}->day_format_wide->[$from_date->day_of_week()-1]; if (not defined $dom or exists $dom->{"$week° $day"}) { @@ -397,7 +404,7 @@ sub sessioncgi ($$) { } error("events try per commit overflow: $events_max") unless $events_try <= $events_max; - my $tmpl_neweventpage = template("neweventpage.tmpl"); + my $tmpl_neweventpage = tmpl($base, 'neweventpage.tmpl'); my $i = 0; foreach (@events) { $tmpl_neweventpage->clear_params(); @@ -427,7 +434,7 @@ sub sessioncgi ($$) { IkiWiki::disable_commit_hook() } foreach my $event (@events) { - create($event, $cgi, $session, \%months, $newevent_base); + create($event, $cgi, $session, \%months, $base); } if ($config{rcs}) { IkiWiki::rcs_commit_staged @@ -534,7 +541,7 @@ sub preview($$$$) { } } sub create ($$$$$) { - my ($event, $cgi, $session, $months, $newevent_base) = @_; + my ($event, $cgi, $session, $months, $base) = @_; check_cannewevent ( $event->{page} , $event->{file} @@ -550,16 +557,16 @@ sub create ($$$$$) { } # month page my $monthpage = - ( $newevent_base - . ($newevent_base?'/':'').$event->{from}->year() + ( $base + . ($base?'/':'').$event->{from}->year() . '/'.sprintf('%02d', $event->{from}->month()) ); my $monthfile = IkiWiki::newpagefile($monthpage, $pageext); if (not exists $pagesources{$monthpage} and not -l $config{srcdir}.'/'.$monthfile and not -e _) { - my $tmpl_neweventmonth = template("neweventmonth.tmpl"); - $tmpl_neweventmonth->param(base => $newevent_base); + my $tmpl_neweventmonth = tmpl($base, 'neweventmonth.tmpl'); + $tmpl_neweventmonth->param(base => $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()}); @@ -578,8 +585,8 @@ sub create ($$$$$) { if (not exists $pagesources{$daypage} and not -l $config{srcdir}.'/'.$dayfile and not -e _) { - my $tmpl_neweventday = template("neweventday.tmpl"); - $tmpl_neweventday->param(base => $newevent_base); + my $tmpl_neweventday = tmpl($base, 'neweventday.tmpl'); + $tmpl_neweventday->param(base => $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()});