1: <?php defined('_JOOS_CORE') or exit();
2:
3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
17: class joosModule
18: {
19: 20: 21:
22: private static $data = array();
23:
24: 25: 26:
27: private static $modules_by_positions = array();
28:
29: 30: 31:
32: private static $modules_by_routes = array();
33:
34: 35: 36:
37: private static $controller_data = array();
38:
39: 40: 41:
42: public static function init()
43: {
44: if (empty(self::$data)) {
45: self::$data = require_once JPATH_APP_CONFIG . DS . 'modules.php';
46:
47: foreach (self::$data as $name => $m) {
48: $modules_by_name[$name] = $m;
49: foreach ($m as $m_r) {
50: self::$modules_by_routes[$m_r['route']][$name] = $m_r;
51: self::$modules_by_positions[$m_r['position']][$name][] = $m_r;
52: }
53: }
54: }
55: }
56:
57: 58: 59: 60: 61:
62: public static function set_controller_data($controller_data)
63: {
64: self::$controller_data = $controller_data;
65: }
66:
67: 68: 69: 70:
71: public static function get_controller_data()
72: {
73: return self::$controller_data;
74: }
75:
76: 77: 78: 79:
80: public static function get_data()
81: {
82: return self::$data;
83: }
84:
85: 86: 87: 88: 89: 90:
91: public static function load_by_position($name)
92: {
93: $modules = '';
94:
95:
96: if (isset(self::$modules_by_positions[$name])) {
97: foreach (self::$modules_by_positions[$name] as $name => $modules_array) {
98:
99: foreach ($modules_array as $params) {
100:
101: $params['action'] = isset($params['action']) ? $params['action'] : 'default_action';
102:
103: if (joosController::$activroute == $params['route'] || $params['route'] == '__all') {
104: $params['params'] = isset($params['params']) ? $params['params'] : array();
105: $modules .= self::execute($name, $params['action'], $params['params']);
106: } elseif ($params['route'] == '__exept') {
107: if (!in_array(joosController::$activroute, $params['__exept_routes'])) {
108: $params['params'] = isset($params['params']) ? $params['params'] : array();
109: $modules .= self::execute($name, $params['action'], $params['params']);
110: }
111: }
112: }
113: }
114: }
115:
116: return $modules;
117: }
118:
119: 120: 121: 122: 123:
124: public static function get_array_by_route($route_name)
125: {
126: $modules = array();
127:
128:
129:
130: if (isset(self::$modules_by_routes[$route_name])) {
131: foreach (self::$modules_by_routes[$route_name] as $name => $params) {
132: $params['action'] = isset($params['action']) ? $params['action'] : 'default_action';
133: $params['params'] = isset($params['params']) ? $params['params'] : array();
134: $modules[$params['position']][] = self::execute($name, $params['action'], $params['params']);
135: }
136: }
137:
138:
139: foreach (self::$modules_by_routes['__all'] as $name => $params) {
140: $params['action'] = isset($params['action']) ? $params['action'] : 'default_action';
141: $params['params'] = isset($params['params']) ? $params['params'] : array();
142: $modules[$params['position']][] = self::execute($name, $params['action'], $params['params']);
143: }
144:
145:
146: foreach (self::$modules_by_routes['__exept'] as $name => $params) {
147: if (!in_array($route_name, $params['__exept_routes'])) {
148: $params['action'] = isset($params['action']) ? $params['action'] : 'default_action';
149: $params['params'] = isset($params['params']) ? $params['params'] : array();
150: $modules[$params['position']][] = self::execute($name, $params['action'], $params['params']);
151: }
152:
153: }
154:
155: return $modules;
156: }
157:
158: 159: 160: 161: 162: 163:
164: public static function execute($name, $action = 'default_action', $config = array())
165: {
166: $file = JPATH_BASE . DS . 'app' . DS . 'modules' . DS . $name . DS . $name . '.php';
167: require_once($file);
168:
169: $class = 'moduleActions' . ucfirst($name);
170: if (!method_exists($class, $action)) {
171: throw new joosModulesException("Метод $action в модуле $name не обнаружен");
172: }
173:
174:
175: $class::$config = $config;
176: $class::$task = $action;
177:
178:
179: if (method_exists($class, 'action_before')) {
180: call_user_func_array($class . '::action_before', array());
181: }
182: $results = call_user_func($class . '::' . $action);
183: if (method_exists($class, 'action_after')) {
184: call_user_func_array($class . '::action_after', array($results));
185: }
186:
187: moduleActions::set_current_module_action_results($results);
188:
189:
190: if (is_array($results)) {
191: return self::as_html($results, $name, $action, $config);
192: } elseif (is_string($results)) {
193: return $results;
194: }
195: }
196:
197: 198: 199:
200: private static function as_html($params, $module_name, $method, $config)
201: {
202:
203: $template = isset($config['template']) ? $config['template'] : 'default';
204:
205: $template = isset($params['template']) ? $params['template'] : $template;
206:
207: $view = isset($params['view']) ? $params['view'] : $method;
208:
209: extract($params, EXTR_OVERWRITE);
210:
211: $viewfile = JPATH_BASE . DS . 'app' . DS . 'modules' . DS . $module_name . DS . 'views' . DS . $view . DS . $template . '.php';
212:
213: $template_engine = joosTemplater::instance(isset($params['template_engine']) ? $params['template_engine'] : 'default');
214:
215: $output = '<div class="module module-' . $module_name . '">';
216: $output .= $template_engine->render_file($viewfile, $params);
217: $output .= '</div>';
218:
219: return $output;
220: }
221: }
222:
223: 224: 225:
226: class moduleActions
227: {
228:
229: public static $config = array();
230:
231:
232: public static $task = '';
233:
234:
235: private static $current_module_action_results;
236:
237: public static function set_current_module_action_results($results)
238: {
239: self::$current_module_action_results = $results;
240: }
241:
242: public static function get_current_module_action_results()
243: {
244: return self::$current_module_action_results;
245: }
246:
247: }
248:
249: 250: 251:
252: class joosModulesException extends joosException
253: {
254: }
255: