function editForm($prefix, $view)
 {
     $out = '';
     $out .= $view->Form->input('val', array('label' => __('Rebate', true)));
     App::import('Lib', 'Shop.SetMulti');
     $this->ShopPromotion = ClassRegistry::init('Shop.ShopPromotion');
     $operators = $this->ShopPromotion->operators;
     $out .= $view->Form->input('operator', array('options' => SetMulti::extractKeepKey('label', $operators)));
     return $out;
 }
Esempio n. 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;
 }
Esempio n. 3
0
 function getIneritedFields(&$model, $data, $options = array())
 {
     $defOpt = array('fields' => null, 'fetchAssociations' => true);
     $opt = array_merge($defOpt, $options);
     //debug($opt);
     if (!empty($this->settings[$model->alias]['fields']) && is_array($data)) {
         App::import('Lib', 'SetMulti');
         if (isset($data[$model->alias])) {
             $myData =& $data[$model->alias];
         } else {
             $myData =& $data;
         }
         $originalData = $myData;
         $fieldsOpt = $this->_formatFieldsOpt($this->settings[$model->alias]['fields']);
         if (!empty($opt['fields'])) {
             $fieldsOpt = array_intersect_key($fieldsOpt, array_flip($opt['fields']));
         }
         $fieldsOpt = array_intersect_key($fieldsOpt, array_merge(array_filter($myData, 'is_null'), array_filter($myData, 'is_array')));
         if (!empty($fieldsOpt)) {
             $fieldsOpt = SetMulti::group($fieldsOpt, 'alias');
             //debug($fieldsOpt);
             foreach ($fieldsOpt as $alias => $iopt) {
                 $hdata = null;
                 //debug($model->{$alias}->name ."==".$model->name);
                 if (isset($model->{$alias}) && $model->{$alias}->name == $model->name && $model->Behaviors->attached('Tree')) {
                     //tree inerit
                     $d = $myData;
                     if (!isset($d['lft']) || !isset($d['rght'])) {
                         $d = $model->read(null, $myData['id']);
                     }
                     $model->recursive = -1;
                     $tmp = $this->settings[$model->alias]['fetch'];
                     $this->settings[$model->alias]['fetch'] = false;
                     $res = $model->find('all', array('fields' => array_merge(array('id'), array_keys($iopt)), 'conditions' => array('lft' > $d['lft'], 'rght' < $d['rght']), 'order' => 'lft DESC'));
                     //debug($res);
                     $this->settings[$model->alias]['fetch'] = $tmp;
                     $hdata = array();
                     foreach ($res as $item) {
                         $hdata = array_merge($hdata, array_filter($item[$model->alias]));
                     }
                     //debug($hdata);
                 } else {
                     if (isset($data[$alias])) {
                         $hdata = $data[$alias];
                     } elseif (isset($data[$model->alias][$alias])) {
                         $hdata = $data[$model->alias][$alias];
                     }
                     //debug($hdata);
                     if (isset($model->{$alias}) && $model->{$alias}->Behaviors->attached('Inheritor') && !empty($hdata)) {
                         $hdata = $model->{$alias}->getIneritedFields($hdata, array('fields' => array_keys($iopt), 'fetchAssociations' => false));
                     }
                 }
                 foreach ($iopt as $key => $val) {
                     if (!isset($hdata[$key])) {
                         $myData[$key] = null;
                     } elseif (is_array($myData[$key])) {
                         if (!empty($hdata[$key])) {
                             $myData[$key] = SetMulti::merge2($myData[$key], $hdata[$key]);
                         }
                     } else {
                         $myData[$key] = $hdata[$key];
                     }
                 }
                 if ($opt['fetchAssociations']) {
                     if (!empty($model->lastAssociations['belongsTo'])) {
                         $associationFields = SetMulti::extractKeepKey('foreignKey', $model->lastAssociations['belongsTo']);
                         $toFetch = array_intersect($associationFields, array_keys($iopt));
                         foreach ($toFetch as $aalias => $field) {
                             if ($originalData[$field] != $myData[$field]) {
                                 $findOpt = $model->lastAssociations['belongsTo'][$aalias];
                                 if (isset($model->{$aalias})) {
                                     $amodel = $model->{$aalias};
                                 } else {
                                     $amodel = ClassRegistry::init($findOpt['className']);
                                 }
                                 unset($findOpt['className'], $findOpt['foreignKey']);
                                 $findOpt['conditions'][$amodel->alias . '.' . $amodel->primaryKey] = $myData[$field];
                                 //debug($findOpt);
                                 $res = $amodel->find('first', $findOpt);
                                 $amodel->Behaviors->attach('Util');
                                 $res = $amodel->dataToContainedRelations($res);
                                 $data[$aalias] = $res;
                             }
                         }
                     }
                 }
             }
         }
     }
     return $data;
 }