From 966c69cb988fd34bfc247d4de069edf9944b7436 Mon Sep 17 00:00:00 2001 From: mark_story Date: Tue, 27 Nov 2012 21:57:12 -0500 Subject: [PATCH] Fix missing plugin parameters in scaffolding. Add missing plugin parameter to scaffolded associations. This improves link generation and correctness overall. Fixes #3396 --- lib/Cake/Controller/Scaffold.php | 8 +- .../Test/Case/Controller/ScaffoldTest.php | 1 + lib/Cake/View/Scaffolds/form.ctp | 12 ++- lib/Cake/View/Scaffolds/index.ctp | 15 +++- lib/Cake/View/Scaffolds/view.ctp | 76 ++++++++++++++++--- 5 files changed, 94 insertions(+), 18 deletions(-) diff --git a/lib/Cake/Controller/Scaffold.php b/lib/Cake/Controller/Scaffold.php index 85431268611..fbd3d6fa24a 100644 --- a/lib/Cake/Controller/Scaffold.php +++ b/lib/Cake/Controller/Scaffold.php @@ -433,8 +433,14 @@ protected function _associations() { $associations[$type][$assocKey]['foreignKey'] = $assocData['foreignKey']; + list($plugin, $model) = pluginSplit($assocData['className']); + if ($plugin) { + $plugin = Inflector::underscore($plugin); + } + $associations[$type][$assocKey]['plugin'] = $plugin; + $associations[$type][$assocKey]['controller'] = - Inflector::pluralize(Inflector::underscore($assocData['className'])); + Inflector::pluralize(Inflector::underscore($model)); if ($type == 'hasAndBelongsToMany') { $associations[$type][$assocKey]['with'] = $assocData['with']; diff --git a/lib/Cake/Test/Case/Controller/ScaffoldTest.php b/lib/Cake/Test/Case/Controller/ScaffoldTest.php index 14fe1826454..63bc445c94b 100644 --- a/lib/Cake/Test/Case/Controller/ScaffoldTest.php +++ b/lib/Cake/Test/Case/Controller/ScaffoldTest.php @@ -217,6 +217,7 @@ public function testScaffoldVariableSetting() { $this->assertEquals('scaffoldMock', $result['singularVar']); $this->assertEquals('scaffoldMock', $result['pluralVar']); $this->assertEquals(array('id', 'user_id', 'title', 'body', 'published', 'created', 'updated'), $result['scaffoldFields']); + $this->assertArrayHasKey('plugin', $result['associations']['belongsTo']['User']); } /** diff --git a/lib/Cake/View/Scaffolds/form.ctp b/lib/Cake/View/Scaffolds/form.ctp index b6725953a6b..0463bcc5f55 100644 --- a/lib/Cake/View/Scaffolds/form.ctp +++ b/lib/Cake/View/Scaffolds/form.ctp @@ -40,12 +40,18 @@ foreach ($associations as $_type => $_data) { foreach ($_data as $_alias => $_details) { if ($_details['controller'] != $this->name && !in_array($_details['controller'], $done)) { - echo "\t\t
  • " . $this->Html->link(__d('cake', 'List %s', Inflector::humanize($_details['controller'])), array('controller' => $_details['controller'], 'action' => 'index')) . "
  • \n"; - echo "\t\t
  • " . $this->Html->link(__d('cake', 'New %s', Inflector::humanize(Inflector::underscore($_alias))), array('controller' => $_details['controller'], 'action' => 'add')) . "
  • \n"; + echo "\t\t
  • " . $this->Html->link( + __d('cake', 'List %s', Inflector::humanize($_details['controller'])), + array('plugin' => $_details['plugin'], 'controller' => $_details['controller'], 'action' => 'index') + ) . "
  • \n"; + echo "\t\t
  • " . $this->Html->link( + __d('cake', 'New %s', Inflector::humanize(Inflector::underscore($_alias))), + array('plugin' => $_details['plugin'], 'controller' => $_details['controller'], 'action' => 'add') + ) . "
  • \n"; $done[] = $_details['controller']; } } } ?> - \ No newline at end of file + diff --git a/lib/Cake/View/Scaffolds/index.ctp b/lib/Cake/View/Scaffolds/index.ctp index a820624ddf9..010327fd03c 100644 --- a/lib/Cake/View/Scaffolds/index.ctp +++ b/lib/Cake/View/Scaffolds/index.ctp @@ -82,8 +82,19 @@ endforeach; foreach ($associations as $_type => $_data) { foreach ($_data as $_alias => $_details) { if ($_details['controller'] != $this->name && !in_array($_details['controller'], $done)) { - echo '
  • ' . $this->Html->link(__d('cake', 'List %s', Inflector::humanize($_details['controller'])), array('controller' => $_details['controller'], 'action' => 'index')) . '
  • '; - echo '
  • ' . $this->Html->link(__d('cake', 'New %s', Inflector::humanize(Inflector::underscore($_alias))), array('controller' => $_details['controller'], 'action' => 'add')) . '
  • '; + echo '
  • '; + echo $this->Html->link( + __d('cake', 'List %s', Inflector::humanize($_details['controller'])), + array('plugin' => $_details['plugin'], 'controller' => $_details['controller'], 'action' => 'index') + ); + echo '
  • '; + + echo '
  • '; + echo $this->Html->link( + __d('cake', 'New %s', Inflector::humanize(Inflector::underscore($_alias))), + array('plugin' => $_details['plugin'], 'controller' => $_details['controller'], 'action' => 'add') + ); + echo '
  • '; $done[] = $_details['controller']; } } diff --git a/lib/Cake/View/Scaffolds/view.ctp b/lib/Cake/View/Scaffolds/view.ctp index c383d12fd8e..c7c58cf82ee 100644 --- a/lib/Cake/View/Scaffolds/view.ctp +++ b/lib/Cake/View/Scaffolds/view.ctp @@ -28,7 +28,12 @@ foreach ($scaffoldFields as $_field) { if ($_field === $_details['foreignKey']) { $isKey = true; echo "\t\t
    " . Inflector::humanize($_alias) . "
    \n"; - echo "\t\t
    \n\t\t\t" . $this->Html->link(${$singularVar}[$_alias][$_details['displayField']], array('controller' => $_details['controller'], 'action' => 'view', ${$singularVar}[$_alias][$_details['primaryKey']])) . "\n\t\t 
    \n"; + echo "\t\t
    \n\t\t\t"; + echo $this->Html->link( + ${$singularVar}[$_alias][$_details['displayField']], + array('plugin' => $_details['plugin'], 'controller' => $_details['controller'], 'action' => 'view', ${$singularVar}[$_alias][$_details['primaryKey']]) + ); + echo "\n\t\t 
    \n"; break; } } @@ -45,17 +50,38 @@ foreach ($scaffoldFields as $_field) {