Joostina CMS / CMF v2.* API
  • Docs
  • Package
  • Class
  • Tree
  • Todo
Overview

Packages

  • Components
    • Acls
      • Models
        • Admin
        • Site
    • BlogCategory
      • Models
        • Admin
        • Site
    • Blogs
      • Controllers
        • Admin
        • Site
      • Helpers
      • Models
        • Admin
        • Site
    • Coder
      • Controllers
        • Admin
      • Models
        • Admin
    • Comments
      • Controllers
        • Admin
        • Site
      • Helpers
      • Models
        • Admin
        • Site
    • CommentsCounter
      • Models
        • Admin
        • Site
    • Mainpage
      • Controllers
        • Site
    • News
      • Controllers
        • Admin
        • Site
      • Helpers
      • Models
        • Admin
        • Site
    • Pages
      • Controllers
        • Admin
        • Site
      • Models
        • Site
    • Search
      • Controllers
        • Site
    • Site
      • Controllers
        • Admin
        • Site
    • Sitemap
      • Controllers
        • Admin
        • Site
      • Models
        • Admin
        • Site
    • Test
      • Controllers
        • Site
    • Torrents
      • Controllers
        • Site
    • Users
      • Controllers
        • Admin
        • Site
      • Models
        • Admin
        • Site
  • Compression
  • Core
    • Libraries
      • Arhive
      • Array
      • Attached
      • Autoadmin
      • Autoloader
      • Benchmark
      • Breadcrumbs
      • Cache
      • Config
      • Cookie
      • Csrf
      • Database
        • Drivers
          • Interfaces
      • Datetime
      • Debug
      • Editor
      • Events
      • File
      • Filter
      • Flashmessage
      • Folder
      • Hit
      • Html
      • Image
      • Inflector
      • Inputfilter
      • Libraries
      • Mail
      • Module
      • Nestedset
      • Pager
      • Pages
      • Params
      • Randomizer
      • Request
      • RobotLoader
      • Route
      • Security
      • Session
      • Static
      • String
      • Text
      • Trash
      • Validate
  • Email
  • Extra
    • Libraries
      • Basket
  • Joostina
    • Controller
    • Core
    • Document
  • JSMin
  • Libraries
    • Extra
      • Basket
        • Models
          • Site
  • None
  • Plugins
    • Autoadmin
    • Editor
    • Sitemap
  • SimpleMail
  • Vendors
    • Libraries
      • Email

Classes

  • joosTrash
  • joosUpload
  1: <?php defined('_JOOS_CORE') or exit();
  2: 
  3: /**
  4:  * Работа с загрузкой файлов
  5:  *
  6:  * @version    1.0
  7:  * @package    Core\Libraries
  8:  * @subpackage Trash
  9:  * @category   Libraries
 10:  * @author     Joostina Team <info@joostina.ru>
 11:  * @copyright  (C) 2007-2012 Joostina Team
 12:  * @license    MIT License http://www.opensource.org/licenses/mit-license.php
 13:  * Информация об авторах и лицензиях стороннего кода в составе Joostina CMS: docs/copyrights
 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:         // проверка MIME - типа
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:      * @param string $element_name    название элемента массива $_FILES для загрузки
135:      * @param string $upload_location каталог размещения загруженного файла
136:      * @param array  $params          массив расширенных парамтеров загрузки
137:      *         string new_name - новое имя для файла
138:      *         string new_extension - переименовать расширение файла
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:         //получаем путь файла для http
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:  * Обработчик ошибок для библиотеки joosUpload
193:  */
194: class joosUploadLibrariesException extends joosException
195: {
196: }
197: 
Joostina CMS / CMF v2.* API API documentation generated by ApiGen 2.6.1 – Template adapted by @olvlv and Joostina Team