100 lines
2.5 KiB
PHP
100 lines
2.5 KiB
PHP
|
<?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);
|
||
|
}
|
||
|
}
|