Index: branches/RC/core/units/modules/modules_event_handler.php =================================================================== diff -u -r8929 -r10832 --- branches/RC/core/units/modules/modules_event_handler.php (.../modules_event_handler.php) (revision 8929) +++ branches/RC/core/units/modules/modules_event_handler.php (.../modules_event_handler.php) (revision 10832) @@ -77,6 +77,81 @@ $event->SetRedirectParam('RefreshTree', 1); } + /** + * Occures after list is queried + * + * @param kEvent $event + */ + function OnAfterListQuery(&$event) + { + parent::OnAfterListQuery($event); + + $new_modules = $this->_getNewModules(); + if (!$new_modules) { + return ; + } + + require_once FULL_PATH . '/core/install/install_toolkit.php'; + + $toolkit = new kInstallToolkit(); + + $object =& $event->getObject(); + /* @var $object kDBList */ + + foreach ($new_modules as $module) { + $module_record = Array ( + 'Name' => $toolkit->getModuleName($module), + 'Loaded' => 0, + 'Version' => $toolkit->GetMaxModuleVersion($module), + ); + + $object->addRecord($module_record); + } + } + + /** + * Returns list of modules, that are not installed, but available in file system + * + * @return Array + */ + function _getNewModules() + { + $modules_helper =& $this->Application->recallObject('ModulesHelper'); + /* @var $modules_helper kModulesHelper */ + + $modules = Array (); + if ($dir = @opendir(MODULES_PATH)) { + while (($file = readdir($dir)) !== false) { + if ($file != '.' && $file != '..') { + $module_folder = MODULES_PATH . '/' . $file; + if (is_dir($module_folder) && $this->_isModule($module_folder)) { + // this is module -> check if it's installed already + if (!$modules_helper->moduleInstalled($file)) { + $install_order = trim( file_get_contents($module_folder . '/install/install_order.txt') ); + $modules[$install_order] = $file; + } + } + } + } + + closedir($dir); + } + + // allows to control module install order + ksort($modules, SORT_NUMERIC); + return $modules; + } + + /** + * Checks, that given folder is module root folder + * + * @param string $folder + * @return bool + */ + function _isModule($folder) + { + return file_exists($folder . '/install.php') && file_exists($folder . '/install/install_schema.sql'); + } } ?> \ No newline at end of file