mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 03:18:26 +00:00
Merge branch 'master' into 2.7
This commit is contained in:
commit
0b916cedbb
18 changed files with 105 additions and 29 deletions
|
@ -333,15 +333,13 @@ class PaginatorComponent extends Component {
|
|||
if (isset($this->settings[$alias])) {
|
||||
$defaults = $this->settings[$alias];
|
||||
}
|
||||
if (isset($defaults['limit']) &&
|
||||
(empty($defaults['maxLimit']) || $defaults['limit'] > $defaults['maxLimit'])
|
||||
) {
|
||||
$defaults['maxLimit'] = $defaults['limit'];
|
||||
}
|
||||
return array_merge(
|
||||
array('page' => 1, 'limit' => 20, 'maxLimit' => 100, 'paramType' => 'named'),
|
||||
$defaults
|
||||
$defaults += array(
|
||||
'page' => 1,
|
||||
'limit' => 20,
|
||||
'maxLimit' => 100,
|
||||
'paramType' => 'named'
|
||||
);
|
||||
return $defaults;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -874,11 +874,11 @@ class App {
|
|||
),
|
||||
'Vendor' => array(
|
||||
'%s' . 'Vendor' . DS,
|
||||
dirname(dirname(CAKE)) . DS . 'vendors' . DS,
|
||||
ROOT . DS . 'vendors' . DS,
|
||||
),
|
||||
'Plugin' => array(
|
||||
APP . 'Plugin' . DS,
|
||||
dirname(dirname(CAKE)) . DS . 'plugins' . DS
|
||||
ROOT . DS . 'plugins' . DS
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
|
@ -18,7 +18,6 @@ App::uses('CakeLog', 'Log');
|
|||
App::uses('Dispatcher', 'Routing');
|
||||
App::uses('Router', 'Routing');
|
||||
App::uses('Set', 'Utility');
|
||||
App::uses('CakeLog', 'Log');
|
||||
|
||||
/**
|
||||
* Object class provides a few generic methods used in several subclasses.
|
||||
|
|
|
@ -1941,9 +1941,8 @@ class Model extends Object implements CakeEventListener {
|
|||
$this->_saveMulti($joined, $this->id, $db);
|
||||
}
|
||||
|
||||
$this->whitelist = $_whitelist;
|
||||
|
||||
if (!$success) {
|
||||
$this->whitelist = $_whitelist;
|
||||
return $success;
|
||||
}
|
||||
|
||||
|
@ -1964,6 +1963,7 @@ class Model extends Object implements CakeEventListener {
|
|||
|
||||
$this->_clearCache();
|
||||
$this->validationErrors = array();
|
||||
$this->whitelist = $_whitelist;
|
||||
$this->data = false;
|
||||
|
||||
return $success;
|
||||
|
|
|
@ -1336,7 +1336,7 @@ class CakeResponse {
|
|||
'download' => null
|
||||
);
|
||||
|
||||
if (strpos($path, '..') !== false) {
|
||||
if (strpos($path, '..' . DS) !== false) {
|
||||
throw new NotFoundException(__d(
|
||||
'cake_dev',
|
||||
'The requested file contains `..` and will not be read.'
|
||||
|
|
|
@ -1435,7 +1435,7 @@ class CakeEmail {
|
|||
$tmpLine .= $char;
|
||||
$tmpLineLength++;
|
||||
if ($tmpLineLength === $wrapLength) {
|
||||
$nextChar = $line[$i + 1];
|
||||
$nextChar = isset($line[$i + 1]) ? $line[$i + 1] : '';
|
||||
if ($nextChar === ' ' || $nextChar === '<') {
|
||||
$formatted[] = trim($tmpLine);
|
||||
$tmpLine = '';
|
||||
|
|
|
@ -853,7 +853,7 @@ class PaginatorComponentTest extends CakeTestCase {
|
|||
'paramType' => 'named',
|
||||
);
|
||||
$result = $this->Paginator->mergeOptions('Post');
|
||||
$expected = array('page' => 1, 'limit' => 200, 'maxLimit' => 200, 'paramType' => 'named');
|
||||
$expected = array('page' => 1, 'limit' => 200, 'maxLimit' => 100, 'paramType' => 'named');
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$this->Paginator->settings = array(
|
||||
|
@ -872,7 +872,7 @@ class PaginatorComponentTest extends CakeTestCase {
|
|||
'paramType' => 'named',
|
||||
);
|
||||
$result = $this->Paginator->mergeOptions('Post');
|
||||
$expected = array('page' => 1, 'limit' => 500, 'maxLimit' => 150, 'paramType' => 'named');
|
||||
$expected = array('page' => 1, 'limit' => 500, 'maxLimit' => 100, 'paramType' => 'named');
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
|
|
|
@ -387,6 +387,38 @@ class ModelWriteTest extends BaseModelTest {
|
|||
$this->assertEquals($whitelist, $model->whitelist);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test save() resets the whitelist after afterSave
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testSaveResetWhitelistOnSuccess() {
|
||||
$this->loadFixtures('Post');
|
||||
|
||||
$callback = array($this, 'callbackForWhitelistReset');
|
||||
$model = ClassRegistry::init('Post');
|
||||
$model->whitelist = array('author_id', 'title', 'body');
|
||||
$model->getEventManager()->attach($callback, 'Model.afterSave');
|
||||
$data = array(
|
||||
'title' => 'New post',
|
||||
'body' => 'Post body',
|
||||
'author_id' => 1
|
||||
);
|
||||
$result = $model->save($data);
|
||||
$this->assertNotEmpty($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback for testing whitelist in afterSave
|
||||
*
|
||||
* @param Model $model The model having save called.
|
||||
* @return void
|
||||
*/
|
||||
public function callbackForWhitelistReset($event) {
|
||||
$expected = array('author_id', 'title', 'body', 'updated', 'created');
|
||||
$this->assertEquals($expected, $event->subject()->whitelist);
|
||||
}
|
||||
|
||||
/**
|
||||
* testSaveWithCounterCache method
|
||||
*
|
||||
|
|
|
@ -1170,6 +1170,7 @@ class CakeResponseTest extends CakeTestCase {
|
|||
* test file with ..
|
||||
*
|
||||
* @expectedException NotFoundException
|
||||
* @expectedExceptionMessage The requested file contains `..` and will not be read.
|
||||
* @return void
|
||||
*/
|
||||
public function testFileWithPathTraversal() {
|
||||
|
@ -1177,6 +1178,19 @@ class CakeResponseTest extends CakeTestCase {
|
|||
$response->file('my/../cat.gif');
|
||||
}
|
||||
|
||||
/**
|
||||
* Although unlikely, a file may contain dots in its filename.
|
||||
* This should be allowed, as long as the dots doesn't specify a path (../ or ..\)
|
||||
*
|
||||
* @expectedException NotFoundException
|
||||
* @execptedExceptionMessageRegExp #The requested file .+my/Some..cat.gif was not found or not readable#
|
||||
* @return void
|
||||
*/
|
||||
public function testFileWithDotsInFilename() {
|
||||
$response = new CakeResponse();
|
||||
$response->file('my/Some..cat.gif');
|
||||
}
|
||||
|
||||
/**
|
||||
* testFile method
|
||||
*
|
||||
|
|
|
@ -2467,6 +2467,25 @@ HTML;
|
|||
$this->assertEquals($expected, $result['message']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that really long lines don't cause errors.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testReallyLongLine() {
|
||||
$this->CakeEmail->reset();
|
||||
$this->CakeEmail->config(array('empty'));
|
||||
$this->CakeEmail->transport('Debug');
|
||||
$this->CakeEmail->from('cake@cakephp.org');
|
||||
$this->CakeEmail->to('cake@cakephp.org');
|
||||
$this->CakeEmail->subject('Wordwrap Test');
|
||||
$this->CakeEmail->emailFormat('html');
|
||||
$this->CakeEmail->template('long_line', null);
|
||||
$result = $this->CakeEmail->send();
|
||||
$this->assertContains('<a>', $result['message'], 'First bits are included');
|
||||
$this->assertContains('x', $result['message'], 'Last byte are included');
|
||||
}
|
||||
|
||||
/**
|
||||
* CakeEmailTest::assertLineLengths()
|
||||
*
|
||||
|
|
|
@ -414,7 +414,7 @@ class CakeTestCaseTest extends CakeTestCase {
|
|||
)
|
||||
), App::RESET);
|
||||
$Post = $this->getMockForModel('Post');
|
||||
|
||||
$this->assertEquals('test', $Post->useDbConfig);
|
||||
$this->assertInstanceOf('Post', $Post);
|
||||
$this->assertNull($Post->save(array()));
|
||||
$this->assertNull($Post->find('all'));
|
||||
|
|
|
@ -72,13 +72,13 @@ class CakeTimeTest extends CakeTestCase {
|
|||
*/
|
||||
public function testToQuarter() {
|
||||
$result = $this->Time->toQuarter('2007-12-25');
|
||||
$this->assertEquals(4, $result);
|
||||
$this->assertSame(4, $result);
|
||||
|
||||
$result = $this->Time->toQuarter('2007-9-25');
|
||||
$this->assertEquals(3, $result);
|
||||
$this->assertSame(3, $result);
|
||||
|
||||
$result = $this->Time->toQuarter('2007-3-25');
|
||||
$this->assertEquals(1, $result);
|
||||
$this->assertSame(1, $result);
|
||||
|
||||
$result = $this->Time->toQuarter('2007-3-25', true);
|
||||
$this->assertEquals(array('2007-01-01', '2007-03-31'), $result);
|
||||
|
|
|
@ -782,7 +782,6 @@ class FormHelperTest extends CakeTestCase {
|
|||
'type' => 'text',
|
||||
'name' => 'data[ValidateUser][cost_decimal]',
|
||||
'id' => 'ValidateUserCostDecimal',
|
||||
'maxlength' => 6,
|
||||
)),
|
||||
'/div'
|
||||
);
|
||||
|
|
14
lib/Cake/Test/test_app/View/Emails/html/long_line.ctp
Normal file
14
lib/Cake/Test/test_app/View/Emails/html/long_line.ctp
Normal file
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
echo '<a>34567890123456789012345678901234567890123456789012345678901234567890' .
|
||||
'12345678901234567890123456789012345678901234567890123456789012345678901234567890' .
|
||||
'12345678901234567890123456789012345678901234567890123456789012345678901234567890' .
|
||||
'12345678901234567890123456789012345678901234567890123456789012345678901234567890' .
|
||||
'12345678901234567890123456789012345678901234567890123456789012345678901234567890' .
|
||||
'12345678901234567890123456789012345678901234567890123456789012345678901234567890' .
|
||||
'12345678901234567890123456789012345678901234567890123456789012345678901234567890' .
|
||||
'12345678901234567890123456789012345678901234567890123456789012345678901234567890' .
|
||||
'12345678901234567890123456789012345678901234567890123456789012345678901234567890' .
|
||||
'12345678901234567890123456789012345678901234567890123456789012345678901234567890' .
|
||||
'12345678901234567890123456789012345678901234567890123456789012345678901234567890' .
|
||||
'12345678901234567890123456789012345678901234567890123456789012345678901234567890' .
|
||||
'1234567890123456789012345678901234567890123456x';
|
|
@ -732,12 +732,12 @@ abstract class CakeTestCase extends PHPUnit_Framework_TestCase {
|
|||
$mock = $this->getMock($name, $methods, array($config));
|
||||
|
||||
$availableDs = array_keys(ConnectionManager::enumConnectionObjects());
|
||||
if ($mock->useDbConfig === 'default') {
|
||||
$mock->useDbConfig = null;
|
||||
$mock->setDataSource('test');
|
||||
}
|
||||
|
||||
if ($mock->useDbConfig !== 'test' && in_array('test_' . $mock->useDbConfig, $availableDs)) {
|
||||
$mock->setDataSource('test_' . $mock->useDbConfig);
|
||||
} else {
|
||||
$mock->useDbConfig = 'test';
|
||||
$mock->setDataSource('test');
|
||||
}
|
||||
|
||||
ClassRegistry::removeObject($name);
|
||||
|
|
|
@ -575,12 +575,12 @@ class CakeTime {
|
|||
*
|
||||
* @param int|string|DateTime $dateString UNIX timestamp, strtotime() valid string or DateTime object
|
||||
* @param bool $range if true returns a range in Y-m-d format
|
||||
* @return mixed 1, 2, 3, or 4 quarter of year or array if $range true
|
||||
* @return int|array 1, 2, 3, or 4 quarter of year or array if $range true
|
||||
* @link http://book.cakephp.org/2.0/en/core-libraries/helpers/time.html#TimeHelper::toQuarter
|
||||
*/
|
||||
public static function toQuarter($dateString, $range = false) {
|
||||
$time = self::fromString($dateString);
|
||||
$date = ceil(date('m', $time) / 3);
|
||||
$date = (int)ceil(date('m', $time) / 3);
|
||||
if ($range === false) {
|
||||
return $date;
|
||||
}
|
||||
|
|
|
@ -1287,6 +1287,7 @@ class FormHelper extends AppHelper {
|
|||
isset($fieldDef['length']) &&
|
||||
is_scalar($fieldDef['length']) &&
|
||||
$fieldDef['length'] < 1000000 &&
|
||||
$fieldDef['type'] !== 'decimal' &&
|
||||
$options['type'] !== 'select'
|
||||
);
|
||||
if ($autoLength &&
|
||||
|
|
|
@ -316,7 +316,7 @@ class TimeHelper extends AppHelper {
|
|||
*
|
||||
* @param int|string|DateTime $dateString UNIX timestamp, strtotime() valid string or DateTime object
|
||||
* @param bool $range if true returns a range in Y-m-d format
|
||||
* @return mixed 1, 2, 3, or 4 quarter of year or array if $range true
|
||||
* @return int|array 1, 2, 3, or 4 quarter of year or array if $range true
|
||||
* @see CakeTime::toQuarter()
|
||||
* @link http://book.cakephp.org/2.0/en/core-libraries/helpers/time.html#formatting
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue