<?php
-// $Id: vote.inc.php,v 1.8 2002/11/29 00:09:01 panda Exp $
-
-function plugin_vote_init()
-{
- $_plugin_vote_messages = array(
- '_vote_plugin_choice' => 'ÁªÂò»è',
- '_vote_plugin_votes' => 'Åêɼ',
- );
- set_plugin_messages($_plugin_vote_messages);
-}
+// PukiWiki - Yet another WikiWikiWeb clone.
+// vote.inc.php
+// Copyright 2002-2017 PukiWiki Development Team
+// License: GPL v2 or (at your option) any later version
+//
+// Vote box plugin
function plugin_vote_action()
{
- global $post,$vars,$script,$cols,$rows,$del_backup,$do_backup;
- global $_title_collided,$_msg_collided,$_title_updated;
- global $_vote_plugin_choice, $_vote_plugin_votes;
+ global $vars, $cols,$rows;
+ global $_title_collided, $_msg_collided, $_title_updated;
+ global $_vote_plugin_votes;
- $postdata_old = file(get_filename(encode($post["refer"])));
- $vote_no = 0;
+ $script = get_base_uri();
+ if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing');
- foreach($postdata_old as $line)
- {
- if(preg_match("/^#vote\((.*)\)$/",$line,$arg))
- {
- if($vote_no == $post["vote_no"])
- {
- $args = explode(",",$arg[1]);
-
- foreach($args as $arg)
- {
- if(preg_match("/^(.+)\[(\d+)\]$/",$arg,$match))
- {
- $arg = $match[1];
- $cnt = $match[2];
- }
- else
- {
- $cnt = 0;
- }
-
- if($post["vote_$arg"]==$_vote_plugin_votes) $cnt++;
-
- $votes[] = $arg.'['.$cnt.']';
- }
-
- $vote_str = "#vote(" . @join(",",$votes) . ")\n";
-
- $postdata_input = $vote_str;
- $postdata .= $vote_str;
- $line = "";
+ $postdata_old = get_source($vars['refer']);
+
+ $vote_no = 0;
+ $title = $body = $postdata = $postdata_input = $vote_str = '';
+ $matches = array();
+ foreach($postdata_old as $line) {
+
+ if (! preg_match('/^#vote(?:\((.*)\)(.*))?$/i', $line, $matches) ||
+ $vote_no++ != $vars['vote_no']) {
+ $postdata .= $line;
+ continue;
+ }
+ $args = explode(',', $matches[1]);
+ $lefts = isset($matches[2]) ? $matches[2] : '';
+
+ foreach($args as $arg) {
+ $cnt = 0;
+ if (preg_match('/^(.+)\[(\d+)\]$/', $arg, $matches)) {
+ $arg = $matches[1];
+ $cnt = $matches[2];
}
- $vote_no++;
+ $e_arg = encode($arg);
+ if (! empty($vars['vote_' . $e_arg]) && $vars['vote_' . $e_arg] == $_vote_plugin_votes)
+ ++$cnt;
+
+ $votes[] = $arg . '[' . $cnt . ']';
}
- $postdata .= $line;
+
+ $vote_str = '#vote(' . @join(',', $votes) . ')' . $lefts . "\n";
+ $postdata_input = $vote_str;
+ $postdata .= $vote_str;
}
- if(md5(@join("",@file(get_filename(encode($post["refer"]))))) != $post["digest"])
- {
+ if (md5(get_source($vars['refer'], TRUE, TRUE)) !== $vars['digest']) {
$title = $_title_collided;
- $body = "$_msg_collided\n";
-
- $body .= "<form action=\"$script?cmd=preview\" method=\"post\">\n"
- ."<div>\n"
- ."<input type=\"hidden\" name=\"refer\" value=\"".htmlspecialchars($post["refer"])."\" />\n"
- ."<input type=\"hidden\" name=\"digest\" value=\"".htmlspecialchars($post["digest"])."\" />\n"
- ."<textarea name=\"msg\" rows=\"$rows\" cols=\"$cols\" wrap=\"virtual\" id=\"textarea\">".htmlspecialchars($postdata_input)."</textarea><br />\n"
- ."</div>\n"
- ."</form>\n";
- }
- else
- {
- if(is_page($post["refer"]))
- $oldpostdata = join("",file(get_filename(encode($post["refer"]))));
- else
- $oldpostdata = "\n";
- if($postdata)
- $diffdata = do_diff($oldpostdata,$postdata);
- file_write(DIFF_DIR,$post["refer"],$diffdata);
-
- if(is_page($post["refer"]))
- $oldposttime = filemtime(get_filename(encode($post["refer"])));
- else
- $oldposttime = time();
-
- if(!$postdata && $del_backup)
- backup_delete(BACKUP_DIR.encode($post["refer"]).".txt");
- else if($do_backup && is_page($post["refer"]))
- make_backup(encode($post["refer"]).".txt",$oldpostdata,$oldposttime);
-
- file_write(DATA_DIR,$post["refer"],$postdata);
-
- is_page($post["refer"],true);
-
+ $s_refer = htmlsc($vars['refer']);
+ $s_digest = htmlsc($vars['digest']);
+ $s_postdata_input = htmlsc($postdata_input);
+ $body = <<<EOD
+$_msg_collided
+<form action="$script?cmd=preview" method="post">
+ <div>
+ <input type="hidden" name="refer" value="$s_refer" />
+ <input type="hidden" name="digest" value="$s_digest" />
+ <textarea name="msg" rows="$rows" cols="$cols" id="textarea">$s_postdata_input</textarea><br />
+ </div>
+</form>
+
+EOD;
+ } else {
+ page_write($vars['refer'], $postdata);
$title = $_title_updated;
}
- $retvars["msg"] = $title;
- $retvars["body"] = $body;
+ $vars['page'] = $vars['refer'];
- $post["page"] = $post["refer"];
- $vars["page"] = $post["refer"];
-
- return $retvars;
+ return array('msg'=>$title, 'body'=>$body);
}
+
function plugin_vote_convert()
{
- global $script,$vars,$vote_no,$digest;
+ global $vars, $digest;
global $_vote_plugin_choice, $_vote_plugin_votes;
+ static $number = array();
+
+ $page = isset($vars['page']) ? $vars['page'] : '';
+
+ // Vote-box-id in the page
+ if (! isset($number[$page])) $number[$page] = 0; // Init
+ $vote_no = $number[$page]++;
+
+ if (! func_num_args()) return '#vote(): No arguments<br />' . "\n";
+
+ if (PKWK_READONLY) {
+ $_script = '';
+ $_submit = 'hidden';
+ } else {
+ $_script = get_base_uri();
+ $_submit = 'submit';
+ }
- $args = func_get_args();
-
- if(!func_num_args()) return FALSE;
-
- $string = ""
- . "<form action=\"$script\" method=\"post\">\n"
- . "<table cellspacing=\"0\" cellpadding=\"2\" class=\"style_table\">\n"
- . "<tr>\n"
- . "<td align=\"left\" class=\"vote_label\" style=\"padding-left:1em;padding-right:1em\"><strong>$_vote_plugin_choice</strong>"
- . "<input type=\"hidden\" name=\"plugin\" value=\"vote\" />\n"
- . "<input type=\"hidden\" name=\"refer\" value=\"".htmlspecialchars($vars["page"])."\" />\n"
- . "<input type=\"hidden\" name=\"vote_no\" value=\"".htmlspecialchars($vote_no)."\" />\n"
- . "<input type=\"hidden\" name=\"digest\" value=\"".htmlspecialchars($digest)."\" />\n"
- . "</td>\n"
- . "<td align=\"center\" class=\"vote_label\"><strong>$_vote_plugin_votes</strong></td>\n"
- . "</tr>\n";
+ $args = func_get_args();
+ $s_page = htmlsc($page);
+ $s_digest = htmlsc($digest);
+
+ $body = <<<EOD
+<form action="$_script" method="post">
+ <table cellspacing="0" cellpadding="2" class="style_table" summary="vote">
+ <tr>
+ <td align="left" class="vote_label" style="padding-left:1em;padding-right:1em"><strong>$_vote_plugin_choice</strong>
+ <input type="hidden" name="plugin" value="vote" />
+ <input type="hidden" name="refer" value="$s_page" />
+ <input type="hidden" name="vote_no" value="$vote_no" />
+ <input type="hidden" name="digest" value="$s_digest" />
+ </td>
+ <td align="center" class="vote_label"><strong>$_vote_plugin_votes</strong></td>
+ </tr>
+
+EOD;
$tdcnt = 0;
- foreach($args as $arg)
- {
+ $matches = array();
+ foreach($args as $arg) {
$cnt = 0;
- if(preg_match("/^(.+)\[(\d+)\]$/",$arg,$match))
- {
- $arg = $match[1];
- $cnt = $match[2];
+ if (preg_match('/^(.+)\[(\d+)\]$/', $arg, $matches)) {
+ $arg = $matches[1];
+ $cnt = $matches[2];
}
+ $e_arg = encode($arg);
$link = make_link($arg);
- if($tdcnt++ % 2) $cls = "vote_td1";
- else $cls = "vote_td2";
+ $cls = ($tdcnt++ % 2) ? 'vote_td1' : 'vote_td2';
+
+ $body .= <<<EOD
+ <tr>
+ <td align="left" class="$cls" style="padding-left:1em;padding-right:1em;">$link</td>
+ <td align="right" class="$cls">$cnt
+ <input type="$_submit" name="vote_$e_arg" value="$_vote_plugin_votes" class="submit" />
+ </td>
+ </tr>
- $string .= "<tr>"
- . "<td align=\"left\" class=\"$cls\" style=\"padding-left:1em;padding-right:1em;\" nowrap=\"nowrap\">$link</td>"
- . "<td align=\"right\" class=\"$cls\" nowrap=\"nowrap\">$cnt <input type=\"submit\" name=\"vote_".htmlspecialchars($arg)."\" value=\"$_vote_plugin_votes\" class=\"submit\" /></td>"
- . "</tr>\n";
+EOD;
}
- $string .= "</table></form>\n";
+ $body .= <<<EOD
+ </table>
+</form>
- $vote_no++;
+EOD;
- return $string;
+ return $body;
}
-?>