From 0ae8cbf5c0b1a198b963490985b7738392ebcb97 Mon Sep 17 00:00:00 2001 From: ahriman Date: Mon, 3 Dec 2018 19:22:25 -0500 Subject: installed dokuwiki, added to navbar, updated news --- wiki/lib/exe/indexer.php | 209 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 wiki/lib/exe/indexer.php (limited to 'wiki/lib/exe/indexer.php') diff --git a/wiki/lib/exe/indexer.php b/wiki/lib/exe/indexer.php new file mode 100644 index 0000000..4f60f16 --- /dev/null +++ b/wiki/lib/exe/indexer.php @@ -0,0 +1,209 @@ + + */ +if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../'); +define('DOKU_DISABLE_GZIP_OUTPUT',1); +require_once(DOKU_INC.'inc/init.php'); +session_write_close(); //close session +if(!defined('NL')) define('NL',"\n"); + +// keep running after browser closes connection +@ignore_user_abort(true); + +// check if user abort worked, if yes send output early +$defer = !@ignore_user_abort() || $conf['broken_iua']; +$output = $INPUT->has('debug') && $conf['allowdebug']; +if(!$defer && !$output){ + sendGIF(); // send gif +} + +$ID = cleanID($INPUT->str('id')); + +// Catch any possible output (e.g. errors) +if(!$output) ob_start(); +else header('Content-Type: text/plain'); + +// run one of the jobs +$tmp = array(); // No event data +$evt = new Doku_Event('INDEXER_TASKS_RUN', $tmp); +if ($evt->advise_before()) { + runIndexer() or + runSitemapper() or + sendDigest() or + runTrimRecentChanges() or + runTrimRecentChanges(true) or + $evt->advise_after(); +} + +if(!$output) { + ob_end_clean(); + if($defer) sendGIF(); +} + +exit; + +// -------------------------------------------------------------------- + +/** + * Trims the recent changes cache (or imports the old changelog) as needed. + * + * @param bool $media_changes If the media changelog shall be trimmed instead of + * the page changelog + * @return bool + * + * @author Ben Coburn + */ +function runTrimRecentChanges($media_changes = false) { + global $conf; + + echo "runTrimRecentChanges($media_changes): started".NL; + + $fn = ($media_changes ? $conf['media_changelog'] : $conf['changelog']); + + // Trim the Recent Changes + // Trims the recent changes cache to the last $conf['changes_days'] recent + // changes or $conf['recent'] items, which ever is larger. + // The trimming is only done once a day. + if (file_exists($fn) && + (@filemtime($fn.'.trimmed')+86400) 0) { + ksort($old_lines); + $out_lines = array_merge(array_slice($old_lines,-$extra),$out_lines); + } + + // save trimmed changelog + io_saveFile($fn.'_tmp', implode('', $out_lines)); + @unlink($fn); + if (!rename($fn.'_tmp', $fn)) { + // rename failed so try another way... + io_unlock($fn); + io_saveFile($fn, implode('', $out_lines)); + @unlink($fn.'_tmp'); + } else { + io_unlock($fn); + } + echo "runTrimRecentChanges($media_changes): finished".NL; + return true; + } + + // nothing done + echo "runTrimRecentChanges($media_changes): finished".NL; + return false; +} + +/** + * Runs the indexer for the current page + * + * @author Andreas Gohr + */ +function runIndexer(){ + global $ID; + global $conf; + print "runIndexer(): started".NL; + + if(!$ID) return false; + + // do the work + return idx_addPage($ID, true); +} + +/** + * Builds a Google Sitemap of all public pages known to the indexer + * + * The map is placed in the root directory named sitemap.xml.gz - This + * file needs to be writable! + * + * @author Andreas Gohr + * @link https://www.google.com/webmasters/sitemaps/docs/en/about.html + */ +function runSitemapper(){ + print "runSitemapper(): started".NL; + $result = Sitemapper::generate() && Sitemapper::pingSearchEngines(); + print 'runSitemapper(): finished'.NL; + return $result; +} + +/** + * Send digest and list mails for all subscriptions which are in effect for the + * current page + * + * @author Adrian Lang + */ +function sendDigest() { + global $conf; + global $ID; + + echo 'sendDigest(): started'.NL; + if(!actionOK('subscribe')) { + echo 'sendDigest(): disabled'.NL; + return false; + } + $sub = new Subscription(); + $sent = $sub->send_bulk($ID); + + echo "sendDigest(): sent $sent mails".NL; + echo 'sendDigest(): finished'.NL; + return (bool) $sent; +} + +/** + * Just send a 1x1 pixel blank gif to the browser + * + * @author Andreas Gohr + * @author Harry Fuecks + */ +function sendGIF(){ + $img = base64_decode('R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAIBTAA7'); + header('Content-Type: image/gif'); + header('Content-Length: '.strlen($img)); + header('Connection: Close'); + print $img; + tpl_flush(); + // Browser should drop connection after this + // Thinks it's got the whole image +} + +//Setup VIM: ex: et ts=4 : +// No trailing PHP closing tag - no output please! +// See Note at http://php.net/manual/en/language.basic-syntax.instruction-separation.php -- cgit 1.4.1-2-gfad0