=====Minor Changes Hack: The file /handlers/page/edit.php=====
here is the file edit.php which I tweaked a bit during my MinorEditHack:
New lines are commented with ""FishPete"", so search for this name and you should find the new lines.
**TO DO**
The Checkbox "minor_change_flag" doesn't appear in the preview mode. should be no problem... **done**
%%(php)
to templating class;
* - optimization using history.back();
* - use central regex library for validation;
*/
// defaults
if(!defined('VALID_PAGENAME_PATTERN')) define ('VALID_PAGENAME_PATTERN', '/^[A-Za-zÄÖÜßäöü]+[A-Za-z0-9ÄÖÜßäöü]*$/s');
if(!defined('MAX_TAG_LENGTH')) define ('MAX_TAG_LENGTH', 75);
if(!defined('MAX_EDIT_NOTE_LENGTH')) define ('MAX_EDIT_NOTE_LENGTH', 50);
//i18n
if(!defined('PREVIEW_HEADER')) define('PREVIEW_HEADER', 'Preview');
if(!defined('LABEL_EDIT_NOTE')) define('LABEL_EDIT_NOTE', 'Please add a note on your edit');
if (!defined('INPUT_ERROR_STYLE')) define('INPUT_ERROR_STYLE', 'class="highlight"');
if(!defined('ERROR_INVALID_PAGENAME')) define('ERROR_INVALID_PAGENAME', 'This page name is invalid. Valid page names must start with a letter and contain only letters and numbers.');
if(!defined('ERROR_OVERWRITE_ALERT')) define('ERROR_OVERWRITE_ALERT', 'OVERWRITE ALERT: This page was modified by someone else while you were editing it. Please copy your changes and re-edit this page.');
if(!defined('ERROR_MISSING_EDIT_NOTE')) define('ERROR_MISSING_EDIT_NOTE', 'MISSING EDIT NOTE: Please fill in an edit note!');
if(!defined('ERROR_TAG_TOO_LONG')) define('ERROR_TAG_TOO_LONG', 'Tag too long! %d characters max.');
if(!defined('ERROR_NO_WRITE_ACCESS')) define('ERROR_NO_WRITE_ACCESS', 'You don\'t have write access to this page. You might need to register an account to be able to edit this page.');
if(!defined('MESSAGE_AUTO_RESIZE')) define('MESSAGE_AUTO_RESIZE', 'Clicking on %s will automatically truncate the tag to the correct size');
if(!defined('INPUT_SUBMIT_PREVIEW')) define('INPUT_SUBMIT_PREVIEW', 'Preview');
if(!defined('INPUT_SUBMIT_STORE')) define('INPUT_SUBMIT_STORE', 'Store');
if(!defined('INPUT_SUBMIT_REEDIT')) define('INPUT_SUBMIT_REEDIT', 'Re-edit');
if(!defined('INPUT_BUTTON_CANCEL')) define('INPUT_BUTTON_CANCEL', 'Cancel');
if(!defined('INPUT_SUBMIT_RENAME')) define('INPUT_SUBMIT_RENAME', 'Rename');
if(!defined('ACCESSKEY_STORE')) define('ACCESSKEY_STORE', 's');
if(!defined('ACCESSKEY_REEDIT')) define('ACCESSKEY_REEDIT', 'r');
if(!defined('ACCESSKEY_PREVIEW')) define('ACCESSKEY_PREVIEW', 'p');
if(!defined('SHOWCODE_LINK')) define('SHOWCODE_LINK', 'View formatting code for this page');
if(!defined('SHOWCODE_LINK_TITLE')) define('SHOWCODE_LINK_TITLE', 'Click to view page formatting code');
if(!defined('MINOR_CHANGE_FLAG_TEXT')) define('MINOR_CHANGE_FLAG_TEXT', 'Please check if your change is a minor one');//edit by FishPete
//initialization
$error = '';
$highlight_note = '';
$ondblclick = ''; //#123
if (isset($_POST['submit']) && ($_POST['submit'] == 'Preview') && ($user = $this->GetUser()) && ($user['doubleclickedit'] != 'N'))
{
$ondblclick = ' ondblclick=\'document.getElementById("reedit_id").click();\'';
//history.back() not working on IE. (changes are lost)
//however, history.back() works fine in FF, and this is the optimized choice
//TODO Optimization: Look $_SERVER['HTTP_USER_AGENT'] and use history.back() for good browsers like FF.
}
?>
>
tag))) { //TODO use central regex library
echo ''.ERROR_INVALID_PAGENAME.'';
}
elseif ($this->HasAccess("write") && $this->HasAccess("read"))
{
$newtag = $output = '';
if (isset($_POST['newtag'])) $newtag = $_POST['newtag'];
if ($newtag !== '') $this->Redirect($this->Href('edit', $newtag));
if ($_POST)
{
// strip CRLF line endings down to LF to achieve consistency ... plus it saves database space.
// Note: these codes must remain enclosed in double-quotes to work!
$body = str_replace("\r\n", "\n", $_POST['body']);
$body = preg_replace("/\n[ ]{4}/", "\n\t", $body); // @@@ FIXME: misses first line and multiple sets of four spaces
// we don't need to escape here, we do that just before display (i.e., treat note just like body!)
$note = trim($_POST['note']);
// only if saving:
if ($_POST['submit'] == 'Store')
{
// check for overwriting
if ($this->page)
{
if ($this->page['id'] != $_POST['previous'])
{
$error = ERROR_OVERWRITE_ALERT;
}
}
// check for edit note
if (($this->config['require_edit_note'] == 1) && $_POST['note'] == '')
{
$error .= ERROR_MISSING_EDIT_NOTE;
$highlight_note= INPUT_ERROR_STYLE;
}
// store
if (!$error)
{
// only save if new body differs from old body
if ($body != $this->page['body']) {
// add page (revisions)
//begin edit by FishPete
//$this->SavePage($this->tag, $body, $note);
if ($_POST['minor_change_flag']=='minor_change') //checkbox 'minor_change_flag' was cklicked by User
{
$this->SavePage($this->tag, $body, $note, '1');// save page as a minor change
}
else //checkbox was not clicked
{
$this->SavePage($this->tag, $body, $note, '0');// save page as major change
}
// end edit by FishPete
// now we render it internally so we can write the updated link table.
$this->ClearLinkTable();
$this->StartLinkTracking();
$dummy = $this->Header();
$dummy .= $this->Format($body);
$dummy .= $this->Footer();
$this->StopLinkTracking();
$this->WriteLinkTable();
$this->ClearLinkTable();
}
// forward
$this->Redirect($this->Href());
}
}
}
// fetch fields
$previous = $this->page['id'];
if (isset($_POST['previous'])) $previous = $_POST['previous'];
if (!isset($body)) $body = $this->page['body'];
$body = preg_replace("/\n[ ]{4}/", "\n\t", $body); // @@@ FIXME: misses first line and multiple sets of four spaces - JW 2005-01-16
if ($result = mysql_query("describe ".$this->config['table_prefix']."pages tag")) {
$field = mysql_fetch_assoc($result);
if (preg_match("/varchar\((\d+)\)/", $field['Type'], $matches)) $maxtaglen = $matches[1];
}
else
{
$maxtaglen = MAX_TAG_LENGTH;
}
if (isset($_POST['submit']) && $_POST['submit'] == INPUT_SUBMIT_PREVIEW) # preview output
{
$preview_buttons = ''."\n";
// We need to escape ALL entity refs before display so we display them _as_ entities instead of interpreting them
// so we use htmlspecialchars on the edit note (as on the body)
if ($this->config['require_edit_note'] != 2) //check if edit_notes are enabled
{
$preview_buttons .= ''.LABEL_EDIT_NOTE.' '."\n";
}
$preview_buttons .= ' '.MINOR_CHANGE_FLAG_TEXT.' '."\n";// Edit by FishPete, added 29.6.06
$preview_buttons .= ''."\n".
''."\n".
''."\n";
$output .= '
'.PREVIEW_HEADER.'
'."\n";
$output .= $this->Format($body);
$output .=
$this->FormOpen('edit')."\n".
''."\n".
// We need to escape ALL entity refs before display so we display them _as_ entities instead of interpreting them
// hence htmlspecialchars() instead of htmlspecialchars_ent() which UNescapes entities!
''."\n";
$output .= " \n".$preview_buttons.$this->FormClose()."\n";
}
elseif (!$this->page && strlen($this->tag) > $maxtaglen) # rename page
{
$this->tag = substr($this->tag, 0, $maxtaglen); // truncate tag to feed a backlinks-handler with the correct value. may be omited. it only works if the link to a backlinks-handler is built in the footer.
$output = ''.sprintf(ERROR_TAG_TOO_LONG, $maxtaglen).' '."\n";
$output .= sprintf(MESSAGE_AUTO_RESIZE, INPUT_SUBMIT_RENAME).'
'."\n";
$output .= $this->FormOpen('edit');
$output .= '';
$output .= ''."\n";
$output .= $this->FormClose();
}
else # edit page
{
// display form
if ($error)
{
$output .= ''.$error.''."\n";
}
// append a comment?
if (isset($_REQUEST['appendcomment']))
{
$body = trim($body)."\n\n----\n\n--".$this->GetUserName().' ('.strftime("%c").')';
}
$output .=
$this->FormOpen('edit').
''."\n".
// We need to escape ALL entity refs before display so we display them _as_ entities instead of interpreting them
// hence htmlspecialchars() instead of htmlspecialchars_ent() which UNescapes entities!
' '."\n";
//note add Edit
// We need to escape ALL entity refs before display so we display them _as_ entities instead of interpreting them
// so we use htmlspecialchars on the edit note (as on the body)
if ($this->config['require_edit_note'] != 2) //check if edit_notes are enabled
{
$output .= ' '.LABEL_EDIT_NOTE.' '."\n";
}
$output .= ' '.MINOR_CHANGE_FLAG_TEXT.' '."\n";// Edit by FishPete
//finish
$output .= ' '."\n".
$this->FormClose();
if ($this->config['gui_editor'] == 1)
{
$output .= ''."\n".
''."\n";
$output .= ''."\n";
}
}
echo $output;
}
else
{
$message = ''.ERROR_NO_WRITE_ACCESS.' '."\n".
" \n".
''.SHOWCODE_LINK.''.
" \n";
echo $message;
}
?>
%%
-edited 29.6.06. added the checkbox "minor_change_flag" to the preview mode.---the line is:
%%(php) $preview_buttons .= ' '.MINOR_CHANGE_FLAG_TEXT.' '."\n";// Edit by FishPete%%
Insert it under
%%(php)$preview_buttons .= ''.LABEL_EDIT_NOTE.' '."\n";%%