/**
  * Функция производит финализацию страницы, показываемой пользователю, добавляя к ней элемент с содержащимися в нём ссылками.
  */
 public function appendLibItemsToPageContent($CONTENT)
 {
     $matches = array();
     $data = PsConstJs::BUBBLE_LOADER_FOLDING_DATA;
     $pattern = "/data-{$data}=\"(.+?)\"/si";
     preg_match_all($pattern, $CONTENT, $matches);
     $matches = array_unique(array_get_value(1, $matches, array()));
     $items = array();
     foreach ($matches as $unique) {
         $entity = FoldedStorageInsts::getFoldedEntityByUnique($unique, false);
         if ($entity && $entity->getFolding()->isItByType(LibResources::LIB_FOLDING_TYPE)) {
             $items[$entity->getUnique()] = $entity->getFolding()->getBubble($entity->getIdent());
         }
     }
     $has = count($items) > 0;
     if ($this->LOGGER->isEnabled()) {
         $this->LOGGER->info();
         $this->LOGGER->info('Библиотечные элементы, добавленные на страницу:');
         if ($has) {
             foreach ($items as $unique => $lib) {
                 $this->LOGGER->info("\t{$unique}");
             }
         } else {
             $this->LOGGER->info("\t-- Нет --");
         }
     }
     return $CONTENT . ($has ? PsHtml::div(array('id' => PsConstJs::BUBBLE_LOADER_FOLDING_STORE_ID), implode('', $items)) : '');
 }
 protected function processImpl(PostArrayAdapter $adapter, $button)
 {
     $entity = FoldedStorageInsts::getFoldedEntityByUnique($adapter->str('fentity'));
     $tpl = $entity->getFolding()->getInfoTpl($entity->getIdent(), $adapter->str('ftpl'));
     $content = $adapter->str('tpl');
     $tpl->getDirItem()->writeLineToFile($content, true);
     return new AjaxSuccess();
 }
 private function insert($fname, ArrayAdapter $params, $text)
 {
     //Идентификатор
     $ident = $params->get('ident');
     //Текст
     $text = $text == '.' ? null : $text;
     //Имплементация доджна вернуть ссылку для показа bubble
     return FoldedStorageInsts::bySourcePrefix($fname)->getBubbleHref($ident, $text, $params);
 }
Example #4
0
 public function getTimeLineFolding()
 {
     $insts = array();
     foreach (FoldedStorageInsts::listFoldings() as $folding) {
         if ($folding instanceof TimeLineFolding) {
             $insts[] = $folding;
         }
     }
     return $insts;
 }
 /**
  * Метод пытается выдать очки пользователю на основе запроса к ajax {@link GivePointsCommon}
  */
 public function givePointsByRequest(PsUser $user, ArrayAdapter $request)
 {
     $fentity = FoldedStorageInsts::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)
 {
     $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)
 {
     $clear = $adapter->bool(FORM_PARAM_YES_NO);
     $folding = FoldedStorageInsts::byUnique($adapter->str('folding'));
     $uploadedZip = SimpleUploader::inst()->saveUploadedFile();
     try {
         $fentity = $folding->imporFromZip($uploadedZip, $clear);
     } catch (Exception $ex) {
         $uploadedZip->remove();
         throw $ex;
     }
     return new AjaxSuccess(array('url' => AP_APFoldingEdit::url($fentity)));
 }
Example #8
0
 protected function executeImpl(ArrayAdapter $params)
 {
     $action = $params->str('action');
     $unique = $params->str('unique');
     $folding = FoldedStorageInsts::byUnique($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 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);
 }
 protected function processImpl(PostArrayAdapter $adapter, $button)
 {
     if (!$adapter->hasAllNoEmpty('folding', self::PARAM_NEW_FOLDING_IDENT)) {
         return 'Не переданы все необходимые параметры.';
     }
     $funique = $adapter->str('folding');
     $fident = check_condition($adapter->str(self::PARAM_NEW_FOLDING_IDENT), 'Пустой идентификатор фолдинга');
     $folding = FoldedStorageInsts::byUnique($funique);
     $folding->assertNotExistsEntity($fident);
     switch ($button) {
         case self::BUTTON_SAVE_DB:
             $action = PS_ACTION_CREATE;
             $table = TableExporter::inst()->getTable($folding);
             //Проставим руками идентификатор фолдинга для колонки из базы
             $adapter->set($folding->getTableColumnIdent(), $fident);
             //TODO - выкинуто
             /*
              $rec = $table->fetchRowFromForm($adapter->getData(), $action);
              if (!is_array($rec)) {
              //Данные для создания записи в БД не прошли валидацию
              return $rec;
              }
              //$table->saveRec($rec, $action);
             */
             //createFoldingDbRec($folding, $ident);
         //TODO - выкинуто
         /*
          $rec = $table->fetchRowFromForm($adapter->getData(), $action);
          if (!is_array($rec)) {
          //Данные для создания записи в БД не прошли валидацию
          return $rec;
          }
          //$table->saveRec($rec, $action);
         */
         //createFoldingDbRec($folding, $ident);
         case self::BUTTON_SAVE:
             $folding->createEntity($fident);
             break;
     }
     return new AjaxSuccess(array('url' => AP_APFoldingEdit::urlFoldingEdit($folding->getFoldedEntity($fident))));
 }
Example #11
0
// ID приложения
$client_secret = 'lYjfUZwZmlJJlFIqQFAj';
// Защищённый ключ
$redirect_uri = 'http://localhost/vk-auth';
// Адрес сайта
$url = 'http://oauth.vk.com/authorize';
$params = array('client_id' => $client_id, 'redirect_uri' => $redirect_uri, 'response_type' => 'code');
echo urlencode(http_build_query($params));
//echo PsEnvironment::isIncluded();
//print_r(PsMathRebusSolver::solve('драма+драма=театр'));
die;
PSSmarty::smarty();
echo (new SmartyFunctions())->psctrl(array());
die;
print_r(FoldedStorage::listFoldingUniques());
print_r(FoldedStorageInsts::listFoldingUniques());
die;
var_dump(ConfigIni::projectSrcAdminDir());
br();
var_dump(ConfigIni::projectSrcCommonDir());
br();
var_dump(ConfigIni::projectGlobalsFilePath());
br();
new YouTubePluginAdmin();
die;
ExceptionHandler::dumpError(new Exception('XXXX'), 'Additional info');
die;
class X
{
    protected function __construct()
    {
 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;
 }
Example #13
0
 /**
  * Див-обёртка для хранения содержимого bubble.
  * <div class="lib-s-BP_FM2_einstein lib-bubble">...</div>
  * И баблы, показываемые на странице, и баблы, загружаемые через ajax - все отображаются в этой обёртке.
  */
 public static function extractFoldedEntityBubbleDiv($unique)
 {
     $entity = FoldedStorageInsts::getFoldedEntityByUnique($unique, false);
     if (!$entity || !$entity->getFolding() instanceof BubbledFolding) {
         return null;
     }
     //Добавим классы для контейнера bubble, чтобы мы могли его найти на странице
     $params['class'][] = $entity->getUnique();
     $params['class'][] = $entity->getFolding()->getFoldingType() . '-bubble';
     $bubble = $entity->getFolding()->getBubble($entity->getIdent());
     $clear = PsHtml::div(array('class' => 'clearall'));
     return PsHtml::div($params, $bubble . $clear);
 }
Example #14
0
 public function buildContent()
 {
     $PARAMS['foldings'] = FoldedStorageInsts::listFoldings();
     return $this->foldedEntity->fetchTpl($PARAMS);
 }
 /**
  * Метод возвращает сущность фолдинга по заданному коду
  * 
  * @return FoldedEntity Сущность, соответствующая заданному коду
  */
 public function getFoldedEntityByDbCode($code)
 {
     return $this->CACHE->has($code) ? $this->CACHE->get($code) : $this->CACHE->set($code, FoldedStorageInsts::getFoldedEntityByUnique(FoldingBean::inst()->getUniqueByCode($code)));
 }
Example #16
0
 protected function init($mident, array $params)
 {
     $this->folding = FoldedStorageInsts::byUnique($params['unique']);
     $this->folding->assertWorkWithTable();
 }
 /**
  * Метод возвращает экземпляр класса-хранилища экземпляров фолдинов.
  * Для переопределения этого класса, на уровне проектного config.ini
  * должен быть задан другой класс.
  * 
  * @return FoldedStorageInsts
  */
 protected static final function inst()
 {
     if (isset(self::$inst)) {
         return self::$inst;
         //----
     }
     /*
      * Получим название класса
      */
     $class = FoldingsIni::foldingsStore();
     /*
      * Класс совпадает с базовым
      */
     if (__CLASS__ == $class) {
         return self::$inst = new FoldedStorageInsts();
     }
     /*
      * Нам передан класс, который отличается от SDK
      */
     $classPath = Autoload::inst()->getClassPath($class);
     if (!PsCheck::isNotEmptyString($classPath)) {
         return PsUtil::raise('Не удалось найти класс регистрации экземпляров фолдингов [{}]', $class);
     }
     /*
      * Указанный класс должен быть наследником данного
      */
     if (!PsUtil::isInstanceOf($class, __CLASS__)) {
         return PsUtil::raise('Указанный класс регистрации экземпляров фолдингов [{}] не является наследником класса [{}]', $class, __CLASS__);
     }
     return self::$inst = new $class();
 }
Example #18
0
 public function buildContent()
 {
     $navigation = AdminPageNavigation::inst();
     $RQ = RequestArrayAdapter::inst();
     /** @var FoldedEntity */
     $entity = FoldedStorageInsts::getFoldedEntityByUnique($RQ->str('entity'), false);
     /** @var FoldedResources */
     $folding = $entity ? $entity->getFolding() : FoldedStorageInsts::byUnique($RQ->str('folding'), false);
     $mode = $RQ->str('mode', self::MODE_FOLDINGS_LIST);
     $PARAMS['mode'] = $mode;
     $PARAMS['error'] = null;
     $PARAMS['entity'] = $entity;
     $PARAMS['folding'] = $folding;
     $PARAMS['foldings'] = FoldedStorageInsts::listFoldings();
     $ftype = $folding ? $folding->getFoldingType() : '';
     $fsubtype = $folding ? $folding->getFoldingSubType() : '';
     $fident = $entity ? $entity->getIdent() : '';
     $flist = $RQ->str('list');
     $ftplpath = $RQ->str('tplpath');
     //РЕДИРЕКТ
     if ($mode != self::MODE_FOLDINGS_LIST && !$folding) {
         PsUtil::redirectTo(self::urlFoldingsList());
     }
     //ВЫПОЛНЕНИЕ
     switch ($mode) {
         //СПИСОК ВСЕХ ФОЛДИНГОВ
         case self::MODE_FOLDINGS_LIST:
             $navigation->setCurrent('Список фолдингов');
             break;
             //СПИСОК СУЩНОСТЕЙ ДАННОГО ФОЛДИНГА
         //СПИСОК СУЩНОСТЕЙ ДАННОГО ФОЛДИНГА
         case self::MODE_FOLDING_CONTENT:
             $newIdent = $folding->getNextEntityIdent();
             //Форма создания
             $FORM = FORM_AdminFoldingCreateForm::getInstance();
             $FORM->setHidden('folding', $folding->getUnique());
             $FORM->setParam(FORM_AdminFoldingCreateForm::PARAM_NEW_FOLDING_IDENT, $newIdent);
             $FORM->setSmartyParam('folding', $folding);
             /* @var $TABLE PsTable */
             $FORM->setSmartyParam('rec', $folding->getDbRec4Entity($newIdent));
             //Форма загрузки
             $FORM = FORM_AdminFoldingUploadForm::getInstance();
             $FORM->setHidden('folding', $folding->getUnique());
             $navigation->addPath(self::urlFoldingsList(), 'Список фолдингов');
             $navigation->setCurrent($folding->getEntityName());
             break;
         case self::MODE_FOLDING_LIST_EDIT:
             $PARAMS['list'] = $flist;
             //TODO - выкинуто
             //$PARAMS['listIdents'] = $folding->getPossibleListIdents($flist);
             $navigation->addPath(self::urlFoldingsList(), 'Список фолдингов');
             $navigation->addPath(self::urlFoldingEntitys($folding), $folding->getEntityName());
             $navigation->setCurrent('Редактирование списка ' . $flist);
             break;
         case self::MODE_FOLDING_TPLS_LIST:
             $PARAMS['tplsList'] = $folding->getAllInfoTpls($fident);
             $navigation->addPath(self::urlFoldingsList(), 'Список фолдингов');
             $navigation->addPath(self::urlFoldingEntitys($folding), $folding->getEntityName());
             $navigation->addPath(self::urlFoldingEdit($entity), $fident);
             $navigation->setCurrent('Информационные шаблоны');
             break;
         case self::MODE_FOLDING_TPL_EDIT:
             $PARAMS['tplsList'] = $folding->getAllInfoTpls($fident);
             $tpl = $folding->getInfoTpl($entity->getIdent(), $ftplpath);
             $PARAMS['tpl'] = $tpl;
             //Отфетчим содержимое, извлеча из запроса те параметры, которые начинаются на sm_
             $PARAMS['content'] = $tpl->fetchNoCache($RQ->getByKeyPrefix('sm_', true));
             $FORM = FORM_AdminFoldingInfoTplEditForm::getInstance();
             $FORM->setHidden('fentity', $entity->getUnique());
             $FORM->setHidden('ftpl', $tpl->getInfoRelPath());
             $FORM->setSmartyParam('tpl', $tpl->getDirItem()->getFileContents());
             $navigation->addPath(self::urlFoldingsList(), 'Список фолдингов');
             $navigation->addPath(self::urlFoldingEntitys($folding), $folding->getEntityName());
             $navigation->addPath(self::urlFoldingEdit($entity), $fident);
             $navigation->addPath(self::urlFoldingInfoTplsList($entity), 'Информационные шаблоны');
             $navigation->setCurrent($tpl->getInfoRelPath());
             break;
         case self::MODE_FOLDING_EDIT:
             //Ссылка для скачивания спрайтов
             $download['class'] = 'download';
             $download['data'] = array('ftype' => $ftype, 'fsubtype' => $fsubtype, 'fident' => $fident);
             $PARAMS['download'] = PsHtml::a($download, '[Скачать]');
             $spriteImg = $folding->getSprite($fident);
             $spriteImg = $spriteImg && $spriteImg->getImgDi()->isImg() ? $spriteImg->getImgDi() : null;
             $PARAMS['sprite'] = $spriteImg ? PsHtml::a(array('href' => $spriteImg->getRelPath()), '[Спрайт]', true) : null;
             //Информационные шаблоны
             $PARAMS['patterns'] = '';
             if (count($folding->getInfoDiList($fident))) {
                 $patterns['href'] = self::urlFoldingInfoTplsList($entity);
                 $PARAMS['patterns'] = PsHtml::a($patterns, '[Инфо шаблоны]');
             }
             $PARAMS['info'] = '';
             try {
                 $prew = $folding->getFoldedEntityPreview($fident);
                 if (is_array($prew)) {
                     $PARAMS['info'] = array_get_value('info', $prew);
                     $PARAMS['content'] = array_get_value('content', $prew);
                 } else {
                     $PARAMS['content'] = $prew;
                 }
             } catch (Exception $e) {
                 $PARAMS['content'] = ExceptionHandler::getHtml($e);
             }
             /*
              * Подготовим форму редактирования фолдинга
              */
             $FORM = FORM_AdminFoldingEditForm::getInstance();
             /* hiddens */
             $FORM->setHidden('ftype', $ftype);
             $FORM->setHidden('fsubtype', $fsubtype);
             $FORM->setHidden('fident', $fident);
             $rtypes = $folding->getAllowedResourceTypes();
             /* fields */
             foreach ($rtypes as $rtype) {
                 $FORM->setParam($rtype, $folding->getResourceDi($fident, $rtype)->getFileContents(false));
             }
             /* smarty */
             $FORM->setSmartyParam('types', $rtypes);
             $FORM->setSmartyParam('covers', $folding->isImagesFactoryEnabled());
             /* table */
             $TABLE = null;
             $DBROW = null;
             if ($folding->getTableName()) {
                 $TABLE = TableExporter::inst()->getTable($folding->getTableName());
                 //TODO - выкинуто
                 //$DBROW = $TABLE->getFoldingDbRec($folding, $fident);
             }
             $FORM->setSmartyParam('table', $TABLE);
             $FORM->setSmartyParam('row', $DBROW);
             if (!$DBROW) {
                 $FORM->removeButton(FORM_AdminFoldingEditForm::BUTTON_DELETE_ALL);
             }
             /*
              * Навигация
              */
             $navigation->addPath(self::urlFoldingsList(), 'Список фолдингов');
             $navigation->addPath(self::urlFoldingEntitys($folding), $folding->getEntityName());
             $navigation->setCurrent($fident);
             break;
     }
     PsDefines::setReplaceFormulesWithImages(false);
     echo $this->getFoldedEntity()->fetchTpl($PARAMS);
 }
 protected function init($mident, array $params)
 {
     $this->folding = FoldedStorageInsts::byUnique($params['unique']);
 }
 protected function loadIdentsRight($mident, array $params, \MappingSource $srcLeft, $lident)
 {
     return FoldedStorageInsts::listFoldingUniques();
 }
Example #21
0
 /** @return FoldedClass */
 protected static function inst()
 {
     return FoldedStorageInsts::byClassPrefix(FoldedResources::extractPrefixFromClass(get_called_class()))->getEntityClassInst(self::getIdent());
 }