".$postdata;
exit;
}
global $vars, $_title_edit;
if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing');
// Create initial pages
plugin_viewedit_setup_initial_pages();
$page = isset($vars['page']) ? $vars['page'] : '';
check_editable($page, true, true);
check_readable($page, true, true);
if (isset($vars['preview'])) {
return plugin_viewedit_preview($vars['msg']);
} else if (isset($vars['template'])) {
return plugin_viewedit_preview_with_template();
} else if (isset($vars['write'])) {
return plugin_viewedit_write();
} else if (isset($vars['cancel'])) {
return plugin_viewedit_cancel();
}
$postdata = @join('', get_source($page));
if ($postdata === '') $postdata = auto_template($page);
$postdata = remove_author_info($postdata);
return array('msg'=>$_title_edit, 'body'=>plugin_viewedit_form($page, $postdata));
}
/**
* Preview with template
*/
function plugin_viewedit_preview_with_template()
{
global $vars;
$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)) {
$msg = remove_author_info(get_source($vars['template_page'], TRUE, TRUE));
// Cut fixed anchors
$msg = preg_replace('/^(\*{1,3}.*)\[#[A-Za-z][\w-]+\](.*)$/m', '$1$2', $msg);
}
}
return plugin_viewedit_preview($msg);
}
/**
* Preview
*
* @param msg preview target
*/
function plugin_viewedit_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']) {
$postdata = $postdata . "\n\n" . @join('', get_source($page));
} else {
$postdata = @join('', get_source($page)) . "\n\n" . $postdata;
}
}
$body = $_msg_preview . '
' . "\n";
if ($postdata === '')
$body .= '' . $_msg_preview_delete . '';
$body .= '
' . "\n";
if ($postdata) {
$postdata = make_str_rules($postdata);
$postdata = explode("\n", $postdata);
$postdata = drop_submit(convert_html($postdata));
$body .= '
' . $postdata . '
' . "\n";
}
$body .= plugin_viewedit_form($page, $msg, $vars['digest'], FALSE);
return array('msg'=>$_title_preview, 'body'=>$body);
}
// Inline: Show edit (or unfreeze text) link
function plugin_viewedit_inline()
{
static $usage = '&viewedit(pagename#anchor[[,noicon],nolabel])[{label}];';
global $vars, $fixed_heading_anchor_edit;
if (PKWK_READONLY) return ''; // Show nothing
// Arguments
$args = func_get_args();
// {label}. Strip anchor tags only
$s_label = strip_htmltag(array_pop($args), FALSE);
$page = array_shift($args);
if ($page === NULL) $page = '';
$_noicon = $_nolabel = FALSE;
foreach($args as $arg){
switch(strtolower($arg)){
case '' : break;
case 'nolabel': $_nolabel = TRUE; break;
case 'noicon' : $_noicon = TRUE; break;
default : return $usage;
}
}
// Separate a page-name and a fixed anchor
list($s_page, $id, $editable) = anchor_explode($page, TRUE);
// Default: This one
if ($s_page == '') $s_page = isset($vars['page']) ? $vars['page'] : '';
// $s_page fixed
$isfreeze = is_freeze($s_page);
$ispage = is_page($s_page);
// Paragraph edit enabled or not
$short = htmlsc('Edit');
if ($fixed_heading_anchor_edit && $editable && $ispage && ! $isfreeze) {
// Paragraph editing
$id = rawurlencode($id);
$title = htmlsc(sprintf('Edit %s', $page));
$icon = '
';
$class = ' class="anchor_super"';
} else {
// Normal editing / unfreeze
$id = '';
if ($isfreeze) {
$title = 'Unfreeze %s';
$icon = 'unfreeze.png';
} else {
$title = 'Edit %s';
$icon = 'edit.png';
}
$title = htmlsc(sprintf($title, $s_page));
$icon = '
';
$class = '';
}
if ($_noicon) $icon = ''; // No more icon
if ($_nolabel) {
if (!$_noicon) {
$s_label = ''; // No label with an icon
} else {
$s_label = $short; // Short label without an icon
}
} else {
if ($s_label == '') $s_label = $title; // Rich label with an icon
}
// URL
$script = get_base_uri();
if ($isfreeze) {
$url = $script . '?cmd=unfreeze&page=' . rawurlencode($s_page);
} else {
$s_id = ($id == '') ? '' : '&id=' . $id;
$url = $script . '?cmd=edit&page=' . rawurlencode($s_page) . $s_id;
}
$atag = '';
static $atags = '';
if ($ispage) {
// Normal edit link
return $atag . $icon . $s_label . $atags;
} else {
// Dangling edit link
return '' . $atag . $icon . $atags .
$s_label . $atag . '?' . $atags . '';
}
}
// Write, add, or insert new comment
function plugin_viewedit_write()
{
global $vars;
global $_title_collided, $_msg_collided_auto, $_msg_collided, $_title_deleted;
global $notimeupdate, $_msg_invalidpass, $do_update_diff_table;
$page = isset($vars['page']) ? $vars['page'] : '';
$add = isset($vars['add']) ? $vars['add'] : '';
$digest = isset($vars['digest']) ? $vars['digest'] : '';
$vars['msg'] = preg_replace(PLUGIN_EDIT_FREEZE_REGEX, '', $vars['msg']);
$msg = & $vars['msg']; // Reference
$retvars = array();
// Collision Detection
$oldpagesrc = join('', get_source($page));
$oldpagemd5 = md5($oldpagesrc);
if ($digest !== $oldpagemd5) {
$vars['digest'] = $oldpagemd5; // Reset
$original = isset($vars['original']) ? $vars['original'] : '';
$old_body = remove_author_info($oldpagesrc);
list($postdata_input, $auto) = do_update_diff($old_body, $msg, $original);
$retvars['msg' ] = $_title_collided;
$retvars['body'] = ($auto ? $_msg_collided_auto : $_msg_collided) . "\n";
$retvars['body'] .= $do_update_diff_table;
$retvars['body'] .= plugin_viewedit_form($page, $postdata_input, $oldpagemd5, FALSE);
return $retvars;
}
// Action?
if ($add) {
// Add
if (isset($vars['add_top']) && $vars['add_top']) {
$postdata = $msg . "\n\n" . @join('', get_source($page));
} else {
$postdata = @join('', get_source($page)) . "\n\n" . $msg;
}
} else {
// Edit or Remove
$postdata = & $msg; // Reference
}
// NULL POSTING, OR removing existing page
if ($postdata === '') {
page_write($page, $postdata);
$retvars['msg' ] = $_title_deleted;
$retvars['body'] = str_replace('$1', htmlsc($page), $_title_deleted);
return $retvars;
}
// $notimeupdate: Checkbox 'Do not change timestamp'
$notimestamp = isset($vars['notimestamp']) && $vars['notimestamp'] != '';
if ($notimeupdate > 1 && $notimestamp && ! pkwk_login($vars['pass'])) {
// Enable only administrator & password error
$retvars['body'] = '' . $_msg_invalidpass . '
' . "\n";
$retvars['body'] .= plugin_viewedit_form($page, $msg, $digest, FALSE);
return $retvars;
}
page_write($page, $postdata, $notimeupdate != 0 && $notimestamp);
pkwk_headers_sent();
header('Location: ' . get_page_uri($page, PKWK_URI_ROOT));
exit;
}
// Cancel (Back to the page / Escape edit page)
function plugin_viewedit_cancel()
{
global $vars;
pkwk_headers_sent();
header('Location: ' . get_page_uri($vars['page'], PKWK_URI_ROOT));
exit;
}
/**
* Setup initial pages
*/
function plugin_viewedit_setup_initial_pages()
{
global $autoalias;
// 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();
// AutoAliasName page
if ($autoalias) {
init_autoalias_def_page();
}
}
function plugin_viewedit_form($page, $postdata, $digest = FALSE, $b_template = TRUE)
{
global $vars, $rows, $cols;
global $_btn_preview, $_btn_repreview, $_btn_update, $_btn_cancel, $_msg_help;
global $_btn_template, $_btn_load, $load_template_func;
global $notimeupdate;
global $_msg_edit_cancel_confirm, $_msg_edit_unloadbefore_message;
global $rule_page;
$script = get_base_uri();
if ($digest === FALSE) $digest = md5(join('', get_source($page)));
$refer = $template = '';
$addtag = $add_top = '';
if(isset($vars['add'])) {
global $_btn_addtop;
$addtag = '';
$add_top = isset($vars['add_top']) ? ' checked="checked"' : '';
$add_top = '' . "\n" .
' ';
}
if($load_template_func && $b_template) {
$template_page_list = get_template_page_list();
$tpages = array(); // Template pages
foreach($template_page_list as $p) {
$ps = htmlsc($p);
$tpages[] = ' ';
}
if (count($template_page_list) > 0) {
$s_tpages = join("\n", $tpages);
} else {
$s_tpages = ' ';
}
$template = <<
$s_tpages
EOD;
if (isset($vars['refer']) && $vars['refer'] != '')
$refer = '[[' . strip_bracket($vars['refer']) . ']]' . "\n\n";
}
$r_page = rawurlencode($page);
$s_page = htmlsc($page);
$s_digest = htmlsc($digest);
$s_postdata = htmlsc($refer . $postdata);
$postdatahex = bin2hex($s_postdata);
$s_original = isset($vars['original']) ? htmlsc($vars['original']) : $s_postdata;
$b_preview = isset($vars['preview']); // TRUE when preview
$btn_preview = $b_preview ? $_btn_repreview : $_btn_preview;
$add_notimestamp = '';
if ($notimeupdate != 0) {
global $_btn_notchangetimestamp;
$checked_time = isset($vars['notimestamp']) ? ' checked="checked"' : '';
if ($notimeupdate == 2) {
$add_notimestamp = ' ' .
'' . "\n";
}
$add_notimestamp = '' . "\n" .
' ' . '' . "\n" .
$add_notimestamp .
' ';
}
$h_msg_edit_cancel_confirm = htmlsc($_msg_edit_cancel_confirm);
$h_msg_edit_unloadbefore_message = htmlsc($_msg_edit_unloadbefore_message);
$body = <<
EOD;
$body .= '';
return $body;
}