Skip to content

Commit

Permalink
Merge branch 'master' into 2.4
Browse files Browse the repository at this point in the history
  • Loading branch information
ADmad committed Jan 31, 2013
2 parents 7392138 + ee08fe5 commit 8ff5958
Show file tree
Hide file tree
Showing 5 changed files with 117 additions and 10 deletions.
5 changes: 5 additions & 0 deletions app/webroot/index.php
Expand Up @@ -24,6 +24,7 @@
if (!defined('DS')) {
define('DS', DIRECTORY_SEPARATOR);
}

/**
* These defines should only be edited if you have cake installed in
* a directory layout other than the way it is distributed.
Expand Down Expand Up @@ -72,6 +73,9 @@

// for built-in server
if (php_sapi_name() == 'cli-server') {
if ($_SERVER['REQUEST_URI'] !== '/' && file_exists(WWW_ROOT . $_SERVER['REQUEST_URI'])) {
return false;
}
$_SERVER['PHP_SELF'] = '/' . basename(__FILE__);
}

Expand All @@ -93,5 +97,6 @@

App::uses('Dispatcher', 'Routing');


$Dispatcher = new Dispatcher();
$Dispatcher->dispatch(new CakeRequest(), new CakeResponse());
5 changes: 3 additions & 2 deletions lib/Cake/Console/Command/ServerShell.php
Expand Up @@ -125,10 +125,11 @@ public function main() {
return;
}

$command = sprintf("php -S %s:%d -t %s",
$command = sprintf("php -S %s:%d -t %s %s",
$this->_host,
$this->_port,
$this->_documentRoot
$this->_documentRoot,
WEBROOT_DIR . '/index.php'
);

$port = ($this->_port == self::DEFAULT_PORT) ? '' : ':' . $this->_port;
Expand Down
3 changes: 3 additions & 0 deletions lib/Cake/Console/Templates/skel/webroot/index.php
Expand Up @@ -74,6 +74,9 @@

// for built-in server
if (php_sapi_name() == 'cli-server') {
if ($_SERVER['REQUEST_URI'] !== '/' && file_exists(WWW_ROOT . $_SERVER['REQUEST_URI'])) {
return false;
}
$_SERVER['PHP_SELF'] = '/' . basename(__FILE__);
}

Expand Down
96 changes: 95 additions & 1 deletion lib/Cake/Test/Case/View/Helper/FormHelperTest.php
Expand Up @@ -2445,6 +2445,33 @@ public function testInputCheckboxWithDisabledElements() {
);
$result = $this->Form->input('Contact.multiple', array('multiple' => 'checkbox', 'disabled' => $disabled, 'options' => $options));
$this->assertTags($result, $expected);

// make sure 50 does only disable 50, and not 50f5c0cf
$options = array('50' => 'Fifty', '50f5c0cf' => 'Stringy');
$disabled = array(50);

$expected = array(
array('div' => array('class' => 'input select')),
array('label' => array('for' => "ContactMultiple")),
'Multiple',
'/label',
array('input' => array('type' => 'hidden', 'name' => "data[Contact][multiple]", 'value' => '', 'id' => "ContactMultiple")),
array('div' => array('class' => 'checkbox')),
array('input' => array('type' => 'checkbox', 'name' => "data[Contact][multiple][]", 'value' => 50, 'disabled' => 'disabled', 'id' => "ContactMultiple50")),
array('label' => array('for' => "ContactMultiple50")),
'Fifty',
'/label',
'/div',
array('div' => array('class' => 'checkbox')),
array('input' => array('type' => 'checkbox', 'name' => "data[Contact][multiple][]", 'value' => '50f5c0cf', 'id' => "ContactMultiple50f5c0cf")),
array('label' => array('for' => "ContactMultiple50f5c0cf")),
'Stringy',
'/label',
'/div',
'/div'
);
$result = $this->Form->input('Contact.multiple', array('multiple' => 'checkbox', 'disabled' => $disabled, 'options' => $options));
$this->assertTags($result, $expected);
}

/**
Expand Down Expand Up @@ -2996,6 +3023,31 @@ public function testFormInputs() {
$this->assertTags($result, $expected);
}

/**
* Tests inputs() works with plugin models
*
* @return void
*/
public function testInputsPluginModel() {
$this->loadFixtures('Post');
App::build(array(
'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)
));
CakePlugin::load('TestPlugin');
$this->Form->request['models'] = array(
'TestPluginPost' => array('plugin' => 'TestPlugin', 'className' => 'TestPluginPost')
);
$this->Form->create('TestPlugin.TestPluginPost');
$result = $this->Form->inputs();

$this->assertContains('data[TestPluginPost][id]', $result);
$this->assertContains('data[TestPluginPost][author_id]', $result);
$this->assertContains('data[TestPluginPost][title]', $result);
$this->assertTrue(ClassRegistry::isKeySet('TestPluginPost'));
$this->assertFalse(ClassRegistry::isKeySet('TestPlugin'));
$this->assertEquals('TestPluginPost', $this->Form->model());
}

/**
* testSelectAsCheckbox method
*
Expand Down Expand Up @@ -4221,7 +4273,7 @@ public function testHabtmSelectBox() {
'Contact' => array(),
'ContactTag' => array(
array(
'id' => 1,
'id' => '1',
'name' => 'blue'
),
array(
Expand Down Expand Up @@ -4252,6 +4304,48 @@ public function testHabtmSelectBox() {
'/select'
);
$this->assertTags($result, $expected);

// make sure only 50 is selected, and not 50f5c0cf
$this->View->viewVars['contactTags'] = array(
'1' => 'blue',
'50f5c0cf' => 'red',
'50' => 'green'
);
$this->Form->request->data = array(
'Contact' => array(),
'ContactTag' => array(
array(
'id' => 1,
'name' => 'blue'
),
array(
'id' => 50,
'name' => 'green'
)
)
);
$this->Form->create('Contact');
$result = $this->Form->input('ContactTag', array('div' => false, 'label' => false));
$expected = array(
'input' => array(
'type' => 'hidden', 'name' => 'data[ContactTag][ContactTag]', 'value' => '', 'id' => 'ContactTagContactTag_'
),
'select' => array(
'name' => 'data[ContactTag][ContactTag][]', 'id' => 'ContactTagContactTag',
'multiple' => 'multiple'
),
array('option' => array('value' => '1', 'selected' => 'selected')),
'blue',
'/option',
array('option' => array('value' => '50f5c0cf')),
'red',
'/option',
array('option' => array('value' => '50', 'selected' => 'selected')),
'green',
'/option',
'/select'
);
$this->assertTags($result, $expected);
}

/**
Expand Down
18 changes: 11 additions & 7 deletions lib/Cake/View/Helper/FormHelper.php
Expand Up @@ -329,7 +329,8 @@ public function create($model = null, $options = array()) {

$key = null;
if ($model !== false) {
$key = $this->_introspectModel($model, 'key');
list($plugin, $model) = pluginSplit($model, true);
$key = $this->_introspectModel($plugin . $model, 'key');
$this->setEntity($model, true);
}

Expand Down Expand Up @@ -2612,9 +2613,10 @@ protected function _selectOptions($elements = array(), $parents = array(), $show
}

if ($name !== null) {
$isNumeric = is_numeric($name);
if (
(!$selectedIsArray && !$selectedIsEmpty && (string)$attributes['value'] == (string)$name) ||
($selectedIsArray && in_array($name, $attributes['value'], true))
($selectedIsArray && in_array($name, $attributes['value'], !$isNumeric))
) {
if ($attributes['style'] === 'checkbox') {
$htmlOptions['checked'] = true;
Expand All @@ -2629,19 +2631,21 @@ protected function _selectOptions($elements = array(), $parents = array(), $show
if ($attributes['style'] === 'checkbox') {
$htmlOptions['value'] = $name;

$disabledType = null;
$hasDisabled = !empty($attributes['disabled']);
if ($hasDisabled) {
$disabledType = gettype($attributes['disabled']);
$disabledIsArray = is_array($attributes['disabled']);
if ($disabledIsArray) {
$disabledIsNumeric = is_numeric($htmlOptions['value']);
}
}
if (
$hasDisabled &&
$disabledType === 'array' &&
in_array($htmlOptions['value'], $attributes['disabled'])
$disabledIsArray &&
in_array($htmlOptions['value'], $attributes['disabled'], !$disabledIsNumeric)
) {
$htmlOptions['disabled'] = 'disabled';
}
if ($hasDisabled && $disabledType !== 'array') {
if ($hasDisabled && !$disabledIsArray) {
$htmlOptions['disabled'] = $attributes['disabled'] === true ? 'disabled' : $attributes['disabled'];
}

Expand Down

0 comments on commit 8ff5958

Please sign in to comment.