/** * Получает числовой код типа картинки * * @param mixed $plain - тип|расширение|mime * @return int */ public static function getType($plain) { if (PsCheck::isInt($plain)) { $temp = 1 * $plain; check_condition(in_array($temp, self::TYPES()), "Тип картинок [{$plain}] запрещён"); return $temp; } if (PsCheck::isNotEmptyString($plain)) { $temp = lowertrim($plain); $byExt = in_array($temp, self::EXTS()); $byMime = !$byExt && in_array($temp, self::MIMES()); if ($byExt || $byMime) { foreach (self::$TYPE2EXT as $type => $exts) { if ($byExt) { //Поиск по расширениям if (in_array($temp, (array) $exts)) { return $type; } } else { //Поиск по mime типам if ($temp == strtolower(image_type_to_mime_type($type))) { return $type; } } } } } raise_error("Не удалось определить тип картинки по идентификатору [{$plain}], либо картинка онтосится к запрещённым типам."); }
/** * Метод возвращает экземпляр класса-хранилища маппингов. * Может быть переопределён в config.ini */ private static final function inst() { if (isset(self::$inst)) { return self::$inst; //---- } /* * Получим название класса */ $class = ConfigIni::mappingStorage(); /* * Класс совпадает с базовым? */ if (__CLASS__ == $class) { return self::$inst = new MappingStorage(); } /* * Нам передан класс, который отличается от SDK */ $classPath = Autoload::inst()->getClassPath($class); if (!PsCheck::isNotEmptyString($classPath)) { return PsUtil::raise('Не удалось найти класс хранилища маппингов [{}]', $class); } /* * Указанный класс должен быть наследником данного */ if (!PsUtil::isInstanceOf($class, __CLASS__)) { return PsUtil::raise('Указанное хранилище маппингов [{}] не является наследником класса [{}]', $class, __CLASS__); } return self::$inst = new $class(); }
/** * В конструкторе проинициализируем все параметры соединения */ private function __construct(array $params, $sourceDescr) { foreach (PsUtil::getClassConsts(__CLASS__, 'PARAM_') as $param) { $value = array_get_value(PsCheck::notEmptyString($param), $params); if (PsCheck::isNotEmptyString($value)) { $this->PARAMS[$param] = $value; } else { $this->PARAMS[$param] = null; //raise_error("Задано пустое значения для параметра $param в источнике $sourceDescr"); } } $this->url = PsStrings::replaceWithBraced("{}://{}:{}@{}/{}", $this->scheme(), $this->user(), $this->password(), $this->host(), $this->database()); $this->toString = PsStrings::replaceWithBraced("{}://{}:{}@{}/{} (source: {})", $this->scheme(), $this->user(), '***', $this->host(), $this->database(), $sourceDescr); }
/** * Метод проверяет значение на наличие в ней нецензурной лексики * * * * @param string $string - строка, которая должна быть проверена * @return bool - если есть нецензурные элементы, вернёт строку, в которой эта часть выделена */ public static function parse($string) { /* * Пустая строка или не строка? Возвращаем как есть. */ if (!PsCheck::isNotEmptyString($string)) { return false; //--- } /* * Подключим библиотеку, если нужно */ PsLibs::inst()->Censure(); /* * Обрабатываем */ return Text_Censure::parse($string, '2', "…", false); }
public function isRubricable() { return PsCheck::isNotEmptyString($this->rubricsTable); }
/** * Метод возвращает экземпляр класса-плагина Smarty. * Для переопределения этого класса, на уровне проектного config.ini * должен быть задан другой класс. * * Это позволит использовать стандартизованный метод подключения плагинов */ public static final function inst() { if (isset(self::$inst)) { return self::$inst; //---- } /* * Получим название класса */ $class = ConfigIni::smartyPlugin(); /* * Класс подключения библиотек совпадает с базовым */ if (__CLASS__ == $class) { return self::$inst = new PSSmartyPlugin(); } /* * Нам передан класс, который отличается от SDK */ $classPath = Autoload::inst()->getClassPath($class); if (!PsCheck::isNotEmptyString($classPath)) { return PsUtil::raise('Не удалось найти класс плагинов Smarty [{}]', $class); } /* * Указанный класс должен быть наследником данного */ if (!PsUtil::isInstanceOf($class, __CLASS__)) { return PsUtil::raise('Указанный плагин Smarty [{}] не является наследником класса [{}]', $class, __CLASS__); } return self::$inst = new $class(); }
/** * Метод возвращает экземпляр класса-хранилища экземпляров фолдинов. * Для переопределения этого класса, на уровне проектного config.ini * должен быть задан другой класс. * * @return FoldedStorageInsts */ protected static final function inst() { if (isset(self::$inst)) { return self::$inst; //---- } /* * Получим название класса */ $class = FoldingsIni::foldingsStore(); /* * Класс совпадает с базовым */ if (__CLASS__ == $class) { return self::$inst = new FoldedStorageInsts(); } /* * Нам передан класс, который отличается от SDK */ $classPath = Autoload::inst()->getClassPath($class); if (!PsCheck::isNotEmptyString($classPath)) { return PsUtil::raise('Не удалось найти класс регистрации экземпляров фолдингов [{}]', $class); } /* * Указанный класс должен быть наследником данного */ if (!PsUtil::isInstanceOf($class, __CLASS__)) { return PsUtil::raise('Указанный класс регистрации экземпляров фолдингов [{}] не является наследником класса [{}]', $class, __CLASS__); } return self::$inst = new $class(); }
/** * Метод возвращает экземпляр класса, подключающего библиотеки. * Для переопределения этого класса, на уровне проектного config.ini * должен быть задан другой класс, отвечающий за подключение библиотек. * * Это позволит: * 1. Использовать стандартизованный метод подключения внешних библиотек * 2. Переопределить подключение библиотек из SDK */ public static final function inst() { if (isset(self::$inst)) { return self::$inst; //---- } /* * Получим название класса, отвечающего за подключение библиотек */ $class = ConfigIni::libsIncluder(); /* * Подготовим директории */ $SDK_LIB_DIR = DirManager::inst(PS_DIR_INCLUDES, DirManager::DIR_LIB)->absDirPath(); $PROJ_LIB_DIR = DirManager::inst(PS_DIR_ADDON, DirManager::DIR_LIB)->absDirPath(); /* * Класс подключения библиотек совпадает с базовым */ if (__CLASS__ == $class) { self::$inst = new PsLibs(); self::$inst->SDK_LIB_DIR = $SDK_LIB_DIR; self::$inst->LOGGER = PsLogger::inst($class); self::$inst->LOGGER->info('Libs includer SDK: [{}]', __FILE__); self::$inst->LOGGER->info('Libs directory SDK: [{}]', $SDK_LIB_DIR); return self::$inst; //--- } /* * Нам передан класс, который отличается от SDK */ $classPath = Autoload::inst()->getClassPath($class); if (!PsCheck::isNotEmptyString($classPath)) { return PsUtil::raise('Не удалось найти класс загрузчика библиотек [{}]', $class); } /* * Указанный класс должен быть наследником данного */ if (!PsUtil::isInstanceOf($class, __CLASS__)) { return PsUtil::raise('Указанный загрузчик библиотек [{}] не является наследником класса [{}]', $class, __CLASS__); } self::$inst = new $class(); self::$inst->SDK_LIB_DIR = $SDK_LIB_DIR; self::$inst->PROJ_LIB_DIR = $PROJ_LIB_DIR; self::$inst->LOGGER = PsLogger::inst($class); self::$inst->LOGGER->info('Libs includer CUSTOM: [{}]', $classPath); self::$inst->LOGGER->info('Libs directory SDK: [{}]', $SDK_LIB_DIR); self::$inst->LOGGER->info('Libs directory CUSTOM: [{}]', $PROJ_LIB_DIR); return self::$inst; //--- }
/** * Конструктор класса для работы с кешем. * Кеширование идёт в два этапа: * 1. Кеширование на уровне класса для максимально быстрого доступа * 2. Кеширование в долгосрочном хранилище, которое реализуется отдельным классом - "движком" кеширования * * Движок кеширования должен быть задан на уровне config.ini * * @return PSCache */ protected function __construct() { $this->LOGGER = PsLogger::inst(__CLASS__); /* * Получим название класса "движка" кеширования */ $class = ConfigIni::cacheEngine(); /* * Проверим наличие класса */ $classPath = Autoload::inst()->getClassPath($class); if (!PsCheck::isNotEmptyString($classPath)) { return PsUtil::raise('Не удалось найти класс для кеширования [{}]', $class); } /* * Правильный ли класс указан? */ if (!PsUtil::isInstanceOf($class, 'PSCacheEngine')) { return PsUtil::raise('Указанный класс кеширования [{}] не является наследником класса [{}]', $class, 'PSCacheEngine'); } $this->LOGGER->info('Используем движок кеширования: {}', $class); $this->CACHE_ENGINE = new $class(); }