mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 11:28:25 +00:00
Merge branch '2.0' of github.com:cakephp/cakephp into 2.0
This commit is contained in:
commit
1c8ad1d1cc
25 changed files with 380 additions and 52 deletions
|
@ -18,5 +18,5 @@
|
|||
// @license MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||
// +--------------------------------------------------------------------------------------------+ //
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
1.3.2
|
||||
1.3.3
|
||||
|
||||
|
|
|
@ -17,4 +17,4 @@
|
|||
* @since CakePHP(tm) v 1.1.11.4062
|
||||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||
*/
|
||||
return $config['Cake.version'] = '1.3.2';
|
||||
return $config['Cake.version'] = '1.3.3';
|
||||
|
|
|
@ -88,6 +88,9 @@ class SchemaShell extends Shell {
|
|||
}
|
||||
if (!empty($this->params['plugin'])) {
|
||||
$plugin = $this->params['plugin'];
|
||||
if (empty($name)) {
|
||||
$name = $plugin;
|
||||
}
|
||||
}
|
||||
$this->Schema =& new CakeSchema(compact('name', 'path', 'file', 'connection', 'plugin'));
|
||||
}
|
||||
|
|
|
@ -171,7 +171,7 @@ class Shell extends Object {
|
|||
}
|
||||
|
||||
/**
|
||||
* Starts up the the Shell
|
||||
* Starts up the Shell
|
||||
* allows for checking and configuring prior to command or main execution
|
||||
* can be overriden in subclasses
|
||||
*
|
||||
|
|
|
@ -604,7 +604,8 @@ class Dispatcher extends Object {
|
|||
*/
|
||||
protected function _deliverAsset($assetFile, $ext) {
|
||||
$ob = @ini_get("zlib.output_compression") !== '1' && extension_loaded("zlib") && (strpos(env('HTTP_ACCEPT_ENCODING'), 'gzip') !== false);
|
||||
if ($ob && Configure::read('Asset.compress')) {
|
||||
$compressionEnabled = $ob && Configure::read('Asset.compress');
|
||||
if ($compressionEnabled) {
|
||||
ob_start();
|
||||
ob_start('ob_gzhandler');
|
||||
}
|
||||
|
@ -631,11 +632,13 @@ class Dispatcher extends Object {
|
|||
if ($ext === 'css' || $ext === 'js') {
|
||||
include($assetFile);
|
||||
} else {
|
||||
ob_clean();
|
||||
if ($compressionEnabled) {
|
||||
ob_clean();
|
||||
}
|
||||
readfile($assetFile);
|
||||
}
|
||||
|
||||
if (Configure::read('Asset.compress')) {
|
||||
if ($compressionEnabled) {
|
||||
ob_end_flush();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -225,7 +225,7 @@ class CakeSession extends Object {
|
|||
* @return boolean True if session has been started.
|
||||
*/
|
||||
function started() {
|
||||
if (isset($_SESSION) && session_id()) {
|
||||
if (!empty($_SESSION) && session_id()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -729,7 +729,7 @@ class CakeSession extends Object {
|
|||
* Helper function called on write for database sessions.
|
||||
*
|
||||
* @param integer $id ID that uniquely identifies session in database
|
||||
* @param mixed $data The value of the the data to be saved.
|
||||
* @param mixed $data The value of the data to be saved.
|
||||
* @return boolean True for successful write, false otherwise.
|
||||
* @access private
|
||||
*/
|
||||
|
|
|
@ -164,7 +164,7 @@ class AuthComponent extends Object {
|
|||
public $loginRedirect = null;
|
||||
|
||||
/**
|
||||
* The the default action to redirect to after the user is logged out. While AuthComponent does
|
||||
* The default action to redirect to after the user is logged out. While AuthComponent does
|
||||
* not handle post-logout redirection, a redirect URL will be returned from AuthComponent::logout().
|
||||
* Defaults to AuthComponent::$loginAction.
|
||||
*
|
||||
|
|
|
@ -719,7 +719,16 @@ class EmailComponent extends Object{
|
|||
if ($this->delivery == 'mail') {
|
||||
$nl = '';
|
||||
}
|
||||
return mb_encode_mimeheader($subject, $this->charset, 'B', $nl);
|
||||
$internalEncoding = function_exists('mb_internal_encoding');
|
||||
if ($internalEncoding) {
|
||||
$restore = mb_internal_encoding();
|
||||
mb_internal_encoding($this->charset);
|
||||
}
|
||||
$return = mb_encode_mimeheader($subject, $this->charset, 'B', $nl);
|
||||
if ($internalEncoding) {
|
||||
mb_internal_encoding($restore);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -433,7 +433,7 @@ class Controller extends Object {
|
|||
}
|
||||
|
||||
/**
|
||||
* Loads Model classes based on the the uses property
|
||||
* Loads Model classes based on the uses property
|
||||
* see Controller::loadModel(); for more info.
|
||||
* Loads Components and prepares them for initialization.
|
||||
*
|
||||
|
@ -801,6 +801,7 @@ class Controller extends Object {
|
|||
*/
|
||||
public function render($action = null, $layout = null, $file = null) {
|
||||
$this->beforeRender();
|
||||
$this->Component->triggerCallback('beforeRender', $this);
|
||||
|
||||
$viewClass = $this->view;
|
||||
if ($this->view != 'View') {
|
||||
|
@ -809,8 +810,6 @@ class Controller extends Object {
|
|||
App::import('View', $this->view);
|
||||
}
|
||||
|
||||
$this->Component->triggerCallback('beforeRender', $this);
|
||||
|
||||
$this->params['models'] = $this->modelNames;
|
||||
|
||||
$View = new $viewClass($this);
|
||||
|
|
|
@ -194,7 +194,10 @@ class HttpSocket extends CakeSocket {
|
|||
$request['uri'] = null;
|
||||
}
|
||||
$uri = $this->_parseUri($request['uri']);
|
||||
|
||||
$hadAuth = false;
|
||||
if (is_array($uri) && array_key_exists('user', $uri)) {
|
||||
$hadAuth = true;
|
||||
}
|
||||
if (!isset($uri['host'])) {
|
||||
$host = $this->config['host'];
|
||||
}
|
||||
|
@ -202,11 +205,14 @@ class HttpSocket extends CakeSocket {
|
|||
$host = $request['host'];
|
||||
unset($request['host']);
|
||||
}
|
||||
|
||||
$request['uri'] = $this->url($request['uri']);
|
||||
$request['uri'] = $this->_parseUri($request['uri'], true);
|
||||
$this->request = Set::merge($this->request, $this->config['request'], $request);
|
||||
|
||||
if (!$hadAuth && !empty($this->config['request']['auth']['user'])) {
|
||||
$this->request['uri']['user'] = $this->config['request']['auth']['user'];
|
||||
$this->request['uri']['pass'] = $this->config['request']['auth']['pass'];
|
||||
}
|
||||
$this->_configUri($this->request['uri']);
|
||||
|
||||
if (isset($host)) {
|
||||
|
@ -219,7 +225,23 @@ class HttpSocket extends CakeSocket {
|
|||
if (!empty($this->request['cookies'])) {
|
||||
$cookies = $this->buildCookies($this->request['cookies']);
|
||||
}
|
||||
$this->request['header'] = array_merge(array('Host' => $this->request['uri']['host']), $this->request['header']);
|
||||
$Host = $this->request['uri']['host'];
|
||||
$schema = '';
|
||||
$port = 0;
|
||||
if (isset($this->request['uri']['schema'])) {
|
||||
$schema = $this->request['uri']['schema'];
|
||||
}
|
||||
if (isset($this->request['uri']['port'])) {
|
||||
$port = $this->request['uri']['port'];
|
||||
}
|
||||
if (
|
||||
($schema === 'http' && $port != 80) ||
|
||||
($schema === 'https' && $port != 443) ||
|
||||
($port != 80 && $port != 443)
|
||||
) {
|
||||
$Host .= ':' . $port;
|
||||
}
|
||||
$this->request['header'] = array_merge(compact('Host'), $this->request['header']);
|
||||
}
|
||||
|
||||
if (isset($this->request['auth']['user']) && isset($this->request['auth']['pass'])) {
|
||||
|
@ -594,7 +616,6 @@ class HttpSocket extends CakeSocket {
|
|||
if (!isset($uri['host'])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$config = array(
|
||||
'request' => array(
|
||||
'uri' => array_intersect_key($uri, $this->config['request']['uri']),
|
||||
|
@ -1030,7 +1051,6 @@ class HttpSocket extends CakeSocket {
|
|||
if (empty($initalState)) {
|
||||
$initalState = get_class_vars(__CLASS__);
|
||||
}
|
||||
|
||||
if ($full == false) {
|
||||
$this->request = $initalState['request'];
|
||||
$this->response = $initalState['response'];
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
/**
|
||||
* Included libraries.
|
||||
*/
|
||||
App::import('Core', 'l10n');
|
||||
App::import('Core', array('l10n', 'Multibyte'));
|
||||
|
||||
/**
|
||||
* I18n handles translation of Text and time format strings.
|
||||
|
|
|
@ -818,7 +818,7 @@ class DboSource extends DataSource {
|
|||
$db =& $this;
|
||||
}
|
||||
|
||||
if (isset($db)) {
|
||||
if (isset($db) && method_exists($db, 'queryAssociation')) {
|
||||
$stack = array($assoc);
|
||||
$db->queryAssociation($model, $linkModel, $type, $assoc, $assocData, $array, true, $resultSet, $model->recursive - 1, $stack);
|
||||
unset($db);
|
||||
|
@ -1191,10 +1191,10 @@ class DboSource extends DataSource {
|
|||
} elseif (!empty($model->hasMany) && $model->recursive > -1) {
|
||||
$assocFields = $this->fields($model, $model->alias, array("{$model->alias}.{$model->primaryKey}"));
|
||||
$passedFields = $this->fields($model, $model->alias, $queryData['fields']);
|
||||
|
||||
if (count($passedFields) === 1) {
|
||||
$match = strpos($passedFields[0], $assocFields[0]);
|
||||
$match1 = strpos($passedFields[0], 'COUNT(');
|
||||
$match1 = (bool)preg_match('/^[a-z]+\(/i', $passedFields[0]);
|
||||
|
||||
if ($match === false && $match1 === false) {
|
||||
$queryData['fields'] = array_merge($passedFields, $assocFields);
|
||||
} else {
|
||||
|
|
|
@ -383,7 +383,7 @@ class Model extends Object {
|
|||
*
|
||||
* ### Dynamically creating models
|
||||
*
|
||||
* You can dynamically create model instances using the the $id array syntax.
|
||||
* You can dynamically create model instances using the $id array syntax.
|
||||
*
|
||||
* {{{
|
||||
* $Post = new Model(array('table' => 'posts', 'name' => 'Post', 'ds' => 'connection2'));
|
||||
|
@ -596,10 +596,9 @@ class Model extends Object {
|
|||
*/
|
||||
function bindModel($params, $reset = true) {
|
||||
foreach ($params as $assoc => $model) {
|
||||
if ($reset === true) {
|
||||
if ($reset === true && !isset($this->__backAssociation[$assoc])) {
|
||||
$this->__backAssociation[$assoc] = $this->{$assoc};
|
||||
}
|
||||
|
||||
foreach ($model as $key => $value) {
|
||||
$assocName = $key;
|
||||
|
||||
|
@ -612,6 +611,9 @@ class Model extends Object {
|
|||
if (property_exists($this, $assocName)) {
|
||||
unset($this->{$assocName});
|
||||
}
|
||||
if ($reset === false && isset($this->__backAssociation[$assoc])) {
|
||||
$this->__backAssociation[$assoc][$assocName] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->__createLinks();
|
||||
|
@ -639,14 +641,14 @@ class Model extends Object {
|
|||
*/
|
||||
function unbindModel($params, $reset = true) {
|
||||
foreach ($params as $assoc => $models) {
|
||||
if ($reset === true) {
|
||||
if ($reset === true && !isset($this->__backAssociation[$assoc])) {
|
||||
$this->__backAssociation[$assoc] = $this->{$assoc};
|
||||
}
|
||||
|
||||
foreach ($models as $model) {
|
||||
$this->__backAssociation = array_merge($this->__backAssociation, $this->{$assoc});
|
||||
unset ($this->__backAssociation[$model]);
|
||||
unset ($this->{$assoc}[$model]);
|
||||
if ($reset === false && isset($this->__backAssociation[$assoc][$model])) {
|
||||
unset($this->__backAssociation[$assoc][$model]);
|
||||
}
|
||||
unset($this->{$assoc}[$model]);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@ -2355,9 +2357,9 @@ class Model extends Object {
|
|||
}
|
||||
|
||||
/**
|
||||
* Called only when bindTo<ModelName>() is used.
|
||||
* This resets the association arrays for the model back
|
||||
* to those originally defined in the model.
|
||||
* to those originally defined in the model. Normally called at the end
|
||||
* of each call to Model::find()
|
||||
*
|
||||
* @return boolean Success
|
||||
*/
|
||||
|
|
4
cake/libs/view/helpers/form.php
Executable file → Normal file
4
cake/libs/view/helpers/form.php
Executable file → Normal file
|
@ -258,7 +258,7 @@ class FormHelper extends AppHelper {
|
|||
0 => $id
|
||||
);
|
||||
if (!empty($options['action']) && !isset($options['id'])) {
|
||||
$options['id'] = $model . Inflector::camelize($options['action']) . 'Form';
|
||||
$options['id'] = $this->domId($options['action'] . 'Form');
|
||||
}
|
||||
$options['action'] = array_merge($actionDefaults, (array)$options['url']);
|
||||
} elseif (is_string($options['url'])) {
|
||||
|
@ -2158,7 +2158,7 @@ class FormHelper extends AppHelper {
|
|||
*
|
||||
* Options
|
||||
*
|
||||
* - `secure` - boolean whether or not the the field should be added to the security fields.
|
||||
* - `secure` - boolean whether or not the field should be added to the security fields.
|
||||
*
|
||||
* @param string $field Name of the field to initialize options for.
|
||||
* @param array $options Array of options to append options into.
|
||||
|
|
|
@ -21,7 +21,7 @@ if (Configure::read() == 0):
|
|||
endif;
|
||||
?>
|
||||
<h2><?php echo sprintf(__('Release Notes for CakePHP %s.', true), Configure::version()); ?></h2>
|
||||
<a href="http://cakephp.lighthouseapp.com/projects/42648/changelog-1-3-2"><?php __('Read the changelog'); ?> </a>
|
||||
<a href="http://cakephp.lighthouseapp.com/projects/42648/changelog-1-3-3"><?php __('Read the changelog'); ?> </a>
|
||||
<?php
|
||||
if (Configure::read() > 0):
|
||||
Debugger::checkSecurityKeys();
|
||||
|
|
|
@ -356,6 +356,7 @@ class SchemaShellTest extends CakeTestCase {
|
|||
$file = new File(TMP . 'tests' . DS . 'schema.php');
|
||||
$contents = $file->read();
|
||||
|
||||
$this->assertPattern('/class TestPluginSchema/', $contents);
|
||||
$this->assertPattern('/var \$posts/', $contents);
|
||||
$this->assertPattern('/var \$auth_users/', $contents);
|
||||
$this->assertPattern('/var \$authors/', $contents);
|
||||
|
|
|
@ -260,6 +260,10 @@ class CakeSessionTest extends CakeTestCase {
|
|||
$this->Session->destroy();
|
||||
$this->assertFalse($this->Session->check('bulletProof'));
|
||||
$this->assertNotEqual($id, $this->Session->id());
|
||||
|
||||
$this->Session->cookieLifeTime = 'test';
|
||||
$this->Session->destroy();
|
||||
$this->assertNotEqual('test', $this->Session->cookieLifeTime);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -864,7 +864,38 @@ HTMLBLOC;
|
|||
$result = $this->Controller->EmailTest->strip($content, true);
|
||||
$expected = $content;
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test that the _encode() will set mb_internal_encoding.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function test_encodeSettingInternalCharset() {
|
||||
$skip = !function_exists('mb_internal_encoding');
|
||||
if ($this->skipIf($skip, 'Missing mb_* functions, cannot run test.')) {
|
||||
return;
|
||||
}
|
||||
mb_internal_encoding('ISO-8859-1');
|
||||
|
||||
$this->Controller->charset = 'UTF-8';
|
||||
$this->Controller->EmailTest->to = 'postmaster@localhost';
|
||||
$this->Controller->EmailTest->from = 'noreply@example.com';
|
||||
$this->Controller->EmailTest->subject = 'هذه رسالة بعنوان طويل مرسل للمستلم';
|
||||
$this->Controller->EmailTest->replyTo = 'noreply@example.com';
|
||||
$this->Controller->EmailTest->template = null;
|
||||
$this->Controller->EmailTest->delivery = 'debug';
|
||||
|
||||
$this->Controller->EmailTest->sendAs = 'text';
|
||||
$this->assertTrue($this->Controller->EmailTest->send('This is the body of the message'));
|
||||
|
||||
$subject = '=?UTF-8?B?2YfYsNmHINix2LPYp9mE2Kkg2KjYudmG2YjYp9mGINi32YjZitmEINmF2LE=?=' . "\r\n" . ' =?UTF-8?B?2LPZhCDZhNmE2YXYs9iq2YTZhQ==?=';
|
||||
|
||||
preg_match('/Subject: (.*)Header:/s', $this->Controller->Session->read('Message.email.message'), $matches);
|
||||
$this->assertEqual(trim($matches[1]), $subject);
|
||||
|
||||
$result = mb_internal_encoding();
|
||||
$this->assertEqual($result, 'ISO-8859-1');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -874,6 +905,7 @@ HTMLBLOC;
|
|||
* @return void
|
||||
*/
|
||||
function testMultibyte() {
|
||||
$this->Controller->charset = 'UTF-8';
|
||||
$this->Controller->EmailTest->to = 'postmaster@localhost';
|
||||
$this->Controller->EmailTest->from = 'noreply@example.com';
|
||||
$this->Controller->EmailTest->subject = 'هذه رسالة بعنوان طويل مرسل للمستلم';
|
||||
|
|
|
@ -347,38 +347,37 @@ class SessionComponentTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
function testSessionTimeout() {
|
||||
Configure::write('debug', 2);
|
||||
Configure::write('Security.level', 'low');
|
||||
|
||||
session_destroy();
|
||||
Configure::write('Security.level', 'low');
|
||||
$Session = new SessionComponent();
|
||||
$Session =& new SessionComponent();
|
||||
$Session->destroy();
|
||||
$Session->write('Test', 'some value');
|
||||
|
||||
$this->assertEqual($Session->sessionTime, mktime() + (300 * Configure::read('Session.timeout')));
|
||||
$this->assertEqual($Session->sessionTime, time() + (300 * Configure::read('Session.timeout')));
|
||||
$this->assertEqual($_SESSION['Config']['timeout'], 10);
|
||||
$this->assertEqual($_SESSION['Config']['time'], $Session->sessionTime);
|
||||
$this->assertEqual($Session->time, mktime());
|
||||
$this->assertEqual($_SESSION['Config']['time'], $Session->time + (Security::inactiveMins() * Configure::read('Session.timeout')));
|
||||
$this->assertEqual($Session->time, time());
|
||||
$this->assertEqual($_SESSION['Config']['time'], $Session->time + (300 * Configure::read('Session.timeout')));
|
||||
|
||||
session_destroy();
|
||||
Configure::write('Security.level', 'medium');
|
||||
$Session = new SessionComponent();
|
||||
$Session =& new SessionComponent();
|
||||
$Session->destroy();
|
||||
$Session->write('Test', 'some value');
|
||||
$this->assertEqual($Session->sessionTime, mktime() + (100 * Configure::read('Session.timeout')));
|
||||
$this->assertEqual($_SESSION['Config']['timeout'], 10);
|
||||
$this->assertEqual($_SESSION['Config']['time'], $Session->sessionTime);
|
||||
$this->assertEqual($Session->time, mktime());
|
||||
$this->assertEqual($Session->time, time());
|
||||
$this->assertEqual($_SESSION['Config']['time'], $Session->time + (Security::inactiveMins() * Configure::read('Session.timeout')));
|
||||
|
||||
|
||||
session_destroy();
|
||||
Configure::write('Security.level', 'high');
|
||||
$Session = new SessionComponent();
|
||||
$Session =& new SessionComponent();
|
||||
$Session->destroy();
|
||||
$Session->write('Test', 'some value');
|
||||
$this->assertEqual($Session->sessionTime, mktime() + (10 * Configure::read('Session.timeout')));
|
||||
$this->assertEqual($Session->sessionTime, time() + (10 * Configure::read('Session.timeout')));
|
||||
$this->assertEqual($_SESSION['Config']['timeout'], 10);
|
||||
$this->assertEqual($_SESSION['Config']['time'], $Session->sessionTime);
|
||||
$this->assertEqual($Session->time, mktime());
|
||||
$this->assertEqual($Session->time, time());
|
||||
$this->assertEqual($_SESSION['Config']['time'], $Session->time + (Security::inactiveMins() * Configure::read('Session.timeout')));
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -390,6 +390,16 @@ class TestComponent extends Object {
|
|||
*/
|
||||
function shutdown(&$controller) {
|
||||
}
|
||||
/**
|
||||
* beforeRender callback
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function beforeRender(&$controller) {
|
||||
if ($this->viewclass) {
|
||||
$controller->view = $this->viewclass;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -924,6 +934,31 @@ class ControllerTest extends CakeTestCase {
|
|||
App::build();
|
||||
}
|
||||
|
||||
/**
|
||||
* test that a component beforeRender can change the controller view class.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testComponentBeforeRenderChangingViewClass() {
|
||||
$core = App::core('views');
|
||||
App::build(array(
|
||||
'views' => array(
|
||||
TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS,
|
||||
$core[0]
|
||||
)
|
||||
), true);
|
||||
$Controller =& new Controller();
|
||||
$Controller->uses = array();
|
||||
$Controller->components = array('Test');
|
||||
$Controller->constructClasses();
|
||||
$Controller->Test->viewclass = 'Theme';
|
||||
$Controller->viewPath = 'posts';
|
||||
$Controller->theme = 'test_theme';
|
||||
$result = $Controller->render('index');
|
||||
$this->assertPattern('/default test_theme layout/', $result);
|
||||
App::build();
|
||||
}
|
||||
|
||||
/**
|
||||
* testToBeInheritedGuardmethods method
|
||||
*
|
||||
|
|
|
@ -454,6 +454,25 @@ class HttpSocketTest extends CakeTestCase {
|
|||
)
|
||||
)
|
||||
, 9 => array(
|
||||
'request' => array('method' => 'POST', 'uri' => 'http://www.cakephp.org:8080/posts/add', 'body' => array('name' => 'HttpSocket-is-released', 'date' => 'today'))
|
||||
, 'expectation' => array(
|
||||
'config' => array(
|
||||
'port' => 8080
|
||||
, 'request' => array(
|
||||
'uri' => array(
|
||||
'port' => 8080
|
||||
)
|
||||
)
|
||||
)
|
||||
, 'request' => array(
|
||||
'uri' => array(
|
||||
'port' => 8080
|
||||
)
|
||||
, 'header' => "Host: www.cakephp.org:8080\r\nConnection: close\r\nUser-Agent: CakePHP\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: 38\r\n"
|
||||
)
|
||||
)
|
||||
)
|
||||
, 10 => array(
|
||||
'request' => array('method' => 'POST', 'uri' => 'https://www.cakephp.org/posts/add', 'body' => array('name' => 'HttpSocket-is-released', 'date' => 'today'))
|
||||
, 'expectation' => array(
|
||||
'config' => array(
|
||||
|
@ -470,10 +489,11 @@ class HttpSocketTest extends CakeTestCase {
|
|||
'scheme' => 'https'
|
||||
, 'port' => 443
|
||||
)
|
||||
, 'header' => "Host: www.cakephp.org\r\nConnection: close\r\nUser-Agent: CakePHP\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: 38\r\n"
|
||||
)
|
||||
)
|
||||
)
|
||||
, 10 => array(
|
||||
, 11 => array(
|
||||
'request' => array(
|
||||
'method' => 'POST',
|
||||
'uri' => 'https://www.cakephp.org/posts/add',
|
||||
|
@ -659,6 +679,31 @@ class HttpSocketTest extends CakeTestCase {
|
|||
$this->RequestSocket->get('http://www.google.com/', null, array('auth' => array('user' => 'foo', 'pass' => 'bar')));
|
||||
}
|
||||
|
||||
/**
|
||||
* test that two consecutive get() calls reset the authentication credentials.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testConsecutiveGetResetsAuthCredentials() {
|
||||
$socket = new MockHttpSocket();
|
||||
$socket->config['request']['auth'] = array(
|
||||
'method' => 'Basic',
|
||||
'user' => 'mark',
|
||||
'pass' => 'secret'
|
||||
);
|
||||
$socket->get('http://mark:secret@example.com/test');
|
||||
$this->assertEqual($socket->request['uri']['user'], 'mark');
|
||||
$this->assertEqual($socket->request['uri']['pass'], 'secret');
|
||||
|
||||
$socket->get('/test2');
|
||||
$this->assertEqual($socket->request['auth']['user'], 'mark');
|
||||
$this->assertEqual($socket->request['auth']['pass'], 'secret');
|
||||
|
||||
$socket->get('/test3');
|
||||
$this->assertEqual($socket->request['auth']['user'], 'mark');
|
||||
$this->assertEqual($socket->request['auth']['pass'], 'secret');
|
||||
}
|
||||
|
||||
/**
|
||||
* testPostPutDelete method
|
||||
*
|
||||
|
|
|
@ -1339,6 +1339,7 @@ class DboSourceTest extends CakeTestCase {
|
|||
function endTest() {
|
||||
unset($this->Model);
|
||||
Configure::write('debug', $this->debug);
|
||||
ClassRegistry::flush();
|
||||
unset($this->debug);
|
||||
}
|
||||
|
||||
|
@ -2043,6 +2044,28 @@ class DboSourceTest extends CakeTestCase {
|
|||
unset($this->Model->hasMany['TestModel6']['fields']);
|
||||
}
|
||||
|
||||
/**
|
||||
* test generateAssociationQuery with a hasMany and an aggregate function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testGenerateAssociationQueryHasManyAndAggregateFunction() {
|
||||
$this->Model =& new TestModel5();
|
||||
$this->Model->schema();
|
||||
$this->_buildRelatedModels($this->Model);
|
||||
|
||||
$binding = array('type' => 'hasMany', 'model' => 'TestModel6');
|
||||
$queryData = array('fields' => array('MIN(TestModel5.test_model4_id)'));
|
||||
$resultSet = null;
|
||||
$null = null;
|
||||
|
||||
$params = &$this->_prepareAssociationQuery($this->Model, $queryData, $binding);
|
||||
$this->Model->recursive = 0;
|
||||
|
||||
$result = $this->testDb->generateAssociationQuery($this->Model, $null, $params['type'], $params['assoc'], $params['assocData'], $queryData, false, $resultSet);
|
||||
$this->assertPattern('/^SELECT\s+MIN\(`TestModel5`\.`test_model4_id`\)\s+FROM/', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testGenerateAssociationQueryHasAndBelongsToMany method
|
||||
*
|
||||
|
@ -4440,4 +4463,19 @@ class DboSourceTest extends CakeTestCase {
|
|||
$result = $this->testDb->fullTableName($Article, false);
|
||||
$this->assertEqual($result, 'tbl_articles');
|
||||
}
|
||||
|
||||
/**
|
||||
* test that read() only calls queryAssociation on db objects when the method is defined.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testReadOnlyCallingQueryAssociationWhenDefined() {
|
||||
ConnectionManager::create('test_no_queryAssociation', array(
|
||||
'datasource' => 'data'
|
||||
));
|
||||
$Article =& ClassRegistry::init('Article');
|
||||
$Article->Comment->useDbConfig = 'test_no_queryAssociation';
|
||||
$result = $Article->find('all');
|
||||
$this->assertTrue(is_array($result));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4737,6 +4737,57 @@ class ModelReadTest extends BaseModelTest {
|
|||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test that multiple reset = true calls to bindModel() result in the original associations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testBindModelMultipleTimesResetCorrectly() {
|
||||
$this->loadFixtures('User', 'Comment', 'Article');
|
||||
$TestModel =& new User();
|
||||
|
||||
$TestModel->bindModel(array('hasMany' => array('Comment')));
|
||||
$TestModel->bindModel(array('hasMany' => array('Comment')));
|
||||
$TestModel->resetAssociations();
|
||||
|
||||
$this->assertFalse(isset($TestModel->hasMany['Comment']), 'Association left behind');
|
||||
}
|
||||
|
||||
/**
|
||||
* testBindMultipleTimes method with different reset settings
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testBindMultipleTimesWithDifferentResetSettings() {
|
||||
$this->loadFixtures('User', 'Comment', 'Article');
|
||||
$TestModel =& new User();
|
||||
|
||||
$result = $TestModel->hasMany;
|
||||
$expected = array();
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $TestModel->bindModel(array(
|
||||
'hasMany' => array('Comment')
|
||||
));
|
||||
$this->assertTrue($result);
|
||||
$result = $TestModel->bindModel(
|
||||
array('hasMany' => array('Article')),
|
||||
false
|
||||
);
|
||||
$this->assertTrue($result);
|
||||
|
||||
$result = array_keys($TestModel->hasMany);
|
||||
$expected = array('Comment', 'Article');
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$TestModel->resetAssociations();
|
||||
|
||||
$result = array_keys($TestModel->hasMany);
|
||||
$expected = array('Article');
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test that bindModel behaves with Custom primary Key associations
|
||||
*
|
||||
|
@ -4756,6 +4807,58 @@ class ModelReadTest extends BaseModelTest {
|
|||
$this->assertFalse(empty($result));
|
||||
}
|
||||
|
||||
/**
|
||||
* test that calling unbindModel() with reset == true multiple times
|
||||
* leaves associations in the correct state.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testUnbindMultipleTimesResetCorrectly() {
|
||||
$this->loadFixtures('User', 'Comment', 'Article');
|
||||
$TestModel =& new Article10();
|
||||
|
||||
$TestModel->unbindModel(array('hasMany' => array('Comment')));
|
||||
$TestModel->unbindModel(array('hasMany' => array('Comment')));
|
||||
$TestModel->resetAssociations();
|
||||
|
||||
$this->assertTrue(isset($TestModel->hasMany['Comment']), 'Association permanently removed');
|
||||
}
|
||||
|
||||
/**
|
||||
* testBindMultipleTimes method with different reset settings
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testUnBindMultipleTimesWithDifferentResetSettings() {
|
||||
$this->loadFixtures('User', 'Comment', 'Article');
|
||||
$TestModel =& new Comment();
|
||||
|
||||
$result = array_keys($TestModel->belongsTo);
|
||||
$expected = array('Article', 'User');
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $TestModel->unbindModel(array(
|
||||
'belongsTo' => array('User')
|
||||
));
|
||||
$this->assertTrue($result);
|
||||
$result = $TestModel->unbindModel(
|
||||
array('belongsTo' => array('Article')),
|
||||
false
|
||||
);
|
||||
$this->assertTrue($result);
|
||||
|
||||
$result = array_keys($TestModel->belongsTo);
|
||||
$expected = array();
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$TestModel->resetAssociations();
|
||||
|
||||
$result = array_keys($TestModel->belongsTo);
|
||||
$expected = array('User');
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testAssociationAfterFind method
|
||||
*
|
||||
|
@ -6422,6 +6525,18 @@ class ModelReadTest extends BaseModelTest {
|
|||
4 => 'garrett (CakePHP)'
|
||||
);
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$TestModel =& new Article();
|
||||
$TestModel->displayField = 'title';
|
||||
$result = $TestModel->find('list', array(
|
||||
'conditions' => array('User.user' => 'mariano'),
|
||||
'recursive' => 0
|
||||
));
|
||||
$expected = array(
|
||||
1 => 'First Article',
|
||||
3 => 'Third Article'
|
||||
);
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1558,7 +1558,7 @@ class ModelWriteTest extends BaseModelTest {
|
|||
}
|
||||
|
||||
/**
|
||||
* test that saving habtm records respects conditions set in the the 'conditions' key
|
||||
* test that saving habtm records respects conditions set in the 'conditions' key
|
||||
* for the association.
|
||||
*
|
||||
* @return void
|
||||
|
|
|
@ -181,6 +181,29 @@ class SanitizeTest extends CakeTestCase {
|
|||
$expected = '';
|
||||
$result = Sanitize::clean($string);
|
||||
$this->assertEqual($string, $expected);
|
||||
|
||||
$data = array(
|
||||
'Grant' => array(
|
||||
'title' => '2 o clock grant',
|
||||
'grant_peer_review_id' => 3,
|
||||
'institution_id' => 5,
|
||||
'created_by' => 1,
|
||||
'modified_by' => 1,
|
||||
'created' => '2010-07-15 14:11:00',
|
||||
'modified' => '2010-07-19 10:45:41'
|
||||
),
|
||||
'GrantsMember' => array(
|
||||
0 => array(
|
||||
'id' => 68,
|
||||
'grant_id' => 120,
|
||||
'member_id' => 16,
|
||||
'program_id' => 29,
|
||||
'pi_percent_commitment' => 1
|
||||
)
|
||||
)
|
||||
);
|
||||
$result = Sanitize::clean($data);
|
||||
$this->assertEqual($result, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue