/**
  * @todo Fix dao problem
  * 
  * @param array $search_param An array of arrays with such a structure
  * <code>
  * array(
  * 		'search dir' => [search dir]
  * 		'suffix' => [suffix]
  * 		'enabled' => [enabled]
  * 		'installed' => [installed]
  * )
  * </code> 
  * @static
  */
 function initModules($search_params, $additionalModules = array())
 {
     foreach ($additionalModules as $k => $v) {
         $additionalModules[$k]->registerHooks($this);
         $this->m_modules[] =& $additionalModules[$k];
     }
     foreach ($search_params as $param) {
         if ($param['enabled'] || $param['installed']) {
             $modules = array();
             $dao =& new xModuleDAO();
             $dtos = $dao->find(NULL, $param['enabled'], $param['installed']);
             foreach ($dtos as $dto) {
                 $modules[] = $dto->m_path;
             }
         } else {
             $modules = xModuleManager::findAllModules($param['search dir'], $param['suffix']);
         }
         foreach ($modules as $module) {
             if (strpos($module, $param['search dir']) !== 0) {
                 continue;
             }
             if (!is_file($module)) {
                 continue;
             }
             $name = basename($module, '.' . $param['suffix'] . '.php');
             include_once $module;
             if (function_exists('xm_load_module_' . $name)) {
                 $mod = call_user_func('xm_load_module_' . $name);
                 if (!is_array($mod)) {
                     $mod = array($mod);
                 }
                 foreach ($mod as $m) {
                     if (xanth_instanceof($m, 'xModule')) {
                         $m->registerHooks($this);
                         $this->m_modules[] =& $m;
                     }
                 }
             }
         }
         //foreach modules
     }
     //foreach search params
     $this->sortHooks();
 }
 /**
  *
  */
 function install()
 {
     ob_start();
     //select DB
     if (xConf::get('db_type', 'mysql') == 'mysql') {
         $db = new xDBMysql();
         $db->connect(xConf::get('db_host', ''), xConf::get('db_user', ''), xConf::get('db_pass', ''), xConf::get('db_port', ''));
         xDB::setDB($db);
         $name = xConf::get('db_name', '');
         $db->query("DROP DATABASE {$name}");
         $db->query("CREATE DATABASE {$name}");
         $db->selectDB($name);
     } else {
         exit('Unknown database type');
     }
     //error handler
     set_error_handler('xanth_php_error_handler');
     $comp = new xModuleManager();
     $comp->initModules('engine', 'comp', false, false, array(new xFrameworkComponent()));
     $comp->invokeAll('xm_install', array($name = xConf::get('db_name', '')));
     $comp = new xModuleManager();
     $comp->initModules('extensions', 'ext', true, true);
     $comp->invokeAll('xm_install', array($name = xConf::get('db_name', '')));
     //print log
     echo xLogEntry::renderFromScreen();
     echo "Xanthin Successfully installed";
     ob_end_flush();
 }