Exemple #1
0
 function run($dbi, $argstr, &$request, $basepage)
 {
     $args = $this->getArgs($argstr, $request);
     extract($args);
     if (empty($page)) {
         return '';
     }
     $html = HTML(HTML::h3(fmt("Retransform page '%s'", $page)));
     // bypass WikiDB and cache, go directly through the backend.
     $backend =& $dbi->_backend;
     //$pagedata = $backend->get_pagedata($page);
     $version = $backend->get_latest_version($page);
     $vdata = $backend->get_versiondata($page, $version, true);
     include_once 'lib/PageType.php';
     $formatted = new TransformedText($dbi->getPage($page), $vdata['%content'], $vdata);
     $content =& $formatted->_content;
     $html->pushContent($this->_DebugPrintArray($content));
     $links = $formatted->getWikiPageLinks();
     if (count($links) > 0) {
         $html->pushContent(HTML::h3("Links"));
         $html->pushContent($this->_DebugPrintArray($links));
     }
     return $html;
 }
Exemple #2
0
 /**
  * Really should have a _fixupPagedata and _fixupVersiondata, but this works.
  */
 function _fixupData(&$data)
 {
     global $request;
     $user = $request->getUser();
     foreach ($data as $key => $val) {
         if (is_integer($key)) {
         } elseif ($key == 'passwd' and !$user->isAdmin()) {
             $data[$key] = $val ? _("<not displayed>") : _("<empty>");
         } elseif ($key and $key == '_cached_html') {
             $val = TransformedText::unpack($val);
             ob_start();
             print_r($val);
             $data[$key] = HTML::pre(ob_get_contents());
             ob_end_clean();
         } elseif (is_bool($val)) {
             $data[$key] = $val ? "<true>" : "<false>";
         } elseif (is_string($val) && substr($val, 0, 2) == 'a:') {
             // how to indent this table?
             $val = unserialize($val);
             $this->_fixupData($val);
             $data[$key] = HTML::table(array('border' => 1, 'cellpadding' => 2, 'cellspacing' => 0), $this->_showhash(false, $val));
         } elseif (is_array($val)) {
             // how to indent this table?
             $this->_fixupData($val);
             $data[$key] = HTML::table(array('border' => 1, 'cellpadding' => 2, 'cellspacing' => 0), $this->_showhash(false, $val));
         } elseif ($key and $key == '%content') {
             if ($val === true) {
                 $val = '<true>';
             } elseif (strlen($val) > 40) {
                 $val = substr($val, 0, 40) . " ...";
             }
             $data[$key] = $val;
         }
     }
     unset($data['%pagedata']);
     // problem in backend
 }
Exemple #3
0
 /**
  * Get the transformed content of a page.
  *
  * @param string $pagetype  Override the page-type of the revision.
  *
  * @return object An XmlContent-like object containing the page transformed
  * contents.
  */
 function getTransformedContent($pagetype_override = false)
 {
     $backend =& $this->_wikidb->_backend;
     if ($pagetype_override) {
         // Figure out the normal page-type for this page.
         $type = PageType::GetPageType($this->get('pagetype'));
         if ($type->getName() == $pagetype_override) {
             $pagetype_override = false;
         }
         // Not really an override...
     }
     if ($pagetype_override) {
         // Overriden page type, don't cache (or check cache).
         return new TransformedText($this->getPage(), $this->getPackedContent(), $this->getMetaData(), $pagetype_override);
     }
     $possibly_cache_results = true;
     if (!USECACHE or WIKIDB_NOCACHE_MARKUP) {
         if (WIKIDB_NOCACHE_MARKUP == 'purge') {
             // flush cache for this page.
             $page = $this->getPage();
             $page->set('_cached_html', '');
             // ignored with !USECACHE
         }
         $possibly_cache_results = false;
     } elseif (USECACHE and !$this->_transformedContent) {
         //$backend->lock();
         if ($this->isCurrent()) {
             $page = $this->getPage();
             $this->_transformedContent = TransformedText::unpack($page->get('_cached_html'));
         } else {
             $possibly_cache_results = false;
         }
         //$backend->unlock();
     }
     if (!$this->_transformedContent) {
         $this->_transformedContent = new TransformedText($this->getPage(), $this->getPackedContent(), $this->getMetaData());
         if ($possibly_cache_results and !WIKIDB_NOCACHE_MARKUP) {
             // If we're still the current version, cache the transfomed page.
             //$backend->lock();
             if ($this->isCurrent()) {
                 $page->set('_cached_html', $this->_transformedContent->pack());
             }
             //$backend->unlock();
         }
     }
     return $this->_transformedContent;
 }
Exemple #4
0
 /**
  * Put the database into a consistent state
  * by reparsing and restoring all pages.
  *
  * This should put the database into a consistent state.
  * (I.e. rebuild indexes, etc...)
  *
  * @return boolean True iff successful.
  */
 function rebuild($args = false)
 {
     global $request;
     $dbh = $request->getDbh();
     $iter = $dbh->getAllPages(false);
     while ($page = $iter->next()) {
         $current = $page->getCurrentRevision(true);
         $pagename = $page->getName();
         $meta = $current->_data;
         $version = $current->getVersion();
         $content =& $meta['%content'];
         $formatted = new TransformedText($page, $content, $current->getMetaData());
         $type = $formatted->getType();
         $meta['pagetype'] = $type->getName();
         $links = $formatted->getWikiPageLinks();
         // linkto => relation
         $this->lock(array('version', 'page', 'recent', 'link', 'nonempty'));
         $this->set_versiondata($pagename, $version, $meta);
         $this->set_links($pagename, $links);
         $this->unlock(array('version', 'page', 'recent', 'link', 'nonempty'));
     }
 }