1: <?php defined('_JOOS_CORE') or exit();
2:
3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
16: class joosAutoloader
17: {
18: 19: 20: 21: 22:
23: private static $static_files = array(
24:
25: );
26:
27: public static function init()
28: {
29: $app_autoload_files = require_once JPATH_APP_CONFIG . '/autoload.php';
30:
31: self::$static_files = array_merge($app_autoload_files, self::$static_files);
32:
33: spl_autoload_register(array(new self, 'autoload'));
34: }
35:
36: private function __clone()
37: {
38: }
39:
40: public static function autoload($class)
41: {
42:
43: if (isset(self::$static_files[$class])) {
44: $file = JPATH_BASE . DS . self::$static_files[$class];
45: } else {
46: $file = JPATH_BASE . DS . self::get_class_dinamic_path($class);
47: }
48:
49:
50: if (!is_file($file) && count(spl_autoload_functions())==1 ) {
51:
52: throw new joosAutoloaderFileNotFoundException(sprintf('Автозагрузчик классов не смог обнаружить предпологаемый файл %s файл для класса %s', $file, $class));
53: }
54:
55: require_once $file;
56:
57: if (!class_exists($class, false)) {
58:
59: throw new joosAutoloaderClassNotFoundException(sprintf('Автозагрузчик классов не смог найти требуемый класс %s в предпологаемом файле %s', $class, $file));
60: }
61:
62:
63:
64: unset($file);
65: }
66:
67: private static function get_class_dinamic_path($class)
68: {
69:
70:
71: if (strpos($class, 'actionsAdmin', 0) === 0) {
72: $name = str_replace('actionsAdmin', '', $class);
73: $name = joosInflector::underscore($name);
74: $file = 'app' . DS . 'components' . DS . $name . DS . 'controller.admin.' . $name . '.php';
75:
76:
77: } elseif (strpos($class, 'actionsAjaxAdmin', 0) === 0) {
78: $name = str_replace('actionsAjaxAdmin', '', $class);
79: $name = strtolower($name);
80: $file = 'app' . DS . 'components' . DS . $name . DS . 'controller.admin.' . $name . '.ajax.php';
81:
82:
83: } elseif (strpos($class, 'actionsAjax', 0) === 0) {
84: $name = str_replace('actionsAjax', '', $class);
85: $name = strtolower($name);
86: $file = 'app' . DS . 'components' . DS . $name . DS . 'controller.' . $name . '.ajax.php';
87:
88:
89: } elseif (strpos($class, 'actions', 0) === 0) {
90: $name = str_replace('actions', '', $class);
91: $name = strtolower($name);
92: $file = 'app' . DS . 'components' . DS . $name . DS . 'controller.' . $name . '.php';
93:
94:
95: } elseif (strpos($class, 'joos', 0) === 0) {
96: $name = str_replace('joos', '', $class);
97: $name = strtolower($name);
98: $file = 'core' . DS . 'libraries' . DS . $name . '.php';
99:
100:
101: } elseif (strpos($class, 'modelAdmin', 0) === 0) {
102: $name = str_replace('modelAdmin', '', $class);
103: $name = strtolower($name);
104: $file = 'app' . DS . 'components' . DS . $name . DS . 'models' . DS . 'model.admin.' . $name . '.php';
105:
106:
107: } elseif (strpos($class, 'model', 0) === 0) {
108: $name = str_replace('model', '', $class);
109: $name = strtolower($name);
110: $file = 'app' . DS . 'components' . DS . $name . DS . 'models' . DS . 'model.' . $name . '.php';
111:
112:
113: } elseif (strpos($class, 'modulesHelper', 0) === 0) {
114: $name = str_replace('modulesHelper', '', $class);
115: $name = strtolower($name);
116: $file = 'app' . DS . 'modules' . DS . $name . DS . 'helper.' . $name . '.php';
117:
118:
119: } else {
120: throw new joosAutoloaderFileNotFoundException('Правило загрузки для класса :class_name не обнаружено', array(':class_name' => $class));
121: }
122:
123: return $file;
124: }
125:
126: 127: 128: 129: 130: 131: 132: 133: 134:
135: public static function libraries_load_on_start(array $names = array())
136: {
137: foreach ($names as $name) {
138:
139: $file = JPATH_BASE . DS . 'core' . DS . 'libraries' . DS . $name . '.php';
140:
141: if (!joosFile::exists($file)) {
142: throw new joosAutoloaderOnStartFileNotFoundException(sprintf('Автозагрузчки не смог найти файл %s для автозагружаемой библиотеки %', $file, $name));
143: }
144:
145: require_once ($file);
146: }
147: }
148:
149: }
150:
151: 152: 153:
154: class joosAutoloaderFileNotFoundException extends joosException
155: {
156: public function __construct($message = '', array $params = array())
157: {
158: 159: 160: 161: 162: 163: 164: 165:
166:
167: parent::__construct($message, $params);
168: }
169:
170: }
171:
172: 173: 174:
175: class joosAutoloaderClassNotFoundException extends joosException
176: {
177: }
178:
179: 180: 181:
182: class joosAutoloaderOnStartFileNotFoundException extends joosException
183: {
184: }
185: