1: <?php defined('_JOOS_CORE') or exit();
2:
3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
16: class joosUpload
17: {
18: private static $upload_rules;
19: private static $active_rules_name;
20:
21: public static function init($active_rules_name)
22: {
23: if (self::$upload_rules === null) {
24: self::$upload_rules = require JPATH_APP_CONFIG . '/uploads.php';
25: }
26:
27: self::$active_rules_name = $active_rules_name;
28: }
29:
30: public static function get_active_rules_name()
31: {
32: return self::$active_rules_name;
33: }
34:
35: public static function get_input_name()
36: {
37: return self::$active_rules_name;
38: }
39:
40: public static function get_class()
41: {
42: $active_rules = self::$upload_rules[self::$active_rules_name];
43:
44: return (isset($active_rules['style']) && isset($active_rules['style']['class'])) ? $active_rules['style']['class'] : '';
45: }
46:
47: public static function get_upload_url()
48: {
49: return JPATH_SITE . '/ajax.index.php?option=site&task=upload';
50: }
51:
52: public static function get_upload_url_admin()
53: {
54: return JPATH_SITE_ADMIN . '/ajax.index.php?option=site&task=upload';
55: }
56:
57: public static function get_upload_location()
58: {
59: $active_rules = self::$upload_rules[self::$active_rules_name];
60: if (!isset($active_rules['upload_location'])) {
61: throw new joosUploadLibrariesException('Не указан каталог загрузки файлов');
62: }
63:
64: return $active_rules['upload_location'];
65: }
66:
67: public static function get_accept_file_types()
68: {
69: $active_rules = self::$upload_rules[self::$active_rules_name];
70: if (!isset($active_rules['accept_file_types'])) {
71: throw new joosUploadLibrariesException('Не указаны типы разрешённых файлов');
72: }
73:
74: return $active_rules['accept_file_types'];
75: }
76:
77: public static function get_accept_mime_content_types()
78: {
79: $active_rules = self::$upload_rules[self::$active_rules_name];
80:
81: return (isset($active_rules['accept_mime_content_types']) && count($active_rules['accept_mime_content_types']) > 0) ? $active_rules['accept_mime_content_types'] : false;
82: }
83:
84: public static function actions_before()
85: {
86: $rules_name = self::$upload_rules[self::$active_rules_name];
87:
88: $result = array();
89: if (isset($rules_name['actions_before']) && is_callable($rules_name['actions_before'])) {
90: $result = call_user_func($rules_name['actions_before']);
91: }
92:
93: return $result;
94: }
95:
96: public static function actions_after($upload_result)
97: {
98: $rules_name = self::$upload_rules[self::$active_rules_name];
99:
100: $result = array();
101: if (isset($rules_name['actions_after']) && is_callable($rules_name['actions_after'])) {
102: $result = call_user_func($rules_name['actions_after'], $upload_result);
103: }
104:
105: return $result;
106: }
107:
108: public static function check()
109: {
110:
111: $accept_mime_content_types = self::get_accept_mime_content_types();
112: if ($accept_mime_content_types !== false) {
113:
114: $tmp_file = $_FILES[self::$active_rules_name]['tmp_name'];
115:
116: $content_type = joosFile::get_mime_content_type($tmp_file);
117:
118: if (!in_array($content_type, $accept_mime_content_types)) {
119:
120:
121: $upload_result = array();
122: $upload_result['success'] = false;
123: $upload_result['message'] = 'Файл не загружен, такой тип не разрешён';
124:
125: return $upload_result;
126: }
127: }
128:
129: return true;
130: }
131:
132: 133: 134: 135: 136: 137: 138: 139: 140:
141: public static function easy_upload($element_name, $upload_location, array $params = array())
142: {
143: $file_name = $_FILES[$element_name]['name'];
144:
145:
146: if (isset($params['new_name'])) {
147:
148: $file_name = $params['new_name'] . '.' . substr($file_name, strrpos($file_name, '.') + 1);
149: } else {
150:
151:
152: $file_name = joosFile::make_safe_name($file_name);
153: }
154:
155:
156: $upload_location = rtrim($upload_location, '/');
157:
158: if (!joosFolder::is_writable($upload_location)) {
159: throw new joosUploadLibrariesException('Каталог :upload_location недоступен для создания подкаталогов и записи', array(':upload_location' => $upload_location));
160: }
161:
162:
163: is_dir($upload_location) ? null : mkdir($upload_location, 0755, true);
164:
165:
166: $file_base_location = $upload_location . DS . $file_name;
167: $success = move_uploaded_file($_FILES[$element_name]['tmp_name'], $file_base_location);
168:
169:
170: $file_live_location = str_replace(JPATH_BASE, '', $upload_location);
171: $file_live_location = str_replace("\\", DS, $file_live_location);
172:
173: return array('success' => $success, 'file_location' => $file_live_location, 'file_name' => $file_name, 'file_live_location' => sprintf('%s%s/%s', JPATH_SITE, $file_live_location, $file_name), 'file_base_location' => sprintf('%s%s/%s', JPATH_BASE, $file_live_location, $file_name),);
174: }
175:
176: private static function get_filefolder($rootdir = false, $filename = false, $fileid = false)
177: {
178: $id = $fileid ? $fileid : joosAttached::add($filename)->id;
179:
180: $rootdir = $rootdir ? $rootdir : joosFile::get_mime_content_type($filename);
181:
182: return array(
183: 'file_base_location' => JPATH_BASE_APP .DS . 'attachments' . DS . $rootdir . DS . joosFile::make_file_location((int) $id),
184: 'file_live_location' => JPATH_SITE . '/app/attachments/'. $rootdir . '/'. joosFile::make_file_location((int) $id),
185: 'file_id' => $id
186: );
187: }
188:
189: }
190:
191: 192: 193:
194: class joosUploadLibrariesException extends joosException
195: {
196: }
197: