/** @return DirItem */ public static function inst($path, $name = null, $ext = null) { $absPath = normalize_path(file_path($path, $name, $ext)); if (!$absPath || DIR_SEPARATOR == $absPath || PATH_BASE_DIR == $absPath || PATH_BASE_DIR == $absPath . DIR_SEPARATOR) { $absPath = PATH_BASE_DIR; } else { if (!starts_with($absPath, PATH_BASE_DIR)) { $absPath = next_level_dir(PATH_BASE_DIR, $absPath); } } if (array_key_exists($absPath, self::$items)) { return self::$items[$absPath]; } $relPath = cut_string_start($absPath, PATH_BASE_DIR); $relPath = ensure_dir_startswith_dir_separator($relPath); return self::$items[$absPath] = new DirItem($relPath, $absPath); }
/** * $notCkeckDirs - директории, существование которых проверяться не будет * $dirs - директории, существование которых будет проверено при создании менеджера * * @return DirManager */ public static function inst($notCkeckDirs = null, $dirs = null) { $absPathNotCheck = next_level_dir($notCkeckDirs, DIR_SEPARATOR); if (DIR_SEPARATOR == $absPathNotCheck || PATH_BASE_DIR == $absPathNotCheck) { $absPathNotCheck = PATH_BASE_DIR; } else { if (!starts_with($absPathNotCheck, PATH_BASE_DIR)) { $absPathNotCheck = next_level_dir(PATH_BASE_DIR, $absPathNotCheck); } } $absPath = next_level_dir($absPathNotCheck, $dirs, DIR_SEPARATOR); //Проверим, нужно ли создать структуру директорий if ($absPathNotCheck != $absPath && !is_dir($absPath)) { @mkdir($absPath, 0777, true); } if (array_key_exists($absPath, self::$insts)) { return self::$insts[$absPath]; } $relPath = cut_string_start($absPath, PATH_BASE_DIR); $relPath = ensure_dir_startswith_dir_separator($relPath); return self::$insts[$absPath] = new DirManager($relPath, $absPath); }
/** * Метод возвращат путь относительно директории информационных шаблонов данного фолдинга: * /resources/folded/stocks/mosaic/tpl/stock1.tpl -> /stock1.tpl * * Пример вызова: * StockManager::inst()->getInfoTplRelPath('/resources/folded/stocks/mosaic/tpl/stock1.tpl'); */ public function getInfoTplRelPath($infoTpl) { $infoTpl = $infoTpl instanceof DirItem ? $infoTpl->getRelPath() : $infoTpl; $infoTpl = $infoTpl instanceof FoldedInfoTpl ? $infoTpl->getDirItem()->getRelPath() : $infoTpl; $rel2foldDm = cut_string_start($infoTpl, $this->getResourcesDm()->relDirPath()); check_condition($rel2foldDm != $infoTpl, "Путь [{$infoTpl}] не принадлежит фолдингу {$this}."); $ident = array_get_value(0, explode(DIR_SEPARATOR, $rel2foldDm)); check_condition($this->existsEntity($ident), "Не удалось определить сущность фолдинга для информационного шаблона [{$infoTpl}]."); $rel2infoDm = cut_string_start($infoTpl, $this->getInfoDm($ident)->relDirPath()); check_condition($rel2infoDm != $infoTpl, "Путь [{$infoTpl}] не является путём к информационному шаблону."); return ensure_dir_startswith_dir_separator($rel2infoDm); }
/** @return DirManager */ public static function inst($notCkeckDirs = null, $dirs = null) { $dirPath = next_level_dir($notCkeckDirs); $corePath = normalize_path(PATH_BASE_DIR); $isAbs = starts_with($dirPath, $corePath); $absPathNotCheck = $isAbs ? $dirPath : next_level_dir($corePath, $dirPath); $absPathNotCheck = ensure_dir_endswith_dir_separator($absPathNotCheck); $absPath = next_level_dir($absPathNotCheck, $dirs); $absPath = ensure_dir_endswith_dir_separator($absPath); //Проверим, нужно ли создать структуру директорий if ($absPathNotCheck != $absPath && !is_dir($absPath)) { @mkdir($absPath, 0777, true); } if (array_key_exists($absPath, self::$insts)) { return self::$insts[$absPath]; } $relPath = cut_string_start($absPath, $corePath); $relPath = ensure_dir_startswith_dir_separator($relPath); return self::$insts[$absPath] = new DirManager($relPath, $absPath); }