function getTargetHandlers($named = false) { App::import('Lib', 'ClassCollection'); App::import('Lib', 'SetMulti'); $class = ClassCollection::getClass('handler', 'Skills'); $methods = get_class_methods($class); $targetHandlers = SetMulti::pregFilter('/^target\\w*$/', $methods); //debug($targetHandlers); if ($named) { $list = array(); foreach ($targetHandlers as $handler) { $list[$handler] = Inflector::humanize(Inflector::underscore($handler)); } $targetHandlers = $list; } return $targetHandlers; }
function getAllRelated($products = null, $opt = array()) { $defOpt = array('minField' => false); $opt = array_merge($defOpt, $opt); $relatedModels = array(); foreach ($products as $key => $product) { if (empty($product['Related']) && empty($product[$this->alias]['Related'])) { $relatedRef = $this->getRelatedRef($product); $relatedRef['key'] = $key; if (empty($relatedModels[$relatedRef['model']])) { $relatedModel = $this->getRelatedClass($relatedRef); //if(!empty($relatedModel->data[$relatedModel->alias]['id']) && $relatedModel->data[$relatedModel->alias]['id'] == $relatedRef['foreign_id']){ // $products[$key]['Related'] = $relatedModel->data[$relatedModel->alias]; //}else{ if ($relatedModel) { $relatedModels[$relatedRef['model']]['class'] = $relatedModel; $relatedModels[$relatedRef['model']][] = $relatedRef; } //} } else { $relatedModels[$relatedRef['model']][] = $relatedRef; } } } foreach ($relatedModels as $alias => $refs) { $relatedModel = $refs['class']; $tmp = $relatedModel->recursive; unset($refs['class']); App::import('Lib', 'Shop.SetMulti'); $relatedModel->recursive = -1; $ids = Set::extract('/foreign_id', $refs); $findOpt = array('conditions' => array($relatedModel->alias . '.id' => $ids)); if ($opt['minField']) { $fields = $this->dynamicFieldsExtractData($relatedModel, $opt); $fields = array_values(Set::flatten($fields)); $fields = SetMulti::pregFilter('/^Related\\./', $fields); $fields = str_replace('Related.', $relatedModel->alias . '.', $fields); $fields[] = $relatedModel->alias . '.id'; $cpy = $fields; $fields = array(); foreach ($cpy as $field) { if ($relatedModel->hasField(str_replace($relatedModel->alias . '.', '', $field))) { $fields[] = $field; } } //debug($fields); $findOpt['fields'] = $fields; } $manyRelated = $relatedModel->find('all', $findOpt); $relatedModel->recursive = $tmp; $manyRelated = SetMulti::group($manyRelated, $relatedModel->alias . '.id', array('singleArray' => false)); //debug($manyRelated); foreach ($refs as $ref) { if (!empty($manyRelated[$ref['foreign_id']])) { $products[$ref['key']] = (array) $products[$ref['key']]; $products[$ref['key']]['Related'] = $manyRelated[$ref['foreign_id']][$relatedModel->alias]; } } } return $products; }