2 // PukiWiki - Yet another WikiWikiWeb clone.
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
9 // Load template plugin
11 define('MAX_LEN', 60);
13 function plugin_template_action()
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;
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 if (isset($vars['action']) && $vars['action'] === 'list') {
25 plugin_template_output_list();
30 $refer = $vars['refer'];
31 // Ensure page is readable, or show Login UI and exit
32 ensure_page_readable($refer);
33 $lines = get_source($refer);
35 if (! empty($lines) && strtolower(rtrim($lines[0])) == '#freeze')
38 if (! empty($lines) && preg_match('/^#author\(/', $lines[0]))
41 $begin = (isset($vars['begin']) && is_numeric($vars['begin'])) ? $vars['begin'] : 0;
42 $end = (isset($vars['end']) && is_numeric($vars['end'])) ? $vars['end'] : count($lines) - 1;
48 $page = isset($vars['page']) ? $vars['page'] : '';
49 $is_page = is_page($page);
52 if ($is_pagename = is_pagename($page) && (! $is_page || ! empty($vars['force']))) {
53 // Ensure page is readable, or show Login UI and exit
54 ensure_page_writable($page);
55 $postdata = join('', array_splice($lines, $begin, $end - $begin + 1));
56 $retvar['msg'] = $_title_edit;
57 $retvar['body'] = edit_form($vars['page'], $postdata);
58 $vars['refer'] = $vars['page'];
61 $begin_select = $end_select = '';
62 for ($i = 0; $i < count($lines); $i++) {
63 $line = htmlsc(mb_strimwidth($lines[$i], 0, MAX_LEN, '...'));
65 $tag = ($i == $begin) ? ' selected="selected"' : '';
66 $begin_select .= "<option value=\"$i\"$tag>$line</option>\n";
68 $tag = ($i == $end) ? ' selected="selected"' : '';
69 $end_select .= "<option value=\"$i\"$tag>$line</option>\n";
72 $_page = htmlsc($page);
75 $msg = $_err_template_already;
76 $tag = '<input type="checkbox" name="force" value="1" />'.$_msg_template_force;
77 } else if ($page != '' && ! $is_pagename) {
78 $msg = str_replace('$1', $_page, $_err_template_invalid);
81 $s_refer = htmlsc($vars['refer']);
82 $s_page = ($page == '') ? str_replace('$1', $s_refer, $_msg_template_page) : $_page;
84 <form action="$script" method="post">
86 <input type="hidden" name="plugin" value="template" />
87 <input type="hidden" name="refer" value="$s_refer" />
88 $_msg_template_start <select name="begin" size="10">$begin_select</select><br /><br />
89 $_msg_template_end <select name="end" size="10">$end_select</select><br /><br />
90 <label for="_p_template_refer">$_msg_template_refer</label>
91 <input type="text" name="page" id="_p_template_refer" value="$s_page" />
92 <input type="submit" name="submit" value="$_btn_template_create" /> $tag
97 $retvar['msg'] = ($msg == '') ? $_title_template : $msg;
98 $retvar['body'] = $ret;
103 function plugin_template_output_list()
105 $template_page_key = 'template_pages';
106 $empty_result = '{"' . $template_page_key . '":[]}';
107 header('Content-Type: application/json; charset=UTF-8');
109 $enabled = defined('JSON_UNESCAPED_UNICODE') && defined('PKWK_UTF8_ENABLE');
111 print($empty_result);
114 $template_pages = array_values(get_template_page_list());
115 $ar = array($template_page_key => $template_pages);
116 print(json_encode($ar, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));