/** * Метод получает фактический контект для всплывающей страницы. * Сама страница может вернуть или IdentPageFilling, и тогда содержимое * будет обработано за неё. Или непосредственно IdentPageContent, * если ей самой нужно обработать содержимое (например - акции). * * @return ClientBoxContent */ public final function getContent() { if ($this->cbContent) { return $this->cbContent; } $this->checkAccess(); $this->profilerStart(__FUNCTION__); $filling = null; try { $filling = $this->getClientBoxFilling(); check_condition($filling instanceof ClientBoxFilling, "Элемент [{$this->ident}] обработан некорректно"); } catch (Exception $ex) { $this->profilerStop(false); return $this->cbContent = new ClientBoxContent(PsHtml::divErr(ExceptionHandler::getHtml($ex))); } //Построим заголовок $HEAD_PARAMS['class'][] = 'box-header'; if ($filling->isCover()) { $HEAD_PARAMS['class'][] = 'covered'; $HEAD_PARAMS['style']['background-image'] = 'url(' . $this->foldedEntity->getCover()->getRelPath() . ')'; } $HEAD_CONTENT = $filling->getHref() ? PsHtml::a(array('href' => $filling->getHref()), $filling->getTitle()) : $filling->getTitle(); $HEAD = PsHtml::html2('h3', $HEAD_PARAMS, $HEAD_CONTENT); $BOX_CONTENT = $this->foldedEntity->fetchTplWithResources($filling->getSmartyParams()); $BOX = PsHtml::div(array(), $HEAD . $BOX_CONTENT); $this->profilerStop(); return $this->cbContent = new ClientBoxContent($BOX, $filling->getJsParams()); }
/** * Метод, вызываемый блоком * {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(); }
function smarty_block_choice($params, $content, Smarty_Internal_Template &$smarty) { $ctxtParams = SmartyBlockContext::getInstance()->registerBlock($content, __FUNCTION__); if (!$content) { return; } //<select name="$name" /> || <input type="checkbox|readio" name="$name" /> $name = array_get_value('name', $params); //Если передан label, то поле будет отображено, как field формы $label = array_get_value('label', $params); //Текущее значение $curVal = array_get_value_unset('value', $params); //Текущее значение $choiceType = array_get_value_unset('type', $params); //Значения $options = array_get_value(SmartyBlockContext::CHOICE_OPTION, $ctxtParams); if (isEmpty($options)) { return; //--- } switch ($choiceType) { case 'combo': case 'select': echo $label ? PsHtmlForm::select($label, $name, $params, $options, $curVal) : PsHtml::select($params, $options, $curVal); break; case 'check': case 'checkboxes': echo $label ? PsHtmlForm::checkboxes($label, $name, $options, $curVal) : PsHtml::checkboxes($name, $options, $curVal); break; case 'radio': case 'radios': echo $label ? PsHtmlForm::radios($label, $name, $options, $curVal) : PsHtml::radios($name, $options, $curVal); break; default: echo PsHtml::divErr("Неизвестный тип выбора: [{$choiceType}]"); } }
public function __construct($poetIdent, $verseIdent) { parent::__construct($poetIdent, $verseIdent); $this->content = PsHtml::divErr("Стих [{$verseIdent}] не зарегистрирован для поэта [{$poetIdent}]."); }
public function buildContent() { PsDefines::setReplaceFormulesWithImages(false); $navigation = AdminPageNavigation::inst(); /* * Инициализируем необходимые менеджеры */ $TE = TableExporter::inst(); $RQ = GetArrayAdapter::inst(); $FORM = FORM_RecEditForm::getInstance(); $TABLES = PsTable::configured(); /* * Инициализируем параметры, которые нужно будет передать smarty */ $PARAMS['mode'] = null; $PARAMS['table'] = null; $PARAMS['error'] = null; $PARAMS['errors'] = PsDbIniHelper::validateAll(); /* * Обработаем форму */ try { if ($FORM->isValid4Process()) { $this->processForm($FORM->getData()); } else { if ($FORM->isErrorOccurred()) { $PARAMS['error'] = PsHtml::divErr($FORM->getError()); } } } catch (Exception $e) { $PARAMS['error'] = ExceptionHandler::getHtml($e); } /* * Обработаем параметры и определим режим работы */ $MODE = $RQ->str('mode', self::MODE_TABLES_LIST); /** @var PsTable */ $TABLE = null; // Таблица $ROW = null; // Редактируемая строка switch ($MODE) { case self::MODE_ROW_ADD: //Если передан фолдинг, то подставим в форму создания его параметры $folding = Handlers::getInstance()->getFolding($RQ->str('ftype'), $RQ->str('fsubtype'), false); $fident = $RQ->str('fident'); if ($folding && $folding->getTableName() && $fident) { $TABLE = $TE->getTable($folding); $ROW = $folding->getDbRec4Entity($fident); break; } $TABLE = PsTable::inst($RQ->str('table')); /* * Нам не удалось определить внешний вид создаваемой строки, * но если у данной таблицы один фолдинг - возмём вид строки у него. */ $folding = $TABLE->getSingleFolding(); $ROW = $folding ? $folding->getDbRec4Entity($folding->getNextEntityIdent()) : null; break; case self::MODE_TABLE_ROWS: case self::MODE_TABLE_SQL: case self::MODE_TABLE_ARR: case self::MODE_ROW_EDIT: case self::MODE_ROW_DELETE: $TABLE = PsTable::inst($RQ->str('table')); switch ($MODE) { case self::MODE_ROW_EDIT: case self::MODE_ROW_DELETE: $ROW = $TABLE->getRow($RQ->int($TABLE->getPk()->getName())); break; } break; case self::MODE_INSERTS: //Nothing to do break; default: //Защитимся от некорректного значения параметра 'mode' $MODE = self::MODE_TABLES_LIST; break; } $PARAMS['mode'] = $MODE; $PARAMS['table'] = $TABLE; /* * ВЫПОЛНЯЕМ ОБРАБОТКУ */ switch ($MODE) { case self::MODE_TABLES_LIST: $PARAMS['tables'] = $TABLES; $navigation->setCurrent('Список таблиц'); break; case self::MODE_INSERTS: $PARAMS['tables'] = $TABLES; $navigation->addPath(self::urlTables(), 'Список таблиц'); $navigation->setCurrent('Вставка данных'); break; case self::MODE_TABLE_ROWS: $PARAMS['rows'] = $TABLE->getRows(); $PARAMS['addurl'] = self::urlRecAdd($TABLE); $PARAMS['modified'] = $TABLE->getModifiedRows(); case self::MODE_TABLE_SQL: case self::MODE_TABLE_ARR: $navigation->addPath(self::urlTables(), 'Список таблиц'); $navigation->setCurrent($TABLE->getName()); break; default: switch ($MODE) { /* * Помимо действий над записью, мы ещё раздиляем действия над фолдингами * (если они есть для таблицы). Поэтому мы установм: * FormAction - для типа редактирования записи * FormButton - для типа работы с фолдингом */ case self::MODE_ROW_ADD: $FORM->setFormAction(PS_ACTION_CREATE); $FORM->setButtons(FORM_RecEditForm::BUTTON_CREATE); if ($TABLE->hasFoldings()) { $FORM->addButton(FORM_RecEditForm::BUTTON_CREATEF); } $navigation->setCurrent('Создание записи'); break; case self::MODE_ROW_EDIT: $FORM->setFormAction(PS_ACTION_EDIT); $FORM->setButtons(FORM_RecEditForm::BUTTON_EDIT); if ($TABLE->hasFoldings() && !$TABLE->hasFoldingEntity4DbRec($ROW, true)) { $FORM->addButton(FORM_RecEditForm::BUTTON_EDITF); } $navigation->setCurrent('Редактирование записи'); break; case self::MODE_ROW_DELETE: $FORM->setFormAction(PS_ACTION_DELETE); $FORM->setButtons(FORM_RecEditForm::BUTTON_DELETE); if ($TABLE->hasFoldingEntity4DbRec($ROW, true)) { $FORM->addButton(FORM_RecEditForm::BUTTON_DELETEF); } $navigation->setCurrent('Удаление записи'); break; default: raise_error("Неизвестный режим: [{$MODE}]"); } $FORM->setHidden('table', $TABLE->getName()); $FORM->setSmartyParam('table', $TABLE); $FORM->setSmartyParam('rec', $ROW); $navigation->addPath(self::urlTables(), 'Список таблиц'); $navigation->addPath(self::urlTableRows($TABLE), $TABLE->getName()); break; } echo $this->getFoldedEntity()->fetchTpl($PARAMS); }
/** * Перепишем финализацию содержимомго, чтобы добавить дополнительные параметры, сохраняемые в контекст. */ public function finalizeTplContent($content) { $PARAMS[FetchParams::PARAM_ANONS] = $this->getAnons(); $PARAMS[FetchParams::PARAM_VERSES] = $this->getUsedVerses(); $PARAMS[FetchParams::PARAM_EX_CNT] = $this->getExamplesCount(); $PARAMS[FetchParams::PARAM_PLUGINS] = $this->getPluginsData(); $PARAMS[FetchParams::PARAM_TASKS_CNT] = $this->getTasksCount(); $PARAMS[FetchParams::PARAM_HAS_VIDEO] = $this->hasVideo(); /* * Выполним замены. */ foreach ($this->getReplacements() as $replId) { switch ($replId) { case self::REPLACEMENT_ANONS: $localHrefs = PSSmarty::template('post/anons_local_hrefs.tpl', $PARAMS)->fetch(); $content = str_replace($replId, $localHrefs, $content); break; default: $content = str_replace($replId, PsHtml::divErr("Unknown replacement [{$replId}]"), $content); break; } } $PARAMS[FetchParams::PARAM_CONTENT] = $this->wrapContent($content); return $PARAMS; }
public function __construct(Exception $ex) { //parent::__construct(PsHtml::spanErr('Ошибка шаблонного сообщения'), ExceptionHandler::inst()->getHtml($ex)); parent::__construct(PsHtml::spanErr('Ошибка отображения сообщения'), PsHtml::divErr($ex->getMessage())); }