forked from GNUsocial/gnu-social
		
	
		
			
				
	
	
		
			100 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Phergie 
 | |
|  *
 | |
|  * PHP version 5
 | |
|  *
 | |
|  * LICENSE
 | |
|  *
 | |
|  * This source file is subject to the new BSD license that is bundled
 | |
|  * with this package in the file LICENSE.
 | |
|  * It is also available through the world-wide-web at this URL:
 | |
|  * http://phergie.org/license
 | |
|  *
 | |
|  * @category  Phergie 
 | |
|  * @package   Phergie_Plugin_Prioritize
 | |
|  * @author    Phergie Development Team <team@phergie.org>
 | |
|  * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
 | |
|  * @license   http://phergie.org/license New BSD License
 | |
|  * @link      http://pear.phergie.org/package/Phergie_Plugin_Prioritize
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Prioritizes events such that they are executed in order from least to most 
 | |
|  * destructive.
 | |
|  *
 | |
|  * @category Phergie 
 | |
|  * @package  Phergie_Plugin_Prioritize
 | |
|  * @author   Phergie Development Team <team@phergie.org>
 | |
|  * @license  http://phergie.org/license New BSD License
 | |
|  * @link     http://pear.phergie.org/package/Phergie_Plugin_Prioritize
 | |
|  */
 | |
| class Phergie_Plugin_Prioritize extends Phergie_Plugin_Abstract
 | |
| {
 | |
|     /** 
 | |
|      * Event types ordered by priority of execution
 | |
|      *
 | |
|      * @var array
 | |
|      */
 | |
|     protected $priority = array(
 | |
|         'raw',
 | |
|         'pass',
 | |
|         'user',
 | |
|         'ping',
 | |
|         'pong',
 | |
|         'notice',
 | |
|         'join',
 | |
|         'list',
 | |
|         'names',
 | |
|         'version',
 | |
|         'stats',
 | |
|         'links',
 | |
|         'time',
 | |
|         'trace',
 | |
|         'admin',
 | |
|         'info',
 | |
|         'who',
 | |
|         'whois',
 | |
|         'whowas',
 | |
|         'mode',
 | |
|         'privmsg',
 | |
|         'action',
 | |
|         'nick',
 | |
|         'topic',
 | |
|         'invite',
 | |
|         'kill',
 | |
|         'part',
 | |
|         'quit'
 | |
|     );  
 | |
| 
 | |
|     /**
 | |
|      * Prioritizes events from least to most destructive. 
 | |
|      *
 | |
|      * @return void 
 | |
|      */
 | |
|     public function preDispatch()
 | |
|     {
 | |
|         $events = $this->getEventHandler();
 | |
| 
 | |
|         // Categorize events by type
 | |
|         $categorized = array();
 | |
|         foreach ($events as $event) {
 | |
|             $type = $event->getType();
 | |
|             if (!isset($categorized[$type])) {
 | |
|                 $categorized[$type] = array();
 | |
|             }
 | |
|             $categorized[$type][] = $event;
 | |
|         }
 | |
| 
 | |
|         // Order events by type from least to most destructive
 | |
|         $types = array_intersect($this->priority, array_keys($categorized));
 | |
|         $prioritized = array();
 | |
|         foreach ($types as $type) {
 | |
|             $prioritized = array_merge($prioritized, $categorized[$type]);
 | |
|         }
 | |
| 
 | |
|         // Replace the original events array with the prioritized one
 | |
|         $events->replaceEvents($prioritized);
 | |
|     }
 | |
| }
 |