Browse Source

Add support for disabled attributes to multi-checkbox.

mark_story 12 years ago
parent
commit
642db5ee8a
2 changed files with 79 additions and 3 deletions
  1. 4 1
      src/View/Input/MultiCheckbox.php
  2. 75 2
      tests/TestCase/View/Input/MultiCheckboxTest.php

+ 4 - 1
src/View/Input/MultiCheckbox.php

@@ -128,9 +128,12 @@ class MultiCheckbox {
  * @return boolean
  */
 	protected function _isDisabled($key, $disabled) {
-		if ($disabled === null) {
+		if ($disabled === null || $disabled === false) {
 			return false;
 		}
+		if ($disabled === true) {
+			return true;
+		}
 		$strict = !is_numeric($key);
 		return in_array((string)$key, $disabled, $strict);
 	}

+ 75 - 2
tests/TestCase/View/Input/MultiCheckboxTest.php

@@ -107,7 +107,8 @@ class MultiCheckboxTest extends TestCase {
 				1 => 'CakePHP',
 				'1x' => 'Development',
 			],
-			'val' => [1]
+			'val' => [1],
+			'disabled' => false
 		];
 		$result = $input->render($data);
 		$expected = [
@@ -152,7 +153,79 @@ class MultiCheckboxTest extends TestCase {
  * @return void
  */
 	public function testRenderDisabled() {
-		$this->markTestIncomplete();
+		$input = new MultiCheckbox($this->templates);
+		$data = [
+			'name' => 'Tags[id]',
+			'options' => [
+				1 => 'CakePHP',
+				'1x' => 'Development',
+			],
+			'disabled' => true,
+		];
+		$result = $input->render($data);
+		$expected = [
+			['div' => ['class' => 'checkbox']],
+			['input' => [
+				'type' => 'checkbox',
+				'name' => 'Tags[id][]',
+				'value' => 1,
+				'id' => 'tags-id-1',
+				'disabled' => 'disabled'
+			]],
+			['label' => ['for' => 'tags-id-1']],
+			'CakePHP',
+			'/label',
+			'/div',
+			['div' => ['class' => 'checkbox']],
+			['input' => [
+				'type' => 'checkbox',
+				'name' => 'Tags[id][]',
+				'value' => '1x',
+				'id' => 'tags-id-1x',
+				'disabled' => 'disabled'
+			]],
+			['label' => ['for' => 'tags-id-1x']],
+			'Development',
+			'/label',
+			'/div',
+		];
+		$this->assertTags($result, $expected);
+
+		$data = [
+			'name' => 'Tags[id]',
+			'options' => [
+				1 => 'CakePHP',
+				'1x' => 'Development',
+			],
+			'disabled' => [1]
+		];
+		$result = $input->render($data);
+		$expected = [
+			['div' => ['class' => 'checkbox']],
+			['input' => [
+				'type' => 'checkbox',
+				'name' => 'Tags[id][]',
+				'value' => 1,
+				'id' => 'tags-id-1',
+				'disabled' => 'disabled'
+			]],
+			['label' => ['for' => 'tags-id-1']],
+			'CakePHP',
+			'/label',
+			'/div',
+			['div' => ['class' => 'checkbox']],
+			['input' => [
+				'type' => 'checkbox',
+				'name' => 'Tags[id][]',
+				'value' => '1x',
+				'id' => 'tags-id-1x',
+			]],
+			['label' => ['for' => 'tags-id-1x']],
+			'Development',
+			'/label',
+			'/div',
+		];
+		$this->assertTags($result, $expected);
 	}
 
 }