/** * Returns the instance of the ezcSignalStaticConnections.. * * @return ezcConfigurationManager */ public static function getInstance() { if (self::$instance === null) { self::$instance = new ezcSignalStaticConnections(); ezcBaseInit::fetchConfig('ezcInitSignalStaticConnections', self::$instance); } return self::$instance; }
protected function setUp() { $this->giver = new TheGiver(); $this->receiver = new TheReceiver(); TheReceiver::$globalFunctionRun = false; TheReceiver::$staticFunctionRun = false; ezcSignalStaticConnections::getInstance()->connections = array(); ezcSignalCollection::setStaticConnectionsHolder(new EmptyStaticConnections()); }
public function getConnections($identifier, $signal) { return ezcSignalStaticConnections::getInstance()->getConnections($identifier, $signal); }
/** * Emits the signal with the name $signal * * Any additional parameters are sent as parameters to the slot. * * @throws ezcSignalSlotException if the signals options has been set and $signal is not in the list of signals. * @param string $signal * @param ... $signal_parameters * @return void */ public function emit($signal) { // if the the signals option is set we must check if the signal exists if ($this->options->signals != null && !in_array($signal, $this->options->signals)) { throw new ezcSignalSlotException("No such signal {$signal}"); } if ($this->signalsBlocked) { return; } // prepare the parameters $parameters = array_slice(func_get_args(), 1); // check if there are any static connections $priStaticConnections = array(); if (self::$staticConnectionsHolder == null) { $priStaticConnections = ezcSignalStaticConnections::getInstance()->getConnections($this->identifier, $signal); } else { $priStaticConnections = self::$staticConnectionsHolder->getConnections($this->identifier, $signal); } $hasPriStaticConnections = false; if (count($priStaticConnections) > (isset($priStaticConnections[1000]) ? 1 : 0)) { $hasPriStaticConnections = true; } // fast algorithm if there are no prioritized slots if (isset($this->priorityConnections[$signal]) === false && !$hasPriStaticConnections) { if (isset($this->defaultConnections[$signal])) { foreach ($this->defaultConnections[$signal] as $callback) { call_user_func_array($callback, $parameters); } } if (isset($priStaticConnections[1000])) { foreach ($priStaticConnections[1000] as $callback) { call_user_func_array($callback, $parameters); } } } else { // order slots $defaultKeys = array(); if (isset($this->priorityConnections[$signal])) { $defaultKeys = array_keys($this->priorityConnections[$signal]); } $staticKeys = array_keys($priStaticConnections); $allKeys = array_unique(array_merge($defaultKeys, $staticKeys, array(1000))); sort($allKeys, SORT_NUMERIC); foreach ($allKeys as $key) { if ($key == 1000 && isset($this->defaultConnections[$signal])) { foreach ($this->defaultConnections[$signal] as $callback) { call_user_func_array($callback, $parameters); } } if (isset($this->priorityConnections[$signal][$key])) { foreach ($this->priorityConnections[$signal][$key] as $callback) { call_user_func_array($callback, $parameters); } } if (isset($priStaticConnections[$key])) { foreach ($priStaticConnections[$key] as $callback) { call_user_func_array($callback, $parameters); } } } } }
public function testDisconnectEmpty() { ezcSignalStaticConnections::getInstance()->disconnect("TheGiver", "signal", array($this->receiver, "slotNoParams3"), 1000); $this->assertEquals(0, count(ezcSignalStaticConnections::getInstance()->connections)); }
public function stopCaching() { ezcSignalStaticConnections::getInstance()->disconnect("UserBla", "ezcTemplateCacheRead", array(ezcTemplateConfiguration::getInstance()->cacheManager, "register")); $this->depth--; array_pop($this->keys); }
private $identifier = null; public function __construct($id) { $this->identifier = $id; } public function signals() { if ($this->signals == null) { $this->signals = new ezcSignalCollection(__CLASS__); } return $this->signals; } public function manipulate() { // change the data here $this->signals()->emit("dataChanged", $this->identifier); } } class Cache { public function deleteCache($identifier) { echo "Deleting cache for ID: {$identifier}\n"; } } $cache = new Cache(); ezcSignalStaticConnections::getInstance()->connect("DataObject", "dataChanged", array($cache, "deleteCache")); $data1 = new DataObject(1); $data2 = new DataObject(2); $data1->manipulate(); $data2->manipulate();
public function testIsConnectedStaticConnectionDisconnected() { ezcSignalStaticConnections::getInstance()->connect('TheGiver', 'signal', 'slotFunction'); ezcSignalStaticConnections::getInstance()->disconnect('TheGiver', 'signal', 'slotFunction'); $this->assertEquals(false, $this->giver->signals->isConnected('signal')); }