/**
  * Install modules
  * 
  * @param boolean $isInstaller 
  */
 public static function installModules($isInstaller = FALSE)
 {
     self::$sqlSetup = new Uni_Core_Setup_Sql();
     self::$installedModules = array();
     self::$activeModules = self::getActiveModules();
     if (!$isInstaller) {
         $moduleModel = Fox::getModel('core/module');
         $collection = $moduleModel->getInstalledModules();
         foreach ($collection as $module) {
             self::$installedModules[] = $module['name'];
         }
     }
     $modulesArr = array_diff(array_keys(self::$activeModules), self::$installedModules);
     foreach ($modulesArr as $mdl) {
         self::$initialModules[$mdl] = $mdl;
     }
     while (count(self::$initialModules) > 0) {
         foreach (self::$initialModules as $moduleEle) {
             break;
         }
         $depQueue = array($moduleEle);
         while (count($depQueue) > 0) {
             $dependents = self::getDependents($depQueue[count($depQueue) - 1]);
             $ready = FALSE;
             if (empty($dependents)) {
                 $ready = TRUE;
             } else {
                 $depUninstCount = 0;
                 foreach ($dependents as $dependent) {
                     if (!self::isInstalled($dependent)) {
                         $depUninstCount++;
                         if (in_array($dependent, $depQueue)) {
                             throw new Exception('Circular module dependency detected in "' . $dependent . '"');
                         } else {
                             $depQueue[] = $dependent;
                             break;
                         }
                     }
                 }
                 if ($depUninstCount == 0) {
                     $ready = TRUE;
                 }
             }
             if ($ready) {
                 $cModule = array_pop($depQueue);
                 self::installModule($cModule);
             }
         }
     }
     foreach (self::$activeModules as $moduleName => $moduleArr) {
         self::runSqlUpgrade($moduleName, $moduleArr['namespace'], $moduleArr['package']);
     }
 }