protected function executeImpl(ArrayAdapter $params) { $action = $params->str('action'); $gallery = $params->str('gallery'); switch ($action) { case 'creategall': PsGallery::makeNew($gallery, $params->str('name')); break; case 'save': PsGallery::inst($gallery)->saveGallery($params->str('name'), $params->arr('images')); break; case 'imgadd': PsGallery::inst($gallery)->addWebImg($params->arr('img')); break; case 'imgdel': if ($params->bool('web')) { PsGallery::inst($gallery)->deleteWebImg($params->str('file')); } else { PsGallery::inst($gallery)->deleteLocalImg($params->str('file')); } break; default: json_error("Unknown action [{$action}]."); } return new AjaxSuccess(); }
protected function executeImpl(ArrayAdapter $params) { $unique = $params->str(DiscussionController::JS_DATA_UNIQUE); $upDown = $params->bool(DiscussionController::JS_DATA_UPDOWN); $entity = $params->str(DiscussionController::JS_DATA_THREAD); $theme = $params->str(self::JS_PARAM_THEME); $comment = $params->str(self::JS_PARAM_COMMENT); $parentId = $params->int(self::JS_PARAM_PARENT_ID); $controller = Handlers::getInstance()->getDiscussionController($unique); //Валидируем тему if (!$parentId && $controller->getDiscussionSettings()->isThemed()) { if (!$theme) { return 'Введите тему'; } $error = UserInputValidator::validateShortText($theme); if ($error) { return $error; } $theme = UserInputTools::safeShortText($theme); } //Валидируем комментарий if (!$comment) { return 'Введите комментарий'; } $error = UserInputValidator::validateLongText($comment); if ($error) { return $error; } $comment = UserInputTools::safeLongText($comment); $msgObj = $controller->saveMessage($entity, $parentId, $comment, $theme, PsUser::inst()); if (!$msgObj instanceof DiscussionMsg) { return 'Ошибка добавления сообщения'; } return new AjaxSuccess($controller->buildLeaf($msgObj)); }
/** * Заполним ссылки на посты и, если передан параметр exists, удалим элементы, для которых нет постов. */ protected function fillTimeLineItem(LibItemDb $libItem, TimeLineItem $tlItem, ArrayAdapter $params) { $post = BlogManager::inst()->getPostByIdent($libItem->getIdent(), false); if ($post) { $tlItem->setLink(BlogManager::inst()->postUrl($post)); } return !$params->bool('exists') || !!$post; }
protected function executeImpl(ArrayAdapter $params) { $fav = $params->bool('fav'); $type = $params->str('type'); $ident = $params->str('ident'); PopupPagesManager::inst()->toggleUserPopup($fav, $type, $ident); return new AjaxSuccess(); }
protected function executeImpl(ArrayAdapter $params) { $id = $params->int('id'); $uts = $params->int('date'); $show = $params->bool('show'); $type = $params->str('type'); $pp = Handlers::getInstance()->getPostsProcessorByPostType($type); AdminPostsBean::inst()->updateState($pp->dbBean(), $id, $uts, $show); return new AjaxSuccess(); }
protected function executeImpl(ArrayAdapter $params) { $lident = $params->str(self::PARAM_LIDENT); $eident = $params->str(self::PARAM_EIDENT); if ($params->bool(TIMELINE_LOADING_MARK)) { /* * Загружаем представление элемента хронологической шкалы */ return new AjaxSuccess(TimeLineManager::inst()->getTimeLineItemPresentation($lident, $eident, $params)); } else { /* * Загружаем композицию */ return new AjaxSuccess(TimeLineManager::inst()->getTimeLineJson($lident, $params)); } }
public final function init(ArrayAdapter $params) { //Стандартные параметры $this->name = $params->str('name', 'Акция'); $this->isActive = $params->bool('active', true); $this->isByDate = $params->hasNoEmpty('to'); if ($this->isByDate) { $this->secondsLeft = strtotime($params->str('to')) - time(); $this->isActive = $this->isActive && $this->secondsLeft > 0; } //Параметры акции (только те, что начинаются с data_) $this->params = ArrayAdapter::inst($params->getByKeyPrefix('data_', true)); //Полный идентификатор акции $this->stockIdent = $this->sign($this->params->getData()); //Вызовем инициализацию класса-наследника $this->onInit($this->params); }
protected function executeImpl(ArrayAdapter $params) { $unique = $params->str(DiscussionController::JS_DATA_UNIQUE); $upDown = $params->bool(DiscussionController::JS_DATA_UPDOWN); $entity = $params->int(DiscussionController::JS_DATA_THREAD); $action = $params->str(self::JS_PARAM_ACTION); $msgId = $params->int(self::JS_PARAM_MSG_ID); $rootId = $params->int(self::JS_PARAM_ROOT_ID); $controller = Handlers::getInstance()->getDiscussionController($unique); if (in_array($action, DiscussionController::getCommentActions())) { return new AjaxSuccess($controller->executeCommentAction($msgId, $action)); } if ($action == DiscussionController::TREE_ACTION_LOAD_COMMENTS) { return new AjaxSuccess($controller->loadTree($rootId, $upDown, $entity)); } return "Неизвестное действие: [{$action}]"; }
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; }