/** Validate source code * @param bool $force_update * Force to get new list from database (not a cached one from obj-var) * * @return array */ public function getModules($force_update = false) { global $Database, $Config; // already in obj-var? if (!$force_update and isset($this->modules) and !empty($this->modules)) { return $this->modules; } // get module-ids from database $sql = "SELECT id__module as id__module\n\t\tFROM #__modules\n\t\tORDER BY id__module ASC;"; $result = $Database->doSelect($sql); if ($result === false) { return false; } // get available sources $subfolders = ts_FileHandler::getSubfolders($Config->get('dir_data') . '/source/modules/'); if (!is_array($subfolders)) { return false; } // get module-objects and save them in obj-var $modules_files = array(); foreach ($subfolders as $index => $value) { $modules_files[] = new ts_Module(false, $value); } // add already deleted modules and rearrange $this->modules = array(); foreach ($modules_files as $index => $Value) { $this->modules[$Value->getInfo('name') . '__' . $Value->getInfo('nameid')] = $Value; } foreach ($result as $index => $values) { $Module = new ts_Module($values['id__module']); if (!isset($this->modules[$Module->getInfo('name') . '__' . $Module->getInfo('nameid')])) { $this->modules[$Module->getInfo('name') . '__' . $Module->getInfo('nameid')] = $Module; } } // sort ksort($this->modules); // sort modules by dependencies usort($this->modules, array($this, 'cb_sortByDependencies')); $this->modules = array_reverse($this->modules); return $this->modules; }