Exemple #1
0
 /**
  * Метод получает фактический контект для всплывающей страницы.
  * Сама страница может вернуть или 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();
 }
Exemple #3
0
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}]");
    }
}
Exemple #4
0
 public function __construct($poetIdent, $verseIdent)
 {
     parent::__construct($poetIdent, $verseIdent);
     $this->content = PsHtml::divErr("Стих [{$verseIdent}] не зарегистрирован для поэта [{$poetIdent}].");
 }
Exemple #5
0
 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()));
 }