protected function executeImpl(ArrayAdapter $params) { $url = $params->str('url'); $text = $params->str('text'); $note = $params->str('note'); if (!$url || !$text) { return 'Не передан url или текст'; } /* * Если пользователь не просматривал эту страницу и это не администратор - игнорируем. */ /* $wasOpened = PageOpenWatcher::isPageOpenedByUser($url, PsUser::instOrNull()); if (!$wasOpened && !AuthManager::isAuthorizedAsAdmin()) { return 'Пользователь не открывал страницу'; //--- } */ $text = UserInputTools::safeShortText($text); $note = $note ? UserInputTools::safeLongText($note) : $note; $saved = UtilsBean::inst()->saveMisprint($url, $text, $note, AuthManager::getUserIdOrNull()); if (!$saved) { return 'Запись не была сохранена'; //--- } 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)); }
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) { $ftype = $params->str('ftype'); $fsubtype = $params->str('fsubtype'); $fident = $params->str('fident'); $zip = Handlers::getInstance()->getFolding($ftype, $fsubtype)->export2zip($fident); if (!$zip->isFile()) { return 'Не удалось создать архив'; } return new AjaxSuccess($zip->getRelPath()); }
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 executeImpl(ArrayAdapter $params) { $action = $params->str('action'); switch ($action) { case 'saveIni': ConfigIni::saveIniContent($params->str('scope'), $params->str('content')); break; default: raise_error("Неизвестный тип действия: [{$action}]"); } return new AjaxSuccess(); }
protected function executeImpl(ArrayAdapter $params) { $name = $params->str('name'); $type = $params->str('type'); $ident = $params->str('ident'); $rubId = $params->int('rubId'); check_condition($name, 'Name is empty'); $pp = Handlers::getInstance()->getPostsProcessorByPostType($type); $pp->getFolding()->assertExistsEntity($ident); AdminPostsBean::inst()->registerPost($pp->dbBean(), $ident, $name, $rubId); return new AjaxSuccess(); }
public function doProcess(ArrayAdapter $params) { $postId = $params->int('postId'); $postType = $params->str('postType'); $this->postCP = Handlers::getInstance()->getPostsProcessorByPostType($postType)->getPostContentProvider($postId); check_condition(!!$this->postCP, "Not found post with id='{$postId}' for post type='{$postType}'"); }
public function doProcess(ArrayAdapter $params) { $postId = $params->int('postId'); $postType = $params->str('postType'); $pp = Handlers::getInstance()->getPostsProcessorByPostType($postType); $this->postCP = $pp->getPostContentProvider($postId); }
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)); } }
protected function executeImpl(ArrayAdapter $params) { $method = $params->str('method'); $params = $params->arr('params'); TestManagerCaller::execute($method, $params); return new AjaxSuccess(); }
/** * Метод, вызываемый блоком * {stock name='Мозайка' img='puzzle.png' ident='mosaic' to='2013-12-11 12:00:00' enabled='1' data_id='1'} * для регистрации акции * * @param ArrayAdapter $params - параметры акции. */ public function registerStock(ArrayAdapter $params) { $type = $params->str('type'); if (!$this->existsEntity($type)) { return PsHtml::divErr("Неизвестный тип акции - [{$type}]."); } /* * TODO - выкинута проверка доступа if (!$this->hasAccess($type)) { return ''; } */ /* @var $stock BaseStock */ $stock = $this->getEntityClassInst($type, false); if (!$stock->isUserHasAccess()) { return ''; } $stock->init($params); $type = $stock->getType(); $ident = $stock->getStockIdent(); if (array_key_exists($ident, $this->STOCKS)) { return PsHtml::divErr("Акция [{$stock}] уже зарегистрирована."); } $this->STOCKS[$ident] = $stock; $this->LOGGER->info("STOCK [{$stock}] is registered."); /* * Акция успешно зарегистрирована, покажем её "короткий" вид */ $PARAMS['stock'] = $stock; $PARAMS['body'] = $stock->getShortView(); return PSSmarty::template('common/stock.tpl', $PARAMS)->fetch(); }
protected function executeImpl(ArrayAdapter $params) { $action = $params->str('action'); $unique = $params->str('unique'); $folding = Handlers::getInstance()->getFoldingByUnique($unique); $res = 'OK'; switch ($action) { case 'save_list': $list = $params->str('list'); $data = $params->arr('data'); $folding->saveList($list, $data); break; default: return 'Неизвестное действие: ' . $action; } return new AjaxSuccess($res); }
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}]"; }
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) { $id = $params->str('id'); $type = $params->str('type'); $action = $params->str('action'); switch ($action) { case 'ccache': PSCache::inst()->clean(); break; case 'toggledev': PsGlobals::inst()->getProp('PS_PRODUCTION')->setValue(!PS_PRODUCTION); PsGlobals::inst()->save2file(); break; default: return 'Unknown action'; } 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) { $action = $params->str('action'); $mhash = $params->str('mhash'); $lident = $params->str('lident'); $ridents = $params->arr('ridents'); $CONTROLLER = AdminMappings::inst(); $result = 'OK'; switch ($action) { case 'load_left': $mapping = $CONTROLLER->getMapping($mhash); $result = array(); $result['lsrc'] = $mapping->getDescriptionLsrc(); $result['rsrc'] = $mapping->getDescriptionRsrc(); $result['lidents'] = array(); foreach ($mapping->getIdentsLeft() as $lident) { $result['lidents'][] = array($lident, count($mapping->getMappedEntitysUnsafe($lident))); } break; case 'load_right': $mapping = $CONTROLLER->getMapping($mhash); $ridents = $mapping->getIdentsRight($lident); $selected = $mapping->getMappedEntitysUnsafe($lident); $notSelected = array_diff($ridents, $selected); $result = array(); foreach ($selected as $ident) { $result[] = array($ident, 1, in_array($ident, $ridents)); } foreach ($notSelected as $ident) { $result[] = array($ident, 0, true); } break; case 'save': $CONTROLLER->saveMapping($mhash, $lident, $ridents); break; case 'clean': $CONTROLLER->cleanMapping($mhash); break; default: return 'Неизвестное действие: ' . $action; } return new AjaxSuccess($result); }
/** * Метод пытается выдать очки пользователю на основе запроса к ajax {@link GivePointsCommon} */ public function givePointsByRequest(PsUser $user, ArrayAdapter $request) { $fentity = Handlers::getInstance()->getFoldedEntityByUnique($request->str('fentity')); $class = $fentity->getClassInst(); PsUtil::assertInstanceOf($class, 'PointsGiverRequest'); $request->remove('fentity'); $ctxt = new GivePointsContext($user->getId(), $fentity->getDbCode()); $class->givePointsByRequest($ctxt, $request); return $this->checkGivePointsContext($user, $ctxt); }
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) { $libType = $params->str('fsubtype'); $libManager = Handlers::getInstance()->getLibManager($libType); $models = $params->arr('models'); foreach ($models as $model) { $model['grup'] = $libType; $item = new LibItemDb($model); check_condition($item->getIdent(), 'Не передан идентификатор сущности'); $libManager->saveLibItem($item, AdminLibBean::inst()); } return new AjaxSuccess(); }
protected function executeImpl(ArrayAdapter $params) { $id = $params->int('id'); //feedId or userId - в зависимости от action $action = $params->str('action'); $res = 'OK'; switch ($action) { case 'delete': AdminFeedbackBean::inst()->deleteAnonimMsg($id); break; case 'load': //id = userId $res = FeedbackManager::inst()->buildDiscussion(false, $id, false); break; default: raise_error("Unknown action: {$action}"); } return new AjaxSuccess($res); }
protected function executeImpl(ArrayAdapter $params) { $action = $params->str('action'); $controller = PsLogger::controller(); switch ($action) { case 'reset': $controller->clearLogs(); break; case 'on': $controller->setLoggingEnabled(true); break; case 'off': $controller->setLoggingEnabled(false); break; default: json_error("Unknown action [{$action}]."); } return new AjaxSuccess(); }
protected function executeImpl(ArrayAdapter $params) { $avatarId = $params->int('id'); //Может быть передан и PsConstJs::AVATAR_NO_SUFFIX, а значит - null $action = $params->str('action'); $USER = PsUser::inst(); switch ($action) { case 'set': check_condition($USER->setAvatar($avatarId), 'Ошибка установки текущего аватара.'); break; case 'del': check_condition($USER->deteleAvatar($avatarId), 'Ошибка удаления аватара.'); break; default: raise_error("Неизвестное действие [{$action}]."); } $result['id'] = $USER->hasAvatar() ? $USER->getAvatarId() : PsConstJs::AVATAR_NO_SUFFIX; $result['src_big'] = $USER->getAvatarRelPath(PsUser::ID_CARD_AVATAR_DIM); return new AjaxSuccess($result); }
public function getPluginContent($content, ArrayAdapter $params, PluginFetchingContext $ctxt) { $id = $params->int('id'); $name = $params->str('test_name'); $minutes = $params->int('time'); $tasksCnt = $ctxt->getTasksCount(); $result = null; $testing = null; if ($id) { $testing = TestingBean::inst()->updateTestingState($id, $name, $tasksCnt, $minutes); $result = TestingManager::getInstance()->getTestingResults($testing->getTestingId()); } $tplData = $params->getData(); $tplData['testing'] = $testing; $tplData['tasks'] = $content; $tplData['results'] = $result; $tplData['tasks_cnt'] = $tasksCnt; $content = $this->getFoldedEntity()->fetchTpl($tplData); $data = $testing ? $testing->getTestingId() : null; return new PluginContent($content, $data); }
protected function executeImpl(ArrayAdapter $params) { $action = $params->str('action'); $date = $params->int('date'); $res = array(); switch ($action) { case 'search': $res = AdminAuditTools::getAuditStatistic($date); break; case 'dump': $where[] = Query::assocParam('dt_event', $date, true, '<='); $order[] = 'dt_event asc'; $zipDi = AdminTableDump::dumpTable('id_rec', 'ps_audit', $where, $order); check_condition($zipDi instanceof DirItem, 'Ошибка снятия дампа. Смотрите лог для деталей.'); $res['path'] = $zipDi->getAbsPath(); break; case 'load-dumps': $res['dumps'] = AP_APAudit::getInstance()->getAuditDumpsInfo(); break; default: raise_error("Unknown action: {$action}"); } return new AjaxSuccess($res); }
public function doProcess(ArrayAdapter $params) { $this->plugin = PluginsManager::inst()->getPlugin($params->str(GET_PARAM_PLUGIN_IDENT)); $this->params = $params; }
protected function executeImpl(ArrayAdapter $params) { $hash = $params->str('hash'); $tex = TexImager::inst()->decodeTexFromHash($hash); return $tex ? new AjaxSuccess($tex) : "Нет формулы с хэш-кодом [{$hash}]"; }
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; }
/** * Метод создаёт новый фолдинг */ public function makeNewFolding(ArrayAdapter $adapter) { $ifaces = $adapter->arr('ifaces'); $rtypes = $adapter->arr('rtypes'); $type = lowertrim($adapter->str('FoldingType')); $subtype = lowertrim($adapter->str('FoldingSubType')); $group = $adapter->str('FoldingGroup'); $classPrefix = $adapter->str('FoldingClassPrefix'); check_condition($type, 'Не передан тип фолдинга'); check_condition($group, 'Не передана группа для фолдинга'); check_condition($classPrefix, 'Не передан префикс для классов фолдинга'); //TODO - определять директорию для воздания менеджера фолдингов. die('Folding dir is not deffined.'); $classesDi = DirItem::inst(array('sdk/kit', 'folded'), $group); check_condition(!$classesDi->isDir(), "Директория {$classesDi} уже существует"); check_condition(!$classesDi->isFile(), "Элемент {$classesDi} не может быть файлом"); $rtypes = array_intersect(array_keys(PsUtil::getClassConsts('FoldedResources', 'RTYPE_')), $rtypes); $rtypesArr = trim(implode(', self::', $rtypes)); $rtypesArr = $rtypesArr ? "self::{$rtypesArr}" : ''; $hasPhp = in_array('RTYPE_PHP', $rtypes); $classesDm = DirManager::inst($classesDi->getRelPath())->makePath(); $resourcesPatternDmTo = DirManager::resources(array('folded', $group, FoldedResources::PATTERN_NAME)); check_condition(!$resourcesPatternDmTo->isDir(), "Целевая директория {$resourcesPatternDmTo} существует"); $resourcesPatternDmFrom = DirManager::resources(array('folded', FoldedResources::PATTERN_NAME)); check_condition($resourcesPatternDmFrom->isDir(), "Некорректна директория-источник {$resourcesPatternDmFrom}"); $interfaces = array(); foreach ($this->getFoldedInterfaces($ifaces) as $name => $ifaceClass) { $ctt = $ifaceClass->getClassBody(); if ($ctt) { $interfaces[] = "/****************\n\t * {$name}\n\t ****************/\n" . $ctt; } } $smParams = $adapter->getData(); $smParams['rtypes'] = $rtypesArr; $smParams['funique'] = FoldedResources::unique($type, $subtype); $smParams['BaseClass'] = 'Base' . $classPrefix; $smParams['ManagerClass'] = $classPrefix . 'Manager'; $smParams['ResourcesClass'] = $classPrefix . 'Resources'; $smParams['implements'] = $ifaces ? 'implements ' . implode(', ', $ifaces) . ' ' : ''; $smParams['interfaces'] = $interfaces ? implode("\n\n\t", $interfaces) : ''; try { //КЛАССЫ //Resources $tpl = PSSmarty::template(DirItem::inst(array(__DIR__, 'tpls'), 'resources.tpl'), $smParams); $di = $classesDm->getDirItem(null, $smParams['ResourcesClass'], 'php'); $di->writeToFile(trim($tpl->fetch()), true); //Manager $tpl = PSSmarty::template(DirItem::inst(array(__DIR__, 'tpls'), 'manager.tpl'), $smParams); $di = $classesDm->getDirItem(null, $smParams['ManagerClass'], 'php'); $di->writeToFile(trim($tpl->fetch()), true); if ($hasPhp) { //BaseClass $tpl = PSSmarty::template(DirItem::inst(array(__DIR__, 'tpls'), 'baseclass.tpl'), $smParams); $di = $classesDm->getDirItem(null, $smParams['BaseClass'], 'php'); $di->writeToFile(trim($tpl->fetch()), true); } //ШАБЛОН ДЛЯ СУЩНОСТЕЙ $resourcesPatternDmTo->makePath(); foreach ($rtypes as $rtype) { $ext = FoldedResources::resourceTypeToExt(PsUtil::newReflectionClass('FoldedResources')->getConstant($rtype)); $diTo = $resourcesPatternDmTo->getDirItem(null, FoldedResources::PATTERN_NAME, $ext); $diFrom = $resourcesPatternDmFrom->getDirItem(null, FoldedResources::PATTERN_NAME, $ext); if ($ext == PsConst::EXT_PHP) { $diTo->writeToFile(str_replace('eclassnamebase', $smParams['BaseClass'], $diFrom->getFileContents())); continue; } $diFrom->copyTo($diTo); } } catch (Exception $ex) { $classesDm->clearDir(null, true); $resourcesPatternDmTo->clearDir(null, true); throw $ex; } }