Esempio n. 1
0
 /**
  * @param AddonListFilter $filter
  *
  * @return AddonInterface[] retrieve a list of addons, regarding the $filter used
  */
 public function getFilteredList(AddonListFilter $filter)
 {
     if ($filter->status >= AddonListFilterStatus::ON_DISK && $filter->status != AddonListFilterStatus::ALL) {
         $modules = $this->getModulesOnDisk();
     } else {
         $modules = $this->getList();
     }
     foreach ($modules as $key => &$module) {
         // Part One : Removing addons not related to the selected product type
         if ($filter->type != AddonListFilterType::ALL) {
             if ($module->attributes->get('productType') == 'module') {
                 $productType = AddonListFilterType::MODULE;
             }
             if ($module->attributes->get('productType') == 'service') {
                 $productType = AddonListFilterType::SERVICE;
             }
             if (!isset($productType) || $productType & ~$filter->type) {
                 unset($modules[$key]);
                 continue;
             }
         }
         // Part Two : Remove module not installed if specified
         if ($filter->status != AddonListFilterStatus::ALL) {
             if ($module->database->get('installed') == 1 && ($filter->hasStatus(AddonListFilterStatus::UNINSTALLED) || !$filter->hasStatus(AddonListFilterStatus::INSTALLED))) {
                 unset($modules[$key]);
                 continue;
             }
             if ($module->database->get('installed') == 0 && (!$filter->hasStatus(AddonListFilterStatus::UNINSTALLED) || $filter->hasStatus(AddonListFilterStatus::INSTALLED))) {
                 unset($modules[$key]);
                 continue;
             }
             if ($module->database->get('installed') == 1 && $module->database->get('active') == 1 && !$filter->hasStatus(AddonListFilterStatus::DISABLED) && $filter->hasStatus(AddonListFilterStatus::ENABLED)) {
                 unset($modules[$key]);
                 continue;
             }
             if ($module->database->get('installed') == 1 && $module->database->get('active') == 0 && !$filter->hasStatus(AddonListFilterStatus::ENABLED) && $filter->hasStatus(AddonListFilterStatus::DISABLED)) {
                 unset($modules[$key]);
                 continue;
             }
         }
         // Part Three : Remove addons not related to the proper source (ex Addons)
         if ($filter->origin != AddonListFilterOrigin::ALL) {
             if (!$module->attributes->has('origin_filter_value') && !$filter->hasOrigin(AddonListFilterOrigin::DISK)) {
                 unset($modules[$key]);
                 continue;
             }
             if ($module->attributes->has('origin_filter_value') && !$filter->hasOrigin($module->attributes->get('origin_filter_value'))) {
                 unset($modules[$key]);
                 continue;
             }
         }
     }
     return $modules;
 }