public function alterExportUrls(&$urls)
 {
     $manifest = new DocumentationManifest(true);
     foreach ($manifest->getPages() as $url => $page) {
         $urls[$url] = $url;
     }
 }
 public function run($request)
 {
     $manifest = new DocumentationManifest(true);
     echo "<pre>";
     print_r($manifest->getPages());
     echo "</pre>";
     die;
 }
 public function rebuildIndexes($quiet = false)
 {
     require_once 'Zend/Search/Lucene.php';
     ini_set("memory_limit", -1);
     ini_set('max_execution_time', 0);
     Filesystem::makeFolder(DocumentationSearch::get_index_location());
     // only rebuild the index if we have to. Check for either flush or the time write.lock.file
     // was last altered
     $lock = DocumentationSearch::get_index_location() . '/write.lock.file';
     $lockFileFresh = file_exists($lock) && filemtime($lock) > time() - 60 * 60 * 24;
     echo "Building index in " . DocumentationSearch::get_index_location() . PHP_EOL;
     if ($lockFileFresh && !isset($_REQUEST['flush'])) {
         if (!$quiet) {
             echo "Index recently rebuilt. If you want to force reindex use ?flush=1";
         }
         return true;
     }
     try {
         $index = Zend_Search_Lucene::open(DocumentationSearch::get_index_location());
         $index->removeReference();
     } catch (Zend_Search_Lucene_Exception $e) {
         user_error($e);
     }
     try {
         $index = Zend_Search_Lucene::create(DocumentationSearch::get_index_location());
     } catch (Zend_Search_Lucene_Exception $c) {
         user_error($c);
     }
     // includes registration
     $manifest = new DocumentationManifest(true);
     $pages = $manifest->getPages();
     if ($pages) {
         $count = 0;
         // iconv complains about all the markdown formatting
         // turn off notices while we parse
         if (!Director::is_cli()) {
             echo "<ul>";
         }
         foreach ($pages as $url => $record) {
             $count++;
             $page = $manifest->getPage($url);
             $doc = new Zend_Search_Lucene_Document();
             $error = error_reporting();
             error_reporting(E_ALL ^ E_NOTICE);
             $content = $page->getHTML();
             error_reporting($error);
             $doc->addField(Zend_Search_Lucene_Field::Text('content', $content));
             $doc->addField($titleField = Zend_Search_Lucene_Field::Text('Title', $page->getTitle()));
             $doc->addField($breadcrumbField = Zend_Search_Lucene_Field::Text('BreadcrumbTitle', $page->getBreadcrumbTitle()));
             $doc->addField(Zend_Search_Lucene_Field::Keyword('Version', $page->getEntity()->getVersion()));
             $doc->addField(Zend_Search_Lucene_Field::Keyword('Language', $page->getEntity()->getLanguage()));
             $doc->addField(Zend_Search_Lucene_Field::Keyword('Entity', $page->getEntity()));
             $doc->addField(Zend_Search_Lucene_Field::Keyword('Link', $page->Link()));
             // custom boosts
             $titleField->boost = 3;
             $breadcrumbField->boost = 1.5;
             $boost = Config::inst()->get('DocumentationSearch', 'boost_by_path');
             foreach ($boost as $pathExpr => $boost) {
                 if (preg_match($pathExpr, $page->getRelativePath())) {
                     $doc->boost = $boost;
                 }
             }
             error_reporting(E_ALL ^ E_NOTICE);
             $index->addDocument($doc);
             if (!$quiet) {
                 if (Director::is_cli()) {
                     echo " * adding " . $page->getPath() . "\n";
                 } else {
                     echo "<li>adding " . $page->getPath() . "</li>\n";
                 }
             }
         }
     }
     $index->commit();
     if (!$quiet) {
         echo "complete.";
     }
 }