function addLoadedItems($items) { $this->load(); foreach ($items as $modelName => $m_items) { if (!Set::numeric(array_keys(SetMulti::excludeKeys($m_items, array('internal'))))) { $m_items = array($m_items); } foreach ($m_items as $item) { if (!empty($item['id'])) { $model = ClassRegistry::init($modelName); if ($model->Behaviors->attached('Node')) { if (!empty($item['internal']['Node'][0]['id'])) { $nodeId = $item['internal']['Node'][0]['id']; } else { $node = $model->node($model->myNodeRef($item['id']), false, true); $nodeId = $node['Node']['id']; } if (!empty($nodeId)) { if (isset($this->loadedItems[$nodeId])) { unset($this->loadedItems[$nodeId]); //Make sure everything id in DESC Order } $this->loadedItems[$nodeId] = $this->startTime; if (!empty($item['items'])) { $this->addLoadedItems($item['items']); } } } } } } //debug($this->loadedItems); }
function excludeKeys($array, $keys, $recursive = false) { $array = array_diff_key($array, array_flip($keys)); if ($recursive) { foreach ($array as &$val) { if (is_array($val)) { if ($recursive !== true) { $recursive--; } $val = SetMulti::excludeKeys($val, $keys, $recursive); } } } return $array; }
function addItems($items) { //debug($items); if (!empty($items)) { foreach ($items as $modelName => $model) { App::import('Lib', 'SetMulti'); if (!Set::numeric(array_keys(SetMulti::excludeKeys($model, array('internal'))))) { $model = array($model); } if (array_key_exists('internal', $model)) { if (empty($this->items[$modelName]['internal'])) { $this->items[$modelName]['internal'] = array(); } $this->items[$modelName]['internal'] = array_merge($this->items[$modelName]['internal'], $model['internal']); unset($model['internal']); } foreach ($model as $item) { $this->items[$modelName][] = $item; } } $this->controller->Link->addLoadedItems($items); } }
function parseStringOperation($val, $options = array()) { if (is_numeric($val)) { return $val; } $_this =& Operations::getInstance(); $localOpt = array('type', 'error'); $defOpt = array('mode' => 'full', 'error' => false); $opt = array_merge($defOpt, $options); App::import('Lib', 'SetMulti'); foreach ($_this->operators as $op) { $op = Set::merge($_this->opDefOpt, $op, SetMulti::excludeKeys($opt, $localOpt)); if (empty($opt['type']) || in_array($op['type'], (array) $opt['type'])) { $pattern = $_this->getPattern($op); //debug($pattern); if (!empty($pattern)) { if (preg_match($pattern, (string) $val, $res)) { //debug($res); $oper = array('operator' => $op['name']); array_shift($res); foreach ($res as $k => $r) { if (!is_numeric($k)) { $oper[$k] = $r; } } return $oper; } } } } if ($opt['error'] == '(val)') { return $val; } else { return $opt['error']; } }