OSDN Git Service

BugTrack/2484 AutoTicketLink for JIRA: Support underscore key XX_X
[pukiwiki/pukiwiki.git] / plugin / edit.inc.php
index 6b73573..1ebfb79 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 // PukiWiki - Yet another WikiWikiWeb clone.
 // edit.inc.php
-// Copyright 2001-2017 PukiWiki Development Team
+// Copyright 2001-2019 PukiWiki Development Team
 // License: GPL v2 or (at your option) any later version
 //
 // Edit plugin (cmd=edit)
@@ -11,16 +11,21 @@ define('PLUGIN_EDIT_FREEZE_REGEX', '/^(?:#freeze(?!\w)\s*)+/im');
 
 function plugin_edit_action()
 {
-       global $vars, $_title_edit, $load_template_func;
+       global $vars, $_title_edit;
 
        if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing');
 
-       $page = isset($vars['page']) ? $vars['page'] : '';
+       // Create initial pages
+       plugin_edit_setup_initial_pages();
 
+       $page = isset($vars['page']) ? $vars['page'] : '';
        check_editable($page, true, true);
+       check_readable($page, true, true);
 
-       if (isset($vars['preview']) || ($load_template_func && isset($vars['template']))) {
-               return plugin_edit_preview();
+       if (isset($vars['preview'])) {
+               return plugin_edit_preview($vars['msg']);
+       } else if (isset($vars['template'])) {
+               return plugin_edit_preview_with_template();
        } else if (isset($vars['write'])) {
                return plugin_edit_write();
        } else if (isset($vars['cancel'])) {
@@ -28,30 +33,45 @@ function plugin_edit_action()
        }
 
        $postdata = @join('', get_source($page));
-       if ($postdata == '') $postdata = auto_template($page);
+       if ($postdata === '') $postdata = auto_template($page);
        $postdata = remove_author_info($postdata);
        return array('msg'=>$_title_edit, 'body'=>edit_form($page, $postdata));
 }
 
-// Preview
-function plugin_edit_preview()
+/**
+ * Preview with template
+ */
+function plugin_edit_preview_with_template()
 {
        global $vars;
-       global $_title_preview, $_msg_preview, $_msg_preview_delete;
-
+       $msg = '';
        $page = isset($vars['page']) ? $vars['page'] : '';
-
        // Loading template
        $template_page;
        if (isset($vars['template_page']) && is_page($template_page = $vars['template_page'])) {
                if (is_page_readable($template_page)) {
-                       $vars['msg'] = remove_author_info(get_source($vars['template_page'], TRUE, TRUE));
+                       $msg = remove_author_info(get_source($vars['template_page'], TRUE, TRUE));
                        // Cut fixed anchors
-                       $vars['msg'] = preg_replace('/^(\*{1,3}.*)\[#[A-Za-z][\w-]+\](.*)$/m', '$1$2', $vars['msg']);
+                       $msg = preg_replace('/^(\*{1,3}.*)\[#[A-Za-z][\w-]+\](.*)$/m', '$1$2', $msg);
                }
        }
-       $vars['msg'] = preg_replace(PLUGIN_EDIT_FREEZE_REGEX, '', $vars['msg']);
-       $postdata = $vars['msg'];
+       return plugin_edit_preview($msg);
+}
+
+/**
+ * Preview
+ *
+ * @param msg preview target
+ */
+function plugin_edit_preview($msg)
+{
+       global $vars;
+       global $_title_preview, $_msg_preview, $_msg_preview_delete;
+
+       $page = isset($vars['page']) ? $vars['page'] : '';
+
+       $msg = preg_replace(PLUGIN_EDIT_FREEZE_REGEX, '', $msg);
+       $postdata = $msg;
 
        if (isset($vars['add']) && $vars['add']) {
                if (isset($vars['add_top']) && $vars['add_top']) {
@@ -62,7 +82,7 @@ function plugin_edit_preview()
        }
 
        $body = $_msg_preview . '<br />' . "\n";
-       if ($postdata == '')
+       if ($postdata === '')
                $body .= '<strong>' . $_msg_preview_delete . '</strong>';
        $body .= '<br />' . "\n";
 
@@ -72,7 +92,7 @@ function plugin_edit_preview()
                $postdata = drop_submit(convert_html($postdata));
                $body .= '<div id="preview">' . $postdata . '</div>' . "\n";
        }
-       $body .= edit_form($page, $vars['msg'], $vars['digest'], FALSE);
+       $body .= edit_form($page, $msg, $vars['digest'], FALSE);
 
        return array('msg'=>$_title_preview, 'body'=>$body);
 }
@@ -92,7 +112,7 @@ function plugin_edit_inline()
        // {label}. Strip anchor tags only
        $s_label = strip_htmltag(array_pop($args), FALSE);
 
-       $page    = array_shift($args);
+       $page = array_shift($args);
        if ($page === NULL) $page = '';
        $_noicon = $_nolabel = FALSE;
        foreach($args as $arg){
@@ -152,7 +172,7 @@ function plugin_edit_inline()
        }
 
        // URL
-       $script = get_script_uri();
+       $script = get_base_uri();
        if ($isfreeze) {
                $url   = $script . '?cmd=unfreeze&amp;page=' . rawurlencode($s_page);
        } else {
@@ -219,7 +239,7 @@ function plugin_edit_write()
        }
 
        // NULL POSTING, OR removing existing page
-       if ($postdata == '') {
+       if ($postdata === '') {
                page_write($page, $postdata);
                $retvars['msg' ] = $_title_deleted;
                $retvars['body'] = str_replace('$1', htmlsc($page), $_title_deleted);
@@ -237,7 +257,7 @@ function plugin_edit_write()
 
        page_write($page, $postdata, $notimeupdate != 0 && $notimestamp);
        pkwk_headers_sent();
-       header('Location: ' . get_script_uri() . '?' . pagename_urlencode($page));
+       header('Location: ' . get_page_uri($page, PKWK_URI_ROOT));
        exit;
 }
 
@@ -246,6 +266,19 @@ function plugin_edit_cancel()
 {
        global $vars;
        pkwk_headers_sent();
-       header('Location: ' . get_script_uri() . '?' . pagename_urlencode($vars['page']));
+       header('Location: ' . get_page_uri($vars['page'], PKWK_URI_ROOT));
        exit;
 }
+
+/**
+ * Setup initial pages
+ */
+function plugin_edit_setup_initial_pages()
+{
+       // Related: Rename plugin
+       if (exist_plugin('rename') && function_exists('plugin_rename_setup_initial_pages')) {
+               plugin_rename_setup_initial_pages();
+       }
+       // AutoTicketLinkName page
+       init_autoticketlink_def_page();
+}