Esempio n. 1
0
 /**
  * Импортирует фолдинг из zip-архива
  * 
  * @param DirItem $zip - пут к архиву
  * @param type $clear - очищать ли директорию перед загрузкой архива
  * @return FoldedEntity
  */
 public function imporFromZip(DirItem $zip, $clear = false)
 {
     $zip = $zip->loadZip();
     $comment = $zip->getArchiveComment();
     $comment = explode(';', $comment);
     check_condition(count($comment) === 2, 'Bad zip archive sign');
     $name = explode('-', $comment[0]);
     $sign = $comment[1];
     check_condition(count($name) === 3, 'Bad zip name');
     $ftype = $name[0];
     $fsubtype = $name[1];
     $ident = $name[2];
     $this->assertAdminCanDo(__FUNCTION__, $ident);
     /*
      * Сейчас мы загружаем zip-архивы из формы, в которой содержатся тип и подтип фолдинга, 
      * так что будем ругаться, если нам передадут не наш архив.
      * В противном случае можно будет просто проверить $this->isIt($ftype, $fsubtype)
      */
     check_condition($this->isIt($ftype, $fsubtype), "Folding [{$ftype}]/[{$fsubtype}] cannot extract this zip");
     $secret = $this->ZIP_SECRET;
     $validSign = md5("{$ftype}-{$fsubtype}-{$ident}-{$secret}");
     check_condition($sign === $validSign, 'Folding archive sign is invalid');
     //Проверим, будет ли архив развёрнут в надлежащую директорию
     $dm = $this->getResourcesDm($ident);
     if ($clear) {
         $dm->clearDir();
     }
     $exportToDirs[] = $dm->getDirItem()->getRelPathNoDs();
     $exportToDirs[] = DirManager::formules()->getDirItem()->getRelPathNoDs();
     for ($i = 0; $i < $zip->numFiles; $i++) {
         $path = $zip->getNameIndex($i);
         $valid = contains_substring($path, $exportToDirs);
         check_condition($valid, "Cant export folded to dir: [{$path}]");
     }
     //Разворачиваем
     $zip->extractTo(PATH_BASE_DIR);
     $zip->close();
     //Очистка старых коверов
     $this->clearGenerated($ident);
     //Оповестим об изменении сущности
     $this->onEntityChanged($ident);
     return $this->getFoldedEntity($ident);
 }
Esempio n. 2
0
 protected function __construct()
 {
     $this->LOGGER = PsLogger::inst(__CLASS__);
     $this->PROFILER = PsProfiler::inst(__CLASS__);
     $this->CACHE = SimpleDataCache::inst();
     $this->DM = DirManager::formules();
 }