/**
  * Function for setting values to deal with persistent_variable either from
  * template or internally on {@link self::$persistentVariable}
  *
  * @internal
  * @param string $key Key to store values on
  * @param string|array $value Value(s) to store
  * @param eZTemplate $tpl Template object to get values from
  * @param bool $append Append or prepend value?
  * @param bool $arrayUnique Make sure array is unique to remove duplicates
  * @param bool $returnArrayDiff Return diff against existing values instead of resulting array
  * @param bool $override Override/Wipe out values or merge?
  * @return array
  */
 public static function setPersistentArray($key, $value, eZTemplate $tpl, $append = true, $arrayUnique = false, $returnArrayDiff = false, $override = false)
 {
     $isPageLayout = false;
     $persistentVariable = array();
     if ($tpl->hasVariable('module_result')) {
         $isPageLayout = true;
         $moduleResult = $tpl->variable('module_result');
     }
     if (isset($moduleResult['content_info']['persistent_variable'])) {
         $persistentVariable = $moduleResult['content_info']['persistent_variable'];
     } else {
         if (!$isPageLayout && $tpl->hasVariable('persistent_variable')) {
             $persistentVariable = $tpl->variable('persistent_variable');
         } else {
             if (self::$persistentVariable !== null) {
                 $persistentVariable = self::$persistentVariable;
             }
         }
     }
     if ($persistentVariable === false || !is_array($persistentVariable)) {
         // Give warning if value is not array as we depend on it
         if (!$isPageLayout && $persistentVariable) {
             eZDebug::writeError('persistent_variable was not an array and where cleared, see ezjscore requriments!', __METHOD__);
         }
         $persistentVariable = array();
     }
     // make a copy in case we need to diff value in the end
     $persistentVariableCopy = $persistentVariable;
     if (!$override) {
         if (isset($persistentVariable[$key]) && is_array($persistentVariable[$key])) {
             if (is_array($value)) {
                 if ($append) {
                     $persistentVariable[$key] = array_merge($persistentVariable[$key], $value);
                 } else {
                     $persistentVariable[$key] = array_merge($value, $persistentVariable[$key]);
                 }
             } else {
                 if ($append) {
                     $persistentVariable[$key][] = $value;
                 } else {
                     $persistentVariable[$key] = array_merge(array($value), $persistentVariable[$key]);
                 }
             }
         } else {
             if (is_array($value)) {
                 $persistentVariable[$key] = $value;
             } else {
                 $persistentVariable[$key] = array($value);
             }
         }
     } else {
         $persistentVariable[$key] = $value;
     }
     if ($arrayUnique && isset($persistentVariable[$key][1])) {
         $persistentVariable[$key] = array_unique($persistentVariable[$key]);
     }
     // set the finnished array in the template
     if ($isPageLayout) {
         if (isset($moduleResult['content_info']['persistent_variable'])) {
             $moduleResult['content_info']['persistent_variable'] = $persistentVariable;
             $tpl->setVariable('module_result', $moduleResult);
         }
     } else {
         $tpl->setVariable('persistent_variable', $persistentVariable);
     }
     // storing the value internally as well in case this is not a view that supports persistent_variable (ezpagedata will look for it)
     self::$persistentVariable = $persistentVariable;
     if ($returnArrayDiff && isset($persistentVariableCopy[$key][0])) {
         return array_diff($persistentVariable[$key], $persistentVariableCopy[$key]);
     }
     return $persistentVariable[$key];
 }
Пример #2
0
 /**
  * @uses ezjscPackerTemplateFunctions::getPersistentVariable()
  *
  * @deprecated
  * @param string $key Optional, return all values if null
  * @return array|string
  */
 static public function getPersistentVariable( $key = null )
 {
     return ezjscPackerTemplateFunctions::getPersistentVariable( $key );
 }