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);
 | 
						|
    }
 | 
						|
}
 |