function afterSave($created) { if (!empty($this->planningUpdate)) { if ($created) { App::import('Lib', 'SetMulti'); //$this->log(var_export($this->planningUpdate, true),'debug'); $this->planningUpdate = SetMulti::replaceTree('%pathId%', $this->id, $this->planningUpdate); //$this->log(var_export($this->planningUpdate, true),'debug'); ///// Binding Listening ///// /*if(empty($this->Event)){ $this->Event = ClassRegistry::init('Event'); } $node_id = $this->Node->getNodeId($this->myNodeRef()); $data = array( 'aro_id' => null, 'aco_id' => $node_id, 'handler' => 'path', 'function' => 'bindListening', 'event_type_id' => 15, 'owner_id' => $node_id, 'phase' => 2, 'context' => 'path'.$this->id.'BindingListening', 'active' => 1, ); //debug($data); $this->Event->save($data);*/ } $this->Character->savePlanningChanges($this->planningUpdate); } unset($this->planningUpdate); }
function replaceTree($search = "", $replace = "", $array = false, $keys_too = false) { if (!is_array($array)) { // Regular replace if (!is_null($array)) { return str_replace($search, $replace, $array); } else { return $array; } } $newArr = array(); foreach ($array as $k => $v) { // Replace keys as well? $add_key = $k; if ($keys_too) { $add_key = str_replace($search, $replace, $k); } // Recurse $newArr[$add_key] = SetMulti::replaceTree($search, $replace, $v, $keys_too); } return $newArr; }
function savePlanningChanges(&$model, $operations) { $default = array('save' => null, 'delete' => null, 'linksModif' => true); $opt = array_merge($default, (array) $operations); //////// get links modif //////// if (is_array($opt['linksModif'])) { $linksModif = $opt['linksModif']; } elseif ($opt['linksModif']) { $linksModif = $this->buildPlanifiedFollowingLinks($model, $opt['save'], $opt['delete'], array("dry" => true)); if ($linksModif === false) { return false; } } //////// save modif and added //////// if (!empty($opt['save'])) { foreach ($opt['save'] as &$plan) { $model->Planning->create(); if (!$model->Planning->save($plan)) { return false; } else { if (isset($plan['Planning'])) { $update =& $plan['Planning']; } else { $update =& $plan; } $update['id'] = $model->Planning->id; } } } //////// delete //////// if (!empty($opt['delete'])) { $model->Planning->Behaviors->attach('Util'); $deleteIds = $model->Planning->extractIds($opt['delete']); $model->Planning->deleteAll(array('Planning.id' => $deleteIds)); } //////// apply links modif //////// if (!empty($linksModif['save'])) { foreach ($linksModif['save'] as $link) { if (isset($link['linkedToSave'])) { App::import('Lib', 'SetMulti'); $link = SetMulti::replaceTree('%planId%', $opt['save'][$link['linkedToSave']]['id'], $link); } $model->NodeLink->create(); if (!$model->NodeLink->save($link)) { return false; } } } if (!empty($linksModif['delete'])) { $model->NodeLink->Behaviors->attach('Util'); $deleteIds = $model->NodeLink->extractIds($linksModif['delete']); $model->NodeLink->deleteAll(array('NodeLink.id' => $deleteIds)); } return true; }
function alterEmailQuery($opt) { $Model = $this->EmailModel; $modelName = $Model->alias; if (!empty($opt)) { $NewsletterEmail = ClassRegistry::init('Newsletter.NewsletterEmail'); App::import('Lib', 'Newsletter.SetMulti'); $replace = array($NewsletterEmail->alias . '.email' => $this->realField('email'), $NewsletterEmail->alias => $modelName); $opt = SetMulti::replaceTree(array_keys($replace), array_values($replace), $opt); } $conditions = array(); if (!empty($opt['active']) || !isset($opt['active']) && !$this->options['showInnactive']) { if ($opt['mode'] != 'count' && $this->options['checkUnsubscribe']) { $NewsletterEmail = ClassRegistry::init('Newsletter.NewsletterEmail'); $opt['joins'][] = array('alias' => $NewsletterEmail->alias, 'table' => $NewsletterEmail->useTable, 'type' => 'LEFT', 'conditions' => array($this->realField('email') . ' = ' . $NewsletterEmail->alias . '.email')); $conditions[] = array('or' => array($NewsletterEmail->alias . '.active' => 1, $NewsletterEmail->alias . '.id IS NULL')); } if (!empty($this->options['fields']['active']) && $Model->hasField($this->options['fields']['active'])) { $conditions[$this->realField('active')] = 1; } } $conditions['NOT'][$this->realField('email')] = ""; $conditions[] = $this->realField('email') . ' IS NOT NULL'; if (!empty($this->options['conditions'])) { if (!array($this->options['conditions'])) { $this->options['conditions'] = array($this->options['conditions']); } $conditions = set::merge($conditions, $this->options['conditions']); } $opt['conditions'][] = $conditions; if ((empty($opt['mode']) || $opt['mode'] != 'count') && empty($opt['fields'])) { $opt['fields'] = $this->emailFields(); } if (!empty($this->options['findOptions']) && is_array($this->options['findOptions'])) { $opt = set::merge($opt, $this->options['findOptions']); } return $opt; }
function tabledEmailGetFindOptions($tableSendlist, $active = true, $addfindOptions = null) { $tableSendlist = $this->getTableSendlistID($tableSendlist, true); if (!empty($tableSendlist)) { $Model = $tableSendlist['modelClass']; $modelName = $Model->alias; $conditions = array(); if ($active && !is_null($tableSendlist['activeField']) && $Model->hasField($tableSendlist['activeField'])) { $conditions[$modelName . '.' . $tableSendlist['activeField']] = 1; } $conditions['NOT'][$modelName . '.' . $tableSendlist['emailField']] = ""; $conditions[] = $modelName . '.' . $tableSendlist['emailField'] . ' IS NOT NULL'; if (!empty($tableSendlist['conditions'])) { if (!array($tableSendlist['conditions'])) { $tableSendlist['conditions'] = array($tableSendlist['conditions']); } $conditions = set::merge($conditions, $tableSendlist['conditions']); } $findOptions = array('conditions' => $conditions); $findOptions['model'] = $Model; $findOptions['fields'] = $this->tabledEmailGetFindFields($tableSendlist); if (!empty($tableSendlist['findOptions']) && is_array($tableSendlist['findOptions'])) { $findOptions = set::merge($findOptions, $tableSendlist['findOptions']); } if (!empty($addfindOptions)) { $NewsletterEmail = ClassRegistry::init('Newsletter.NewsletterEmail'); App::import('Lib', 'Newsletter.SetMulti'); $replace = array($NewsletterEmail->alias . '.email' => $modelName . '.' . $tableSendlist['emailField'], $NewsletterEmail->alias => $modelName); $addfindOptions = SetMulti::replaceTree(array_keys($replace), array_values($replace), $addfindOptions); $findOptions = set::merge((array) $addfindOptions, $findOptions); } return $findOptions; } return null; }