Browse Source

Merge pull request #8038 from cakephp/issue-8030

Allow newlines in confirm messages.
Mark Story 10 years ago
parent
commit
9a8b0eccc0
2 changed files with 21 additions and 26 deletions
  1. 1 1
      src/View/Helper.php
  2. 20 25
      tests/TestCase/View/Helper/FormHelperTest.php

+ 1 - 1
src/View/Helper.php

@@ -164,7 +164,7 @@ class Helper implements EventListenerInterface
      */
     protected function _confirm($message, $okCode, $cancelCode = '', $options = [])
     {
-        $message = json_encode($message);
+        $message = str_replace('\n', "\n", json_encode($message));
         $confirm = "if (confirm({$message})) { {$okCode} } {$cancelCode}";
         // We cannot change the key here in 3.x, but the behavior is inverted in this case
         $escape = isset($options['escape']) && $options['escape'] === false;

+ 20 - 25
tests/TestCase/View/Helper/FormHelperTest.php

@@ -6492,65 +6492,60 @@ class FormHelperTest extends TestCase
         ];
         $this->assertHtml($expected, $result);
 
-        $result = $this->Form->postLink('Delete', '/posts/delete/1', ['confirm' => 'Confirm?']);
-        $expected = [
-            'form' => [
-                'method' => 'post', 'action' => '/posts/delete/1',
-                'name' => 'preg:/post_\w+/', 'style' => 'display:none;'
-            ],
-            'input' => ['type' => 'hidden', 'name' => '_method', 'value' => 'POST'],
-            '/form',
-            'a' => ['href' => '#', 'onclick' => 'preg:/if \(confirm\("Confirm\?"\)\) \{ document\.post_\w+\.submit\(\); \} event\.returnValue = false; return false;/'],
-            'Delete',
-            '/a'
-        ];
-        $this->assertHtml($expected, $result);
-
         $result = $this->Form->postLink(
             'Delete',
             '/posts/delete/1',
-            ['escape' => false, 'confirm' => '\'Confirm\' this "deletion"?']
+            ['target' => '_blank', 'class' => 'btn btn-danger']
         );
         $expected = [
             'form' => [
-                'method' => 'post', 'action' => '/posts/delete/1',
+                'method' => 'post', 'target' => '_blank', 'action' => '/posts/delete/1',
                 'name' => 'preg:/post_\w+/', 'style' => 'display:none;'
             ],
             'input' => ['type' => 'hidden', 'name' => '_method', 'value' => 'POST'],
             '/form',
-            'a' => ['href' => '#', 'onclick' => 'preg:/if \(confirm\("'Confirm' this \\\\"deletion\\\\"\?"\)\) \{ document\.post_\w+\.submit\(\); \} event\.returnValue = false; return false;/'],
+            'a' => ['class' => 'btn btn-danger', 'href' => '#', 'onclick' => 'preg:/document\.post_\w+\.submit\(\); event\.returnValue = false; return false;/'],
             'Delete',
             '/a'
         ];
         $this->assertHtml($expected, $result);
+    }
 
-        $result = $this->Form->postLink('Delete', '/posts/delete/1', ['target' => '_blank']);
+    /**
+     * Test the confirm option for postLink()
+     *
+     * @return void
+     */
+    public function testPostLinkWithConfirm()
+    {
+        $result = $this->Form->postLink('Delete', '/posts/delete/1', ['confirm' => 'Confirm?']);
         $expected = [
             'form' => [
-                'method' => 'post', 'target' => '_blank', 'action' => '/posts/delete/1',
+                'method' => 'post', 'action' => '/posts/delete/1',
                 'name' => 'preg:/post_\w+/', 'style' => 'display:none;'
             ],
             'input' => ['type' => 'hidden', 'name' => '_method', 'value' => 'POST'],
             '/form',
-            'a' => ['href' => '#', 'onclick' => 'preg:/document\.post_\w+\.submit\(\); event\.returnValue = false; return false;/'],
+            'a' => ['href' => '#', 'onclick' => 'preg:/if \(confirm\("Confirm\?"\)\) \{ document\.post_\w+\.submit\(\); \} event\.returnValue = false; return false;/'],
             'Delete',
             '/a'
         ];
         $this->assertHtml($expected, $result);
 
         $result = $this->Form->postLink(
-            '',
-            ['controller' => 'items', 'action' => 'delete', 10],
-            ['class' => 'btn btn-danger', 'escape' => false, 'confirm' => 'Confirm thing']
+            'Delete',
+            '/posts/delete/1',
+            ['escape' => false, 'confirm' => "'Confirm'\nthis \"deletion\"?"]
         );
         $expected = [
             'form' => [
-                'method' => 'post', 'action' => '/items/delete/10',
+                'method' => 'post', 'action' => '/posts/delete/1',
                 'name' => 'preg:/post_\w+/', 'style' => 'display:none;'
             ],
             'input' => ['type' => 'hidden', 'name' => '_method', 'value' => 'POST'],
             '/form',
-            'a' => ['class' => 'btn btn-danger', 'href' => '#', 'onclick' => 'preg:/if \(confirm\(\&quot\;Confirm thing\&quot\;\)\) \{ document\.post_\w+\.submit\(\); \} event\.returnValue = false; return false;/'],
+            'a' => ['href' => '#', 'onclick' => "preg:/if \(confirm\("'Confirm'\\nthis \\\\"deletion\\\\"\?"\)\) \{ document\.post_\w+\.submit\(\); \} event\.returnValue = false; return false;/"],
+            'Delete',
             '/a'
         ];
         $this->assertHtml($expected, $result);