Ejemplo n.º 1
0
 /**
  * Валидация элемента
  *
  * @param int $value
  * @return boolean
  */
 public function isValid($value)
 {
     $params = $this->getAttribs();
     if (!isset($params['mediatype'])) {
         $params['mediatype'] = 'image';
     }
     $this->setValue((int) $value);
     $value = $this->getValue();
     if ($value === 0 && $this->isRequired()) {
         $this->_messages = array($this->translate->_('Не выбран файл'));
         return false;
     }
     require_once 'Phorm/Media.php';
     $Media = new Phorm_Media();
     if ($MediaInfo = $Media->getMediaInfo($value)) {
         if ($MediaInfo['mediatype'] == $params['mediatype']) {
             return true;
         } else {
             $this->_messages = array($this->translate->_('Неверный тип файла'));
             return false;
         }
     } elseif ($this->isRequired()) {
         $this->_messages = array($this->translate->_('Не выбран файл'));
         return false;
     }
     return true;
 }
Ejemplo n.º 2
0
 /**
  * Рисуем элемент
  *
  * @param string $name Имя HTML-элемента
  * @param mixed $value Значение элемента
  * @param array $params Массив параметров
  * @param array $attribs Массив атрибутов HTML-элемента
  * @return string
  */
 public function mediaFile($name, $value = null, array $params = array(), $attribs = null)
 {
     $translate = $params['translate'];
     unset($params['translate']);
     $jquery_handler = ZendX_JQuery_View_Helper_JQuery::getJQueryHandler();
     /**
      * Переделываем свойство mediatype в data-mediatype (для совместимости с JQuery.data())
      */
     if (!isset($params['mediatype'])) {
         $params['mediatype'] = 'image';
     }
     $params['data-mediatype'] = $params['mediatype'];
     unset($params['mediatype']);
     /**
      * Имя элемента типа File делаем просто рандомным, на форме обрабатываться будет поле hidden
      */
     $params['id'] = uniqid();
     /**
      * Значение может быть массивом MediaInfo или числом mediaid
      * Если значение не является массивом, то приводим его к массиву MediaInfo
      */
     if (!is_array($value) && $value > 0) {
         require_once 'Phorm/Media.php';
         $Media = new Phorm_Media();
         if ($MediaInfo = $Media->getMediaInfo($value)) {
             $value = $MediaInfo;
         }
     }
     /**
      * Добавляем базовый JS
      */
     //$this->jquery->addJavascriptFile($this->view->BaseUrl().'/ui/phorm/phorm.js');
     $this->jquery->addJavascriptFile($this->view->BaseUrl() . '/ui/js/jquery.livequery.min.js');
     $this->jquery->addJavascriptFile($this->view->BaseUrl() . '/ui/blueimp/js/jquery.fileupload.js');
     /** @todo мб перенести в phorm.js поскольку подпорка под IE требует переопределения Phorm_Controller_Module_Control_Media::uploadAction */
     $forceIframeTransport = false;
     $agent = new Zend_Http_UserAgent();
     $device = $agent->getDevice();
     if (strtolower($device->getBrowser()) == 'internet explorer' && $device->getBrowserVersion() <= 8) {
         $this->jquery->addJavascriptFile($this->view->BaseUrl() . '/ui/blueimp/js/jquery.iframe-transport.js');
         $forceIframeTransport = true;
     }
     $url = isset($params['url']) ? ', url: "' . $params['url'] . '"' : '';
     $js = sprintf('var %s; %s("#%s").livequery(function(){%s = %s(this).phormMediaUploader(%s)});', 'var_' . $params['id'], $jquery_handler, $params['id'], 'var_' . $params['id'], $jquery_handler, '{type:"' . $params['data-mediatype'] . '", forceIframeTransport: ' . (int) $forceIframeTransport . $url . '}');
     $js = sprintf('%s("%s").livequery(function(){%s(this).phormMediaUploader(%s).setValue($(this).data("mediainfo"))});', $jquery_handler, '[data-mediatype]', $jquery_handler, '{type:"' . $params['data-mediatype'] . '", forceIframeTransport: ' . (int) $forceIframeTransport . $url . '}');
     $this->jquery->addOnLoad($js);
     /**
      * Устанавливаем пришедшие значения
      */
     if (!empty($value)) {
         $params['data-mediainfo'] = Zend_Json::encode($value);
         //$js = sprintf('%s.setValue(%s)','var_' . $params['id'],Zend_Json::encode($value));
         //$this->jquery->addOnLoad($js);
     }
     /**
      * Возвращаем поле выбора файла и hidden в котором хранится mediaid
      */
     return $this->view->formFile($params['id'], $params) . $this->view->formHidden($name);
 }
Ejemplo n.º 3
0
 /**
  * Загрузка файлов
  * Метод переписан для поддержки IE8- и загрузку через iframe
  * 
  * @return void
  */
 public function uploadAction()
 {
     Zend_Controller_Action_HelperBroker::removeHelper('viewRenderer');
     if (isset($this->_params['type'])) {
         $filetype = $this->_params['type'];
         foreach ($_FILES as $filename => $data) {
             break;
         }
         // Определяем имя элемента загружаемого файла
         // Получаем конфигурацию формы
         $config = Phorm_Config::xml('forms/control/media.xml', 'upload');
         if (isset($config['elements'][$filetype]) && isset($filename)) {
             // Выделяем из конфигурации формы нужный тип элемента и инициализируем форму с нужным именем элемента
             $form = new Phorm_Form(null, null, array('elements' => array($filename => $config['elements'][$filetype])));
             // Получаем объект элемента из формы
             $element = $form->getElement($filename);
             // Валидируем элемент
             if ($element->isValid($filename)) {
                 // Получаем информацию о файле
                 $fileinfo = $element->getTransferAdapter()->getFileInfo($filename);
                 // Добавляем тип медиа-файла
                 $fileinfo[$filename]['mediatype'] = $filetype;
                 // Сохраняем файл в медиа-библиотеке
                 if ($MediaInfo = $this->Media->saveUploadedFile($fileinfo[$filename])) {
                     // Возвращаем информацию о файле как об объекте медиа-библиотеки
                     exit(Zend_Json::encode(array($MediaInfo)));
                 } else {
                     // Ошибки сохранения
                     exit(Zend_Json::encode(array(array('errors' => array_values($this->Media->_errors)))));
                 }
             } else {
                 // Ошибки валидации
                 exit(Zend_Json::encode(array(array('errors' => array_values($form->getMessages())))));
             }
         } else {
             // Ошибка в запросе типа элемента
             exit(Zend_Json::encode(array(array('errors' => array(array($this->_translate->_('Неверный тип запроса')))))));
         }
     } else {
         // Ошибка - не указан тип элемента
         exit(Zend_Json::encode(array(array('errors' => array(array($this->_translate->_('Не задан тип')))))));
     }
 }
Ejemplo n.º 4
0
 /**
  * Сохраняет связку раздела с файлами
  *
  * @param array $data Массив данных о разделе
  * @return array
  */
 protected function _saveFiles($data)
 {
     /**
      * Отвязываем от раздела все файлы
      */
     $this->_db->delete('pw_categories_media', 'categoryid=' . (int) $data['categoryid'] . " AND mediatype!='image'");
     /**
      * Массив файлов
      */
     if (isset($data['files'])) {
         /**
          * Вставляем массив файлов
          */
         if (is_array($data['files'])) {
             require_once 'Phorm/Media.php';
             $Media = new Phorm_Media();
             $files = $this->getFilteredValuesByTableCols('pw_categories_media', $data['files']);
             $itr = 0;
             foreach ($files as $file) {
                 if ($MediaInfo = $Media->getMediaInfo($file['mediaid'])) {
                     $file['sortorder'] = $itr++;
                     $file['mediatype'] = $MediaInfo['mediatype'];
                     $file['categoryid'] = $data['categoryid'];
                     $file['filepath'] = $MediaInfo['filepath'];
                     $file['fileext'] = $MediaInfo['fileext'];
                     $this->_db->insert('pw_categories_media', $file);
                 }
             }
         }
     }
     return $data;
 }