OSDN Git Service

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