Ejemplo n.º 1
0
 function savePage()
 {
     $request =& $this->request;
     if ($this->isUnchanged()) {
         // Allow admin lock/unlock even if
         // no text changes were made.
         if ($this->updateLock()) {
             $dbi = $request->getDbh();
             $dbi->touch();
         }
         // Save failed. No changes made.
         $this->_redirectToBrowsePage();
         // user will probably not see the rest of this...
         include_once 'lib/display.php';
         // force browse of current version:
         $request->setArg('version', false);
         displayPage($request, 'nochanges');
         return true;
     }
     if (!$this->user->isAdmin() and $this->isSpam()) {
         $this->_isSpam = true;
         return false;
         /*
         // Save failed. No changes made.
         $this->_redirectToBrowsePage();
         // user will probably not see the rest of this...
         include_once('lib/display.php');
         // force browse of current version:
         $request->setArg('version', false);
         displayPage($request, 'nochanges');
         return true;
         */
     }
     $page =& $this->page;
     // Include any meta-data from original page version which
     // has not been explicitly updated.
     // (Except don't propagate pgsrc_version --- moot for now,
     //  because at present it never gets into the db...)
     $meta = $this->selected->getMetaData();
     unset($meta['pgsrc_version']);
     $meta = array_merge($meta, $this->meta);
     // Save new revision
     $this->_content = $this->getContent();
     $newrevision = $page->save($this->_content, $this->version == -1 ? -1 : $this->_currentVersion + 1, $meta);
     if (!isa($newrevision, 'WikiDB_PageRevision')) {
         // Save failed.  (Concurrent updates).
         return false;
     } else {
         // Save succeded. We store cross references (if there are).
         $reference_manager =& ReferenceManager::instance();
         $reference_manager->extractCrossRef($this->_content, $page->getName(), ReferenceManager::REFERENCE_NATURE_WIKIPAGE, GROUP_ID);
         // Save succeded. We raise an event.
         $new = $this->version + 1;
         $difflink = WikiURL($page->getName(), array('action' => 'diff'), true);
         $difflink .= "&versions%5b%5d=" . $this->version . "&versions%5b%5d=" . $new;
         $eM =& EventManager::instance();
         $uM =& UserManager::instance();
         $user =& $uM->getCurrentUser();
         $eM->processEvent("wiki_page_updated", array('group_id' => GROUP_ID, 'wiki_page' => $page->getName(), 'diff_link' => $difflink, 'user' => $user, 'version' => $this->version));
     }
     // New contents successfully saved...
     $this->updateLock();
     // Clean out archived versions of this page.
     include_once 'lib/ArchiveCleaner.php';
     $cleaner = new ArchiveCleaner($GLOBALS['ExpireParams']);
     $cleaner->cleanPageRevisions($page);
     /* generate notification emails done in WikiDB::save to catch 
        all direct calls (admin plugins) */
     // look at the errorstack
     $errors = $GLOBALS['ErrorManager']->_postponed_errors;
     $warnings = $GLOBALS['ErrorManager']->getPostponedErrorsAsHTML();
     $GLOBALS['ErrorManager']->_postponed_errors = $errors;
     $dbi = $request->getDbh();
     $dbi->touch();
     global $WikiTheme;
     if (empty($warnings->_content) && !$WikiTheme->getImageURL('signature')) {
         // Do redirect to browse page if no signature has
         // been defined.  In this case, the user will most
         // likely not see the rest of the HTML we generate
         // (below).
         $this->_redirectToBrowsePage();
     }
     // Force browse of current page version.
     $request->setArg('version', false);
     //$request->setArg('action', false);
     $template = Template('savepage', $this->tokens);
     $template->replace('CONTENT', $newrevision->getTransformedContent());
     if (!empty($warnings->_content)) {
         $template->replace('WARNINGS', $warnings);
     }
     $pagelink = WikiLink($page);
     GeneratePage($template, fmt("Saved: %s", $pagelink), $newrevision);
     return true;
 }
Ejemplo n.º 2
0
 function savePage()
 {
     $request =& $this->request;
     if ($this->isUnchanged()) {
         // Allow admin lock/unlock even if
         // no text changes were made.
         if ($this->updateLock()) {
             $dbi = $request->getDbh();
             $dbi->touch();
         }
         // Save failed. No changes made.
         $this->_redirectToBrowsePage();
         // user will probably not see the rest of this...
         require_once 'lib/display.php';
         // force browse of current version:
         $request->setArg('action', false);
         $request->setArg('version', false);
         displayPage($request, 'nochanges');
         return true;
     }
     if (!$this->user->isAdmin() and $this->isSpam()) {
         $this->_isSpam = true;
         return false;
         /*
         // Save failed. No changes made.
         $this->_redirectToBrowsePage();
         // user will probably not see the rest of this...
         require_once('lib/display.php');
         // force browse of current version:
         $request->setArg('version', false);
         displayPage($request, 'nochanges');
         return true;
         */
     }
     $page =& $this->page;
     // Include any meta-data from original page version which
     // has not been explicitly updated.
     // (Except don't propagate pgsrc_version --- moot for now,
     //  because at present it never gets into the db...)
     $meta = $this->selected->getMetaData();
     unset($meta['pgsrc_version']);
     $meta = array_merge($meta, $this->meta);
     // Save new revision
     $this->_content = $this->getContent();
     $newrevision = $page->save($this->_content, $this->version == -1 ? -1 : $this->_currentVersion + 1, $meta);
     if (!isa($newrevision, 'WikiDB_PageRevision')) {
         // Save failed.  (Concurrent updates).
         return false;
     }
     // New contents successfully saved...
     $this->updateLock();
     // Clean out archived versions of this page.
     require_once 'lib/ArchiveCleaner.php';
     $cleaner = new ArchiveCleaner($GLOBALS['ExpireParams']);
     $cleaner->cleanPageRevisions($page);
     /* generate notification emails done in WikiDB::save to catch 
        all direct calls (admin plugins) */
     // look at the errorstack
     $errors = $GLOBALS['ErrorManager']->_postponed_errors;
     $warnings = $GLOBALS['ErrorManager']->getPostponedErrorsAsHTML();
     $GLOBALS['ErrorManager']->_postponed_errors = $errors;
     $dbi = $request->getDbh();
     $dbi->touch();
     global $WikiTheme;
     if (empty($warnings->_content) && !$WikiTheme->getImageURL('signature')) {
         // Do redirect to browse page if no signature has
         // been defined.  In this case, the user will most
         // likely not see the rest of the HTML we generate
         // (below).
         $request->setArg('action', false);
         $this->_redirectToBrowsePage();
     }
     // Force browse of current page version.
     $request->setArg('version', false);
     // testme: does preview and more need action=edit?
     $request->setArg('action', false);
     $template = Template('savepage', $this->tokens);
     $template->replace('CONTENT', $newrevision->getTransformedContent());
     if (!empty($warnings->_content)) {
         $template->replace('WARNINGS', $warnings);
         unset($GLOBALS['ErrorManager']->_postponed_errors);
     }
     $pagelink = WikiLink($page);
     GeneratePage($template, fmt("Saved: %s", $pagelink), $newrevision);
     return true;
 }