-<?
-define("MAX_LEN",60);
+<?php
+// PukiWiki - Yet another WikiWikiWeb clone.
+// template.inc.php
+// Copyright
+// 2002-2017 PukiWiki Development Team
+// 2001-2002 Originally written by yu-ji
+// License: GPL v2 or (at your option) any later version
+//
+// Load template plugin
+
+define('MAX_LEN', 60);
+
function plugin_template_action()
{
- global $vars,$script,$non_list,$whatsnew,$_btn_template;
-
- global $script,$rows,$cols,$hr,$vars,$function_freeze,$WikiName,$BracketName;
- global $_btn_addtop,$_btn_preview,$_btn_update,$_btn_freeze,$_msg_help,$_btn_notchangetimestamp;
- global $whatsnew,$_btn_template,$_btn_load,$non_list,$load_template_func;
+ global $vars;
+ global $_title_edit;
+ global $_msg_template_start, $_msg_template_end, $_msg_template_page, $_msg_template_refer;
+ global $_btn_template_create, $_title_template;
+ global $_err_template_already, $_err_template_invalid, $_msg_template_force;
- $ret = "";
-
- // edit
- if($vars["refer"] && $vars["page"] && $vars["submit"] && !is_page($vars["refer"]))
- {
- // ¥Ú¡¼¥¸Ì¾¤¬WikiName¤Ç¤Ê¤¯¡¢BracketName¤Ç¤Ê¤±¤ì¤ÐBracketName¤È¤·¤Æ²ò¼á
- if(!preg_match("/^(($WikiName)|($BracketName))$/",$vars["refer"]))
- {
- $vars["refer"] = "[[$vars[refer]]]";
+ $script = get_base_uri();
+ if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing');
+ if (! isset($vars['refer']) || ! is_page($vars['refer'])) {
+ if (isset($vars['action']) && $vars['action'] === 'list') {
+ plugin_template_output_list();
+ exit;
}
-
- $page = $vars["refer"];
-
- $lines = @file(get_filename(encode($vars["page"])));
-
- if($vars["begin"] <= $vars["end"])
- {
- for($i=$vars["begin"];$i<=$vars["end"];$i++)
- {
- $postdata.= $lines[$i];
- }
- }
-
- if($vars["help"] == "true")
- $help = $hr.catrule();
- else
- $help = "<br>\n<ul><li><a href=\"$script?cmd=edit&help=true&page=".rawurlencode($page)."\">$_msg_help</a></ul></li>\n";
+ return FALSE;
+ }
+ $refer = $vars['refer'];
+ // Ensure page is readable, or show Login UI and exit
+ ensure_page_readable($refer);
+ $lines = get_source($refer);
+ // Remove '#freeze'
+ if (! empty($lines) && strtolower(rtrim($lines[0])) == '#freeze')
+ array_shift($lines);
+ // Remove '#author'
+ if (! empty($lines) && preg_match('/^#author\(/', $lines[0]))
+ array_shift($lines);
- if($function_freeze)
- $str_freeze = '<input type="submit" name="freeze" value="'.$_btn_freeze.'" accesskey="f">';
-$retvar["body"] = '
-<form action="'.$script.'" method="post">
-<input type="hidden" name="page" value="'.$page.'">
-<input type="hidden" name="digest" value="'.$digest.'">
-<table cellspacing="3" cellpadding="0" border="0">
- <tr>
- <td colspan="2" align="right">
-'.$template.'
- </td>
- </tr>
- <tr>
- <td colspan="2" align="right">
- <textarea name="msg" rows="'.$rows.'" cols="'.$cols.'" wrap="virtual">
-'.$postdata.'</textarea>
- </td>
- </tr>
- <tr>
- <td>
- <input type="submit" name="preview" value="'.$_btn_preview.'" accesskey="p">
- <input type="submit" name="write" value="'.$_btn_update.'" accesskey="s">
- '.$add_top.'
- <input type="checkbox" name="notimestamp" value="true"><small>'.$_btn_notchangetimestamp.'</small>
- </td>
- </form>
- <form action="'.$script.'?cmd=freeze" method="post">
- <input type="hidden" name="page" value="'.$vars["page"].'">
- <td align="right">
- '.$str_freeze.'
- </td>
- </form>
- </tr>
-</table>
-' . $help;
+ $begin = (isset($vars['begin']) && is_numeric($vars['begin'])) ? $vars['begin'] : 0;
+ $end = (isset($vars['end']) && is_numeric($vars['end'])) ? $vars['end'] : count($lines) - 1;
+ if ($begin > $end) {
+ $temp = $begin;
+ $begin = $end;
+ $end = $temp;
+ }
+ $page = isset($vars['page']) ? $vars['page'] : '';
+ $is_page = is_page($page);
- $retvar["msg"] = "$1 ¤ÎÊÔ½¸";
-
- $vars["page"] = $vars["refer"];
+ // edit
+ if ($is_pagename = is_pagename($page) && (! $is_page || ! empty($vars['force']))) {
+ // Ensure page is readable, or show Login UI and exit
+ ensure_page_writable($page);
+ $postdata = join('', array_splice($lines, $begin, $end - $begin + 1));
+ $retvar['msg'] = $_title_edit;
+ $retvar['body'] = edit_form($vars['page'], $postdata);
+ $vars['refer'] = $vars['page'];
return $retvar;
}
- // input mb_strwidth()
- else if($vars["refer"])
- {
- if(is_page($vars["refer"]))
- {
-
- $begin_select = "";
- $end_select = "";
- $lines = @file(get_filename(encode($vars["refer"])));
- $begin_select.= "³«»Ï¹Ô:<br><select name=\"begin\" size=\"10\">\n";
- for($i=0;$i<count($lines);$i++)
- {
- $lines[$i] = mb_strimwidth($lines[$i],0,MAX_LEN,"...");
-
- if($i==0) $tag = "selected";
- else $tag = "";
- $begin_select.= "<option value=\"$i\" $tag>$lines[$i]</option>\n";
- }
- $begin_select.= "</select><br>\n<br>\n";
-
- $end_select.= "½ªÎ»¹Ô:<br><select name=\"end\" size=\"10\">\n";
- for($i=0;$i<count($lines);$i++)
- {
- if($i==count($lines)-1) $tag = "selected";
- else $tag = "";
- $end_select.= "<option value=\"$i\" $tag>$lines[$i]</option>\n";
- }
- $end_select.= "</select><br>\n<br>\n";
-
-
- /*
- $select = "";
- $lines = @file(get_filename(encode($vars["refer"])));
- $select.= "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"2\" border=\"0\">\n";
- $select.= "<tr><td bgcolor=\"#DDEEFF\" width=\"40\">³«»Ï</td><td bgcolor=\"#DDEEFF\" width=\"40\">½ªÎ»</td><td bgcolor=\"#DDEEFF\"> </td></tr>\n";
-
- for($i=0;$i<count($lines);$i++)
- {
- //$lines[$i] = mb_strimwidth($lines[$i],0,MAX_LEN,"...");
-
- if($i==0)
- {
- $begin_tag = "checked";
- $end_tag = "";
- }
- else if($i==count($lines)-1)
- {
- $begin_tag = "";
- $end_tag = "checked";
- }
- else
- {
- $begin_tag = "";
- $end_tag = "";
- }
-
- if($i%2) $color = "bgcolor=\"#F0FFFA\"";
- else $color = "";
- $select.= "<tr>";
- $select.= "<td $color>";
- $select.= "<input type=\"radio\" name=\"begin\" value=\"$i\" $begin_tag>\n";
- $select.= "</td><td $color>";
- $select.= "<input type=\"radio\" name=\"end\" value=\"$i\" $end_tag>\n";
- $select.= "</td><td $color>";
- $select.= "$lines[$i]";
- $select.= "</td>";
- $select.= "</tr>";
- }
- $select.= "</table><br>\n";
- */
- }
-
- $ret.= "<form action=\"$script\" method=\"post\">\n";
- $ret.= "<input type=\"hidden\" name=\"plugin\" value=\"template\">\n";
- $ret.= "<input type=\"hidden\" name=\"page\" value=\"$vars[refer]\">\n";
- //$ret.= "¥Ú¡¼¥¸Ì¾: <input type=\"text\" name=\"refer\" value=\"$vars[refer]/Ê£À½\">\n";
- //$ret.= "<input type=\"submit\" name=\"submit\" value=\"ºîÀ®\"><br>\n<br>\n";
- $ret.= $begin_select;
- $ret.= $end_select;
- //$ret.= $select;
- $ret.= "¥Ú¡¼¥¸Ì¾: <input type=\"text\" name=\"refer\" value=\"$vars[refer]/Ê£À½\">\n";
- $ret.= "<input type=\"submit\" name=\"submit\" value=\"ºîÀ®\">\n";
- $ret.= "</form>\n";
-
- $retvar["msg"] = "$1 ¤ò¥Æ¥ó¥×¥ì¡¼¥È¤Ë¤·¤ÆºîÀ®";
- $retvar["body"] = $ret;
-
- return $retvar;
+ $begin_select = $end_select = '';
+ for ($i = 0; $i < count($lines); $i++) {
+ $line = htmlsc(mb_strimwidth($lines[$i], 0, MAX_LEN, '...'));
+
+ $tag = ($i == $begin) ? ' selected="selected"' : '';
+ $begin_select .= "<option value=\"$i\"$tag>$line</option>\n";
+
+ $tag = ($i == $end) ? ' selected="selected"' : '';
+ $end_select .= "<option value=\"$i\"$tag>$line</option>\n";
+ }
+
+ $_page = htmlsc($page);
+ $msg = $tag = '';
+ if ($is_page) {
+ $msg = $_err_template_already;
+ $tag = '<input type="checkbox" name="force" value="1" />'.$_msg_template_force;
+ } else if ($page != '' && ! $is_pagename) {
+ $msg = str_replace('$1', $_page, $_err_template_invalid);
}
+ $s_refer = htmlsc($vars['refer']);
+ $s_page = ($page == '') ? str_replace('$1', $s_refer, $_msg_template_page) : $_page;
+ $ret = <<<EOD
+<form action="$script" method="post">
+ <div>
+ <input type="hidden" name="plugin" value="template" />
+ <input type="hidden" name="refer" value="$s_refer" />
+ $_msg_template_start <select name="begin" size="10">$begin_select</select><br /><br />
+ $_msg_template_end <select name="end" size="10">$end_select</select><br /><br />
+ <label for="_p_template_refer">$_msg_template_refer</label>
+ <input type="text" name="page" id="_p_template_refer" value="$s_page" />
+ <input type="submit" name="submit" value="$_btn_template_create" /> $tag
+ </div>
+</form>
+EOD;
+
+ $retvar['msg'] = ($msg == '') ? $_title_template : $msg;
+ $retvar['body'] = $ret;
+
+ return $retvar;
+}
+
+function plugin_template_output_list()
+{
+ $template_page_key = 'template_pages';
+ $empty_result = '{"' . $template_page_key . '":[]}';
+ header('Content-Type: application/json; charset=UTF-8');
+ // PHP 5.4+
+ $enabled = defined('JSON_UNESCAPED_UNICODE') && defined('PKWK_UTF8_ENABLE');
+ if (!$enabled) {
+ print($empty_result);
+ exit;
+ }
+ $template_pages = array_values(get_template_page_list());
+ $ar = array($template_page_key => $template_pages);
+ print(json_encode($ar, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
+ exit;
}
-?>
\ No newline at end of file