From 2b54e1e1cc3c24ef164b726b19467ec5536249f5 Mon Sep 17 00:00:00 2001 From: Michael Hamann Date: Sun, 27 Jun 2010 15:09:41 +0200 Subject: Restructured the sitemapper --- inc/Sitemapper.php | 96 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 70 insertions(+), 26 deletions(-) (limited to 'inc') diff --git a/inc/Sitemapper.php b/inc/Sitemapper.php index 68f4beddb..03f4d7bc4 100644 --- a/inc/Sitemapper.php +++ b/inc/Sitemapper.php @@ -33,41 +33,48 @@ class Sitemapper { } if(@filesize($sitemap) && - @filemtime($sitemap) > (time()-($conf['sitemap']*60*60*24))){ - dbglog('runSitemapper(): Sitemap up to date'); - return false; - } + @filemtime($sitemap) > (time()-($conf['sitemap']*60*60*24))){ + dbglog('runSitemapper(): Sitemap up to date'); + return false; + } $pages = idx_getIndex('page', ''); dbglog('runSitemapper(): creating sitemap using '.count($pages).' pages'); + $items = array(); - // build the sitemap - ob_start(); - print ''.NL; - print ''.NL; + // build the sitemap items foreach($pages as $id){ - $id = trim($id); - $file = wikiFN($id); - //skip hidden, non existing and restricted files if(isHiddenPage($id)) continue; - $date = @filemtime($file); - if(!$date) continue; if(auth_aclcheck($id,'','') < AUTH_READ) continue; + $items[] = SitemapItem::createFromID($id); + } + + $eventData = array('items' => &$items, 'sitemap' => &$sitemap); + $event = new Doku_Event('SITEMAP_GENERATE', $eventData); + if ($event->advise_before(true)) { + //save the new sitemap + $result = io_saveFile($sitemap, Sitemapper::getXML($items)); + } + $event->advise_after(); - print ' '.NL; - print ' '.wl($id,'',true).''.NL; - print ' '.date_iso8601($date).''.NL; - print ' '.NL; + return $result; + } + + private function getXML($items) { + ob_start(); + print ''.NL; + print ''.NL; + foreach ($items as $item) { + print $item->toXML(); } print ''.NL; - $data = ob_get_contents(); + $result = ob_get_contents(); ob_end_clean(); - - //save the new sitemap - return io_saveFile($sitemap,$data); + return $result; } + public function getFilePath() { global $conf; @@ -91,13 +98,50 @@ class Sitemapper { 'microsoft' => 'http://www.bing.com/webmaster/ping.aspx?siteMap='.$encoded_sitemap_url, ); - foreach ($ping_urls as $name => $url) { - dbglog("sitemapPingSearchEngines(): pinging $name"); - $resp = $http->get($url); - if($http->error) dbglog("runSitemapper(): $http->error"); - dbglog('runSitemapper(): '.preg_replace('/[\n\r]/',' ',strip_tags($resp))); + $event = new Doku_Event('SITEMAP_PING', $ping_urls); + if ($event->advise_before(true)) { + foreach ($ping_urls as $name => $url) { + dbglog("sitemapPingSearchEngines(): pinging $name"); + $resp = $http->get($url); + if($http->error) dbglog("runSitemapper(): $http->error"); + dbglog('runSitemapper(): '.preg_replace('/[\n\r]/',' ',strip_tags($resp))); + } } + $event->advise_after(); return true; } } + +class SitemapItem { + public $url; + public $lastmod; + public $changefreq; + public $priority; + + public function __construct($url, $lastmod, $changefreq = null, $priority = null) { + $this->url = $url; + $this->lastmod = $lastmod; + $this->changefreq = $changefreq; + $this->priority = $priority; + } + + public static function createFromID($id, $changefreq = null, $priority = null) { + $id = trim($id); + $date = @filemtime(wikiFN($id)); + if(!$date) return NULL; + return new SitemapItem(wl($id, '', true), $date, $changefreq, $priority); + } + + public function toXML() { + $result = ' '.NL; + $result .= ' '.hsc($this->url).''.NL; + $result .= ' '.date_iso8601($this->lastmod).''.NL; + if ($this->changefreq !== NULL) + $result .= ' '.hsc($this->changefreq).''.NL; + if ($this->priority !== NULL) + $result .= ' '.hsc($this->priority).''.NL; + $result .= ' '.NL; + return $result; + } +} -- cgit v1.2.3