1 ################################################################################
3 # Calendar¤Î¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¡£
5 ################################################################################
6 package plugin::calendar::CalendarHandler;
8 #===============================================================================
10 #===============================================================================
14 return bless $self,$class;
17 #===============================================================================
19 #===============================================================================
26 return $name."/".$year."-".$month."-".$day;
29 #===============================================================================
31 #===============================================================================
40 return "ÆüÉÕ¤¬¥µ¥Ý¡¼¥ÈÈϰϳ°¤Ç¤¹¡£" if($o_year >= 2030 || $o_year <= 1970);
43 my ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime($time);
46 my $today_year = $year;
47 my $today_month = $mon;
48 my $today_day = $mday;
50 my $o_yearmon = sprintf("%04d%02d",$o_year,$o_month);
52 while ($year!=$o_year || $mon!=$o_month) {
53 my $yearmon = sprintf("%04d%02d",$year,$mon);
54 if ($o_yearmon > $yearmon) {
55 $time += 24 * 60 * 60;
57 $time -= 24 * 60 * 60;
60 ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime($time);
65 ($id ne "") and ($id = "id=\"$id\"");
67 my $buf = "\n<div class=\"plugin-calendar\" $id>\n"
68 ."<table class=\"calendar\" summary=\"calendar\">\n";
69 $buf .= "<tr><td class=\"image\" colspan=\"7\"></td></tr>\n";
71 $buf .= " <td class=\"calendar-prev-month\" colspan=\"2\"><a href=\"".$wiki->create_url(&make_params($year,$mon,-1,$name,$template))."\"><<</a></td>\n";
72 $buf .= " <td class=\"calendar-current-month\" colspan=\"3\"><a href=\"".$wiki->create_url(&make_params($year,$mon, 0,$name,$template))."\">$o_year-$o_month</a></td>\n";
73 $buf .= " <td class=\"calendar-next-month\" colspan=\"2\"><a href=\"".$wiki->create_url(&make_params($year,$mon,+1,$name,$template))."\">>></a></td>\n";
76 my @week = ("Æü","·î","²Ð","¿å","ÌÚ","¶â","ÅÚ");
78 foreach my $d (@week) {
82 } elsif ($d eq "ÅÚ") {
87 $buf .= " <td class=\"calendar-$c\">$d</td>\n";
91 my $time = $time - (($mday-1) * 24 * 60 * 60);
95 while ($now_month==$mon) {
96 ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime($time);
99 if ($mon!=$now_month) {
104 for (my $i=0;$i<$wday;$i++) {
105 $buf .= " <td class=\"calendar-day\"></td>\n";
109 my $page =&make_pagename($year,$mon,$mday,$name);
110 # ͽÄ꤬¤¢¤ì¤Ð True¡¢Ìµ¤±¤ì¤Ð¡¢¤â¤·¤¯¤Ïµö²Ä¤¬Ìµ¤±¤ì¤Ð False¡£
111 my $have_plan = ($wiki->page_exists($page) && $wiki->can_show($page));
112 # º£Æü¤Ç¤¢¤ì¤Ð True¡¢¤½¤ì°Ê³°¤Ï False¡£
113 my $is_today = $year==$today_year && $mon==$today_month && $mday==$today_day;
114 $buf .= " <td class=\"calendar-day";
119 $is_today and do { push @class, "today"; };
121 $have_plan and do { push @class, "have"; };
122 if ($is_today || $have_plan) {
123 $buf .= " ".join(" ", @class);
127 my $param = {page=>$page};
128 $param->{template} = $template if (not($have_plan) && defined($template));
129 $buf .= "<a href=\"".$wiki->create_url($param)."\">$mday</a></td>\n";
135 $time += 24 * 60 * 60;
139 # ºÇ½ª¹Ô¤Î¶õÇò¤Î¥»¥ë¤ò½ÐÎÏ
140 for (my $i = $wday; $i <= 6; $i++) {
141 $buf .= " <td class=\"calendar-day\"></td>\n";
146 return $buf."</table>\n</div>\n";
149 #===============================================================================
150 # Á°·î¡¢Íâ·î¥¢¥ó¥«¤Î¥Ñ¥é¥á¡¼¥¿¤òºîÀ®
151 #===============================================================================
157 my $template = shift;
159 my $buf ={action=>'CALENDAR'};
165 } elsif ($month==0) {
170 $buf->{year} = $year;
171 $buf->{month} = $month;
172 $buf->{name} = $name;
173 $buf->{template} = $template if defined $template;
178 #===============================================================================
180 #===============================================================================
181 sub make_month_pages {
187 my $cgi = $wiki->get_CGI;
188 my $page = $cgi->param("page");
191 for (my $i=31;$i>=1;$i--) {
192 my $pagename = &make_pagename($year,$month,$i,$name);
193 if ($wiki->page_exists($pagename) && $wiki->can_show($pagename)) {
194 $buf .= "{{paragraph 3,[[$year-$month-$i|$pagename]]}}\n";
195 $buf .= "{{include $pagename}}\n";
201 #===============================================================================
202 # º£Æü°ÊÁ°¤ÎºÇ¿·x·ï¤òɽ¼¨¤¹¤ë
203 # RecentCalendar¤«¤é¤â»È¤¦¤Î¤Ç¥á¥½¥Ã¥É¤Ç¤Ï¤Ê¤¯¥â¥¸¥å¡¼¥ë´Ø¿ô¤È¤·¤Æ¼ÂÁõ
204 #===============================================================================
205 sub make_recent_pages {
207 my $name = quotemeta(shift);
210 my $cgi = $wiki->get_CGI;
212 $count =~ m/\s*([-]?\d*)\s*([+]?)([-]?)/;
213 my $reverse = ($3 ? 1 : 0);
214 my $count = ($1+0 ? $1 : 1);
215 my $ignore_today = ($2 ? 1 : 0);
217 my @pages = $wiki->get_page_list;
219 # ¥«¥ì¥ó¥À̾/ǯ-·î-Æü¤À¤±¼è¤ê½Ð¤¹
220 @pages = grep(/^$name\/\d+-\d+-\d+$/,@pages);
222 # ¿·¤·¤¤ÆüÉÕ½ç¤Ë¥½¡¼¥È
224 $a=~/^$name\/(\d+)-(\d+)-(\d+)$/;
225 my $a_tmp = sprintf("%04d%02d%02d",$1,$2,$3);
227 $b=~/^$name\/(\d+)-(\d+)-(\d+)$/;
228 my $b_tmp = sprintf("%04d%02d%02d",$1,$2,$3);
230 return $b_tmp<=>$a_tmp;
233 if ( $reverse ) { # $reverse ¤¬¿¿¤Ê¤é¡¢¥ê¥¹¥È¤òµÕž
234 @pages = reverse @pages;
237 # ̤Íè(²áµî)¤Î¤â¤Î¤Ï½ü¤¯
239 my ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime(time());
240 my $today = sprintf("%04d%02d%02d",$year+1900,$mon+1,$mday);
242 $_=~/^$name\/(\d+)-(\d+)-(\d+)$/;
243 my $tmp = sprintf("%04d%02d%02d",$1,$2,$3);
245 if ($tmp >= ($today + ($ignore_today ? 1 : 0))) {
249 if ($tmp <= ($today - ($ignore_today ? 1 : 0))) {
255 # calendar¥×¥é¥°¥¤¥ó¤ÈƱÍͤÎɽ¼¨
257 foreach my $page (@pages2) {
258 $page =~ /((\d+)-(\d+)-(\d+))$/;
259 if($wiki->can_show($page)){
262 $source .= "{{paragraph 3,[[$1|$page]]}}\n";
263 $source .= "{{include $page,$para}}\n";
265 $source .= "{{paragraph 3,[[$1|$page]]}}\n";
266 $source .= "{{include $page}}\n";
275 #===============================================================================
276 # º£Æü°Ê¹ß¤ÎºÇ¶áx·ï¤òɽ¼¨¤¹¤ë
277 # FutureCalendar¤«¤é¤â»È¤¦¤Î¤Ç¥á¥½¥Ã¥É¤Ç¤Ï¤Ê¤¯¥â¥¸¥å¡¼¥ë´Ø¿ô¤È¤·¤Æ¼ÂÁõ
278 #===============================================================================
279 sub make_future_pages {
280 return &make_recent_pages(shift, shift, (shift)."-", shift);
283 #===============================================================================
284 # ¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¥á¥½¥Ã¥É
285 #===============================================================================
289 my $cgi = $wiki->get_CGI;
291 my $name = $cgi->param("name");
292 my $year = $cgi->param("year");
293 my $month = $cgi->param("month");
294 my $template = $cgi->param("template");
296 if (not $wiki->page_exists($template)) {
300 if ($name eq "" || !Util::check_numeric($year) || !Util::check_numeric($month)) {
301 return $wiki->error("¥Ñ¥é¥á¡¼¥¿¤¬ÉÔÀµ¤Ç¤¹¡£");
304 $wiki->set_title("$name/$year-$month");
305 return &make_calendar($wiki,$year,$month,$name,$template).
306 $wiki->process_wiki(&make_month_pages($wiki,$year,$month,$name));