Ejemplo n.º 1
0
 public static function createContext($name, &$obj, $key = '')
 {
     $p = explode(':', $key, 2);
     $key = $p[0];
     if (sizeof($p) == 2) {
         $keys = explode(',', $p[1]);
     } else {
         $keys = array();
     }
     $p = explode('.', $name);
     if (sizeof($p) > 1) {
         $class = $p[0];
     } else {
         $class = '';
         if ($obj) {
             throw new \Exception('Для события с объектом класс обязателен');
         }
     }
     if ($class) {
         //одноимённый с классом ключ есть всегда.
         //Вроде того что у класса есть свои собственные обработчики котоорые должны сработать первыми.
         //Если в качестве ключе указать название класса этот обработчик всегда будет первым
         $keys[] = $class;
     }
     if ($class == 'Controller') {
         $class = 'Infrajs';
         $p[0] = $class;
         $name = implode('.', $p);
     } else {
         if ($class == 'Layer') {
             $class = 'layer';
             $p[0] = $class;
             $name = implode('.', $p);
         }
     }
     $classes = static::$classes;
     if ($obj) {
         if (empty($classes[$class])) {
             throw new \Exception('Функция класса объекта ' . $class . ' не указанна пример Event::$classes["' . $class . '"] = function($obj) { return $obj["id"] }');
         } else {
             $objid = $classes[$class]($obj);
         }
     } else {
         $objid = '';
     }
     $list =& Event::getList($name);
     $list['class'] = $class;
     $context = array('key' => $key, 'executed' => array(), 'name' => $name, 'class' => $class, 'keys' => $keys, 'obj' => &$obj, 'objid' => $objid, 'list' => &$list);
     if (empty($list['data'][$context['objid']])) {
         $list['data'][$context['objid']] = array();
     }
     return $context;
 }