/**
  * Support for dynamic ini settings: Prepend dynamic ini cache files on activation
  *
  *
  * @param  string  $siteaccess the current siteaccess to prepend dynamic ini overrides
  * @return void
  * @access private
  * @uses ymcDynamicIniSetting
  * @author ymc-dabe
  */
 private function prependDynamicINI($siteaccess)
 {
     $ini = eZINI::instance();
     eZDebug::writeNotice("Dynamic INI-settings are enabled for siteaccess '{$siteaccess}'", __METHOD__);
     $dynamicIniSettings = ymcDynamicIniSetting::fetchListByDefinedLogic($siteaccess);
     $iniFilesToWrite = array();
     $finalCacheDirs = array();
     foreach ($dynamicIniSettings as $dynamicIniSetting) {
         $iniFile = $dynamicIniSetting->attribute('ini_file');
         $array_key = $dynamicIniSetting->attribute('contentobject_id') . '-' . $iniFile;
         $finalCacheDir = $this->attribute('global_cache_directory') . '/openvolano/dynamic_ini/' . $dynamicIniSetting->attribute('contentobject_id') . '/' . $siteaccess;
         $finalCacheDirs[] = $finalCacheDir;
         if (file_exists($finalCacheDir . '/' . $iniFile)) {
             eZDebug::writeNotice("Cache hit: {$finalCacheDir}/{$iniFile}", __METHOD__);
             continue;
         }
         if (!isset($iniFilesToWrite[$array_key])) {
             $iniFilesToWrite[$array_key] = array('iniInstance' => eZINI::instance($iniFile, $finalCacheDir, null, false, null, true, true), 'ini_dir' => $finalCacheDir, 'ini_file' => $iniFile);
         }
         $iniInstance = $iniFilesToWrite[$array_key]['iniInstance'];
         if ((int) $dynamicIniSetting->attribute('ini_type') !== ymcDynamicIniSetting::TYPE_ARRAY) {
             $iniInstance->setVariable($dynamicIniSetting->attribute('ini_section'), $dynamicIniSetting->attribute('ini_parameter'), $dynamicIniSetting->attribute('ini_value_dynamic'));
         } else {
             if ($iniInstance->hasVariable($dynamicIniSetting->attribute('ini_section'), $dynamicIniSetting->attribute('ini_parameter'))) {
                 $existingValues = $iniInstance->variable($dynamicIniSetting->attribute('ini_section'), $dynamicIniSetting->attribute('ini_parameter'));
             } else {
                 $existingValues = array();
             }
             $newKey = $dynamicIniSetting->attribute('ini_key');
             $newValue = $dynamicIniSetting->attribute('ini_value_dynamic');
             if ($newKey == '' and $newValue == '') {
                 array_unshift($existingValues, null);
             } else {
                 if (is_numeric($newKey)) {
                     $existingValues[] = $newValue;
                 } else {
                     $existingValues[$newKey] = $newValue;
                 }
             }
             $iniInstance->setVariable($dynamicIniSetting->attribute('ini_section'), $dynamicIniSetting->attribute('ini_parameter'), $existingValues);
         }
     }
     if (count($iniFilesToWrite) > 0) {
         eZDebug::writeDebug("Generating dynamic-ini-files for '{$siteaccess}'", __METHOD__);
     }
     foreach ($iniFilesToWrite as $ini_infos) {
         $iniInstance = $ini_infos['iniInstance'];
         $finalCacheDir = $ini_infos['ini_dir'];
         $iniFile = $ini_infos['ini_file'];
         if (!is_writable($finalCacheDir)) {
             if (!eZDir::mkdir($finalCacheDir, 0777, true)) {
                 eZDebug::writeError("Couldn't create cache directory '{$finalCacheDir}', perhaps wrong permissions", __METHOD__);
                 continue;
             }
         }
         $iniInstance->save();
         eZDebug::writeDebug("Created INI '{$iniFile}' at:\n{$finalCacheDir}/{$iniFile}", __METHOD__);
     }
     $finalCacheDirs = array_unique($finalCacheDirs);
     foreach ($finalCacheDirs as $finalCacheDir) {
         eZDebug::writeDebug("Added dynamic INI-settings for siteaccess '{$siteaccess}' using cache-dir:\n{$finalCacheDir}", __METHOD__);
         $ini->prependOverrideDir($finalCacheDir, true);
     }
 }
 /**
  * Returns the content data for the given contentObjectAttribute
  *
  * @param  object $contentObjectAttribute An eZContentObjectAttribute object
  * @return array  
  * @see    eZDataType
  * @access public
  * @author ymc-pabu
  */
 function objectAttributeContent($contentObjectAttribute)
 {
     $contentClassAttribute = $contentObjectAttribute->attribute('contentclass_attribute');
     $versioned_values = json_decode($contentObjectAttribute->attribute('data_text'), true);
     if (!is_array($versioned_values)) {
         $versioned_values = array();
     }
     $data = array('live_data' => ymcDynamicIniSetting::fetchListByObjectAttributeID($contentObjectAttribute->attribute('id')), 'versioned_values' => $versioned_values, 'info' => array('type' => $contentClassAttribute->attribute(self::CLASS_TYPE_FIELD), 'filename' => $contentClassAttribute->attribute(self::CLASS_FILE_FIELD), 'section' => $contentClassAttribute->attribute(self::CLASS_SECTION_FIELD), 'parameter' => $contentClassAttribute->attribute(self::CLASS_PARAMETER_FIELD)));
     //ymc_pr($data);
     return $data;
 }