OSDN Git Service

BugTrack/2283 Fasten ls2 plugin listing on no-title or no-include
[pukiwiki/pukiwiki.git] / plugin / insert.inc.php
1 <?php
2 // PukiWiki - Yet another WikiWikiWeb clone.
3 // insert.inc.php
4 // Copyright 2002-2017 PukiWiki Development Team
5 // License: GPL v2 or (at your option) any later version
6 //
7 // Text inserting box plugin
8
9 define('INSERT_COLS', 70); // Columns of textarea
10 define('INSERT_ROWS',  5); // Rows of textarea
11 define('INSERT_INS',   1); // Order of insertion (1:before the textarea, 0:after)
12
13 function plugin_insert_action()
14 {
15         global $vars, $cols, $rows;
16         global $_title_collided, $_msg_collided, $_title_updated;
17
18         $script = get_base_uri();
19         if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing');
20         if (! isset($vars['msg']) || $vars['msg'] == '') return;
21
22         $vars['msg'] = preg_replace('/' . "\r" . '/', '', $vars['msg']);
23         $insert = ($vars['msg'] != '') ? "\n" . $vars['msg'] . "\n" : '';
24
25         $postdata = '';
26         $postdata_old  = get_source($vars['refer']);
27         $insert_no = 0;
28
29
30         foreach($postdata_old as $line) {
31                 if (! INSERT_INS) $postdata .= $line;
32                 if (preg_match('/^#insert$/i', $line)) {
33                         if ($insert_no == $vars['insert_no'])
34                                 $postdata .= $insert;
35                         $insert_no++;
36                 }
37                 if (INSERT_INS) $postdata .= $line;
38         }
39
40         $postdata_input = $insert . "\n";
41
42         $body = '';
43         if (md5(get_source($vars['refer'], TRUE, TRUE)) !== $vars['digest']) {
44                 $title = $_title_collided;
45                 $body  = $_msg_collided . "\n";
46
47                 $s_refer          = htmlsc($vars['refer']);
48                 $s_digest         = htmlsc($vars['digest']);
49                 $s_postdata_input = htmlsc($postdata_input);
50
51                 $body .= <<<EOD
52 <form action="$script?cmd=preview" method="post">
53  <div>
54   <input type="hidden" name="refer"  value="$s_refer" />
55   <input type="hidden" name="digest" value="$s_digest" />
56   <textarea name="msg" rows="$rows" cols="$cols" id="textarea">$s_postdata_input</textarea><br />
57  </div>
58 </form>
59 EOD;
60         } else {
61                 page_write($vars['refer'], $postdata);
62
63                 $title = $_title_updated;
64         }
65         $retvars['msg']  = $title;
66         $retvars['body'] = $body;
67
68         $vars['page'] = $vars['refer'];
69
70         return $retvars;
71 }
72
73 function plugin_insert_convert()
74 {
75         global $vars, $digest;
76         global $_btn_insert;
77         static $numbers = array();
78
79         $script = get_base_uri();
80         if (PKWK_READONLY) return ''; // Show nothing
81
82         if (! isset($numbers[$vars['page']])) $numbers[$vars['page']] = 0;
83
84         $insert_no = $numbers[$vars['page']]++;
85
86         $s_page   = htmlsc($vars['page']);
87         $s_digest = htmlsc($digest);
88         $s_cols   = INSERT_COLS;
89         $s_rows   = INSERT_ROWS;
90         $string   = <<<EOD
91 <form action="$script" method="post">
92  <div>
93   <input type="hidden" name="insert_no" value="$insert_no" />
94   <input type="hidden" name="refer"  value="$s_page" />
95   <input type="hidden" name="plugin" value="insert" />
96   <input type="hidden" name="digest" value="$s_digest" />
97   <textarea name="msg" rows="$s_rows" cols="$s_cols"></textarea><br />
98   <input type="submit" name="insert" value="$_btn_insert" />
99  </div>
100 </form>
101 EOD;
102
103         return $string;
104 }