<?php if (!defined('PmWiki')) exit(); /* EditTitle (v 0.4) Waylan Limberg (waylan@gmail.com) Description: Adds an Title input field to the edit form of PmWiki. For more info and instructions go to http://www.pmwiki.org/wiki/Cookbook/EditTitle */ # define pointers to functions $HandleActions[edit] = 'EditTitleHandleEdit'; array_unshift($EditFunctions, 'AddTitle'); array_unshift($EditFunctions, 'RequireTitle'); array_unshift($EditFields, 'title'); # redefine HandleEdit funtion as EditTitleHandleEdit function EditTitleHandleEdit($pagename, $auth = 'edit') { global $IsPagePosted, $EditFields, $ChangeSummary, $EditFunctions, $EnablePost, $FmtV, $Now, $PageEditForm, $HandleEditFmt, $PageStartFmt, $PageEditFmt, $PageEndFmt; if ($_POST['cancel']) { Redirect($pagename); return; } Lock(2); $IsPagePosted = false; $page = RetrieveAuthPage($pagename, $auth, true); if (!$page) Abort("?cannot edit $pagename"); PCache($pagename,$page); $new = $page; // note $EditFields here foreach((array)$EditFields as $k) if (isset($_POST[$k])) $new[$k]=str_replace("\r",'',stripmagic($_POST[$k])); if ($ChangeSummary) $new["csum:$Now"] = $ChangeSummary; $EnablePost &= (@$_POST['post'] || @$_POST['postedit']); // note $EditFunctions here foreach((array)$EditFunctions as $fn) $fn($pagename,$page,$new); Lock(0); if ($IsPagePosted && !@$_POST['postedit']) { Redirect($pagename); return; } $FmtV['$DiffClassMinor'] = (@$_POST['diffclass']=='minor') ? "checked='checked'" : ''; # Added call to RemoveTitle here $FmtV['$EditText'] = str_replace('$','$',htmlspecialchars(RemoveTitle(@$new['text']),ENT_NOQUOTES)); $FmtV['$EditBaseTime'] = $Now; if (@$PageEditForm) { $form = ReadPage(FmtPageName($PageEditForm, $pagename), READPAGE_CURRENT); $FmtV['$EditForm'] = MarkupToHTML($pagename, $form['text']); } SDV($PageEditFmt, "<div id='wikiedit'> <h1 class='wikiaction'>$[Editing {\$FullName}]</h1> <form method='post' action='\$PageUrl?action=edit'> <input type='hidden' name='action' value='edit' /> <input type='hidden' name='n' value='\$FullName' /> <input type='hidden' name='basetime' value='\$EditBaseTime' /> \$EditMessageFmt <textarea id='text' name='text' rows='25' cols='60' onkeydown='if (event.keyCode==27) event.returnValue=false;' >\$EditText</textarea><br /> <input type='submit' name='post' value=' $[Save] ' />"); SDV($HandleEditFmt, array(&$PageStartFmt, &$PageEditFmt, &$PageEndFmt)); PrintFmt($pagename, $HandleEditFmt); } # RemoveTitle pulls title from markup and sets it to display in text input field function RemoveTitle($text){ global $InputTags; # pattern should be same as defined in markup $pattern = '/\\(:title\\s(.*?):\\)/'; # Find title to display in field preg_match($pattern, $text, $matches); # Define Title input field SDVA($InputTags['e_title'], array( ':html' => "<input type='text' \$InputFormArgs />", 'name' => 'title', 'size' => '60' ,'value' => $matches[1])); # return text without title markup return trim(preg_replace($pattern, '', $text)); } # AddTitle adds title back into markup before saving function AddTitle($pagename, &$page, &$new){ if ($new[title] > '') $new[text] = "(:title $new[title]:)\n$new[text]"; return; } # Require that a title be defined on each page function RequireTitle($pagename, &$page, &$new){ global $EnablePost, $MessagesFmt, $ForceTitle; if ($ForceTitle && isset($new[text]) && trim($new[title]) == '') { $EnablePost = 0; $MessagesFmt[] = '<h3 class="wikimessage">A Title must be defined for this page</h3>'; } return; }