| 
									
										
										
										
											2010-03-22 00:25:49 -04:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * StatusNet - the distributed open-source microblogging tool | 
					
						
							|  |  |  |  * Copyright (C) 2010, StatusNet, Inc. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Creates a dynamic sitemap for a StatusNet site | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * PHP version 5 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU Affero General Public License as published by | 
					
						
							|  |  |  |  * the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  |  * (at your option) any later version. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |  * GNU Affero General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU Affero General Public License | 
					
						
							|  |  |  |  * along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category  Sample | 
					
						
							|  |  |  |  * @package   StatusNet | 
					
						
							|  |  |  |  * @author    Evan Prodromou <evan@status.net> | 
					
						
							|  |  |  |  * @copyright 2010 StatusNet, Inc. | 
					
						
							|  |  |  |  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 | 
					
						
							|  |  |  |  * @link      http://status.net/ | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if (!defined('STATUSNET')) { | 
					
						
							|  |  |  |     // This check helps protect against security problems;
 | 
					
						
							|  |  |  |     // your code file can't be executed directly from the web.
 | 
					
						
							|  |  |  |     exit(1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Sitemap plugin | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category  Sample | 
					
						
							|  |  |  |  * @package   StatusNet | 
					
						
							|  |  |  |  * @author    Evan Prodromou <evan@status.net> | 
					
						
							|  |  |  |  * @copyright 2010 StatusNet, Inc. | 
					
						
							|  |  |  |  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 | 
					
						
							|  |  |  |  * @link      http://status.net/ | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SitemapPlugin extends Plugin | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Load related modules when needed | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * Most non-trivial plugins will require extra modules to do their work. Typically | 
					
						
							|  |  |  |      * these include data classes, action classes, widget classes, or external libraries. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * This method receives a class name and loads the PHP file related to that class. By | 
					
						
							|  |  |  |      * tradition, action classes typically have files named for the action, all lower-case. | 
					
						
							|  |  |  |      * Data classes are in files with the data class name, initial letter capitalized. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * Note that this method will be called for *all* overloaded classes, not just ones | 
					
						
							|  |  |  |      * in this plugin! So, make sure to return true by default to let other plugins, and | 
					
						
							|  |  |  |      * the core code, get a chance. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param string $cls Name of the class to be loaded | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return boolean hook value; true means continue processing, false means stop. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function onAutoload($cls) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $dir = dirname(__FILE__); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         switch ($cls) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |         case 'SitemapindexAction': | 
					
						
							|  |  |  |         case 'NoticesitemapAction': | 
					
						
							|  |  |  |         case 'UsersitemapAction': | 
					
						
							|  |  |  |             require_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; | 
					
						
							|  |  |  |             return false; | 
					
						
							|  |  |  |         case 'SitemapAction': | 
					
						
							|  |  |  |             require_once $dir . '/' . strtolower($cls) . '.php'; | 
					
						
							|  |  |  |         default: | 
					
						
							|  |  |  |             return true; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Map URLs to actions | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param Net_URL_Mapper $m path-to-action mapper | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return boolean hook value; true means continue processing, false means stop. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function onRouterInitialized($m) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $m->connect('sitemapindex.xml', | 
					
						
							|  |  |  |                     array('action' => 'sitemapindex')); | 
					
						
							| 
									
										
										
										
											2010-03-22 08:09:15 -04:00
										 |  |  |         $m->connect('/sitemaps/notice/:year/:month/:day/:index.xml', | 
					
						
							| 
									
										
										
										
											2010-03-22 00:25:49 -04:00
										 |  |  |                     array('action' => 'noticesitemap'), | 
					
						
							|  |  |  |                     array('year' => '[0-9]{4}', | 
					
						
							|  |  |  |                           'month' => '[1]?[0-9]', | 
					
						
							| 
									
										
										
										
											2010-03-22 08:09:15 -04:00
										 |  |  |                           'day' => '[123]?[0-9]', | 
					
						
							|  |  |  |                           'index' => '[0-9]+')); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-22 00:25:49 -04:00
										 |  |  |         $m->connect('/sitemaps/user/:index.xml', | 
					
						
							|  |  |  |                     array('action' => 'usersitemap'), | 
					
						
							|  |  |  |                     array('index' => '[0-9]+', | 
					
						
							|  |  |  |                           'month' => '[1]?[0-9]', | 
					
						
							|  |  |  |                           'day' => '[123]?[0-9]')); | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |