/**
  * Save action
  */
 function saveAction()
 {
     if ($this->getRequest()->isPost()) {
         try {
             $data = $this->getRequest()->getPost();
             //                Uni_Core_ModuleManager::runSqlUpgrade('News', 'Fox', 'core');
             //                exit;
             Uni_Core_ModuleManager::installModules();
             Uni_Core_ModuleManager::updateModuleStatus($data);
             Uni_Core_Preferences::loadPreferences(TRUE);
             Uni_Core_CacheManager::clearLayoutCache();
             Uni_Core_CacheManager::clearModuleCache();
             Fox::getHelper('core/message')->setInfo('Modules successfully saved.');
         } catch (Exception $e) {
             Fox::getHelper('core/message')->setError($e->getMessage());
         }
     }
     $this->sendRedirect('*/*/');
 }
 /**
  * Update modules status
  * 
  * @param array $modules module data
  */
 public function updateModulesStatus($modules)
 {
     Uni_Core_ModuleManager::updateModuleStatus($modules);
 }
 /**
  * Run installer
  */
 public static function runInstaller()
 {
     $data = Fox::getModel('installer/session')->getConfiguration();
     self::saveSystemConfig($data);
     Uni_Core_ModuleManager::installModules(TRUE);
     $model = Fox::getModel('core/preference');
     $model->setName('web/design/package');
     $model->setValue('core');
     $model->save();
     $model->unsetData();
     $model->setName('web/design/theme');
     $model->setValue('default');
     $model->save();
     $model->unsetData();
     $model->setName('web/unsecure/base_url');
     $model->setValue($data['site_base_url']);
     $model->save();
     $model->unsetData();
     $model->setName('web/secure/base_url');
     $model->setValue($data['site_secure_base_url']);
     $model->save();
     $model->unsetData();
     $model->setName('web/secure/use_in_frontend');
     $model->setValue(isset($data['site_secure_url_in_frontend']) ? $data['site_secure_url_in_frontend'] : 0);
     $model->save();
     $model->unsetData();
     $model->setName('web/secure/use_in_admin');
     $model->setValue(isset($data['site_secure_url_in_admin']) ? $data['site_secure_url_in_admin'] : 0);
     $model->save();
     $model->unsetData();
     $model->setName('admin/url/key');
     $adminPath = preg_replace('/\\s+/', ' ', $data['admin_path']);
     $adminPath = str_replace(' ', '_', $adminPath);
     $model->setValue($adminPath);
     $model->save();
     $model->unsetData();
     $model->setName('core/session/storage_type');
     $model->setValue($data['session_storage']);
     $model->save();
     $model->unsetData();
     $model->setName('general/website/name');
     $model->setValue('Zendfox');
     $model->save();
     $model->unsetData();
     $model->setName('website_email_addresses/general/sender_name');
     $model->setValue('Owner');
     $model->save();
     $model->unsetData();
     $model->setName('website_email_addresses/general/sender_email');
     $model->setValue('*****@*****.**');
     $model->save();
     $model->unsetData();
     $model->setName('website_email_addresses/custom1/sender_name');
     $model->setValue('Custom 1');
     $model->save();
     $model->unsetData();
     $model->setName('website_email_addresses/custom1/sender_email');
     $model->setValue('*****@*****.**');
     $model->save();
     $model->unsetData();
     $model->setName('website_email_addresses/custom2/sender_name');
     $model->setValue('Custom 2');
     $model->save();
     $model->unsetData();
     $model->setName('website_email_addresses/custom2/sender_email');
     $model->setValue('*****@*****.**');
     $model->save();
     $model->unsetData();
     $model->setName('contact/reply/name');
     $model->setValue('Support');
     $model->save();
     $model->unsetData();
     $model->setName('contact/reply/email');
     $model->setValue('*****@*****.**');
     $model->save();
     $model->unsetData();
     $model->setName('contact/receiver/email');
     $model->setValue('*****@*****.**');
     $model->save();
     $model->unsetData();
 }
 /**
  * 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']);
     }
 }