Skip to content

Commit

Permalink
Merge pull request #68 from neoxia/5.1
Browse files Browse the repository at this point in the history
[5.1] Checkboxes work with relationships
  • Loading branch information
adamgoose committed Sep 3, 2015
2 parents 59f1240 + de73798 commit 3ff2b89
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 2 deletions.
16 changes: 14 additions & 2 deletions src/FormBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
use Illuminate\Routing\UrlGenerator;
use Illuminate\Session\Store as Session;
use Illuminate\Support\Traits\Macroable;
use Illuminate\Support\Collection;

class FormBuilder {

Expand Down Expand Up @@ -757,9 +758,20 @@ protected function getCheckboxCheckedState($name, $value, $checked)

if($this->missingOldAndModel($name)) return $checked;

$posted = $this->getValueAttribute($name);
$posted = $this->getValueAttribute($name, $checked);

return is_array($posted) ? in_array($value, $posted) : (bool) $posted;
if (is_array($posted))
{
return in_array($value, $posted);
}
else if ($posted instanceof Collection)
{
return $posted->contains('id', $value);
}
else
{
return (bool) $posted;
}
}

/**
Expand Down
25 changes: 25 additions & 0 deletions tests/FormBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use Collective\Html\HtmlBuilder;
use Illuminate\Routing\UrlGenerator;
use Illuminate\Routing\RouteCollection;
use Illuminate\Support\Collection;

class FormBuilderTest extends PHPUnit_Framework_TestCase {

Expand Down Expand Up @@ -409,6 +410,30 @@ public function testFormCheckboxRepopulation()
}


public function testFormCheckboxWithModelRelation()
{
$this->formBuilder->setSessionStore($session = m::mock('Illuminate\Session\Store'));
$session->shouldReceive('getOldInput')->withNoArgs()->andReturn(array());
$session->shouldReceive('getOldInput')->with('items')->andReturn(null);

$mockModel2 = new StdClass;
$mockModel2->id = 2;
$mockModel3 = new StdClass;
$mockModel3->id = 3;
$this->setModel(array('items' => new Collection(array($mockModel2, $mockModel3))));

$check1 = $this->formBuilder->checkbox('items[]', 1);
$check2 = $this->formBuilder->checkbox('items[]', 2);
$check3 = $this->formBuilder->checkbox('items[]', 3, false);
$check4 = $this->formBuilder->checkbox('items[]', 4, true);

$this->assertEquals('<input name="items[]" type="checkbox" value="1">', $check1);
$this->assertEquals('<input checked="checked" name="items[]" type="checkbox" value="2">', $check2);
$this->assertEquals('<input name="items[]" type="checkbox" value="3">', $check3);
$this->assertEquals('<input checked="checked" name="items[]" type="checkbox" value="4">', $check4);
}


public function testFormCheckboxWithoutSession()
{
$form1 = $this->formBuilder->checkbox('foo');
Expand Down

0 comments on commit 3ff2b89

Please sign in to comment.