1: <?php defined('_JOOS_CORE') or exit();
2:
3: /*
4: joosEvents::add_events('system.onstart', function($a, $b) {
5: echo sprintf('1. a=%s; $b=%s', $a, $b);
6: });
7:
8: joosEvents::add_events('system.onstart', function($a, $b) {
9: echo sprintf('2. a=%s; $b=%s', $a, $b);
10: });
11:
12: joosEvents::add_events('system.onstart', 'absd');
13:
14: joosEvents::add_events('system.onstart', 'actionsTest::viewtest');
15:
16: joosEvents::fire_events('system.onstart', 1, 2);
17:
18: */
19:
20: /**
21: * Работа с плагинами, реализация метода Observer
22: *
23: * @version 1.0
24: * @package Core\Libraries
25: * @subpackage Events
26: * @category Libraries
27: * @author Joostina Team <info@joostina.ru>
28: * @copyright (C) 2007-2012 Joostina Team
29: * @license MIT License http://www.opensource.org/licenses/mit-license.php
30: * Информация об авторах и лицензиях стороннего кода в составе Joostina CMS: docs/copyrights
31: *
32: * @todo добавить возможность указывать файл, который будет непосредственно подключаться при наступлении события, в нём будет проверяться запрашиваемя функция и возможность её выполнения
33: * */
34: class joosEvents
35: {
36: private static $events = array();
37:
38: /**
39: * Добавление функции в общий список обработки
40: *
41: * @param string $events_name название обытия
42: * @param mixed $function задача
43: */
44: public static function add_events($events_name, $function)
45: {
46: // если массива для списка задач на событие не создано - создаём его
47: if (!isset(self::$events[$events_name])) {
48: self::$events[$events_name] = array();
49: }
50: self::$events[$events_name][] = $function;
51: }
52:
53: /**
54: * Вызов задач повешанных на событие
55: *
56: * @param string $events_name название обытия
57: */
58: public static function fire_events($events_name)
59: {
60: // задач на собыьтие не создано
61: if (!isset(self::$events[$events_name])) {
62: return false;
63: }
64:
65: // задачи на событие есть - выполняем их поочередно
66: foreach (self::$events[$events_name] as $event) {
67:
68: if (is_callable($event)) {
69: JDEBUG ? joosDebug::add(sprintf('Запускаем обработку события %s', $events_name)) : null;
70: call_user_func_array($event, func_get_args());
71: }
72: }
73: }
74:
75: /**
76: * Проверка наличия созданных задач на событие
77: *
78: * @param string $events_name название обытия
79: *
80: * @return bool результат наличия событий
81: */
82: public static function has_events($event_name)
83: {
84: joosDebug::log('Проверка наличия событий :event_name', array(':event_name' => $event_name));
85:
86: return (isset(self::$events[$event_name]) && count(self::$events[$event_name]) > 0);
87: }
88:
89: }
90: