Ejemplo n.º 1
0
 /**
  * В конструкторе пробежимся по всем хранилищам и соберём все фолдинги
  */
 protected function __construct()
 {
     $this->LOGGER = PsLogger::inst(__CLASS__);
     $this->PROFILER = PsProfiler::inst(__CLASS__);
     /*
      * Инициалилизируем коллекцию
      */
     $this->PROVIDERS = array();
     /*
      * Собираем полный список доступных хранилищ и менеджеров фолдингов в них
      */
     $providerClasses = ConfigIni::getPropCheckType(ConfigIni::GROUP_FOLDINGS, 'providers', array(PsConst::PHP_TYPE_ARRAY, PsConst::PHP_TYPE_NULL));
     $providerClasses = to_array($providerClasses);
     $providerClasses[] = FoldingsProviderSdk::calledClass();
     $this->LOGGER->info('Providers: {}', array_to_string($providerClasses));
     foreach ($providerClasses as $provider) {
         if (in_array($provider, $this->PROVIDERS)) {
             $this->LOGGER->info('[-] {} - {}', $provider, 'is already registered');
             continue;
             //---
         }
         if (!class_exists($provider)) {
             $this->LOGGER->info('[-] {} - {}', $provider, 'is not included');
             continue;
             //---
         }
         if (!PsUtil::isInstanceOf($provider, FoldingsProviderAbstract::calledClass())) {
             $this->LOGGER->info('[-] {} - {}', $provider, 'is not instance of ' . FoldingsProviderAbstract::calledClass());
             continue;
             //---
         }
         $this->LOGGER->info('[+] {}', $provider);
         $this->PROVIDERS[] = $provider;
         /*
          * Для каждого хранилища загружаем список входящих в него фолдингов
          */
         $this->PROFILER->start($provider . '::list');
         /* @var $folding FoldedResources */
         foreach ($provider::listFoldings() as $folding) {
             $funique = $folding->getUnique();
             if (array_key_exists($funique, $this->UNIQUE_2_PROVIDER)) {
                 raise_error(PsStrings::replaceWithBraced('Folding {} is provided by: {}, {}', $funique, $this->UNIQUE_2_PROVIDER[$funique], $provider));
             }
             $this->LOGGER->info(' [>] {}', $funique);
             $this->UNIQUE_2_PROVIDER[$funique] = $provider;
             $this->UNIQUE_2_FOLDING[$funique] = $folding;
         }
         $this->PROFILER->stop();
     }
 }
Ejemplo n.º 2
0
 /**
  * Название класса
  */
 public static final function isSdk()
 {
     return self::calledClass() === FoldingsProviderSdk::calledClass();
 }