Example #1
0
 public function buildContent()
 {
     $navigation = AdminPageNavigation::inst();
     $ftype = LibResources::LIB_FOLDING_TYPE;
     $fsubtype = RequestArrayAdapter::inst()->str('fsubtype');
     $fident = RequestArrayAdapter::inst()->str('fident');
     $mode = !$fsubtype ? self::MODE_FOLDINGS_LIST : self::MODE_FOLDING_CONTENT;
     $PARAMS['error'] = null;
     switch ($mode) {
         case self::MODE_FOLDINGS_LIST:
             $PARAMS['foldings'] = array();
             /* @var $manager FoldedResources */
             foreach (Handlers::getInstance()->getLibManagers() as $manager) {
                 $PARAMS['foldings'][] = array('name' => $manager->getEntityName() . ' (' . $manager->getUnique() . ')', 'url' => $this->url(array('fsubtype' => $manager->getFoldingSubType())));
             }
             $navigation->setCurrent('Список библиотек');
             break;
         case self::MODE_FOLDING_CONTENT:
             $manager = Handlers::getInstance()->getTimeLineFolding($fsubtype);
             $PARAMS['tlbfe'] = $manager->getTLBuilderFoldedEntity();
             $PARAMS['folding']['name'] = $manager->getEntityName();
             $PARAMS['folding']['fsubtype'] = $manager->getFoldingSubType();
             //TODO - вынести
             $items = AdminLibBean::inst()->getAllNoFetch($fsubtype);
             $PARAMS['folding']['data'] = array();
             /* @var $item LibItemDb */
             foreach ($items as $item) {
                 $item['editurl'] = AP_APFoldingEdit::urlFoldingEdit(FoldedResources::unique($ftype, $fsubtype, $item['ident']));
                 $PARAMS['folding']['data'][] = $item;
             }
             $navigation->addPath($this->url(), 'Список библиотек');
             $navigation->setCurrent($manager->getEntityName());
             break;
     }
     $PARAMS['mode'] = $mode;
     echo $this->getFoldedEntity()->fetchTpl($PARAMS);
 }
 /**
  * Метод создаёт новый фолдинг
  */
 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;
     }
 }
Example #3
0
 /** @return FoldedResources */
 public function getFolding($type, $subtype = null, $assert = true)
 {
     return $this->getFoldingByUnique(FoldedResources::unique($type, $subtype), $assert);
 }
 /**
  * Метод получает фолдинг по типу и подтипу фолдинга [ps, lib + p ...]
  * 
  * @param string $type - тип фолдинга
  * @param string $subtype - подтип фолдинга
  * @param bool $assert - проверять ли наличие фолдинга или возвращать null
  * @return FoldedResources
  */
 public static function byTypeStype($type, $subtype = null, $assert = true)
 {
     return self::byUnique(FoldedResources::unique($type, $subtype), $assert);
 }