gnu-social/plugins/Irc/extlib/phergie/Phergie/Plugin/Prioritize.php

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