/** * This method will lookup the publisher, narrator and author based on the name * * If they don't exist the record will be created. The result will be always * merged into $this->data if lookup return true. * * @param Model * @param string * @param string * @return boolean True on success */ public function lookup(Model $Model, $type = null, $name = null) { extract($this->settings[$Model->alias]); $type = strtolower($type); $modelClass = Inflector::classify($type); if (!in_array($modelClass, $types) || empty($name)) { return false; } $result = $Model->findExistingRecord($modelClass, $name); if (empty($result)) { $fieldName = $Model->{$modelClass}->displayField; $data = array($fieldName => $name); // if (isset($Model->data[$modelClass])) { // if (isset($Model->data[$modelClass][$fieldName]) && $Model->data[$modelClass][$fieldName] != $name) { // unset($Model->data[$modelClass]['id']); // } if (isset($Model->data[$modelClass])) { $data = Set::merge($Model->data[$modelClass], $data); } $result = $Model->saveLookupRecord($modelClass, $data); $Model->data[$modelClass]['id'] = $Model->{$modelClass}->id; $Model->data[$modelClass]['name'] = $name; $Model->data[$Model->alias][$type . '_id'] = $Model->{$modelClass}->id; } else { $Model->data[$modelClass] = $result[$modelClass]; $Model->data[$Model->alias][$type . '_id'] = $result[$modelClass]['id']; } return true; }