$_title_edit, 'body'=>edit_form($page, $postdata)); } // Preview function plugin_edit_preview() { global $vars; global $_title_preview, $_msg_preview, $_msg_preview_delete; $page = isset($vars['page']) ? $vars['page'] : ''; // Loading template if (isset($vars['template_page']) && is_page($vars['template_page'])) { $vars['msg'] = join('', get_source($vars['template_page'])); // Cut fixed anchors $vars['msg'] = preg_replace('/^(\*{1,3}.*)\[#[A-Za-z][\w-]+\](.*)$/m', '$1$2', $vars['msg']); } // Delete "#freeze" command $vars['msg'] = preg_replace(PLUGIN_EDIT_FREEZE_REGEX, '' ,$vars['msg']); $postdata = $vars['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 .= edit_form($page, $vars['msg'], $vars['digest'], FALSE); return array('msg'=>$_title_preview, 'body'=>$body); } // Inline: Show edit (or unfreeze text) link // NOTE: Plus! is not compatible for 1.4.4+ style(compatible for 1.4.3 style) function plugin_edit_inline() { static $usage = '&edit(pagename,anchor);'; global $script, $vars, $fixed_heading_edited; global $_symbol_paraedit; if (!$fixed_heading_edited || is_freeze($vars['page'])) { return ''; } // Arguments $args = func_get_args(); // {label}. Strip anchor tags only $s_label = strip_htmltag(array_pop($args), FALSE); if ($s_label == '') { $s_label = $_symbol_paraedit; } list($page, $id) = array_pad($args, 2, ''); if (!is_page($page)) { $page = $vars['page']; } if ($id != '') { $id = '&id=' . rawurlencode($id); } $r_page = rawurlencode($page); return "$s_label"; } // Write, add, or insert new comment function plugin_edit_write() { global $vars, $trackback; 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'] : ''; $partid = isset($vars['id']) ? $vars['id'] : ''; $notimestamp = isset($vars['notimestamp']) && $vars['notimestamp'] != ''; // Check Validate if ($notimestamp && !is_page($page)) { honeypot_write(); return plugin_edit_cancel(); } // Paragraph edit mode if ($partid) { $source = preg_split('/([^\n]*\n)/', $vars['original'], -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE); if (plugin_edit_parts($partid, $source, $vars['msg']) !== FALSE) { $vars['msg'] = @join('', $source); } else { $vars['msg'] = rtrim($vars['original']) . "\n\n" . $vars['msg']; } } // Delete "#freeze" command $vars['msg'] = preg_replace('/^#freeze\s*$/im', '', $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'] : ''; list($postdata_input, $auto) = do_update_diff($oldpagesrc, $msg, $original); $retvars['msg'] = $_title_collided; $retvars['body'] = ($auto ? $_msg_collided_auto : $_msg_collided)."\n"; $retvars['body'] .= $do_update_diff_table; unset($vars['id']); // Change edit all-text of pages(from para-edit) $retvars['body'] .= edit_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', htmlspecialchars($page), $_title_deleted); if ($trackback) tb_delete($page); return $retvars; } // $notimeupdate: Checkbox 'Do not change timestamp' if ($notimeupdate > 1 && $notimestamp && ! pkwk_login($vars['pass'])) { // Enable only administrator & password error $retvars['body'] = '

' . $_msg_invalidpass . '

' . "\n"; $retvars['body'] .= edit_form($page, $msg, $digest, FALSE); return $retvars; } page_write($page, $postdata, $notimestamp); pkwk_headers_sent(); if ($vars['refpage'] != '') { if ($partid != '') { header('Location: ' . get_script_uri() . '?' . rawurlencode($vars['refpage'])) . '#' . rawurlencode($partid); } else { header('Location: ' . get_script_uri() . '?' . rawurlencode($vars['refpage'])); } } else { if ($partid != '') { header('Location: ' . get_script_uri() . '?' . rawurlencode($page)) . '#' . rawurlencode($partid); } else { header('Location: ' . get_script_uri() . '?' . rawurlencode($page)); } } exit; } // Cancel (Back to the page / Escape edit page) function plugin_edit_cancel() { global $vars; pkwk_headers_sent(); header('Location: ' . get_script_uri() . '?' . rawurlencode($vars['page'])); exit; } // Replace/Pickup a part of source function plugin_edit_parts($id, &$source, $postdata='') { $postdata = rtrim($postdata) . "\n"; $heads = preg_grep('/^\*{1,3}.+$/', $source); $heads[count($source)] = ''; // sentinel $pattern = '/[#' . preg_quote($id, '/') . ']'; while (list($start, $line) = each($heads)) { if (preg_match($pattern, $line)) { list($end, $line) = each($heads); return join('', array_splice($source, $start, $end - $start, $postdata)); } } return FALSE; } ?>