/** * Returns an array of all module classes as string found in the modules folder. * * This function does not check the module isAvailable function. So pro modules * will be returned even if they can't be decoded. Check the availability manually * if needed. * * @return array Module class names eg. \GO\Calendar\Module */ public function getAvailableModules($returnInstalled = false) { $folder = new Fs\Folder(\GO::config()->root_path . 'modules'); $folders = $folder->ls(); $modules = array(); foreach ($folders as $folder) { if ($folder->isFolder()) { $ucfirst = ucfirst($folder->name()); // $moduleClass = $folder->path().'/'.$ucfirst.'Module.php'; if ($this->isAvailable($folder->name(), false) && ($returnInstalled || !Model\Module::model()->findByPk($folder->name(), false, true))) { $modules[] = 'GO\\' . $ucfirst . '\\' . $ucfirst . 'Module'; } } } return $modules; }
/** * Find all classes in a folder. * * @param string $subfolder * @return \ReflectionClass array */ public function findClasses($subfolder) { $classes = array(); $folder = new Fs\Folder($this->path() . $subfolder); if ($folder->exists()) { $items = $folder->ls(); foreach ($items as $item) { if ($item instanceof Fs\File) { $subParts = explode('/', $subfolder); $subParts = array_map("ucfirst", $subParts); $className = 'GO\\' . ucfirst($this->id()) . '\\' . implode('\\', $subParts) . '\\' . $item->nameWithoutExtension(); if (class_exists($className)) { $reflectionClass = new \ReflectionClass($className); if (!$reflectionClass->isAbstract()) { $classes[] = $reflectionClass; } } } } } return $classes; }
public function getAllLanguage() { $folder = new Fs\Folder(\GO::config()->root_path . 'language'); $items = $folder->ls(); foreach ($items as $folder) { if ($folder instanceof Fs\Folder) { $this->_loadSection('base', $folder->name()); } } //always load users lang for settings panels $this->_loadSection('users'); $modules = \GO::modules()->getAllModules(); while ($module = array_shift($modules)) { $this->_loadSection($module->id); } return $this->_lang; }