/**
  * 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;
 }
Exemple #2
0
 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());
 }
Exemple #3
0
 public function getConnections($identifier, $signal)
 {
     return ezcSignalStaticConnections::getInstance()->getConnections($identifier, $signal);
 }
Exemple #4
0
 /**
  * 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));
 }
Exemple #6
0
 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'));
 }