Browse Source

Fix email rendering when using 2 different plugins.

When an email template and layout are in different plugins the incorrect
plugin would be used for the layout.

Fixes #3062
mark_story 12 years ago
parent
commit
4ec81542db

+ 7 - 7
lib/Cake/Network/Email/CakeEmail.php

@@ -1638,21 +1638,21 @@ class CakeEmail {
 			$View->plugin = $layoutPlugin;
 		}
 
-		// Convert null to false, as View needs false to disable
-		// the layout.
-		if ($layout === null) {
-			$layout = false;
-		}
-
 		if ($View->get('content') === null) {
 			$View->set('content', $content);
 		}
 
+		// Convert null to false, as View needs false to disable
+		// the layout.
+		if ($this->_layout === null) {
+			$this->_layout = false;
+		}
+
 		foreach ($types as $type) {
 			$View->hasRendered = false;
 			$View->viewPath = $View->layoutPath = 'Emails' . DS . $type;
 
-			$render = $View->render($template, $layout);
+			$render = $View->render($this->_template, $this->_layout);
 			$render = str_replace(array("\r\n", "\r"), "\n", $render);
 			$rendered[$type] = $this->_encodeString($render, $this->charset);
 		}

+ 9 - 1
lib/Cake/Test/Case/Network/Email/CakeEmailTest.php

@@ -1472,7 +1472,7 @@ class CakeEmailTest extends CakeTestCase {
 		App::build(array(
 			'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)
 		));
-		CakePlugin::load('TestPlugin');
+		CakePlugin::load(array('TestPlugin', 'TestPluginTwo'));
 
 		$this->CakeEmail->reset();
 		$this->CakeEmail->transport('debug');
@@ -1493,6 +1493,14 @@ class CakeEmailTest extends CakeTestCase {
 		$this->assertContains('Into TestPlugin.', $result['message']);
 		$this->assertContains('This email was sent using the TestPlugin.', $result['message']);
 
+		$this->CakeEmail->template(
+			'TestPlugin.test_plugin_tpl',
+			'TestPluginTwo.default'
+		);
+		$result = $this->CakeEmail->send();
+		$this->assertContains('Into TestPlugin.', $result['message']);
+		$this->assertContains('This email was sent using TestPluginTwo.', $result['message']);
+
 		// test plugin template overridden by theme
 		$this->CakeEmail->theme('TestTheme');
 		$result = $this->CakeEmail->send();