mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 03:18:26 +00:00
Making Helper::viewEntity accept any number of levels
This commit is contained in:
parent
31f0cdc214
commit
2941e89da3
5 changed files with 77 additions and 7 deletions
0
app/tmp/cache/models/empty
vendored
0
app/tmp/cache/models/empty
vendored
0
app/tmp/cache/persistent/empty
vendored
0
app/tmp/cache/persistent/empty
vendored
0
app/tmp/cache/views/empty
vendored
0
app/tmp/cache/views/empty
vendored
|
@ -365,7 +365,7 @@ class Helper extends Overloadable {
|
||||||
} elseif (join('.', $view->entity()) == $entity) {
|
} elseif (join('.', $view->entity()) == $entity) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($entity === null) {
|
if ($entity === null) {
|
||||||
$view->model = null;
|
$view->model = null;
|
||||||
$view->association = null;
|
$view->association = null;
|
||||||
|
@ -381,18 +381,31 @@ class Helper extends Overloadable {
|
||||||
if (empty($parts)) {
|
if (empty($parts)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count($parts) === 1 || is_numeric($parts[0])) {
|
$count = count($parts);
|
||||||
|
if ($count === 1) {
|
||||||
$sameScope = true;
|
$sameScope = true;
|
||||||
} else {
|
} else {
|
||||||
if (ClassRegistry::isKeySet($parts[0])) {
|
if (is_numeric($parts[0])) {
|
||||||
$model = $parts[0];
|
$sameScope = true;
|
||||||
|
}
|
||||||
|
$reverse = array_reverse($parts);
|
||||||
|
$field = array_shift($reverse);
|
||||||
|
while(!empty($reverse)) {
|
||||||
|
$subject = array_shift($reverse);
|
||||||
|
if (is_numeric($subject)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (ClassRegistry::isKeySet($subject)) {
|
||||||
|
$model = $subject;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ClassRegistry::isKeySet($model)) {
|
if (ClassRegistry::isKeySet($model)) {
|
||||||
$ModelObj =& ClassRegistry::getObject($model);
|
$ModelObj =& ClassRegistry::getObject($model);
|
||||||
for ($i = 0; $i < count($parts); $i++) {
|
for ($i = 0; $i < $count; $i++) {
|
||||||
if ($ModelObj->hasField($parts[$i]) || array_key_exists($parts[$i], $ModelObj->validate)) {
|
if ($ModelObj->hasField($parts[$i]) || array_key_exists($parts[$i], $ModelObj->validate)) {
|
||||||
$hasField = $i;
|
$hasField = $i;
|
||||||
if ($hasField === 0 || ($hasField === 1 && is_numeric($parts[0]))) {
|
if ($hasField === 0 || ($hasField === 1 && is_numeric($parts[0]))) {
|
||||||
|
@ -451,6 +464,23 @@ class Helper extends Overloadable {
|
||||||
list($view->association, $view->modelId, $view->field, $view->fieldSuffix) = $parts;
|
list($view->association, $view->modelId, $view->field, $view->fieldSuffix) = $parts;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
$reverse = array_reverse($parts);
|
||||||
|
|
||||||
|
if ($hasField) {
|
||||||
|
$view->field = $field;
|
||||||
|
if (!is_numeric($reverse[1]) && $reverse[1] != $model) {
|
||||||
|
$view->field = $reverse[1];
|
||||||
|
$view->fieldSuffix = $field;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (is_numeric($parts[0])) {
|
||||||
|
$view->modelId = $parts[0];
|
||||||
|
} elseif ($view->model == $parts[0] && is_numeric($parts[1])) {
|
||||||
|
$view->modelId = $parts[1];
|
||||||
|
}
|
||||||
|
$view->association = $model;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isset($view->model) || empty($view->model)) {
|
if (!isset($view->model) || empty($view->model)) {
|
||||||
|
|
|
@ -592,5 +592,45 @@ class HelperTest extends CakeTestCase {
|
||||||
$result = $this->Helper->clean('<script>alert(document.cookie)</script>');
|
$result = $this->Helper->clean('<script>alert(document.cookie)</script>');
|
||||||
$this->assertEqual($result, '&lt;script&gt;alert(document.cookie)&lt;/script&gt;');
|
$this->assertEqual($result, '&lt;script&gt;alert(document.cookie)&lt;/script&gt;');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* testMultiDimensionalField method
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function testMultiDimensionalField() {
|
||||||
|
// PHP4 reference hack
|
||||||
|
ClassRegistry::removeObject('view');
|
||||||
|
ClassRegistry::addObject('view', $this->View);
|
||||||
|
|
||||||
|
$this->Helper->setEntity('HelperTestPost', true);
|
||||||
|
|
||||||
|
$this->Helper->setEntity('HelperTestPost.2.HelperTestComment.1.title');
|
||||||
|
$this->assertEqual($this->View->model, 'HelperTestPost');
|
||||||
|
$this->assertEqual($this->View->association, 'HelperTestComment');
|
||||||
|
$this->assertEqual($this->View->modelId,2);
|
||||||
|
$this->assertEqual($this->View->field, 'title');
|
||||||
|
|
||||||
|
$this->Helper->setEntity('HelperTestPost.1.HelperTestComment.1.HelperTestTag.1.created');
|
||||||
|
$this->assertEqual($this->View->field,'created');
|
||||||
|
$this->assertEqual($this->View->association,'HelperTestTag');
|
||||||
|
$this->assertEqual($this->View->modelId,1);
|
||||||
|
|
||||||
|
|
||||||
|
$this->Helper->setEntity('HelperTestPost.0.HelperTestComment.1.HelperTestTag.1.fake');
|
||||||
|
$this->assertEqual($this->View->model,'HelperTestPost');
|
||||||
|
$this->assertEqual($this->View->association,'HelperTestTag');
|
||||||
|
$this->assertEqual($this->View->field,null);
|
||||||
|
|
||||||
|
$this->Helper->setEntity('1.HelperTestComment.1.HelperTestTag.created.year');
|
||||||
|
$this->assertEqual($this->View->model,'HelperTestPost');
|
||||||
|
$this->assertEqual($this->View->association,'HelperTestTag');
|
||||||
|
$this->assertEqual($this->View->field,'created');
|
||||||
|
$this->assertEqual($this->View->modelId,1);
|
||||||
|
$this->assertEqual($this->View->fieldSuffix,'year');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
Loading…
Reference in a new issue