Esempio n. 1
0
 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();
 }
Esempio n. 2
0
 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));
 }
Esempio n. 3
0
 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();
 }
Esempio n. 4
0
 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());
 }
Esempio n. 5
0
 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());
 }
Esempio n. 6
0
 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();
 }
Esempio n. 7
0
 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();
 }
Esempio n. 8
0
 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}'");
 }
Esempio n. 9
0
 public function doProcess(ArrayAdapter $params)
 {
     $postId = $params->int('postId');
     $postType = $params->str('postType');
     $pp = Handlers::getInstance()->getPostsProcessorByPostType($postType);
     $this->postCP = $pp->getPostContentProvider($postId);
 }
Esempio n. 10
0
 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));
     }
 }
Esempio n. 11
0
 protected function executeImpl(ArrayAdapter $params)
 {
     $method = $params->str('method');
     $params = $params->arr('params');
     TestManagerCaller::execute($method, $params);
     return new AjaxSuccess();
 }
Esempio n. 12
0
 /**
  * Метод, вызываемый блоком
  * {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();
 }
Esempio n. 13
0
 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);
 }
Esempio n. 14
0
 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}]";
 }
Esempio n. 15
0
 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);
 }
Esempio n. 16
0
 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();
 }
Esempio n. 17
0
 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();
 }
Esempio n. 18
0
 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);
 }
Esempio n. 19
0
 /**
  * Метод пытается выдать очки пользователю на основе запроса к 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);
 }
Esempio n. 20
0
 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();
 }
Esempio n. 21
0
 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();
 }
Esempio n. 22
0
 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);
 }
Esempio n. 23
0
 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();
 }
Esempio n. 24
0
 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);
 }
Esempio n. 25
0
 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);
 }
Esempio n. 26
0
 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);
 }
Esempio n. 27
0
 public function doProcess(ArrayAdapter $params)
 {
     $this->plugin = PluginsManager::inst()->getPlugin($params->str(GET_PARAM_PLUGIN_IDENT));
     $this->params = $params;
 }
Esempio n. 28
0
 protected function executeImpl(ArrayAdapter $params)
 {
     $hash = $params->str('hash');
     $tex = TexImager::inst()->decodeTexFromHash($hash);
     return $tex ? new AjaxSuccess($tex) : "Нет формулы с хэш-кодом [{$hash}]";
 }
Esempio n. 29
0
 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;
 }
Esempio n. 30
0
 /**
  * Метод создаёт новый фолдинг
  */
 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;
     }
 }