modelScope = false; } elseif (implode('.', $view->entity()) == $entity) { return; } if ($entity === null) { $view->model = null; $view->association = null; $view->modelId = null; $view->modelScope = false; return; } $model = $view->model; $sameScope = $hasField = false; $parts = array_values(Set::filter(explode('.', $entity), true)); if (empty($parts)) { return; } if (count($parts) === 1 || is_numeric($parts[0])) { $sameScope = true; } else { if (ClassRegistry::isKeySet($parts[0])) { $model = $parts[0]; } } if (ClassRegistry::isKeySet($model)) { $ModelObj =& ClassRegistry::getObject($model); for ($i = 0; $i < count($parts); $i++) { if ($ModelObj->hasField($parts[$i]) || array_key_exists($parts[$i], $ModelObj->validate)) { $hasField = $i; if ($hasField === 0 || ($hasField === 1 && is_numeric($parts[0]))) { $sameScope = true; } break; } } if ($sameScope === true && in_array($parts[0], array_keys($ModelObj->hasAndBelongsToMany))) { $sameScope = false; } } if (!$view->association && $parts[0] == $view->field && $view->field != $view->model) { array_unshift($parts, $model); $hasField = true; } $view->field = $view->modelId = $view->fieldSuffix = $view->association = $view->field2 = null; switch (count($parts)) { case 1: if ($view->modelScope === false) { $view->model = $parts[0]; } else { $view->field = $parts[0]; if ($sameScope === false) { $view->association = $parts[0]; } } break; case 2: if ($view->modelScope === false) { list($view->model, $view->field) = $parts; } elseif ($sameScope === true && $hasField === 0) { list($view->field, $view->fieldSuffix) = $parts; } elseif ($sameScope === true && $hasField === 1) { list($view->modelId, $view->field) = $parts; } else { list($view->association, $view->field) = $parts; } break; case 3: if ($sameScope === true && $hasField === 1) { list($view->modelId, $view->field, $view->fieldSuffix) = $parts; } elseif ($hasField === 2) { list($view->association, $view->modelId, $view->field) = $parts; } else { list($view->association, $view->field, $view->fieldSuffix) = $parts; } break; case 4: if ($parts[0] === $view->model) { list($view->model, $view->modelId, $view->field, $view->fieldSuffix) = $parts; } else { list($view->association, $view->modelId, $view->field, $view->fieldSuffix) = $parts; } break; case 5: if ($parts[0] === $view->model) { list($view->model, $view->modelId, $view->field, $view->fieldSuffix, $view->field2) = $parts; } else { list($view->association, $view->modelId, $view->field, $view->fieldSuffix, $view->field2) = $parts; } break; } if (!isset($view->model) || empty($view->model)) { $view->model = $view->association; $view->association = null; } elseif ($view->model === $view->association) { $view->association = null; } if ($setScope) { $view->modelScope = true; } } //4個目の配列の値を取得する function fieldSuffix() { $view =& ClassRegistry::getObject('view'); return $view->fieldSuffix; } //5個目の配列の値を取得する function field2() { $view =& ClassRegistry::getObject('view'); return $view->field2; } function domId($options = null, $id = 'id') { $view =& ClassRegistry::getObject('view'); if (is_array($options) && array_key_exists($id, $options) && $options[$id] === null) { unset($options[$id]); return $options; } elseif (!is_array($options) && $options !== null) { $this->setEntity($options); return $this->domId(); } $dom = $this->model() . $this->modelID() . Inflector::camelize($view->field) . Inflector::camelize($view->fieldSuffix) . Inflector::camelize($view->field2); if (is_array($options) && !array_key_exists($id, $options)) { $options[$id] = $dom; } elseif ($options === null) { return $dom; } return $options; } function value($options = array(), $field = null, $key = 'value') { if ($options === null) { $options = array(); } elseif (is_string($options)) { $field = $options; $options = 0; } if (!empty($field)) { $this->setEntity($field); } if (is_array($options) && isset($options[$key])) { return $options; } $result = null; $modelName = $this->model(); $fieldName = $this->field(); $modelID = $this->modelID(); $fieldSuffix = $this->fieldSuffix(); $field2 = $this->field2(); if (is_null($fieldName)) { $fieldName = $modelName; $modelName = null; } if (isset($this->data[$fieldName]) && $modelName === null) { $result = $this->data[$fieldName]; } elseif (isset($this->data[$modelName][$fieldName])) { $result = $this->data[$modelName][$fieldName]; } elseif (isset($this->data[$fieldName]) && is_array($this->data[$fieldName])) { if (ClassRegistry::isKeySet($fieldName)) { $model =& ClassRegistry::getObject($fieldName); $result = $this->__selectedArray($this->data[$fieldName], $model->primaryKey); } } elseif (isset($this->data[$modelName][$modelID][$fieldName])) { $result = $this->data[$modelName][$modelID][$fieldName]; } if (is_array($result)) { $view =& ClassRegistry::getObject('view'); //5個目の配列が入っていたら処理を変える if (empty($field2)){ if (array_key_exists($view->fieldSuffix, $result)) { $result = $result[$view->fieldSuffix]; } }else{ if (array_key_exists($field2, $result[$fieldSuffix])) { $result = $result[$fieldSuffix][$field2]; } } } if (is_array($options)) { if (empty($result) && isset($options['default'])) { $result = $options['default']; } unset($options['default']); } if (is_array($options)) { $options[$key] = $result; return $options; } else { return $result; } } } ?>