OSDN Git Service

BugTrack/407 Show attached files on editing page
[pukiwiki/pukiwiki.git] / plugin / template.inc.php
1 <?php
2 // PukiWiki - Yet another WikiWikiWeb clone.
3 // template.inc.php
4 // Copyright
5 //   2002-2017 PukiWiki Development Team
6 //   2001-2002 Originally written by yu-ji
7 // License: GPL v2 or (at your option) any later version
8 //
9 // Load template plugin
10
11 define('MAX_LEN', 60);
12
13 function plugin_template_action()
14 {
15         global $vars;
16         global $_title_edit;
17         global $_msg_template_start, $_msg_template_end, $_msg_template_page, $_msg_template_refer;
18         global $_btn_template_create, $_title_template;
19         global $_err_template_already, $_err_template_invalid, $_msg_template_force;
20
21         $script = get_base_uri();
22         if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing');
23         if (! isset($vars['refer']) || ! is_page($vars['refer']))
24                 return FALSE;
25
26         $refer = $vars['refer'];
27         // Ensure page is readable, or show Login UI and exit
28         ensure_page_readable($refer);
29         $lines = get_source($refer);
30         // Remove '#freeze'
31         if (! empty($lines) && strtolower(rtrim($lines[0])) == '#freeze')
32                 array_shift($lines);
33         // Remove '#author'
34         if (! empty($lines) && preg_match('/^#author\(/', $lines[0]))
35                 array_shift($lines);
36
37         $begin = (isset($vars['begin']) && is_numeric($vars['begin'])) ? $vars['begin'] : 0;
38         $end   = (isset($vars['end'])   && is_numeric($vars['end']))   ? $vars['end'] : count($lines) - 1;
39         if ($begin > $end) {
40                 $temp  = $begin;
41                 $begin = $end;
42                 $end   = $temp;
43         }
44         $page    = isset($vars['page']) ? $vars['page'] : '';
45         $is_page = is_page($page);
46
47         // edit
48         if ($is_pagename = is_pagename($page) && (! $is_page || ! empty($vars['force']))) {
49         // Ensure page is readable, or show Login UI and exit
50                 ensure_page_writable($page);
51                 $postdata       = join('', array_splice($lines, $begin, $end - $begin + 1));
52                 $retvar['msg']  = $_title_edit;
53                 $retvar['body'] = edit_form($vars['page'], $postdata);
54                 $vars['refer']  = $vars['page'];
55                 return $retvar;
56         }
57         $begin_select = $end_select = '';
58         for ($i = 0; $i < count($lines); $i++) {
59                 $line = htmlsc(mb_strimwidth($lines[$i], 0, MAX_LEN, '...'));
60
61                 $tag = ($i == $begin) ? ' selected="selected"' : '';
62                 $begin_select .= "<option value=\"$i\"$tag>$line</option>\n";
63
64                 $tag = ($i == $end) ? ' selected="selected"' : '';
65                 $end_select .= "<option value=\"$i\"$tag>$line</option>\n";
66         }
67
68         $_page = htmlsc($page);
69         $msg = $tag = '';
70         if ($is_page) {
71                 $msg = $_err_template_already;
72                 $tag = '<input type="checkbox" name="force" value="1" />'.$_msg_template_force;
73         } else if ($page != '' && ! $is_pagename) {
74                 $msg = str_replace('$1', $_page, $_err_template_invalid);
75         }
76
77         $s_refer = htmlsc($vars['refer']);
78         $s_page  = ($page == '') ? str_replace('$1', $s_refer, $_msg_template_page) : $_page;
79         $ret     = <<<EOD
80 <form action="$script" method="post">
81  <div>
82   <input type="hidden" name="plugin" value="template" />
83   <input type="hidden" name="refer"  value="$s_refer" />
84   $_msg_template_start <select name="begin" size="10">$begin_select</select><br /><br />
85   $_msg_template_end   <select name="end"   size="10">$end_select</select><br /><br />
86   <label for="_p_template_refer">$_msg_template_refer</label>
87   <input type="text" name="page" id="_p_template_refer" value="$s_page" />
88   <input type="submit" name="submit" value="$_btn_template_create" /> $tag
89  </div>
90 </form>
91 EOD;
92
93         $retvar['msg']  = ($msg == '') ? $_title_template : $msg;
94         $retvar['body'] = $ret;
95
96         return $retvar;
97 }