OSDN Git Service

BugTrack/2062 Remove Referer function config default page
[pukiwiki/pukiwiki.git] / plugin / calendar2.inc.php
1 <?php
2 // $Id: calendar2.inc.php,v 1.24 2011/01/25 15:01:01 henoheno Exp $
3 //
4 // Calendar2 plugin
5 //
6 // Usage:
7 //      #calendar2({[pagename|*],[yyyymm],[off]})
8 //      off: Don't view today's
9
10 function plugin_calendar2_convert()
11 {
12         global $script, $vars, $post, $get, $weeklabels, $WikiName, $BracketName;
13         global $_calendar2_plugin_edit, $_calendar2_plugin_empty;
14
15         $date_str = get_date('Ym');
16         $base     = strip_bracket($vars['page']);
17
18         $today_view = TRUE;
19         if (func_num_args()) {
20                 $args = func_get_args();
21                 foreach ($args as $arg) {
22                         if (is_numeric($arg) && strlen($arg) == 6) {
23                                 $date_str = $arg;
24                         } else if ($arg == 'off') {
25                                 $today_view = FALSE;
26                         } else {
27                                 $base = strip_bracket($arg);
28                         }
29                 }
30         }
31         if ($base == '*') {
32                 $base   = '';
33                 $prefix = '';
34         } else {
35                 $prefix = $base . '/';
36         }
37         $r_base   = rawurlencode($base);
38         $s_base   = htmlsc($base);
39         $r_prefix = rawurlencode($prefix);
40         $s_prefix = htmlsc($prefix);
41
42         $yr  = substr($date_str, 0, 4);
43         $mon = substr($date_str, 4, 2);
44         if ($yr != get_date('Y') || $mon != get_date('m')) {
45                 $now_day = 1;
46                 $other_month = 1;
47         } else {
48                 $now_day = get_date('d');
49                 $other_month = 0;
50         }
51
52         $today = getdate(mktime(0, 0, 0, $mon, $now_day, $yr) - LOCALZONE + ZONETIME);
53
54         $m_num = $today['mon'];
55         $d_num = $today['mday'];
56         $year  = $today['year'];
57
58         $f_today = getdate(mktime(0, 0, 0, $m_num, 1, $year) - LOCALZONE + ZONETIME);
59         $wday = $f_today['wday'];
60         $day  = 1;
61
62         $m_name = $year . '.' . $m_num;
63
64         $y = substr($date_str, 0, 4) + 0;
65         $m = substr($date_str, 4, 2) + 0;
66
67         $prev_date_str = ($m == 1) ?
68                 sprintf('%04d%02d', $y - 1, 12) : sprintf('%04d%02d', $y, $m - 1);
69
70         $next_date_str = ($m == 12) ?
71                 sprintf('%04d%02d', $y + 1, 1) : sprintf('%04d%02d', $y, $m + 1);
72
73         $ret = '';
74         if ($today_view) {
75                 $ret = '<table border="0" summary="calendar frame">' . "\n" .
76                         ' <tr>' . "\n" .
77                         '  <td valign="top">' . "\n";
78         }
79         $ret .= <<<EOD
80    <table class="style_calendar" cellspacing="1" width="150" border="0" summary="calendar body">
81     <tr>
82      <td class="style_td_caltop" colspan="7">
83       <a href="$script?plugin=calendar2&amp;file=$r_base&amp;date=$prev_date_str">&lt;&lt;</a>
84       <strong>$m_name</strong>
85       <a href="$script?plugin=calendar2&amp;file=$r_base&amp;date=$next_date_str">&gt;&gt;</a>
86 EOD;
87
88         if ($prefix) $ret .= "\n" .
89                 '      <br />[<a href="' . $script . '?' . $r_base . '">' . $s_base . '</a>]';
90
91         $ret .= "\n" .
92                 '     </td>' . "\n" .
93                 '    </tr>'  . "\n" .
94                 '    <tr>'   . "\n";
95
96         foreach($weeklabels as $label)
97                 $ret .= '     <td class="style_td_week">' . $label . '</td>' . "\n";
98
99         $ret .= '    </tr>' . "\n" .
100                 '    <tr>'  . "\n";
101         // Blank
102         for ($i = 0; $i < $wday; $i++)
103                 $ret .= '     <td class="style_td_blank">&nbsp;</td>' . "\n";
104
105         while (checkdate($m_num, $day, $year)) {
106                 $dt     = sprintf('%4d-%02d-%02d', $year, $m_num, $day);
107                 $page   = $prefix . $dt;
108                 $r_page = pagename_urlencode($page);
109                 $s_page = htmlsc($page);
110
111                 if ($wday == 0 && $day > 1)
112                         $ret .=
113                         '    </tr>' . "\n" .
114                         '    <tr>' . "\n";
115
116                 $style = 'style_td_day'; // Weekday
117                 if (! $other_month && ($day == $today['mday']) && ($m_num == $today['mon']) && ($year == $today['year'])) { // Today
118                         $style = 'style_td_today';
119                 } else if ($wday == 0) { // Sunday
120                         $style = 'style_td_sun';
121                 } else if ($wday == 6) { //  Saturday
122                         $style = 'style_td_sat';
123                 }
124
125                 if (is_page($page)) {
126                         $link = '<a href="' . $script . '?' . $r_page . '" title="' . $s_page .
127                                 '"><strong>' . $day . '</strong></a>';
128                 } else {
129                         if (PKWK_READONLY) {
130                                 $link = '<span class="small">' . $day . '</small>';
131                         } else {
132                                 $link = $script . '?cmd=edit&amp;page=' . $r_page . '&amp;refer=' . $r_base;
133                                 $link = '<a class="small" href="' . $link . '" title="' . $s_page . '">' . $day . '</a>';
134                         }
135                 }
136
137                 $ret .= '     <td class="' . $style . '">' . "\n" .
138                         '      ' . $link . "\n" .
139                         '     </td>' . "\n";
140                 ++$day;
141                 $wday = ++$wday % 7;
142         }
143
144         if ($wday > 0)
145                 while ($wday++ < 7) // Blank
146                         $ret .= '     <td class="style_td_blank">&nbsp;</td>' . "\n";
147
148         $ret .= '    </tr>'   . "\n" .
149                 '   </table>' . "\n";
150
151         if ($today_view) {
152                 $tpage = $prefix . sprintf('%4d-%02d-%02d', $today['year'],
153                         $today['mon'], $today['mday']);
154                 $r_tpage = rawurlencode($tpage);
155                 if (is_page($tpage)) {
156                         $_page = $vars['page'];
157                         $get['page'] = $post['page'] = $vars['page'] = $tpage;
158                         $str = convert_html(get_source($tpage));
159                         $str .= '<hr /><a class="small" href="' . $script .
160                                 '?cmd=edit&amp;page=' . $r_tpage . '">' .
161                                 $_calendar2_plugin_edit . '</a>';
162                         $get['page'] = $post['page'] = $vars['page'] = $_page;
163                 } else {
164                         $str = sprintf($_calendar2_plugin_empty,
165                                 make_pagelink(sprintf('%s%4d-%02d-%02d', $prefix,
166                                 $today['year'], $today['mon'], $today['mday'])));
167                 }
168                 $ret .= '  </td>' . "\n" .
169                         '  <td valign="top">' . $str . '</td>' . "\n" .
170                         ' </tr>'   . "\n" .
171                         '</table>' . "\n";
172         }
173
174         return $ret;
175 }
176
177 function plugin_calendar2_action()
178 {
179         global $vars;
180
181         $page = strip_bracket($vars['page']);
182         $vars['page'] = '*';
183         if ($vars['file']) $vars['page'] = $vars['file'];
184
185         $date = $vars['date'];
186
187         if ($date == '') $date = get_date('Ym');
188         $yy = sprintf('%04d.%02d', substr($date, 0, 4),substr($date, 4, 2));
189
190         $aryargs = array($vars['page'], $date);
191         $s_page  = htmlsc($vars['page']);
192
193         $ret['msg']  = 'calendar ' . $s_page . '/' . $yy;
194         $ret['body'] = call_user_func_array('plugin_calendar2_convert', $aryargs);
195
196         $vars['page'] = $page;
197
198         return $ret;
199 }
200