Пример #1
0
 function setFieldCache(&$model, $name, $opt = null)
 {
     if (is_null($opt)) {
         $opt = $name;
     } else {
         $opt['name'] = $name;
     }
     $reset = false;
     $localOpt = array('dry', 'association', 'usedField');
     App::import('Lib', 'SetMulti');
     if (!empty($opt['association'])) {
         if (!is_array($opt['association']) || SetMulti::isAssoc($opt['association'])) {
             $opt['association'] = array($opt['association']);
         }
         foreach ($opt['association'] as $assoc) {
             $fieldOpt = array_diff_key($opt, array_flip($localOpt));
             $fieldOpt['association'] = $assoc;
             if (isset($fieldOpt['association']) && !is_array($fieldOpt['association'])) {
                 $fieldOpt['association'] = array('name' => $fieldOpt['association']);
             }
             $fieldOpt = Set::merge($this->defFieldOpt, $fieldOpt);
             if (!empty($fieldOpt['name'])) {
                 if (isset($model->{$fieldOpt['association']['type']}[$fieldOpt['association']['name']])) {
                     $fieldOpt['association'] = Set::merge($model->{$fieldOpt['association']['type']}[$fieldOpt['association']['name']], $fieldOpt['association']);
                 }
                 if (empty($fieldOpt['association']['className'])) {
                     $fieldOpt['association']['className'] = $fieldOpt['association']['name'];
                 }
                 if (!empty($fieldOpt['association']['className'])) {
                     $className = $fieldOpt['association']['className'];
                     $fieldOpt['model'] = $model->name;
                     $invalidations = Cache::read($className, 'cacheBehavior');
                     //debug($fieldOpt);
                     if (empty($invalidations[$model->name][$fieldOpt['name']]) || count(array_diff_assoc($invalidations[$model->name][$fieldOpt['name']], $fieldOpt))) {
                         $reset = true;
                         $invalidations[$model->name][$fieldOpt['name']] = $fieldOpt;
                         Cache::write($className, $invalidations, 'cacheBehavior');
                     }
                 }
             }
         }
     }
     if (!empty($opt['usedField'])) {
         $invalidations = Cache::read($model->name, 'cacheBehavior');
         $invalidations['usedField'][$opt['name']] = (array) $opt['usedField'];
         Cache::write($model->name, $invalidations, 'cacheBehavior');
     }
     if (empty($opt['dry'])) {
         if ($reset) {
             $model->updateAll(array($fieldOpt['name'] => null), 1);
         }
         return true;
     } elseif ($reset) {
         return $fieldOpt['name'];
     }
     return false;
 }
Пример #2
0
 function _getNormalizedSubItem($types, $subItems, &$ids, &$parent = null)
 {
     $subItemDef = array('nb' => 1);
     $finalSubItems = array();
     foreach ($types as $type) {
         $n = $type['name'];
         if (isset($subItems[$n])) {
             if (!is_array($subItems[$n]) || SetMulti::isAssoc($subItems[$n])) {
                 $finalSubItems[$n] = array(&$subItems[$n]);
             } else {
                 $finalSubItems[$n] = $subItems[$n];
             }
             foreach ($finalSubItems[$n] as &$subItem) {
                 if (!is_array($subItem)) {
                     $subItem = array('id' => $subItem);
                 }
                 if ($parent) {
                     $subItem['parent'] =& $parent;
                 }
                 $subItem = array_merge($subItemDef, $subItem);
                 unset($subItem);
             }
             $tmp = array_merge($finalSubItems[$n], array());
             foreach ($tmp as &$subItem) {
                 if (!empty($subItems['children'][$subItem['id']])) {
                     $finalSubItems = array_merge($finalSubItems, $this->_getNormalizedSubItem($type['children'], $subItems['children'][$subItem['id']], $ids, $subItem));
                 }
                 unset($subItem);
             }
         }
         $ids = array_merge($ids, SetMulti::extractKeepKey('id', $finalSubItems[$n]));
     }
     return $finalSubItems;
 }
Пример #3
0
 function getFullData($products = null, $opt = array())
 {
     App::import('Lib', 'Shop.SetMulti');
     $single = false;
     $prods = $products;
     if (!is_array($prods) || SetMulti::isAssoc($prods)) {
         $prods = array($prods);
         $single = true;
     }
     if (isset($prods[0]['ShopProduct']['DynamicField']) || isset($prods[0]['DynamicField'])) {
         return $products;
     }
     $prods = $this->getAllRelated($prods, $opt);
     foreach ($prods as &$product) {
         $dynamicField = $this->getDynamicFields($product, $opt);
         $product['DynamicField'] = $dynamicField;
         if ($this->getPromos) {
             $product['ShopPromotion'] = $this->possiblePromo($product);
         }
         if (!empty($product['ShopProduct']['ShopSubproduct'])) {
             $product['ShopSubproduct'] = $product['ShopProduct']['ShopSubproduct'];
             unset($product['ShopProduct']['ShopSubproduct']);
         }
         if (!empty($product['ShopSubproduct'])) {
             $product['ShopSubproduct'] = $this->formatSubproduct($product['ShopSubproduct']);
         }
     }
     if ($single) {
         return $prods[0];
     } else {
         return $prods;
     }
 }
Пример #4
0
 function dataToContainedRelations(&$model, $data = null, $alias = null)
 {
     if (is_null($alias)) {
         $alias = $model->alias;
     }
     if (is_null($data)) {
         $data = $model->data;
     }
     App::import('Lib', 'SetMulti');
     if (is_array($data) && !SetMulti::isAssoc($data)) {
         $res = array();
         foreach ($data as $d) {
             $res[$alias][] = $model->dataToContainedRelations($d, $alias);
         }
         return $res;
     }
     if (isset($data[$alias])) {
         $relation = $data;
         unset($relation[$alias]);
         return array_merge($relation, $data[$alias]);
     }
     return $data;
 }