PageRenderTime 45ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/plugin/vote.inc.php

https://github.com/miya5n/pukiwiki
PHP | 152 lines | 115 code | 30 blank | 7 comment | 14 complexity | 9b2df659a596ccc946e2a582b67bbb59 MD5 | raw file
Possible License(s): GPL-2.0
  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. function plugin_vote_action()
  9. {
  10. global $vars, $script, $cols,$rows;
  11. global $_title_collided, $_msg_collided, $_title_updated;
  12. global $_vote_plugin_votes;
  13. if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing');
  14. $postdata_old = get_source($vars['refer']);
  15. $vote_no = 0;
  16. $title = $body = $postdata = $postdata_input = $vote_str = '';
  17. $matches = array();
  18. foreach($postdata_old as $line) {
  19. if (! preg_match('/^#vote(?:\((.*)\)(.*))?$/i', $line, $matches) ||
  20. $vote_no++ != $vars['vote_no']) {
  21. $postdata .= $line;
  22. continue;
  23. }
  24. $args = explode(',', $matches[1]);
  25. $lefts = isset($matches[2]) ? $matches[2] : '';
  26. foreach($args as $arg) {
  27. $cnt = 0;
  28. if (preg_match('/^(.+)\[(\d+)\]$/', $arg, $matches)) {
  29. $arg = $matches[1];
  30. $cnt = $matches[2];
  31. }
  32. $e_arg = encode($arg);
  33. if (! empty($vars['vote_' . $e_arg]) && $vars['vote_' . $e_arg] == $_vote_plugin_votes)
  34. ++$cnt;
  35. $votes[] = $arg . '[' . $cnt . ']';
  36. }
  37. $vote_str = '#vote(' . @join(',', $votes) . ')' . $lefts . "\n";
  38. $postdata_input = $vote_str;
  39. $postdata .= $vote_str;
  40. }
  41. if (md5(get_source($vars['refer'], TRUE, TRUE)) !== $vars['digest']) {
  42. $title = $_title_collided;
  43. $s_refer = htmlsc($vars['refer']);
  44. $s_digest = htmlsc($vars['digest']);
  45. $s_postdata_input = htmlsc($postdata_input);
  46. $body = <<<EOD
  47. $_msg_collided
  48. <form action="$script?cmd=preview" method="post">
  49. <div>
  50. <input type="hidden" name="refer" value="$s_refer" />
  51. <input type="hidden" name="digest" value="$s_digest" />
  52. <textarea name="msg" rows="$rows" cols="$cols" id="textarea">$s_postdata_input</textarea><br />
  53. </div>
  54. </form>
  55. EOD;
  56. } else {
  57. page_write($vars['refer'], $postdata);
  58. $title = $_title_updated;
  59. }
  60. $vars['page'] = $vars['refer'];
  61. return array('msg'=>$title, 'body'=>$body);
  62. }
  63. function plugin_vote_convert()
  64. {
  65. global $script, $vars, $digest;
  66. global $_vote_plugin_choice, $_vote_plugin_votes;
  67. static $number = array();
  68. $page = isset($vars['page']) ? $vars['page'] : '';
  69. // Vote-box-id in the page
  70. if (! isset($number[$page])) $number[$page] = 0; // Init
  71. $vote_no = $number[$page]++;
  72. if (! func_num_args()) return '#vote(): No arguments<br />' . "\n";
  73. if (PKWK_READONLY) {
  74. $_script = '';
  75. $_submit = 'hidden';
  76. } else {
  77. $_script = $script;
  78. $_submit = 'submit';
  79. }
  80. $args = func_get_args();
  81. $s_page = htmlsc($page);
  82. $s_digest = htmlsc($digest);
  83. $body = <<<EOD
  84. <form action="$_script" method="post">
  85. <table cellspacing="0" cellpadding="2" class="style_table" summary="vote">
  86. <tr>
  87. <td align="left" class="vote_label" style="padding-left:1em;padding-right:1em"><strong>$_vote_plugin_choice</strong>
  88. <input type="hidden" name="plugin" value="vote" />
  89. <input type="hidden" name="refer" value="$s_page" />
  90. <input type="hidden" name="vote_no" value="$vote_no" />
  91. <input type="hidden" name="digest" value="$s_digest" />
  92. </td>
  93. <td align="center" class="vote_label"><strong>$_vote_plugin_votes</strong></td>
  94. </tr>
  95. EOD;
  96. $tdcnt = 0;
  97. $matches = array();
  98. foreach($args as $arg) {
  99. $cnt = 0;
  100. if (preg_match('/^(.+)\[(\d+)\]$/', $arg, $matches)) {
  101. $arg = $matches[1];
  102. $cnt = $matches[2];
  103. }
  104. $e_arg = encode($arg);
  105. $link = make_link($arg);
  106. $cls = ($tdcnt++ % 2) ? 'vote_td1' : 'vote_td2';
  107. $body .= <<<EOD
  108. <tr>
  109. <td align="left" class="$cls" style="padding-left:1em;padding-right:1em;">$link</td>
  110. <td align="right" class="$cls">$cnt&nbsp;&nbsp;
  111. <input type="$_submit" name="vote_$e_arg" value="$_vote_plugin_votes" class="submit" />
  112. </td>
  113. </tr>
  114. EOD;
  115. }
  116. $body .= <<<EOD
  117. </table>
  118. </form>
  119. EOD;
  120. return $body;
  121. }
  122. ?>