1: | <?php
|
2: | |
3: | |
4: | |
5: | |
6: | |
7: | |
8: | |
9: | |
10: | |
11: | |
12: | |
13: | |
14: | |
15: | |
16: | |
17: | |
18: | |
19: |
|
20: |
|
21: | |
22: | |
23: |
|
24: |
|
25: | defined('XOOPS_ROOT_PATH') || exit('Restricted access');
|
26: |
|
27: | XoopsLoad::load('XoopsLists');
|
28: | XoopsLoad::load('XoopsCache');
|
29: |
|
30: | |
31: | |
32: | |
33: | |
34: | |
35: | |
36: | |
37: | |
38: |
|
39: | class XoopsPreload
|
40: | {
|
41: | |
42: | |
43: |
|
44: | public $_preloads = array();
|
45: |
|
46: | |
47: | |
48: |
|
49: | public $_events = array();
|
50: |
|
51: | |
52: | |
53: | |
54: |
|
55: | protected function __construct()
|
56: | {
|
57: | $this->setPreloads();
|
58: | $this->setEvents();
|
59: | }
|
60: |
|
61: | |
62: | |
63: | |
64: | |
65: |
|
66: | public static function getInstance()
|
67: | {
|
68: | static $instance = false;
|
69: | if (!$instance) {
|
70: | $instance = new XoopsPreload();
|
71: | }
|
72: |
|
73: | return $instance;
|
74: | }
|
75: |
|
76: | |
77: | |
78: | |
79: | |
80: |
|
81: | public function setPreloads()
|
82: | {
|
83: |
|
84: | if ($modules_list = XoopsCache::read('system_modules_active')) {
|
85: | $i = 0;
|
86: | foreach ($modules_list as $module) {
|
87: | if (is_dir($dir = XOOPS_ROOT_PATH . "/modules/{$module}/preloads/")) {
|
88: | $file_list = XoopsLists::getFileListAsArray($dir);
|
89: | foreach ($file_list as $file) {
|
90: | if (preg_match('/(\.php)$/i', $file)) {
|
91: | $file = substr($file, 0, -4);
|
92: | if ('index' !== $file) {
|
93: | $this->_preloads[$i]['module'] = $module;
|
94: | $this->_preloads[$i]['file'] = $file;
|
95: | ++$i;
|
96: | }
|
97: | }
|
98: | }
|
99: | }
|
100: | }
|
101: | }
|
102: | }
|
103: |
|
104: | |
105: | |
106: | |
107: | |
108: |
|
109: | public function setEvents()
|
110: | {
|
111: | foreach ($this->_preloads as $preload) {
|
112: | include_once XOOPS_ROOT_PATH . '/modules/' . $preload['module'] . '/preloads/' . $preload['file'] . '.php';
|
113: | $class_name = ucfirst($preload['module']) . ucfirst($preload['file']) . 'Preload';
|
114: | if (!class_exists($class_name)) {
|
115: | continue;
|
116: | }
|
117: | $class_methods = get_class_methods($class_name);
|
118: | foreach ($class_methods as $method) {
|
119: | if (strpos($method, 'event') === 0) {
|
120: | $event_name = strtolower(str_replace('event', '', $method));
|
121: | $event = array('class_name' => $class_name, 'method' => $method);
|
122: | $this->_events[$event_name][] = $event;
|
123: | }
|
124: | }
|
125: | }
|
126: | }
|
127: |
|
128: | |
129: | |
130: | |
131: | |
132: | |
133: | |
134: | |
135: |
|
136: | public function triggerEvent($event_name, $args = array())
|
137: | {
|
138: | $event_name = strtolower(str_replace('.', '', $event_name));
|
139: | if (isset($this->_events[$event_name])) {
|
140: | foreach ($this->_events[$event_name] as $event) {
|
141: | call_user_func(array($event['class_name'], $event['method']), $args);
|
142: | }
|
143: | }
|
144: | }
|
145: | }
|
146: |
|
147: | |
148: | |
149: | |
150: | |
151: | |
152: | |
153: | |
154: | |
155: | |
156: | |
157: |
|
158: | class XoopsPreloadItem
|
159: | {
|
160: | |
161: | |
162: |
|
163: | public function __construct()
|
164: | {
|
165: | }
|
166: | }
|
167: | |