/** * Get modules based on the directory listing in the backend application. * * If a module contains a info.xml it will be parsed. * * @return array */ public static function getModules() { $installedModules = (array) BackendModel::getContainer()->getParameter('installed_modules'); $modules = BackendModel::getModulesOnFilesystem(false); $manageableModules = array(); // get more information for each module foreach ($modules as $moduleName) { if (in_array($moduleName, self::$ignoredModules)) { continue; } $module = array(); $module['id'] = 'module_' . $moduleName; $module['raw_name'] = $moduleName; $module['name'] = \SpoonFilter::ucfirst(BL::getLabel(\SpoonFilter::toCamelCase($moduleName))); $module['description'] = ''; $module['version'] = ''; $module['installed'] = false; $module['cronjobs_active'] = true; if (in_array($moduleName, $installedModules)) { $module['installed'] = true; } try { $infoXml = @new \SimpleXMLElement(BACKEND_MODULES_PATH . '/' . $module['raw_name'] . '/info.xml', LIBXML_NOCDATA, true); $info = self::processModuleXml($infoXml); // set fields if they were found in the XML if (isset($info['description'])) { $module['description'] = BackendDataGridFunctions::truncate($info['description'], 80); } if (isset($info['version'])) { $module['version'] = $info['version']; } // check if cronjobs are set if (isset($info['cronjobs'])) { foreach ($info['cronjobs'] as $cronjob) { if (!$cronjob['active']) { $module['cronjobs_active'] = false; break; } } } } catch (\Exception $e) { // don't act upon error, we simply won't possess some info } $manageableModules[] = $module; } return $manageableModules; }