/** * Валидация элемента * * @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; }
/** * Рисуем элемент * * @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); }
/** * Сохраняет связку раздела с файлами * * @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; }