/** * Импортирует фолдинг из 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); }
protected function __construct() { $this->LOGGER = PsLogger::inst(__CLASS__); $this->PROFILER = PsProfiler::inst(__CLASS__); $this->CACHE = SimpleDataCache::inst(); $this->DM = DirManager::formules(); }