protected function executeImpl(ArrayAdapter $params) { $ftype = $params->str('ftype'); $fsubtype = $params->str('fsubtype'); $fident = $params->str('fident'); $zip = FoldedStorageInsts::byTypeStype($ftype, $fsubtype)->export2zip($fident); if (!$zip->isFile()) { return 'Не удалось создать архив'; } return new AjaxSuccess($zip->getRelPath()); }
protected function processImpl(PostArrayAdapter $adapter, $button) { //return print_r($adapter->data, true); if (!$adapter->hasAllNoEmpty(array('ftype', 'fident'))) { return 'Не переданы все необходимые параметры.'; } $ftype = $adapter->str('ftype'); $fsubtype = $adapter->str('fsubtype'); $ident = $adapter->str('fident'); $folding = FoldedStorageInsts::byTypeStype($ftype, $fsubtype); $fEntity = $folding->getFoldedEntity($ident, true); $result = 'OK'; switch ($button) { case self::BUTTON_SAVE: /* * На всякий случай убедимся, что нам передали все данные с формы */ check_condition($adapter->hasAll($folding->getAllowedResourceTypes()), 'Переданы не все типы данных для фолдинга'); //Основим обложку, если фолдинг с ней работает if ($folding->isImagesFactoryEnabled()) { $cover = SimpleUploader::inst()->saveUploadedFile(false); if ($cover) { $folding->updateEntityCover($ident, $cover); $cover->remove(); } } //Обновим остальные параемтры $folding->editEntity($ident, $adapter); break; case self::BUTTON_DELETE_ALL: //Удаляем строку из базы //TODO - выкинуто //TableExporter::inst()->getTable($folding->getTableName())->deleteFoldingDbRec($folding, $ident); //Удаляем строку из базы //TODO - выкинуто //TableExporter::inst()->getTable($folding->getTableName())->deleteFoldingDbRec($folding, $ident); case self::BUTTON_DELETE: $folding->deleteEntity($ident); $result = AP_APFoldingEdit::urlFoldingEntitys($folding); break; } return new AjaxSuccess($result); }
private function getImages(ArrayAdapter $params, $FNAME) { $dir = $params->str('dir'); $name = $params->get('name'); //НЕПОСРЕДСТВЕННО КАРТИНКА if ($name instanceof DirItem) { return $name; } /* * FOLDING */ $FCW = FoldedContextWatcher::getInstance(); $folding = null; $ident = $params->get('ident'); //Тип фолдинга. Он может быть передан либо в параметре 'group', либо по префиксу смарти-функции, например: postimg (post-название типа фолдинга). $foldingType = $params->get('group'); $foldingType = $foldingType ? $foldingType : (starts_with($FNAME, 'img') ? null : array_get_value(0, explode('img', $FNAME))); //Подтип фолдинга, например: is - подтип фолдингов для фолдингов с типом post (выпуск журнала среди всех постов). $foldingSubType = $params->get('type'); if ($params->has('post')) { /* @var $post AbstractPost */ $post = $params->get('post'); $ident = $post->getIdent(); $folding = Handlers::getInstance()->getPostsProcessorByPostType($post->getPostType())->getFolding(); } else { if ($foldingType) { $hasSubtype = FoldedStorage::isFoldingHasSubtype($foldingType); if ($hasSubtype && !$foldingSubType) { //У фолдинга есть подтип, но в параметрах он не передан - определим фолдинг по контексту $folding = $FCW->getFoldedEntityEnsureType($foldingType)->getFolding(); } else { $folding = FoldedStorageInsts::byTypeStype($foldingType, $foldingSubType); } } else { if ($foldingSubType) { //Если передан только тип, то считаем, что имеется ввиду фолдинг поста $folding = Handlers::getInstance()->getPostsProcessorByPostType($foldingSubType)->getFolding(); } } } if ($folding && !$ident) { //У нас есть фолдинг, но нет идентификатора сущности - определим её из контекста $ident = $FCW->getFoldedEntityEnsureType($folding->getFoldingType())->getIdent(); } if (!$dir && !$name && $ident && $folding) { /* * Не передано название картинки, но передан идентификатор сущности - показываем cover. * TODO - подумать, возможно имеет смысл сделать возможность показывать любую картинку в заданном размере. */ return $folding->getCover($ident, $params->str('dim')); } /* * Берём путь "как есть", если: * 1. Передан специальный параметр asis * 2. Передана dir, и она начинается с '/' * 3. Не передана dir, но при этом name начинается с '/' * 4. dir или name указывают на адрес в интернете */ $asis = $params->bool('asis') || starts_with($dir, DIR_SEPARATOR) || !$dir && starts_with($name, DIR_SEPARATOR) || PsUrl::isHttp($dir) || PsUrl::isHttp($name); if ($asis) { if (!$dir) { return $name; } if (starts_with($name, DIR_SEPARATOR)) { return cut_string_end($dir, DIR_SEPARATOR) . $name; } return ($name ? ensure_ends_with($dir, DIR_SEPARATOR) : $dir) . $name; } /** @var DirManager */ $DM = null; /* * Теперь определим DirManager. Мы его можем взять: */ if ($folding) { //1. Из ресурсов фолдинга $DM = $folding->getResourcesDm($ident, 'src'); } else { //2. Обычный resources->images, если фолдинг не установлен $DM = DirManager::images(); } /* * Определим список показываемых картинок по атрибуту $name. Пример тега: * {postimg type='tr' ident='matrix' name='mao.gif mu.png mu.png'} * Просто разделим значение атрибута $name по точкам и пробелам и склеим в названия картинок. */ $NAMES = preg_split("/[. ]/", $name); $DI = $DM ? $DM->getDirItem($dir, $name) : DirItem::inst($dir, $name); if (count($NAMES) % 2 != 0 || $DI->isImg()) { //Указано что-то непонятное - не чётное кол-во составных элементов return $DI; } $IMAGES = array(); for ($i = 0; $i < count($NAMES); $i += 2) { $imgName = $NAMES[$i] . '.' . $NAMES[$i + 1]; $IMAGES[] = $DM ? $DM->getDirItem($dir, $imgName) : DirItem::inst($dir, $imgName); } return $IMAGES; }
/** @return LibResources */ public function getLibManager($libType, $assert = true) { return FoldedStorageInsts::byTypeStype(LibResources::LIB_FOLDING_TYPE, $libType, $assert); }