OSDN Git Service

Merge tag 'r1_5_0' from branch_r1_5
[pukiwiki/pukiwiki.git] / plugin / vote.inc.php
1 <?php
2 // PukiWiki - Yet another WikiWikiWeb clone.
3 // $Id: vote.inc.php,v 1.27 2011/01/25 15:01:01 henoheno Exp $
4 // Copyright (C) 2002-2005, 2007 PukiWiki Developers Team
5 // License: GPL v2 or (at your option) any later version
6 //
7 // Vote box plugin
8
9 function plugin_vote_action()
10 {
11         global $vars, $script, $cols,$rows;
12         global $_title_collided, $_msg_collided, $_title_updated;
13         global $_vote_plugin_votes;
14
15         if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing');
16
17         $postdata_old  = get_source($vars['refer']);
18
19         $vote_no = 0;
20         $title = $body = $postdata = $postdata_input = $vote_str = '';
21         $matches = array();
22         foreach($postdata_old as $line) {
23
24                 if (! preg_match('/^#vote(?:\((.*)\)(.*))?$/i', $line, $matches) ||
25                     $vote_no++ != $vars['vote_no']) {
26                         $postdata .= $line;
27                         continue;
28                 }
29                 $args  = explode(',', $matches[1]);
30                 $lefts = isset($matches[2]) ? $matches[2] : '';
31
32                 foreach($args as $arg) {
33                         $cnt = 0;
34                         if (preg_match('/^(.+)\[(\d+)\]$/', $arg, $matches)) {
35                                 $arg = $matches[1];
36                                 $cnt = $matches[2];
37                         }
38                         $e_arg = encode($arg);
39                         if (! empty($vars['vote_' . $e_arg]) && $vars['vote_' . $e_arg] == $_vote_plugin_votes)
40                                 ++$cnt;
41
42                         $votes[] = $arg . '[' . $cnt . ']';
43                 }
44
45                 $vote_str       = '#vote(' . @join(',', $votes) . ')' . $lefts . "\n";
46                 $postdata_input = $vote_str;
47                 $postdata      .= $vote_str;
48         }
49
50         if (md5(@join('', get_source($vars['refer']))) != $vars['digest']) {
51                 $title = $_title_collided;
52
53                 $s_refer          = htmlsc($vars['refer']);
54                 $s_digest         = htmlsc($vars['digest']);
55                 $s_postdata_input = htmlsc($postdata_input);
56                 $body = <<<EOD
57 $_msg_collided
58 <form action="$script?cmd=preview" method="post">
59  <div>
60   <input type="hidden" name="refer"  value="$s_refer" />
61   <input type="hidden" name="digest" value="$s_digest" />
62   <textarea name="msg" rows="$rows" cols="$cols" id="textarea">$s_postdata_input</textarea><br />
63  </div>
64 </form>
65
66 EOD;
67         } else {
68                 page_write($vars['refer'], $postdata);
69                 $title = $_title_updated;
70         }
71
72         $vars['page'] = $vars['refer'];
73
74         return array('msg'=>$title, 'body'=>$body);
75 }
76
77 function plugin_vote_convert()
78 {
79         global $script, $vars,  $digest;
80         global $_vote_plugin_choice, $_vote_plugin_votes;
81         static $number = array();
82
83         $page = isset($vars['page']) ? $vars['page'] : '';
84         
85         // Vote-box-id in the page
86         if (! isset($number[$page])) $number[$page] = 0; // Init
87         $vote_no = $number[$page]++;
88
89         if (! func_num_args()) return '#vote(): No arguments<br />' . "\n";
90
91         if (PKWK_READONLY) {
92                 $_script = '';
93                 $_submit = 'hidden';
94         } else {
95                 $_script = $script;
96                 $_submit = 'submit';
97         }
98
99         $args     = func_get_args();
100         $s_page   = htmlsc($page);
101         $s_digest = htmlsc($digest);
102
103         $body = <<<EOD
104 <form action="$_script" method="post">
105  <table cellspacing="0" cellpadding="2" class="style_table" summary="vote">
106   <tr>
107    <td align="left" class="vote_label" style="padding-left:1em;padding-right:1em"><strong>$_vote_plugin_choice</strong>
108     <input type="hidden" name="plugin"  value="vote" />
109     <input type="hidden" name="refer"   value="$s_page" />
110     <input type="hidden" name="vote_no" value="$vote_no" />
111     <input type="hidden" name="digest"  value="$s_digest" />
112    </td>
113    <td align="center" class="vote_label"><strong>$_vote_plugin_votes</strong></td>
114   </tr>
115
116 EOD;
117
118         $tdcnt = 0;
119         $matches = array();
120         foreach($args as $arg) {
121                 $cnt = 0;
122
123                 if (preg_match('/^(.+)\[(\d+)\]$/', $arg, $matches)) {
124                         $arg = $matches[1];
125                         $cnt = $matches[2];
126                 }
127                 $e_arg = encode($arg);
128
129                 $link = make_link($arg);
130
131                 $cls = ($tdcnt++ % 2)  ? 'vote_td1' : 'vote_td2';
132
133                 $body .= <<<EOD
134   <tr>
135    <td align="left"  class="$cls" style="padding-left:1em;padding-right:1em;">$link</td>
136    <td align="right" class="$cls">$cnt&nbsp;&nbsp;
137     <input type="$_submit" name="vote_$e_arg" value="$_vote_plugin_votes" class="submit" />
138    </td>
139   </tr>
140
141 EOD;
142         }
143
144         $body .= <<<EOD
145  </table>
146 </form>
147
148 EOD;
149
150         return $body;
151 }
152 ?>