Source for file FileLibrary.class.php
Documentation is available at FileLibrary.class.php
* Содержит класс FileLibrary
* @copyright Energine 2006
* Путь к директории в которой хранятся загруженные пользователями файлы
* @param Document $document
public function __construct($name, $module, Document $document, array $params = null) {
parent::__construct($name, $module, $document, $params);
$this->setParam('recordsPerPage', false);
if (!isset ($_POST['path'])) {
* Переопределен параметр active
* Загружает описание данных из таблицы
* @return DataDescription
$result['upl_mime_type'] = array(
$result['className'] = array(
foreach ($result as $key => $value) {
$result[$key]['tabName'] = $this->getTitle();
if ($this->uploadsDir->getPath() != self::UPLOADS_MAIN_DIR) {
$result['upl_path'] = dirname($result['upl_path']);
$result['upl_name'] = '...';
$result = array_map(array($this, 'addClass'), $result);
elseif ($this->getAction() == self::DEFAULT_ACTION_NAME) {
* На основании значения константы набора типов формируется поле типа class
switch ($row['upl_mime_type']) {
$row['className'] = 'folder';
$row['className'] = 'image';
$row['className'] = 'zip';
$row['className'] = 'undefined';
* Выводит данные в JSON формате для AJAX
$this->config->setCurrentMethod(self::DEFAULT_ACTION_NAME);
if ($data instanceof Data) {
$message['errors'][] = array('message'=> $e->getMessage(). current($e->getCustomMessage()));
$this->response->setHeader('Content-Type', 'text/javascript; charset=utf-8');
protected function main() {
if (is_array($params) && !empty($params) && $params[0] == 'image-only') {
* Метод выводит форму создания новой папки
$this->setType(self::COMPONENT_TYPE_FORM_ADD);
* Сохранение данных о папке
$message['errors'][] = array('message'=> $e->getMessage(). current($e->getCustomMessage()));
$JSONResponse = array_merge(array('result'=> false, 'header'=> $this->translate('TXT_SHIT_HAPPENS')), $message);
$this->response->setHeader('Content-Type', 'text/javascript; charset=utf-8');
protected function save() {
$message['errors'][] = array('message'=> $e->getMessage(). current($e->getCustomMessage()));
$JSONResponse = array_merge(array('result'=> false, 'header'=> $this->translate('TXT_SHIT_HAPPENS')), $message);
$this->response->setHeader('Content-Type', 'text/javascript; charset=utf-8');
if (!isset ($_POST['file'])) {
if (($fileType = key($_POST['file'])) == 'folder') {
$message['errors'][] = array('message'=> $e->getMessage(). current($e->getCustomMessage()));
$JSONResponse = array_merge(array('result'=> false, 'header'=> $this->translate('TXT_SHIT_HAPPENS')), $message);
$this->response->setHeader('Content-Type', 'text/javascript; charset=utf-8');
* Распаковка залитого zip файла
for ($i = 0; $i < $zip->numFiles; $i++ ){
$currentFile = $zip->statIndex($i);
$currentFile = $currentFile['name'];
/*if($fileInfo['filename'] === ''){
(substr($fileInfo['filename'], 0, 1) === '.')
(strpos($currentFile, 'MACOSX') !== false)
if($fileInfo['dirname'] == '.'){
if(!isset ($fileInfo['extension'])){
$zip->extractTo($this->uploadsDir->getPath(), $currentFile);
$f->createFromPath($this->uploadsDir->getPath(). '/'. $currentFile, $fileInfo['filename']);
$message['errors'][] = array('message'=> $e->getMessage(). current($e->getCustomMessage()));
$JSONResponse = array_merge(array('result'=> false, 'header'=> $this->translate('TXT_SHIT_HAPPENS')), $message);
$this->response->setHeader('Content-Type', 'text/javascript; charset=utf-8');
* Выводит форму создания файла
protected function add() {
$this->setType(self::COMPONENT_TYPE_FORM_ADD);
* Выводи форму загрузки Zip файла содержащего набор файлов
$this->setType(self::COMPONENT_TYPE_FORM_ADD);
* Метод для заливки файла
* Вызывается в невидимом фрейме и должен отдать HTML страницу включающаю скрипт
final protected function upload() {
'var doc = window.parent.document;'. "\n".
'var path = doc.getElementById(\'path\');'. "\n".
'var pb = doc.getElementById(\'progress_bar\'); '. "\n".
'var filename = doc.getElementById(\'upl_name\'); '. "\n".
'var iframe = doc.getElementById(\'uploader\');'. "\n"/*.
'var preview = doc.getElementById(iframe.getAttribute("preview"));'."\n"*/;
if (empty($_FILES) || !isset ($_FILES['file'])) {
$uploader->setFile($_FILES['file']);
$fileName = $uploader->getFileObjectName();
$js .= 'iframe.preview.src = "'. $fileName. '";';
$js .= 'iframe.preview.src = "images/icons/icon_zip.gif";';
$js .= 'iframe.preview.src = "images/icons/icon_undefined.gif";';
'filename.value = "%s";'.
'path.parentNode.removeChild(path);'.
'pb.parentNode.removeChild(pb); '.
'iframe.filename.value = "%s"; '/*.
'iframe.parentNode.removeChild(iframe);'*/,
$uploader->getFileRealName(),
'path.parentNode.removeChild(path);'. "\n".
'pb.parentNode.removeChild(pb); '. "\n".
'alert(\''. $this->translate('TXT_SHIT_HAPPENS'). ': '. $e->getMessage(). '\'); '/*.
'iframe.parentNode.removeChild(iframe); '*/. "\n";
$responseText = '<html><head/><body><script type="text/javascript">'. $js. '</script></body></html>';
$response->setHeader('Content-Type', 'text/html; charset=UTF-8');
$response->write($responseText);
* Переименование файла/папки
if (!isset ($_POST['file'])) {
if (($fileType = key($_POST['file'])) == 'folder') {
$file->rename($_POST['name']);
$message['errors'][] = array('message'=> $e->getMessage(). current($e->getCustomMessage()));
$JSONResponse = array_merge(array('result'=> false, 'header'=> $this->translate('TXT_SHIT_HAPPENS')), $message);
$this->response->setHeader('Content-Type', 'text/javascript; charset=utf-8');
|