Example #1
0
 public static function fire($name, &$obj = null)
 {
     /**
      * Уникальность очереди событий определяется именем события содержащей имя класса события.
      * Все подписки хранятся в классе и объект не меняется
      **/
     $fire = Event::createFire($name, $obj);
     $list =& $fire['list'];
     $data =& $fire['data'];
     /**
      * TODO: Реализация is isshow... нужно сбрасывать события
      **/
     if (isset($list['result'][$fire['objid']]) && !is_null($list['result'][$fire['objid']])) {
         return $list['result'][$fire['objid']];
     }
     if (isset($data['executed']) && $data['executed'] === false) {
         return true;
     }
     //Защита от рекурсий вложенный вызов вернёт true
     $data['executed'] = false;
     if (!isset($list['readykeys'][$fire['objid']])) {
         $list['readykeys'][$fire['objid']] = array();
     }
     if (!isset($list['readyobj'][$fire['objid']])) {
         $list['readyobj'][$fire['objid']] = array();
     }
     // TODO: проверить обработку несуществующих ключей
     for ($i = 0, $l = sizeof($list['list']); $i < $l; $i++) {
         //Подписка на ходу
         Event::keystik($list['list'][$i]);
     }
     $r = Event::execute($fire, $list);
     if (Event::is($r)) {
         $r = true;
     } else {
         $r = false;
     }
     $list['result'][$fire['objid']] = $r;
     $data['executed'] = true;
     return $list['result'][$fire['objid']];
 }