/**
  * Load module settings data
  * 
  * @param boolean $forceCreate
  * @return array 
  */
 public static function loadPreferences($forceCreate = FALSE)
 {
     if (!$forceCreate && !empty(self::$preferences)) {
         self::$preferences;
     }
     $ds = DIRECTORY_SEPARATOR;
     $preferenceFilePath = CACHE_DIR . $ds . Fox_Core_Model_Cache::CACHE_CODE_PREFERENCE;
     $fileName = 'preference.xml';
     self::$preferences = array();
     $xDom = new Uni_Data_XDOMDocument();
     $cacheSettings = Uni_Core_CacheManager::loadCacheSettings();
     $isCacheEnabled = isset($cacheSettings[Fox_Core_Model_Cache::CACHE_CODE_PREFERENCE]) ? $cacheSettings[Fox_Core_Model_Cache::CACHE_CODE_PREFERENCE] : FALSE;
     if ($forceCreate || !$isCacheEnabled || !file_exists($preferenceFilePath . $ds . $fileName)) {
         if (!file_exists($preferenceFilePath)) {
             if (!@mkdir($preferenceFilePath, 0777, TRUE)) {
                 throw new Exception('"' . $preferenceFilePath . '" not found');
             }
         }
         $xDom->preserveWhiteSpace = false;
         $xDom->formatOutput = true;
         $preferenceModel = Fox::getModel('core/preference');
         $collection = $preferenceModel->getCollection();
         $root = $xDom->createElement('preferences');
         foreach ($collection as $preference) {
             self::$preferences[$preference['name']] = $preference['value'];
             $cData = $xDom->createCDATASection('');
             $cData->appendData($preference['value']);
             $entry = $xDom->createElement('entry');
             $entry->setAttribute('key', $preference['name']);
             $root->appendChild($entry);
             $entry->appendChild($cData);
         }
         $xDom->appendChild($root);
         $doc = $xDom->save($preferenceFilePath . $ds . $fileName);
         @chmod($preferenceFilePath, 0777);
     } else {
         $xDom->load($preferenceFilePath . $ds . $fileName);
         if ($xDom->documentElement->hasChildNodes()) {
             $nodeList = $xDom->documentElement->childNodes;
             foreach ($nodeList as $n) {
                 if ($n->nodeType == XML_ELEMENT_NODE && ($key = $n->getAttribute('key'))) {
                     self::$preferences[$key] = $n->nodeValue;
                 }
             }
         }
     }
     unset($xDom);
     return self::$preferences;
 }
 /**
  * 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('*/*/');
 }
 /**
  * Bulk status update action
  */
 public function groupStatusAction()
 {
     try {
         $model = Fox::getModel('core/cache');
         $codes = $this->getGroupActionIds($model);
         $totalIds = count($codes);
         $updateType = '';
         $dependentParams = $this->getRequest()->getParam('dependents', array());
         if (isset($dependentParams['status'])) {
             if ($dependentParams['status'] == Fox_Core_Model_Cache::STATUS_CLEAR) {
                 $updateType = 'cleared';
                 if (in_array(Fox_Core_Model_Cache::CACHE_CODE_PREFERENCE, $codes)) {
                     Uni_Core_Preferences::loadPreferences(TRUE);
                     Fox::initializePreferences();
                 }
                 if (in_array(Fox_Core_Model_Cache::CACHE_CODE_LAYOUT, $codes)) {
                     Uni_Core_CacheManager::clearLayoutCache();
                 }
             } else {
                 if ($dependentParams['status'] == Fox_Core_Model_Cache::STATUS_ENABLED) {
                     $updateType = 'enabled';
                 } else {
                     if ($dependentParams['status'] == Fox_Core_Model_Cache::STATUS_DISABLED) {
                         $updateType = 'disabled';
                     }
                 }
                 $cacheCodes = '\'' . implode('\',\'', $codes) . '\'';
                 $model->update(array('status' => $dependentParams['status']), 'cache_code IN (' . $cacheCodes . ')');
             }
             Uni_Core_CacheManager::createCacheSettings();
             Fox::getHelper('core/message')->setInfo('Total ' . $totalIds . ' cache(s) successfully ' . $updateType . '.');
         }
     } catch (Exception $e) {
         Fox::getHelper('core/message')->setError($e->getMessage());
     }
     echo Zend_Json_Encoder::encode(array('redirect' => Fox::getUrl('*/*/')));
 }
 /**
  * Clear cache
  */
 protected function clearCache()
 {
     Uni_Core_Preferences::loadPreferences(TRUE);
     Fox::initializePreferences();
     Uni_Core_CacheManager::clearLayoutCache();
 }
 /**
  * Loads application settings
  */
 public static function initializePreferences()
 {
     if (Uni_Core_Installer::isInstalled()) {
         self::$preferences = Uni_Core_Preferences::loadPreferences();
     }
 }
 /**
  * Save action
  */
 public function saveAction()
 {
     if ($this->getRequest()->isPost()) {
         $data = $this->getRequest()->getPost();
         $preferenceModel = Fox::getModel('core/preference');
         $preferenceModel->getAdapter()->beginTransaction();
         try {
             if (!empty($_FILES)) {
                 $path = Fox::getUploadDirectoryPath() . DIRECTORY_SEPARATOR . Fox_Core_Model_Preference::CORE_UPLOAD_FOLDER;
                 if (!file_exists($path)) {
                     if (!@mkdir($path, 0777, TRUE)) {
                         throw new Exception('uploads directory was not found.');
                     }
                     @chmod($path, 0777);
                 }
                 foreach ($_FILES as $mainKey => $value) {
                     if (is_array($value) && isset($value['name']) || isset($value['tmp_name'])) {
                         $i = 0;
                         foreach ($value as $section => $field) {
                             foreach ($field as $key => $fieldValue) {
                                 if ($section == 'name') {
                                     foreach ($fieldValue as $fieldName => $fileField) {
                                         $fieldKey = $mainKey . '/' . $key . '/' . $fieldName;
                                         $preferenceModel->load($fieldKey, 'name');
                                         if (isset($_FILES[$mainKey]) && isset($_FILES[$mainKey]['name']) && isset($_FILES[$mainKey]['name'][$key]) && isset($_FILES[$mainKey]['name'][$key][$fieldName])) {
                                             $fileName = $_FILES[$mainKey]['name'][$key][$fieldName];
                                             if (($pos = strrpos($fileName, '.')) > -1) {
                                                 if (file_exists($path . DIRECTORY_SEPARATOR . $preferenceModel->getValue())) {
                                                     @unlink($path . DIRECTORY_SEPARATOR . $preferenceModel->getValue());
                                                 }
                                                 $ext = substr($fileName, $pos + 1);
                                                 $fileName = 'FILE-' . time() . $i++ . '.' . $ext;
                                                 $filePath = $path . DIRECTORY_SEPARATOR . $fileName;
                                                 move_uploaded_file($_FILES[$mainKey]['tmp_name'][$key][$fieldName], $filePath);
                                                 @chmod($filePath, 0777);
                                                 $preferenceModel->setName($fieldKey);
                                                 $preferenceModel->setValue($fileName);
                                                 $preferenceModel->save();
                                                 $preferenceModel->unsetData();
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
             foreach ($data as $mainKey => $value) {
                 if (is_array($value)) {
                     foreach ($value as $section => $field) {
                         foreach ($field as $key => $fieldValue) {
                             $fieldKey = $mainKey . '/' . $section . '/' . $key;
                             $preferenceModel->load($fieldKey, 'name');
                             $preferenceModel->setName($fieldKey);
                             if (is_array($fieldValue)) {
                                 $val = implode(',', $fieldValue);
                             } else {
                                 $val = $fieldValue;
                             }
                             $preferenceModel->setValue($val);
                             $preferenceModel->save();
                             $preferenceModel->unsetData();
                         }
                     }
                 }
             }
             $preferenceModel->getAdapter()->commit();
             Uni_Core_Preferences::loadPreferences(TRUE);
             Fox::initializePreferences();
             Fox::getHelper('core/message')->setInfo('Data was successfully saved.');
         } catch (Exception $e) {
             Fox::getModel('core/session')->setFormData($data);
             Fox::getHelper('core/message')->setError($e->getMessage());
             $preferenceModel->getAdapter()->rollback();
             $this->sendRedirect('*/*/edit', array('item' => $mainKey));
         }
     }
     if (isset($mainKey)) {
         $this->sendRedirect('*/*/edit', array('item' => $mainKey));
     } else {
         $this->sendRedirect('*/*/');
     }
 }