mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 03:18:26 +00:00
Merging fixes and enhancements into trunk
Revision: [1985] Changed DboSource?::order() to allow passing an array in the order param Revision: [1984] Reverting changes from [1983] Revision: [1983] Merging change from [1966] and [1967] Revision: [1982] Adding fix for DboSource::order(). This allows setting the order in the find methods. Revision: [1981] cleaned up code Revision: [1980] Corrected the array keys in the regex I added Revision: [1979] Added check to DboMysql::value() that does not add quotes around a numerical value. Refactored DboSource::conditions() adding better regex. Revision: [1978] Added check for LIKE in a condition array this fixes the = being added. Revision: [1977] Added fix for Ticket #392 Revision: [1976] Adding changes suggested in Ticket #381. These have not been fully tested. Revision: [1975] Added fix for Ticket #391 Revision: [1974] Added patch from Ticket #390 Revision: [1973] Adding patch from Ticket #386 Revision: [1972] Added patch from Ticket #385. Changed wording of a comment. Revision: [1971] Added patch from Ticket #383 Revision: [1970] Adding fix for Ticket #395 Revision: [1969] Adding more detailed comment to path defines Revision: [1968] Making a few more changes to the path settings Revision: [1965] fixing path issue with loading PagesController Revision: [1964] Added model method for getting column types by field Revision: [1963] Corrected paths to the tmp directory. Making a few more changes to the defines in index.php Revision: [1962] Moving tmp directory to app Revision: [1961] Starting separation of core from the application. Revision: [1960] Adding vendors directory to app directory Revision: [1959] Finished support for recursive associations. Still needs some testing... Revision: [1958] Adding fix for Ticket #387, and automagic id's for form inputs Revision: [1957] Revision: [1956] Adding fix for error reported in Google Group: http://groups.google.com/group/cake-php/browse_thread/thread/395593a3cea34174 Revision: [1955] Adding fix for Controller::referer() git-svn-id: https://svn.cakephp.org/repo/trunk/cake@1986 3807eeeb-6ff5-0310-8944-8be069107fe0
This commit is contained in:
parent
40f3a01d1e
commit
818806195f
18 changed files with 347 additions and 221 deletions
|
@ -6,4 +6,4 @@
|
||||||
// +---------------------------------------------------------------------------------------------------+ //
|
// +---------------------------------------------------------------------------------------------------+ //
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
0.10.8.1954
|
0.10.8.1986
|
|
@ -28,28 +28,50 @@
|
||||||
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
|
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Cake's root directory
|
* These defines should only be edited if you have cake installed in
|
||||||
|
* a directory layout other than the way it is distributed.
|
||||||
|
* Each define has a commented line of code that explains what you would change.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
if (!defined('DS'))
|
|
||||||
{
|
|
||||||
define('DS', DIRECTORY_SEPARATOR);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!defined('ROOT'))
|
if (!defined('ROOT'))
|
||||||
{
|
{
|
||||||
define('ROOT', dirname(dirname(dirname(__FILE__))).DS);
|
//define('ROOT', 'FULL PATH TO DIRECTORY WHERE APP DIRECTORY IS LOCATED DO NOT ADD A TRAILING DIRECTORY SEPARATOR';
|
||||||
|
define('ROOT', dirname(dirname(dirname(__FILE__))));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!defined('APP_DIR'))
|
if (!defined('APP_DIR'))
|
||||||
{
|
{
|
||||||
|
//define('APP_DIR', 'DIRECTORY NAME OF APPLICATION';
|
||||||
define ('APP_DIR', basename(dirname(dirname(__FILE__))));
|
define ('APP_DIR', basename(dirname(dirname(__FILE__))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This only needs to be changed if the cake installed libs are located
|
||||||
|
* outside of the distributed directory structure.
|
||||||
|
*/
|
||||||
|
if (!defined('CAKE_CORE_INCLUDE_PATH'))
|
||||||
|
{
|
||||||
|
//define ('CAKE_CORE_INCLUDE_PATH', FULL PATH TO DIRECTORY WHERE CAKE CORE IS INSTALLED DO NOT ADD A TRAILING DIRECTORY SEPARATOR';
|
||||||
|
define('CAKE_CORE_INCLUDE_PATH', ROOT);
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////
|
||||||
|
//DO NOT EDIT BELOW THIS LINE//
|
||||||
|
///////////////////////////////
|
||||||
|
if (!defined('DS'))
|
||||||
|
{
|
||||||
|
define('DS', DIRECTORY_SEPARATOR);
|
||||||
|
}
|
||||||
|
|
||||||
if (!defined('WEBROOT_DIR'))
|
if (!defined('WEBROOT_DIR'))
|
||||||
{
|
{
|
||||||
define ('WEBROOT_DIR', basename(dirname(__FILE__)));
|
define ('WEBROOT_DIR', basename(dirname(__FILE__)));
|
||||||
}
|
}
|
||||||
require_once ROOT.'cake'.DS.'bootstrap.php';
|
|
||||||
|
ini_set('include_path',ini_get('include_path').PATH_SEPARATOR.CAKE_CORE_INCLUDE_PATH.PATH_SEPARATOR.ROOT.DS.APP_DIR.DS);
|
||||||
|
|
||||||
|
|
||||||
|
require_once 'cake'.DS.'bootstrap.php';
|
||||||
?>
|
?>
|
|
@ -247,15 +247,16 @@ function loadController ($name)
|
||||||
{
|
{
|
||||||
$controller_fn = CONTROLLERS.$name.'_controller.php';
|
$controller_fn = CONTROLLERS.$name.'_controller.php';
|
||||||
}
|
}
|
||||||
elseif(file_exists(LIBS.'controller'.DS.$name.'_controller.php'))
|
elseif($controller_fn = fileExistsInPath(LIBS.'controller'.DS.$name.'_controller.php'))
|
||||||
{
|
{
|
||||||
$controller_fn = LIBS.'controller'.DS.$name.'_controller.php';
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$controller_fn = false;
|
return false;
|
||||||
}
|
}
|
||||||
return file_exists($controller_fn)? require_once($controller_fn): false;
|
require_once($controller_fn);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -302,6 +303,10 @@ function loadPluginController ($plugin, $controller)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -915,4 +920,18 @@ function LogError ($message)
|
||||||
CakeLog::write('error', str_replace($bad, $good, $message));
|
CakeLog::write('error', str_replace($bad, $good, $message));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function fileExistsInPath ($file)
|
||||||
|
{
|
||||||
|
$paths = explode(PATH_SEPARATOR, get_include_path());
|
||||||
|
foreach ($paths as $path)
|
||||||
|
{
|
||||||
|
$fullPath = $path . DIRECTORY_SEPARATOR . $file;
|
||||||
|
if (file_exists($fullPath))
|
||||||
|
{
|
||||||
|
return $fullPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
?>
|
?>
|
|
@ -33,9 +33,9 @@
|
||||||
/**
|
/**
|
||||||
* Configuration, directory layout and standard libraries
|
* Configuration, directory layout and standard libraries
|
||||||
*/
|
*/
|
||||||
require_once ROOT.'cake'.DS.'basics.php';
|
require_once 'cake'.DS.'basics.php';
|
||||||
require_once ROOT.APP_DIR.DS.'config'.DS.'core.php';
|
require_once ROOT.DS.APP_DIR.DS.'config'.DS.'core.php';
|
||||||
require_once ROOT.'cake'.DS.'config'.DS.'paths.php';
|
require_once 'cake'.DS.'config'.DS.'paths.php';
|
||||||
require_once LIBS.'object.php';
|
require_once LIBS.'object.php';
|
||||||
require_once LIBS.'session.php';
|
require_once LIBS.'session.php';
|
||||||
require_once LIBS.'security.php';
|
require_once LIBS.'security.php';
|
||||||
|
|
|
@ -36,65 +36,65 @@
|
||||||
*/
|
*/
|
||||||
if(!defined('ROOT'))
|
if(!defined('ROOT'))
|
||||||
{
|
{
|
||||||
define ('ROOT', '../');
|
define ('ROOT', '../');
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!defined('WEBROOT_DIR'))
|
if(!defined('WEBROOT_DIR'))
|
||||||
{
|
{
|
||||||
define ('WEBROOT_DIR', 'webroot');
|
define ('WEBROOT_DIR', 'webroot');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the application's directory.
|
* Path to the application's directory.
|
||||||
*/
|
*/
|
||||||
define ('CAKE', ROOT.'cake'.DS);
|
define ('CAKE', 'cake'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the application's directory.
|
* Path to the application's directory.
|
||||||
*/
|
*/
|
||||||
define ('APP', ROOT.APP_DIR.DS);
|
define ('APP', ROOT.DS.APP_DIR.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the application's models directory.
|
* Path to the application's models directory.
|
||||||
*/
|
*/
|
||||||
define ('MODELS', APP.'models'.DS);
|
define ('MODELS', APP.'models'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the application's controllers directory.
|
* Path to the application's controllers directory.
|
||||||
*/
|
*/
|
||||||
define ('CONTROLLERS', APP.'controllers'.DS);
|
define ('CONTROLLERS', APP.'controllers'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the application's controllers directory.
|
* Path to the application's controllers directory.
|
||||||
*/
|
*/
|
||||||
define ('COMPONENTS', CONTROLLERS.'components'.DS);
|
define ('COMPONENTS', CONTROLLERS.'components'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the application's views directory.
|
* Path to the application's views directory.
|
||||||
*/
|
*/
|
||||||
define ('VIEWS', APP.'views'.DS);
|
define ('VIEWS', APP.'views'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the application's helpers directory.
|
* Path to the application's helpers directory.
|
||||||
*/
|
*/
|
||||||
define ('HELPERS', VIEWS.'helpers'.DS);
|
define ('HELPERS', VIEWS.'helpers'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the application's view's layouts directory.
|
* Path to the application's view's layouts directory.
|
||||||
*/
|
*/
|
||||||
define ('LAYOUTS', VIEWS.'layouts'.DS);
|
define ('LAYOUTS', VIEWS.'layouts'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the application's view's elements directory.
|
* Path to the application's view's elements directory.
|
||||||
* It's supposed to hold pieces of PHP/HTML that are used on multiple pages
|
* It's supposed to hold pieces of PHP/HTML that are used on multiple pages
|
||||||
* and are not linked to a particular layout (like polls, footers and so on).
|
* and are not linked to a particular layout (like polls, footers and so on).
|
||||||
*/
|
*/
|
||||||
define ('ELEMENTS', VIEWS.'elements'.DS);
|
define ('ELEMENTS', VIEWS.'elements'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the configuration files directory.
|
* Path to the configuration files directory.
|
||||||
*/
|
*/
|
||||||
define ('CONFIGS', APP.'config'.DS);
|
define ('CONFIGS', APP.'config'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the libs directory.
|
* Path to the libs directory.
|
||||||
|
@ -104,67 +104,67 @@ define ('INFLECTIONS', CAKE.'config'.DS.'inflections'.DS);
|
||||||
/**
|
/**
|
||||||
* Path to the libs directory.
|
* Path to the libs directory.
|
||||||
*/
|
*/
|
||||||
define ('LIBS', CAKE.'libs'.DS);
|
define ('LIBS', CAKE.'libs'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the logs directory.
|
* Path to the logs directory.
|
||||||
*/
|
*/
|
||||||
define ('LOGS', ROOT.'logs'.DS);
|
define ('LOGS', ROOT.DS.'logs'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the modules directory.
|
* Path to the modules directory.
|
||||||
*/
|
*/
|
||||||
define ('MODULES', ROOT.'modules'.DS);
|
define ('MODULES', ROOT.DS.'modules'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the public directory.
|
* Path to the public directory.
|
||||||
*/
|
*/
|
||||||
define ('WWW_ROOT', APP.WEBROOT_DIR.DS);
|
define ('WWW_ROOT', APP.WEBROOT_DIR.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the public directory.
|
* Path to the public directory.
|
||||||
*/
|
*/
|
||||||
define ('CSS', WWW_ROOT.'css'.DS);
|
define ('CSS', WWW_ROOT.'css'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the public directory.
|
* Path to the public directory.
|
||||||
*/
|
*/
|
||||||
define ('JS', WWW_ROOT.'js'.DS);
|
define ('JS', WWW_ROOT.'js'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the scripts direcotry.
|
* Path to the scripts direcotry.
|
||||||
*/
|
*/
|
||||||
define('SCRIPTS', CAKE.'scripts'.DS);
|
define('SCRIPTS', CAKE.'scripts'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the tests directory.
|
* Path to the tests directory.
|
||||||
*/
|
*/
|
||||||
define ('TESTS', ROOT.'tests'.DS);
|
define ('TESTS', ROOT.DS.'tests'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the controller test directory.
|
* Path to the controller test directory.
|
||||||
*/
|
*/
|
||||||
define ('CONTROLLER_TESTS',TESTS.APP_DIR.DS.'controllers'.DS);
|
define ('CONTROLLER_TESTS', TESTS.APP_DIR.DS.'controllers'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the helpers test directory.
|
* Path to the helpers test directory.
|
||||||
*/
|
*/
|
||||||
define ('HELPER_TESTS', TESTS.APP_DIR.DS.'helpers'.DS);
|
define ('HELPER_TESTS', TESTS.APP_DIR.DS.'helpers'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the models' test directory.
|
* Path to the models' test directory.
|
||||||
*/
|
*/
|
||||||
define ('MODEL_TESTS', TESTS.APP_DIR.DS.'models'.DS);
|
define ('MODEL_TESTS', TESTS.APP_DIR.DS.'models'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the lib test directory.
|
* Path to the lib test directory.
|
||||||
*/
|
*/
|
||||||
define ('LIB_TESTS', TESTS.'libs'.DS);
|
define ('LIB_TESTS', TESTS.'libs'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the temporary files directory.
|
* Path to the temporary files directory.
|
||||||
*/
|
*/
|
||||||
define ('TMP', ROOT.'tmp'.DS);
|
define ('TMP', APP.'tmp'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the cache files directory. It can be shared between hosts in a multi-server setup.
|
* Path to the cache files directory. It can be shared between hosts in a multi-server setup.
|
||||||
|
@ -174,14 +174,14 @@ define('CACHE', TMP.'cache'.DS);
|
||||||
/**
|
/**
|
||||||
* Path to the vendors directory.
|
* Path to the vendors directory.
|
||||||
*/
|
*/
|
||||||
define ('VENDORS', ROOT.'vendors'.DS);
|
define ('VENDORS', ROOT.DS.'vendors'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the Pear directory
|
* Path to the Pear directory
|
||||||
* The purporse is to make it easy porting Pear libs into Cake
|
* The purporse is to make it easy porting Pear libs into Cake
|
||||||
* without setting the include_path PHP variable.
|
* without setting the include_path PHP variable.
|
||||||
*/
|
*/
|
||||||
define ('PEAR', VENDORS.'Pear'.DS);
|
define ('PEAR', VENDORS.'Pear'.DS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Full url prefix
|
* Full url prefix
|
||||||
|
@ -203,17 +203,17 @@ unset($httpHost);
|
||||||
/**
|
/**
|
||||||
* Web path to the public images directory.
|
* Web path to the public images directory.
|
||||||
*/
|
*/
|
||||||
define ('IMAGES_URL', 'img/');
|
define ('IMAGES_URL', 'img/');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Web path to the CSS files directory.
|
* Web path to the CSS files directory.
|
||||||
*/
|
*/
|
||||||
define ('CSS_URL', 'css/');
|
define ('CSS_URL', 'css/');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Web path to the js files directory.
|
* Web path to the js files directory.
|
||||||
*/
|
*/
|
||||||
define ('JS_URL', 'js/');
|
define ('JS_URL', 'js/');
|
||||||
|
|
||||||
|
|
||||||
?>
|
?>
|
|
@ -99,9 +99,9 @@ class Component extends Object
|
||||||
{
|
{
|
||||||
$componentFn = COMPONENTS.$componentFn;
|
$componentFn = COMPONENTS.$componentFn;
|
||||||
}
|
}
|
||||||
else if(file_exists(LIBS.'controller'.DS.'components'.DS.$componentFn))
|
else if($componentFn = fileExistsInPath(LIBS.'controller'.DS.'components'.DS.$componentFn))
|
||||||
{
|
{
|
||||||
$componentFn = LIBS.'controller'.DS.'components'.DS.$componentFn;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$componentCn = $component.'Component';
|
$componentCn = $component.'Component';
|
||||||
|
|
|
@ -454,9 +454,9 @@ class Controller extends Object
|
||||||
$ref = env('HTTP_REFERER');
|
$ref = env('HTTP_REFERER');
|
||||||
$base = FULL_BASE_URL . $this->webroot;
|
$base = FULL_BASE_URL . $this->webroot;
|
||||||
|
|
||||||
if ($ref != null && defined(FULL_BASE_URL))
|
if ($ref != null && (defined(FULL_BASE_URL) || FULL_BASE_URL))
|
||||||
{
|
{
|
||||||
if (strpos(env('HTTP_REFERER'), $base) == 0)
|
if (strpos($ref, $base) === 0)
|
||||||
{
|
{
|
||||||
return substr($ref, strlen($base) - 1);
|
return substr($ref, strlen($base) - 1);
|
||||||
}
|
}
|
||||||
|
@ -594,7 +594,7 @@ class Controller extends Object
|
||||||
$fieldNames[ $tabl['name'] ]['prompt'] = Inflector::humanize($alias.$niceName);
|
$fieldNames[ $tabl['name'] ]['prompt'] = Inflector::humanize($alias.$niceName);
|
||||||
$fieldNames[ $tabl['name'] ]['model'] = $fkNames[1];
|
$fieldNames[ $tabl['name'] ]['model'] = $fkNames[1];
|
||||||
$fieldNames[ $tabl['name'] ]['modelKey'] = $this->{$model}->tableToModel[$fieldNames[ $tabl['name'] ]['table']];
|
$fieldNames[ $tabl['name'] ]['modelKey'] = $this->{$model}->tableToModel[$fieldNames[ $tabl['name'] ]['table']];
|
||||||
$fieldNames[ $tabl['name'] ]['controller'] = Inflector::pluralize($this->{$model}->tableToModel[Inflector::pluralize($fkNames[0])]);
|
$fieldNames[ $tabl['name'] ]['controller'] = Inflector::pluralize($this->{$model}->tableToModel[$fkNames[0]]);
|
||||||
$fieldNames[ $tabl['name'] ]['foreignKey'] = true;
|
$fieldNames[ $tabl['name'] ]['foreignKey'] = true;
|
||||||
}
|
}
|
||||||
else if( 'created' != $tabl['name'] && 'updated' != $tabl['name'] )
|
else if( 'created' != $tabl['name'] && 'updated' != $tabl['name'] )
|
||||||
|
|
|
@ -117,7 +117,7 @@ class ConnectionManager extends Object
|
||||||
}
|
}
|
||||||
|
|
||||||
$tail = 'dbo'.DS.$filename.'.php';
|
$tail = 'dbo'.DS.$filename.'.php';
|
||||||
if (file_exists(LIBS.'model'.DS.$tail))
|
if (fileExistsInPath(LIBS.'model'.DS.$tail))
|
||||||
{
|
{
|
||||||
require_once(LIBS.'model'.DS.$tail);
|
require_once(LIBS.'model'.DS.$tail);
|
||||||
}
|
}
|
||||||
|
|
|
@ -395,14 +395,14 @@ class DboSource extends DataSource
|
||||||
{
|
{
|
||||||
if (true === $this->generateSelfAssociationQuery($model, $linkModel, $type, $assoc, $assocData, $queryData, false, $null))
|
if (true === $this->generateSelfAssociationQuery($model, $linkModel, $type, $assoc, $assocData, $queryData, false, $null))
|
||||||
{
|
{
|
||||||
$linkedModels[] = $type.$assoc;
|
$linkedModels[] = $type.'/'.$assoc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (true === $this->generateAssociationQuery($model, $linkModel, $type, $assoc, $assocData, $queryData, false, $null))
|
if (true === $this->generateAssociationQuery($model, $linkModel, $type, $assoc, $assocData, $queryData, false, $null))
|
||||||
{
|
{
|
||||||
$linkedModels[] = $type.$assoc;
|
$linkedModels[] = $type.'/'.$assoc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -419,62 +419,15 @@ class DboSource extends DataSource
|
||||||
{
|
{
|
||||||
foreach($model->{$type} as $assoc => $assocData)
|
foreach($model->{$type} as $assoc => $assocData)
|
||||||
{
|
{
|
||||||
if (!in_array($type.$assoc, $linkedModels))
|
if (!in_array($type.'/'.$assoc, $linkedModels))
|
||||||
{
|
{
|
||||||
$linkModel =& $model->{$assocData['className']};
|
$linkModel =& $model->{$assocData['className']};
|
||||||
$this->queryAssociation($model, $linkModel, $type, $assoc, $assocData, $array, true, $resultSet);
|
$this->queryAssociation($model, $linkModel, $type, $assoc, $assocData, $array, true, $resultSet, $model->recursive);
|
||||||
|
} else {
|
||||||
if ($model->recursive > 1 && $linkModel->recursive > 0)
|
// Fetch recursively on belongsTo and hasOne
|
||||||
|
if ($model->recursive > 1)
|
||||||
{
|
{
|
||||||
foreach($linkModel->__associations as $type1)
|
//$this->queryAssociation($model, $linkModel, $type, $assoc, $assocData, $array, true, $resultSet, $model->recursive - 1);
|
||||||
{
|
|
||||||
foreach($linkModel->{$type1} as $assoc1 => $assocData1)
|
|
||||||
{
|
|
||||||
$deepModel =& $linkModel->{$assocData1['className']};
|
|
||||||
|
|
||||||
if ($assoc1 != $model->name)
|
|
||||||
{
|
|
||||||
foreach ($resultSet as $i => $data)
|
|
||||||
{
|
|
||||||
if (isset($data[$linkModel->name]))
|
|
||||||
{
|
|
||||||
foreach ($resultSet[$i][$linkModel->name] as $value)
|
|
||||||
{
|
|
||||||
$datas[][$linkModel->name] = $value[$linkModel->primaryKey];
|
|
||||||
$fetch = $this->queryDeepAssociation($linkModel, $deepModel, $type1, $assoc1, $assocData1, $array, true, $datas);
|
|
||||||
unset($datas);
|
|
||||||
|
|
||||||
if (!empty($fetch[0]))
|
|
||||||
{
|
|
||||||
foreach ($fetch as $j => $row1)
|
|
||||||
{
|
|
||||||
if(!empty($row1))
|
|
||||||
{
|
|
||||||
foreach ($resultSet as $valueResult => $endResult)
|
|
||||||
{
|
|
||||||
$count = 0;
|
|
||||||
foreach ($endResult[$linkModel->name] as $keyCheck)
|
|
||||||
{
|
|
||||||
foreach ($row1 as $mas)
|
|
||||||
{
|
|
||||||
if($keyCheck[$linkModel->primaryKey] == $mas[$deepModel->name][$assocData1['foreignKey']])
|
|
||||||
{
|
|
||||||
$resultSet[$i][$linkModel->name][$count][$deepModel->name][] = $mas[$deepModel->name];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
unset($fetch);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -488,20 +441,6 @@ class DboSource extends DataSource
|
||||||
return $resultSet;
|
return $resultSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
function queryDeepAssociation(&$model, &$linkModel, $type, $association, $assocData, &$queryData, $external = false, &$resultSet)
|
|
||||||
{
|
|
||||||
$query = $this->generateAssociationQuery($model, $linkModel, $type, $association, $assocData, $queryData, $external, $resultSet);
|
|
||||||
if ($query)
|
|
||||||
{
|
|
||||||
foreach ($resultSet as $i => $row)
|
|
||||||
{
|
|
||||||
$q = $this->insertQueryData($query, $resultSet, $association, $assocData, $model, $linkModel, $i);
|
|
||||||
$fetch[] = $this->fetchAll($q);
|
|
||||||
}
|
|
||||||
return $fetch;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enter description here...
|
* Enter description here...
|
||||||
*
|
*
|
||||||
|
@ -515,7 +454,7 @@ class DboSource extends DataSource
|
||||||
* @param unknown_type $resultSet
|
* @param unknown_type $resultSet
|
||||||
* @param integer $recursive Number of levels of association
|
* @param integer $recursive Number of levels of association
|
||||||
*/
|
*/
|
||||||
function queryAssociation(&$model, &$linkModel, $type, $association, $assocData, &$queryData, $external = false, &$resultSet)
|
function queryAssociation(&$model, &$linkModel, $type, $association, $assocData, &$queryData, $external = false, &$resultSet, $recursive)
|
||||||
{
|
{
|
||||||
$query = $this->generateAssociationQuery($model, $linkModel, $type, $association, $assocData, $queryData, $external, $resultSet);
|
$query = $this->generateAssociationQuery($model, $linkModel, $type, $association, $assocData, $queryData, $external, $resultSet);
|
||||||
if ($query)
|
if ($query)
|
||||||
|
@ -527,21 +466,58 @@ class DboSource extends DataSource
|
||||||
|
|
||||||
if (!empty($fetch) && is_array($fetch))
|
if (!empty($fetch) && is_array($fetch))
|
||||||
{
|
{
|
||||||
if (isset($fetch[0][$association]))
|
if ($recursive > 0)
|
||||||
{
|
{
|
||||||
foreach ($fetch as $j => $row)
|
foreach($linkModel->__associations as $type1)
|
||||||
{
|
{
|
||||||
$resultSet[$i][$association][$j] = $row[$association];
|
if ($recursive > 1)
|
||||||
}
|
{
|
||||||
}
|
foreach($linkModel->{$type1} as $assoc1 => $assocData1)
|
||||||
else
|
{
|
||||||
{
|
$deepModel =& $linkModel->{$assocData1['className']};
|
||||||
$plural = Inflector::pluralize($association);
|
if ($deepModel->name != $model->name)
|
||||||
foreach ($fetch as $j => $row)
|
{
|
||||||
{
|
$this->queryAssociation($linkModel, $deepModel, $type1, $assoc1, $assocData1, $queryData, true, $fetch, $recursive - 1);
|
||||||
$resultSet[$i][$plural][$j] = $row[$plural];
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$this->__mergeAssociation($resultSet[$i], $fetch, $association, $type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function __mergeAssociation(&$data, $merge, $association, $type)
|
||||||
|
{
|
||||||
|
if (isset($merge[0]) && !isset($merge[0][$association]))
|
||||||
|
{
|
||||||
|
$association = Inflector::pluralize($association);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($type == 'belongsTo' || $type == 'hasOne')
|
||||||
|
{
|
||||||
|
if (isset($merge[$association]))
|
||||||
|
{
|
||||||
|
$data[$association] = $merge[$association][0];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$data[$association] = $merge[0][$association];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach ($merge as $i => $row)
|
||||||
|
{
|
||||||
|
if (count($row) == 1)
|
||||||
|
{
|
||||||
|
$data[$association][] = $row[$association];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$data[$association][] = $row;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -726,11 +702,12 @@ class DboSource extends DataSource
|
||||||
case 'belongsTo':
|
case 'belongsTo':
|
||||||
if ($external)
|
if ($external)
|
||||||
{
|
{
|
||||||
$conditions = $assocData['conditions'];
|
|
||||||
$sql = 'SELECT * FROM '.$this->name($linkModel->table).' AS '.$this->name($alias);
|
$sql = 'SELECT * FROM '.$this->name($linkModel->table).' AS '.$this->name($alias);
|
||||||
|
$conditions = $assocData['conditions'];
|
||||||
|
|
||||||
$condition = $linkModel->escapeField($assocData['foreignKey']);
|
$condition = $linkModel->escapeField($linkModel->primaryKey);
|
||||||
$condition .= '={$__cake_id__$}';
|
$condition .= '={$__cake_id__$}';
|
||||||
|
|
||||||
if (is_array($conditions))
|
if (is_array($conditions))
|
||||||
{
|
{
|
||||||
$conditions[] = $condition;
|
$conditions[] = $condition;
|
||||||
|
@ -743,8 +720,11 @@ class DboSource extends DataSource
|
||||||
}
|
}
|
||||||
$conditions .= $condition;
|
$conditions .= $condition;
|
||||||
}
|
}
|
||||||
$sql .= $this->conditions($queryData['conditions']) . $this->order($queryData['order']);
|
$sql .= $this->conditions($conditions) . $this->order($assocData['order']);
|
||||||
$sql .= $this->limit($queryData['limit']);
|
if (isset($assocData['limit']))
|
||||||
|
{
|
||||||
|
$sql .= $this->limit($assocData['limit']);
|
||||||
|
}
|
||||||
return $sql;
|
return $sql;
|
||||||
}
|
}
|
||||||
else if($joinedOnSelf != true)
|
else if($joinedOnSelf != true)
|
||||||
|
@ -995,7 +975,7 @@ class DboSource extends DataSource
|
||||||
}
|
}
|
||||||
|
|
||||||
$count = count($fields);
|
$count = count($fields);
|
||||||
if ($count > 1 && $fields[0] != '*')
|
if ($count >= 1 && $fields[0] != '*' && strpos($fields[0], 'COUNT(*)') === false)
|
||||||
{
|
{
|
||||||
for ($i = 0; $i < $count; $i++)
|
for ($i = 0; $i < $count; $i++)
|
||||||
{
|
{
|
||||||
|
@ -1041,27 +1021,27 @@ class DboSource extends DataSource
|
||||||
$out = array();
|
$out = array();
|
||||||
foreach ($conditions as $key => $value)
|
foreach ($conditions as $key => $value)
|
||||||
{
|
{
|
||||||
// Treat multiple values as an IN condition.
|
if (is_array($value))
|
||||||
if (is_array($value))
|
{
|
||||||
{
|
$data = $key . ' IN (';
|
||||||
$data = $key . ' IN (';
|
foreach ($value as $valElement)
|
||||||
foreach ($value as $valElement)
|
{
|
||||||
{
|
$data .= $this->value($valElement) . ', ';
|
||||||
$data .= $this->value($valElement) . ', ';
|
}
|
||||||
}
|
$data[strlen($data)-2] = ')';
|
||||||
// Remove trailing ',' and complete clause.
|
}
|
||||||
$data[strlen($data)-2] = ')';
|
elseif (preg_match('/(?P<expression>LIKE\\x20|=\\x20|>\\x20|<\\x20|<=\\x20|>=\\x20|<>\\x20)(?P<value>.*)/i', $value, $match))
|
||||||
}
|
{
|
||||||
else
|
$data = $this->name($key) . ' '.$match['expression'].' '. $this->value($match['value']);
|
||||||
{
|
}
|
||||||
if (($value != '{$__cake_id__$}') && ($value != '{$__cake_foreignKey__$}'))
|
else
|
||||||
|
{
|
||||||
|
if (($value != '{$__cake_id__$}') && ($value != '{$__cake_foreignKey__$}'))
|
||||||
{
|
{
|
||||||
$value = $this->value($value);
|
$value = $this->value($value);
|
||||||
}
|
}
|
||||||
|
$data = $this->name($key) . '=';
|
||||||
|
|
||||||
//$slashedValue = $this->value($value);
|
|
||||||
//TODO: Remove the = below so LIKE and other compares can be used
|
|
||||||
$data = $key . '=';
|
|
||||||
if ($value === null)
|
if ($value === null)
|
||||||
{
|
{
|
||||||
$data .= 'null';
|
$data .= 'null';
|
||||||
|
@ -1070,7 +1050,7 @@ class DboSource extends DataSource
|
||||||
{
|
{
|
||||||
$data .= $value;
|
$data .= $value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$out[] = $data;
|
$out[] = $data;
|
||||||
}
|
}
|
||||||
return ' WHERE ' . join(' AND ', $out);
|
return ' WHERE ' . join(' AND ', $out);
|
||||||
|
@ -1096,13 +1076,39 @@ class DboSource extends DataSource
|
||||||
* @param string $dir Direction (ASC or DESC)
|
* @param string $dir Direction (ASC or DESC)
|
||||||
* @return string ORDER BY clause
|
* @return string ORDER BY clause
|
||||||
*/
|
*/
|
||||||
function order ($key, $dir = '')
|
function order ($keys, $dir = '')
|
||||||
{
|
{
|
||||||
if (trim($key) == '')
|
if (empty($keys))
|
||||||
{
|
{
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
return ' ORDER BY '.$key.' '.$dir;
|
|
||||||
|
if(is_array($keys))
|
||||||
|
{
|
||||||
|
foreach($keys as $key => $value)
|
||||||
|
{
|
||||||
|
if(is_numeric($key))
|
||||||
|
{
|
||||||
|
$key = $value;
|
||||||
|
$value = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$value= ' '.$value;
|
||||||
|
}
|
||||||
|
$order[] = $this->name($key).$value;
|
||||||
|
}
|
||||||
|
return ' ORDER BY '.join(',', $order);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (preg_match('/(?P<direction>\\x20ASC|\\x20DESC)/', $keys, $match))
|
||||||
|
{
|
||||||
|
$dir = $match['direction'];
|
||||||
|
$keys = preg_replace('/'.$match['direction'].'/', '', $keys);
|
||||||
|
}
|
||||||
|
return ' ORDER BY '.$this->name($keys).$dir;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1116,7 +1122,6 @@ class DboSource extends DataSource
|
||||||
{
|
{
|
||||||
$this->showLog();
|
$this->showLog();
|
||||||
}
|
}
|
||||||
//$this->disconnect();
|
|
||||||
$this->_conn = NULL;
|
$this->_conn = NULL;
|
||||||
$this->connected = false;
|
$this->connected = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -218,7 +218,7 @@ class DboMysql extends DboSource
|
||||||
* @param string $tableName Name of database table to inspect
|
* @param string $tableName Name of database table to inspect
|
||||||
* @return array Fields in table. Keys are name and type
|
* @return array Fields in table. Keys are name and type
|
||||||
*/
|
*/
|
||||||
function &describe (&$model)
|
function describe (&$model)
|
||||||
{
|
{
|
||||||
$cache = parent::describe($model);
|
$cache = parent::describe($model);
|
||||||
if ($cache != null)
|
if ($cache != null)
|
||||||
|
@ -238,7 +238,7 @@ class DboMysql extends DboSource
|
||||||
}
|
}
|
||||||
if (isset($column[0]))
|
if (isset($column[0]))
|
||||||
{
|
{
|
||||||
$fields[] = array('name' => $column[0]['Field'], 'type' => $column[0]['Type']);
|
$fields[] = array('name' => $column[0]['Field'], 'type' => $column[0]['Type'], 'null' => $column[0]['Null']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->__cacheDescription($model->table, $fields);
|
$this->__cacheDescription($model->table, $fields);
|
||||||
|
@ -291,7 +291,14 @@ class DboMysql extends DboSource
|
||||||
{
|
{
|
||||||
$data = mysql_real_escape_string($data, $this->connection);
|
$data = mysql_real_escape_string($data, $this->connection);
|
||||||
}
|
}
|
||||||
$return = "'" . $data . "'";
|
if(!is_numeric($data))
|
||||||
|
{
|
||||||
|
$return = "'" . $data . "'";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$return = $data;
|
||||||
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,6 @@ uses('model'.DS.'datasources'.DS.'dbo_source');
|
||||||
class DboPostgres extends DboSource
|
class DboPostgres extends DboSource
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
var $description = "PostgreSQL DBO Driver";
|
var $description = "PostgreSQL DBO Driver";
|
||||||
|
|
||||||
var $_baseConfig = array('persistent' => true,
|
var $_baseConfig = array('persistent' => true,
|
||||||
|
@ -53,8 +52,7 @@ class DboPostgres extends DboSource
|
||||||
'login' => 'root',
|
'login' => 'root',
|
||||||
'password' => '',
|
'password' => '',
|
||||||
'database' => 'cake',
|
'database' => 'cake',
|
||||||
'port' => 3306
|
'port' => 3306);
|
||||||
);
|
|
||||||
|
|
||||||
var $columns = array(
|
var $columns = array(
|
||||||
'primary_key' => array('name' => 'serial primary key'),
|
'primary_key' => array('name' => 'serial primary key'),
|
||||||
|
@ -67,10 +65,8 @@ class DboPostgres extends DboSource
|
||||||
'time' => array('name' => 'time'),
|
'time' => array('name' => 'time'),
|
||||||
'date' => array('name' => 'date'),
|
'date' => array('name' => 'date'),
|
||||||
'binary' => array('name' => 'bytea'),
|
'binary' => array('name' => 'bytea'),
|
||||||
'boolean' => array('name' => 'boolean')
|
'boolean' => array('name' => 'boolean'),
|
||||||
);
|
'number' => array('name' => 'numeric'));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Connects to the database using options in the given configuration array.
|
* Connects to the database using options in the given configuration array.
|
||||||
|
@ -119,10 +115,6 @@ class DboPostgres extends DboSource
|
||||||
function query ()
|
function query ()
|
||||||
{
|
{
|
||||||
$args = func_get_args();
|
$args = func_get_args();
|
||||||
echo "<pre>";
|
|
||||||
print_r($args);
|
|
||||||
echo "</pre>";
|
|
||||||
die();
|
|
||||||
if (count($args) == 1)
|
if (count($args) == 1)
|
||||||
{
|
{
|
||||||
return $this->fetchAll($args[0]);
|
return $this->fetchAll($args[0]);
|
||||||
|
@ -130,13 +122,13 @@ class DboPostgres extends DboSource
|
||||||
elseif (count($args) > 1 && strpos($args[0], 'findBy') === 0)
|
elseif (count($args) > 1 && strpos($args[0], 'findBy') === 0)
|
||||||
{
|
{
|
||||||
$field = Inflector::underscore(str_replace('findBy', '', $args[0]));
|
$field = Inflector::underscore(str_replace('findBy', '', $args[0]));
|
||||||
$query = '`' . $args[2]->name . '`.`' . $field . '` = ' . $this->value($args[1][0]);
|
$query = '"' . $args[2]->name . '"."' . $field . '" = ' . $this->value($args[1][0]);
|
||||||
return $args[2]->find($query);
|
return $args[2]->find($query);
|
||||||
}
|
}
|
||||||
elseif (count($args) > 1 && strpos($args[0], 'findAllBy') === 0)
|
elseif (count($args) > 1 && strpos($args[0], 'findAllBy') === 0)
|
||||||
{
|
{
|
||||||
$field = Inflector::underscore(str_replace('findAllBy', '', $args[0]));
|
$field = Inflector::underscore(str_replace('findAllBy', '', $args[0]));
|
||||||
$query = '`' . $args[2]->name . '`.`' . $field . '` = ' . $this->value($args[1][0]);
|
$query = '"' . $args[2]->name . '"."' . $field . '" = ' . $this->value($args[1][0]);
|
||||||
return $args[2]->findAll($query);
|
return $args[2]->findAll($query);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -146,9 +138,10 @@ class DboPostgres extends DboSource
|
||||||
*
|
*
|
||||||
* @return array The fetched row as an array
|
* @return array The fetched row as an array
|
||||||
*/
|
*/
|
||||||
function fetchRow ()
|
function fetchRow ($assoc = false)
|
||||||
{
|
{
|
||||||
return pg_fetch_array($this->_result);
|
$assoc = ($assoc === false) ? PGSQL_BOTH : PGSQL_ASSOC;
|
||||||
|
return pg_fetch_array($this->_result, null, $assoc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -158,29 +151,23 @@ class DboPostgres extends DboSource
|
||||||
*/
|
*/
|
||||||
function listSources ()
|
function listSources ()
|
||||||
{
|
{
|
||||||
$sql = "SELECT a.relname AS name
|
$sql = "SELECT table_name as name FROM information_schema.tables WHERE table_schema = 'public';";
|
||||||
FROM pg_class a, pg_user b
|
|
||||||
WHERE ( relkind = 'r') and relname !~ '^pg_' AND relname !~ '^sql_'
|
|
||||||
AND relname !~ '^xin[vx][0-9]+' AND b.usesysid = a.relowner
|
|
||||||
AND NOT (EXISTS (SELECT viewname FROM pg_views WHERE viewname=a.relname));";
|
|
||||||
|
|
||||||
$this->execute($sql);
|
$result = $this->query($sql);
|
||||||
$result = $this->fetchRow();
|
|
||||||
|
|
||||||
if (!$result)
|
if (!$result)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$tables = array();
|
$tables = array();
|
||||||
$tables[] = $result['name'];
|
foreach ($result as $item)
|
||||||
while ($row = $this->fetchRow())
|
{
|
||||||
{
|
$tables[] = $item['name'];
|
||||||
$tables[] = $row['name'];
|
}
|
||||||
}
|
return $tables;
|
||||||
return $tables;
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -203,6 +190,28 @@ class DboPostgres extends DboSource
|
||||||
return $fields;
|
return $fields;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an array of the fields in given table name.
|
||||||
|
*
|
||||||
|
* @param string $tableName Name of database table to inspect
|
||||||
|
* @return array Fields in table. Keys are name and type
|
||||||
|
*/
|
||||||
|
function &describe (&$model)
|
||||||
|
{
|
||||||
|
$cache = parent::describe($model);
|
||||||
|
if ($cache != null)
|
||||||
|
{
|
||||||
|
return $cache;
|
||||||
|
}
|
||||||
|
|
||||||
|
$fields = false;
|
||||||
|
|
||||||
|
$fields = $this->query("SELECT column_name as name, data_type as type FROM information_schema.columns WHERE table_name =".$this->name($model->table));
|
||||||
|
|
||||||
|
$this->__cacheDescription($model->table, $fields);
|
||||||
|
return $fields;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a quoted and escaped string of $data for use in an SQL statement.
|
* Returns a quoted and escaped string of $data for use in an SQL statement.
|
||||||
*
|
*
|
||||||
|
|
|
@ -586,6 +586,23 @@ class Model extends Object
|
||||||
return $this->_tableInfo;
|
return $this->_tableInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an associative array of field names and column types.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
function getColumnTypes ()
|
||||||
|
{
|
||||||
|
$columns = $this->loadInfo();
|
||||||
|
$columns = $columns->value;
|
||||||
|
|
||||||
|
$cols = array();
|
||||||
|
foreach($columns as $col) {
|
||||||
|
$cols[$col['name']] = $col['type'];
|
||||||
|
}
|
||||||
|
return $cols;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if given field name exists in this Model's database table.
|
* Returns true if given field name exists in this Model's database table.
|
||||||
* Starts by loading the metadata into the private property table_info if that is not already set.
|
* Starts by loading the metadata into the private property table_info if that is not already set.
|
||||||
|
@ -836,6 +853,7 @@ class Model extends Object
|
||||||
|
|
||||||
if(!$this->id > 0 && isset($newID))
|
if(!$this->id > 0 && isset($newID))
|
||||||
{
|
{
|
||||||
|
$this->__insertID = $newID;
|
||||||
$this->id = $newID;
|
$this->id = $newID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -583,6 +583,23 @@ class Model extends Object
|
||||||
return $this->_tableInfo;
|
return $this->_tableInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an associative array of field names and column types.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
function getColumnTypes ()
|
||||||
|
{
|
||||||
|
$columns = $this->loadInfo();
|
||||||
|
$columns = $columns->value;
|
||||||
|
|
||||||
|
$cols = array();
|
||||||
|
foreach($columns as $col) {
|
||||||
|
$cols[$col['name']] = $col['type'];
|
||||||
|
}
|
||||||
|
return $cols;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if this Model has given field in its database table.
|
* Returns true if this Model has given field in its database table.
|
||||||
*
|
*
|
||||||
|
@ -832,6 +849,7 @@ class Model extends Object
|
||||||
|
|
||||||
if(!$this->id > 0 && isset($newID))
|
if(!$this->id > 0 && isset($newID))
|
||||||
{
|
{
|
||||||
|
$this->__insertID = $newID;
|
||||||
$this->id = $newID;
|
$this->id = $newID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -80,7 +80,7 @@ class Helper extends Object
|
||||||
|
|
||||||
function loadConfig()
|
function loadConfig()
|
||||||
{
|
{
|
||||||
return $this->readConfigFile(CAKE.'config'.DS.'tags.ini.php');
|
return $this->readConfigFile($config = fileExistsInPath(CAKE.'config'.DS.'tags.ini.php'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -85,8 +85,8 @@ class FormHelper extends Helper
|
||||||
if( $error == $this->Html->tagIsInvalid( $this->Html->model, $this->Html->field) )
|
if( $error == $this->Html->tagIsInvalid( $this->Html->model, $this->Html->field) )
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -137,7 +137,7 @@ class FormHelper extends Helper
|
||||||
* @param string $errorMsg Text that will appear if an error has occurred.
|
* @param string $errorMsg Text that will appear if an error has occurred.
|
||||||
* @param int $size Size attribute for INPUT element
|
* @param int $size Size attribute for INPUT element
|
||||||
* @param array $htmlOptions HTML options array.
|
* @param array $htmlOptions HTML options array.
|
||||||
* @return string The formatted INPUT element, with a label and wrapped in a div.
|
* @return string The formatted INPUT element, with a label and wrapped in a div.
|
||||||
*/
|
*/
|
||||||
function generateInputDiv($tagName, $prompt, $required=false, $errorMsg=null, $size=20, $htmlOptions=null )
|
function generateInputDiv($tagName, $prompt, $required=false, $errorMsg=null, $size=20, $htmlOptions=null )
|
||||||
{
|
{
|
||||||
|
@ -214,7 +214,7 @@ class FormHelper extends Helper
|
||||||
* @param array $htmlOptions HTML options array
|
* @param array $htmlOptions HTML options array
|
||||||
* @return string Date option wrapped in a div.
|
* @return string Date option wrapped in a div.
|
||||||
*/
|
*/
|
||||||
function generateDate($tagName, $prompt, $required=false, $errorMsg=null, $size=20, $htmlOptions=null, $selected )
|
function generateDate($tagName, $prompt, $required=false, $errorMsg=null, $size=20, $htmlOptions=null, $selected=null )
|
||||||
{
|
{
|
||||||
$htmlOptions['id'] = strtolower(str_replace('/', '_',$tagName));;
|
$htmlOptions['id'] = strtolower(str_replace('/', '_',$tagName));;
|
||||||
$str = $this->Html->dateTimeOptionTag( $tagName, 'MDY' , 'NONE', $selected, $htmlOptions);
|
$str = $this->Html->dateTimeOptionTag( $tagName, 'MDY' , 'NONE', $selected, $htmlOptions);
|
||||||
|
|
|
@ -290,7 +290,14 @@ class HtmlHelper extends Helper
|
||||||
|
|
||||||
if ($this->tagIsInvalid($this->model, $this->field))
|
if ($this->tagIsInvalid($this->model, $this->field))
|
||||||
{
|
{
|
||||||
$htmlAttributes['class'] = 'form_error';
|
if (isset($htmlAttributes['class']) && trim($htmlAttributes['class']) != "")
|
||||||
|
{
|
||||||
|
$htmlAttributes['class'] .= ' form_error';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$htmlAttributes['class'] = 'form_error';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->output(sprintf($this->tags['textarea'], $this->model,$this->field,
|
return $this->output(sprintf($this->tags['textarea'], $this->model,$this->field,
|
||||||
|
@ -450,9 +457,21 @@ class HtmlHelper extends Helper
|
||||||
$htmlAttributes['type'] = 'text';
|
$htmlAttributes['type'] = 'text';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!isset($htmlAttributes['id']))
|
||||||
|
{
|
||||||
|
$htmlAttributes['id'] = $this->model.Inflector::camelize($this->field);
|
||||||
|
}
|
||||||
|
|
||||||
if ($this->tagIsInvalid($this->model, $this->field))
|
if ($this->tagIsInvalid($this->model, $this->field))
|
||||||
{
|
{
|
||||||
$htmlAttributes['class'] = 'form_error';
|
if (isset($htmlAttributes['class']) && trim($htmlAttributes['class']) != "")
|
||||||
|
{
|
||||||
|
$htmlAttributes['class'] .= ' form_error';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$htmlAttributes['class'] = 'form_error';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->output(sprintf($this->tags['input'], $this->model, $this->field,
|
return $this->output(sprintf($this->tags['input'], $this->model, $this->field,
|
||||||
|
|
|
@ -281,7 +281,7 @@ class View extends Object
|
||||||
return $this->pluginView($action, $layout);
|
return $this->pluginView($action, $layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_file($viewFileName))
|
if (!is_file($viewFileName) && !$viewFileName = fileExistsInPath($viewFileName))
|
||||||
{
|
{
|
||||||
if (strtolower(get_class($this)) == 'template')
|
if (strtolower(get_class($this)) == 'template')
|
||||||
{
|
{
|
||||||
|
@ -306,9 +306,8 @@ class View extends Object
|
||||||
{
|
{
|
||||||
$missingViewFileName = VIEWS.$viewDir.DS.$errorAction.$this->ext;
|
$missingViewFileName = VIEWS.$viewDir.DS.$errorAction.$this->ext;
|
||||||
}
|
}
|
||||||
elseif(file_exists(LIBS.'view'.DS.'templates'.DS.$viewDir.DS.$errorAction.'.thtml'))
|
elseif($missingViewFileName = fileExistsInPath(LIBS.'view'.DS.'templates'.DS.$viewDir.DS.$errorAction.'.thtml'))
|
||||||
{
|
{
|
||||||
$missingViewFileName = LIBS.'view'.DS.'templates'.DS.$viewDir.DS.$errorAction.'.thtml';
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -535,20 +534,19 @@ class View extends Object
|
||||||
{
|
{
|
||||||
$viewFileName = VIEWS.'errors'.DS.$this->subDir.$type.$action.$this->ext;
|
$viewFileName = VIEWS.'errors'.DS.$this->subDir.$type.$action.$this->ext;
|
||||||
}
|
}
|
||||||
elseif(file_exists(LIBS.'view'.DS.'templates'.DS.'errors'.DS.$type.$action.'.thtml'))
|
elseif($viewFileName = fileExistsInPath(LIBS.'view'.DS.'templates'.DS.'errors'.DS.$type.$action.'.thtml'))
|
||||||
{
|
{
|
||||||
$viewFileName = LIBS.'view'.DS.'templates'.DS.'errors'.DS.$type.$action.'.thtml';
|
|
||||||
}
|
}
|
||||||
elseif(file_exists(LIBS.'view'.DS.'templates'.DS.$this->viewPath.DS.$type.$action.'.thtml'))
|
elseif($viewFileName = fileExistsInPath(LIBS.'view'.DS.'templates'.DS.$this->viewPath.DS.$type.$action.'.thtml'))
|
||||||
{
|
{
|
||||||
$viewFileName = LIBS.'view'.DS.'templates'.DS.$this->viewPath.DS.$type.$action.'.thtml';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$viewPath = explode(DS, $viewFileName);
|
$viewPath = explode(DS, $viewFileName);
|
||||||
$i = array_search('..', $viewPath);
|
$i = array_search('..', $viewPath);
|
||||||
unset($viewPath[$i-1]);
|
unset($viewPath[$i-1]);
|
||||||
unset($viewPath[$i]);
|
unset($viewPath[$i]);
|
||||||
|
|
||||||
$return = '/'.implode('/', $viewPath);
|
$return = '/'.implode('/', $viewPath);
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
@ -585,9 +583,8 @@ class View extends Object
|
||||||
{
|
{
|
||||||
$layoutFileName = LAYOUTS.$this->subDir.$type."{$this->layout}$this->ext";
|
$layoutFileName = LAYOUTS.$this->subDir.$type."{$this->layout}$this->ext";
|
||||||
}
|
}
|
||||||
elseif(file_exists(LIBS.'view'.DS.'templates'.DS."layouts".DS.$type."{$this->layout}.thtml"))
|
elseif($layoutFileName = fileExistsInPath(LIBS.'view'.DS.'templates'.DS."layouts".DS.$type."{$this->layout}.thtml"))
|
||||||
{
|
{
|
||||||
$layoutFileName = LIBS.'view'.DS.'templates'.DS."layouts".DS.$type."{$this->layout}.thtml";
|
|
||||||
}
|
}
|
||||||
return $layoutFileName;
|
return $layoutFileName;
|
||||||
}
|
}
|
||||||
|
@ -684,9 +681,9 @@ class View extends Object
|
||||||
{
|
{
|
||||||
$helperFn = HELPERS.$helperFn;
|
$helperFn = HELPERS.$helperFn;
|
||||||
}
|
}
|
||||||
else if(file_exists(LIBS.'view'.DS.'helpers'.DS.$helperFn))
|
else if($helperFn = fileExistsInPath(LIBS.'view'.DS.'helpers'.DS.$helperFn))
|
||||||
{
|
{
|
||||||
$helperFn = LIBS.'view'.DS.'helpers'.DS.$helperFn;
|
|
||||||
}
|
}
|
||||||
if (is_file($helperFn))
|
if (is_file($helperFn))
|
||||||
{
|
{
|
||||||
|
|
26
index.php
26
index.php
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Requests collector.
|
* Requests collector.
|
||||||
*
|
*
|
||||||
* This file collects requests if:
|
* This file collects requests if:
|
||||||
* - no mod_rewrite is avilable or .htaccess files are not supported
|
* - no mod_rewrite is avilable or .htaccess files are not supported
|
||||||
* - /public is not set as a web root.
|
* - /public is not set as a web root.
|
||||||
|
@ -11,14 +11,14 @@
|
||||||
* PHP versions 4 and 5
|
* PHP versions 4 and 5
|
||||||
*
|
*
|
||||||
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
|
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
|
||||||
* Copyright (c) 2006, Cake Software Foundation, Inc.
|
* Copyright (c) 2006, Cake Software Foundation, Inc.
|
||||||
* 1785 E. Sahara Avenue, Suite 490-204
|
* 1785 E. Sahara Avenue, Suite 490-204
|
||||||
* Las Vegas, Nevada 89104
|
* Las Vegas, Nevada 89104
|
||||||
*
|
*
|
||||||
* Licensed under The MIT License
|
* Licensed under The MIT License
|
||||||
* Redistributions of files must retain the above copyright notice.
|
* Redistributions of files must retain the above copyright notice.
|
||||||
*
|
*
|
||||||
* @filesource
|
* @filesource
|
||||||
* @copyright Copyright (c) 2006, Cake Software Foundation, Inc.
|
* @copyright Copyright (c) 2006, Cake Software Foundation, Inc.
|
||||||
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
|
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
|
||||||
* @package cake
|
* @package cake
|
||||||
|
@ -36,16 +36,28 @@ define ('APP_DIR', 'app');
|
||||||
define ('DS', DIRECTORY_SEPARATOR);
|
define ('DS', DIRECTORY_SEPARATOR);
|
||||||
define ('ROOT', dirname(__FILE__).DS);
|
define ('ROOT', dirname(__FILE__).DS);
|
||||||
|
|
||||||
require_once ROOT.'cake'.DS.'basics.php';
|
/**
|
||||||
require_once ROOT.APP_DIR.DS.'config'.DS.'core.php';
|
* This only needs to be changed if the cake installed libs are located
|
||||||
require_once ROOT.'cake'.DS.'config'.DS.'paths.php';
|
* outside of the distributed directory structure.
|
||||||
|
*/
|
||||||
|
if (!defined('CAKE_CORE_INCLUDE_PATH'))
|
||||||
|
{
|
||||||
|
//define ('CAKE_CORE_INCLUDE_PATH', FULL PATH TO DIRECTORY WHERE CAKE CORE IS INSTALLED DO NOT ADD A TRAILING DIRECTORY SEPARATOR';
|
||||||
|
define('CAKE_CORE_INCLUDE_PATH', ROOT);
|
||||||
|
}
|
||||||
|
|
||||||
|
ini_set('include_path',ini_get('include_path').PATH_SEPARATOR.CAKE_CORE_INCLUDE_PATH.PATH_SEPARATOR.ROOT.DS.APP_DIR.DS);
|
||||||
|
|
||||||
|
require_once 'cake'.DS.'basics.php';
|
||||||
|
require_once 'config'.DS.'core.php';
|
||||||
|
require_once 'cake'.DS.'config'.DS.'paths.php';
|
||||||
|
|
||||||
|
|
||||||
$uri = setUri();
|
$uri = setUri();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* As mod_rewrite (or .htaccess files) is not working, we need to take care
|
* As mod_rewrite (or .htaccess files) is not working, we need to take care
|
||||||
* of what would normally be rewritten, i.e. the static files in /public
|
* of what would normally be rewritten, i.e. the static files in app/webroot/
|
||||||
*/
|
*/
|
||||||
if ($uri === '/' || $uri === '/index.php')
|
if ($uri === '/' || $uri === '/index.php')
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue