/** * Check if a module is available * * @param string $moduleId * @param boolean Check the module manager class isAvailable function too. (Used in pro modules to check license for example). * @return boolean */ public function isAvailable($moduleId, $checkModuleAvailabiltiy = true) { if (!$this->_isAllowed($moduleId)) { return false; } $folder = new Fs\Folder(\GO::config()->root_path . 'modules/' . $moduleId); $ucfirst = ucfirst($moduleId); $moduleClassPath = $folder->path() . '/' . $ucfirst . 'Module.php'; if (!file_exists($moduleClassPath)) { // || !\GO::scriptCanBeDecoded($moduleClassPath)){ return false; } $moduleClass = 'GO\\' . $ucfirst . '\\' . $ucfirst . 'Module'; if (!class_exists($moduleClass)) { return false; } if ($checkModuleAvailabiltiy) { $mod = new $moduleClass(); return $mod->isAvailable(); } else { return true; } }
/** * 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; }