From 7ad11f59bbad6a66a06054dc0daa6bc0a31b7479 Mon Sep 17 00:00:00 2001 From: mark_story Date: Mon, 17 Dec 2012 20:54:38 -0500 Subject: [PATCH] Change line length in emails. Use LINE_LENGTH_MUST instead of LINE_LENGTH_SHOULD. This fixes a number of text wrapping issues caused by the narrower wrap length. Fixes #3151 Fixes #3473 --- lib/Cake/Network/Email/CakeEmail.php | 15 +++++++++------ .../Test/Case/Network/Email/CakeEmailTest.php | 16 ++++++++-------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/lib/Cake/Network/Email/CakeEmail.php b/lib/Cake/Network/Email/CakeEmail.php index 9bf4d434e..8237284bb 100644 --- a/lib/Cake/Network/Email/CakeEmail.php +++ b/lib/Cake/Network/Email/CakeEmail.php @@ -1237,7 +1237,7 @@ class CakeEmail { * @param string $message Message to wrap * @return array Wrapped message */ - protected function _wrap($message) { + protected function _wrap($message, $wrapLength = CakeEmail::LINE_LENGTH_MUST) { $message = str_replace(array("\r\n", "\r"), "\n", $message); $lines = explode("\n", $message); $formatted = array(); @@ -1248,7 +1248,10 @@ class CakeEmail { continue; } if (!preg_match('/\<[a-z]/i', $line)) { - $formatted = array_merge($formatted, explode("\n", wordwrap($line, self::LINE_LENGTH_SHOULD, "\n"))); + $formatted = array_merge( + $formatted, + explode("\n", wordwrap($line, $wrapLength, "\n")) + ); continue; } @@ -1261,7 +1264,7 @@ class CakeEmail { $tag .= $char; if ($char === '>') { $tagLength = strlen($tag); - if ($tagLength + $tmpLineLength < self::LINE_LENGTH_SHOULD) { + if ($tagLength + $tmpLineLength < $wrapLength) { $tmpLine .= $tag; $tmpLineLength += $tagLength; } else { @@ -1270,7 +1273,7 @@ class CakeEmail { $tmpLine = ''; $tmpLineLength = 0; } - if ($tagLength > self::LINE_LENGTH_SHOULD) { + if ($tagLength > $wrapLength) { $formatted[] = $tag; } else { $tmpLine = $tag; @@ -1287,14 +1290,14 @@ class CakeEmail { $tag = '<'; continue; } - if ($char === ' ' && $tmpLineLength >= self::LINE_LENGTH_SHOULD) { + if ($char === ' ' && $tmpLineLength >= $wrapLength) { $formatted[] = $tmpLine; $tmpLineLength = 0; continue; } $tmpLine .= $char; $tmpLineLength++; - if ($tmpLineLength === self::LINE_LENGTH_SHOULD) { + if ($tmpLineLength === $wrapLength) { $nextChar = $line[$i + 1]; if ($nextChar === ' ' || $nextChar === '<') { $formatted[] = trim($tmpLine); diff --git a/lib/Cake/Test/Case/Network/Email/CakeEmailTest.php b/lib/Cake/Test/Case/Network/Email/CakeEmailTest.php index c4c7a814d..921d33155 100644 --- a/lib/Cake/Test/Case/Network/Email/CakeEmailTest.php +++ b/lib/Cake/Test/Case/Network/Email/CakeEmailTest.php @@ -42,8 +42,8 @@ class TestCakeEmail extends CakeEmail { * Wrap to protected method * */ - public function wrap($text) { - return parent::_wrap($text); + public function wrap($text, $length = CakeEmail::LINE_LENGTH_MUST) { + return parent::_wrap($text, $length); } /** @@ -1354,7 +1354,7 @@ class CakeEmailTest extends CakeTestCase { */ public function testWrap() { $text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ac turpis orci, non commodo odio. Morbi nibh nisi, vehicula pellentesque accumsan amet.'; - $result = $this->CakeEmail->wrap($text); + $result = $this->CakeEmail->wrap($text, CakeEmail::LINE_LENGTH_SHOULD); $expected = array( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ac turpis orci,', 'non commodo odio. Morbi nibh nisi, vehicula pellentesque accumsan amet.', @@ -1363,7 +1363,7 @@ class CakeEmailTest extends CakeTestCase { $this->assertSame($expected, $result); $text = 'Lorem ipsum dolor sit amet, consectetur < adipiscing elit. Donec ac turpis orci, non commodo odio. Morbi nibh nisi, vehicula > pellentesque accumsan amet.'; - $result = $this->CakeEmail->wrap($text); + $result = $this->CakeEmail->wrap($text, CakeEmail::LINE_LENGTH_SHOULD); $expected = array( 'Lorem ipsum dolor sit amet, consectetur < adipiscing elit. Donec ac turpis', 'orci, non commodo odio. Morbi nibh nisi, vehicula > pellentesque accumsan', @@ -1373,7 +1373,7 @@ class CakeEmailTest extends CakeTestCase { $this->assertSame($expected, $result); $text = '

Lorem ipsum dolor sit amet,
consectetur adipiscing elit.
Donec ac turpis orci, non commodo odio.
Morbi nibh nisi, vehicula pellentesque accumsan amet.


'; - $result = $this->CakeEmail->wrap($text); + $result = $this->CakeEmail->wrap($text, CakeEmail::LINE_LENGTH_SHOULD); $expected = array( '

Lorem ipsum dolor sit amet,
consectetur adipiscing elit.
Donec ac', 'turpis orci, non commodo odio.
Morbi nibh nisi, vehicula', @@ -1383,7 +1383,7 @@ class CakeEmailTest extends CakeTestCase { $this->assertSame($expected, $result); $text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ac turpis orci, non commodo odio. Morbi nibh nisi, vehicula pellentesque accumsan amet.'; - $result = $this->CakeEmail->wrap($text); + $result = $this->CakeEmail->wrap($text, CakeEmail::LINE_LENGTH_SHOULD); $expected = array( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ac', 'turpis orci, non commodo odio. Morbi nibh', @@ -1393,7 +1393,7 @@ class CakeEmailTest extends CakeTestCase { $this->assertSame($expected, $result); $text = 'Lorem ipsum ok'; - $result = $this->CakeEmail->wrap($text); + $result = $this->CakeEmail->wrap($text, CakeEmail::LINE_LENGTH_SHOULD); $expected = array( 'Lorem ipsum', '', @@ -1403,7 +1403,7 @@ class CakeEmailTest extends CakeTestCase { $this->assertSame($expected, $result); $text = 'Lorem ipsum withonewordverybigMorethanthelineshouldsizeofrfcspecificationbyieeeavailableonieeesite ok.'; - $result = $this->CakeEmail->wrap($text); + $result = $this->CakeEmail->wrap($text, CakeEmail::LINE_LENGTH_SHOULD); $expected = array( 'Lorem ipsum', 'withonewordverybigMorethanthelineshouldsizeofrfcspecificationbyieeeavailableonieeesite',