Пример #1
0
 public static function check(&$layers)
 {
     static::$layers =& $layers;
     //Пробежка по слоям
     Event::tik('Infrajs');
     Event::tik('layer');
     Event::fire('Infrajs.oninit');
     //сборка событий
     Run::exec(static::$layers, function &(&$layer, &$parent) {
         //Запускается у всех слоёв в работе
         $r = null;
         if ($parent) {
             $layer['parent'] =& $parent;
         }
         Event::fire('layer.oninit', $layer);
         if (!Event::fire('layer.ischeck', $layer)) {
             return $r;
         }
         Event::fire('layer.oncheck', $layer);
         return $r;
     });
     //разрыв нужен для того чтобы можно было наперёд определить показывается слой или нет. oncheck у всех. а потом по порядку.
     Event::fire('oncheck');
     //момент когда доступны слои по getUnickLayer
     Run::exec(static::$layers, function &(&$layer) {
         //С чего вдруг oncheck у всех слоёв.. надо только у активных
         $r = null;
         if (Event::fire('layer.isshow', $layer)) {
             //Событие в котором вставляется html
             Event::fire('layer.onshow', $layer);
             //при клике делается отметка в конфиге слоя и слой парсится... в oncheck будут подстановки tpl и isRest вернёт false
             //onchange показанный слой не реагирует на изменение адресной строки, нельзя привязывать динамику интерфейса к адресной строке, только черещ перепарсивание
         }
         return $r;
     });
     //у родительского слоя showed будет реальное а не старое
     Event::fire('Infrajs.onshow');
     //loader, setA, seo добавить в html, можно зациклить check
     $html = View::html();
     //View::html('',true);
     return $html;
 }
Пример #2
0
$ans = array();
$ans['title'] = 'Проверка ключей событий';
$test = '';
Event::handler('ontestkeys', function () use(&$test) {
    $test .= 3;
}, 'some:test');
Event::handler('ontestkeys', function () use(&$test) {
    $test .= 1;
}, 'test');
Event::handler('ontestkeys', function () use(&$test) {
    $test .= 2;
}, 'test');
Event::fire('ontestkeys');
if ($test != '123') {
    return Ans::err($ans, 'Группа событий не сработало в нужном порядке ' . $test);
}
$test = '';
Event::handler('oh.ontestkeys', function () use(&$test) {
    $test .= 2;
});
Event::handler('oh.ontestkeys', function () use(&$test) {
    $test .= 3;
}, 'test');
Event::handler('oh.ontestkeys', function () use(&$test) {
    $test .= 1;
}, 'oh');
Event::fire('oh.ontestkeys');
if ($test != '123') {
    return Ans::err($ans, 'Имя класса - ключ по умаолчанию ' . $test);
}
return Ans::ret($ans);
Пример #3
0
        }
    }
    if ($obj['id'] === 1) {
        return false;
    }
    $test .= $obj['id'];
});
$r = Event::fire('layer.ontest', $obj2);
if (!$r) {
    return Ans::err($ans, 'Событие анализирую объект возвращает true');
}
$r = Event::fire('layer.ontest', $obj1);
if ($r) {
    return Ans::err($ans, 'Событие анализирую объект возвращает false');
}
$r = Event::fire('layer.ontest', $obj3);
if (!$r) {
    return Ans::err($ans, 'Событие анализирую объект возвращает true');
}
$r = Event::fire('layer.ontest', $obj1);
if ($r) {
    return Ans::err($ans, 'Кэш. Событие анализирую объект возвращает false');
}
$r = Event::fire('layer.ontest', $obj3);
if (!$r) {
    return Ans::err($ans, 'Кэш. Событие анализирую объект возвращает true');
}
if ($test != '22133') {
    return Ans::err($ans, 'События должны кэшироваться ' . $test);
}
return Ans::ret($ans);
Пример #4
0
    });
}, 'crumb');
Event::handler('Layer.oninit', function (&$layer) {
    if (empty($layer['childs'])) {
        return;
    }
    foreach ($layer['childs'] as $key => &$v) {
        Each::exec($v, function &(&$l) use($key) {
            $r = null;
            if (!empty($l['crumb'])) {
                return $r;
            }
            Crumb::set($l, 'crumb', $key);
            return $r;
        });
    }
}, 'crumb');
Event::handler('Layer.ischeck', function ($layer) {
    if (empty($layer['parent'])) {
        return;
    }
    if (!Event::fire('Layer.ischeck', $layer['parent'])) {
        return false;
    }
}, 'layer');
Event::handler('Layer.ischeck', function (&$layer) {
    if (!$layer['crumb']->is) {
        return false;
    }
}, 'crumb');
Crumb::init();
Пример #5
0
 public static function check(&$layer)
 {
     if (!isset($layer['env'])) {
         return;
     }
     $r = null;
     //Слои myenv надо показывать тогдаже когда и показывается сам слой
     $myenv = null;
     $ll = null;
     Run::exec(Controller::$layers, function (&$l) use(&$layer, &$myenv, &$ll) {
         //Есть окружение и мы не нашли ни одного true для него
         if (!isset($l['myenv'])) {
             return;
         }
         if (!Event::fire('layer.ischeck', $l)) {
             return;
         }
         //В back режиме выйти нельзя.. смотрятся все слои
         if (Each::isEqual($l, $layer)) {
             return;
         }
         //Значение по умолчанию смотрится отдельно
         if (!isset($l['myenv'][$layer['env']])) {
             return;
         }
         if (is_null($l['myenv'][$layer['env']])) {
             return;
         }
         if (Event::fire('layer.isshow', $l)) {
             //Ищим последнюю установку на счёт env
             $myenv = $l['myenv'][$layer['env']];
             $ll =& $l;
         }
     });
     if (!is_null($myenv)) {
         //Если слой скрываем слоем окружения который у него в родителях числиться он после этого сам всё равно должен показаться
         if ($myenv) {
             //Значение по умолчанию смотрим только если myenv undefined
             $r = true;
         } else {
             $r = false;
             $layer['is_save_branch'] = !!Layer::isParent($ll, $layer);
             //infrajs_isSaveBranch($layer,false);
         }
     }
     if (is_null($r) && @$layer['myenv']) {
         //Значение по умолчанию
         $myenv = $layer['myenv'][$layer['env']];
         if (!is_null($myenv)) {
             //Оо есть значение по умолчанию для самого себя
             if ($myenv) {
                 $r = true;
             } else {
                 //Если слой по умолчанию скрыт его детей не показываем
                 $r = false;
                 $layer['is_save_branch'] = false;
             }
         }
     }
     $layer['envval'] = $myenv;
     if ($r) {
         return !!$myenv;
     }
     return false;
 }
Пример #6
0
<?php

namespace infrajs\event;

use infrajs\ans\Ans;
if (!is_file('vendor/autoload.php')) {
    chdir('../../../../');
    require_once 'vendor/autoload.php';
}
$ans = array();
$ans['title'] = 'Последовательность событий';
$obj1 = array('id' => 'a');
$obj2 = array('id' => 'b');
Event::$classes['testlayer'] = function ($obj) {
    return $obj['id'];
};
$test = '';
Event::handler('testlayer.oncheck', function (&$obj) use(&$test) {
    $test .= '2:' . $obj['id'] . "#";
}, 'env:external');
Event::handler('testlayer.oncheck', function (&$obj) use(&$test) {
    $test .= '1:' . $obj['id'] . '-';
}, 'external');
Event::fire('testlayer.oncheck', $obj1);
Event::fire('testlayer.oncheck', $obj2);
Event::clear('testlayer');
if ($test !== '1:a-2:a#1:b-2:b#') {
    return Ans::err($ans, 'Некорректный порядок ' . $test);
}
return Ans::ret($ans);
Пример #7
0
    return Ans::err($ans, 'Некорректное выполнение ' . implode('', $test));
}
//Звонок в дверь
Event::fire('Звонок в дверь');
$res = null;
Event::handler('Звонок в дверь', function () use(&$res) {
    $res = true;
    return false;
}, 'Anton:Vika');
Event::handler('Звонок в дверь', function () use(&$res) {
    $res = false;
    return false;
}, 'Vika');
if (!$res) {
    return Ans::err($ans, 'Звонок в дверь не выполнен');
}
//Звонок по телефону
$res = null;
Event::handler('Звонок по телефону', function () use(&$res) {
    $res = false;
    return false;
}, 'Anton:Vika');
Event::handler('Звонок по телефону', function () use(&$res) {
    $res = true;
    return false;
}, 'Vika');
Event::fire('Звонок по телефону');
if (!$res) {
    return Ans::err($ans, 'Звонок по телефону не выполнен');
}
return Ans::ret($ans);
Пример #8
0
});
$r = Event::fire('onfoo');
if ($r) {
    return Ans::err($ans, 'Самозависимость');
}
if ($test != '12') {
    return Ans::err($ans, 'Динамическое управление порядком');
}
Event::handler('ohoho', function () use(&$test) {
}, 'foo:bar');
Event::handler('ohoho', function () use(&$test) {
}, 'bar:foo');
$r = false;
try {
    ob_start();
    Event::fire('ohoho');
} catch (\Exception $e) {
    ob_end_clean();
    $r = true;
}
if (!$r) {
    return Ans::err($ans, 'Должно было сработать рекурсивное исключение');
}
Event::handler('ohoho2', function () use(&$test) {
    $test = 'asdf';
}, 'some:some');
Event::fire('ohoho2');
if ($test != 'asdf') {
    return Ans::err($ans, 'Сам себя не может заблокировать');
}
return Ans::ret($ans);