From 6dfd5d507d9863f987b30b0a5ab4268aea2ed875 Mon Sep 17 00:00:00 2001 From: Ludovic Pouzenc Date: Thu, 2 Aug 2012 11:09:40 +0000 Subject: J'étais parti sur un download pourri de Cake. Les gars on abusé sur GitHub. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///var/svn/2012-php-weave/trunk@7 d972a294-176a-4cf9-8ea1-fcd5b0c30f5c --- .../vendor/cake_1.1.20.7692/cake/libs/cache.php | 137 -- .../vendor/cake_1.1.20.7692/cake/libs/cake_log.php | 57 - .../cake_1.1.20.7692/cake/libs/class_registry.php | 117 -- .../cake_1.1.20.7692/cake/libs/configure.php | 354 ---- .../cake/libs/controller/component.php | 139 -- .../cake/libs/controller/components/acl.php | 196 -- .../cake/libs/controller/components/acl_base.php | 63 - .../libs/controller/components/dbacl/db_acl.php | 310 --- .../controller/components/dbacl/models/aclnode.php | 309 --- .../controller/components/dbacl/models/aco.php | 52 - .../components/dbacl/models/acoaction.php | 56 - .../controller/components/dbacl/models/aro.php | 52 - .../components/dbacl/models/aros_aco.php | 63 - .../libs/controller/components/iniacl/ini_acl.php | 180 -- .../libs/controller/components/request_handler.php | 412 ---- .../cake/libs/controller/components/security.php | 202 -- .../cake/libs/controller/components/session.php | 306 --- .../cake/libs/controller/controller.php | 998 ---------- .../cake/libs/controller/pages_controller.php | 105 -- .../cake/libs/controller/scaffold.php | 432 ----- .../vendor/cake_1.1.20.7692/cake/libs/error.php | 347 ---- .../src/vendor/cake_1.1.20.7692/cake/libs/file.php | 293 --- .../src/vendor/cake_1.1.20.7692/cake/libs/flay.php | 278 --- .../vendor/cake_1.1.20.7692/cake/libs/folder.php | 328 ---- .../cake_1.1.20.7692/cake/libs/inflector.php | 437 ----- .../vendor/cake_1.1.20.7692/cake/libs/legacy.php | 70 - .../cake/libs/model/connection_manager.php | 243 --- .../cake/libs/model/datasources/datasource.php | 519 ------ .../cake/libs/model/datasources/dbo_source.php | 1967 -------------------- .../cake/libs/model/dbo/dbo_adodb.php | 437 ----- .../cake/libs/model/dbo/dbo_mssql.php | 604 ------ .../cake/libs/model/dbo/dbo_mysql.php | 681 ------- .../cake/libs/model/dbo/dbo_mysqli.php | 441 ----- .../cake/libs/model/dbo/dbo_odbc.php | 437 ----- .../cake/libs/model/dbo/dbo_pear.php | 241 --- .../cake/libs/model/dbo/dbo_postgres.php | 595 ------ .../cake/libs/model/dbo/dbo_sqlite.php | 409 ---- .../cake_1.1.20.7692/cake/libs/model/model.php | 42 - .../cake/libs/model/model_php4.php | 1719 ----------------- .../cake/libs/model/model_php5.php | 1716 ----------------- .../cake_1.1.20.7692/cake/libs/neat_array.php | 318 ---- .../cake_1.1.20.7692/cake/libs/neat_string.php | 88 - .../vendor/cake_1.1.20.7692/cake/libs/object.php | 259 --- .../vendor/cake_1.1.20.7692/cake/libs/router.php | 230 --- .../vendor/cake_1.1.20.7692/cake/libs/sanitize.php | 245 --- .../vendor/cake_1.1.20.7692/cake/libs/security.php | 151 -- .../vendor/cake_1.1.20.7692/cake/libs/session.php | 757 -------- .../src/vendor/cake_1.1.20.7692/cake/libs/set.php | 805 -------- .../cake_1.1.20.7692/cake/libs/validators.php | 45 - .../cake_1.1.20.7692/cake/libs/view/helper.php | 167 -- .../cake/libs/view/helpers/ajax.php | 853 --------- .../cake/libs/view/helpers/cache.php | 272 --- .../cake/libs/view/helpers/form.php | 491 ----- .../cake/libs/view/helpers/html.php | 1257 ------------- .../cake/libs/view/helpers/javascript.php | 317 ---- .../cake/libs/view/helpers/number.php | 88 - .../cake/libs/view/helpers/session.php | 198 -- .../cake/libs/view/helpers/text.php | 238 --- .../cake/libs/view/helpers/time.php | 397 ---- .../cake/libs/view/templates/elements/dump.thtml | 32 - .../cake/libs/view/templates/errors/error404.thtml | 28 - .../view/templates/errors/missing_action.thtml | 37 - .../templates/errors/missing_component_class.thtml | 36 - .../templates/errors/missing_component_file.thtml | 35 - .../view/templates/errors/missing_connection.thtml | 30 - .../view/templates/errors/missing_controller.thtml | 36 - .../templates/errors/missing_helper_class.thtml | 35 - .../templates/errors/missing_helper_file.thtml | 35 - .../view/templates/errors/missing_layout.thtml | 30 - .../libs/view/templates/errors/missing_model.thtml | 36 - .../view/templates/errors/missing_scaffolddb.thtml | 30 - .../libs/view/templates/errors/missing_table.thtml | 29 - .../libs/view/templates/errors/missing_view.thtml | 30 - .../view/templates/errors/private_action.thtml | 29 - .../view/templates/errors/scaffold_error.thtml | 33 - .../cake/libs/view/templates/layouts/ajax.thtml | 27 - .../cake/libs/view/templates/layouts/default.thtml | 58 - .../cake/libs/view/templates/layouts/flash.thtml | 45 - .../cake/libs/view/templates/pages/home.thtml | 75 - .../cake/libs/view/templates/scaffolds/add.thtml | 40 - .../cake/libs/view/templates/scaffolds/edit.thtml | 56 - .../cake/libs/view/templates/scaffolds/index.thtml | 95 - .../cake/libs/view/templates/scaffolds/view.thtml | 166 -- .../cake_1.1.20.7692/cake/libs/view/view.php | 765 -------- 84 files changed, 25368 deletions(-) delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/cache.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/cake_log.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/class_registry.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/configure.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/component.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/acl.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/acl_base.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/db_acl.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/models/aclnode.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/models/aco.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/models/acoaction.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/models/aro.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/models/aros_aco.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/iniacl/ini_acl.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/request_handler.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/security.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/session.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/controller.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/pages_controller.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/scaffold.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/error.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/file.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/flay.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/folder.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/inflector.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/legacy.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/connection_manager.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/datasources/datasource.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/datasources/dbo_source.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_adodb.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_mssql.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_mysql.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_mysqli.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_odbc.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_pear.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_postgres.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_sqlite.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/model.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/model_php4.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/model_php5.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/neat_array.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/neat_string.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/object.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/router.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/sanitize.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/security.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/session.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/set.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/validators.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helper.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/ajax.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/cache.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/form.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/html.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/javascript.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/number.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/session.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/text.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/time.php delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/elements/dump.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/errors/error404.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/errors/missing_action.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/errors/missing_component_class.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/errors/missing_component_file.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/errors/missing_connection.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/errors/missing_controller.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/errors/missing_helper_class.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/errors/missing_helper_file.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/errors/missing_layout.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/errors/missing_model.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/errors/missing_scaffolddb.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/errors/missing_table.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/errors/missing_view.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/errors/private_action.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/errors/scaffold_error.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/layouts/ajax.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/layouts/default.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/layouts/flash.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/pages/home.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/scaffolds/add.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/scaffolds/edit.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/scaffolds/index.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/templates/scaffolds/view.thtml delete mode 100644 poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/view.php (limited to 'poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs') diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/cache.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/cache.php deleted file mode 100644 index 9d59ef6..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/cache.php +++ /dev/null @@ -1,137 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs - * @since CakePHP(tm) v 0.2.9 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Included libraries. - * - */ - if (!class_exists('Model')) { - uses(DS . 'model' . DS . 'model'); - } -/** - * Caching for Cake. - * - * - * @package cake - * @subpackage cake.cake.libs - */ -class Cache extends Model{ -/** - * Identifier. Either an MD5 string or NULL. - * - * @var string - */ - var $id = null; -/** - * Content container for cache data. - * - * @var unknown_type - */ - var $data = null; -/** - * Content to be cached. - * - * @var unknown_type - */ - var $for_caching = null; -/** - * Name of the database table used for caching. - * - * @var string - */ - var $useTable = 'cache'; -/** - * Constructor. Generates an md5'ed id for internal use. Calls the constructor on Model as well. - * - * @param unknown_type $id - */ - function __construct($id) { - $this->id = (md5($id)); - parent::__construct($this->id); - } -/** - * Returns this object's id after setting it. If called without parameters the current object's id is returned. - * - * @param unknown_type $id - * @return unknown - */ - function id($id = null) { - if (!$id) { - return $this->id; - } - return ($this->id = $id); - } -/** - * Store given content in cache database. - * - * @param string $content Content to keep in cache. - * @param int $keep_for Number of seconds to keep data in cache. - * @return boolean Success - */ - function remember($content, $keep_for = CACHE_PAGES_FOR) { - $data = addslashes($this->for_caching . $content); - $expire = date("Y-m-d H:i:s", time() + ($keep_for > 0 ? $keep_for : 999999999)); - return $this->query("REPLACE {$this->useTable} (id,data,expire) VALUES ('{$this->id}', '{$data}', '{$expire}')"); - } -/** - * Returns content from the Cache object itself, if the Cache object has a non-empty data property. - * Else from the database cache. - * - * @return unknown - */ - function restore() { - if (empty($this->data['data'])) { - return $this->find("id='{$this->id}' AND expire>NOW()"); - } - return $this->data['data']; - } -/** - * Returns true if the cache data property has current (non-stale) content for given id. - * - * @return boolean - */ - function has() { - return is_array($this->data = $this->find("id='{$this->id}' AND expire>NOW()")); - } -/** - * Appends $string to the for_caching property of the Cache object. - * - * @param string $string - */ - function append($string) { - $this->for_caching .= $string; - } -/** - * Clears the cache database table. - * - * @return unknown - */ - function clear() { - return $this->query("DELETE FROM {$this->useTable}"); - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/cake_log.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/cake_log.php deleted file mode 100644 index 7f6e7e0..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/cake_log.php +++ /dev/null @@ -1,57 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs - * @since CakePHP(tm) v 0.2.9 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Included libraries. - * - */ - if (!class_exists('File')) { - uses('file'); - } -/** - * Logs messages to text files - * - * @package cake - * @subpackage cake.cake.libs - */ -class CakeLog{ -/** - * Writes given message to a log file in the logs directory. - * - * @param string $type Type of log, becomes part of the log's filename - * @param string $msg Message to log - * @return boolean Success - */ - function write($type, $msg) { - $filename = LOGS . $type . '.log'; - $output = date('Y-m-d H:i:s') . ' ' . ucfirst($type) . ': ' . $msg . "\n"; - $log = new File($filename); - return $log->append($output); - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/class_registry.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/class_registry.php deleted file mode 100644 index 45b1822..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/class_registry.php +++ /dev/null @@ -1,117 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs - * @since CakePHP(tm) v 0.9.2 - * @version $Revision: 7691 $ - * @modifiedby $LastChangedBy: nate $ - * @lastmodified $Date: 2008-10-02 00:59:12 -0400 (Thu, 02 Oct 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Class Collections. - * - * A repository for class objects, each registered with a key. - * If you try to add an object with the same key twice, nothing will come of it. - * If you need a second instance of an object, give it another key. - * - * @package cake - * @subpackage cake.cake.libs - */ -class ClassRegistry{ -/** - * Names of classes with their objects. - * - * @var array - * @access private - */ - var $_objects = array(); -/** - * Return a singleton instance of the ClassRegistry. - * - * @return ClassRegistry instance - */ - function &getInstance() { - static $instance = array(); - if (!$instance) { - $instance[0] = &new ClassRegistry; - } - return $instance[0]; - } -/** - * Add $object to the registry, associating it with the name $key. - * - * @param string $key - * @param mixed $object - */ - function addObject($key, &$object) { - $_this =& ClassRegistry::getInstance(); - $key = Inflector::underscore($key); - if (array_key_exists($key, $_this->_objects) === false) { - $_this->_objects[$key] = &$object; - } - } -/** - * Remove object which corresponds to given key. - * - * @param string $key - * @return void - */ - function removeObject($key) { - $_this =& ClassRegistry::getInstance(); - $key = Inflector::underscore($key); - if (array_key_exists($key, $_this->_objects) === true) { - unset($_this->_objects[$key]); - } - } -/** - * Returns true if given key is present in the ClassRegistry. - * - * @param string $key Key to look for - * @return boolean Success - */ - function isKeySet($key) { - $_this =& ClassRegistry::getInstance(); - $key = Inflector::underscore($key); - return array_key_exists($key, $_this->_objects); - } -/** - * Get all keys from the regisrty. - * - * @return array - */ - function keys() { - $_this =& ClassRegistry::getInstance(); - return array_keys($_this->_objects); - } -/** - * Return object which corresponds to given key. - * - * @param string $key - * @return mixed - */ - function &getObject($key) { - $_this =& ClassRegistry::getInstance(); - $key = Inflector::underscore($key); - return $_this->_objects[$key]; - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/configure.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/configure.php deleted file mode 100644 index 677db20..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/configure.php +++ /dev/null @@ -1,354 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs - * @since CakePHP(tm) v 1.0.0.2363 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Short description for file. - * - * Long description for file - * - * @package cake - * @subpackage cake.cake.libs - */ -class Configure extends Object { -/** - * Hold array with paths to view files - * - * @var array - * @access public - */ - var $viewPaths = array(); -/** - * Hold array with paths to controller files - * - * @var array - * @access public - */ - var $controllerPaths = array(); -/** - * Enter description here... - * - * @var array - * @access public - */ - var $modelPaths = array(); -/** - * Enter description here... - * - * @var array - * @access public - */ - var $helperPaths = array(); -/** - * Enter description here... - * - * @var array - * @access public - */ - var $componentPaths = array(); -/** - * Enter description here... - * - * @var integer - * @access public - */ - var $debug = null; -/** - * Return a singleton instance of Configure. - * - * @return Configure instance - * @access public - */ - function &getInstance() { - static $instance = array(); - if (!$instance) { - $instance[0] =& new Configure; - $instance[0]->__loadBootstrap(); - } - return $instance[0]; - } -/** - * Used to write a dynamic var in the Configure instance. - * - * Usage - * Configure::write('One.key1', 'value of the Configure::One[key1]'); - * Configure::write(array('One.key1' => 'value of the Configure::One[key1]')); - * Configure::write('One', array('key1'=>'value of the Configure::One[key1]', 'key2'=>'value of the Configure::One[key2]'); - * Configure::write(array('One.key1' => 'value of the Configure::One[key1]', 'One.key2' => 'value of the Configure::One[key2]')); - * - * @param array $config - * @return void - * @access public - */ - function write($config, $value = null) { - $_this =& Configure::getInstance(); - - if (!is_array($config) && $value !== null) { - $name = $_this->__configVarNames($config); - - if (count($name) > 1) { - $_this->{$name[0]}[$name[1]] = $value; - } else { - $_this->{$name[0]} = $value; - } - } else { - - foreach ($config as $names => $value) { - $name = $_this->__configVarNames($names); - if (count($name) > 1) { - $_this->{$name[0]}[$name[1]] = $value; - } else { - $_this->{$name[0]} = $value; - } - } - } - - if ($config == 'debug' || (is_array($config) && in_array('debug', $config))) { - if ($_this->debug) { - error_reporting(E_ALL); - - if (function_exists('ini_set')) { - ini_set('display_errors', 1); - } - } else { - error_reporting(0); - } - } - } -/** - * Used to read Configure::$var - * - * Usage - * Configure::read('Name'); will return all values for Name - * Configure::read('Name.key'); will return only the value of Configure::Name[key] - * - * @param string $var - * @return string value of Configure::$var - * @access public - */ - function read($var = 'debug') { - $_this =& Configure::getInstance(); - if ($var === 'debug') { - if (!isset($_this->debug)) { - $_this->debug = DEBUG; - } - return $_this->debug; - } - - $name = $_this->__configVarNames($var); - if (count($name) > 1) { - if (isset($_this->{$name[0]}[$name[1]])) { - return $_this->{$name[0]}[$name[1]]; - } - return null; - } else { - if (isset($_this->{$name[0]})) { - return $_this->{$name[0]}; - } - return null; - } - } -/** - * Used to delete a var from the Configure instance. - * - * Usage: - * Configure::delete('Name'); will delete the entire Configure::Name - * Configure::delete('Name.key'); will delete only the Configure::Name[key] - * - * @param string $var the var to be deleted - * @return void - * @access public - */ - function delete($var = null) { - $_this =& Configure::getInstance(); - - $name = $_this->__configVarNames($var); - if (count($name) > 1) { - unset($_this->{$name[0]}[$name[1]]); - } else { - unset($_this->{$name[0]}); - } - } -/** - * Will load a file from app/config/configure_file.php - * variables in the files should be formated like: - * $config['name'] = 'value'; - * These will be used to create dynamic Configure vars. - * - * Usage Configure::load('configure_file'); - * - * @param string $fileName name of file to load, extension must be .php and only the name should be used, not the extenstion - * @return Configure::write - * @access public - */ - function load($fileName) { - $_this =& Configure::getInstance(); - - if (!file_exists(CONFIGS . $fileName . '.php')) { - trigger_error("Configure::load() - $fileName.php not found", E_USER_WARNING); - return false; - } - include(CONFIGS . $fileName . '.php'); - if (!isset($config)) { - trigger_error("Configure::load() - no variable \$config found in $fileName.php", E_USER_WARNING); - return false; - } - return $_this->write($config); - } - -/** - * Used to determine the current version of CakePHP - * - * Usage Configure::version(); - * - * @return string Current version of CakePHP - * @access public - */ - function version() { - $_this =& Configure::getInstance(); - if (!isset($_this->Cake['version'])) { - require(CORE_PATH . 'cake' . DS . 'config' . DS . 'config.php'); - $_this->write($config); - } - return $_this->Cake['version']; - } -/** - * Checks $name for dot notation to create dynamic Configure::$var as an array when needed. - * - * @param mixed $name - * @return array - * @access private - */ - function __configVarNames($name) { - if (is_string($name)) { - if (strpos($name, ".")) { - $name = explode(".", $name); - } else { - $name = array($name); - } - } - return $name; - } -/** - * Sets the var modelPaths - * - * @param array $modelPaths - * @access private - */ - function __buildModelPaths($modelPaths) { - $_this =& Configure::getInstance(); - $_this->modelPaths[] = MODELS; - if (isset($modelPaths)) { - foreach ($modelPaths as $value) { - $_this->modelPaths[] = $value; - } - } - } -/** - * Sets the var viewPaths - * - * @param array $viewPaths - * @access private - */ - function __buildViewPaths($viewPaths) { - $_this =& Configure::getInstance(); - $_this->viewPaths[] = VIEWS; - if (isset($viewPaths)) { - foreach ($viewPaths as $value) { - $_this->viewPaths[] = $value; - } - } - } -/** - * Sets the var controllerPaths - * - * @param array $controllerPaths - * @access private - */ - function __buildControllerPaths($controllerPaths) { - $_this =& Configure::getInstance(); - $_this->controllerPaths[] = CONTROLLERS; - if (isset($controllerPaths)) { - foreach ($controllerPaths as $value) { - $_this->controllerPaths[] = $value; - } - } - } -/** - * Sets the var helperPaths - * - * @param array $helperPaths - * @access private - */ - function __buildHelperPaths($helperPaths) { - $_this =& Configure::getInstance(); - $_this->helperPaths[] = HELPERS; - if (isset($helperPaths)) { - foreach ($helperPaths as $value) { - $_this->helperPaths[] = $value; - } - } - } -/** - * Sets the var componentPaths - * - * @param array $componentPaths - * @access private - */ - function __buildComponentPaths($componentPaths) { - $_this =& Configure::getInstance(); - $_this->componentPaths[] = COMPONENTS; - if (isset($componentPaths)) { - foreach ($componentPaths as $value) { - $_this->componentPaths[] = $value; - } - } - } -/** - * Loads the app/config/bootstrap.php - * If the alternative paths are set in this file - * they will be added to the paths vars - * - * @access private - */ - function __loadBootstrap() { - $_this =& Configure::getInstance(); - $_this->write('Session.checkAgent', true); - $modelPaths = null; - $viewPaths = null; - $controllerPaths = null; - $helperPaths = null; - $componentPaths = null; - require APP_PATH . 'config' . DS . 'bootstrap.php'; - $_this->__buildModelPaths($modelPaths); - $_this->__buildViewPaths($viewPaths); - $_this->__buildControllerPaths($controllerPaths); - $_this->__buildHelperPaths($helperPaths); - $_this->__buildComponentPaths($componentPaths); - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/component.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/component.php deleted file mode 100644 index d604269..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/component.php +++ /dev/null @@ -1,139 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.controller - * @since CakePHP(tm) v TBD - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Component - * - * Used to create instances of applications components - * - * @package cake - * @subpackage cake.cake.libs.controller - */ -class Component extends Object { -/** - * Instance Controller - * - * @var object - * @access private - */ - var $__controller = null; -/** - * Constructor - */ - function __construct() { - } -/** - * Used to initialize the components for current controller - * - * @param object $controller - * @access public - */ - function init(&$controller) { - $this->__controller =& $controller; - - if ($this->__controller->components !== false) { - $loaded = array(); - $this->__controller->components = array_merge(array('Session'), $this->__controller->components); - $loaded = $this->__loadComponents($loaded, $this->__controller->components); - - foreach (array_keys($loaded)as $component) { - $tempComponent =& $loaded[$component]; - - if (isset($tempComponent->components) && is_array($tempComponent->components)) { - foreach ($tempComponent->components as $subComponent) { - $this->__controller->{$component}->{$subComponent} =& $loaded[$subComponent]; - } - } - if (is_callable(array($tempComponent, 'initialize'))) { - $tempComponent->initialize($controller); - } - } - } - } - -/** - * Enter description here... - * - * @param array $loaded - * @param array $components - * @return loaded components - * @access private - */ - function &__loadComponents(&$loaded, $components) { - foreach ($components as $component) { - $parts = preg_split('/\/|\./', $component); - - if (count($parts) === 1) { - $plugin = $this->__controller->plugin; - } else { - $plugin = Inflector::underscore($parts['0']); - $component = $parts[count($parts) - 1]; - } - - $componentCn = $component . 'Component'; - - if (in_array($component, array_keys($loaded)) !== true) { - - if (!class_exists($componentCn)) { - - if (is_null($plugin) || !loadPluginComponent($plugin, $component)) { - - if (!loadComponent($component)) { - $this->cakeError('missingComponentFile', array(array( - 'className' => $this->__controller->name, - 'component' => $component, - 'file' => Inflector::underscore($component) . '.php', - 'base' => $this->__controller->base))); - exit(); - } - } - - if (!class_exists($componentCn)) { - $this->cakeError('missingComponentClass', array(array( - 'className' => $this->__controller->name, - 'component' => $component, - 'file' => Inflector::underscore($component) . '.php', - 'base' => $this->__controller->base))); - exit(); - } - } - - if ($componentCn == 'SessionComponent') { - $param = strip_plugin($this->__controller->base, $this->__controller->plugin) . '/'; - } else { - $param = null; - } - $this->__controller->{$component} =& new $componentCn($param); - $loaded[$component] =& $this->__controller->{$component}; - - if (isset($this->__controller->{$component}->components) && is_array($this->__controller->{$component}->components)) { - $loaded =& $this->__loadComponents($loaded, $this->__controller->{$component}->components); - } - } - } - return $loaded; - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/acl.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/acl.php deleted file mode 100644 index 1c2792a..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/acl.php +++ /dev/null @@ -1,196 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.controller.components - * @since CakePHP(tm) v 0.10.0.1076 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Access Control List factory class. - * - * Looks for ACL implementation class in core config, and returns an instance of that class. - * - * @package cake - * @subpackage cake.cake.libs.controller.components - */ -class AclComponent extends Object { -/** - * Instance of ACL_CLASSNAME set in app/config/core.php - * - * @var object - */ - var $_instance = null; -/** - * Enter description here... - * - * @var boolean - */ - var $controller = true; -/** - * Constructor. - * - * Will return an instance of the correct ACL class. - */ - function __construct() { - $this->getACL(); - } -/** - * Static function used to gain an instance of the correct ACL class. - * - * @return object instance of ACL_CLASSNAME set in app/config/core.php - * @access public - */ - function &getACL() { - if ($this->_instance == null) { - uses('controller' . DS . 'components' . DS . ACL_FILENAME); - $classname = ACL_CLASSNAME; - $this->_instance = new $classname; - } - - if ($classname == 'DB_ACL') { - $this->Aro = new Aro(); - $this->Aco = new Aco(); - } - return $this->_instance; - } -/** - * Empty class defintion, to be overridden in subclasses. - * - * @access public - */ - function _initACL() { - } -/** - * Pass-thru function for ACL check instance. - * - * @param string $aro - * @param string $aco - * @param string $action : default = * - * @return boolean - * @access public - */ - function check($aro, $aco, $action = "*") { - return $this->_instance->check($aro, $aco, $action); - } -/** - * Pass-thru function for ACL allow instance. - * - * @param string $aro - * @param string $aco - * @param string $action : default = * - * @return boolean - * @access public - */ - function allow($aro, $aco, $action = "*") { - return $this->_instance->allow($aro, $aco, $action); - } -/** - * Pass-thru function for ACL deny instance. - * - * @param string $aro - * @param string $aco - * @param string $action : default = * - * @return boolean - * @abstract public - */ - function deny($aro, $aco, $action = "*") { - return $this->_instance->deny($aro, $aco, $action); - } -/** - * Pass-thru function for ACL inherit instance. - * - * @return boolean - * @abstract public - */ - function inherit($aro, $aco, $action = "*") { - return $this->_instance->inherit($aro, $aco, $action); - } -/** - * Pass-thru function for ACL grant instance. - * - * @param string $aro - * @param string $aco - * @param string $action : default = * - * @return boolean - * @access public - */ - function grant($aro, $aco, $action = "*") { - return $this->_instance->grant($aro, $aco, $action); - } -/** - * Pass-thru function for ACL grant instance. - * - * @param string $aro - * @param string $aco - * @param string $action : default = * - * @return boolean - * @access public - */ - function revoke($aro, $aco, $action = "*") { - return $this->_instance->revoke($aro, $aco, $action); - } -/** - * Sets the current ARO instance to object from getAro - * - * @param string $id - * @return boolean - * @access public - */ - function setAro($id) { - return $this->Aro = $this->_instance->getAro($id); - } -/** -* Sets the current ACO instance to object from getAco - * - * @param string $id - * @return boolean - * @access public - */ - function setAco($id) { - return $this->Aco = $this->_instance->getAco($id); - } -/** - * Pass-thru function for ACL getAro instance - * that gets an ARO object from the given id or alias - * - * @param string $id - * @return object Aro - * @access public - */ - function getAro($id) { - return $this->_instance->getAro($id); - } -/** - * Pass-thru function for ACL getAco instance. - * that gets an ACO object from the given id or alias - * - * @param string $id - * @return object Aco - * @access public - */ - function getAco($id) { - return $this->_instance->getAco($id); - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/acl_base.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/acl_base.php deleted file mode 100644 index 82e162a..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/acl_base.php +++ /dev/null @@ -1,63 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.controller.components - * @since CakePHP(tm) v 0.10.0.1232 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Access Control List abstract class. Not to be instantiated. - * Subclasses of this class are used by AclComponent to perform ACL checks in Cake. - * - * @package cake - * @subpackage cake.cake.libs.controller.components - * @abstract - */ -class AclBase extends Object { -/** - * This class should never be instantiated, just subclassed. - * - * No instantiations or constructor calls (even statically) - * - * @return AclBase - * @abstract - */ - function __construct() { - if (strcasecmp(get_class($this), "AclBase") == 0 || !is_subclass_of($this, "AclBase")) { - trigger_error("[acl_base] The AclBase class constructor has been called, or the class was instantiated. This class must remain abstract. Please refer to the Cake docs for ACL configuration.", E_USER_ERROR); - return null; - } - } -/** - * Empty method to be overridden in subclasses - * - * @param string $aro - * @param string $aco - * @param string $action - * @abstract - */ - function check($aro, $aco, $action = "*") { - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/db_acl.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/db_acl.php deleted file mode 100644 index f575a2a..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/db_acl.php +++ /dev/null @@ -1,310 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.controller.componenets.dbacl - * @since CakePHP(tm) v 0.2.9 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -if (!defined('ACL_DATABASE')) { - define('ACL_DATABASE', 'default'); -} -uses('controller' . DS . 'components' . DS . 'acl_base'); -uses('controller' . DS . 'components' . DS . 'dbacl' . DS . 'models' . DS . 'aclnode'); -uses('controller' . DS . 'components' . DS . 'dbacl' . DS . 'models' . DS . 'aco'); -uses('controller' . DS . 'components' . DS . 'dbacl' . DS . 'models' . DS . 'acoaction'); -uses('controller' . DS . 'components' . DS . 'dbacl' . DS . 'models' . DS . 'aro'); -uses('controller' . DS . 'components' . DS . 'dbacl' . DS . 'models' . DS . 'aros_aco'); -/** - * In this file you can extend the AclBase. - * - * @package cake - * @subpackage cake.cake.libs.controller.components.dbacl - */ -class DB_ACL extends AclBase { -/** - * Enter description here... - * - */ - function __construct() { - } -/** - * Enter description here... - * - * @param string $aro - * @param string $aco - * @param string $action - * @return boolean - * @access public - */ - function check($aro, $aco, $action = "*") { - $Perms = new ArosAco(); - $Aro = new Aro(); - $Aco = new Aco(); - - if ($aro == null || $aco == null) { - return false; - } - - $permKeys = $this->_getAcoKeys($Perms->loadInfo()); - $aroPath = $Aro->getPath($aro); - $tmpAcoPath = $Aco->getPath($aco); - - if ($tmpAcoPath === null) { - return false; - } - $tmpAcoPath = array_reverse($tmpAcoPath); - $acoPath = array(); - - if ($action != '*' && !in_array('_' . $action, $permKeys)) { - trigger_error('ACO permissions key "' . $action . '" does not exist in DB_ACL::check()', E_USER_NOTICE); - return false; - } - - foreach ($tmpAcoPath as $a) { - $acoPath[] = $a['Aco']['id']; - } - - for ($i = count($aroPath) - 1; $i >= 0; $i--) { - $perms = $Perms->findAll(array('ArosAco.aro_id' => $aroPath[$i]['Aro']['id'], - 'ArosAco.aco_id' => $acoPath), null, - 'Aco.lft desc'); - if ($perms == null || count($perms) == 0) { - continue; - } else { - foreach ($perms as $perm) { - if ($action == '*') { - // ARO must be cleared for ALL ACO actions - foreach ($permKeys as $key) { - if (isset($perm['ArosAco'])) { - if ($perm['ArosAco'][$key] != 1) { - return false; - } - } - } - return true; - - } else { - switch($perm['ArosAco']['_' . $action]) { - case -1: - return false; - case 0: - continue; - break; - case 1: - return true; - break; - } - } - } - } - } - return false; - } -/** - * Enter description here... - * - * @param string $aro - * @param string $aco - * @param string $action - * @param integer $value - * @return boolean - * @access public - */ - function allow($aro, $aco, $action = "*", $value = 1) { - $Perms = new ArosAco(); - $perms = $this->getAclLink($aro, $aco); - $permKeys = $this->_getAcoKeys($Perms->loadInfo()); - $save = array(); - - if ($perms == false) { - trigger_error('DB_ACL::allow() - Invalid node', E_USER_WARNING); - return false; - } - - if (isset($perms[0])) { - $save = $perms[0]['ArosAco']; - } - - if ($action == "*") { - $permKeys = $this->_getAcoKeys($Perms->loadInfo()); - - foreach ($permKeys as $key) { - $save[$key] = $value; - } - } else { - if (in_array('_' . $action, $permKeys)) { - $save['_' . $action] = $value; - } else { - trigger_error('DB_ACL::allow() - Invalid ACO action', E_USER_WARNING); - return false; - } - } - - $save['aro_id'] = $perms['aro']; - $save['aco_id'] = $perms['aco']; - - if ($perms['link'] != null && count($perms['link']) > 0) { - $save['id'] = $perms['link'][0]['ArosAco']['id']; - } - return $Perms->save(array('ArosAco' => $save)); - } -/** - * Enter description here... - * - * @param string $aro - * @param string $aco - * @param string $action - * @return boolean - * @access public - */ - function deny($aro, $aco, $action = "*") { - return $this->allow($aro, $aco, $action, -1); - } -/** - * Enter description here... - * - * @param string $aro - * @param string $aco - * @param string $action - * @return boolean - * @access public - */ - function inherit($aro, $aco, $action = "*") { - return $this->allow($aro, $aco, $action, 0); - } -/** - * Enter description here... - * - * @param string $aro - * @param string $aco - * @param string $action - * @return boolean - * @access public - */ - function grant($aro, $aco, $action = "*") { - return $this->allow($aro, $aco, $action); - } -/** - * Enter description here... - * - * @param string $aro - * @param string $aco - * @param string $action - * @return boolean - * @access public - */ - function revoke($aro, $aco, $action = "*") { - return $this->deny($aro, $aco, $action); - } -/** - * Get an ARO object from the given id or alias - * - * @param mixed $id - * @return object Aro - * @access public - */ - function getAro($id = null) { - return $this->__getObject($id, 'Aro'); - } -/** - * Get an ACO object from the given id or alias - * - * @param mixed $id - * @return object Aco - * @access public - */ - function getAco($id = null) { - return $this->__getObject($id, 'Aco'); - } - function __getObject($id = null, $object) { - if ($id == null) { - trigger_error('Null id provided in DB_ACL::get' . $object, E_USER_WARNING); - return null; - } - - $obj = new $object; - - if (is_numeric($id)) { - $key = 'foreign_key'; - if ($object == 'Aco') { - $key = 'object_id'; - } - - $conditions = array($object . '.' . $key => $id); - } else { - $conditions = array($object . '.alias' => $id); - } - - $tmp = $obj->find($conditions); - $obj->id = $tmp[$object]['id']; - return $obj; - } -/** - * Get an array of access-control links between the given Aro and Aco - * - * @param mixed $aro - * @param mixed $aco - * @return array - * @access public - */ - function getAclLink($aro, $aco) { - $Aro = new Aro(); - $Aco = new Aco(); - $Link = new ArosAco(); - - $obj = array(); - $obj['Aro'] = $Aro->find($Aro->_resolveID($aro)); - $obj['Aco'] = $Aco->find($Aco->_resolveID($aco)); - $obj['Aro'] = $obj['Aro']['Aro']; - $obj['Aco'] = $obj['Aco']['Aco']; - - if ($obj['Aro'] == null || count($obj['Aro']) == 0 || $obj['Aco'] == null || count($obj['Aco']) == 0) { - return false; - } - return array('aro' => $obj['Aro']['id'], - 'aco' => $obj['Aco']['id'], - 'link' => $Link->findAll(array( - 'ArosAco.aro_id' => $obj['Aro']['id'], - 'ArosAco.aco_id' => $obj['Aco']['id']))); - } -/** - * Enter description here... - * - * @param object $keys - * @return array - * @access protected - */ - function _getAcoKeys($keys) { - $newKeys = array(); - $keys = $keys->value; - - foreach ($keys as $key) { - if ($key['name'] != 'id' && $key['name'] != 'aro_id' && $key['name'] != 'aco_id') { - $newKeys[] = $key['name']; - } - } - return $newKeys; - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/models/aclnode.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/models/aclnode.php deleted file mode 100644 index 6ea9753..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/models/aclnode.php +++ /dev/null @@ -1,309 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.controller.components.dbacl.models - * @since CakePHP(tm) v 0.10.0.1232 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Load AppModel class - */ -loadModel(); -/** - * Short description for file. - * - * Long description for file - * - * @package cake - * @subpackage cake.cake.libs.controller.components.dbacl.models - * - */ -class AclNode extends AppModel { -/** - * Database configuration to use - * - * @var string - */ - var $useDbConfig = ACL_DATABASE; -/** - * Cache Queries - * - * @var boolean - */ - var $cacheQueries = false; -/** - * Creates a new ARO/ACO node - * - * @param int $linkId - * @param mixed $parentId - * @param string $alias - * @return boolean True on success, false on fail - * @access public - */ - function create($linkId = 0, $parentId = null, $alias = '') { - parent::create(); - if (strtolower(get_class($this)) == "aclnode") { - trigger_error("[acl_base] The AclBase class constructor has been called, or the class was instantiated. This class must remain abstract. Please refer to the Cake docs for ACL configuration.", E_USER_ERROR); - return null; - } - extract ($this->__dataVars()); - - if ($parentId == null || $parentId === 0) { - $parent = $this->find(null, 'MAX(rght) as rght', null, -1); - $parent['lft'] = $parent[0]['rght']; - - if ($parent[0]['rght'] == null || !$parent[0]['rght']) { - $parent['lft'] = 0; - } - } else { - $parent = $this->find($this->_resolveID($parentId), null, null, 0); - if ($parent == null || count($parent) == 0) { - trigger_error("Null parent in {$class}::create()", E_USER_WARNING); - return null; - } - $parent = $parent[$class]; - $this->_syncTable(1, $parent['lft'], $parent['lft']); - } - $return = $this->save(array($class => array($secondary_id => $linkId, - 'alias' => $alias, - 'lft' => $parent['lft'] + 1, - 'rght' => $parent['lft'] + 2))); - $this->id = $this->getLastInsertID(); - return $return; - } -/** - * Get the ARO/ACO ID with the given alias - * - * @param mixed $alias The alias of an ARO/ACO node - * @return mixed The ID of an ARO/ACO node, or false if not found. - * @access public - */ - function id($alias) { - extract($this->__dataVars()); - return $this->find(array($this->name . '.alias' => $alias), array($secondary_id), null, -1); - } -/** - * Deletes the ARO/ACO node with the given ID - * - * @param mixed $id The id or alias of an ARO/ACO node - * @return boolean True on success, false on fail - * @access public - */ - function delete($id) { - extract ($this->__dataVars()); - $db =& ConnectionManager::getDataSource($this->useDbConfig); - - $result = $this->find($this->_resolveID($id)); - $object = $result[$class]; - if ($object == null || count($object) == 0) { - return false; - } - - $children = $this->findAll(array("{$class}.rght" => "< {$result[$class]['rght']}", "{$class}.lft" => "> {$result[$class]['lft']}"), 'id', null, null, null, -1); - $idList = Set::extract($children, '{n}.' . $class . '.id'); - $idList[] = $result[$class]['id']; - - $this->ArosAco->query('DELETE FROM ' . $db->fullTableName($this->ArosAco) . " WHERE {$class}_id in (" . implode(', ', $idList) . ')'); - - $table = $db->fullTableName($this); - $this->query("DELETE FROM {$table} WHERE {$table}.lft >= {$result[$class]['lft']} AND {$table}.rght <= {$result[$class]['rght']}"); - - $shift = 1 + $result[$class]['rght'] - $result[$class]['lft']; - $this->query('UPDATE ' . $table . ' SET ' . $db->name('rght') . ' = ' . $db->name('rght') . ' - ' . $shift . ' WHERE ' . $db->name('rght') . ' > ' . $result[$class]['rght']); - $this->query('UPDATE ' . $table . ' SET ' . $db->name('lft') . ' = ' . $db->name('lft') . ' - ' . $shift . ' WHERE ' . $db->name('lft') . ' > ' . $result[$class]['lft']); - return true; - } -/** - * Sets the parent of the given node - * - * @param mixed $parentId - * @param mixed $id - * @return boolean True on success, false on failure - * @access public - */ - function setParent($parentId = null, $id = null) { - if (strtolower(get_class($this)) == "aclnode") { - trigger_error("[acl_base] The AclBase class constructor has been called, or the class was instantiated. This class must remain abstract. Please refer to the Cake docs for ACL configuration.", E_USER_ERROR); - return null; - } - extract ($this->__dataVars()); - - if ($id == null && $this->id == false) { - return false; - } elseif ($id == null) { - $id = $this->id; - } - $object = $this->find($this->_resolveID($id), null, null, 0); - - if ($object == null || count($object) == 0) { - return false; - } - $object = $object[$class]; - $parent = $this->getParent($id); - - if (($parent == null && $parentId == null) || ($parentId == $parent[$class][$secondary_id] && $parentId != null) || ($parentId == $parent[$class]['alias'] && $parentId != null)) { - return false; - } - - if ($parentId == null) { - $newParent = $this->find(null, 'MAX(rght) as lft', null, -1); - $newParent = $newParent[0]; - $newParent['rght'] = $newParent['lft']; - } else { - $newParent = $this->find($this->_resolveID($parentId), null, null, 0); - $newParent = $newParent[$class]; - } - - if ($parentId != null && $newParent['lft'] <= $object['lft'] && $newParent['rght'] >= $object['rght']) { - return false; - } - $this->_syncTable(0, $object['lft'], $object['lft']); - - if ($object['lft'] < $newParent['lft']) { - $newParent['lft'] = $newParent['lft'] - 2; - $newParent['rght'] = $newParent['rght'] - 2; - } - - if ($parentId != null) { - $this->_syncTable(1, $newParent['lft'], $newParent['lft']); - } - $object['lft'] = $newParent['lft'] + 1; - $object['rght'] = $newParent['lft'] + 2; - $this->save(array($class => $object)); - - if ($newParent['lft'] == 0) { - $this->_syncTable(2, $newParent['lft'], $newParent['lft']); - } - return true; - } -/** - * Get the parent node of the given Aro or Aco - * - * @param moxed $id - * @return array - * @access public - */ - function getParent($id) { - $path = $this->getPath($id); - if ($path == null || count($path) < 2) { - return null; - } else { - return $path[count($path) - 2]; - } - } -/** - * Gets the path to the given Aro or Aco - * - * @param mixed $id - * @return array - * @access public - */ - function getPath($id) { - if (strtolower(get_class($this)) == "aclnode") { - trigger_error("[acl_base] The AclBase class constructor has been called, or the class was instantiated. This class must remain abstract. Please refer to the Cake docs for ACL configuration.", E_USER_ERROR); - return null; - } - extract ($this->__dataVars()); - $item = $this->find($this->_resolveID($id), null, null, 0); - - if ($item == null || count($item) == 0) { - return null; - } - return $this->findAll(array($class . '.lft' => '<= ' . $item[$class]['lft'], $class . '.rght' => '>= ' . $item[$class]['rght']), null, array($class . '.lft' => 'ASC'), null, null, 0); - } -/** - * Get the child nodes of the given Aro or Aco - * - * @param mixed $id - * @return array - * @access public - */ - function getChildren($id) { - if (strtolower(get_class($this)) == "aclnode") { - trigger_error("[acl_base] The AclBase class constructor has been called, or the class was instantiated. This class must remain abstract. Please refer to the Cake docs for ACL configuration.", E_USER_ERROR); - return null; - } - - extract ($this->__dataVars()); - $item = $this->find($this->_resolveID($id), null, null, 0); - return $this->findAll(array($class . '.lft' => '> ' . $item[$class]['lft'], $class . '.rght' => '< ' . $item[$class]['rght']), null, null, null, null, null, 0); - } -/** - * Gets a conditions array to find an Aro or Aco, based on the given id or alias - * - * @param mixed $id - * @return array Conditions array for a find/findAll call - * @access public - */ - function _resolveID($id) { - extract($this->__dataVars()); - $key = (is_numeric($id) ? $secondary_id : 'alias'); - return array($this->name . '.' . $key => $id); - } -/** - * Shifts the left and right values of the aro/aco tables - * when a node is added or removed - * - * @param unknown_type $dir - * @param unknown_type $lft - * @param unknown_type $rght - * @access protected - */ - function _syncTable($dir, $lft, $rght) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - - if ($dir == 2) { - $shift = 1; - $dir = '+'; - } else { - $shift = 2; - - if ($dir > 0) { - $dir = '+'; - } else { - $dir = '-'; - } - } - $db->query('UPDATE ' . $db->fullTableName($this) . ' SET ' . $db->name('rght') . ' = ' . $db->name('rght') . ' ' . $dir . ' ' . $shift . ' WHERE ' . $db->name('rght') . ' > ' . $rght); - $db->query('UPDATE ' . $db->fullTableName($this) . ' SET ' . $db->name('lft') . ' = ' . $db->name('lft') . ' ' . $dir . ' ' . $shift . ' WHERE ' . $db->name('lft') . ' > ' . $lft); - } -/** - * Infers data based on the currently-intantiated subclass. - * - * @return array - * @access private - */ - function __dataVars() { - $vars = array(); - $class = strtolower(get_class($this)); - if ($class == 'aro') { - $vars['secondary_id'] = 'foreign_key'; - } else { - $vars['secondary_id'] = 'object_id'; - } - $vars['class'] = ucwords($class); - return $vars; - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/models/aco.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/models/aco.php deleted file mode 100644 index 988f8b1..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/models/aco.php +++ /dev/null @@ -1,52 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.controller.components.dbacl.models - * @since CakePHP(tm) v 0.10.0.1232 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Short description for file. - * - * Long description for file - * - * @package cake - * @subpackage cake.cake.libs.controller.components.dbacl.models - * - */ -class Aco extends AclNode{ -/** - * Model name - * - * @var string - */ - var $name = 'Aco'; -/** - * Has many association - * - * @var array - */ - var $hasMany = array('ArosAco'); -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/models/acoaction.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/models/acoaction.php deleted file mode 100644 index 5e33b80..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/models/acoaction.php +++ /dev/null @@ -1,56 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.controller.components.dbacl.models - * @since CakePHP(tm) v 0.10.0.1232 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Short description. - */ -loadModel(); -/** - * Short description for file. - * - * Long description for file - * - * @package cake - * @subpackage cake.cake.libs.controller.components.dbacl.models - * - */ -class AcoAction extends AppModel { -/** - * Model name - * - * @var string - */ - var $name = 'AcoAction'; -/** - * Belongs to association - * - * @var string - */ - var $belongsTo = 'Aco'; -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/models/aro.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/models/aro.php deleted file mode 100644 index 1db67eb..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/models/aro.php +++ /dev/null @@ -1,52 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.controller.components.dbacl.models - * @since CakePHP(tm) v 0.10.0.1232 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Short description for file. - * - * Long description for file - * - * @package cake - * @subpackage cake.cake.libs.controller.components.dbacl.models - * - */ -class Aro extends AclNode { -/** - * Model name - * - * @var string - */ - var $name = 'Aro'; -/** - * Has many association - * - * @var array - */ - var $hasMany = array('ArosAco'); -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/models/aros_aco.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/models/aros_aco.php deleted file mode 100644 index dade2cc..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/dbacl/models/aros_aco.php +++ /dev/null @@ -1,63 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.controller.components.dbacl.models - * @since CakePHP(tm) v 0.10.0.1232 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Short description for file. - * - * Long description for file - * - * @package cake - * @subpackage cake.cake.libs.controller.components.dbacl.models - */ -class ArosAco extends AppModel { -/** - * Cache Queries - * - * @var boolean - */ - var $cacheQueries = false; -/** - * Model name - * - * @var string - */ - var $name = 'ArosAco'; -/** - * Table this model uses - * - * @var string - */ - var $useTable = 'aros_acos'; -/** - * Belongs to association - * - * @var array - */ - var $belongsTo = array('Aro', 'Aco'); -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/iniacl/ini_acl.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/iniacl/ini_acl.php deleted file mode 100644 index e99de6f..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/iniacl/ini_acl.php +++ /dev/null @@ -1,180 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.controller.componenets.iniacl - * @since CakePHP(tm) v 0.2.9 - * @version $Revision: 7691 $ - * @modifiedby $LastChangedBy: nate $ - * @lastmodified $Date: 2008-10-02 00:59:12 -0400 (Thu, 02 Oct 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * load AclBase - */ -uses('controller/components/acl_base'); -/** - * In this file you can extend the AclBase. - * - * @package cake - * @subpackage cake.cake.libs.controller.componenets.iniacl - */ -class INI_ACL extends AclBase { -/** - * Array with configuration, parsed from ini file - * - * @var array - */ - var $config = null; -/** - * Constructor - * - */ - function __construct() { - } - -/** - * Main ACL check function. Checks to see if the ARO (access request object) has access to the ACO (access control object). - * Looks at the acl.ini.php file for permissions (see instructions in/config/acl.ini.php). - * - * @param string $aro - * @param string $aco - * @return boolean - * @access public - */ - function check($aro, $aco, $acoAction = null) { - if ($this->config == null) { - $this->config = $this->readConfigFile(CONFIGS . 'acl.ini.php'); - } - $aclConfig = $this->config; - - //First, if the user is specifically denied, then DENY - if (isset($aclConfig[$aro]['deny'])) { - $userDenies = $this->arrayTrim(explode(",", $aclConfig[$aro]['deny'])); - - if (array_search($aco, $userDenies)) { - //echo "User Denied!"; - return false; - } - } - - //Second, if the user is specifically allowed, then ALLOW - if (isset($aclConfig[$aro]['allow'])) { - $userAllows = $this->arrayTrim(explode(",", $aclConfig[$aro]['allow'])); - - if (array_search($aco, $userAllows)) { - //echo "User Allowed!"; - return true; - } - } - - //Check group permissions - if (isset($aclConfig[$aro]['groups'])) { - $userGroups = $this->arrayTrim(explode(",", $aclConfig[$aro]['groups'])); - - foreach ($userGroups as $group) { - //If such a group exists, - if (array_key_exists($group, $aclConfig)) { - //If the group is specifically denied, then DENY - if (isset($aclConfig[$group]['deny'])) { - $groupDenies=$this->arrayTrim(explode(",", $aclConfig[$group]['deny'])); - - if (array_search($aco, $groupDenies)) { - //echo("Group Denied!"); - return false; - } - } - - //If the group is specifically allowed, then ALLOW - if (isset($aclConfig[$group]['allow'])) { - $groupAllows = $this->arrayTrim(explode(",", $aclConfig[$group]['allow'])); - - if (array_search($aco, $groupAllows)) { - //echo("Group Allowed!"); - return true; - } - } - } - } - } - - //Default, DENY - //echo("DEFAULT: DENY."); - return false; - } - -/** - * Parses an INI file and returns an array that reflects the INI file's section structure. Double-quote friendly. - * - * @param string $fileName - * @return array - */ - function readConfigFile($fileName) { - $fileLineArray = file($fileName); - - foreach ($fileLineArray as $fileLine) { - $dataLine = trim($fileLine); - $firstChar = substr($dataLine, 0, 1); - - if ($firstChar != ';' && $dataLine != '') { - if ($firstChar == '[' && substr($dataLine, -1, 1) == ']') { - $sectionName = preg_replace('/[\[\]]/', '', $dataLine); - } else { - $delimiter = strpos($dataLine, '='); - - if ($delimiter > 0) { - $key = strtolower(trim(substr($dataLine, 0, $delimiter))); - $value = trim(substr($dataLine, $delimiter + 1)); - - if (substr($value, 0, 1) == '"' && substr($value, -1) == '"') { - $value = substr($value, 1, -1); - } - - $iniSetting[$sectionName][$key]=stripcslashes($value); - } else { - if (!isset($sectionName)) { - $sectionName = ''; - } - - $iniSetting[$sectionName][strtolower(trim($dataLine))]=''; - } - } - } else { - } - } - - return $iniSetting; - } -/** - * Removes trailing spaces on all array elements (to prepare for searching) - * - * @param array $array Array to trim - * @return array Trimmed array - * @access public - */ - function arrayTrim($array) { - foreach ($array as $key => $value) { - $array[$key] = trim($value); - } - array_unshift($array, ""); - return $array; - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/request_handler.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/request_handler.php deleted file mode 100644 index c307799..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/request_handler.php +++ /dev/null @@ -1,412 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.controller.components - * @since CakePHP(tm) v 0.10.4.1076 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -if (!defined('REQUEST_MOBILE_UA')) { - define('REQUEST_MOBILE_UA', - '(AvantGo|BlackBerry|DoCoMo|NetFront|Nokia|PalmOS|PalmSource|portalmmm|Plucker|ReqwirelessWeb|SonyEricsson|Symbian|UP\.Browser|Windows CE|Xiino)'); -} -/** - * Request object for handling alternative HTTP requests - * - * @package cake - * @subpackage cake.cake.libs.controller.components - * - */ -class RequestHandlerComponent extends Object{ -/** - * Enter description here... - * - * @var object - * @access public - */ - var $controller = true; -/** - * The layout that will be switched to for Ajax requests - * - * @var string - * @access public - * @see RequestHandler::setAjax() - */ - var $ajaxLayout = 'ajax'; -/** - * Determines whether or not callbacks will be fired on this component - * - * @var boolean - * @access public - */ - var $disableStartup = false; -/** - * Friendly content-type mappings used to set response types and determine - * request types. Can be modified with RequestHandler::setContent() - * - * @var array - * @access private - * @see RequestHandlerComponent::setContent - */ - var $__requestContent = array( - 'js' => 'text/javascript', - 'css' => 'text/css', - 'html' => 'text/html', - 'form' => 'application/x-www-form-urlencoded', - 'file' => 'multipart/form-data', - 'xhtml' => array('application/xhtml+xml', 'application/xhtml', 'text/xhtml'), - 'xml' => array('application/xml', 'text/xml'), - 'rss' => 'application/rss+xml', - 'atom' => 'application/atom+xml' - ); -/** - * Content-types accepted by the client. If extension parsing is enabled in the - * Router, and an extension is detected, the corresponding content-type will be - * used as the overriding primary content-type accepted. - * - * @var array - * @access private - */ - var $__acceptTypes = array(); -/** - * Constructor. Parses the accepted content types accepted by the client using - * HTTP_ACCEPT - * - * @access public - * @return void - */ - function __construct() { - $this->__acceptTypes = explode(',', env('HTTP_ACCEPT')); - - foreach ($this->__acceptTypes as $i => $type) { - if (strpos($type, ';')) { - $type = explode(';', $type); - $this->__acceptTypes[$i] = $type[0]; - } - } - parent::__construct(); - } -/** - * Startup - * - * @param object A reference to the controller - * @return null - * @access public - */ - function startup(&$controller) { - if ($this->disableStartup) { - return; - } - $this->setAjax($controller); - } -/** - * Sets a controller's layout based on whether or not the current call is Ajax - * - * Add UTF-8 header for IE6 on XPsp2 bug if RequestHandlerComponent::isAjax() - * - * @param object The controller object - * @return null - * @access public - */ - function setAjax(&$controller) { - if ($this->isAjax()) { - $controller->layout = $this->ajaxLayout; - // Add UTF-8 header for IE6 on XPsp2 bug - header ('Content-Type: text/html; charset=UTF-8'); - } - } -/** - * Returns true if the current call is from Ajax, false otherwise - * - * @return bool True if call is Ajax - * @access public - */ - function isAjax() { - if (env('HTTP_X_REQUESTED_WITH') != null) { - return env('HTTP_X_REQUESTED_WITH') == "XMLHttpRequest"; - } else { - return false; - } - } -/** - * Returns true if the current call accepts an XML response, false otherwise - * - * @return bool True if client accepts an XML response - * @access public - */ - function isXml() { - return $this->accepts('xml'); - } -/** - * Returns true if the current call accepts an RSS response, false otherwise - * - * @return bool True if client accepts an RSS response - * @access public - */ - function isRss() { - return $this->accepts('rss'); - } -/** - * Returns true if the current call accepts an RSS response, false otherwise - * - * @return bool True if client accepts an RSS response - * @access public - */ - function isAtom() { - return $this->accepts('atom'); - } -/** - * Returns true if the current call a POST request - * - * @return bool True if call is a POST - * @access public - */ - function isPost() { - return (strtolower(env('REQUEST_METHOD')) == 'post'); - } -/** - * Returns true if the current call a PUT request - * - * @return bool True if call is a PUT - * @access public - */ - function isPut() { - return (strtolower(env('REQUEST_METHOD')) == 'put'); - } -/** - * Returns true if the current call a GET request - * - * @return bool True if call is a GET - * @access public - */ - function isGet() { - return (strtolower(env('REQUEST_METHOD')) == 'get'); - } -/** - * Returns true if the current call a DELETE request - * - * @return bool True if call is a DELETE - * @access public - */ - function isDelete() { - return (strtolower(env('REQUEST_METHOD')) == 'delete'); - } -/** - * Gets Prototype version if call is Ajax, otherwise empty string. - * The Prototype library sets a special "Prototype version" HTTP header. - * - * @return string Prototype version of component making Ajax call - * @access public - */ - function getAjaxVersion() { - if (env('HTTP_X_PROTOTYPE_VERSION') != null) { - return env('HTTP_X_PROTOTYPE_VERSION'); - } - return false; - } -/** - * Adds/sets the Content-type(s) for the given name - * - * @param string $name The name of the Content-type, i.e. "html", "xml", "css" - * @param mixed $type The Content-type or array of Content-types assigned to the name - * @return void - * @access public - */ - function setContent($name, $type) { - $this->__requestContent[$name] = $type; - } -/** - * Gets the server name from which this request was referred - * - * @return string Server address - * @access public - */ - function getReferrer() { - if (env('HTTP_HOST') != null) { - $sess_host = env('HTTP_HOST'); - } - - if (env('HTTP_X_FORWARDED_HOST') != null) { - $sess_host = env('HTTP_X_FORWARDED_HOST'); - } - return trim(preg_replace('/:.*/', '', $sess_host)); - } -/** - * Gets remote client IP - * - * @return string Client IP address - * @access public - */ - function getClientIP() { - if (env('HTTP_X_FORWARDED_FOR') != null) { - $ipaddr = preg_replace('/,.*/', '', env('HTTP_X_FORWARDED_FOR')); - } else { - if (env('HTTP_CLIENT_IP') != null) { - $ipaddr = env('HTTP_CLIENT_IP'); - } else { - $ipaddr = env('REMOTE_ADDR'); - } - } - - if (env('HTTP_CLIENTADDRESS') != null) { - $tmpipaddr = env('HTTP_CLIENTADDRESS'); - - if (!empty($tmpipaddr)) { - $ipaddr = preg_replace('/,.*/', '', $tmpipaddr); - } - } - return trim($ipaddr); - } -/** - * Returns true if user agent string matches a mobile web browser - * - * @return bool True if user agent is a mobile web browser - * @access public - */ - function isMobile() { - return (preg_match('/' . REQUEST_MOBILE_UA . '/i', env('HTTP_USER_AGENT')) > 0); - } -/** - * Strips extra whitespace from output - * - * @param string $str - * @return string - * @access public - */ - function stripWhitespace($str) { - $r = preg_replace('/[\n\r\t]+/', '', $str); - return preg_replace('/\s{2,}/', ' ', $r); - } -/** - * Strips image tags from output - * - * @param string $str - * @return string - * @access public - */ - function stripImages($str) { - $str = preg_replace('/(]*>)(]+alt=")([^"]*)("[^>]*>)(<\/a>)/i', '$1$3$5
', $str); - $str = preg_replace('/(]+alt=")([^"]*)("[^>]*>)/i', '$2
', $str); - $str = preg_replace('/]*>/i', '', $str); - return $str; - } -/** - * Strips scripts and stylesheets from output - * - * @param string $str - * @return string - * @access public - */ - function stripScripts($str) { - return preg_replace('/(]+rel="[^"]*stylesheet"[^>]*>|]*>|style="[^"]*")|]*>.*?<\/script>|]*>.*?<\/style>|/i', '', $str); - } -/** - * Strips extra whitespace, images, scripts and stylesheets from output - * - * @param string $str - * @return string - * @access public - */ - function stripAll($str) { - $str = $this->stripWhitespace($str); - $str = $this->stripImages($str); - $str = $this->stripScripts($str); - return $str; - } -/** - * Strips the specified tags from output - * - * @return string - * @access public - */ - function stripTags() { - $params = params(func_get_args()); - $str = $params[0]; - - for ($i = 1; $i < count($params); $i++) { - $str = preg_replace('/<' . $params[$i] . '[^>]*>/i', '', $str); - $str = preg_replace('/<\/' . $params[$i] . '[^>]*>/i', '', $str); - } - return $str; - } - -/** - * Determines which content types the client accepts - * - * @param mixed $type Can be null (or no parameter), a string type name, or an - * array of types - * @return mixed If null or no parameter is passed, returns an array of content - * types the client accepts. If a string is passed, returns true - * if the client accepts it. If an array is passed, returns true - * if the client accepts one or more elements in the array. - * @access public - */ - function accepts($type = null) { - if ($type == null) { - return $this->__acceptTypes; - } elseif (is_array($type)) { - foreach ($type as $t) { - if ($this->accepts($t) == true) { - return true; - } - } - return false; - } elseif (is_string($type)) { - // If client only accepts */*, then assume default HTML browser - if ($type == 'html' && $this->__acceptTypes === array('*/*')) { - return true; - } - - if (!in_array($type, array_keys($this->__requestContent))) { - return false; - } - - $content = $this->__requestContent[$type]; - - if (is_array($content)) { - foreach ($content as $c) { - if (in_array($c, $this->__acceptTypes)) { - return true; - } - } - } else { - if (in_array($content, $this->__acceptTypes)) { - return true; - } - } - } - } -/** - * Determines which content types the client prefers - * - * @param mixed $type - * @returns mixed - * @access public - */ - function prefers($type = null) { - if ($type == null) { - return $this->accepts(null); - } - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/security.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/security.php deleted file mode 100644 index 52a8582..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/security.php +++ /dev/null @@ -1,202 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.controller.components - * @since CakePHP(tm) v 0.10.8.2156 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Short description for file. - * - * Long description for file - * - * @package cake - * @subpackage cake.cake.libs.controller.components - */ -class SecurityComponent extends Object { -/** - * Holds an instance of the core Security object - * - * @var object Security - * @access public - */ - var $Security = null; -/** - * The controller method that will be called if this request is black-hole'd - * - * @var string - * @access public - */ - var $blackHoleCallback = null; -/** - * List of controller actions for which a POST request is required - * - * @var array - * @access public - * @see SecurityComponent::requirePost() - */ - var $requirePost = array(); -/** - * List of actions that require a valid authentication key - * - * @var array - * @access public - * @see SecurityComponent::requireAuth() - */ - var $requireAuth = array(); -/** - * Controllers from which actions of the current controller are allowed to receive - * requests. - * - * @var array - * @see SecurityComponent::requireAuth() - */ - var $allowedControllers = array(); -/** - * Actions from which actions of the current controller are allowed to receive - * requests. - * - * @var array - * @see SecurityComponent::requireAuth() - */ - var $allowedActions = array(); -/** - * Other components used by the Security component - * - * @var array - * @access public - */ - var $components = array('RequestHandler', 'Session'); -/** - * Security class constructor - */ - function __construct () { - $this->Security = Security::getInstance(); - } -/** - * Component startup. All security checking happens here. - * - * @param object $controller - * @return unknown - * @access public - */ - function startup(&$controller) { - if (is_array($this->requirePost) && !empty($this->requirePost)) { - - if (in_array($controller->action, $this->requirePost)) { - - if (!$this->RequestHandler->isPost()) { - - if (!$this->blackHole($controller)) { - return null; - } - } - } - } - - if (is_array($this->requireAuth) && !empty($this->requireAuth) && !empty($controller->params['form'])) { - if (in_array($controller->action, $this->requireAuth)) { - - if (!isset($controller->params['data']['_Token'])) { - - if (!$this->blackHole($controller)) { - return null; - } - } - $token = $controller->params['data']['_Token']['key']; - - if ($this->Session->check('_Token')) { - $tData = $this->Session->read('_Token'); - if (!(intval($tData['expires']) > strtotime('now')) || $tData['key'] !== $token) { - - if (!$this->blackHole($controller)) { - return null; - } - } - - if (!empty($tData['allowedControllers']) && !in_array($controller->params['controller'], $tData['allowedControllers']) ||!empty($tData['allowedActions']) && !in_array($controller->params['action'], $tData['allowedActions'])) { - if (!$this->blackHole($controller)) { - return null; - } - } - } else { - if (!$this->blackHole($controller)) { - return null; - } - } - } - } - - if (!isset($controller->params['requested']) || $controller->params['requested'] != 1) { - // Add auth key for new form posts - $authKey = Security::generateAuthKey(); - $expires = strtotime('+'.Security::inactiveMins().' minutes'); - $token = array( - 'key' => $authKey, - 'expires' => $expires, - 'allowedControllers' => $this->allowedControllers, - 'allowedActions' => $this->allowedActions - ); - if (!isset($controller->params['data'])) { - $controller->params['data'] = array(); - } - $controller->params['_Token'] = $token; - $this->Session->write('_Token', $token); - } - } -/** - * Black-hole an invalid request with a 404 error or custom callback - * - * @param object $controller - * @return callback in controller - * @access public - */ - function blackHole(&$controller) { - if ($this->blackHoleCallback == null) { - header('HTTP/1.0 404 Not Found'); - exit(); - } elseif (method_exists($controller, $this->blackHoleCallback)) { - return $controller->{$this->blackHoleCallback}(); - } - } -/** - * Sets the actions that require a POST request, or empty for all actions - * - * @access public - * @return void - */ - function requirePost() { - $this->requirePost = func_get_args(); - } -/** - * Sets the actions that require an authenticated request, or empty for all actions - * - * @access public - * @return void - */ - function requireAuth() { - $this->requireAuth = func_get_args(); - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/session.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/session.php deleted file mode 100644 index ce89ac9..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/components/session.php +++ /dev/null @@ -1,306 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.controller.components - * @since CakePHP(tm) v 0.10.0.1232 - * @version $Revision: 7691 $ - * @modifiedby $LastChangedBy: nate $ - * @lastmodified $Date: 2008-10-02 00:59:12 -0400 (Thu, 02 Oct 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Session Component. - * - * Session handling from the controller. - * - * @package cake - * @subpackage cake.cake.libs.controller.components - * - */ -class SessionComponent extends CakeSession { -/** - * Used to determine if methods implementation is used, or bypassed - * - * @var boolean - * @access private - */ - var $__active = true; -/** - * Used to determine if Session has been started - * - * @var boolean - * @access private - */ - var $__started = false; -/** - * Used to determine if request are from an Ajax request - * - * @var boolean - * @access private - */ - var $__bare = 0; -/** - * Class constructor - * - * @param string $base The base path for the Session - */ - function __construct($base = null) { - if (!defined('AUTO_SESSION') || AUTO_SESSION === true) { - parent::__construct($base); - } else { - $this->__active = false; - } - } -/** - * Initializes the component, gets a reference to Controller::$param['bare']. - * - * @param object $controller A reference to the controller - * @access public - */ - function initialize(&$controller) { - if (isset($controller->params['bare'])) { - $this->__bare = $controller->params['bare']; - } - } -/** - * Startup method. - * - * @param object $controller Instantiating controller - * @access public - */ - function startup(&$controller) { - if ($this->__started === false && $this->__active === true) { - $this->__start(); - } - } -/** - * Starts Session on if 'Session.start' is set to false in core.php - * - * @param string $base The base path for the Session - * @access public - */ - function activate($base = null) { - if ($this->__active === true) { - return; - } - parent::__construct($base); - $this->__active = true; - } -/** - * Used to write a value to a session key. - * - * In your controller: $this->Session->write('Controller.sessKey', 'session value'); - * - * @param string $name The name of the key your are setting in the session. - * This should be in a Controller.key format for better organizing - * @param string $value The value you want to store in a session. - * @access public - */ - function write($name, $value = null) { - if ($this->__active === true) { - $this->__start(); - if (is_array($name)) { - foreach ($name as $key => $value) { - if (parent::write($key, $value) === false) { - return false; - } - } - return true; - } - if (parent::write($name, $value) === false) { - return false; - } - return true; - } - return false; - } -/** - * Used to read a session values for a key or return values for all keys. - * - * In your controller: $this->Session->read('Controller.sessKey'); - * Calling the method without a param will return all session vars - * - * @param string $name the name of the session key you want to read - * @return mixed value from the session vars - * @access public - */ - function read($name = null) { - if ($this->__active === true) { - $this->__start(); - return parent::read($name); - } - return false; - } -/** - * Used to delete a session variable. - * - * In your controller: $this->Session->del('Controller.sessKey'); - * - * @param string $name the name of the session key you want to delete - * @return boolean true is session variable is set and can be deleted, false is variable was not set. - * @access public - */ - function del($name) { - if ($this->__active === true) { - $this->__start(); - return parent::del($name); - } - return false; - } -/** - * Wrapper for SessionComponent::del(); - * - * In your controller: $this->Session->delete('Controller.sessKey'); - * - * @param string $name the name of the session key you want to delete - * @return boolean true is session variable is set and can be deleted, false is variable was not set. - * @access public - */ - function delete($name) { - if ($this->__active === true) { - $this->__start(); - return $this->del($name); - } - return false; - } -/** - * Used to check if a session variable is set - * - * In your controller: $this->Session->check('Controller.sessKey'); - * - * @param string $name the name of the session key you want to check - * @return boolean true is session variable is set, false if not - * @access public - */ - function check($name) { - if ($this->__active === true) { - $this->__start(); - return parent::check($name); - } - return false; - } -/** - * Used to determine the last error in a session. - * - * In your controller: $this->Session->error(); - * - * @return string Last session error - * @access public - */ - function error() { - if ($this->__active === true) { - $this->__start(); - return parent::error(); - } - return false; - } -/** - * Used to set a session variable that can be used to output messages in the view. - * - * In your controller: $this->Session->setFlash('This has been saved'); - * - * Additional params below can be passed to customize the output, or the Message.[key] - * - * @param string $message Message to be flashed - * @param string $layout Layout to wrap flash message in - * @param array $params Parameters to be sent to layout as view variables - * @param string $key Message key, default is 'flash' - * @access public - */ - function setFlash($message, $layout = 'default', $params = array(), $key = 'flash') { - if ($this->__active === true) { - $this->__start(); - $this->write('Message.' . $key, compact('message', 'layout', 'params')); - } - } -/** - * Used to renew a session id - * - * In your controller: $this->Session->renew(); - * - * @access public - */ - function renew() { - if ($this->__active === true) { - $this->__start(); - parent::renew(); - } - } -/** - * Used to check for a valid session. - * - * In your controller: $this->Session->valid(); - * - * @return boolean true is session is valid, false is session is invalid - * @access public - */ - function valid() { - if ($this->__active === true) { - $this->__start(); - return parent::valid(); - } - return false; - } -/** - * Used to destroy sessions - * - * In your controller: $this->Session->destroy(); - * - * @access public - */ - function destroy() { - if ($this->__active === true) { - $this->__start(); - parent::destroy(); - } - } -/** - * Returns Session id - * - * If $id is passed in a beforeFilter, the Session will be started - * with the specified id - * - * @param $id string - * @return string - * @access public - */ - function id($id = null) { - return parent::id($id); - } -/** - * Starts Session if SessionComponent is used in Controller::beforeFilter(), - * or is called from - * - * @access private - */ - function __start(){ - if ($this->__started === false) { - if (!$this->id() && parent::start()) { - $this->__started = true; - parent::_checkValid(); - } else { - $this->__started = parent::start(); - } - } - return $this->__started; - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/controller.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/controller.php deleted file mode 100644 index 482100b..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/controller.php +++ /dev/null @@ -1,998 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.controller - * @since CakePHP(tm) v 0.2.9 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Include files - */ - uses(DS . 'controller' . DS . 'component', DS . 'view' . DS . 'view'); -/** - * Controller - * - * Application controller (controllers are where you put all the actual code) - * Provides basic functionality, such as rendering views (aka displaying templates). - * Automatically selects model name from on singularized object class name - * and creates the model object if proper class exists. - * - * @package cake - * @subpackage cake.cake.libs.controller - * - */ -class Controller extends Object{ -/** - * Name of the controller. - * - * @var string - * @access public - */ - var $name = null; -/** - * Stores the current URL (for links etc.) - * - * @var string - * @access public - */ - var $here = null; -/** - * The webroot of the application - * - * @var string - * @access public - */ - var $webroot = null; -/** - * Action to be performed. - * - * @var string - * @access public - */ - var $action = null; -/** - * An array of names of models the particular controller wants to use. - * - * @var mixed A single name as a string or a list of names as an array. - * @access protected - */ - var $uses = false; -/** - * An array of names of built-in helpers to include. - * - * @var mixed A single name as a string or a list of names as an array. - * @access protected - */ - var $helpers = array('Html'); -/** - * Parameters received in the current request, i.e. GET and POST data - * - * @var array - * @access public - */ - var $params = array(); -/** - * POST'ed model data - * - * @var array - * @access public - */ - var $data = array(); -/** - * Directory where controllers views are stored - * Normaly this is automatically set - * - * @var string - * @access public - */ - var $viewPath = null; -/** - * Variables for the view - * - * @var array - * @access public - */ - var $viewVars = array(); -/** - * Web page title - * - * @var boolean - * @access public - */ - var $pageTitle = false; -/** - * An array of model objects. - * - * @var array Array of model objects. - * @access public - */ - var $modelNames = array(); -/** - * Base url path - * - * @var string - * @access public - */ - var $base = null; -/** - * Layout file to use (see /app/views/layouts/default.thtml) - * - * @var string - * @access public - */ - var $layout = 'default'; -/** - * Automatically render the view (the dispatcher checks for this variable before running render()) - * - * @var boolean - * @access public - */ - var $autoRender = true; -/** - * Automatically render the layout - * - * @var boolean - * @access public - */ - var $autoLayout = true; -/** - * Array of components a controller will use - * - * @var array - * @access public - */ - var $components = array(); -/** - * The name of the View class a controller sends output to - * - * @var string - * @access public - */ - var $view = 'View'; -/** - * File extension for view templates. Defaults to Cake's conventional ".thtml". - * - * @var string - * @access public - */ - var $ext = '.thtml'; -/** - * Instance of $view class create by a controller - * - * @var object - * @access private - */ - var $__viewClass = null; -/** - * The output of the requested action. Contains either a variable - * returned from the action, or the data of the rendered view; - * You can use this var in Child classes afterFilter() to alter output. - * - * @var string - * @access public - */ - var $output = null; -/** - * Automatically set to the name of a plugin. - * - * @var string - * @access public - */ - var $plugin = null; -/** - * Used to set methods a controller will allow the View to cache - * - * @var mixed - * @access public - */ - var $cacheAction = false; -/** - * Used to create cached instances of models a controller uses. - * When set to true all models related to the controller will be cached, - * this can increase performance in many cases - * - * @var boolean - * @access public - */ - var $persistModel = false; -/** - * Replaced with Controller::beforeFilter(); - * - * @deprecated will not be avialable after 1.1.x.x - */ - var $beforeFilter = null; -/** - * Replaced with Router::parseExtensions(); - * - * @deprecated will not be avialable after 1.1.x.x - */ - var $webservices = null; -/** - * Constructor. - */ - function __construct() { - if ($this->name === null) { - $r = null; - - if (!preg_match('/(.*)Controller/i', get_class($this), $r)) { - die ("Controller::__construct() : Can't get or parse my own class name, exiting."); - } - $this->name = $r[1]; - } - - if ($this->viewPath == null) { - $this->viewPath = Inflector::underscore($this->name); - } - - $this->modelClass = Inflector::classify($this->name); - $this->modelKey = Inflector::underscore($this->modelClass); - - if (is_subclass_of($this, 'AppController')) { - $appVars = get_class_vars('AppController'); - $uses = $appVars['uses']; - $merge = array('components', 'helpers'); - - if ($uses == $this->uses && !empty($this->uses)) { - array_unshift($this->uses, $this->modelClass); - } elseif ($this->uses !== null || $this->uses !== false) { - $merge[] = 'uses'; - } - - foreach ($merge as $var) { - if (isset($appVars[$var]) && !empty($appVars[$var]) && is_array($this->{$var})) { - $this->{$var} = array_merge($this->{$var}, array_diff($appVars[$var], $this->{$var})); - } - } - } - parent::__construct(); - } - - function _initComponents() { - $component = new Component(); - $component->init($this); - } -/** - * Loads and instantiates models required by this controller. - * If Controller::persistModel; is true, controller will create cached model instances on first request, - * additional request will used cached models - * - * @return mixed true when single model found and instance created error returned if models not found. - * @access public - */ - function constructClasses() { - if ($this->uses === null || ($this->uses === array())) { - return false; - } - if (empty($this->passedArgs) || !isset($this->passedArgs['0'])) { - $id = false; - } else { - $id = $this->passedArgs['0']; - } - $cached = false; - $object = null; - - if ($this->persistModel === true) { - uses('neat_array'); - } - if ($this->uses === false) { - if (!class_exists($this->modelClass)) { - loadModel($this->modelClass); - } - } - - if (class_exists($this->modelClass) && ($this->uses === false)) { - if ($this->persistModel === true) { - $cached = $this->_persist($this->modelClass, null, $object); - } - - if (($cached === false)) { - $model =& new $this->modelClass($id); - $this->modelNames[] = $this->modelClass; - $this->{$this->modelClass} =& $model; - - if ($this->persistModel === true) { - $this->_persist($this->modelClass, true, $model); - $registry = ClassRegistry::getInstance(); - $this->_persist($this->modelClass . 'registry', true, $registry->_objects, 'registry'); - } - } else { - $this->_persist($this->modelClass . 'registry', true, $object, 'registry'); - $this->_persist($this->modelClass, true, $object); - $this->modelNames[] = $this->modelClass; - } - return true; - } elseif ($this->uses === false) { - return $this->cakeError('missingModel', array(array('className' => $this->modelClass, 'webroot' => '', 'base' => $this->base))); - } - - if ($this->uses) { - $uses = is_array($this->uses) ? $this->uses : array($this->uses); - $this->modelClass = $uses[0]; - - foreach ($uses as $modelClass) { - $id = false; - $cached = false; - $object = null; - $modelKey = Inflector::underscore($modelClass); - - if (!class_exists($modelClass)) { - loadModel($modelClass); - } - - if (class_exists($modelClass)) { - if ($this->persistModel === true) { - $cached = $this->_persist($modelClass, null, $object); - } - - if (($cached === false)) { - $model =& new $modelClass($id); - $this->modelNames[] = $modelClass; - $this->{$modelClass} =& $model; - - if ($this->persistModel === true) { - $this->_persist($modelClass, true, $model); - $registry = ClassRegistry::getInstance(); - $this->_persist($modelClass . 'registry', true, $registry->_objects, 'registry'); - } - } else { - $this->_persist($modelClass . 'registry', true, $object, 'registry'); - $this->_persist($modelClass, true, $object); - $this->modelNames[] = $modelClass; - } - } else { - return $this->cakeError('missingModel', array(array('className' => $modelClass, 'webroot' => '', 'base' => $this->base))); - } - } - return true; - } - } -/** - * Redirects to given $url, after turning off $this->autoRender. - * Please notice that the script execution is not stopped after the redirect. - * - * @param string $url - * @param integer $status - * @access public - */ - function redirect($url, $status = null) { - $this->autoRender = false; - $pos = strpos($url, '://'); - $base = strip_plugin($this->base, $this->plugin); - if ($pos === false) { - if (strpos($url, '/') !== 0) { - $url = '/' . $url; - } - $url = FULL_BASE_URL . $base . $url; - } - - if (function_exists('session_write_close')) { - session_write_close(); - } - - if (!empty($status)) { - $codes = array( - 100 => "HTTP/1.1 100 Continue", - 101 => "HTTP/1.1 101 Switching Protocols", - 200 => "HTTP/1.1 200 OK", - 201 => "HTTP/1.1 201 Created", - 202 => "HTTP/1.1 202 Accepted", - 203 => "HTTP/1.1 203 Non-Authoritative Information", - 204 => "HTTP/1.1 204 No Content", - 205 => "HTTP/1.1 205 Reset Content", - 206 => "HTTP/1.1 206 Partial Content", - 300 => "HTTP/1.1 300 Multiple Choices", - 301 => "HTTP/1.1 301 Moved Permanently", - 302 => "HTTP/1.1 302 Found", - 303 => "HTTP/1.1 303 See Other", - 304 => "HTTP/1.1 304 Not Modified", - 305 => "HTTP/1.1 305 Use Proxy", - 307 => "HTTP/1.1 307 Temporary Redirect", - 400 => "HTTP/1.1 400 Bad Request", - 401 => "HTTP/1.1 401 Unauthorized", - 402 => "HTTP/1.1 402 Payment Required", - 403 => "HTTP/1.1 403 Forbidden", - 404 => "HTTP/1.1 404 Not Found", - 405 => "HTTP/1.1 405 Method Not Allowed", - 406 => "HTTP/1.1 406 Not Acceptable", - 407 => "HTTP/1.1 407 Proxy Authentication Required", - 408 => "HTTP/1.1 408 Request Time-out", - 409 => "HTTP/1.1 409 Conflict", - 410 => "HTTP/1.1 410 Gone", - 411 => "HTTP/1.1 411 Length Required", - 412 => "HTTP/1.1 412 Precondition Failed", - 413 => "HTTP/1.1 413 Request Entity Too Large", - 414 => "HTTP/1.1 414 Request-URI Too Large", - 415 => "HTTP/1.1 415 Unsupported Media Type", - 416 => "HTTP/1.1 416 Requested range not satisfiable", - 417 => "HTTP/1.1 417 Expectation Failed", - 500 => "HTTP/1.1 500 Internal Server Error", - 501 => "HTTP/1.1 501 Not Implemented", - 502 => "HTTP/1.1 502 Bad Gateway", - 503 => "HTTP/1.1 503 Service Unavailable", - 504 => "HTTP/1.1 504 Gateway Time-out" - ); - if (is_string($status)) { - $codes = array_combine(array_values($codes), array_keys($codes)); - } - if (isset($codes[$status])) { - $code = ife(is_numeric($status), $status, $codes[$status]); - $msg = ife(is_string($status), $status, $codes[$status]); - $status = "HTTP/1.1 {$code} {$msg}"; - } else { - $status = null; - } - } - if (!empty($status)) { - header($status); - } - header('Location: ' . $url); - if (!empty($status) && ($status >= 300 && $status < 400)) { - header($status); - } - } -/** - * Saves a variable to use inside a template. - * - * @param mixed $one A string or an array of data. - * @param mixed $two Value in case $one is a string (which then works as the key). Unused if $one is an associative array, otherwise serves as the values to $one's keys. - * @return mixed string or array of variables set - * @access public - */ - function set($one, $two = null) { - if (is_array($one)) { - if (is_array($two)) { - return $this->_setArray(array_combine($one, $two)); - } else { - return $this->_setArray($one); - } - } else { - return $this->_setArray(array($one => $two)); - } - } -/** - * Internally redirects one action to another - * - * @param string $action The new action to be redirected to - * @param mixed Any other parameters passed to this method will be passed as - * parameters to the new action. - * @access public - */ - function setAction($action) { - $this->action = $action; - $args = func_get_args(); - unset($args[0]); - call_user_func_array(array(&$this, $action), $args); - } -/** - * Returns number of errors in a submitted FORM. - * - * @return int Number of errors - * @access public - */ - function validate() { - $args = func_get_args(); - $errors = call_user_func_array(array(&$this, 'validateErrors'), $args); - - if ($errors === false) { - return 0; - } - return count($errors); - } -/** - * Validates a FORM according to the rules set up in the Model. - * - * @return int Number of errors - * @access public - */ - function validateErrors() { - $objects = func_get_args(); - if (!count($objects)) { - return false; - } - - $errors = array(); - foreach ($objects as $object) { - $errors = array_merge($errors, $this->{$object->name}->invalidFields($object->data)); - } - return $this->validationErrors = (count($errors) ? $errors : false); - } -/** - * Gets an instance of the view object and prepares it for rendering the output, then - * asks the view to actualy do the job. - * - * @param string $action - * @param string $layout - * @param string $file - * @return controllers related views - * @access public - */ - function render($action = null, $layout = null, $file = null) { - $viewClass = $this->view; - if ($this->view != 'View') { - $viewClass = $this->view . 'View'; - loadView($this->view); - } - $this->beforeRender(); - $this->__viewClass =& new $viewClass($this); - - if (!empty($this->modelNames)) { - $models = array(); - foreach ($this->modelNames as $currentModel) { - if (isset($this->$currentModel) && is_a($this->$currentModel, 'Model')) { - $models[] = Inflector::underscore($currentModel); - } - if (isset($this->$currentModel) && is_a($this->$currentModel, 'Model') && !empty($this->$currentModel->validationErrors)) { - $this->__viewClass->validationErrors[Inflector::camelize($currentModel)] =& $this->$currentModel->validationErrors; - } - } - $models = array_diff(ClassRegistry::keys(), $models); - foreach ($models as $currentModel) { - if (ClassRegistry::isKeySet($currentModel)) { - $currentObject =& ClassRegistry::getObject($currentModel); - if (is_a($currentObject, 'Model') && !empty($currentObject->validationErrors)) { - $this->__viewClass->validationErrors[Inflector::camelize($currentModel)] =& $currentObject->validationErrors; - } - } - } - } - $this->autoRender = false; - return $this->__viewClass->render($action, $layout, $file); - } -/** - * Gets the referring URL of this request - * - * @param string $default Default URL to use if HTTP_REFERER cannot be read from headers - * @param boolean $local If true, restrict referring URLs to local server - * @access public - */ - function referer($default = null, $local = false) { - $ref = env('HTTP_REFERER'); - $base = FULL_BASE_URL . $this->webroot; - - if ($ref != null && (defined(FULL_BASE_URL) || FULL_BASE_URL)) { - if (strpos($ref, $base) === 0) { - return substr($ref, strlen($base) - 1); - } elseif (!$local) { - return $ref; - } - } - - if ($default != null) { - return $default; - } else { - return '/'; - } - } -/** - * Sets data for this view. Will set title if the key "title" is in given $data array. - * - * @param array $data Array of - * @access protected - */ - function _setArray($data) { - foreach ($data as $name => $value) { - if ($name == 'title') { - $this->_setTitle($value); - } else { - $this->viewVars[$name] = $value; - } - } - } -/** - * Set the title element of the page. - * - * @param string $pageTitle Text for the title - * @access private - */ - function _setTitle($pageTitle) { - $this->pageTitle = $pageTitle; - } -/** - * Shows a message to the user $time seconds, then redirects to $url if DEBUG == 0. If DEBUG > 0, warnings and SQL output may halt redirection. - * Uses flash.thtml as a layout for the messages - * - * @param string $message Message to display to the user - * @param string $url Relative URL to redirect to after the time expires - * @param int $time seconds to show the message - * @access public - */ - function flash($message, $url, $pause = 1) { - $this->autoRender = false; - $this->autoLayout = false; - $this->set('url', $this->base . $url); - $this->set('message', $message); - $this->set('pause', $pause); - $this->set('page_title', $message); - - if (file_exists(VIEWS . 'layouts' . DS . 'flash.thtml')) { - $flash = VIEWS . 'layouts' . DS . 'flash.thtml'; - } elseif ($flash = fileExistsInPath(LIBS . 'view' . DS . 'templates' . DS . "layouts" . DS . 'flash.thtml')) { - } - $this->render(null, false, $flash); - } -/** - * Replaced with Controller::flash(); - * @deprecated will not be avialable after 1.1.x.x - */ - function flashOut($message, $url, $pause = 1) { - trigger_error('(Controller::flashOut()) Deprecated: Use Controller::flash() instead', E_USER_WARNING); - $this->autoRender = false; - $this->autoLayout = false; - $this->set('url', $url); - $this->set('message', $message); - $this->set('pause', $pause); - $this->set('page_title', $message); - - if (file_exists(VIEWS . 'layouts' . DS . 'flash.thtml')) { - $flash = VIEWS . 'layouts' . DS . 'flash.thtml'; - } elseif ($flash = fileExistsInPath(LIBS . 'view' . DS . 'templates' . DS . "layouts" . DS . 'flash.thtml')) { - } - $this->render(null, false, $flash); - } -/** - * This function creates a $fieldNames array for the view to use. - * - * @param array $data - * @param boolean $doCreateOptions - * @return field name arrays for the view - * @access public - */ - function generateFieldNames($data = null, $doCreateOptions = true) { - $fieldNames = array(); - $model = $this->modelClass; - $modelKey = $this->modelKey; - $table = $this->{$model}->table; - $objRegistryModel =& ClassRegistry::getObject($modelKey); - - foreach ($objRegistryModel->_tableInfo->value as $tabl) { - if ($objRegistryModel->isForeignKey($tabl['name'])) { - if (false !== strpos($tabl['name'], "_id")) { - $niceName = substr($tabl['name'], 0, strpos($tabl['name'], "_id" )); - } else { - $niceName = $niceName = $tabl['name']; - } - $fkNames = $this->{$model}->keyToTable[$tabl['name']]; - $fieldNames[$tabl['name']]['table'] = $fkNames[0]; - $fieldNames[$tabl['name']]['prompt'] = Inflector::humanize($niceName); - $fieldNames[$tabl['name']]['model'] = $fkNames[1]; - $fieldNames[$tabl['name']]['modelKey'] = $this->{$model}->tableToModel[$fieldNames[$tabl['name']]['table']]; - $fieldNames[$tabl['name']]['controller'] = Inflector::pluralize($this->{$model}->tableToModel[$fkNames[0]]); - $fieldNames[$tabl['name']]['foreignKey'] = true; - - } elseif ('created' != $tabl['name'] && 'updated' != $tabl['name']) { - $fieldNames[$tabl['name']]['prompt'] = Inflector::humanize($tabl['name']); - } elseif ('created' == $tabl['name']) { - $fieldNames[$tabl['name']]['prompt'] = 'Created'; - } elseif ('updated' == $tabl['name']) { - $fieldNames[$tabl['name']]['prompt'] = 'Modified'; - } - $fieldNames[$tabl['name']]['tagName'] = $model . '/' . $tabl['name']; - $validationFields = $objRegistryModel->validate; - - if (isset($validationFields[$tabl['name']])) { - if (VALID_NOT_EMPTY == $validationFields[$tabl['name']]) { - $fieldNames[$tabl['name']]['required'] = true; - $fieldNames[$tabl['name']]['errorMsg'] = "Required Field"; - } - } - $lParenPos = strpos($tabl['type'], '('); - $rParenPos = strpos($tabl['type'], ')'); - - if (false != $lParenPos) { - $type = substr($tabl['type'], 0, $lParenPos); - $fieldLength = substr($tabl['type'], $lParenPos + 1, $rParenPos - $lParenPos - 1); - } else { - $type = $tabl['type']; - } - - switch($type) { - case "text": - $fieldNames[$tabl['name']]['type'] = 'area'; - break; - case "string": - if (isset($fieldNames[$tabl['name']]['foreignKey'])) { - $fieldNames[$tabl['name']]['type'] = 'select'; - $fieldNames[$tabl['name']]['options'] = array(); - $otherModel =& ClassRegistry::getObject(Inflector::underscore($fieldNames[$tabl['name']]['modelKey'])); - - if (is_object($otherModel)) { - if ($doCreateOptions) { - $otherDisplayField = $otherModel->getDisplayField(); - $otherModel->recursive = 0; - $rec = $otherModel->findAll(); - - foreach ($rec as $pass) { - foreach ($pass as $key => $value) { - if ($key == $this->{$model}->tableToModel[$fieldNames[$tabl['name']]['table']] && isset($value[$otherModel->primaryKey]) && isset($value[$otherDisplayField])) { - $fieldNames[$tabl['name']]['options'][$value[$otherModel->primaryKey]] = $value[$otherDisplayField]; - } - } - } - } - $fieldNames[$tabl['name']]['selected'] = $data[$model][$tabl['name']]; - } - } else { - $fieldNames[$tabl['name']]['type'] = 'input'; - } - break; - case "boolean": - $fieldNames[$tabl['name']]['type'] = 'checkbox'; - break; - case "integer": - case "float": - if (strcmp($tabl['name'], $this->$model->primaryKey) == 0) { - $fieldNames[$tabl['name']]['type'] = 'hidden'; - } elseif (isset($fieldNames[$tabl['name']]['foreignKey'])) { - $fieldNames[$tabl['name']]['type'] = 'select'; - $fieldNames[$tabl['name']]['options'] = array(); - $otherModel =& ClassRegistry::getObject(Inflector::underscore($fieldNames[$tabl['name']]['modelKey'])); - - if (is_object($otherModel)) { - if ($doCreateOptions) { - $otherDisplayField = $otherModel->getDisplayField(); - $otherModel->recursive = 0; - $rec = $otherModel->findAll(); - - foreach ($rec as $pass) { - foreach ($pass as $key => $value) { - if ($key == $this->{$model}->tableToModel[$fieldNames[$tabl['name']]['table']] && isset($value[$otherModel->primaryKey]) && isset($value[$otherDisplayField])) { - $fieldNames[$tabl['name']]['options'][$value[$otherModel->primaryKey]] = $value[$otherDisplayField]; - } - } - } - } - $fieldNames[$tabl['name']]['selected'] = $data[$model][$tabl['name']]; - } - } else { - $fieldNames[$tabl['name']]['type'] = 'input'; - } - break; - case "enum": - $fieldNames[$tabl['name']]['type'] = 'select'; - $fieldNames[$tabl['name']]['options'] = array(); - $enumValues = split(',', $fieldLength); - - foreach ($enumValues as $enum) { - $enum = trim($enum, "'"); - $fieldNames[$tabl['name']]['options'][$enum] = $enum; - } - - $fieldNames[$tabl['name']]['selected'] = $data[$model][$tabl['name']]; - break; - case "date": - case "datetime": - case "time": - case "year": - if (0 != strncmp("created", $tabl['name'], 7) && 0 != strncmp("modified", $tabl['name'], 8)) { - $fieldNames[$tabl['name']]['type'] = $type; - } - - if (isset($data[$model][$tabl['name']])) { - $fieldNames[$tabl['name']]['selected'] = $data[$model][$tabl['name']]; - } else { - $fieldNames[$tabl['name']]['selected'] = null; - } - - break; - default: - break; - } - } - - foreach ($objRegistryModel->hasAndBelongsToMany as $relation => $relData) { - $modelName = $relData['className']; - $manyAssociation = $relation; - $modelKeyM = Inflector::underscore($modelName); - $modelObject =& new $modelName(); - - if ($doCreateOptions) { - $otherDisplayField = $modelObject->getDisplayField(); - $fieldNames[$relation]['model'] = $modelName; - $fieldNames[$relation]['prompt'] = "Related " . Inflector::humanize(Inflector::pluralize($relation)); - $fieldNames[$relation]['type'] = "selectMultiple"; - $fieldNames[$relation]['tagName'] = $manyAssociation . '/' . $manyAssociation; - $modelObject->recursive = 0; - $rec = $modelObject->findAll(); - - foreach ($rec as $pass) { - foreach ($pass as $key => $value) { - if ($key == $modelName && isset($value[$modelObject->primaryKey]) && isset($value[$otherDisplayField])) { - $fieldNames[$relation]['options'][$value[$modelObject->primaryKey]] = $value[$otherDisplayField]; - } - } - } - - if (isset($data[$manyAssociation])) { - foreach ($data[$manyAssociation] as $key => $row) { - $fieldNames[$relation]['selected'][$row[$modelObject->primaryKey]] = $row[$modelObject->primaryKey]; - } - } - } - } - return $fieldNames; - } -/** - * Converts POST'ed model data to a model conditions array, suitable for a find or findAll Model query - * - * @param array $data POST'ed data organized by model and field - * @return array An array of model conditions - * @access public - */ - function postConditions($data) { - if (!is_array($data) || empty($data)) { - return null; - } - $conditions = array(); - - foreach ($data as $model => $fields) { - foreach ($fields as $field => $value) { - $conditions[$model . '.' . $field] = $value; - } - } - return $conditions; - } -/** - * Cleans up the date fields of current Model. - * - * @param string $modelName - * @access public - */ - function cleanUpFields($modelName = null) { - if ($modelName == null) { - $modelName = $this->modelClass; - } - - foreach ($this->{$modelName}->_tableInfo->value as $field) { - if ('date' == $field['type'] && isset($this->params['data'][$modelName][$field['name'] . '_year'])) { - $newDate = $this->params['data'][$modelName][$field['name'] . '_year'] . '-'; - $newDate .= $this->params['data'][$modelName][$field['name'] . '_month'] . '-'; - $newDate .= $this->params['data'][$modelName][$field['name'] . '_day']; - unset($this->params['data'][$modelName][$field['name'] . '_year']); - unset($this->params['data'][$modelName][$field['name'] . '_month']); - unset($this->params['data'][$modelName][$field['name'] . '_day']); - unset($this->params['data'][$modelName][$field['name'] . '_hour']); - unset($this->params['data'][$modelName][$field['name'] . '_min']); - unset($this->params['data'][$modelName][$field['name'] . '_meridian']); - $this->params['data'][$modelName][$field['name']] = $newDate; - $this->data[$modelName][$field['name']] = $newDate; - - } elseif ('datetime' == $field['type'] && isset($this->params['data'][$modelName][$field['name'] . '_year'])) { - $hour = $this->params['data'][$modelName][$field['name'] . '_hour']; - - if ($hour != 12 && (isset($this->params['data'][$modelName][$field['name'] . '_meridian']) && 'pm' == $this->params['data'][$modelName][$field['name'] . '_meridian'])) { - $hour = $hour + 12; - } - - $newDate = $this->params['data'][$modelName][$field['name'] . '_year'] . '-'; - $newDate .= $this->params['data'][$modelName][$field['name'] . '_month'] . '-'; - $newDate .= $this->params['data'][$modelName][$field['name'] . '_day'] . ' '; - $newDate .= $hour . ':' . $this->params['data'][$modelName][$field['name'] . '_min'] . ':00'; - unset($this->params['data'][$modelName][$field['name'] . '_year']); - unset($this->params['data'][$modelName][$field['name'] . '_month']); - unset($this->params['data'][$modelName][$field['name'] . '_day']); - unset($this->params['data'][$modelName][$field['name'] . '_hour']); - unset($this->params['data'][$modelName][$field['name'] . '_min']); - unset($this->params['data'][$modelName][$field['name'] . '_meridian']); - $this->params['data'][$modelName][$field['name']] = $newDate; - $this->data[$modelName][$field['name']] = $newDate; - - } elseif ('time' == $field['type'] && isset($this->params['data'][$modelName][$field['name'] . '_hour'])) { - $hour = $this->params['data'][$modelName][$field['name'] . '_hour']; - - if ($hour != 12 && (isset($this->params['data'][$modelName][$field['name'] . '_meridian']) && 'pm' == $this->params['data'][$modelName][$field['name'] . '_meridian'])) { - $hour = $hour + 12; - } - if ($hour == 12 && (isset($this->params['data'][$modelName][$field['name'] . '_meridian']) && 'am' == $this->params['data'][$modelName][$field['name'] . '_meridian'])) { - $hour = '00'; - } - - $newDate = $hour . ':' . $this->params['data'][$modelName][$field['name'] . '_min'] . ':00'; - unset($this->params['data'][$modelName][$field['name'] . '_hour']); - unset($this->params['data'][$modelName][$field['name'] . '_min']); - unset($this->params['data'][$modelName][$field['name'] . '_meridian']); - $this->params['data'][$modelName][$field['name']] = $newDate; - $this->data[$modelName][$field['name']] = $newDate; - } - } - } -/** - * Called before the controller action. Overridden in subclasses. - * - * @access public - */ - function beforeFilter() { - } -/** - * Called after the controller action is run, but before the view is rendered. Overridden in subclasses. - * - * @access public - */ - function beforeRender() { - } -/** - * Called after the controller action is run and rendered. Overridden in subclasses. - * - * @access public - */ - function afterFilter() { - } -/** - * This method should be overridden in child classes. - * - * @param string $method name of method called example index, edit, etc. - * @return boolean - * @access protected - */ - function _beforeScaffold($method) { - return true; - } -/** - * This method should be overridden in child classes. - * - * @param string $method name of method called either edit or update. - * @return boolean - * @access protected - */ - function _afterScaffoldSave($method) { - return true; - } -/** - * This method should be overridden in child classes. - * - * @param string $method name of method called either edit or update. - * @return boolean - * @access protected - */ - function _afterScaffoldSaveError($method) { - return true; - } -/** - * This method should be overridden in child classes. - * If not it will render a scaffold error. - * Method MUST return true in child classes - * - * @param string $method name of method called example index, edit, etc. - * @return boolean - * @access protected - */ - function _scaffoldError($method) { - return false; - } -/** - * Used to convert HABTM data into an array for selectTag - * - * @param array $data - * @param string $key - * @return array - * @access protected - */ - function _selectedArray($data, $key = 'id') { - $array = array(); - if (!empty($data)) { - foreach ($data as $var) { - $array[$var[$key]] = $var[$key]; - } - } - return $array; - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/pages_controller.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/pages_controller.php deleted file mode 100644 index 4182ba7..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/pages_controller.php +++ /dev/null @@ -1,105 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.controller - * @since CakePHP(tm) v 0.2.9 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ - -/** - * Short description for class. - * - * This file is application-wide controller file. You can put all - * application-wide controller-related methods here. - * - * Add your application-wide methods in the class below, your controllers - * will inherit them. - * - * @package cake - * @subpackage cake.cake.libs.controller - */ -class PagesController extends AppController{ - -/** - * Enter description here... - * - * @var unknown_type - */ - var $name = 'Pages'; - -/** - * Enter description here... - * - * @var unknown_type - */ - var $helpers = array('Html'); - -/** - * This controller does not use a model - * - * @var $uses - */ - var $uses = array(); - -/** - * Displays a view - * - */ - function display() { - if (!func_num_args()) { - $this->redirect('/'); - } - - $path=func_get_args(); - - if (!count($path)) { - $this->redirect('/'); - } - - $count =count($path); - $page =null; - $subpage=null; - $title =null; - - if (!empty($path[0])) { - $page = $path[0]; - } - - if (!empty($path[1])) { - $subpage = $path[1]; - } - - if (!empty($path[$count - 1])) { - $title = ucfirst($path[$count - 1]); - } - - $this->set('page', $page); - $this->set('subpage', $subpage); - $this->set('title', $title); - $this->render(join('/', $path)); - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/scaffold.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/scaffold.php deleted file mode 100644 index e8d7037..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/controller/scaffold.php +++ /dev/null @@ -1,432 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.controller - * @since Cake v 0.10.0.1076 - * @version $Revision: 7691 $ - * @modifiedby $LastChangedBy: nate $ - * @lastmodified $Date: 2008-10-02 00:59:12 -0400 (Thu, 02 Oct 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Scaffolding is a set of automatic views, forms and controllers for starting web development work faster. - * - * Scaffold inspects your database tables, and making educated guesses, sets up a - * number of pages for each of your Models. These pages have data forms that work, - * and afford the web developer an early look at the data, and the possibility to over-ride - * scaffolded actions with custom-made ones. - * - * @package cake - * @subpackage cake.cake.libs.controller - */ -class Scaffold extends Object{ -/** - * Name of view to render - * - * @var string - */ - var $actionView = null; -/** - * Class name of model - * - * @var unknown_type - */ - var $modelKey = null; -/** - * Controller object - * - * @var Controller - */ - var $controllerClass = null; -/** - * Name of scaffolded Model - * - * @var string - */ - var $modelName = null; -/** - * Title HTML element for current scaffolded view - * - * @var string - */ - var $scaffoldTitle = null; -/** - * Base URL - * - * @var string - */ - var $base = false; -/** - * Construct and set up given controller with given parameters. - * - * @param object $controller instance of controller - * @param array $params - */ - function __construct(&$controller, $params) { - $this->controllerClass =& $controller; - $this->actionView = $controller->action; - $this->modelKey = ucwords(Inflector::singularize($controller->name)); - $this->scaffoldTitle = Inflector::humanize($this->modelKey); - $this->viewPath = Inflector::underscore($controller->name); - $this->controllerClass->pageTitle = $this->scaffoldTitle; - $this->controllerClass->pageTitle = 'Scaffold :: ' . Inflector::humanize($controller->action) . ' :: ' . - Inflector::humanize(Inflector::pluralize($this->modelKey)); - $this->__scaffold($params); - } -/** - * Renders a view view of scaffolded Model. - * - * @param array $params - * @return A rendered view of a row from Models database table - * @access private - */ - function __scaffoldView($params) { - if ($this->controllerClass->_beforeScaffold('view')) { - - if (isset($params['pass'][0])) { - $this->controllerClass->{$this->modelKey}->id = $params['pass'][0]; - - } elseif (isset($this->controllerClass->Session) && $this->controllerClass->Session->valid() != false) { - $this->controllerClass->Session->setFlash('No id set for ' . Inflector::humanize($this->modelKey) . '::view().'); - $this->controllerClass->redirect('/' . Inflector::underscore($this->controllerClass->viewPath)); - - } else { - return $this->controllerClass->flash('No id set for ' . Inflector::humanize($this->modelKey) . '::view().', - '/' . Inflector::underscore($this->controllerClass->viewPath)); - } - - $this->controllerClass->params['data'] = $this->controllerClass->{$this->modelKey}->read(); - $this->controllerClass->set('data', $this->controllerClass->params['data']); - $this->controllerClass->set('fieldNames',$this->controllerClass->generateFieldNames( - $this->controllerClass->params['data'], false)); - - if (file_exists(APP . 'views' . DS . $this->viewPath . DS . 'scaffold.view.thtml')) { - return $this->controllerClass->render($this->actionView, '', - APP . 'views' . DS . $this->viewPath . DS . 'scaffold.view.thtml'); - - } elseif (file_exists(APP . 'views' . DS . 'scaffold' . DS . 'scaffold.view.thtml')) { - return $this->controllerClass->render($this->actionView, '', - APP . 'views' . DS . 'scaffold' . DS . 'scaffold.view.thtml'); - } else { - return $this->controllerClass->render($this->actionView, '', - LIBS . 'view' . DS . 'templates' . DS . 'scaffolds' . DS . 'view.thtml'); - } - } elseif ($this->controllerClass->_scaffoldError('view') === false) { - return $this->__scaffoldError(); - } - } -/** - * Renders List view of scaffolded Model. - * - * @param array $params - * @return A rendered view listing rows from Models database table - * @access private - */ - function __scaffoldIndex($params) { - if ($this->controllerClass->_beforeScaffold('index')) { - $this->controllerClass->set('fieldNames', $this->controllerClass->generateFieldNames(null, false)); - $this->controllerClass->{$this->modelKey}->recursive = 0; - $this->controllerClass->set('data', $this->controllerClass->{$this->modelKey}->findAll()); - - if (file_exists(APP . 'views' . DS . $this->viewPath . DS . 'scaffold.index.thtml')) { - return $this->controllerClass->render($this->actionView, '', - APP . 'views' . DS . $this->viewPath . DS . 'scaffold.index.thtml'); - - } elseif (file_exists(APP . 'views' . DS . 'scaffold' . DS . 'scaffold.index.thtml')) { - return $this->controllerClass->render($this->actionView, '', - APP . 'views' . DS . 'scaffold' . DS . 'scaffold.index.thtml'); - } else { - return $this->controllerClass->render($this->actionView, '', - LIBS . 'view' . DS . 'templates' . DS . 'scaffolds' . DS . 'index.thtml'); - } - } elseif ($this->controllerClass->_scaffoldError('index') === false) { - return $this->__scaffoldError(); - } - } -/** - * Renders an Add or Edit view for scaffolded Model. - * - * @param array $params - * @param string $params add or edit - * @return A rendered view with a form to edit or add a record in the Models database table - * @access private - */ - function __scaffoldForm($params = array(), $type) { - $thtml = 'edit'; - $form = 'Edit'; - - if ($type === 'add') { - $thtml = 'add'; - $form = 'Add'; - } - - if ($this->controllerClass->_beforeScaffold($type)) { - if ($type == 'edit') { - - if (isset($params['pass'][0])) { - $this->controllerClass->{$this->modelKey}->id = $params['pass'][0]; - - } elseif (isset($this->controllerClass->Session) && $this->controllerClass->Session->valid() != false) { - $this->controllerClass->Session->setFlash('No id set for ' . Inflector::humanize($this->modelKey) . '::edit().'); - $this->controllerClass->redirect('/' . Inflector::underscore($this->controllerClass->viewPath)); - - } else { - return $this->controllerClass->flash('No id set for ' . Inflector::humanize($this->modelKey) . '::edit().', - '/' . Inflector::underscore($this->controllerClass->viewPath)); - } - - $this->controllerClass->params['data']=$this->controllerClass->{$this->modelKey}->read(); - $this->controllerClass->set('fieldNames', $this->controllerClass->generateFieldNames( - $this->controllerClass->params['data'])); - $this->controllerClass->set('data', $this->controllerClass->params['data']); - } else { - $this->controllerClass->set('fieldNames', $this->controllerClass->generateFieldNames()); - } - $this->controllerClass->set('type', $form); - - if (file_exists(APP . 'views' . DS . $this->viewPath . DS . 'scaffold.' . $thtml . '.thtml')) { - return $this->controllerClass->render($this->actionView, '', - APP . 'views' . DS . $this->viewPath . DS . 'scaffold.' . $thtml . '.thtml'); - } elseif (file_exists(APP . 'views' . DS . 'scaffold' . DS . 'scaffold.' . $thtml . '.thtml')) { - return $this->controllerClass->render($this->actionView, '', - APP . 'views' . DS . 'scaffold' . DS . 'scaffold.' . $thtml . '.thtml'); - } else { - return $this->controllerClass->render($this->actionView, '', - LIBS . 'view' . DS . 'templates' . DS . 'scaffolds' . DS . 'edit.thtml'); - } - } elseif ($this->controllerClass->_scaffoldError($type) === false) { - return $this->__scaffoldError(); - } - } -/** - * Saves or updates a model. - * - * @param array $params - * @param string $type create or update - * @return success on save/update, add/edit form if data is empty or error if save or update fails - * @access private - */ - function __scaffoldSave($params = array(), $type) { - $thtml = 'edit'; - $form = 'Edit'; - $success = 'updated'; - $formError = 'edit'; - - if ($this->controllerClass->_beforeScaffold($type)) { - if (empty($this->controllerClass->params['data'])) { - if ($type === 'create') { - $formError = 'add'; - } - return $this->__scaffoldForm($params, $formError); - } - $this->controllerClass->set('fieldNames', $this->controllerClass->generateFieldNames()); - $this->controllerClass->cleanUpFields(); - - if ($type == 'create') { - $this->controllerClass->{$this->modelKey}->create(); - $thtml = 'add'; - $form = 'Add'; - $success = 'saved'; - } - - if ($this->controllerClass->{$this->modelKey}->save($this->controllerClass->params['data'])) { - - if ($this->controllerClass->_afterScaffoldSave($type)) { - - if (isset($this->controllerClass->Session) && $this->controllerClass->Session->valid() != false) { - $this->controllerClass->Session->setFlash('The ' . Inflector::humanize($this->modelKey) . ' has been ' . $success . '.'); - $this->controllerClass->redirect('/' . Inflector::underscore($this->controllerClass->viewPath)); - } else { - return $this->controllerClass->flash('The ' . Inflector::humanize($this->modelKey) . ' has been ' . $success . '.', - '/' . Inflector::underscore($this->controllerClass->viewPath)); - } - } else { - return $this->controllerClass->_afterScaffoldSaveError($type); - } - } else { - if (isset($this->controllerClass->Session) && $this->controllerClass->Session->valid() != false) { - $this->controllerClass->Session->setFlash('Please correct errors below.'); - } - $this->controllerClass->set('data', $this->controllerClass->params['data']); - $this->controllerClass->set('fieldNames', - $this->controllerClass->generateFieldNames($this->__rebuild($this->controllerClass->params['data']))); - $this->controllerClass->validateErrors($this->controllerClass->{$this->modelKey}); - $this->controllerClass->set('type', $form); - - if (file_exists(APP . 'views' . DS . $this->viewPath . DS . 'scaffold.' . $thtml . '.thtml')) { - return $this->controllerClass->render($this->actionView, '', - APP . 'views' . DS . $this->viewPath . DS . 'scaffold.' . $thtml . '.thtml'); - } elseif (file_exists(APP . 'views' . DS . 'scaffold' . DS . 'scaffold.' . $thtml . '.thtml')) { - return $this->controllerClass->render($this->actionView, '', - APP . 'views' . DS . 'scaffold' . DS . 'scaffold.' . $thtml . '.thtml'); - } else { - return $this->controllerClass->render($this->actionView, '', - LIBS . 'view' . DS . 'templates' . DS . 'scaffolds' . DS . 'edit.thtml'); - } - } - } elseif ($this->controllerClass->_scaffoldError($type) === false) { - return $this->__scaffoldError(); - } - } -/** - * Performs a delete on given scaffolded Model. - * - * @param array $params - * @return success on delete error if delete fails - * @access private - */ - function __scaffoldDelete($params = array()) { - if ($this->controllerClass->_beforeScaffold('delete')) { - $id = $params['pass'][0]; - - if ($this->controllerClass->{$this->modelKey}->del($id)) { - - if (isset($this->controllerClass->Session) && $this->controllerClass->Session->valid() != false) { - $this->controllerClass->Session->setFlash('The ' . Inflector::humanize($this->modelKey) . ' with id: ' . $id . ' has been deleted.'); - $this->controllerClass->redirect('/' . Inflector::underscore($this->controllerClass->viewPath)); - } else { - return $this->controllerClass->flash('The ' . Inflector::humanize($this->modelKey) . ' with id: ' . $id . ' has been deleted.', - '/' . Inflector::underscore($this->controllerClass->viewPath)); - } - } else { - if (isset($this->controllerClass->Session) && $this->controllerClass->Session->valid() != false) { - $this->controllerClass->Session->setFlash('There was an error deleting the ' . Inflector::humanize($this->modelKey) . ' with the id ' . $id); - $this->controllerClass->redirect('/' . Inflector::underscore($this->controllerClass->viewPath)); - } else { - return $this->controllerClass->flash('There was an error deleting the ' . Inflector::humanize($this->modelKey) . ' with the id ' . $id, - '/' . Inflector::underscore($this->controllerClass->viewPath)); - } - } - } elseif ($this->controllerClass->_scaffoldError('delete') === false) { - return $this->__scaffoldError(); - } - } -/** - * Enter description here... - * - * @return unknown - */ - function __scaffoldError() { - if (file_exists(APP . 'views' . DS . $this->viewPath . DS . 'scaffold.error.thtml')) { - return $this->controllerClass->render($this->actionView, '', - APP . 'views' . DS . $this->viewPath . DS . 'scaffold.error.thtml'); - } elseif (file_exists(APP . 'views' . DS . 'scaffold' . DS . 'scaffold.error.thtml')) { - return $this->controllerClass->render($this->actionView, '', - APP . 'views' . DS . 'scaffold' . DS . 'scaffold.error.thtml'); - } else { - return $this->controllerClass->render($this->actionView, '', - LIBS . 'view' . DS . 'templates' . DS . 'errors' . DS . 'scaffold_error.thtml'); - } - } -/** - * When forms are submited the arrays need to be rebuilt if - * an error occured, here the arrays are rebuilt to structure needed - * - * @param array $params data passed to forms - * @return array rebuilds the association arrays to pass back to Controller::generateFieldNames() - */ - function __rebuild($params) { - foreach ($params as $model => $field) { - if (!empty($field) && is_array($field)) { - $match = array_keys($field); - - if ($model == $match[0]) { - $count = 0; - - foreach ($field[$model] as $value) { - $params[$model][$count][$this->controllerClass->{$this->modelKey}->{$model}->primaryKey] = $value; - $count++; - } - unset ($params[$model][$model]); - } - } - } - return $params; - } -/** - * When methods are now present in a controller - * scaffoldView is used to call default Scaffold methods if: - * - * var $scaffold; - * - * is placed in the controller's class definition. - * - * @param string $url - * @param string $controller_class - * @param array $params - * @since Cake v 0.10.0.172 - * @access private - */ - function __scaffold($params) { - if (!in_array('Form', $this->controllerClass->helpers)) { - $this->controllerClass->helpers[] = 'Form'; - } - if ($this->controllerClass->constructClasses()) { - $db =& ConnectionManager::getDataSource($this->controllerClass->{$this->modelKey}->useDbConfig); - - if (isset($db)) { - if ($params['action'] === 'index' || $params['action'] === 'list' || $params['action'] === 'view' - || $params['action'] === 'add' || $params['action'] === 'create' - || $params['action'] === 'edit' || $params['action'] === 'update' - || $params['action'] === 'delete') { - - switch($params['action']) { - case 'index': - $this->__scaffoldIndex($params); - break; - case 'view': - $this->__scaffoldView($params); - break; - case 'list': - $this->__scaffoldIndex($params); - break; - case 'add': - $this->__scaffoldForm($params, 'add'); - break; - case 'edit': - $this->__scaffoldForm($params, 'edit'); - break; - case 'create': - $this->__scaffoldSave($params, 'create'); - break; - case 'update': - $this->__scaffoldSave($params, 'update'); - break; - case 'delete': - $this->__scaffoldDelete($params); - break; - } - } else { - return $this->cakeError('missingAction', - array(array('className' => Inflector::camelize($params['controller'] . "Controller"), - 'base' => $this->controllerClass->base, - 'action' => $params['action'], - 'webroot' => $this->controllerClass->webroot))); - } - } else { - return $this->cakeError('missingDatabase', array(array('webroot' => $this->controllerClass->webroot))); - } - } else { - return $this->cakeError('missingModel', array(array('className' => $this->modelKey, 'webroot' => '', 'base' => $this->base))); - } - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/error.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/error.php deleted file mode 100644 index 852e6b4..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/error.php +++ /dev/null @@ -1,347 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs - * @since CakePHP(tm) v 0.10.5.1732 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -uses('sanitize'); -/** - * Short description for file. - * - * Long description for file - * - * @package cake - * @subpackage cake.cake.libs - */ -class ErrorHandler extends Object { - var $controller = null; - -/** - * Class constructor. - * - * @param string $method - * @param array $messages - * @return unknown - */ - function __construct($method, $messages) { - parent::__construct(); - static $__previousError = null; - $allow = array('.', '/', '_', ' ', '-', '~'); - if (substr(PHP_OS,0,3) == "WIN") { - $allow = array_merge($allow, array('\\', ':') ); - } - $clean = new Sanitize(); - $messages = $clean->paranoid($messages, $allow); - if (!class_exists('Dispatcher')) { - require CAKE . 'dispatcher.php'; - } - $this->__dispatch =& new Dispatcher(); - - if ($__previousError != array($method, $messages)) { - $__previousError = array($method, $messages); - - if (!class_exists('AppController')) { - loadController(null); - } - - $this->controller =& new AppController(); - if (!empty($this->controller->uses)) { - $this->controller->constructClasses(); - } - $this->controller->_initComponents(); - $this->controller->cacheAction = false; - $this->__dispatch->start($this->controller); - - if (method_exists($this->controller, 'apperror')) { - return $this->controller->appError($method, $messages); - } - } else { - $this->controller =& new Controller(); - $this->controller->cacheAction = false; - } - if (Configure::read() > 0 || $method == 'error') { - call_user_func_array(array(&$this, $method), $messages); - } else { - call_user_func_array(array(&$this, 'error404'), $messages); - } - } -/** - * Displays an error page (e.g. 404 Not found). - * - * @param array $params - */ - function error($params) { - extract($params); - $this->controller->base = $base; - $this->controller->webroot = $this->_webroot(); - $this->controller->viewPath='errors'; - $this->controller->set(array('code' => $code, - 'name' => $name, - 'message' => $message, - 'title' => $code . ' ' . $name)); - $this->controller->render('error404'); - exit(); - } -/** - * Convenience method to display a 404 page. - * - * @param array $params - */ - function error404($params) { - extract($params); - - if (!isset($url)) { - $url = $action; - } - if (!isset($message)) { - $message = ''; - } - if (!isset($base)) { - $base = ''; - } - - header("HTTP/1.0 404 Not Found"); - $this->error(array('code' => '404', - 'name' => 'Not found', - 'message' => sprintf("The requested address %s was not found on this server.", $url, $message), - 'base' => $base)); - exit(); - } -/** - * Renders the Missing Controller web page. - * - * @param array $params - */ - function missingController($params) { - extract($params); - $this->controller->base = $base; - $this->controller->webroot = $webroot; - $this->controller->viewPath ='errors'; - $controllerName = str_replace('Controller', '', $className); - $this->controller->set(array('controller' => $className, - 'controllerName' => $controllerName, - 'title' => 'Missing Controller')); - $this->controller->render('missingController'); - exit(); - } -/** - * Renders the Missing Action web page. - * - * @param array $params - */ - function missingAction($params) { - extract($params); - $this->controller->base = $base; - $this->controller->webroot = $webroot; - $this->controller->viewPath = 'errors'; - $this->controller->set(array('controller' => $className, - 'action' => $action, - 'title' => 'Missing Method in Controller')); - $this->controller->render('missingAction'); - exit(); - } -/** - * Renders the Private Action web page. - * - * @param array $params - */ - function privateAction($params) { - extract($params); - $this->controller->base = $base; - $this->controller->webroot = $webroot; - $this->controller->viewPath = 'errors'; - $this->controller->set(array('controller' => $className, - 'action' => $action, - 'title' => 'Trying to access private method in class')); - $this->controller->render('privateAction'); - exit(); - } -/** - * Renders the Missing Table web page. - * - * @param array $params - */ - function missingTable($params) { - extract($params); - $this->controller->viewPath = 'errors'; - $this->controller->webroot = $this->_webroot(); - $this->controller->set(array('model' => $className, - 'table' => $table, - 'title' => 'Missing Database Table')); - $this->controller->render('missingTable'); - exit(); - } -/** - * Renders the Missing Database web page. - * - * @param array $params - */ - function missingDatabase($params = array()) { - extract($params); - $this->controller->viewPath = 'errors'; - $this->controller->webroot = $this->_webroot(); - $this->controller->set(array('title' => 'Scaffold Missing Database Connection')); - $this->controller->render('missingScaffolddb'); - exit(); - } -/** - * Renders the Missing View web page. - * - * @param array $params - */ - function missingView($params) { - extract($params); - $this->controller->base = $base; - $this->controller->viewPath = 'errors'; - $this->controller->webroot = $this->_webroot(); - $this->controller->set(array('controller' => $className, - 'action' => $action, - 'file' => $file, - 'title' => 'Missing View')); - $this->controller->render('missingView'); - exit(); - } -/** - * Renders the Missing Layout web page. - * - * @param array $params - */ - function missingLayout($params) { - extract($params); - $this->controller->base = $base; - $this->controller->viewPath = 'errors'; - $this->controller->webroot = $this->_webroot(); - $this->controller->layout = 'default'; - $this->controller->set(array('file' => $file, - 'title' => 'Missing Layout')); - $this->controller->render('missingLayout'); - exit(); - } -/** - * Renders the Database Connection web page. - * - * @param array $params - */ - function missingConnection($params) { - extract($params); - $this->controller->viewPath = 'errors'; - $this->controller->webroot = $this->_webroot(); - $this->controller->set(array('model' => $className, - 'title' => 'Missing Database Connection')); - $this->controller->render('missingConnection'); - exit(); - } -/** - * Renders the Missing Helper file web page. - * - * @param array $params - */ - function missingHelperFile($params) { - extract($params); - $this->controller->base = $base; - $this->controller->viewPath = 'errors'; - $this->controller->webroot = $this->_webroot(); - $this->controller->set(array('helperClass' => Inflector::camelize($helper) . "Helper", - 'file' => $file, - 'title' => 'Missing Helper File')); - $this->controller->render('missingHelperFile'); - exit(); - } -/** - * Renders the Missing Helper class web page. - * - * @param array $params - */ - function missingHelperClass($params) { - extract($params); - $this->controller->base = $base; - $this->controller->viewPath = 'errors'; - $this->controller->webroot = $this->_webroot(); - $this->controller->set(array('helperClass' => Inflector::camelize($helper) . "Helper", - 'file' => $file, - 'title' => 'Missing Helper Class')); - $this->controller->render('missingHelperClass'); - exit(); - } -/** - * Renders the Missing Component file web page. - * - * @param array $params - */ - function missingComponentFile($params) { - extract($params); - $this->controller->base = $base; - $this->controller->viewPath = 'errors'; - $this->controller->webroot = $this->_webroot(); - $this->controller->set(array('controller' => $className, - 'component' => $component, - 'file' => $file, - 'title' => 'Missing Component File')); - $this->controller->render('missingComponentFile'); - exit(); - } -/** - * Renders the Missing Component class web page. - * - * @param array $params - */ - function missingComponentClass($params) { - extract($params); - $this->controller->base = $base; - $this->controller->viewPath = 'errors'; - $this->controller->webroot = $this->_webroot(); - $this->controller->set(array('controller' => $className, - 'component' => $component, - 'file' => $file, - 'title' => 'Missing Component Class')); - $this->controller->render('missingComponentClass'); - exit(); - } -/** - * Renders the Missing Model class web page. - * - * @param unknown_type $params - */ - function missingModel($params) { - extract($params); - $this->controller->base = $base; - $this->controller->viewPath = 'errors'; - $this->controller->webroot = $this->_webroot(); - $this->controller->set(array('model' => $className, - 'title' => 'Missing Model')); - $this->controller->render('missingModel'); - exit(); - } -/** - * Path to the web root. - * - * @return string full web root path - */ - function _webroot() { - $this->__dispatch->baseUrl(); - return $this->__dispatch->webroot; - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/file.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/file.php deleted file mode 100644 index 4801226..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/file.php +++ /dev/null @@ -1,293 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs - * @since CakePHP(tm) v 0.2.9 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Included libraries. - * - */ - if (!class_exists('Object')) { - uses ('object'); - } - - if (!class_exists('Folder')) { - uses ('folder'); - } -/** - * Convenience class for reading, writing and appending to files. - * - * @package cake - * @subpackage cake.cake.libs - */ -class File extends Object{ -/** - * Folder of the File - * - * @var Folder - */ - var $folder = null; -/** - * Filename - * - * @var string - */ - var $name = null; -/** - * Constructor - * - * @param string $path - * @param boolean $create Create file if it does not exist - * @return File - */ - function __construct($path, $create = false) { - parent::__construct(); - $this->folder = new Folder(dirname($path), $create); - $this->name = basename($path); - if (!$this->exists()) { - if ($create === true) { - if (!$this->create()) { - return false; - } - } else { - return false; - } - } - } -/** - * Return the contents of this File as a string. - * - * @return string Contents - */ - function read() { - $contents = file_get_contents($this->getFullPath()); - return $contents; - } -/** - * Append given data string to this File. - * - * @param string $data Data to write - * @return boolean Success - */ - function append($data) { - return $this->write($data, 'a'); - } -/** - * Write given data to this File. - * - * @param string $data Data to write to this File. - * @param string $mode Mode of writing. {@link http://php.net/fwrite See fwrite()}. - * @return boolean Success - */ - function write($data, $mode = 'w') { - $file = $this->getFullPath(); - if (!($handle = fopen($file, $mode))) { - print ("[File] Could not open $file with mode $mode!"); - return false; - } - - if (!fwrite($handle, $data)) { - return false; - } - - if (!fclose($handle)) { - return false; - } - return true; - } -/** - * Get md5 Checksum of file with previous check of Filesize - * - * @param string $force Data to write to this File. - * @return string md5 Checksum {@link http://php.net/md5_file See md5_file()} - */ - function getMd5($force = false) { - $md5 = ''; - if ($force == true || $this->getSize(false) < MAX_MD5SIZE) { - $md5 = md5_file($this->getFullPath()); - } - return $md5; - } -/** - * Returns the Filesize, either in bytes or in human-readable format. - * - * @param boolean $humanReadeble Data to write to this File. - * @return string|int filesize as int or as a human-readable string - */ - function getSize() { - $size = filesize($this->getFullPath()); - return $size; - } -/** - * Returns the File extension. - * - * @return string The Fileextension - */ - function getExt() { - $ext = ''; - $parts = explode('.', $this->getName()); - - if (count($parts) > 1) { - $ext = array_pop($parts); - } else { - $ext = ''; - } - return $ext; - } -/** - * Returns the filename. - * - * @return string The Filename - */ - function getName() { - return $this->name; - } -/** - * Returns the File's owner. - * - * @return int the Fileowner - */ - function getOwner() { - $fileowner = fileowner($this->getFullPath()); - return $fileowner; - } -/** - * Returns the File group. - * - * @return int the Filegroup - */ - function getGroup() { - $filegroup = filegroup($this->getFullPath()); - return $filegroup; - } -/** - * Creates the File. - * - * @return boolean Success - */ - function create() { - $dir = $this->folder->pwd(); - - if (file_exists($dir) && is_dir($dir) && is_writable($dir) && !$this->exists()) { - if (!touch($this->getFullPath())) { - print ('[File] Could not create '.$this->getName().'!'); - return false; - } else { - return true; - } - } else { - print ('[File] Could not create '.$this->getName().'!'); - return false; - } - } -/** - * Returns true if the File exists. - * - * @return boolean - */ - function exists() { - $exists = file_exists($this->getFullPath()); - return $exists; - } -/** - * Deletes the File. - * - * @return boolean - */ - function delete() { - $unlink = unlink($this->getFullPath()); - return $unlink; - } -/** - * Returns true if the File is writable. - * - * @return boolean - */ - function writable() { - $writable = is_writable($this->getFullPath()); - return $writable; - } -/** - * Returns true if the File is executable. - * - * @return boolean - */ - function executable() { - $executable = is_executable($this->getFullPath()); - return $executable; - } -/** - * Returns true if the File is readable. - * - * @return boolean - */ - function readable() { - $readable = is_readable($this->getFullPath()); - return $readable; - } -/** - * Returns last access time. - * - * @return int timestamp - */ - function lastAccess() { - $fileatime = fileatime($this->getFullPath()); - return $fileatime; - } -/** - * Returns last modified time. - * - * @return int timestamp - */ - function lastChange() { - $filemtime = filemtime($this->getFullPath()); - return $filemtime; - } -/** - * Returns the current folder. - * - * @return Folder - */ - function getFolder() { - return $this->folder; - } -/** - * Returns the "chmod" (permissions) of the File. - * - * @return string - */ - function getChmod() { - $substr = substr(sprintf('%o', fileperms($this->getFullPath())), -4); - return $substr; - } -/** - * Returns the full path of the File. - * - * @return string - */ - function getFullPath() { - return $this->folder->slashTerm($this->folder->pwd()) . $this->getName(); - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/flay.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/flay.php deleted file mode 100644 index dfe105f..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/flay.php +++ /dev/null @@ -1,278 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs - * @since CakePHP(tm) v 0.2.9 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Included libraries. - * - */ - if (!class_exists('Object')) { - uses ('object'); - } -/** - * Text-to-HTML parser. - * - * Text-to-html parser, similar to Textile or RedCloth, only with a little different syntax. - * - * @package cake - * @subpackage cake.cake.libs - */ -class Flay extends Object{ -/** - * Text to be parsed. - * - * @var string - */ - var $text = null; -/** - * Set this to allow HTML in the markup. - * - * @var boolean - */ - var $allow_html = false; -/** - * Constructor. - * - * @param string $text - */ - function __construct($text = null) { - $this->text = $text; - parent::__construct(); - } -/** - * Returns given text translated to HTML using the Flay syntax. - * - * @param string $text String to format - * @param boolean $bare Set this to only do

transforms and > to >, no typography additions. - * @param boolean $allowHtml Set this to trim whitespace and disable all HTML - * @return string Formatted text - */ - function toHtml($text = null, $bare = false, $allowHtml = false) { - if (empty($text) && empty($this->text)) { - return false; - } - $text = $text ? $text : $this->text; - // trim whitespace and disable all HTML - if ($allowHtml) { - $text = trim($text); - } else { - $text = str_replace('<', '<', str_replace('>', '>', trim($text))); - } - - if (!$bare) { - // multi-paragraph functions - $text=preg_replace('#(?:[\n]{0,2})"""(.*)"""(?:[\n]{0,2})#s', "\n\n%BLOCKQUOTE%\n\n\\1\n\n%ENDBLOCKQUOTE%\n\n", $text); - $text=preg_replace('#(?:[\n]{0,2})===(.*)===(?:[\n]{0,2})#s', "\n\n%CENTER%\n\n\\1\n\n%ENDCENTER%\n\n", $text); - } - - // pre-parse newlines - $text=preg_replace("#\r\n#", "\n", $text); - $text=preg_replace("#[\n]{2,}#", "%PARAGRAPH%", $text); - $text=preg_replace('#[\n]{1}#', "%LINEBREAK%", $text); - $out =''; - - foreach (split('%PARAGRAPH%', $text)as $line) { - if ($line) { - if (!$bare) { - $links = array(); - $regs = null; - - if (preg_match_all('#\[([^\[]{4,})\]#', $line, $regs)) { - foreach ($regs[1] as $reg) { - $links[] = $reg; - $line = str_replace("[{$reg}]", '%LINK' . (count($links) - 1) . '%', $line); - } - } - // bold - $line = ereg_replace("\*([^\*]*)\*", "\\1", $line); - // italic - $line = ereg_replace("_([^_]*)_", "\\1", $line); - } - // entities - $line = str_replace(' - ', ' – ', $line); - $line = str_replace(' -- ', ' — ', $line); - $line = str_replace('(C)', '©', $line); - $line = str_replace('(R)', '®', $line); - $line = str_replace('(TM)', '™', $line); - // guess e-mails - $emails = null; - if (preg_match_all("#([_A-Za-z0-9+-+]+(?:\.[_A-Za-z0-9+-]+)*@[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)*)#", $line, $emails)) { - foreach ($emails[1] as $email) { - $line = str_replace($email, "{$email}", $line); - } - } - - if (!$bare) { - $urls = null; - if (preg_match_all("#((?:http|https|ftp|nntp)://[^ ]+)#", $line, $urls)) { - foreach ($urls[1] as $url) { - $line = str_replace($url, "{$url}", $line); - } - } - - if (preg_match_all("#(www\.[^\n\%\ ]+[^\n\%\,\.\ ])#", $line, $urls)) { - foreach ($urls[1] as $url) { - $line = str_replace($url, "{$url}", $line); - } - } - - if (count($links)) { - for ($ii = 0; $ii < count($links); $ii++) { - if (preg_match("#^(http|https|ftp|nntp)://#", $links[$ii])) { - $prefix = null; - } else { - $prefix = 'http://'; - } - if (preg_match('#^[^\ ]+\.(jpg|jpeg|gif|png)$#', $links[$ii])) { - $with = "\"\""; - } elseif (preg_match('#^([^\]\ ]+)(?:\ ([^\]]+))?$#', $links[$ii], $regs)) { - if (isset($regs[2])) { - if (preg_match('#\.(jpg|jpeg|gif|png)$#', $regs[2])) { - $body = "\"\""; - } else { - $body = $regs[2]; - } - } else { - $body = $links[$ii]; - } - $with = "{$body}"; - } else { - $with = $prefix . $links[$ii]; - } - $line = str_replace("%LINK{$ii}%", $with, $line); - } - } - } - $out .= str_replace('%LINEBREAK%', "
\n", "

{$line}

\n"); - } - } - - if (!$bare) { - $out = str_replace('

%BLOCKQUOTE%

', "
", $out); - $out = str_replace('

%ENDBLOCKQUOTE%

', "
", $out); - $out = str_replace('

%CENTER%

', "
", $out); - $out = str_replace('

%ENDCENTER%

', "
", $out); - } - return $out; - } -/** - * Return the words of the string as an array. - * - * @param string $string - * @return array Array of words - */ - function extractWords($string) { - $split = preg_split('/[\s,\.:\/="!\(\)<>~\[\]]+/', $string); - return $split; - } -/** - * Return given string with words in array colorMarked, up to a number of times (defaults to 5). - * - * @param array $words Words to look for and markup - * @param string $string String to look in - * @param integer $max_snippets Max number of snippets to extract - * @return string - * @see colorMark - */ - function markedSnippets($words, $string, $max_snippets = 5) { - $string = strip_tags($string); - $snips = array(); - $rest = $string; - foreach ($words as $word) { - if (preg_match_all("/[\s,]+.{0,40}{$word}.{0,40}[\s,]+/i", $rest, $r)) { - foreach ($r as $result) { - $rest = str_replace($result, '', $rest); - } - $snips = array_merge($snips, $r[0]); - } - } - - if (count($snips) > $max_snippets) { - $snips = array_slice($snips, 0, $max_snippets); - } - $joined = join(' ... ', $snips); - $snips = $joined ? "... {$joined} ..." : substr($string, 0, 80) . '...'; - return $this->colorMark($words, $snips); - } -/** - * Returns string with EM elements with color classes added. - * - * @param array $words Array of words to be colorized - * @param string $string Text in which the words might be found - * @return string - */ - function colorMark($words, $string) { - $colors=array('yl', 'gr', 'rd', 'bl', 'fu', 'cy'); - $nextColorIndex = 0; - foreach ($words as $word) { - $string = preg_replace("/({$word})/i", '\\1", $string); - $nextColorIndex++; - } - return $string; - } -/** - * Returns given text with tags stripped out. - * - * @param string $text - * @return string - */ - function toClean($text) { - $strip = strip_tags(html_entity_decode($text, ENT_QUOTES)); - return $strip; - } -/** - * Return parsed text with tags stripped out. - * - * @param string $text - * @return string - */ - function toParsedAndClean($text) { - return $this->toClean(Flay::toHtml($text)); - } -/** - * Return a fragment of a text, up to $length characters long, with an ellipsis after it. - * - * @param string $text Text to be truncated. - * @param integer $length Max length of text. - * @param string $ellipsis Sign to print after truncated text. - * @return string - */ - function fragment($text, $length, $ellipsis = '...') { - $soft = $length - 5; - $hard = $length + 5; - $rx = '/(.{' . $soft . ',' . $hard . '})[\s,\.:\/="!\(\)<>~\[\]]+.*/'; - - if (preg_match($rx, $text, $r)) { - $out = $r[1]; - } else { - $out = substr($text, 0, $length); - } - $out = $out . (strlen($out) < strlen($text) ? $ellipsis : null); - return $out; - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/folder.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/folder.php deleted file mode 100644 index 331abee..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/folder.php +++ /dev/null @@ -1,328 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs - * @since CakePHP(tm) v 0.2.9 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Included libraries. - * - */ - if (!class_exists('Object')) { - uses ('object'); - } -/** - * Folder structure browser, lists folders and files. - * - * Long description for class - * - * @package cake - * @subpackage cake.cake.libs - */ -class Folder extends Object{ -/** - * Path to Folder. - * - * @var string - */ - var $path = null; -/** - * Sortedness. - * - * @var boolean - */ - var $sort = false; -/** - * Constructor. - * - * @param string $path - * @param boolean $path - */ - function __construct($path = false, $create = false, $mode = false) { - parent::__construct(); - if (empty($path)) { - $path = getcwd(); - } - - if (!file_exists($path) && $create == true) { - $this->mkdirr($path, $mode); - } - $this->cd($path); - } -/** - * Return current path. - * - * @return string Current path - */ - function pwd() { - return $this->path; - } -/** - * Change directory to $desired_path. - * - * @param string $desired_path Path to the directory to change to - * @return string The new path. Returns false on failure - */ - function cd($desiredPath) { - $desiredPath = realpath($desiredPath); - $newPath = $this->isAbsolute($desiredPath) ? $desiredPath : $this->addPathElement($this->path, $desiredPath); - $isDir = (is_dir($newPath) && file_exists($newPath)) ? $this->path = $newPath : false; - return $isDir; - } -/** - * Returns an array of the contents of the current directory, or false on failure. - * The returned array holds two arrays: one of dirs and one of files. - * - * @param boolean $sort - * @param boolean $noDotFiles - * @return array - */ - function ls($sort = true, $noDotFiles = false) { - $dirs = $files = array(); - $dir = opendir($this->path); - if ($dir) { - while (false !== ($n = readdir($dir))) { - if ((!preg_match('#^\.+$#', $n) && $noDotFiles == false) || ($noDotFiles == true && !preg_match('#^\.(.*)$#', $n))) { - if (is_dir($this->addPathElement($this->path, $n))) { - $dirs[] = $n; - } else { - $files[] = $n; - } - } - } - - if ($sort || $this->sort) { - sort ($dirs); - sort ($files); - } - closedir ($dir); - } - return array($dirs,$files); - } -/** - * Returns an array of all matching files in current directory. - * - * @param string $pattern Preg_match pattern (Defaults to: .*) - * @return array - */ - function find($regexp_pattern = '.*') { - $data = $this->ls(); - - if (!is_array($data)) { - return array(); - } - - list($dirs, $files) = $data; - $found = array(); - - foreach ($files as $file) { - if (preg_match("/^{$regexp_pattern}$/i", $file)) { - $found[] = $file; - } - } - return $found; - } -/** - * Returns an array of all matching files in and below current directory. - * - * @param string $pattern Preg_match pattern (Defaults to: .*) - * @return array Files matching $pattern - */ - function findRecursive($pattern = '.*') { - $startsOn = $this->path; - $out = $this->_findRecursive($pattern); - $this->cd($startsOn); - return $out; - } -/** - * Private helper function for findRecursive. - * - * @param string $pattern - * @return array Files matching pattern - * @access private - */ - function _findRecursive($pattern) { - list($dirs, $files) = $this->ls(); - - $found = array(); - foreach ($files as $file) { - if (preg_match("/^{$pattern}$/i", $file)) { - $found[] = $this->addPathElement($this->path, $file); - } - } - $start = $this->path; - foreach ($dirs as $dir) { - $this->cd($this->addPathElement($start, $dir)); - $found = array_merge($found, $this->findRecursive($pattern)); - } - return $found; - } -/** - * Returns true if given $path is a Windows path. - * - * @param string $path Path to check - * @return boolean - * @static - */ - function isWindowsPath($path) { - $match = preg_match('#^[A-Z]:\\\#i', $path) ? true : false; - return $match; - } -/** - * Returns true if given $path is an absolute path. - * - * @param string $path Path to check - * @return boolean - * @static - */ - function isAbsolute($path) { - $match = preg_match('#^\/#', $path) || preg_match('#^[A-Z]:\\\#i', $path); - return $match; - } -/** - * Returns true if given $path ends in a slash (i.e. is slash-terminated). - * - * @param string $path Path to check - * @return boolean - * @static - */ - function isSlashTerm($path) { - $match = preg_match('#[\\\/]$#', $path) ? true : false; - return $match; - } -/** - * Returns a correct set of slashes for given $path. (\\ for Windows paths and / for other paths.) - * - * @param string $path Path to check - * @return string Set of slashes ("\\" or "/") - * @static - */ - function correctSlashFor($path) { - return $this->isWindowsPath($path) ? '\\' : '/'; - } -/** - * Returns $path with added terminating slash (corrected for Windows or other OS). - * - * @param string $path Path to check - * @return string - * @static - */ -function slashTerm($path) { - return $path . ($this->isSlashTerm($path) ? null : $this->correctSlashFor($path)); - } -/** - * Returns $path with $element added, with correct slash in-between. - * - * @param string $path - * @param string $element - * @return string - * @static - */ - function addPathElement($path, $element) { - return $this->slashTerm($path) . $element; - } -/** - * Returns true if the File is in a given CakePath. - * - * @return boolean - */ - function inCakePath($path = '') { - $dir = substr($this->slashTerm(ROOT), 0, -1); - $newdir = $this->slashTerm($dir . $path); - return $this->inPath($newdir); - } -/** - * Returns true if the File is in given path. - * - * @return boolean - */ - function inPath($path = '') { - $dir = substr($this->slashTerm($path), 0, -1); - $return = preg_match('/^' . preg_quote($this->slashTerm($dir), '/') . '(.*)/', $this->slashTerm($this->pwd())); - if ($return == 1) { - return true; - } else { - return false; - } - } -/** - * Create a directory structure recursively. - * - * @param string $pathname The directory structure to create - * @return bool Returns TRUE on success, FALSE on failure - */ - function mkdirr($pathname, $mode = null) { - if (is_dir($pathname) || empty($pathname)) { - return true; - } - - if (is_file($pathname)) { - trigger_error('mkdirr() File exists', E_USER_WARNING); - return false; - } - $nextPathname = substr($pathname, 0, strrpos($pathname, DIRECTORY_SEPARATOR)); - - if ($this->mkdirr($nextPathname, $mode)) { - if (!file_exists($pathname)) { - umask (0); - $mkdir = mkdir($pathname, $mode); - return $mkdir; - } - } - return false; - } -/** - * Returns the size in bytes of this Folder. - * - * @param string $directory Path to directory - */ - function dirsize() { - $size = 0; - $directory = $this->slashTerm($this->path); - $stack = array($directory); - $count = count($stack); - for ($i = 0, $j = $count; $i < $j; ++$i) { - if (is_file($stack[$i])) { - $size += filesize($stack[$i]); - } elseif (is_dir($stack[$i])) { - $dir = dir($stack[$i]); - - while (false !== ($entry = $dir->read())) { - if ($entry == '.' || $entry == '..') { - continue; - } - $add = $stack[$i] . $entry; - - if (is_dir($stack[$i] . $entry)) { - $add = $this->slashTerm($add); - } - $stack[ ]= $add; - } - $dir->close(); - } - $j = count($stack); - } - return $size; - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/inflector.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/inflector.php deleted file mode 100644 index edf91c5..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/inflector.php +++ /dev/null @@ -1,437 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs - * @since CakePHP(tm) v 0.2.9 - * @version $Revision: 7691 $ - * @modifiedby $LastChangedBy: nate $ - * @lastmodified $Date: 2008-10-02 00:59:12 -0400 (Thu, 02 Oct 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Included libraries. - * - */ - if (!class_exists('Object')) { - uses('object'); - } - uses('Set'); -/** - * Pluralize and singularize English words. - * - * Inflector pluralizes and singularizes English nouns. - * Used by Cake's naming conventions throughout the framework. - * Test with $i = new Inflector(); $i->test(); - * - * @package cake - * @subpackage cake.cake.libs - */ -class Inflector extends Object { -/** - * Constructor. - * - */ - function __construct() { - parent::__construct(); - } -/** - * Gets a reference to the Inflector object instance - * - * @return object - * @access public - */ - function &getInstance() { - static $instance = array(); - - if (!isset($instance[0]) || !$instance[0]) { - $instance[0] =& new Inflector(); - } - - return $instance[0]; - } -/** - * Initializes plural inflection rules - * - * @access protected - */ - function __initPluralRules() { - $_this =& Inflector::getInstance(); - $corePluralRules = array('/(s)tatus$/i' => '\1\2tatuses', - '/(quiz)$/i' => '\1zes', - '/^(ox)$/i' => '\1\2en', - '/([m|l])ouse$/i' => '\1ice', - '/(matr|vert|ind)(ix|ex)$/i' => '\1ices', - '/(x|ch|ss|sh)$/i' => '\1es', - '/([^aeiouy]|qu)y$/i' => '\1ies', - '/(hive)$/i' => '\1s', - '/(?:([^f])fe|([lr])f)$/i' => '\1\2ves', - '/sis$/i' => 'ses', - '/([ti])um$/i' => '\1a', - '/(p)erson$/i' => '\1eople', - '/(m)an$/i' => '\1en', - '/(c)hild$/i' => '\1hildren', - '/(buffal|tomat)o$/i' => '\1\2oes', - '/(alumn|bacill|cact|foc|fung|nucle|radi|stimul|syllab|termin|vir)us$/i' => '\1i', - '/us$/' => 'uses', - '/(alias)$/i' => '\1es', - '/(ax|cri|test)is$/i' => '\1es', - '/s$/' => 's', - '/$/' => 's',); - - $coreUninflectedPlural = array('.*[nrlm]ese', '.*deer', '.*fish', '.*measles', '.*ois', '.*pox', '.*sheep', 'Amoyese', - 'bison', 'Borghese', 'bream', 'breeches', 'britches', 'buffalo', 'cantus', 'carp', 'chassis', 'clippers', - 'cod', 'coitus', 'Congoese', 'contretemps', 'corps', 'debris', 'diabetes', 'djinn', 'eland', 'elk', - 'equipment', 'Faroese', 'flounder', 'Foochowese', 'gallows', 'Genevese', 'Genoese', 'Gilbertese', 'graffiti', - 'headquarters', 'herpes', 'hijinks', 'Hottentotese', 'information', 'innings', 'jackanapes', 'Kiplingese', - 'Kongoese', 'Lucchese', 'mackerel', 'Maltese', 'media', 'mews', 'moose', 'mumps', 'Nankingese', 'news', - 'nexus', 'Niasese', 'Pekingese', 'People', 'Piedmontese', 'pincers', 'Pistoiese', 'pliers', 'Portuguese', 'proceedings', - 'rabies', 'rice', 'rhinoceros', 'salmon', 'Sarawakese', 'scissors', 'sea[- ]bass', 'series', 'Shavese', 'shears', - 'siemens', 'species', 'swine', 'testes', 'trousers', 'trout', 'tuna', 'Vermontese', 'Wenchowese', - 'whiting', 'wildebeest', 'Yengeese',); - - $coreIrregularPlural = array('atlas' => 'atlases', - 'beef' => 'beefs', - 'brother' => 'brothers', - 'child' => 'children', - 'corpus' => 'corpuses', - 'cow' => 'cows', - 'ganglion' => 'ganglions', - 'genie' => 'genies', - 'genus' => 'genera', - 'graffito' => 'graffiti', - 'hoof' => 'hoofs', - 'loaf' => 'loaves', - 'man' => 'men', - 'money' => 'monies', - 'mongoose' => 'mongooses', - 'move' => 'moves', - 'mythos' => 'mythoi', - 'numen' => 'numina', - 'occiput' => 'occiputs', - 'octopus' => 'octopuses', - 'opus' => 'opuses', - 'ox' => 'oxen', - 'penis' => 'penises', - 'person' => 'people', - 'sex' => 'sexes', - 'soliloquy' => 'soliloquies', - 'testis' => 'testes', - 'trilby' => 'trilbys', - 'turf' => 'turfs',); - - $pluralRules = $corePluralRules; - $uninflected = $coreUninflectedPlural; - $irregular = $coreIrregularPlural; - - if (file_exists(CONFIGS . 'inflections.php')) { - include(CONFIGS.'inflections.php'); - $pluralRules = Set::pushDiff($pluralRules, $corePluralRules); - $uninflected = Set::pushDiff($uninflectedPlural, $coreUninflectedPlural); - $irregular = Set::pushDiff($irregularPlural, $coreIrregularPlural); - } - $_this->pluralRules = array('pluralRules' => $pluralRules, 'uninflected' => $uninflected, 'irregular' => $irregular); - $_this->pluralized = array(); - } -/** - * Return $word in plural form. - * - * @param string $word Word in singular - * @return string Word in plural - * @access public - * @static - */ - function pluralize($word) { - - $_this =& Inflector::getInstance(); - if (!isset($_this->pluralRules) || empty($_this->pluralRules)) { - $_this->__initPluralRules(); - } - - if (isset($_this->pluralized[$word])) { - return $_this->pluralized[$word]; - } - - extract($_this->pluralRules); - if (!isset($regexUninflected) || !isset($regexIrregular)) { - $regexUninflected = __enclose(join( '|', $uninflected)); - $regexIrregular = __enclose(join( '|', array_keys($irregular))); - $_this->pluralRules['regexUninflected'] = $regexUninflected; - $_this->pluralRules['regexIrregular'] = $regexIrregular; - } - - if (preg_match('/(.*)\\b(' . $regexIrregular . ')$/i', $word, $regs)) { - $_this->pluralized[$word] = $regs[1] . substr($word, 0, 1) . substr($irregular[strtolower($regs[2])], 1); - return $_this->pluralized[$word]; - } - - if (preg_match('/^(' . $regexUninflected . ')$/i', $word, $regs)) { - $_this->pluralized[$word] = $word; - return $word; - } - - foreach ($pluralRules as $rule => $replacement) { - if (preg_match($rule, $word)) { - $_this->pluralized[$word] = preg_replace($rule, $replacement, $word); - return $_this->pluralized[$word]; - } - } - $_this->pluralized[$word] = $word; - return $word; - } -/** - * Initializes singular inflection rules - * - * @access protected - */ - function __initSingularRules() { - - $_this =& Inflector::getInstance(); - $coreSingularRules = array('/(s)tatuses$/i' => '\1\2tatus', - '/^(.*)(menu)s$/i' => '\1\2', - '/(quiz)zes$/i' => '\\1', - '/(matr)ices$/i' => '\1ix', - '/(vert|ind)ices$/i' => '\1ex', - '/^(ox)en/i' => '\1', - '/(alias)(es)*$/i' => '\1', - '/(alumn|bacill|cact|foc|fung|nucle|radi|stimul|syllab|termin|viri?)i$/i' => '\1us', - '/(cris|ax|test)es$/i' => '\1is', - '/(shoe)s$/i' => '\1', - '/(o)es$/i' => '\1', - '/ouses$/' => 'ouse', - '/uses$/' => 'us', - '/([m|l])ice$/i' => '\1ouse', - '/(x|ch|ss|sh)es$/i' => '\1', - '/(m)ovies$/i' => '\1\2ovie', - '/(s)eries$/i' => '\1\2eries', - '/([^aeiouy]|qu)ies$/i' => '\1y', - '/([lr])ves$/i' => '\1f', - '/(tive)s$/i' => '\1', - '/(hive)s$/i' => '\1', - '/(drive)s$/i' => '\1', - '/([^f])ves$/i' => '\1fe', - '/(^analy)ses$/i' => '\1sis', - '/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i' => '\1\2sis', - '/([ti])a$/i' => '\1um', - '/(p)eople$/i' => '\1\2erson', - '/(m)en$/i' => '\1an', - '/(c)hildren$/i' => '\1\2hild', - '/(n)ews$/i' => '\1\2ews', - '/^(.*us)$/' => '\\1', - '/s$/i' => ''); - - $coreUninflectedSingular = array('.*[nrlm]ese', '.*deer', '.*fish', '.*measles', '.*ois', '.*pox', '.*sheep', '.*ss', 'Amoyese', - 'bison', 'Borghese', 'bream', 'breeches', 'britches', 'buffalo', 'cantus', 'carp', 'chassis', 'clippers', - 'cod', 'coitus', 'Congoese', 'contretemps', 'corps', 'debris', 'diabetes', 'djinn', 'eland', 'elk', - 'equipment', 'Faroese', 'flounder', 'Foochowese', 'gallows', 'Genevese', 'Genoese', 'Gilbertese', 'graffiti', - 'headquarters', 'herpes', 'hijinks', 'Hottentotese', 'information', 'innings', 'jackanapes', 'Kiplingese', - 'Kongoese', 'Lucchese', 'mackerel', 'Maltese', 'media', 'mews', 'moose', 'mumps', 'Nankingese', 'news', - 'nexus', 'Niasese', 'Pekingese', 'Piedmontese', 'pincers', 'Pistoiese', 'pliers', 'Portuguese', 'proceedings', - 'rabies', 'rice', 'rhinoceros', 'salmon', 'Sarawakese', 'scissors', 'sea[- ]bass', 'series', 'Shavese', 'shears', - 'siemens', 'species', 'swine', 'testes', 'trousers', 'trout', 'tuna', 'Vermontese', 'Wenchowese', - 'whiting', 'wildebeest', 'Yengeese',); - - $coreIrregularSingular = array('atlases' => 'atlas', - 'beefs' => 'beef', - 'brothers' => 'brother', - 'children' => 'child', - 'corpuses' => 'corpus', - 'cows' => 'cow', - 'ganglions' => 'ganglion', - 'genies' => 'genie', - 'genera' => 'genus', - 'graffiti' => 'graffito', - 'hoofs' => 'hoof', - 'loaves' => 'loaf', - 'men' => 'man', - 'monies' => 'money', - 'mongooses' => 'mongoose', - 'moves' => 'move', - 'mythoi' => 'mythos', - 'numina' => 'numen', - 'occiputs' => 'occiput', - 'octopuses' => 'octopus', - 'opuses' => 'opus', - 'oxen' => 'ox', - 'penises' => 'penis', - 'people' => 'person', - 'sexes' => 'sex', - 'soliloquies' => 'soliloquy', - 'testes' => 'testis', - 'trilbys' => 'trilby', - 'turfs' => 'turf',); - - $singularRules = $coreSingularRules; - $uninflected = $coreUninflectedSingular; - $irregular = $coreIrregularSingular; - - if (file_exists(CONFIGS . 'inflections.php')) { - include(CONFIGS.'inflections.php'); - $singularRules = Set::pushDiff($singularRules, $coreSingularRules); - $uninflected = Set::pushDiff($uninflectedSingular, $coreUninflectedSingular); - $irregular = Set::pushDiff($irregularSingular, $coreIrregularSingular); - } - $_this->singularRules = array('singularRules' => $singularRules, 'uninflected' => $uninflected, 'irregular' => $irregular); - $_this->singularized = array(); - } -/** - * Return $word in singular form. - * - * @param string $word Word in plural - * @return string Word in singular - * @access public - * @static - */ - function singularize($word) { - $_this =& Inflector::getInstance(); - if (!isset($_this->singularRules) || empty($_this->singularRules)) { - $_this->__initSingularRules(); - } - - if (isset($_this->singularized[$word])) { - return $_this->singularized[$word]; - } - - extract($_this->singularRules); - if (!isset($regexUninflected) || !isset($regexIrregular)) { - $regexUninflected = __enclose(join( '|', $uninflected)); - $regexIrregular = __enclose(join( '|', array_keys($irregular))); - $_this->singularRules['regexUninflected'] = $regexUninflected; - $_this->singularRules['regexIrregular'] = $regexIrregular; - } - - if (preg_match('/(.*)\\b(' . $regexIrregular . ')$/i', $word, $regs)) { - $_this->singularized[$word] = $regs[1] . substr($word, 0, 1) . substr($irregular[strtolower($regs[2])], 1); - return $_this->singularized[$word]; - } - - if (preg_match('/^(' . $regexUninflected . ')$/i', $word, $regs)) { - $_this->singularized[$word] = $word; - return $word; - } - - foreach ($singularRules as $rule => $replacement) { - if (preg_match($rule, $word)) { - $_this->singularized[$word] = preg_replace($rule, $replacement, $word); - return $_this->singularized[$word]; - } - } - $_this->singularized[$word] = $word; - return $word; - } -/** - * Returns given $lower_case_and_underscored_word as a camelCased word. - * - * @param string $lower_case_and_underscored_word Word to camelize - * @return string Camelized word. likeThis. - * @access public - * @static - */ - function camelize($lowerCaseAndUnderscoredWord) { - $replace = str_replace(" ", "", ucwords(str_replace("_", " ", $lowerCaseAndUnderscoredWord))); - return $replace; - } -/** - * Returns an underscore-syntaxed ($like_this_dear_reader) version of the $camel_cased_word. - * - * @param string $camel_cased_word Camel-cased word to be "underscorized" - * @return string Underscore-syntaxed version of the $camel_cased_word - * @access public - * @static - */ - function underscore($camelCasedWord) { - $replace = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $camelCasedWord)); - return $replace; - } -/** - * Returns a human-readable string from $lower_case_and_underscored_word, - * by replacing underscores with a space, and by upper-casing the initial characters. - * - * @param string $lower_case_and_underscored_word String to be made more readable - * @return string Human-readable string - * @access public - * @static - */ - function humanize($lowerCaseAndUnderscoredWord) { - $replace = ucwords(str_replace("_", " ", $lowerCaseAndUnderscoredWord)); - return $replace; - } -/** - * Returns corresponding table name for given $class_name. ("posts" for the model class "Post"). - * - * @param string $class_name Name of class to get database table name for - * @return string Name of the database table for given class - * @access public - * @static - */ - function tableize($className) { - $replace = Inflector::pluralize(Inflector::underscore($className)); - return $replace; - } -/** - * Returns Cake model class name ("Post" for the database table "posts".) for given database table. - * - * @param string $tableName Name of database table to get class name for - * @return string - * @access public - * @static - */ - function classify($tableName) { - $replace = Inflector::camelize(Inflector::singularize($tableName)); - return $replace; - } -/** - * Returns camelBacked version of a string. - * - * @param string $string - * @return string - * @access public - * @static - */ - function variable($string) { - $string = Inflector::camelize(Inflector::underscore($string)); - $replace = strtolower(substr($string, 0, 1)); - $variable = preg_replace('/\\w/', $replace, $string, 1); - return $variable; - } -/** - * Returns a string with all spaces converted to $replacement and non word characters removed. - * - * @param string $string - * @param string $replacement - * @return string - * @access public - * @static - */ - function slug($string, $replacement = '_') { - $string = preg_replace(array('/[^\w\s]/', '/\\s+/') , array(' ', $replacement), $string); - return $string; - } -} -/** - * Enclose a string for preg matching. - * - * @param string $string String to enclose - * @return string Enclosed string - */ - function __enclose($string) { - return '(?:' . $string . ')'; - } -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/legacy.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/legacy.php deleted file mode 100644 index 3c89b8c..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/legacy.php +++ /dev/null @@ -1,70 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs - * @since CakePHP(tm) v 0.2.9 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ - if (version_compare(phpversion(), '5.0') < 0) { - if (!function_exists("clone")) { - eval (' - function clone($object) { - return $object; - }'); - } - } -/** - * Replace file_get_contents() - * - * @internal resource_context is not supported - * @since PHP 5 - * require PHP 4.0.0 (user_error) - * - * @param unknown_type $filename - * @param unknown_type $incpath - * @return unknown - */ - if (!function_exists('file_get_contents')) { - function file_get_contents($filename, $incpath = false) { - if (false === $fh = fopen($filename, 'rb', $incpath)) { - user_error('file_get_contents() failed to open stream: No such file or directory', E_USER_WARNING); - return false; - } - clearstatcache(); - - if ($fsize = @filesize($filename)) { - $data = fread($fh, $fsize); - } else { - $data=''; - - while (!feof($fh)) { - $data .= fread($fh, 8192); - } - } - fclose ($fh); - return $data; - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/connection_manager.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/connection_manager.php deleted file mode 100644 index 946327e..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/connection_manager.php +++ /dev/null @@ -1,243 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.model - * @since CakePHP(tm) v 0.10.x.1402 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ - -/** - * Manages loaded instances of DataSource objects - * - * Long description for file - * - * @package cake - * @subpackage cake.cake.libs.model - */ - -uses ('model' . DS . 'datasources' . DS . 'datasource'); -config('database'); - -class ConnectionManager extends Object { - -/** - * Holds a loaded instance of the Connections object - * - * @var class:Connections - * @access public - */ - var $config = null; -/** - * Holds instances DataSource objects - * - * @var array - * @access private - */ - var $_dataSources = array(); -/** - * Contains a list of all file and class names used in Connection settings - * - * @var array - * @access private - */ - var $_connectionsEnum = array(); -/** - * Constructor. - * - */ - function __construct() { - if (class_exists('DATABASE_CONFIG')) { - $this->config = new DATABASE_CONFIG(); - } - } -/** - * Gets a reference to the ConnectionManger object instance - * - * @return object - */ - function &getInstance() { - static $instance = array(); - - if (!isset($instance[0]) || !$instance[0]) { - $instance[0] = &new ConnectionManager(); - } - - return $instance[0]; - } -/** - * Gets a reference to a DataSource object - * - * @param string $name The name of the DataSource, as defined in app/config/connections - * @return object - */ - function &getDataSource($name) { - $_this =& ConnectionManager::getInstance(); - - if (in_array($name, array_keys($_this->_dataSources))) { - return $_this->_dataSources[$name]; - } - - $connections = $_this->enumConnectionObjects(); - if (in_array($name, array_keys($connections))) { - $conn = $connections[$name]; - $class = $conn['classname']; - $_this->loadDataSource($name); - $_this->_dataSources[$name] =& new $class($_this->config->{$name}); - $_this->_dataSources[$name]->configKeyName = $name; - } else { - trigger_error(sprintf(__("ConnectionManager::getDataSource - Non-existent data source %s", true), $name), E_USER_ERROR); - return null; - } - - return $_this->_dataSources[$name]; - } -/** - * Gets a DataSource name from an object reference - * - * @param object $source - * @return string - */ - function getSourceName(&$source) { - $_this =& ConnectionManager::getInstance(); - - $names = array_keys($_this->_dataSources); - for ($i = 0; $i < count($names); $i++) { - if ($_this->_dataSources[$names[$i]] === $source) { - return $names[$i]; - } - } - return null; - } -/** - * Loads the DataSource class for the given connection name - * - * @param mixed $connName A string name of the connection, as defined in Connections config, - * or an array containing the file and class name of the object. - * @return boolean True on success, null on failure or false if the class is already loaded - */ - function loadDataSource($connName) { - $_this =& ConnectionManager::getInstance(); - - if (is_array($connName)) { - $conn = $connName; - } else { - $connections = $_this->enumConnectionObjects(); - $conn = $connections[$connName]; - } - - if (isset($conn['parent']) && !empty($conn['parent'])) { - $_this->loadDataSource($conn['parent']); - } - - if (class_exists($conn['classname'])) { - return false; - } - - if (file_exists(MODELS . DS . $conn['filename'] . '.php')) { - require (MODELS . DS . $conn['filename'] . '.php'); - } elseif (fileExistsInPath(LIBS . 'model' . DS . $conn['filename'] . '.php')) { - require (LIBS . 'model' . DS . $conn['filename'] . '.php'); - } else { - trigger_error(sprintf(__('Unable to load DataSource file %s.php', true), $conn['filename']), E_USER_ERROR); - return null; - } - } -/** - * Gets a list of class and file names associated with the user-defined DataSource connections - * - * @return array An associative array of elements where the key is the connection name - * (as defined in Connections), and the value is an array with keys 'filename' and 'classname'. - */ - function enumConnectionObjects() { - $_this =& ConnectionManager::getInstance(); - - if (!empty($_this->_connectionsEnum)) { - return $_this->_connectionsEnum; - } - $connections = get_object_vars($_this->config); - - if ($connections != null) { - foreach ($connections as $name => $config) { - $_this->_connectionsEnum[$name] = $_this->__getDriver($config); - } - return $_this->_connectionsEnum; - } else { - $_this->cakeError('missingConnection', array(array('className' => 'ConnectionManager'))); - } - } -/** - * Dynamically creates a DataSource object at runtime, with the given name and settings - * - * @param string $name The DataSource name - * @param array $config The DataSource configuration settings - * @return object A reference to the DataSource object, or null if creation failed - */ - function &create($name = '', $config = array()) { - $_this =& ConnectionManager::getInstance(); - - if (empty($name) || empty($config) || array_key_exists($name, $_this->_connectionsEnum)) { - $null = null; - return $null; - } - - $_this->config->{$name} = $config; - $_this->_connectionsEnum[$name] = $_this->__getDriver($config); - return $_this->getDataSource($name); - } -/** - * Private method - * - * Returns the file and class name for the given driver - */ - function __getDriver($config) { - $_this =& ConnectionManager::getInstance(); - - if (!isset($config['datasource'])) { - $config['datasource'] = 'dbo'; - } - - if (isset($config['driver']) && $config['driver'] != null && !empty($config['driver'])) { - $filename = $config['datasource'] . DS . $config['datasource'] . '_' . $config['driver']; - $classname = Inflector::camelize(strtolower($config['datasource'] . '_' . $config['driver'])); - $parent = $_this->__getDriver(array('datasource' => $config['datasource'])); - } else { - $filename = 'datasources' . DS . $config['datasource'] . '_source'; - $classname = Inflector::camelize(strtolower($config['datasource'] . '_source')); - $parent = null; - } - return array('filename' => $filename, 'classname' => $classname, 'parent' => $parent); - } -/** - * Destructor. - * - */ - function __destruct() { - if (CAKE_SESSION_SAVE == 'database' && function_exists('session_write_close')) { - session_write_close(); - } - } -} - -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/datasources/datasource.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/datasources/datasource.php deleted file mode 100644 index a055577..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/datasources/datasource.php +++ /dev/null @@ -1,519 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.model.datasources - * @since CakePHP(tm) v 0.10.5.1790 - * @version $Revision: 7691 $ - * @modifiedby $LastChangedBy: nate $ - * @lastmodified $Date: 2008-10-02 00:59:12 -0400 (Thu, 02 Oct 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * DataSource base class - * - * Long description for file - * - * @package cake - * @subpackage cake.cake.libs.model.datasources - */ -class DataSource extends Object { -/** - * Are we connected to the DataSource? - * - * @var boolean - * @access public - */ - var $connected = false; -/** - * Print debug info? - * - * @var boolean - * @access public - */ - var $debug = false; -/** - * Print full query debug info? - * - * @var boolean - * @access public - */ - var $fullDebug = false; -/** - * Error description of last query - * - * @var unknown_type - * @access public - */ - var $error = null; -/** - * String to hold how many rows were affected by the last SQL operation. - * - * @var string - * @access public - */ - var $affected = null; -/** - * Number of rows in current resultset - * - * @var int - * @access public - */ - var $numRows = null; -/** - * Time the last query took - * - * @var int - * @access public - */ - var $took = null; -/** - * Enter description here... - * - * @var array - * @access private - */ - var $_result = null; -/** - * Queries count. - * - * @var int - * @access private - */ - var $_queriesCnt = 0; -/** - * Total duration of all queries. - * - * @var unknown_type - * @access private - */ - var $_queriesTime = null; -/** - * Log of queries executed by this DataSource - * - * @var unknown_type - * @access private - */ - var $_queriesLog = array(); -/** - * Maximum number of items in query log, to prevent query log taking over - * too much memory on large amounts of queries -- I we've had problems at - * >6000 queries on one system. - * - * @var int Maximum number of queries in the queries log. - * @access private - */ - var $_queriesLogMax = 200; -/** - * Caches serialzed results of executed queries - * - * @var array Maximum number of queries in the queries log. - * @access private - */ - var $_queryCache = array(); -/** - * The default configuration of a specific DataSource - * - * @var array - * @access public - */ - var $_baseConfig = array(); -/** - * Holds references to descriptions loaded by the DataSource - * - * @var array - * @access private - */ - var $__descriptions = array(); -/** - * Holds a list of sources (tables) contained in the DataSource - * - * @var array - * @access protected - */ - var $_sources = null; -/** - * A reference to the physical connection of this DataSource - * - * @var array - * @access public - */ - var $connection = null; -/** - * The DataSource configuration - * - * @var array - * @access public - */ - var $config = array(); -/** - * The DataSource configuration key name - * - * @var string - * @access public - */ - var $configKeyName = null; -/** - * Whether or not this DataSource is in the middle of a transaction - * - * @var boolean - * @access protected - */ - var $_transactionStarted = false; -/** - * Enter description here... - * - * @var boolean - */ - var $cacheSources = true; -/** - * Constructor. - */ - function __construct() { - parent::__construct(); - if (func_num_args() > 0) { - $this->setConfig(func_get_arg(0)); - } - } -/** - * Caches/returns cached results for child instances - * - * @return array - */ - function listSources($data = null) { - if ($this->cacheSources === false) { - return null; - } - if ($this->_sources != null) { - return $this->_sources; - } - - if (Configure::read() > 0) { - $expires = "+30 seconds"; - } else { - $expires = "+999 days"; - } - - if ($data != null) { - $data = serialize($data); - } - $filename = ConnectionManager::getSourceName($this) . '_' . preg_replace("/[^A-Za-z0-9_-]/", "_", $this->config['database']) . '_list'; - $new = cache('models' . DS . $filename, $data, $expires); - - if ($new != null) { - $new = unserialize($new); - $this->_sources = $new; - } - return $new; - } -/** - * Convenience method for DboSource::listSources(). Returns source names in lowercase. - * - * @return array - */ - function sources() { - $return = array_map('strtolower', $this->listSources()); - return $return; - } -/** - * Returns a Model description (metadata) or null if none found. - * - * @param Model $model - * @return mixed - */ - function describe($model) { - if ($this->cacheSources === false) { - return null; - } - if (isset($this->__descriptions[$model->tablePrefix . $model->table])) { - return $this->__descriptions[$model->tablePrefix . $model->table]; - } - $cache = $this->__cacheDescription($model->tablePrefix . $model->table); - - if ($cache !== null) { - $this->__descriptions[$model->tablePrefix . $model->table] =& $cache; - return $cache; - } - return null; - } -/** - * Begin a transaction to be overridden in subclasses - * - * @param unknown_type $model - * @return boolean True - */ - function begin(&$model) { - return true; - } -/** - * Commit a transaction to be overridden in subclasses - * - * @param unknown_type $model - * @return boolean True - */ - function commit(&$model) { - return true; - } -/** - * Rollback a transaction to be overridden in subclasses - * - * @param unknown_type $model - * @return boolean True - */ - function rollback(&$model) { - return true; - } -/** - * Converts column types to basic types - * - * @param string $real Real column type (i.e. "varchar(255)") - * @return string Abstract column type (i.e. "string") - */ - function column($real) { - return false; - } -/** - * To-be-overridden in subclasses. - * - * @param unknown_type $model - * @param unknown_type $fields - * @param unknown_type $values - * @return unknown - */ - function create(&$model, $fields = null, $values = null) { - return false; - } -/** - * To-be-overridden in subclasses. - * - * @param unknown_type $model - * @param unknown_type $queryData - * @return unknown - */ - function read(&$model, $queryData = array()) { - return false; - } -/** - * To-be-overridden in subclasses. - * - * @param unknown_type $model - * @param unknown_type $fields - * @param unknown_type $values - * @return unknown - */ - function update(&$model, $fields = null, $values = null) { - return false; - } -/** - * To-be-overridden in subclasses. - * - * @param unknown_type $model - * @param unknown_type $id - */ - function delete(&$model, $id = null) { - if ($id == null) { - $id = $model->id; - } - } -/** - * Returns the ID generated from the previous INSERT operation. - * - * @param unknown_type $source - * @return in - */ - function lastInsertId($source = null) { - return false; - } -/** - * Returns the ID generated from the previous INSERT operation. - * - * @param unknown_type $source - * @return in - */ - function lastNumRows($source = null) { - return false; - } -/** - * Returns the ID generated from the previous INSERT operation. - * - * @param unknown_type $source - * @return in - */ - function lastAffected($source = null) { - return false; - } -/** - * Returns true if the DataSource supports the given interface (method) - * - * @param string $interface The name of the interface (method) - * @return boolean True on success - */ - function isInterfaceSupported($interface) { - $methods = get_class_methods(get_class($this)); - $methods = strtolower(implode('|', $methods)); - $methods = explode('|', $methods); - $return = in_array(strtolower($interface), $methods); - return $return; - } -/** - * Sets the configuration for the DataSource - * - * @param array $config The configuration array - * @return void - */ - function setConfig($config) { - if (is_array($this->_baseConfig)) { - $this->config = $this->_baseConfig; - foreach ($config as $key => $val) { - $this->config[$key] = $val; - } - } - } -/** - * Cache the DataSource description - * - * @param string $object The name of the object (model) to cache - * @param mixed $data The description of the model, usually a string or array - * @return void - */ - function __cacheDescription($object, $data = null) { - if ($this->cacheSources === false) { - return null; - } - if (Configure::read() > 0) { - $expires = "+15 seconds"; - } else { - $expires = "+999 days"; - } - - if ($data !== null) { - $this->__descriptions[$object] =& $data; - $cache = serialize($data); - } else { - $cache = null; - } - $new = cache('models' . DS . ConnectionManager::getSourceName($this) . '_' . $object, $cache, $expires); - - if ($new != null) { - $new = unserialize($new); - } - return $new; - } -/** - * Enter description here... - * - * @param unknown_type $query - * @param unknown_type $data - * @param unknown_type $association - * @param unknown_type $assocData - * @param Model $model - * @param Model $linkModel - * @param array $stack - * @return unknown - */ - function insertQueryData($query, $data, $association, $assocData, &$model, &$linkModel, $stack) { - $keys = array('{$__cakeID__$}', '{$__cakeForeignKey__$}'); - - foreach ($keys as $key) { - $val = null; - - if (strpos($query, $key) !== false) { - switch($key) { - case '{$__cakeID__$}': - if (isset($data[$model->name]) || isset($data[$association])) { - if (isset($data[$model->name][$model->primaryKey])) { - $val = $data[$model->name][$model->primaryKey]; - } elseif (isset($data[$association][$model->primaryKey])) { - $val = $data[$association][$model->primaryKey]; - } - } else { - $found = false; - foreach (array_reverse($stack) as $assoc) { - if (isset($data[$assoc]) && isset($data[$assoc][$model->primaryKey])) { - $val = $data[$assoc][$model->primaryKey]; - $found = true; - break; - } - } - if (!$found) { - $val = ''; - } - } - break; - case '{$__cakeForeignKey__$}': - foreach ($model->__associations as $id => $name) { - foreach ($model->$name as $assocName => $assoc) { - if ($assocName === $association) { - if (isset($assoc['foreignKey'])) { - $foreignKey = $assoc['foreignKey']; - - if (isset($data[$model->name][$foreignKey])) { - $val = $data[$model->name][$foreignKey]; - } elseif (isset($data[$association][$foreignKey])) { - $val = $data[$association][$foreignKey]; - } else { - $found = false; - foreach (array_reverse($stack) as $assoc) { - if (isset($data[$assoc]) && isset($data[$assoc][$foreignKey])) { - $val = $data[$assoc][$foreignKey]; - $found = true; - break; - } - } - if (!$found) { - $val = ''; - } - } - } - break 3; - } - } - } - break; - } - if (empty($val) && $val !== '0') { - return false; - } - $query = r($key, $this->value($val, $model->getColumnType($model->primaryKey)), $query); - } - } - return $query; - } -/** - * To-be-overridden in subclasses. - * - * @param unknown_type $model - * @param unknown_type $key - * @return unknown - */ - function resolveKey($model, $key) { - return $model->name . $key; - } -/** - * Closes the current datasource. - * - */ - function __destruct() { - if ($this->connected) { - $this->close(); - } - } -} -?> diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/datasources/dbo_source.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/datasources/dbo_source.php deleted file mode 100644 index 8d42ce0..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/datasources/dbo_source.php +++ /dev/null @@ -1,1967 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.model.datasources - * @since CakePHP(tm) v 0.10.0.1076 - * @version $Revision: 7691 $ - * @modifiedby $LastChangedBy: nate $ - * @lastmodified $Date: 2008-10-02 00:59:12 -0400 (Thu, 02 Oct 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -uses('set'); -/** - * DboSource - * - * Creates DBO-descendant objects from a given db connection configuration - * - * @package cake - * @subpackage cake.cake.libs.model.datasources - */ -class DboSource extends DataSource { -/** - * Description string for this Database Data Source. - * - * @var unknown_type - */ - var $description = "Database Data Source"; -/** - * index definition, standard cake, primary, index, unique - * - * @var array - */ - var $index = array('PRI'=> 'primary', 'MUL'=> 'index', 'UNI'=>'unique'); -/** - * Enter description here... - * - * @var unknown_type - */ - var $startQuote = null; -/** - * Enter description here... - * - * @var unknown_type - */ - var $endQuote = null; -/** - * Enter description here... - * - * @var unknown_type - */ - var $alias = 'AS '; -/** - * Enter description here... - * - * @var unknown_type - */ - var $goofyLimit = false; -/** - * Enter description here... - * - * @var unknown_type - */ - var $__bypass = false; -/** - * The set of valid SQL operations usable in a WHERE statement - * - * @var array - */ - var $__sqlOps = array('like', 'ilike', 'or', 'not', 'in', 'between', 'regexp', 'similar to'); -/** - * Constructor - */ - function __construct($config = null, $autoConnect = true) { - $this->debug = Configure::read() > 0; - $this->fullDebug = Configure::read() > 1; - parent::__construct($config); - - if ($autoConnect) { - return $this->connect(); - } else { - return true; - } - } -/** - * Reconnects to database server with optional new settings - * - * @param array $config An array defining the new configuration settings - * @return boolean True on success, false on failure - */ - function reconnect($config = null) { - $this->disconnect(); - if ($config != null) { - $this->config = array_merge($this->_baseConfig, $config); - } - return $this->connect(); - } -/** - * Prepares a value, or an array of values for database queries by quoting and escaping them. - * - * @param mixed $data A value or an array of values to prepare. - * @return mixed Prepared value or array of values. - */ - function value($data, $column = null) { - if (is_array($data)) { - $out = array(); - $keys = array_keys($data); - $count = count($data); - for ($i = 0; $i < $count; $i++) { - $out[$keys[$i]] = $this->value($data[$keys[$i]]); - } - return $out; - } elseif (in_array($data, array('{$__cakeID__$}', '{$__cakeForeignKey__$}'), true)) { - return $data; - } - return null; - } -/** - * Executes given SQL statement. - * - * @param string $sql SQL statement - * @return unknown - */ - function rawQuery($sql) { - $this->took = $this->error = $this->numRows = false; - return $this->execute($sql); - } -/** - * Queries the database with given SQL statement, and obtains some metadata about the result - * (rows affected, timing, any errors, number of rows in resultset). The query is also logged. - * If DEBUG is set, the log is shown all the time, else it is only shown on errors. - * - * @param string $sql - * @return unknown - */ - function execute($sql) { - $t = getMicrotime(); - $this->_result = $this->_execute($sql); - $this->affected = $this->lastAffected(); - $this->took = round((getMicrotime() - $t) * 1000, 0); - $this->error = $this->lastError(); - $this->numRows = $this->lastNumRows($this->_result); - - if ($this->fullDebug && Configure::read() > 1) { - $this->logQuery($sql); - } - - if ($this->error) { - $this->showQuery($sql); - return false; - } else { - return $this->_result; - } - } -/** - * DataSource Query abstraction - * - * @return resource Result resource identifier - */ - function query() { - $args = func_get_args(); - $fields = null; - $order = null; - $limit = null; - $page = null; - $recursive = null; - - if (count($args) == 1) { - return $this->fetchAll($args[0]); - - } elseif (count($args) > 1 && (strpos(strtolower($args[0]), 'findby') === 0 || strpos(strtolower($args[0]), 'findallby') === 0)) { - $params = $args[1]; - - if (strpos(strtolower($args[0]), 'findby') === 0) { - $all = false; - $field = Inflector::underscore(preg_replace('/findBy/i', '', $args[0])); - } else { - $all = true; - $field = Inflector::underscore(preg_replace('/findAllBy/i', '', $args[0])); - } - - $or = (strpos($field, '_or_') !== false); - if ($or) { - $field = explode('_or_', $field); - } else { - $field = explode('_and_', $field); - } - $off = count($field) - 1; - - if (isset($params[1 + $off])) { - $fields = $params[1 + $off]; - } - - if (isset($params[2 + $off])) { - $order = $params[2 + $off]; - } - - if (!array_key_exists(0, $params)) { - return false; - } - - $c = 0; - $query = array(); - foreach ($field as $f) { - if (!is_array($params[$c]) && !empty($params[$c]) && $params[$c] !== true && $params[$c] !== false) { - $query[$args[2]->alias . '.' . $f] = '= ' . $params[$c]; - } else { - $query[$args[2]->alias . '.' . $f] = $params[$c]; - } - $c++; - } - - if ($or) { - $query = array('OR' => $query); - } - - if ($all) { - - if (isset($params[3 + $off])) { - $limit = $params[3 + $off]; - } - - if (isset($params[4 + $off])) { - $page = $params[4 + $off]; - } - - if (isset($params[5 + $off])) { - $recursive = $params[5 + $off]; - } - return $args[2]->findAll($query, $fields, $order, $limit, $page, $recursive); - } else { - if (isset($params[3 + $off])) { - $recursive = $params[3 + $off]; - } - return $args[2]->find($query, $fields, $order, $recursive); - } - } else { - if (isset($args[1]) && $args[1] === true) { - return $this->fetchAll($args[0], true); - } - return $this->fetchAll($args[0], false); - } - } -/** - * Returns a row from current resultset as an array . - * - * @return array The fetched row as an array - */ - function fetchRow($sql = null) { - - if (!empty($sql) && is_string($sql) && strlen($sql) > 5) { - if (!$this->execute($sql)) { - return null; - } - } - - if (is_resource($this->_result) || is_object($this->_result)) { - $this->resultSet($this->_result); - $resultRow = $this->fetchResult(); - return $resultRow; - } else { - return null; - } - } -/** - * Returns an array of all result rows for a given SQL query. - * Returns false if no rows matched. - * - * @param string $sql SQL statement - * @param boolean $cache Enables returning/storing cached query results - * @return array Array of resultset rows, or false if no rows matched - */ - function fetchAll($sql, $cache = true, $modelName = null) { - if ($cache && isset($this->_queryCache[$sql])) { - if (preg_match('/^\s*select/i', $sql)) { - return $this->_queryCache[$sql]; - } - } - - if ($this->execute($sql)) { - $out = array(); - - while ($item = $this->fetchRow()) { - $out[] = $item; - } - - if ($cache) { - if (strpos(trim(strtolower($sql)), 'select') !== false) { - $this->_queryCache[$sql] = $out; - } - } - return $out; - - } else { - return false; - } - } -/** - * Returns a single field of the first of query results for a given SQL query, or false if empty. - * - * @param string $name Name of the field - * @param string $sql SQL query - * @return unknown - */ - function field($name, $sql) { - $data = $this->fetchRow($sql); - - if (!isset($data[$name]) || empty($data[$name])) { - return false; - } else { - return $data[$name]; - } - } -/** - * Returns a quoted name of $data for use in an SQL statement. - * Strips fields out of SQL functions before quoting. - * - * @param string $data - * @return string SQL field - */ - function name($data) { - if (preg_match_all('/([^(]*)\((.*)\)(.*)/', $data, $fields)) { - $fields = Set::extract($fields, '{n}.0'); - if (!empty($fields[1])) { - if (!empty($fields[2])) { - return $fields[1] . '(' . $this->name($fields[2]) . ')' . $fields[3]; - } else { - return $fields[1] . '()' . $fields[3]; - } - } - } - if ($data == '*') { - return '*'; - } - $data = $this->startQuote . str_replace('.', $this->endQuote . '.' . $this->startQuote, $data) . $this->endQuote; - $data = str_replace($this->startQuote . $this->startQuote, $this->startQuote, $data); - - if (!empty($this->endQuote) && $this->endQuote == $this->startQuote) { - $oddMatches = substr_count($data, $this->endQuote); - if ($oddMatches % 2 == 1) { - $data = trim($data, $this->endQuote); - } - } - return str_replace($this->endQuote . $this->endQuote, $this->endQuote, $data); - } -/** - * Checks if it's connected to the database - * - * @return boolean True if the database is connected, else false - */ - function isConnected() { - return $this->connected; - } -/** - * Outputs the contents of the queries log. - * - * @param boolean $sorted - */ - function showLog($sorted = false) { - if ($sorted) { - $log = sortByKey($this->_queriesLog, 'took', 'desc', SORT_NUMERIC); - } else { - $log = $this->_queriesLog; - } - - if ($this->_queriesCnt > 1) { - $text = 'queries'; - } else { - $text = 'query'; - } - - if (php_sapi_name() != 'cli') { - print ("\n\n"); - print ("\n\n\n\n"); - - foreach ($log as $k => $i) { - print ("\n"); - } - print ("
{$this->_queriesCnt} {$text} took {$this->_queriesTime} ms
NrQueryErrorAffectedNum. rowsTook (ms)
" . ($k + 1) . "" . h($i['query']) . "{$i['error']}{$i['affected']}{$i['numRows']}{$i['took']}
\n"); - } else { - foreach ($log as $k => $i) { - print (($k + 1) . ". {$i['query']} {$i['error']}\n"); - } - } - } -/** - * Log given SQL query. - * - * @param string $sql SQL statement - * @todo: Add hook to log errors instead of returning false - */ - function logQuery($sql) { - $this->_queriesCnt++; - $this->_queriesTime += $this->took; - $this->_queriesLog[] = array('query' => $sql, - 'error' => $this->error, - 'affected' => $this->affected, - 'numRows' => $this->numRows, - 'took' => $this->took - ); - if (count($this->_queriesLog) > $this->_queriesLogMax) { - array_pop($this->_queriesLog); - } - if ($this->error) { - return false; - } - } -/** - * Output information about an SQL query. The SQL statement, number of rows in resultset, - * and execution time in microseconds. If the query fails, an error is output instead. - * - * @param string $sql Query to show information on. - */ - function showQuery($sql) { - $error = $this->error; - if (strlen($sql) > 200 && !$this->fullDebug && Configure::read() > 1) { - $sql = substr($sql, 0, 200) . '[...]'; - } - - if (($this->debug || $error) && Configure::read() > 0) { - e("

Query: {$sql} "); - if ($error) { - trigger_error("SQL Error: {$this->error}", E_USER_WARNING); - } else { - e("[Aff:{$this->affected} Num:{$this->numRows} Took:{$this->took}ms]"); - } - print ('

'); - } - } -/** - * Gets full table name including prefix - * - * @param mixed $model - * @param boolean $quote - * @return string Full quoted table name - */ - function fullTableName($model, $quote = true) { - if (is_object($model)) { - $table = $model->tablePrefix . $model->table; - } elseif (isset($this->config['prefix'])) { - $table = $this->config['prefix'] . strval($model); - } else { - $table = strval($model); - } - if ($quote) { - return $this->name($table); - } - return $table; - } -/** - * The "C" in CRUD - * - * @param Model $model - * @param array $fields - * @param array $values - * @return boolean Success - */ - function create(&$model, $fields = null, $values = null) { - $fieldInsert = array(); - $valueInsert = array(); - $id = null; - - if ($fields == null) { - unset($fields, $values); - $fields = array_keys($model->data); - $values = array_values($model->data); - } - $count = count($fields); - - for ($i = 0; $i < $count; $i++) { - $fieldInsert[] = $this->name($fields[$i]); - if ($fields[$i] == $model->primaryKey) { - $id = $values[$i]; - } - } - $count = count($values); - - for ($i = 0; $i < $count; $i++) { - $valueInsert[] = $this->value($values[$i], $model->getColumnType($fields[$i])); - } - - if ($this->execute('INSERT INTO ' . $this->fullTableName($model) . ' (' . join(',', $fieldInsert). ') VALUES (' . join(',', $valueInsert) . ')')) { - if (empty($id)) { - $id = $this->lastInsertId($this->fullTableName($model, false), $model->primaryKey); - } - $model->setInsertID($id); - $model->id = $id; - return true; - } else { - $model->onError(); - return false; - } - } -/** - * The "R" in CRUD - * - * @param Model $model - * @param array $queryData - * @param integer $recursive Number of levels of association - * @return unknown - */ - function read(&$model, $queryData = array(), $recursive = null) { - - $this->__scrubQueryData($queryData); - $null = null; - $array = array(); - $linkedModels = array(); - $this->__bypass = false; - - if ($recursive === null && isset($queryData['recursive'])) { - $recursive = $queryData['recursive']; - } - - if (!is_null($recursive)) { - $_recursive = $model->recursive; - $model->recursive = $recursive; - } - - if (!empty($queryData['fields'])) { - $this->__bypass = true; - $queryData['fields'] = $this->fields($model, null, $queryData['fields']); - } else { - $queryData['fields'] = $this->fields($model); - } - - foreach ($model->__associations as $type) { - foreach ($model->{$type} as $assoc => $assocData) { - if ($model->recursive > -1) { - $linkModel =& $model->{$assoc}; - - $external = isset($assocData['external']); - if ($model->alias == $linkModel->alias && $type != 'hasAndBelongsToMany' && $type != 'hasMany') { - if (true === $this->generateSelfAssociationQuery($model, $linkModel, $type, $assoc, $assocData, $queryData, $external, $null)) { - $linkedModels[] = $type . '/' . $assoc; - } - } else { - if ($model->useDbConfig == $linkModel->useDbConfig) { - if (true === $this->generateAssociationQuery($model, $linkModel, $type, $assoc, $assocData, $queryData, $external, $null)) { - $linkedModels[] = $type . '/' . $assoc; - } - } - } - } - } - } - // Build final query SQL - $query = $this->generateAssociationQuery($model, $null, null, null, null, $queryData, false, $null); - $resultSet = $this->fetchAll($query, $model->cacheQueries, $model->alias); - - if ($resultSet === false) { - $model->onError(); - return false; - } - - $filtered = $this->__filterResults($resultSet, $model); - - if ($model->recursive > 0) { - foreach ($model->__associations as $type) { - foreach ($model->{$type} as $assoc => $assocData) { - $db = null; - $linkModel =& $model->{$assoc}; - - if (!in_array($type . '/' . $assoc, $linkedModels)) { - if ($model->useDbConfig == $linkModel->useDbConfig) { - $db =& $this; - } else { - $db =& ConnectionManager::getDataSource($linkModel->useDbConfig); - } - } elseif ($model->recursive > 1 && ($type == 'belongsTo' || $type == 'hasOne')) { - // Do recursive joins on belongsTo and hasOne relationships - $db =& $this; - } else { - unset ($db); - } - - if (isset($db) && $db != null) { - $stack = array($assoc); - $db->queryAssociation($model, $linkModel, $type, $assoc, $assocData, $array, true, $resultSet, $model->recursive - 1, $stack); - unset($db); - } - } - } - $this->__filterResults($resultSet, $model, $filtered); - } - - if (!is_null($recursive)) { - $model->recursive = $_recursive; - } - return $resultSet; - } -/** - * Private method. Passes association results thru afterFind filter of corresponding model - * - * @param unknown_type $results - * @param unknown_type $model - * @param unknown_type $filtered - * @return unknown - */ - function __filterResults(&$results, &$model, $filtered = array()) { - - $filtering = array(); - $associations = array_merge($model->belongsTo, $model->hasOne, $model->hasMany, $model->hasAndBelongsToMany); - $count = count($results); - - for ($i = 0; $i < $count; $i++) { - if (is_array($results[$i])) { - $keys = array_keys($results[$i]); - $count2 = count($keys); - - for ($j = 0; $j < $count2; $j++) { - $className = $key = $keys[$j]; - - if ($model->alias != $className && !in_array($key, $filtered)) { - if (!in_array($key, $filtering)) { - $filtering[] = $key; - } - - if (isset($model->{$className}) && is_object($model->{$className})) { - $data = $model->{$className}->afterFind(array(array($key => $results[$i][$key])), false); - } - if (isset($data[0][$key])) { - $results[$i][$key] = $data[0][$key]; - } - } - } - } - } - return $filtering; - } -/** - * Enter description here... - * - * @param Model $model - * @param unknown_type $linkModel - * @param string $type Association type - * @param unknown_type $association - * @param unknown_type $assocData - * @param unknown_type $queryData - * @param unknown_type $external - * @param unknown_type $resultSet - * @param integer $recursive Number of levels of association - * @param array $stack - */ - function queryAssociation(&$model, &$linkModel, $type, $association, $assocData, &$queryData, $external = false, &$resultSet, $recursive, $stack) { - - if ($query = $this->generateAssociationQuery($model, $linkModel, $type, $association, $assocData, $queryData, $external, $resultSet)) { - if (!isset($resultSet) || !is_array($resultSet)) { - if (Configure::read() > 0) { - e('
SQL Error in model ' . $model->alias . ': '); - if (isset($this->error) && $this->error != null) { - e($this->error); - } - e('
'); - } - return null; - } - $count = count($resultSet); - - if ($type === 'hasMany' && (!isset($assocData['limit']) || empty($assocData['limit']))) { - $ins = $fetch = array(); - for ($i = 0; $i < $count; $i++) { - if ($in = $this->insertQueryData('{$__cakeID__$}', $resultSet[$i], $association, $assocData, $model, $linkModel, $stack)) { - $ins[] = $in; - } - } - - if (!empty($ins)) { - $query = r('{$__cakeID__$}', join(', ', $ins), $query); - $fetch = $this->fetchAll($query, $model->cacheQueries, $model->alias); - } - - if (!empty($fetch) && is_array($fetch)) { - if ($recursive > 0) { - - foreach ($linkModel->__associations as $type1) { - foreach ($linkModel->{$type1} as $assoc1 => $assocData1) { - - $deepModel =& $linkModel->{$assocData1['className']}; - if ($deepModel->alias != $model->alias) { - $tmpStack = $stack; - $tmpStack[] = $assoc1; - if ($linkModel->useDbConfig == $deepModel->useDbConfig) { - $db =& $this; - } else { - $db =& ConnectionManager::getDataSource($deepModel->useDbConfig); - } - $db->queryAssociation($linkModel, $deepModel, $type1, $assoc1, $assocData1, $queryData, true, $fetch, $recursive - 1, $tmpStack); - } - } - } - } - } - return $this->__mergeHasMany($resultSet, $fetch, $association, $model, $linkModel, $recursive); - } - for ($i = 0; $i < $count; $i++) { - - $row =& $resultSet[$i]; - $q = $this->insertQueryData($query, $resultSet[$i], $association, $assocData, $model, $linkModel, $stack); - - if ($q != false) { - $fetch = $this->fetchAll($q, $model->cacheQueries, $model->alias); - } else { - $fetch = null; - } - - if (!empty($fetch) && is_array($fetch)) { - if ($recursive > 0) { - - foreach ($linkModel->__associations as $type1) { - foreach ($linkModel->{$type1} as $assoc1 => $assocData1) { - - $deepModel =& $linkModel->{$assocData1['className']}; - if ($deepModel->alias != $model->alias) { - $tmpStack = $stack; - $tmpStack[] = $assoc1; - if ($linkModel->useDbConfig == $deepModel->useDbConfig) { - $db =& $this; - } else { - $db =& ConnectionManager::getDataSource($deepModel->useDbConfig); - } - $db->queryAssociation($linkModel, $deepModel, $type1, $assoc1, $assocData1, $queryData, true, $fetch, $recursive - 1, $tmpStack); - } - } - } - } - $this->__mergeAssociation($resultSet[$i], $fetch, $association, $type); - $resultSet[$i][$association] = $linkModel->afterfind($resultSet[$i][$association]); - - } else { - $tempArray[0][$association] = false; - $this->__mergeAssociation($resultSet[$i], $tempArray, $association, $type); - } - } - } - } - - function __mergeHasMany(&$resultSet, $merge, $association, &$model, &$linkModel) { - foreach ($resultSet as $i => $value) { - $count = 0; - $merged[$association] = array(); - foreach ($merge as $j => $data) { - if (isset($value[$model->alias]) && $value[$model->alias][$model->primaryKey] === $data[$association][$model->hasMany[$association]['foreignKey']]) { - if (count($data) > 1) { - $data = array_merge($data[$association], $data); - unset($data[$association]); - foreach ($data as $key => $name) { - if (is_numeric($key)) { - $data[$association][] = $name; - unset($data[$key]); - } - } - $merged[$association][] = $data; - } else { - $merged[$association][] = $data[$association]; - } - } - $count++; - } - if (isset($value[$model->alias])) { - $resultSet[$i] = Set::pushDiff($resultSet[$i], $merged); - unset($merged); - } - } - } -/** - * Enter description here... - * - * @param unknown_type $data - * @param unknown_type $merge - * @param unknown_type $association - * @param unknown_type $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 { - if (count($merge[0][$association]) > 1) { - foreach ($merge[0] as $assoc => $data2) { - if ($assoc != $association) { - $merge[0][$association][$assoc] = $data2; - } - } - } - if (!isset($data[$association])) { - if ($merge[0][$association] != null) { - $data[$association] = $merge[0][$association]; - } else { - $data[$association] = array(); - } - } else { - if (is_array($merge[0][$association])) { - foreach ($data[$association] as $k => $v) { - if (!is_array($v)) { - $dataAssocTmp[$k] = $v; - } - } - - foreach ($merge[0][$association] as $k => $v) { - if (!is_array($v)) { - $mergeAssocTmp[$k] = $v; - } - } - - if (array_keys($merge[0]) === array_keys($data)) { - $data[$association][$association] = $merge[0][$association]; - } else { - $diff = Set::diff($dataAssocTmp, $mergeAssocTmp); - $data[$association] = array_merge($merge[0][$association], $diff); - } - } - } - } - } else { - if ($merge[0][$association] === false) { - if (!isset($data[$association])) { - $data[$association] = array(); - } - } else { - foreach ($merge as $i => $row) { - if (count($row) == 1) { - $data[$association][] = $row[$association]; - } else { - $tmp = array_merge($row[$association], $row); - unset($tmp[$association]); - $data[$association][] = $tmp; - } - } - } - } - } -/** - * Enter description here... - * - * @param unknown_type $model - * @param unknown_type $linkModel - * @param unknown_type $type - * @param unknown_type $association - * @param unknown_type $assocData - * @param unknown_type $queryData - * @param unknown_type $external - * @param unknown_type $resultSet - * @return unknown - */ - function generateSelfAssociationQuery(&$model, &$linkModel, $type, $association = null, $assocData = array(), &$queryData, $external = false, &$resultSet) { - $alias = $association; - if (empty($alias) && !empty($linkModel)) { - $alias = $linkModel->alias; - } - - if (!isset($queryData['selfJoin'])) { - $queryData['selfJoin'] = array(); - - $self = array( - 'fields' => $this->fields($model, null, $queryData['fields']), - 'joins' => array(array( - 'table' => $this->fullTableName($linkModel), - 'alias' => $alias, - 'type' => 'LEFT', - 'conditions' => array( - $model->escapeField($assocData['foreignKey']) => '{$__cakeIdentifier[' . "{$alias}.{$linkModel->primaryKey}" . ']__$}')) - ), - 'table' => $this->fullTableName($model), - 'alias' => $model->alias, - 'limit' => $queryData['limit'], - 'offset' => $queryData['offset'], - 'conditions'=> $queryData['conditions'], - 'order' => $queryData['order'] - ); - - if (!empty($assocData['conditions'])) { - $self['joins'][0]['conditions'] = trim($this->conditions(array_merge($self['joins'][0]['conditions'], (array)$assocData['conditions']), true, false)); - } - - if (!empty($queryData['joins'])) { - foreach ($queryData['joins'] as $join) { - $self['joins'][] = $join; - } - } - - if ($this->__bypass === false) { - $self['fields'] = array_merge($self['fields'], $this->fields($linkModel, $alias, (isset($assocData['fields']) ? $assocData['fields'] : ''))); - } - - if (!in_array($self, $queryData['selfJoin'])) { - $queryData['selfJoin'][] = $self; - return true; - } - - } elseif (isset($linkModel)) { - return $this->generateAssociationQuery($model, $linkModel, $type, $association, $assocData, $queryData, $external, $resultSet); - - } else { - $result = $queryData['selfJoin'][0]; - if (!empty($queryData['joins'])) { - foreach ($queryData['joins'] as $join) { - if (!in_array($join, $result['joins'])) { - $result['joins'][] = $join; - } - } - } - if (!empty($queryData['conditions'])) { - $result['conditions'] = trim($this->conditions(array_merge((array)$result['conditions'], $assocData['conditions']), true, false)); - } - if (!empty($queryData['fields'])) { - $result['fields'] = array_unique(array_merge($result['fields'], $queryData['fields'])); - } - $sql = $this->buildStatement($result, $model); - return $sql; - } - } -/** - * Enter description here... - * - * @param Model $model - * @param unknown_type $linkModel - * @param unknown_type $type - * @param unknown_type $association - * @param unknown_type $assocData - * @param unknown_type $queryData - * @param unknown_type $external - * @param unknown_type $resultSet - * @return unknown - */ - function generateAssociationQuery(&$model, &$linkModel, $type, $association = null, $assocData = array(), &$queryData, $external = false, &$resultSet) { - $this->__scrubQueryData($queryData); - $this->__scrubQueryData($assocData); - $joinedOnSelf = false; - - if (empty($queryData['fields'])) { - $queryData['fields'] = $this->fields($model, $model->alias); - } 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('); - if ($match === false && $match1 === false) { - $queryData['fields'] = array_unique(array_merge($passedFields, $assocFields)); - } else { - $queryData['fields'] = $passedFields; - } - } else { - $queryData['fields'] = array_unique(array_merge($passedFields, $assocFields)); - } - unset($assocFields, $passedFields); - } - - if ($linkModel == null) { - if (array_key_exists('selfJoin', $queryData)) { - return $this->generateSelfAssociationQuery($model, $linkModel, $type, $association, $assocData, $queryData, $external, $resultSet); - } else { - return $this->buildStatement(array( - 'fields' => array_unique($queryData['fields']), - 'table' => $this->fullTableName($model), - 'alias' => $model->alias, - 'limit' => $queryData['limit'], - 'offset' => $queryData['offset'], - 'joins' => $queryData['joins'], - 'conditions' => $queryData['conditions'], - 'order' => $queryData['order']), $model - ); - } - } - $alias = $association; - - if ($model->alias == $linkModel->alias) { - $joinedOnSelf = true; - } - - if ($external && isset($assocData['finderQuery'])) { - if (!empty($assocData['finderQuery'])) { - return $assocData['finderQuery']; - } - } - - if ((!$external && in_array($type, array('hasOne', 'belongsTo')) && $this->__bypass === false) || $external) { - $fields = $this->fields($linkModel, $alias, $assocData['fields']); - } else { - $fields = array(); - } - $limit = ''; - - if (isset($assocData['limit'])) { - if ((!isset($assocData['offset']) || (empty($assocData['offset']))) && isset($assocData['page'])) { - $assocData['offset'] = ($assocData['page'] - 1) * $assocData['limit']; - } elseif (!isset($assocData['offset'])) { - $assocData['offset'] = null; - } - $limit = $this->limit($assocData['limit'], $assocData['offset']); - } - - switch($type) { - case 'hasOne': - case 'belongsTo': - if ($external) { - if ($type == 'hasOne') { - $conditions = $this->__mergeConditions($assocData['conditions'], array("{$alias}.{$assocData['foreignKey']}" => '{$__cakeID__$}')); - } elseif ($type == 'belongsTo') { - $conditions = $this->__mergeConditions($assocData['conditions'], array("{$alias}.{$linkModel->primaryKey}" => '{$__cakeForeignKey__$}')); - } - $query = array_merge($assocData, array( - 'conditions' => $conditions, - 'table' => $this->fullTableName($linkModel), - 'fields' => $fields, - 'alias' => $alias - )); - - if ($type == 'belongsTo') { - // Dunno if we should be doing this for hasOne also...? - // Or maybe not doing it at all...? - $query = array_merge($query, array('order' => $assocData['order'], 'limit' => $limit)); - } - } else { - if ($type == 'hasOne') { - $conditions = $this->__mergeConditions($assocData['conditions'], array("{$alias}.{$assocData['foreignKey']}" => '{$__cakeIdentifier[' . "{$model->alias}.{$model->primaryKey}" . ']__$}')); - } elseif ($type == 'belongsTo') { - $conditions = $this->__mergeConditions($assocData['conditions'], array("{$model->alias}.{$assocData['foreignKey']}" => '{$__cakeIdentifier[' . "{$alias}.{$linkModel->primaryKey}" . ']__$}')); - } - - $join = array( - 'table' => $this->fullTableName($linkModel), - 'alias' => $alias, - 'type' => 'LEFT', - 'conditions' => trim($this->conditions($conditions, true, false)) - ); - - $queryData['fields'] = array_merge($queryData['fields'], $fields); - - if (!empty($assocData['order'])) { - $hasCount = false; - foreach ($queryData['fields'] as $field) { - if (stripos($field, 'COUNT(*)') !== false) { - $hasCount = true; - break; - } - } - - $putOrderByFields = true; - if ($hasCount) { - $orders = spliti(' ASC| DESC|,', $assocData['order']); - foreach ($orders as $order) { - $order = trim($order); - if (!empty($order) && !in_array($order, $queryData['fields'])) { - $putOrderByFields = false; - break; - } - } - } - - if ($putOrderByFields) { - $queryData['order'][] = $assocData['order']; - } - } - - if (!in_array($join, $queryData['joins'])) { - $queryData['joins'][] = $join; - } - return true; - } - break; - case 'hasMany': - $assocData['fields'] = array_unique(array_merge( - $this->fields($linkModel, $alias, $assocData['fields']), - $this->fields($linkModel, $alias, array("{$alias}.{$assocData['foreignKey']}")) - )); - - $query = array( - 'conditions' => $this->__mergeConditions(array("{$alias}.{$assocData['foreignKey']}" => array('{$__cakeID__$}')), $assocData['conditions']), - 'fields' => $assocData['fields'], - 'table' => $this->fullTableName($linkModel), - 'alias' => $alias, - 'order' => $assocData['order'], - 'limit' => $limit - ); - break; - case 'hasAndBelongsToMany': - $joinTbl = $this->fullTableName($assocData['joinTable']); - $joinFields = array(); - $joinAssoc = null; - $joinAlias = $joinTbl; - - if (isset($assocData['with']) && !empty($assocData['with'])) { - $joinAssoc = $joinAlias = $model->{$assocData['with']}->name; - $joinFields = $model->{$assocData['with']}->loadInfo(); - $joinFields = $joinFields->extract('{n}.name'); - - if (is_array($joinFields) && !empty($joinFields) && count($joinFields) > 2) { - $joinFields = $this->fields($model->{$assocData['with']}, $model->{$assocData['with']}->name, $joinFields); - } else { - $joinFields = array(); - $joinAssoc = null; - $joinAlias = $joinTbl; - } - } - - $query = array( - 'conditions' => $assocData['conditions'], - 'limit' => $limit, - 'table' => $this->fullTableName($linkModel), - 'alias' => $alias, - 'fields' => array_merge($this->fields($linkModel, $alias, $assocData['fields']), $joinFields), - 'order' => $assocData['order'], - 'joins' => array(array( - 'table' => $joinTbl, - 'alias' => $joinAssoc, - 'conditions' => array( - array("{$joinAlias}.{$assocData['foreignKey']}" => '{$__cakeID__$}'), - array("{$joinAlias}.{$assocData['associationForeignKey']}" => '{$__cakeIdentifier['."{$alias}.{$linkModel->primaryKey}".']__$}') - )) - ) - ); - break; - } - if (isset($query)) { - return $this->buildStatement($query, $model); - } - return null; - } - - function buildJoinStatement($join) { - $data = array_merge(array( - 'type' => null, - 'alias' => null, - 'table' => 'join_table', - 'conditions' => array() - ), $join); - - if (!empty($data['alias'])) { - $data['alias'] = $this->alias . $this->name($data['alias']); - } - if (!empty($data['conditions'])) { - $data['conditions'] = trim($this->conditions($data['conditions'], true, false)); - } - return $this->renderJoinStatement($data); - } - - function buildStatement($query, $model) { - $query = array_merge(array('offset' => null, 'joins' => array()), $query); - if (!empty($query['joins'])) { - for ($i = 0; $i < count($query['joins']); $i++) { - if (is_array($query['joins'][$i])) { - $query['joins'][$i] = $this->buildJoinStatement($query['joins'][$i]); - } - } - } - return $this->renderStatement(array( - 'conditions' => $this->conditions($query['conditions']), - 'fields' => join(', ', $query['fields']), - 'table' => $query['table'], - 'alias' => $this->alias . $this->name($query['alias']), - 'order' => $this->order($query['order']), - 'limit' => $this->limit($query['limit'], $query['offset']), - 'joins' => join(' ', $query['joins']) - )); - } - - function renderJoinStatement($data) { - extract($data); - return trim("{$type} JOIN {$table} {$alias} ON ({$conditions})"); - } - - function renderStatement($data) { - extract($data); - return "SELECT {$fields} FROM {$table} {$alias} {$joins} {$conditions} {$order} {$limit}"; - } -/** - * Private method - * - * @return array - */ - function __mergeConditions($query, $assoc) { - if (!empty($assoc)) { - if (is_array($query)) { - return array_merge((array)$assoc, $query); - } else { - if (!empty($query)) { - $query = array($query); - if (is_array($assoc)) { - $query = array_merge($query, $assoc); - } else { - $query[] = $assoc; - } - return $query; - } else { - return $assoc; - } - } - } - return $query; - } -/** - * Generates and executes an SQL UPDATE statement for given model, fields, and values. - * - * @param Model $model - * @param array $fields - * @param array $values - * @param mixed $conditions - * @return array - */ - function update(&$model, $fields = array(), $values = null, $conditions = null) { - $updates = array(); - - if ($values == null) { - $combined = $fields; - } else { - $combined = array_combine($fields, $values); - } - - foreach ($combined as $field => $value) { - if ($value === null) { - $updates[] = $this->name($field) . ' = NULL'; - } else { - $update = $this->name($field) . ' = '; - if ($conditions == null) { - $update .= $this->value($value, $model->getColumnType($field)); - } else { - $update .= $value; - } - $updates[] = $update; - } - } - $conditions = $this->defaultConditions($model, $conditions); - - if ($conditions === false) { - return false; - } - - $fields = join(',', $updates); - $table = $this->fullTableName($model); - - $conditions = $this->conditions($conditions); - - if (!$this->execute("UPDATE {$table} SET {$fields} {$conditions}")) { - $model->onError(); - return false; - } - return true; - } -/** - * Generates and executes an SQL DELETE statement for given id on given model. - * - * @param Model $model - * @param mixed $conditions - * @return boolean Success - */ - function delete(&$model, $conditions = null) { - $query = $this->defaultConditions($model, $conditions); - - if ($query === false) { - return false; - } - - $table = $this->fullTableName($model); - $conditions = $this->conditions($query); - - if ($this->execute("DELETE FROM {$table} {$conditions}") === false) { - $model->onError(); - return false; - } - return true; - } -/** - * Creates a default set of conditions from the model if $conditions is null/empty. - * - * @param object $model - * @param mixed $conditions - * @return mixed - */ - function defaultConditions(&$model, $conditions) { - if (!empty($conditions)) { - return $conditions; - } - if (!$model->exists()) { - return false; - } - return array($model->primaryKey => (array)$model->getID()); - } -/** - * Returns a key formatted like a string Model.fieldname(i.e. Post.title, or Country.name) - * - * @param unknown_type $model - * @param unknown_type $key - * @param unknown_type $assoc - * @return string - */ - function resolveKey($model, $key, $assoc = null) { - if (empty($assoc)) { - $assoc = $model->alias; - } - if (!strpos('.', $key)) { - return $this->name($model->alias) . '.' . $this->name($key); - } - return $key; - } -/** - * Returns the column type of a given - * - * @param Model $model - * @param string $field - */ - function getColumnType(&$model, $field) { - return $model->getColumnType($field); - } -/** - * Private helper method to remove query metadata in given data array. - * - * @param array $data - */ - function __scrubQueryData(&$data) { - foreach (array('conditions', 'fields', 'joins', 'order', 'limit', 'offset') as $key) { - if (!isset($data[$key]) || empty($data[$key])) { - $data[$key] = array(); - } - } - } -/** - * Generates the fields list of an SQL query. - * - * @param Model $model - * @param string $alias Alias tablename - * @param mixed $fields - * @param boolean $quote If false, returns fields array unquoted - * @return array - */ - function fields(&$model, $alias = null, $fields = array(), $quote = true) { - if (empty($alias)) { - $alias = $model->alias; - } - - if (!is_array($fields)) { - if (!empty($fields)) { - $depth = 0; - $offset = 0; - $buffer = ''; - $results = array(); - $length = strlen($fields); - - while ($offset <= $length) { - $tmpOffset = -1; - $offsets = array(strpos($fields, ',', $offset), strpos($fields, '(', $offset), strpos($fields, ')', $offset)); - for ($i = 0; $i < 3; $i++) { - if ($offsets[$i] !== false && ($offsets[$i] < $tmpOffset || $tmpOffset == -1)) { - $tmpOffset = $offsets[$i]; - } - } - if ($tmpOffset !== -1) { - $buffer .= substr($fields, $offset, ($tmpOffset - $offset)); - if ($fields{$tmpOffset} == ',' && $depth == 0) { - $results[] = $buffer; - $buffer = ''; - } else { - $buffer .= $fields{$tmpOffset}; - } - if ($fields{$tmpOffset} == '(') { - $depth++; - } - if ($fields{$tmpOffset} == ')') { - $depth--; - } - $offset = ++$tmpOffset; - } else { - $results[] = $buffer . substr($fields, $offset); - $offset = $length + 1; - } - } - if (empty($results) && !empty($buffer)) { - $results[] = $buffer; - } - - if (!empty($results)) { - $fields = array_map('trim', $results); - } else { - $fields = array(); - } - } - } - if (empty($fields)) { - $fieldData = $model->loadInfo(); - $fields = $fieldData->extract('{n}.name'); - } else { - $fields = array_filter($fields); - } - - if (!$quote) { - return $fields; - } - $count = count($fields); - - if ($count >= 1 && !in_array($fields[0], array('*', 'COUNT(*)'))) { - for ($i = 0; $i < $count; $i++) { - if (!preg_match('/^.+\\(.*\\)/', $fields[$i])) { - $prepend = ''; - - if (strpos($fields[$i], 'DISTINCT') !== false) { - $prepend = 'DISTINCT '; - $fields[$i] = trim(str_replace('DISTINCT', '', $fields[$i])); - } - $dot = strpos($fields[$i], '.'); - - if ($dot === false) { - $fields[$i] = $prepend . $this->name($alias) . '.' . $this->name($fields[$i]); - } else { - $comma = strpos($fields[$i], ','); - if ($comma === false) { - $build = explode('.', $fields[$i]); - if (!Set::numeric($build)) { - $fields[$i] = $prepend . $this->name($build[0]) . '.' . $this->name($build[1]); - } - } else { - $comma = explode(',', $fields[$i]); - foreach ($comma as $string) { - $build = explode('.', $string); - if (!Set::numeric($build)) { - $value[] = $prepend . $this->name(trim($build[0])) . '.' . $this->name(trim($build[1])); - } - } - $fields[$i] = implode(', ', $value); - } - } - } elseif (preg_match('/\(([\.\w]+)\)/', $fields[$i], $field)) { - if (isset($field[1])) { - if (strpos($field[1], '.') === false) { - $field[1] = $this->name($alias) . '.' . $this->name($field[1]); - } else { - $field[0] = explode('.', $field[1]); - if (!Set::numeric($field[0])) { - $field[0] = join('.', array_map(array($this, 'name'), $field[0])); - $fields[$i] = preg_replace('/\(' . $field[1] . '\)/', '(' . $field[0] . ')', $fields[$i], 1); - } - } - } - } - } - } - return $fields; - } -/** - * Creates a WHERE clause by parsing given conditions data. - * - * @param mixed $conditions Array or string of conditions - * @return string SQL fragment - */ - function conditions($conditions, $quoteValues = true, $where = true) { - $clause = $out = ''; - if (is_string($conditions) || empty($conditions) || $conditions === true) { - if (empty($conditions) || trim($conditions) == '' || $conditions === true) { - if ($where) { - return ' WHERE 1 = 1'; - } - return '1 = 1'; - } - if (!preg_match('/^WHERE\\x20|^GROUP\\x20BY\\x20|^HAVING\\x20|^ORDER\\x20BY\\x20/i', $conditions, $match)) { - if ($where) { - $clause = ' WHERE '; - } - } - if (trim($conditions) == '') { - $conditions = ' 1 = 1'; - } else { - $conditions = $this->__quoteFields($conditions); - } - return $clause . $conditions; - } else { - if ($where) { - $clause = ' WHERE '; - } - if (!empty($conditions)) { - $out = $this->conditionKeysToString($conditions, $quoteValues); - } - if (empty($out) || empty($conditions)) { - return $clause . ' 1 = 1'; - } - return $clause . join(' AND ', $out); - } - } -/** - * Creates a WHERE clause by parsing given conditions array. Used by DboSource::conditions(). - * - * @param array $conditions Array or string of conditions - * @return string SQL fragment - */ - function conditionKeysToString($conditions, $quoteValues = true) { - $c = 0; - $data = $not = null; - $out = array(); - $bool = array('and', 'or', 'not', 'and not', 'or not', 'xor', '||', '&&'); - $join = ' AND '; - - foreach ($conditions as $key => $value) { - if (is_numeric($key) && empty($value)) { - continue; - } elseif (is_numeric($key) && is_string($value)) { - $out[] = $not . $this->__quoteFields($value); - } elseif (in_array(strtolower(trim($key)), $bool)) { - $join = ' ' . strtoupper($key) . ' '; - $value = $this->conditionKeysToString($value, $quoteValues); - if (strpos($join, 'NOT') !== false) { - if (strtoupper(trim($key)) == 'NOT') { - $key = 'AND ' . $key; - } - $not = 'NOT '; - } else { - $not = null; - } - $out[] = $not . '((' . join(') ' . strtoupper($key) . ' (', $value) . '))'; - } else { - if (is_string($value) && preg_match('/^\{\$__cakeIdentifier\[(.*)\]__\$}$/', $value, $identifier) && isset($identifier[1])) { - $data .= $this->name($key) . ' = ' . $this->name($identifier[1]); - } elseif (is_array($value) && !empty($value)) { - $keys = array_keys($value); - if ($keys[0] === 0) { - $data = $this->name($key) . ' IN ('; - if (strpos($value[0], '-!') === 0) { - $value[0] = str_replace('-!', '', $value[0]); - $data .= $value[0]; - $data .= ')'; - } else { - if ($quoteValues) { - foreach ($value as $valElement) { - $data .= $this->value($valElement) . ', '; - } - } - $data[strlen($data) - 2] = ')'; - } - } else { - $ret = $this->conditionKeysToString($value, $quoteValues); - if (count($ret) > 1) { - $out[] = '(' . join(') AND (', $ret) . ')'; - } elseif (isset($ret[0])) { - $out[] = $ret[0]; - } - } - } elseif (is_numeric($key) && !empty($value)) { - $data = $this->__quoteFields($value); - } elseif ($value === null || (is_array($value) && empty($value))) { - $data = $this->name($key) . ' IS NULL'; - } elseif ($value === false || $value === true) { - $data = $this->name($key) . " = " . $this->value($value, 'boolean'); - } elseif ($value === '') { - $data = $this->name($key) . " = ''"; - } elseif (preg_match('/^([a-z]+\\([a-z0-9]*\\)\\x20+|(?:' . join('\\x20)|(?:', $this->__sqlOps) . '\\x20)|<[>=]?(?![^>]+>)\\x20?|[>=!]{1,3}(?!<)\\x20?)?(.*)/is', $value, $match)) { - if (preg_match('/(\\x20[\\w]*\\x20)/', $key, $regs)) { - $clause = $regs['1']; - $key = preg_replace('/' . $regs['1'] . '/', '', $key); - } - - $not = false; - $mValue = trim($match['1']); - if (empty($match['1'])) { - $match['1'] = ' = '; - } elseif (empty($mValue)) { - $match['1'] = ' = '; - $match['2'] = $match['0']; - } elseif (!isset($match['2'])) { - $match['1'] = ' = '; - $match['2'] = $match['0']; - } elseif (strtolower($mValue) == 'not') { - $not = $this->conditionKeysToString(array($mValue => array($key => $match[2])), $quoteValues); - } - - if ($not) { - $data = $not[0]; - } elseif (strpos($match['2'], '-!') === 0) { - $match['2'] = str_replace('-!', '', $match['2']); - $data = $this->name($key) . ' ' . $match['1'] . ' ' . $match['2']; - } else { - if (!empty($match['2']) && $quoteValues) { - if (!preg_match('/[A-Za-z]+\\([a-z0-9]*\\),?\\x20+/', $match['2'])) { - $match['2'] = $this->value($match['2']); - } - $match['2'] = str_replace(' AND ', "' AND '", $match['2']); - } - $data = $this->__quoteFields($key); - if ($data === $key) { - $data = $this->name($key) . ' ' . $match['1'] . ' ' . $match['2']; - } else { - $data = $data . ' ' . $match['1'] . ' ' . $match['2']; - } - } - } - - if ($data != null) { - $out[] = $data; - $data = null; - } - } - $c++; - } - return $out; - } -/** - * Quotes Model.fields - * - * @param string $conditions - * @return string or false if no match - * @access private - */ - function __quoteFields($conditions) { - $start = null; - $end = null; - $original = $conditions; - - if (!empty($this->startQuote)) { - $start = preg_quote($this->startQuote); - } - - if (!empty($this->endQuote)) { - $end = preg_quote($this->endQuote); - } - $conditions = str_replace(array($start, $end), '', $conditions); - preg_match_all('/(?:[\'\"][^\'\"\\\]*(?:\\\.[^\'\"\\\]*)*[\'\"])|([a-z0-9_' . $start . $end . ']*\\.[a-z0-9_' . $start . $end . ']*)/i', $conditions, $replace, PREG_PATTERN_ORDER); - - if (isset($replace['1']['0'])) { - $pregCount = count($replace['1']); - - for ($i = 0; $i < $pregCount; $i++) { - if (!empty($replace['1'][$i]) && !is_numeric($replace['1'][$i])) { - $conditions = preg_replace('/\b' . preg_quote($replace['1'][$i]) . '\b/', $this->name($replace['1'][$i]), $conditions); - } - } - return $conditions; - } - return $original; - } -/** - * Returns a limit statement in the correct format for the particular database. - * - * @param integer $limit Limit of results returned - * @param integer $offset Offset from which to start results - * @return string SQL limit/offset statement - */ - function limit($limit, $offset = null) { - if ($limit) { - $rt = ''; - if (!strpos(strtolower($limit), 'limit') || strpos(strtolower($limit), 'limit') === 0) { - $rt = ' LIMIT'; - } - - if ($offset) { - $rt .= ' ' . $offset . ','; - } - - $rt .= ' ' . $limit; - return $rt; - } - return null; - } -/** - * Returns an ORDER BY clause as a string. - * - * @param string $key Field reference, as a key (i.e. Post.title) - * @param string $direction Direction (ASC or DESC) - * @return string ORDER BY clause - */ - function order($keys, $direction = 'ASC') { - if (is_string($keys) && strpos($keys, ',') && !preg_match('/\(.+\,.+\)/', $keys)) { - $keys = explode(',', $keys); - array_map('trim', $keys); - } - - if (is_array($keys)) { - foreach ($keys as $key => $val) { - if (is_numeric($key) && empty($val)) { - unset ($keys[$key]); - } - } - } - - if (empty($keys) || (is_array($keys) && count($keys) && isset($keys[0]) && empty($keys[0]))) { - return ''; - } - - if (is_array($keys)) { - if (Set::countDim($keys) > 1) { - $new = array(); - - foreach ($keys as $val) { - $val = $this->order($val); - $new[] = $val; - } - - $keys = $new; - } - - foreach ($keys as $key => $value) { - if (is_numeric($key)) { - $value = ltrim(str_replace('ORDER BY ', '', $this->order($value))); - $key = $value; - - if (!preg_match('/\\x20ASC|\\x20DESC/i', $key)) { - $value = ' ' . $direction; - } else { - $value = ''; - } - } else { - $value = ' ' . $value; - } - - if (!preg_match('/^.+\\(.*\\)/', $key) && !strpos($key, ',')) { - $dir = ''; - $hasDir = preg_match('/\\x20ASC|\\x20DESC/i', $key, $dir); - - if ($hasDir) { - $dir = $dir[0]; - $key = preg_replace('/\\x20ASC|\\x20DESC/i', '', $key); - } else { - $dir = ''; - } - $key = trim($this->name(trim($key)) . ' ' . trim($dir)); - } - $order[] = $this->order($key . $value); - } - - return ' ORDER BY ' . trim(str_replace('ORDER BY', '', join(',', $order))); - } else { - $keys = preg_replace('/ORDER\\x20BY/i', '', $keys); - - if (strpos($keys, '.')) { - preg_match_all('/([a-zA-Z0-9_]{1,})\\.([a-zA-Z0-9_]{1,})/', $keys, $result, - PREG_PATTERN_ORDER); - $pregCount = count($result['0']); - - for ($i = 0; $i < $pregCount; $i++) { - $keys = preg_replace('/' . $result['0'][$i] . '/', $this->name($result['0'][$i]), $keys); - } - - if (preg_match('/\\x20ASC|\\x20DESC/i', $keys)) { - return ' ORDER BY ' . $keys; - } else { - return ' ORDER BY ' . $keys . ' ' . $direction; - } - } elseif (preg_match('/(\\x20ASC|\\x20DESC)/i', $keys, $match)) { - $direction = $match['1']; - $keys = preg_replace('/' . $match['1'] . '/', '', $keys); - return ' ORDER BY ' . $keys . $direction; - } else { - $direction = ' ' . $direction; - } - return ' ORDER BY ' . $keys . $direction; - } - } -/** - * Disconnects database, kills the connection and says the connection is closed, - * and if DEBUG is turned on, the log for this object is shown. - * - */ - function close() { - if (Configure::read() > 1) { - $this->showLog(); - } - $this->disconnect(); - } -/** - * Checks if the specified table contains any record matching specified SQL - * - * @param Model $model Model to search - * @param string $sql SQL WHERE clause (condition only, not the "WHERE" part) - * @return boolean True if the table has a matching record, else false - */ - function hasAny($model, $sql) { - $sql = $this->conditions($sql); - $out = $this->fetchRow("SELECT COUNT(" . $model->primaryKey . ") " . $this->alias . "count FROM " . $this->fullTableName($model) . ' ' . ($sql ? ' ' . $sql : 'WHERE 1 = 1')); - - if (is_array($out)) { - return $out[0]['count']; - } - return false; - } -/** - * Gets the length of a database-native column description, or null if no length - * - * @param string $real Real database-layer column type (i.e. "varchar(255)") - * @return integer An integer representing the length of the column - */ - function length($real) { - $col = str_replace(array(')', 'unsigned'), '', $real); - $limit = null; - - if (strpos($col, '(') !== false) { - list($col, $limit) = explode('(', $col); - } - - if ($limit != null) { - return intval($limit); - } - return null; - } -/** - * Translates between PHP boolean values and Database (faked) boolean values - * - * @param mixed $data Value to be translated - * @return mixed Converted boolean value - */ - function boolean($data) { - if ($data === true || $data === false) { - if ($data === true) { - return 1; - } - return 0; - } - - if (!empty($data)) { - return true; - } - return false; - } -/** - * Destructor. Closes connection to the database. - * - */ - function __destruct() { - if ($this->_transactionStarted) { - $null = null; - $this->rollback($null); - } - parent::__destruct(); - } -/** - * Inserts multiple values into a join table - * - * @param string $table - * @param string $fields - * @param array $values - */ - function insertMulti($table, $fields, $values) { - $values = implode(', ', $values); - $this->query("INSERT INTO {$table} ({$fields}) VALUES {$values}"); - } -/** - * Returns an array of the indexes in given datasource name. - * - * @param string $model Name of model to inspect - * @return array Fields in table. Keys are column and unique - */ - function index($model) { - return false; - } -/** - * Generate a create syntax from CakeSchema - * - * @param object $schema An instance of a subclass of CakeSchema - * @param string $table Optional. If specified only the table name given will be generated. - * Otherwise, all tables defined in the schema are generated. - * @return string - */ - function createSchema($schema, $table = null) { - return false; - } -/** - * Generate a alter syntax from CakeSchema::compare() - * - * @param unknown_type $schema - * @return unknown - */ - function alterSchema($compare, $table = null) { - return false; - } -/** - * Generate a drop syntax from CakeSchema - * - * @param object $schema An instance of a subclass of CakeSchema - * @param string $table Optional. If specified only the table name given will be generated. - * Otherwise, all tables defined in the schema are generated. - * @return string - */ - function dropSchema($schema, $table = null) { - return false; - } -/** - * Generate a column schema string - * - * @param array $column An array structured like the following: array('name'=>'value', 'type'=>'value'[, options]), - * where options can be 'default', 'length', or 'key'. - * @return string - */ - function buildColumn($column) { - return false; - } -/** - * Format indexes for create table - * - * @param array $indexes - * @return string - */ - function buildIndex($indexes) { - return false; - } -/** - * Guesses the data type of an array - * - * @param string $value - * @return void - * @access public - */ - function introspectType($value) { - if (!is_array($value)) { - if ($value === true || $value === false) { - return 'boolean'; - } - if (is_float($value) && floatval($value) === $value) { - return 'float'; - } - if (is_int($value) && intval($value) === $value) { - return 'integer'; - } - if (is_string($value) && strlen($value) > 255) { - return 'text'; - } - return 'string'; - } - - $isAllFloat = $isAllInt = true; - $containsFloat = $containsInt = $containsString = false; - foreach ($value as $key => $valElement) { - $valElement = trim($valElement); - if (!is_float($valElement) && !preg_match('/^[\d]+\.[\d]+$/', $valElement)) { - $isAllFloat = false; - } else { - $containsFloat = true; - continue; - } - if (!is_int($valElement) && !preg_match('/^[\d]+$/', $valElement)) { - $isAllInt = false; - } else { - $containsInt = true; - continue; - } - $containsString = true; - } - - if ($isAllFloat) { - return 'float'; - } - if ($isAllInt) { - return 'integer'; - } - - if ($containsInt && !$containsString) { - return 'integer'; - } - return 'string'; - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_adodb.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_adodb.php deleted file mode 100644 index f9d58d7..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_adodb.php +++ /dev/null @@ -1,437 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.model.dbo - * @since CakePHP(tm) v 0.2.9 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ - -/** - * Include AdoDB files. - */ -vendor ('adodb' . DS . 'adodb.inc'); - -/** - * AdoDB DBO implementation. - * - * Database abstraction implementation for the AdoDB library. - * - * @package cake - * @subpackage cake.cake.libs.model.dbo - */ -class DboAdodb extends DboSource { -/** - * Enter description here... - * - * @var string - */ - var $description = "ADOdb DBO Driver"; - -/** - * ADOConnection object with which we connect. - * - * @var ADOConnection The connection object. - * @access private - */ - var $_adodb = null; - -/** - * Array translating ADOdb column MetaTypes to cake-supported metatypes - * - * @var array - * @access private - */ - var $_adodb_column_types = array( - 'C' => 'string', - 'X' => 'text', - 'D' => 'date', - 'T' => 'timestamp', - 'L' => 'boolean', - 'N' => 'float', - 'I' => 'integer', - 'R' => 'integer', // denotes auto-increment or counter field - 'B' => 'binary' - ); - -/** - * Connects to the database using options in the given configuration array. - * - * @param array $config Configuration array for connecting - */ - function connect() { - $config = $this->config; - $persistent = strrpos($config['connect'], '|p'); - - if ($persistent === false) { - $adodb_driver = $config['connect']; - $connect = 'Connect'; - } else { - $adodb_driver = substr($config['connect'], 0, $persistent); - $connect = 'PConnect'; - } - - $this->_adodb = NewADOConnection($adodb_driver); - - $this->startQuote = $this->_adodb->nameQuote; - $this->endQuote = $this->_adodb->nameQuote; - - $this->connected = $this->_adodb->$connect($config['host'], $config['login'], $config['password'], $config['database']); - return $this->connected; - } -/** - * Disconnects from database. - * - * @return boolean True if the database could be disconnected, else false - */ - function disconnect() { - return $this->_adodb->Close(); - } -/** - * Executes given SQL statement. - * - * @param string $sql SQL statement - * @return resource Result resource identifier - */ - function _execute($sql) { - global $ADODB_FETCH_MODE; - $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; - return $this->_adodb->execute($sql); - } -/** - * Returns a row from given resultset as an array . - * - * @return array The fetched row as an array - */ -/** - * Returns a row from current resultset as an array . - * - * @return array The fetched row as an array - */ - function fetchRow($sql = null) { - - if (!empty($sql) && is_string($sql) && strlen($sql) > 5) { - if (!$this->execute($sql)) { - return null; - } - } - - if (!is_object($this->_result) || $this->_result->EOF) { - return null; - } else { - $resultRow = $this->_result->FetchRow(); - $this->resultSet($resultRow); - return $this->fetchResult(); - } - } -/** - * Begin a transaction - * - * @param unknown_type $model - * @return boolean True on success, false on fail - * (i.e. if the database/model does not support transactions). - */ - function begin(&$model) { - if (parent::begin($model)) { - if ($this->_adodb->BeginTrans()) { - $this->_transactionStarted = true; - return true; - } - } - return false; - } -/** - * Commit a transaction - * - * @param unknown_type $model - * @return boolean True on success, false on fail - * (i.e. if the database/model does not support transactions, - * or a transaction has not started). - */ - function commit(&$model) { - if (parent::commit($model)) { - $this->_transactionStarted = false; - return $this->_adodb->CommitTrans(); - } - return false; - } -/** - * Rollback a transaction - * - * @param unknown_type $model - * @return boolean True on success, false on fail - * (i.e. if the database/model does not support transactions, - * or a transaction has not started). - */ - function rollback(&$model) { - if (parent::rollback($model)) { - return $this->_adodb->RollbackTrans(); - } - return false; - } -/** - * Returns an array of tables in the database. If there are no tables, an error is raised and the application exits. - * - * @return array Array of tablenames in the database - */ - function listSources() { - $tables = $this->_adodb->MetaTables('TABLES'); - - if (!sizeof($tables) > 0) { - trigger_error(ERROR_NO_TABLE_LIST, E_USER_NOTICE); - exit; - } - - return $tables; - } -/** - * Returns an array of the fields in the table used by the given model. - * - * @param AppModel $model Model object - * @return array Fields in table. Keys are name and type - */ - function describe(&$model) { - $cache = parent::describe($model); - if ($cache != null) { - return $cache; - } - - $fields = false; - $cols = $this->_adodb->MetaColumns($this->fullTableName($model, false)); - - foreach ($cols as $column) { - $fields[$column->name] = array( - 'type' => $this->column($column->type) - ); - } - - $this->__cacheDescription($this->fullTableName($model, false), $fields); - return $fields; - } -/** - * Returns a formatted error message from previous database operation. - * - * @return string Error message - */ - function lastError() { - return $this->_adodb->ErrorMsg(); - } -/** - * Returns number of affected rows in previous database operation, or false if no previous operation exists. - * - * @return int Number of affected rows - */ - function lastAffected() { - return $this->_adodb->Affected_Rows(); - } -/** - * Returns number of rows in previous resultset, or false if no previous resultset exists. - * - * @return int Number of rows in resultset - */ - function lastNumRows() { - return $this->_result ? $this->_result->RecordCount() : false; - } -/** - * Returns the ID generated from the previous INSERT operation. - * - * @return int - * - * @Returns the last autonumbering ID inserted. Returns false if function not supported. - */ - function lastInsertId() { - return $this->_adodb->Insert_ID(); - } - -/** - * Returns a LIMIT statement in the correct format for the particular database. - * - * @param int $limit Limit of results returned - * @param int $offset Offset from which to start results - * @return string SQL limit/offset statement - * @todo Please change output string to whatever select your database accepts. adodb doesn't allow us to get the correct limit string out of it. - */ - function limit($limit, $offset = null) { - if (empty($limit)) { - return null; - } - return " LIMIT {$limit}" . ($offset ? "{$offset}" : null); - // please change to whatever select your database accepts - // adodb doesn't allow us to get the correct limit string out of it - } - -/** - * Converts database-layer column types to basic types - * - * @param string $real Real database-layer column type (i.e. "varchar(255)") - * @return string Abstract column type (i.e. "string") - */ - function column($real) { - if (isset($this->_result)) { - $adodb_metatyper = &$this->_result; - } else { - $adodb_metatyper = &$this->_adodb->execute('Select 1'); - } - - $interpreted_type = $adodb_metatyper->MetaType($real); - if (!isset($this->_adodb_column_types[$interpreted_type])) { - return 'text'; - } - - return $this->_adodb_column_types[$interpreted_type]; - } -/** - * Returns a quoted and escaped string of $data for use in an SQL statement. - * - * @param string $data String to be prepared for use in an SQL statement - * @param string $column_type The type of the column into which this data will be inserted - * @param boolean $safe Whether or not numeric data should be handled automagically if no column data is provided - * @return string Quoted and escaped data - */ - function value($data, $column = null, $safe = false) { - $parent = parent::value($data, $column, $safe); - if ($parent != null) { - return $parent; - } - - if ($data === null) { - return 'NULL'; - } - - if ($data === '') { - return "''"; - } - return $this->_adodb->qstr($data); - } -/** - * Generates the fields list of an SQL query. - * - * @param Model $model - * @param string $alias Alias tablename - * @param mixed $fields - * @return array - */ - function fields(&$model, $alias = null, $fields = null, $quote = true) { - if (empty($alias)) { - $alias = $model->name; - } - - if (!is_array($fields)) { - if ($fields != null) { - if (strpos($fields, ',')) { - $fields = explode(',', $fields); - } else { - $fields = array($fields); - } - $fields = array_map('trim', $fields); - } else { - foreach ($model->_tableInfo->value as $field) { - $fields[] = $field['name']; - } - } - } - - $count = count($fields); - - if ($count >= 1 && $fields[0] != '*' && strpos($fields[0], 'COUNT(*)') === false) { - for ($i = 0; $i < $count; $i++) { - if (!preg_match('/^.+\\(.*\\)/', $fields[$i])) { - $prepend = ''; - if (strpos($fields[$i], 'DISTINCT') !== false) { - $prepend = 'DISTINCT '; - $fields[$i] = trim(r('DISTINCT', '', $fields[$i])); - } - - $dot = strrpos($fields[$i], '.'); - if ($dot === false) { - $fields[$i] = $prepend . $this->name($alias) . '.' . $this->name($fields[$i]) . ' AS ' . $this->name($alias . '__' . $fields[$i]); - } else { - $build = explode('.', $fields[$i]); - $fields[$i] = $prepend . $this->name($build[0]) . '.' . $this->name($build[1]) . ' AS ' . $this->name($build[0] . '__' . $build[1]); - } - } - } - } - return $fields; - } -/** - * Enter description here... - * - * @param unknown_type $results - */ - function resultSet(&$results) { - $num_fields = count($results); - $fields = array_keys($results); - $this->results =& $results; - $this->map = array(); - $index = 0; - $j = 0; - - while ($j < $num_fields) { - $columnName = $fields[$j]; - - if (strpos($columnName, '__')) { - $parts = explode('__', $columnName); - $this->map[$index++] = array($parts[0], $parts[1]); - } else { - $this->map[$index++] = array(0, $columnName); - } - $j++; - } - } -/** - * Fetches the next row from the current result set - * - * @return unknown - */ - function fetchResult() { - if (!empty($this->results) && $row = $this->results) { - $resultRow = array(); - $fields = array_keys($row); - $count = count($fields); - $i = 0; - for ($i = 0; $i < $count; $i++) { //$row as $index => $field) { - list($table, $column) = $this->map[$i]; - $resultRow[$table][$column] = $row[$fields[$i]]; - } - return $resultRow; - } else { - return false; - } - } -/** - * Inserts multiple values into a join table - * - * @param string $table - * @param string $fields - * @param array $values - */ - function insertMulti($table, $fields, $values) { - $count = count($values); - for ($x = 0; $x < $count; $x++) { - $this->query("INSERT INTO {$table} ({$fields}) VALUES {$values[$x]}"); - } - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_mssql.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_mssql.php deleted file mode 100644 index accff58..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_mssql.php +++ /dev/null @@ -1,604 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.model.dbo - * @since CakePHP(tm) v 0.10.5.1790 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ - -/** - * Short description for class. - * - * Long description for class - * - * @package cake - * @subpackage cake.cake.libs.model.dbo - */ -class DboMssql extends DboSource { -/** - * Driver description - * - * @var string - */ - var $description = "MS SQL DBO Driver"; -/** - * Starting quote character for quoted identifiers - * - * @var string - */ - var $startQuote = "["; -/** - * Ending quote character for quoted identifiers - * - * @var string - */ - var $endQuote = "]"; - /** - * Creates a map between field aliases and numeric indexes. Workaround for the - * SQL Server driver's 30-character column name limitation. - * - * @var array - */ - var $__fieldMappings = array(); -/** - * Base configuration settings for MS SQL driver - * - * @var array - */ - var $_baseConfig = array( - 'persistent' => true, - 'host' => 'localhost', - 'login' => 'root', - 'password' => '', - 'database' => 'cake', - 'port' => '1433', - 'connect' => 'mssql_pconnect' - ); -/** - * MS SQL column definition - * - * @var array - */ - var $columns = array( - 'primary_key' => array('name' => 'int IDENTITY (1, 1) NOT NULL'), - 'string' => array('name' => 'varchar', 'limit' => '255'), - 'text' => array('name' => 'text'), - 'integer' => array('name' => 'int', 'formatter' => 'intval'), - 'float' => array('name' => 'float', 'formatter' => 'floatval'), - 'datetime' => array('name' => 'datetime', 'format' => 'Y-m-d H:i:s', 'formatter' => 'date'), - 'timestamp' => array('name' => 'timestamp', 'format' => 'Y-m-d H:i:s', 'formatter' => 'date'), - 'time' => array('name' => 'datetime', 'format' => 'H:i:s', 'formatter' => 'date'), - 'date' => array('name' => 'datetime', 'format' => 'Y-m-d', 'formatter' => 'date'), - 'binary' => array('name' => 'image'), - 'boolean' => array('name' => 'bit') - ); -/** - * MS SQL DBO driver constructor; sets SQL Server error reporting defaults - * - * @param array $config Configuration data from app/config/databases.php - * @return boolean True if connected successfully, false on error - */ - function __construct($config, $autoConnect = true) { - if ($autoConnect) { - if (!function_exists('mssql_min_message_severity')) { - trigger_error("PHP SQL Server interface is not installed, cannot continue. For troubleshooting information, see http://php.net/mssql/", E_USER_WARNING); - } - mssql_min_message_severity(15); - mssql_min_error_severity(2); - } - return parent::__construct($config, $autoConnect); - } -/** - * Connects to the database using options in the given configuration array. - * - * @return boolean True if the database could be connected, else false - */ - function connect() { - $config = $this->config; - - $os = env('OS'); - if (!empty($os) && strpos($os, 'Windows') !== false) { - $sep = ','; - } else { - $sep = ':'; - } - $connect = 'mssql_connect'; - if ($config['persistent']) { - $connect = 'mssql_pconnect'; - } - $this->connected = false; - - if (is_numeric($config['port'])) { - $port = $sep . $config['port']; // Port number - } elseif ($config['port'] === null) { - $port = ''; // No port - SQL Server 2005 - } else { - $port = '\\' . $config['port']; // Named pipe - } - $this->connection = $connect($config['host'] . $port, $config['login'], $config['password']); - - if (mssql_select_db($config['database'], $this->connection)) { - $this->connected = true; - } - } -/** - * Disconnects from database. - * - * @return boolean True if the database could be disconnected, else false - */ - function disconnect() { - @mssql_free_result($this->results); - $this->connected = !@mssql_close($this->connection); - return !$this->connected; - } -/** - * Executes given SQL statement. - * - * @param string $sql SQL statement - * @return resource Result resource identifier - * @access protected - */ - function _execute($sql) { - return mssql_query($sql, $this->connection); - } -/** - * Returns an array of sources (tables) in the database. - * - * @return array Array of tablenames in the database - */ - function listSources() { - $cache = parent::listSources(); - - if ($cache != null) { - return $cache; - } - - $result = $this->fetchAll('SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES'); - - if (!$result || empty($result)) { - return array(); - } else { - $tables = array(); - - foreach ($result as $table) { - $tables[] = $table[0]['TABLE_NAME']; - } - - parent::listSources($tables); - return $tables; - } - } -/** - * Returns an array of the fields in given table name. - * - * @param Model $model Model object to describe - * @return array Fields in table. Keys are name and type - */ - function describe(&$model) { - $cache = parent::describe($model); - - if ($cache != null) { - return $cache; - } - - $fields = false; - $cols = $this->fetchAll("SELECT COLUMN_NAME as Field, DATA_TYPE as Type, COL_LENGTH('" . $this->fullTableName($model, false) . "', COLUMN_NAME) as Length, IS_NULLABLE As [Null], COLUMN_DEFAULT as [Default], COLUMNPROPERTY(OBJECT_ID('" . $this->fullTableName($model, false) . "'), COLUMN_NAME, 'IsIdentity') as [Key], NUMERIC_SCALE as Size FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" . $this->fullTableName($model, false) . "'", false); - - foreach ($cols as $column) { - $fields[$column[0]['Field']] = array( - 'type' => $this->column($column[0]['Type']), - 'null' => (strtoupper($column[0]['Null']) == 'YES'), - 'default' => $column[0]['Default'], - 'length' => $this->length($column[0]['Type']), - ); - } - $this->__cacheDescription($this->fullTableName($model, false), $fields); - return $fields; - } -/** - * Returns a quoted and escaped string of $data for use in an SQL statement. - * - * @param string $data String to be prepared for use in an SQL statement - * @param string $column The column into which this data will be inserted - * @param boolean $safe Whether or not numeric data should be handled automagically if no column data is provided - * @return string Quoted and escaped data - */ - function value($data, $column = null, $safe = false) { - $parent = parent::value($data, $column, $safe); - - if ($parent != null) { - return $parent; - } - if ($data === null) { - return 'NULL'; - } - if ($data === '') { - return "''"; - } - - switch($column) { - case 'boolean': - $data = $this->boolean((bool)$data); - break; - case 'datetime': - if ($data && (($timestamp = strtotime($data)) !== false)) { - $data = date('Y-m-d\TH:i:s', $timestamp); - } - break; - default: - if (get_magic_quotes_gpc()) { - $data = stripslashes(str_replace("'", "''", $data)); - } else { - $data = str_replace("'", "''", $data); - } - break; - } - - if (in_array($column, array('integer', 'float')) && is_numeric($data)) { - return $data; - } - return "'" . $data . "'"; - } -/** - * Generates the fields list of an SQL query. - * - * @param Model $model - * @param string $alias Alias tablename - * @param mixed $fields - * @return array - */ - function fields(&$model, $alias = null, $fields = array(), $quote = true) { - if (empty($alias)) { - $alias = $model->name; - } - $fields = parent::fields($model, $alias, $fields, false); - $count = count($fields); - - if ($count >= 1 && $fields[0] != '*' && strpos($fields[0], 'COUNT(*)') === false) { - for ($i = 0; $i < $count; $i++) { - $dot = strrpos($fields[$i], '.'); - $fieldAlias = count($this->__fieldMappings); - - if ($dot === false && !preg_match('/\s+AS\s+/i', $fields[$i])) { - $this->__fieldMappings[$alias . '__' . $fieldAlias] = $alias . '.' . $fields[$i]; - $fields[$i] = $this->name($alias) . '.' . $this->name($fields[$i]) . ' AS ' . $this->name($alias . '__' . $fieldAlias); - } elseif (!preg_match('/\s+AS\s+/i', $fields[$i])) { - $build = explode('.', $fields[$i]); - $this->__fieldMappings[$build[0] . '__' . $fieldAlias] = $build[0] . '.' . $build[1]; - $fields[$i] = $this->name($build[0]) . '.' . $this->name($build[1]) . ' AS ' . $this->name($build[0] . '__' . $fieldAlias); - } - } - } - return $fields; - } -/** - * Begin a transaction - * - * @param unknown_type $model - * @return boolean True on success, false on fail - * (i.e. if the database/model does not support transactions). - */ - function begin(&$model) { - if (parent::begin($model)) { - if ($this->execute('BEGIN TRANSACTION')) { - $this->_transactionStarted = true; - return true; - } - } - return false; - } -/** - * Commit a transaction - * - * @param unknown_type $model - * @return boolean True on success, false on fail - * (i.e. if the database/model does not support transactions, - * or a transaction has not started). - */ - function commit(&$model) { - if (parent::commit($model)) { - $this->_transactionStarted = false; - return $this->execute('COMMIT'); - } - return false; - } -/** - * Rollback a transaction - * - * @param unknown_type $model - * @return boolean True on success, false on fail - * (i.e. if the database/model does not support transactions, - * or a transaction has not started). - */ - function rollback(&$model) { - if (parent::rollback($model)) { - return $this->execute('ROLLBACK'); - } - return false; - } -/** - * Removes Identity (primary key) column from update data before returning to parent - * - * @param Model $model - * @param array $fields - * @param array $values - * @return array - */ - function update(&$model, $fields = array(), $values = array()) { - foreach ($fields as $i => $field) { - if ($field == $model->primaryKey) { - unset ($fields[$i]); - unset ($values[$i]); - break; - } - } - return parent::update($model, $fields, $values); - } -/** - * Returns a formatted error message from previous database operation. - * - * @return string Error message with error number - */ - function lastError() { - $error = mssql_get_last_message($this->connection); - - if ($error) { - if (strpos(strtolower($error), 'changed database') === false) { - return $error; - } - } - return null; - } -/** - * Returns number of affected rows in previous database operation. If no previous operation exists, - * this returns false. - * - * @return int Number of affected rows - */ - function lastAffected() { - if ($this->_result) { - return mssql_rows_affected($this->connection); - } - return null; - } -/** - * Returns number of rows in previous resultset. If no previous resultset exists, - * this returns false. - * - * @return int Number of rows in resultset - */ - function lastNumRows() { - if ($this->_result) { - return @mssql_num_rows($this->_result); - } - return null; - } -/** - * Returns the ID generated from the previous INSERT operation. - * - * @param unknown_type $source - * @return in - */ - function lastInsertId($source = null) { - $id = $this->fetchRow('SELECT SCOPE_IDENTITY() AS insertID', false); - return $id[0]['insertID']; - } -/** - * Returns a limit statement in the correct format for the particular database. - * - * @param int $limit Limit of results returned - * @param int $offset Offset from which to start results - * @return string SQL limit/offset statement - */ - function limit($limit, $offset = null) { - if ($limit) { - $rt = ''; - if (!strpos(strtolower($limit), 'top') || strpos(strtolower($limit), 'top') === 0) { - $rt = ' TOP'; - } - $rt .= ' ' . $limit; - if (is_int($offset) && $offset > 0) { - $rt .= ' OFFSET ' . $offset; - } - return $rt; - } - return null; - } -/** - * Converts database-layer column types to basic types - * - * @param string $real Real database-layer column type (i.e. "varchar(255)") - * @return string Abstract column type (i.e. "string") - */ - function column($real) { - if (is_array($real)) { - $col = $real['name']; - - if (isset($real['limit'])) { - $col .= '(' . $real['limit'] . ')'; - } - return $col; - } - $col = str_replace(')', '', $real); - $limit = null; - @list($col, $limit) = explode('(', $col); - - if (in_array($col, array('date', 'time', 'datetime', 'timestamp'))) { - return $col; - } - - if ($col == 'bit') { - return 'boolean'; - } - - if (strpos($col, 'int') !== false || $col == 'numeric') { - return 'integer'; - } - - if (strpos($col, 'char') !== false) { - return 'string'; - } - - if (strpos($col, 'text') !== false) { - return 'text'; - } - - if (strpos($col, 'binary') !== false || $col == 'image') { - return 'binary'; - } - - if (in_array($col, array('float', 'real', 'decimal'))) { - return 'float'; - } - return 'text'; - } -/** - * Enter description here... - * - * @param unknown_type $results - */ - function resultSet(&$results) { - $this->results =& $results; - $this->map = array(); - $num_fields = mssql_num_fields($results); - $index = 0; - $j = 0; - - while ($j < $num_fields) { - $column = mssql_field_name($results, $j); - - if (strpos($column, '__')) { - if (isset($this->__fieldMappings[$column]) && strpos($this->__fieldMappings[$column], '.')) { - $map = explode('.', $this->__fieldMappings[$column]); - } elseif (isset($this->__fieldMappings[$column])) { - $map = array(0, $this->__fieldMappings[$column]); - } else { - $map = array(0, $column); - } - $this->map[$index++] = $map; - } else { - $this->map[$index++] = array(0, $column); - } - $j++; - } - } -/** - * Builds final SQL statement - * - * @param array $data Query data - * @return string - */ - function renderStatement($data) { - extract($data); - if (preg_match('/offset\s+([0-9]+)/i', $limit, $offset)) { - $limit = preg_replace('/\s*offset.*$/i', '', $limit); - preg_match('/top\s+([0-9]+)/i', $limit, $limitVal); - $offset = intval($offset[1]) + intval($limitVal[1]); - $rOrder = $this->__switchSort($order); - list($order2, $rOrder) = array($this->__mapFields($order), $this->__mapFields($rOrder)); - return "SELECT * FROM (SELECT {$limit} * FROM (SELECT TOP {$offset} {$fields} FROM {$table} {$alias} {$joins} {$conditions} {$order}) AS Set1 {$rOrder}) AS Set2 {$order2}"; - } else { - return "SELECT {$limit} {$fields} FROM {$table} {$alias} {$joins} {$conditions} {$order}"; - } - } -/** - * Reverses the sort direction of ORDER statements to get paging offsets to work correctly - * - * @param string $order - * @return string - * @access private - */ - function __switchSort($order) { - $order = preg_replace('/\s+ASC/i', '__tmp_asc__', $order); - $order = preg_replace('/\s+DESC/i', ' ASC', $order); - return preg_replace('/__tmp_asc__/', ' DESC', $order); - } -/** - * Translates field names used for filtering and sorting to shortened names using the field map - * - * @param string $sql A snippet of SQL representing an ORDER or WHERE statement - * @return string The value of $sql with field names replaced - * @access private - */ - function __mapFields($sql) { - if (empty($sql) || empty($this->__fieldMappings)) { - return $sql; - } - foreach ($this->__fieldMappings as $key => $val) { - $sql = preg_replace('/' . preg_quote($val) . '/', $this->name($key), $sql); - $sql = preg_replace('/' . preg_quote($this->name($val)) . '/', $this->name($key), $sql); - } - return $sql; - } -/** - * Returns an array of all result rows for a given SQL query. - * Returns false if no rows matched. - * - * @param string $sql SQL statement - * @param boolean $cache Enables returning/storing cached query results - * @return array Array of resultset rows, or false if no rows matched - */ - function read(&$model, $queryData = array(), $recursive = null) { - $results = parent::read($model, $queryData, $recursive); - $this->__fieldMappings = array(); - $this->__fieldMapBase = null; - return $results; - } -/** - * Fetches the next row from the current result set - * - * @return unknown - */ - function fetchResult() { - if ($row = mssql_fetch_row($this->results)) { - $resultRow = array(); - $i = 0; - - foreach ($row as $index => $field) { - list($table, $column) = $this->map[$index]; - $resultRow[$table][$column] = $row[$index]; - $i++; - } - return $resultRow; - } else { - return false; - } - } -/** - * Inserts multiple values into a join table - * - * @param string $table - * @param string $fields - * @param array $values - */ - function insertMulti($table, $fields, $values) { - $count = count($values); - for ($x = 0; $x < $count; $x++) { - $this->query("INSERT INTO {$table} ({$fields}) VALUES {$values[$x]}"); - } - } - -} -?> diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_mysql.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_mysql.php deleted file mode 100644 index 5774563..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_mysql.php +++ /dev/null @@ -1,681 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.model.dbo - * @since CakePHP(tm) v 0.10.5.1790 - * @version $Revision: 7691 $ - * @modifiedby $LastChangedBy: nate $ - * @lastmodified $Date: 2008-10-02 00:59:12 -0400 (Thu, 02 Oct 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ - -/** - * Short description for class. - * - * Long description for class - * - * @package cake - * @subpackage cake.cake.libs.model.dbo - */ -class DboMysql extends DboSource { -/** - * Enter description here... - * - * @var unknown_type - */ - var $description = "MySQL DBO Driver"; -/** - * Enter description here... - * - * @var unknown_type - */ - var $startQuote = "`"; -/** - * Enter description here... - * - * @var unknown_type - */ - var $endQuote = "`"; -/** - * Base configuration settings for MySQL driver - * - * @var array - */ - var $_baseConfig = array( - 'persistent' => true, - 'host' => 'localhost', - 'login' => 'root', - 'password' => '', - 'database' => 'cake', - 'port' => '3306', - 'connect' => 'mysql_pconnect' - ); -/** - * MySQL column definition - * - * @var array - */ - var $columns = array( - 'primary_key' => array('name' => 'int(11) DEFAULT NULL auto_increment'), - 'string' => array('name' => 'varchar', 'limit' => '255'), - 'text' => array('name' => 'text'), - 'integer' => array('name' => 'int', 'limit' => '11', 'formatter' => 'intval'), - 'float' => array('name' => 'float', 'formatter' => 'floatval'), - 'datetime' => array('name' => 'datetime', 'format' => 'Y-m-d H:i:s', 'formatter' => 'date'), - 'timestamp' => array('name' => 'timestamp', 'format' => 'Y-m-d H:i:s', 'formatter' => 'date'), - 'time' => array('name' => 'time', 'format' => 'H:i:s', 'formatter' => 'date'), - 'date' => array('name' => 'date', 'format' => 'Y-m-d', 'formatter' => 'date'), - 'binary' => array('name' => 'blob'), - 'boolean' => array('name' => 'tinyint', 'limit' => '1') - ); -/** - * Connects to the database using options in the given configuration array. - * - * @return boolean True if the database could be connected, else false - */ - function connect() { - $config = $this->config; - $connect = $config['connect']; - $this->connected = false; - - if (!$config['persistent'] || $config['connect'] === 'mysql_connect') { - $this->connection = mysql_connect($config['host'] . ':' . $config['port'], $config['login'], $config['password'], true); - } else { - $this->connection = $connect($config['host'] . ':' . $config['port'], $config['login'], $config['password']); - } - - if (mysql_select_db($config['database'], $this->connection)) { - $this->connected = true; - } - - if (isset($config['encoding']) && !empty($config['encoding'])) { - $this->setEncoding($config['encoding']); - } - - return $this->connected; - } -/** - * Disconnects from database. - * - * @return boolean True if the database could be disconnected, else false - */ - function disconnect() { - @mysql_free_result($this->results); - $this->connected = !@mysql_close($this->connection); - return !$this->connected; - } -/** - * Executes given SQL statement. - * - * @param string $sql SQL statement - * @return resource Result resource identifier - * @access protected - */ - function _execute($sql) { - return mysql_query($sql, $this->connection); - } -/** - * Returns an array of sources (tables) in the database. - * - * @return array Array of tablenames in the database - */ - function listSources() { - $cache = parent::listSources(); - if ($cache != null) { - return $cache; - } - $result = $this->_execute('SHOW TABLES FROM ' . $this->name($this->config['database']) . ';'); - - if (!$result) { - return array(); - } else { - $tables = array(); - - while ($line = mysql_fetch_array($result)) { - $tables[] = $line[0]; - } - parent::listSources($tables); - return $tables; - } - } -/** - * 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; - $cols = $this->query('DESCRIBE ' . $this->fullTableName($model)); - - foreach ($cols as $column) { - $colKey = array_keys($column); - if (isset($column[$colKey[0]]) && !isset($column[0])) { - $column[0] = $column[$colKey[0]]; - } - if (isset($column[0])) { - $fields[$column[0]['Field']] = array( - 'type' => $this->column($column[0]['Type']), - 'null' => ($column[0]['Null'] == 'YES' ? true : false), - 'default' => $column[0]['Default'], - 'length' => $this->length($column[0]['Type']), - ); - if(!empty($column[0]['Key']) && isset($this->index[$column[0]['Key']])) { - $fields[$column[0]['Field']]['key'] = $this->index[$column[0]['Key']]; - } - if(!empty($column[0]['Extra'])) { - $fields[$column[0]['Field']]['extra'] = $column[0]['Extra']; - } - } - } - $this->__cacheDescription($this->fullTableName($model, false), $fields); - return $fields; - } -/** - * Returns a quoted and escaped string of $data for use in an SQL statement. - * - * @param string $data String to be prepared for use in an SQL statement - * @param string $column The column into which this data will be inserted - * @param boolean $safe Whether or not numeric data should be handled automagically if no column data is provided - * @return string Quoted and escaped data - */ - function value($data, $column = null, $safe = false) { - $parent = parent::value($data, $column, $safe); - - if ($parent != null) { - return $parent; - } elseif ($data === null || (is_array($data) && empty($data))) { - return 'NULL'; - } elseif ($data === '' && $column !== 'integer' && $column !== 'float' && $column !== 'boolean') { - return "''"; - } - if (empty($column)) { - $column = $this->introspectType($data); - } - - switch ($column) { - case 'boolean': - return $this->boolean((bool)$data); - break; - case 'integer': - case 'float': - if ($data === '') { - return 'NULL'; - } - if ((is_int($data) || is_float($data) || $data === '0') || ( - is_numeric($data) && strpos($data, ',') === false && - $data[0] != '0' && strpos($data, 'e') === false)) { - return $data; - } - default: - $data = "'" . mysql_real_escape_string($data, $this->connection) . "'"; - break; - } - return $data; - } -/** - * Begin a transaction - * - * @param unknown_type $model - * @return boolean True on success, false on fail - * (i.e. if the database/model does not support transactions). - */ - function begin(&$model) { - if (parent::begin($model)) { - if ($this->execute('START TRANSACTION')) { - $this->_transactionStarted = true; - return true; - } - } - return false; - } -/** - * Commit a transaction - * - * @param unknown_type $model - * @return boolean True on success, false on fail - * (i.e. if the database/model does not support transactions, - * or a transaction has not started). - */ - function commit(&$model) { - if (parent::commit($model)) { - $this->_transactionStarted = false; - return $this->execute('COMMIT'); - } - return false; - } -/** - * Rollback a transaction - * - * @param unknown_type $model - * @return boolean True on success, false on fail - * (i.e. if the database/model does not support transactions, - * or a transaction has not started). - */ - function rollback(&$model) { - if (parent::rollback($model)) { - return $this->execute('ROLLBACK'); - } - return false; - } -/** - * Returns a formatted error message from previous database operation. - * - * @return string Error message with error number - */ - function lastError() { - if (mysql_errno($this->connection)) { - return mysql_errno($this->connection).': '.mysql_error($this->connection); - } - return null; - } -/** - * Returns number of affected rows in previous database operation. If no previous operation exists, - * this returns false. - * - * @return int Number of affected rows - */ - function lastAffected() { - if ($this->_result) { - return mysql_affected_rows($this->connection); - } - return null; - } -/** - * Returns number of rows in previous resultset. If no previous resultset exists, - * this returns false. - * - * @return int Number of rows in resultset - */ - function lastNumRows() { - if ($this->_result and is_resource($this->_result)) { - return @mysql_num_rows($this->_result); - } - return null; - } -/** - * Returns the ID generated from the previous INSERT operation. - * - * @param unknown_type $source - * @return in - */ - function lastInsertId($source = null) { - $id = $this->fetchRow('SELECT LAST_INSERT_ID() AS insertID', false); - if ($id !== false && !empty($id) && !empty($id[0]) && isset($id[0]['insertID'])) { - return $id[0]['insertID']; - } - - return null; - } -/** - * Converts database-layer column types to basic types - * - * @param string $real Real database-layer column type (i.e. "varchar(255)") - * @return string Abstract column type (i.e. "string") - */ - function column($real) { - if (is_array($real)) { - $col = $real['name']; - if (isset($real['limit'])) { - $col .= '('.$real['limit'].')'; - } - return $col; - } - - $col = r(')', '', $real); - $limit = $this->length($real); - @list($col,$vals) = explode('(', $col); - - if (in_array($col, array('date', 'time', 'datetime', 'timestamp'))) { - return $col; - } - if ($col == 'tinyint' && $limit == 1) { - return 'boolean'; - } - if (strpos($col, 'int') !== false) { - return 'integer'; - } - if (strpos($col, 'char') !== false || $col == 'tinytext') { - return 'string'; - } - if (strpos($col, 'text') !== false) { - return 'text'; - } - if (strpos($col, 'blob') !== false) { - return 'binary'; - } - if (in_array($col, array('float', 'double', 'decimal'))) { - return 'float'; - } - if (strpos($col, 'enum') !== false) { - return "enum($vals)"; - } - if ($col == 'boolean') { - return $col; - } - return 'text'; - } -/** - * Gets the length of a database-native column description, or null if no length - * - * @param string $real Real database-layer column type (i.e. "varchar(255)") - * @return int An integer representing the length of the column - */ - function length($real) { - $col = r(array(')', 'unsigned'), '', $real); - $limit = null; - - if (strpos($col, '(') !== false) { - list($col, $limit) = explode('(', $col); - } - - if ($limit != null) { - return intval($limit); - } - return null; - } -/** - * Enter description here... - * - * @param unknown_type $results - */ - function resultSet(&$results) { - $this->results =& $results; - $this->map = array(); - $num_fields = mysql_num_fields($results); - $index = 0; - $j = 0; - - while ($j < $num_fields) { - - $column = mysql_fetch_field($results,$j); - if (!empty($column->table)) { - $this->map[$index++] = array($column->table, $column->name); - } else { - $this->map[$index++] = array(0, $column->name); - } - $j++; - } - } -/** - * Fetches the next row from the current result set - * - * @return unknown - */ - function fetchResult() { - if ($row = mysql_fetch_row($this->results)) { - $resultRow = array(); - $i = 0; - foreach ($row as $index => $field) { - list($table, $column) = $this->map[$index]; - $resultRow[$table][$column] = $row[$index]; - $i++; - } - return $resultRow; - } else { - return false; - } - } -/** - * Sets the database encoding - * - * @param string $enc Database encoding - * @return void - */ - function setEncoding($enc) { - return $this->_execute('SET NAMES ' . $enc) != false; - } -/** - * Gets the database encoding - * - * @return string The database encoding - */ - function getEncoding() { - return mysql_client_encoding($this->connection); - } -/** - * Returns an array of the indexes in given table name. - * - * @param string $model Name of model to inspect - * @return array Fields in table. Keys are column and unique - */ - function index($model) { - $index = array(); - $table = $this->fullTableName($model, false); - if($table) { - $indexes = $this->query('SHOW INDEX FROM ' . $table); - $keys = Set::extract($indexes, '{n}.STATISTICS'); - foreach ($keys as $i => $key) { - if(!isset($index[$key['Key_name']])) { - $index[$key['Key_name']]['column'] = $key['Column_name']; - $index[$key['Key_name']]['unique'] = ife($key['Non_unique'] == 0, 1, 0); - } else { - if(!is_array($index[$key['Key_name']]['column'])) { - $col[] = $index[$key['Key_name']]['column']; - } - $col[] = $key['Column_name']; - $index[$key['Key_name']]['column'] = $col; - } - } - } - return $index; - } -/** - * Generate a MySQL schema for the given Schema object - * - * @param object $schema An instance of a subclass of CakeSchema - * @param string $table Optional. If specified only the table name given will be generated. - * Otherwise, all tables defined in the schema are generated. - * @return string - */ - function createSchema($schema, $table = null) { - if (!is_a($schema, 'CakeSchema')) { - trigger_error(__('Invalid schema object', true), E_USER_WARNING); - return null; - } - $out = ''; - foreach ($schema->tables as $curTable => $columns) { - if (!$table || $table == $curTable) { - $out .= 'CREATE TABLE ' . $this->fullTableName($curTable) . " (\n"; - $cols = $colList = $index = array(); - $primary = null; - foreach ($columns as $name => $col) { - if (is_string($col)) { - $col = array('type' => $col); - } - if (isset($col['key']) && $col['key'] == 'primary') { - $primary = $name; - } - if($name !== 'indexes') { - $col['name'] = $name; - if(!isset($col['type'])) { - $col['type'] = 'string'; - } - $cols[] = $this->buildColumn($col); - } else { - $index[] = $this->buildIndex($col); - } - - } - if(empty($index) && !empty($primary)) { - $col = array('PRIMARY' => array('column'=> $primary, 'unique' => 1)); - $index[] = $this->buildIndex($col); - } - $out .= "\t" . join(",\n\t", $cols) . ",\n\t". join(",\n\t", $index) . "\n);\n\n"; - } - } - return $out; - } -/** - * Generate a MySQL Alter Table syntax for the given Schema comparison - * - * @param unknown_type $schema - * @return unknown - */ - function alterSchema($compare, $table = null) { - if(!is_array($compare)) { - return false; - } - $out = ''; - $colList = array(); - foreach($compare as $curTable => $types) { - if (!$table || $table == $curTable) { - $out .= 'ALTER TABLE ' . $this->fullTableName($curTable) . " \n"; - foreach($types as $type => $column) { - switch($type) { - case 'add': - foreach($column as $field => $col) { - $col['name'] = $field; - $alter = 'ADD '.$this->buildColumn($col); - if(isset($col['after'])) { - $alter .= ' AFTER '. $this->name($col['after']); - } - $colList[] = $alter; - } - break; - case 'drop': - foreach($column as $field => $col) { - $col['name'] = $field; - $colList[] = 'DROP '.$this->name($field); - } - break; - case 'change': - foreach($column as $field => $col) { - if(!isset($col['name'])) { - $col['name'] = $field; - } - $colList[] = 'CHANGE '. $this->name($field).' '.$this->buildColumn($col); - } - break; - } - } - $out .= "\t" . join(",\n\t", $colList) . ";\n\n"; - } - } - return $out; - } -/** - * Generate a MySQL Drop table for the given Schema object - * - * @param object $schema An instance of a subclass of CakeSchema - * @param string $table Optional. If specified only the table name given will be generated. - * Otherwise, all tables defined in the schema are generated. - * @return string - */ - function dropSchema($schema, $table = null) { - if (!is_a($schema, 'CakeSchema')) { - trigger_error(__('Invalid schema object', true), E_USER_WARNING); - return null; - } - $out = ''; - foreach ($schema->tables as $curTable => $columns) { - if (!$table || $table == $curTable) { - $out .= 'DROP TABLE IF EXISTS ' . $this->fullTableName($curTable) . ";\n"; - } - } - return $out; - } -/** - * Generate a MySQL-native column schema string - * - * @param array $column An array structured like the following: array('name'=>'value', 'type'=>'value'[, options]), - * where options can be 'default', 'length', or 'key'. - * @return string - */ - function buildColumn($column) { - $name = $type = null; - $column = am(array('null' => true), $column); - extract($column); - - if (empty($name) || empty($type)) { - trigger_error('Column name or type not defined in schema', E_USER_WARNING); - return null; - } - - if (!isset($this->columns[$type])) { - trigger_error("Column type {$type} does not exist", E_USER_WARNING); - return null; - } - - $real = $this->columns[$type]; - $out = $this->name($name) . ' ' . $real['name']; - - if (isset($real['limit']) || isset($real['length']) || isset($column['limit']) || isset($column['length'])) { - if (isset($column['length'])) { - $length = $column['length']; - } elseif (isset($column['limit'])) { - $length = $column['limit']; - } elseif (isset($real['length'])) { - $length = $real['length']; - } else { - $length = $real['limit']; - } - $out .= '(' . $length . ')'; - } - if (isset($column['key']) && $column['key'] == 'primary' && (isset($column['extra']) && $column['extra'] == 'auto_increment')) { - $out .= ' NOT NULL AUTO_INCREMENT'; - } elseif (isset($column['key']) && $column['key'] == 'primary') { - $out .= ' NOT NULL'; - } elseif (isset($column['default']) && isset($column['null']) && $column['null'] == false) { - $out .= ' DEFAULT ' . $this->value($column['default'], $type) . ' NOT NULL'; - } elseif (isset($column['default'])) { - $out .= ' DEFAULT ' . $this->value($column['default'], $type); - } elseif (isset($column['null']) && $column['null'] == true) { - $out .= ' DEFAULT NULL'; - } elseif (isset($column['null']) && $column['null'] == false) { - $out .= ' NOT NULL'; - } - - return $out; - } -/** - * Format indexes for create table - * - * @param array $indexes - * @return string - */ - function buildIndex($indexes) { - $join = array(); - foreach ($indexes as $name => $value) { - $out = ''; - if ($name == 'PRIMARY') { - $out .= 'PRIMARY '; - $name = null; - } else { - if (!empty($value['unique'])) { - $out .= 'UNIQUE '; - } - } - if (is_array($value['column'])) { - $out .= 'KEY '. $name .' (' . join(', ', array_map(array(&$this, 'name'), $value['column'])) . ')'; - } else { - $out .= 'KEY '. $name .' (' . $this->name($value['column']) . ')'; - } - $join[] = $out; - } - return join(",\n\t", $join); - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_mysqli.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_mysqli.php deleted file mode 100644 index e1156b8..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_mysqli.php +++ /dev/null @@ -1,441 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.model.dbo - * @since CakePHP(tm) v 1.1.4.2974 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ - -/** - * Short description for class. - * - * Long description for class - * - * @package cake - * @subpackage cake.cake.libs.model.dbo - */ -class DboMysqli extends DboSource { -/** - * Enter description here... - * - * @var unknown_type - */ - var $description = "Mysqli DBO Driver"; -/** - * Enter description here... - * - * @var unknown_type - */ - var $startQuote = "`"; -/** - * Enter description here... - * - * @var unknown_type - */ - var $endQuote = "`"; -/** - * Base configuration settings for Mysqli driver - * - * @var array - */ - var $_baseConfig = array('persistent' => true, - 'host' => 'localhost', - 'login' => 'root', - 'password' => '', - 'database' => 'cake', - 'port' => '3306', - 'connect' => 'mysqli_connect'); -/** - * Mysqli column definition - * - * @var array - */ - var $columns = array('primary_key' => array('name' => 'int(11) DEFAULT NULL auto_increment'), - 'string' => array('name' => 'varchar', 'limit' => '255'), - 'text' => array('name' => 'text'), - 'integer' => array('name' => 'int', 'limit' => '11', 'formatter' => 'intval'), - 'float' => array('name' => 'float', 'formatter' => 'floatval'), - 'datetime' => array('name' => 'datetime', 'format' => 'Y-m-d H:i:s', 'formatter' => 'date'), - 'timestamp' => array('name' => 'timestamp', 'format' => 'Y-m-d H:i:s', 'formatter' => 'date'), - 'time' => array('name' => 'time', 'format' => 'H:i:s', 'formatter' => 'date'), - 'date' => array('name' => 'date', 'format' => 'Y-m-d', 'formatter' => 'date'), - 'binary' => array('name' => 'blob'), - 'boolean' => array('name' => 'tinyint', 'limit' => '1')); -/** - * Connects to the database using options in the given configuration array. - * - * @return boolean True if the database could be connected, else false - */ - function connect() { - $config = $this->config; - $this->connected = false; - $this->connection = mysqli_connect($config['host'], $config['login'], $config['password'], $config['database'], $config['port']); - - if ($this->connection !== false) { - $this->connected = true; - } - - if (!empty($config['encoding'])) { - $this->setEncoding($config['encoding']); - } - return $this->connected; - } -/** - * Disconnects from database. - * - * @return boolean True if the database could be disconnected, else false - */ - function disconnect() { - @mysqli_free_result($this->results); - $this->connected = !@mysqli_close($this->connection); - return !$this->connected; - } -/** - * Executes given SQL statement. - * - * @param string $sql SQL statement - * @return resource Result resource identifier - * @access protected - */ - function _execute($sql) { - return mysqli_query($this->connection, $sql); - } -/** - * Returns an array of sources (tables) in the database. - * - * @return array Array of tablenames in the database - */ - function listSources() { - $cache = parent::listSources(); - if ($cache != null) { - return $cache; - } - $result = $this->_execute('SHOW TABLES FROM ' . $this->name($this->config['database']) . ';'); - - if (!$result) { - return array(); - } else { - $tables = array(); - - while ($line = mysqli_fetch_array($result)) { - $tables[] = $line[0]; - } - parent::listSources($tables); - return $tables; - } - } -/** - * 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; - $cols = $this->query('DESCRIBE ' . $this->fullTableName($model)); - - foreach ($cols as $column) { - $colKey = array_keys($column); - if (isset($column[$colKey[0]]) && !isset($column[0])) { - $column[0] = $column[$colKey[0]]; - } - if (isset($column[0])) { - $fields[$column[0]['Field']] = array( - 'type' => $this->column($column[0]['Type']), - 'null' => ($column[0]['Null'] == 'YES' ? true : false), - 'default' => $column[0]['Default'], - 'length' => $this->length($column[0]['Type']) - ); - } - } - - $this->__cacheDescription($this->fullTableName($model, false), $fields); - return $fields; - } -/** - * Returns a quoted and escaped string of $data for use in an SQL statement. - * - * @param string $data String to be prepared for use in an SQL statement - * @param string $column The column into which this data will be inserted - * @param boolean $safe Whether or not numeric data should be handled automagically if no column data is provided - * @return string Quoted and escaped data - */ - function value($data, $column = null, $safe = false) { - $parent = parent::value($data, $column, $safe); - - if ($parent != null) { - return $parent; - } - - if ($data === null) { - return 'NULL'; - } - - if ($data === '') { - return "''"; - } - - switch ($column) { - case 'boolean': - $data = $this->boolean((bool)$data); - break; - case 'integer' : - case 'float' : - case null : - if (is_numeric($data) && strpos($data, ',') === false && $data[0] != '0' && strpos($data, 'e') === false) { - break; - } - default: - $data = "'" . mysqli_real_escape_string($this->connection, $data) . "'"; - break; - } - - return $data; - } -/** - * Begin a transaction - * - * @param unknown_type $model - * @return boolean True on success, false on fail - * (i.e. if the database/model does not support transactions). - */ - function begin(&$model) { - if (parent::begin($model)) { - if ($this->execute('START TRANSACTION')) { - $this->_transactionStarted = true; - return true; - } - } - return false; - } -/** - * Commit a transaction - * - * @param unknown_type $model - * @return boolean True on success, false on fail - * (i.e. if the database/model does not support transactions, - * or a transaction has not started). - */ - function commit(&$model) { - if (parent::commit($model)) { - $this->_transactionStarted = false; - return $this->execute('COMMIT'); - } - return false; - } -/** - * Rollback a transaction - * - * @param unknown_type $model - * @return boolean True on success, false on fail - * (i.e. if the database/model does not support transactions, - * or a transaction has not started). - */ - function rollback(&$model) { - if (parent::rollback($model)) { - return $this->execute('ROLLBACK'); - } - return false; - } -/** - * Returns a formatted error message from previous database operation. - * - * @return string Error message with error number - */ - function lastError() { - if (mysqli_errno($this->connection)) { - return mysqli_errno($this->connection).': '.mysqli_error($this->connection); - } - return null; - } -/** - * Returns number of affected rows in previous database operation. If no previous operation exists, - * this returns false. - * - * @return int Number of affected rows - */ - function lastAffected() { - if ($this->_result) { - return mysqli_affected_rows($this->connection); - } - return null; - } -/** - * Returns number of rows in previous resultset. If no previous resultset exists, - * this returns false. - * - * @return int Number of rows in resultset - */ - function lastNumRows() { - if ($this->_result and is_object($this->_result)) { - return @mysqli_num_rows($this->_result); - } - return null; - } -/** - * Returns the ID generated from the previous INSERT operation. - * - * @param unknown_type $source - * @return in - */ - function lastInsertId($source = null) { - $id = $this->fetchRow('SELECT LAST_INSERT_ID() AS insertID', false); - if ($id !== false && !empty($id) && !empty($id[0]) && isset($id[0]['insertID'])) { - return $id[0]['insertID']; - } - - return null; - } -/** - * Converts database-layer column types to basic types - * - * @param string $real Real database-layer column type (i.e. "varchar(255)") - * @return string Abstract column type (i.e. "string") - */ - function column($real) { - if (is_array($real)) { - $col = $real['name']; - if (isset($real['limit'])) { - $col .= '('.$real['limit'].')'; - } - return $col; - } - - $col = r(')', '', $real); - $limit = $this->length($real); - @list($col,$vals) = explode('(', $col); - - if (in_array($col, array('date', 'time', 'datetime', 'timestamp'))) { - return $col; - } - if ($col == 'tinyint' && $limit == 1) { - return 'boolean'; - } - if (strpos($col, 'int') !== false) { - return 'integer'; - } - if (strpos($col, 'char') !== false || $col == 'tinytext') { - return 'string'; - } - if (strpos($col, 'text') !== false) { - return 'text'; - } - if (strpos($col, 'blob') !== false) { - return 'binary'; - } - if (in_array($col, array('float', 'double', 'decimal'))) { - return 'float'; - } - if (strpos($col, 'enum') !== false) { - return "enum($vals)"; - } - if ($col == 'boolean') { - return $col; - } - return 'text'; - } -/** - * Gets the length of a database-native column description, or null if no length - * - * @param string $real Real database-layer column type (i.e. "varchar(255)") - * @return int An integer representing the length of the column - */ - function length($real) { - $col = r(array(')', 'unsigned'), '', $real); - $limit = null; - - if (strpos($col, '(') !== false) { - list($col, $limit) = explode('(', $col); - } - - if ($limit != null) { - return intval($limit); - } - return null; - } -/** - * Enter description here... - * - * @param unknown_type $results - */ - function resultSet(&$results) { - $this->results =& $results; - $this->map = array(); - $num_fields = mysqli_num_fields($results); - $index = 0; - $j = 0; - while ($j < $num_fields) { - $column = mysqli_fetch_field_direct($results, $j); - if (!empty($column->table)) { - $this->map[$index++] = array($column->table, $column->name); - } else { - $this->map[$index++] = array(0, $column->name); - } - $j++; - } - } -/** - * Fetches the next row from the current result set - * - * @return unknown - */ - function fetchResult() { - if ($row = mysqli_fetch_row($this->results)) { - $resultRow = array(); - $i = 0; - foreach ($row as $index => $field) { - @list($table, $column) = $this->map[$index]; - $resultRow[$table][$column] = $row[$index]; - $i++; - } - return $resultRow; - } else { - return false; - } - } -/** - * Sets the database encoding - * - * @param string $enc Database encoding - * @return void - */ - function setEncoding($enc) { - return $this->_execute('SET NAMES ' . $enc) != false; - } -/** - * Gets the database encoding - * - * @return string The database encoding - */ - function getEncoding() { - return mysqli_client_encoding($this->connection); - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_odbc.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_odbc.php deleted file mode 100644 index 563627b..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_odbc.php +++ /dev/null @@ -1,437 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.model.dbo - * @since CakePHP(tm) v 0.10.5.1790 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ - -/** - * Short description for class. - * - * Long description for class - * - * @package cake - * @subpackage cake.cake.libs.model.dbo - */ -class DboOdbc extends DboSource{ - -/** - * Driver description - * - * @var string - */ - var $description = "ODBC DBO Driver"; - -/** - * Table/column starting quote - * - * @var string - */ - var $startQuote = "`"; - -/** - * Table/column end quote - * - * @var string - */ - var $endQuote = "`"; - -/** - * Driver base configuration - * - * @var array - */ - var $_baseConfig = array('persistent' => true, - 'login' => 'root', - 'password' => '', - 'database' => 'cake', - 'connect' => 'odbc_pconnect' - ); - -/** - * Enter description here... - * - * @var unknown_type - */ - - var $columns = array(); - - // var $columns = array('primary_key' => array('name' => 'int(11) DEFAULT NULL auto_increment'), - // 'string' => array('name' => 'varchar', 'limit' => '255'), - // 'text' => array('name' => 'text'), - // 'integer' => array('name' => 'int', 'limit' => '11'), - // 'float' => array('name' => 'float'), - // 'datetime' => array('name' => 'datetime', 'format' => 'Y-m-d h:i:s', 'formatter' => 'date'), - // 'timestamp' => array('name' => 'datetime', 'format' => 'Y-m-d h:i:s', 'formatter' => 'date'), - // 'time' => array('name' => 'time', 'format' => 'h:i:s', 'formatter' => 'date'), - // 'date' => array('name' => 'date', 'format' => 'Y-m-d', 'formatter' => 'date'), - // 'binary' => array('name' => 'blob'), - // 'boolean' => array('name' => 'tinyint', 'limit' => '1')); - -/** - * Connects to the database using options in the given configuration array. - * - * @return boolean True if the database could be connected, else false - */ - function connect() { - $config = $this->config; - $connect = $config['connect']; - - $this->connected = false; - $this->connection = $connect($config['database'], $config['login'], $config['password']); - - if ($this->connection) { - $this->connected = true; - } - - return $this->connected; - } - -/** - * Disconnects from database. - * - * @return boolean True if the database could be disconnected, else false - */ - function disconnect() { - return @odbc_close($this->connection); - } -/** - * Executes given SQL statement. - * - * @param string $sql SQL statement - * @return resource Result resource identifier - * @access protected - */ - function _execute($sql) { - return odbc_exec($this->connection, $sql); - } -/** - * Returns an array of sources (tables) in the database. - * - * @return array Array of tablenames in the database - */ - function listSources() { - - $cache = parent::listSources(); - if ($cache != null) { - return $cache; - } - - /*$result = odbc_tables($this->connection); - if (function_exists('odbc_fetch_row')) { - echo 'GOOD'; - } else { - echo 'BAD'; - }*/ - - $result = odbc_tables($this->connection); - - $tables = array(); - while (odbc_fetch_row($result)) { - array_push($tables, odbc_result($result, "TABLE_NAME")); - } - - parent::listSources($tables); - return $tables; - } -/** - * Returns an array of the fields in given table name. - * - * @param Model $model Model object to describe - * @return array Fields in table. Keys are name and type - */ - function &describe(&$model) { - $cache=parent::describe($model); - - if ($cache != null) { - return $cache; - } - - $fields = array(); - $sql = 'SELECT * FROM ' . $this->fullTableName($model); - $result = odbc_exec($this->connection, $sql); - - $count = odbc_num_fields($result); - - for ($i = 1; $i <= $count; $i++) { - $cols[$i - 1] = odbc_field_name($result, $i); - } - - foreach ($cols as $column) { - $type = odbc_field_type(odbc_exec($this->connection, "SELECT " . $column . " FROM " . $this->fullTableName($model)), 1); - $fields[$column] = array('type' => $type); - } - - $this->__cacheDescription($model->tablePrefix . $model->table, $fields); - return $fields; - } - - function name($data) { - if ($data == '*') { - return '*'; - } - - $pos = strpos($data, '`'); - - if ($pos === false) { - $data = '' . str_replace('.', '.', $data) . ''; - //$data = '`'. str_replace('.', '`.`', $data) .'`'; - } - - return $data; - } - -/** - * Returns a quoted and escaped string of $data for use in an SQL statement. - * - * @param string $data String to be prepared for use in an SQL statement - * @param string $column The column into which this data will be inserted - * @return string Quoted and escaped - * @todo Add logic that formats/escapes data based on column type - */ - function value($data, $column = null) { - $parent=parent::value($data, $column); - - if ($parent != null) { - return $parent; - } - - if ($data === null) { - return 'NULL'; - } - - // $data = mysql_real_escape_string($data, $this->connection); - - if (!is_numeric($data)) { - $return = "'" . $data . "'"; - } else { - $return = $data; - } - - return $return; - } - -/** - * Not sure about this one, MySQL needs it but does ODBC? Safer just to leave it - * Translates between PHP boolean values and MySQL (faked) boolean values - * - * @param mixed $data Value to be translated - * @return mixed Converted boolean value - */ - function boolean($data) { - if ($data === true || $data === false) { - if ($data === true) { - return 1; - } - - return 0; - } else { - if (intval($data !== 0)) { - return true; - } - - return false; - } - } - -/** - * Begin a transaction - * - * @param unknown_type $model - * @return boolean True on success, false on fail - * (i.e. if the database/model does not support transactions). - */ - function begin(&$model) { - if (parent::begin($model)) { - if (odbc_autocommit($this->connection, false)) { - $this->_transactionStarted = true; - return true; - } - } - - return false; - } - -/** - * Commit a transaction - * - * @param unknown_type $model - * @return boolean True on success, false on fail - * (i.e. if the database/model does not support transactions, - * or a transaction has not started). - */ - function commit(&$model) { - if (parent::commit($model)) { - if (odbc_commit($this->connection)) { - $this->_transactionStarted = false; - return true; - } - } - - return false; - } - -/** - * Rollback a transaction - * - * @param unknown_type $model - * @return boolean True on success, false on fail - * (i.e. if the database/model does not support transactions, - * or a transaction has not started). - */ - function rollback(&$model) { - if (parent::rollback($model)) { - $this->_transactionStarted=false; - return odbc_rollback($this->connection); - } - - return false; - } - -/** - * Returns a formatted error message from previous database operation. - * - * @return string Error message with error number - */ - function lastError() { - if (odbc_error($this->connection)) { - return odbc_error($this->connection) . ': ' . odbc_errormsg($this->connection); - } - - return null; - } - -/** - * Returns number of affected rows in previous database operation. If no previous operation exists, - * this returns false. - * - * @return int Number of affected rows - */ - function lastAffected() { - if ($this->_result) { - return null; - } - - return null; - } - -/** - * Returns number of rows in previous resultset. If no previous resultset exists, - * this returns false. - * - * @return int Number of rows in resultset - */ - function lastNumRows() { - if ($this->_result) { - return@odbc_num_rows($this->_result); - } - - return null; - } - -/** - * Returns the ID generated from the previous INSERT operation. - * - * @param unknown_type $source - * @return int - */ - function lastInsertId($source = null) { - $result=$this->fetchRow('SELECT @@IDENTITY'); - return $result[0]; - } - -/** - * Enter description here... - * - * @param string $real Real database-layer column type (i.e. "varchar(255)") - */ - function column($real) { - if (is_array($real)) { - $col=$real['name']; - - if (isset($real['limit'])) { - $col .= '(' . $real['limit'] . ')'; - } - - return $col; - } - - return $real; - } - -/** - * Enter description here... - * - * @param unknown_type $results - */ - function resultSet(&$results) { - $this->results=&$results; - $this->map=array(); - $num_fields =odbc_num_fields($results); - $index =0; - $j =0; - - while ($j < $num_fields) { - $column = odbc_fetch_array($results, $j); - - if (!empty($column->table)) { - $this->map[$index++] = array($column->table, - $column->name); - } else { - echo array(0, - $column->name); - - $this->map[$index++]=array(0, - $column->name); - } - - $j++; - } - } - -/** - * Fetches the next row from the current result set - * - * @return unknown - */ - function fetchResult() { - if ($row = odbc_fetch_row($this->results)) { - $resultRow=array(); - $i=0; - - foreach ($row as $index => $field) { - list($table, $column) = $this->map[$index]; - $resultRow[$table][$column]=$row[$index]; - $i++; - } - - return $resultRow; - } else { - return false; - } - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_pear.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_pear.php deleted file mode 100644 index f5e57eb..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_pear.php +++ /dev/null @@ -1,241 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.model.dbo - * @since CakePHP(tm) v 0.2.9 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ - -/** - * Create an include path required PEAR libraries. - */ -ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . PEAR); -vendor ('Pear/DB'); - -/** - * {@link http://pear.php.net/package/DB PEAR::DB} layer for DBO. - * - * Long description for class - * - * @package cake - * @subpackage cake.cake.libs.model.dbo - */ -class DboPear extends DboSource{ - -/** - * PEAR::DB object with which we connect. - * - * @var DB The connection object. - * @access private - */ - var $_pear = null; - -/** - * Connects to the database using options in the given configuration array. - * - * @param array $config Configuration array for connecting - * @return boolean True if the database could be connected, else false - */ - function connect($config) { - $this->config =$config; - $dsn =$config['driver'] . '://' . $config['login'] . ':' . $config['password'] . '@' - . $config['host'] . '/' . $config['database']; - $options=array('debug' => Configure::read() - 1, - 'portability' => DB_PORTABILITY_ALL,); - - $this->_pear =&DB::connect($dsn, $options); - $this->connected=$this->_pear ? true : false; - return !(PEAR::isError($this->_pear)); - } - -/** - * Disconnects from database. - * - * @return boolean True if the database could be disconnected, else false - */ - function disconnect() { - die (__('Please implement DBO::disconnect() first.')); - } - -/** - * Executes given SQL statement. - * - * @param string $sql SQL statement - * @return resource Result resource identifier - */ - function execute($sql) { - return $this->_pear->query($sql); - } - -/** - * Returns a row from given resultset as an array . - * - * @return array The fetched row as an array - */ - function fetchRow($sql = null) { - if (!empty($sql) && is_string($sql) && strlen($sql) > 5) { - if (!$this->execute($sql)) { - return null; - } - } - return $this->_result->fetchRow(DB_FETCHMODE_ASSOC); - } - -/** - * Returns an array of tables in the database. If there are no tables, an error is raised and the application exits. - * :WARNING: :TODO: POSTGRESQL & MYSQL ONLY! PEAR::DB doesn't support universal table listing. - * - * @return array Array of tablenames in the database - */ - function tablesList() { - $driver=$this->config['driver']; - $tables=array(); - - if ('postgres' == $driver) { - $sql ="SELECT a.relname AS name - 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));"; - - $result=$this->all($sql); - - foreach ($result as $item) { - $tables[] = $item['name']; - } - } elseif ('mysql' == $driver) { - $result=array(); - $result=mysql_list_tables($this->config['database']); - - while ($item = mysql_fetch_array($result)) { - $tables[] = $item[0]; - } - } else { - die (__('Please implement DBO_Pear::tablesList() for your database driver.')); - } - - if (!$result) { - trigger_error(ERROR_NO_TABLE_LIST, E_USER_ERROR); - exit; - } else { - return $tables; - } - } - -/** - * 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 fields($tableName) { - $data =$this->_pear->tableInfo($tableName); - $fields=false; - - foreach ($data as $item) { - $fields[] = array('name' => $item['name'], - 'type' => $item['type']); - } - - return $fields; - } - -/** - * Returns a quoted and escaped string of $data for use in an SQL statement. - * - * @param string $data String to be prepared for use in an SQL statement - * @return string Quoted and escaped - */ - function prepareValue($data) { - return $this->_pear->quoteSmart($data); - } - -/** - * Returns a formatted error message from previous database operation. - * - * @return string Error message - */ - function lastError() { - return PEAR::isError($this->_result) ? $this->_result->getMessage() : null; - } - -/** - * Returns number of affected rows in previous database operation. If no previous operation exists, this returns false. - * - * @return int Number of affected rows - */ - function lastAffected() { - return $this->_pear->affectedRows(); - } - -/** - * Returns number of rows in previous resultset. If no previous resultset exists, - * this returns false. - * - * @return int Number of rows in resultset - */ - function lastNumRows() { - if (method_exists($this->_result, 'numRows')) { - return $this->_result->numRows(); - } else { - return false; - } - } - -/** - * Returns the ID generated from the previous INSERT operation. - * - * @param string $table Name of the database table - * @return int - */ - function lastInsertId($table) { - return $this->field('id', "SELECT MAX(id) FROM {$table}"); - } - -/** - * Returns a limit statement in the correct format for the particular database. - * - * @param int $limit Limit of results returned - * @param int $offset Offset from which to start results - * @return string SQL limit/offset statement - */ - function selectLimit($limit, $offset = '0') { - return ' ' . $this->_pear->modifyLimitQuery('', $offset, $limit); - } -/** - * Inserts multiple values into a join table - * - * @param string $table - * @param string $fields - * @param array $values - */ - function insertMulti($table, $fields, $values) { - $count = count($values); - for ($x = 0; $x < $count; $x++) { - $this->query("INSERT INTO {$table} ({$fields}) VALUES {$values[$x]}"); - } - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_postgres.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_postgres.php deleted file mode 100644 index f77942c..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_postgres.php +++ /dev/null @@ -1,595 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.model.dbo - * @since CakePHP(tm) v 0.9.1.114 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ - -/** - * PostgreSQL layer for DBO. - * - * Long description for class - * - * @package cake - * @subpackage cake.cake.libs.model.dbo - */ -class DboPostgres extends DboSource { - - var $description = "PostgreSQL DBO Driver"; - - var $_baseConfig = array( - 'connect' => 'pg_pconnect', - 'persistent' => true, - 'host' => 'localhost', - 'login' => 'root', - 'password' => '', - 'database' => 'cake', - 'schema' => 'public', - 'port' => 5432, - 'encoding' => '' - ); - - var $columns = array( - 'primary_key' => array('name' => 'serial NOT NULL'), - 'string' => array('name' => 'varchar', 'limit' => '255'), - 'text' => array('name' => 'text'), - 'integer' => array('name' => 'integer', 'formatter' => 'intval'), - 'float' => array('name' => 'float', 'formatter' => 'floatval'), - 'datetime' => array('name' => 'timestamp', 'format' => 'Y-m-d H:i:s', 'formatter' => 'date'), - 'timestamp' => array('name' => 'timestamp', 'format' => 'Y-m-d H:i:s', 'formatter' => 'date'), - 'time' => array('name' => 'time', 'format' => 'H:i:s', 'formatter' => 'date'), - 'date' => array('name' => 'date', 'format' => 'Y-m-d', 'formatter' => 'date'), - 'binary' => array('name' => 'bytea'), - 'boolean' => array('name' => 'boolean'), - 'number' => array('name' => 'numeric'), - 'inet' => array('name' => 'inet') - ); - - var $startQuote = '"'; - - var $endQuote = '"'; -/** - * Contains mappings of custom auto-increment sequences, if a table uses a sequence name - * other than what is dictated by convention. - * - * @var array - */ - var $_sequenceMap = array(); -/** - * Connects to the database using options in the given configuration array. - * - * @return True if successfully connected. - */ - function connect() { - - $config = $this->config; - $connect = $config['connect']; - $this->connection = $connect("host='{$config['host']}' port='{$config['port']}' dbname='{$config['database']}' user='{$config['login']}' password='{$config['password']}'"); - - if ($this->connection) { - $this->connected = true; - $this->_execute("SET search_path TO " . $config['schema']); - } else { - $this->connected = false; - } - if (!empty($config['encoding'])) { - $this->setEncoding($config['encoding']); - } - - return $this->connected; - } - -/** - * Disconnects from database. - * - * @return boolean True if the database could be disconnected, else false - */ - function disconnect() { - @pg_free_result($this->results); - $this->connected = !@pg_close($this->connection); - return !$this->connected; - } - -/** - * Executes given SQL statement. - * - * @param string $sql SQL statement - * @return resource Result resource identifier - */ - function _execute($sql) { - return pg_query($this->connection, $sql); - } -/** - * Returns an array of tables in the database. If there are no tables, an error is raised and the application exits. - * - * @return array Array of tablenames in the database - */ - function listSources() { - $cache = parent::listSources(); - - if ($cache != null) { - return $cache; - } - - $schema = $this->config['schema']; - $sql = "SELECT table_name as name FROM INFORMATION_SCHEMA.tables WHERE table_schema = '{$schema}';"; - $result = $this->fetchAll($sql); - - if (!$result) { - return array(); - } else { - $tables = array(); - - foreach ($result as $item) { - $tables[] = $item[0]['name']; - } - - parent::listSources($tables); - return $tables; - } - } - -/** - * 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) { - if (isset($model->sequence)) { - $this->_sequenceMap[$this->fullTableName($model, false)] = $model->sequence; - } - - $cache = parent::describe($model); - if ($cache != null) { - return $cache; - } - - $fields = false; - $cols = $this->fetchAll("SELECT DISTINCT column_name AS name, data_type AS type, is_nullable AS null, column_default AS default, ordinal_position AS position, character_maximum_length AS char_length, character_octet_length AS oct_length FROM information_schema.columns WHERE table_name =" . $this->value($model->tablePrefix . $model->table) . " ORDER BY position"); - - foreach ($cols as $column) { - $colKey = array_keys($column); - - if (isset($column[$colKey[0]]) && !isset($column[0])) { - $column[0] = $column[$colKey[0]]; - } - - if (isset($column[0])) { - $c = $column[0]; - if (strpos($c['default'], 'nextval(') === 0) { - $c['default'] = null; - } - if (!empty($c['char_length'])) { - $length = intval($c['char_length']); - } elseif (!empty($c['oct_length'])) { - $length = intval($c['oct_length']); - } else { - $length = $this->length($c['type']); - } - $fields[$c['name']] = array( - 'type' => $this->column($c['type']), - 'null' => ($c['null'] == 'NO' ? false : true), - 'default' => $c['default'], - 'length' => $length - ); - } - } - $this->__cacheDescription($model->tablePrefix . $model->table, $fields); - return $fields; - } -/** - * Returns a quoted and escaped string of $data for use in an SQL statement. - * - * @param string $data String to be prepared for use in an SQL statement - * @param string $column The column into which this data will be inserted - * @return string Quoted and escaped - * @todo Add logic that formats/escapes data based on column type - */ - function value($data, $column = null) { - - $parent = parent::value($data, $column); - if ($parent != null) { - return $parent; - } - - if ($data === null) { - return 'NULL'; - } - - switch($column) { - case 'inet': - if (!strlen($data)) { - return 'DEFAULT'; - } else { - $data = pg_escape_string($data); - } - break; - case 'integer': - if ($data === '') { - return 'DEFAULT'; - } else { - $data = pg_escape_string($data); - } - break; - case 'binary': - $data = pg_escape_bytea($data); - - break; - case 'boolean': - default: - if ($data === true) { - return 'TRUE'; - } elseif ($data === false) { - return 'FALSE'; - } - $data = pg_escape_string($data); - break; - } - return "'" . $data . "'"; - } - -/** - * Begin a transaction - * - * @param unknown_type $model - * @return boolean True on success, false on fail - * (i.e. if the database/model does not support transactions). - */ - function begin(&$model) { - if (parent::begin($model)) { - if ($this->execute('BEGIN')) { - $this->_transactionStarted = true; - return true; - } - } - return false; - } - -/** - * Commit a transaction - * - * @param unknown_type $model - * @return boolean True on success, false on fail - * (i.e. if the database/model does not support transactions, - * or a transaction has not started). - */ - function commit(&$model) { - if (parent::commit($model)) { - $this->_transactionStarted = false; - return $this->execute('COMMIT'); - } - return false; - } - -/** - * Rollback a transaction - * - * @param unknown_type $model - * @return boolean True on success, false on fail - * (i.e. if the database/model does not support transactions, - * or a transaction has not started). - */ - function rollback(&$model) { - if (parent::rollback($model)) { - return $this->execute('ROLLBACK'); - } - return false; - } - -/** - * Returns a formatted error message from previous database operation. - * - * @return string Error message - */ - function lastError() { - $last_error = pg_last_error($this->connection); - if ($last_error) { - return $last_error; - } - return null; - } - -/** - * Returns number of affected rows in previous database operation. If no previous operation exists, this returns false. - * - * @return int Number of affected rows - */ - function lastAffected() { - if ($this->_result) { - $return = pg_affected_rows($this->_result); - return $return; - } - return false; - } -/** - * Returns number of rows in previous resultset. If no previous resultset exists, - * this returns false. - * - * @return int Number of rows in resultset - */ - function lastNumRows() { - if ($this->_result) { - $return = pg_num_rows($this->_result); - return $return; - } - return false; - } -/** - * Returns the ID generated from the previous INSERT operation. - * - * @param string $source Name of the database table - * @param string $field Name of the ID database field. Defaults to "id" - * @return int - */ - function lastInsertId($source, $field = 'id') { - foreach ($this->__descriptions[$source] as $name => $sourceinfo) { - if (strcasecmp($name, $field) == 0) { - break; - } - } - - if (isset($this->_sequenceMap[$source])) { - $seq = $this->_sequenceMap[$source]; - } elseif (preg_match('/^nextval\(\'(\w+)\'/', $sourceinfo['default'], $matches)) { - $seq = $matches[1]; - } else { - $seq = "{$source}_{$field}_seq"; - } - - $res = $this->rawQuery("SELECT last_value AS max FROM \"{$seq}\""); - $data = $this->fetchRow($res); - return $data[0]['max']; - } -/** - * Generates the fields list of an SQL query. - * - * @param Model $model - * @param string $alias Alias tablename - * @param mixed $fields - * @return array - */ - function fields(&$model, $alias = null, $fields = array(), $quote = true) { - if (empty($alias)) { - $alias = $model->name; - } - $fields = parent::fields($model, $alias, $fields, false); - - if (!$quote) { - return $fields; - } - $count = count($fields); - - if ($count >= 1 && $fields[0] != '*' && strpos($fields[0], 'COUNT(*)') === false) { - for ($i = 0; $i < $count; $i++) { - if (!preg_match('/^.+\\(.*\\)/', $fields[$i]) && !preg_match('/\s+AS\s+/', $fields[$i])) { - $prepend = ''; - if (strpos($fields[$i], 'DISTINCT') !== false) { - $prepend = 'DISTINCT '; - $fields[$i] = trim(r('DISTINCT', '', $fields[$i])); - } - - $dot = strrpos($fields[$i], '.'); - if ($dot === false) { - $fields[$i] = $prepend . $this->name($alias) . '.' . $this->name($fields[$i]) . ' AS ' . $this->name($alias . '__' . $fields[$i]); - } else { - $build = explode('.', $fields[$i]); - $fields[$i] = $prepend . $this->name($build[0]) . '.' . $this->name($build[1]) . ' AS ' . $this->name($build[0] . '__' . $build[1]); - } - } - } - } - return $fields; - } -/** - * Returns a limit statement in the correct format for the particular database. - * - * @param int $limit Limit of results returned - * @param int $offset Offset from which to start results - * @return string SQL limit/offset statement - */ - function limit($limit, $offset = null) { - if ($limit) { - $rt = ''; - if (!strpos(strtolower($limit), 'limit') || strpos(strtolower($limit), 'limit') === 0) { - $rt = ' LIMIT'; - } - - $rt .= ' ' . $limit; - if ($offset) { - $rt .= ' OFFSET ' . $offset; - } - - return $rt; - } - return null; - } -/** - * Converts database-layer column types to basic types - * - * @param string $real Real database-layer column type (i.e. "varchar(255)") - * @return string Abstract column type (i.e. "string") - */ - function column($real) { - if (is_array($real)) { - $col = $real['name']; - if (isset($real['limit'])) { - $col .= '(' . $real['limit'] . ')'; - } - return $col; - } - - $col = r(')', '', $real); - $limit = null; - @list($col, $limit) = explode('(', $col); - - if (in_array($col, array('date', 'time'))) { - return $col; - } - if (strpos($col, 'timestamp') !== false) { - return 'datetime'; - } - if ($col == 'inet') { - return('inet'); - } - if ($col == 'boolean') { - return 'boolean'; - } - if (strpos($col, 'int') !== false && $col != 'interval') { - return 'integer'; - } - if (strpos($col, 'char') !== false) { - return 'string'; - } - if (strpos($col, 'text') !== false) { - return 'text'; - } - if (strpos($col, 'bytea') !== false) { - return 'binary'; - } - if (in_array($col, array('float', 'float4', 'float8', 'double', 'double precision', 'decimal', 'real', 'numeric'))) { - return 'float'; - } - return 'text'; - } -/** - * Gets the length of a database-native column description, or null if no length - * - * @param string $real Real database-layer column type (i.e. "varchar(255)") - * @return int An integer representing the length of the column - */ - function length($real) { - $col = r(array(')', 'unsigned'), '', $real); - $limit = null; - - if (strpos($col, '(') !== false) { - list($col, $limit) = explode('(', $col); - } - - if ($limit != null) { - return intval($limit); - } - return null; - } -/** - * Enter description here... - * - * @param unknown_type $results - */ - function resultSet(&$results) { - $this->results =& $results; - $this->map = array(); - $num_fields = pg_num_fields($results); - $index = 0; - $j = 0; - - while ($j < $num_fields) { - $columnName = pg_field_name($results, $j); - - if (strpos($columnName, '__')) { - $parts = explode('__', $columnName); - $this->map[$index++] = array($parts[0], $parts[1]); - } else { - $this->map[$index++] = array(0, $columnName); - } - $j++; - } - } -/** - * Fetches the next row from the current result set - * - * @return unknown - */ - function fetchResult() { - if ($row = pg_fetch_row($this->results)) { - $resultRow = array(); - $i = 0; - - foreach ($row as $index => $field) { - list($table, $column) = $this->map[$index]; - $resultRow[$table][$column] = $row[$index]; - $i++; - } - return $resultRow; - } else { - return false; - } - } -/** - * Translates between PHP boolean values and PostgreSQL boolean values - * - * @param mixed $data Value to be translated - * @param boolean $quote True to quote value, false otherwise - * @return mixed Converted boolean value - */ - function boolean($data, $quote = true) { - $result = null; - - if ($data === true || $data === false) { - $result = $data; - } elseif (is_string($data) && !is_numeric($data)) { - if (strpos(low($data), 't') !== false) { - $result = true; - } else { - $result = false; - } - } else { - $result = (bool)$data; - } - return $result; - } -/** - * Sets the database encoding - * - * @param mixed $enc Database encoding - * @return boolean True on success, false on failure - */ - function setEncoding($enc) { - return pg_set_client_encoding($this->connection, $enc) == 0; - } -/** - * Gets the database encoding - * - * @return string The database encoding - */ - function getEncoding() { - return pg_client_encoding($this->connection); - } -/** - * Inserts multiple values into a join table - * - * @param string $table - * @param string $fields - * @param array $values - */ - function insertMulti($table, $fields, $values) { - $count = count($values); - for ($x = 0; $x < $count; $x++) { - $this->query("INSERT INTO {$table} ({$fields}) VALUES {$values[$x]}"); - } - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_sqlite.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_sqlite.php deleted file mode 100644 index 26e6b1b..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/dbo/dbo_sqlite.php +++ /dev/null @@ -1,409 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.model.dbo - * @since CakePHP(tm) v 0.9.0 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * DBO implementation for the SQLite DBMS. - * - * Long description for class - * - * @package cake - * @subpackage cake.cake.libs.model.dbo - */ -class DboSqlite extends DboSource { - -/** - * Enter description here... - * - * @var unknown_type - */ - var $description = "SQLite DBO Driver"; -/** - * Enter description here... - * - * @var unknown_type - */ - var $startQuote = '"'; -/** - * Enter description here... - * - * @var unknown_type - */ - var $endQuote = '"'; -/** - * Base configuration settings for SQLite driver - * - * @var array - */ - var $_baseConfig = array( - 'persistent' => true, - 'database' => null, - 'connect' => 'sqlite_popen' - ); -/** - * SQLite column definition - * - * @var array - */ - var $columns = array( - 'primary_key' => array('name' => 'integer primary key'), - 'string' => array('name' => 'varchar', 'limit' => '255'), - 'text' => array('name' => 'text'), - 'integer' => array('name' => 'integer', 'limit' => '11', 'formatter' => 'intval'), - 'float' => array('name' => 'float', 'formatter' => 'floatval'), - 'datetime' => array('name' => 'timestamp', 'format' => 'YmdHis', 'formatter' => 'date'), - 'timestamp' => array('name' => 'timestamp', 'format' => 'YmdHis', 'formatter' => 'date'), - 'time' => array('name' => 'timestamp', 'format' => 'His', 'formatter' => 'date'), - 'date' => array('name' => 'date', 'format' => 'Ymd', 'formatter' => 'date'), - 'binary' => array('name' => 'blob'), - 'boolean' => array('name' => 'integer', 'limit' => '1') - ); -/** - * Connects to the database using config['database'] as a filename. - * - * @param array $config Configuration array for connecting - * @return mixed - */ - function connect() { - $config = $this->config; - $this->connection = $config['connect']($config['database']); - $this->connected = is_resource($this->connection); - return $this->connected; - } -/** - * Disconnects from database. - * - * @return boolean True if the database could be disconnected, else false - */ - function disconnect() { - @sqlite_close($this->connection); - $this->connected = false; - return $this->connected; - } -/** - * Executes given SQL statement. - * - * @param string $sql SQL statement - * @return resource Result resource identifier - */ - function _execute($sql) { - return sqlite_query($this->connection, $sql); - } -/** - * Returns an array of tables in the database. If there are no tables, an error is raised and the application exits. - * - * @return array Array of tablenames in the database - */ - function listSources() { - $db = $this->config['database']; - $this->config['database'] = basename($this->config['database']); - - $cache = parent::listSources(); - if ($cache != null) { - return $cache; - } - - $result = $this->fetchAll("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;"); - - if (!$result || empty($result)) { - return array(); - } else { - $tables = array(); - foreach ($result as $table) { - $tables[] = $table[0]['name']; - } - parent::listSources($tables); - - $this->config['database'] = $db; - return $tables; - } - $this->config['database'] = $db; - return array(); - } -/** - * 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 = array(); - $result = $this->fetchAll('PRAGMA table_info(' . $model->tablePrefix . $model->table . ')'); - - foreach ($result as $column) { - $fields[$column[0]['name']] = array( - 'type' => $this->column($column[0]['type']), - 'null' => ! $column[0]['notnull'], - 'default' => $column[0]['dflt_value'] - ); - } - - $this->__cacheDescription($model->tablePrefix . $model->table, $fields); - return $fields; - } -/** - * Returns a quoted and escaped string of $data for use in an SQL statement. - * - * @param string $data String to be prepared for use in an SQL statement - * @return string Quoted and escaped - */ - function value ($data, $column = null, $safe = false) { - $parent = parent::value($data, $column, $safe); - - if ($parent != null) { - return $parent; - } - - if ($data === null) { - return 'NULL'; - } - - if ($data === '') { - return "''"; - } - - switch ($column) { - case 'boolean': - $data = $this->boolean((bool)$data); - break; - default: - $data = sqlite_escape_string($data); - break; - } - return "'" . $data . "'"; - } -/** - * Begin a transaction - * - * @param unknown_type $model - * @return boolean True on success, false on fail - * (i.e. if the database/model does not support transactions). - */ - function begin (&$model) { - if (parent::begin($model)) { - if ($this->execute('BEGIN')) { - $this->_transactionStarted = true; - return true; - } - } - return false; - } -/** - * Commit a transaction - * - * @param unknown_type $model - * @return boolean True on success, false on fail - * (i.e. if the database/model does not support transactions, - * or a transaction has not started). - */ - function commit (&$model) { - if (parent::commit($model)) { - $this->_transactionStarted = false; - return $this->execute('COMMIT'); - } - return false; - } -/** - * Rollback a transaction - * - * @param unknown_type $model - * @return boolean True on success, false on fail - * (i.e. if the database/model does not support transactions, - * or a transaction has not started). - */ - function rollback (&$model) { - if (parent::rollback($model)) { - return $this->execute('ROLLBACK'); - } - return false; - } -/** - * Returns a formatted error message from previous database operation. - * - * @return string Error message - */ - function lastError() { - $error = sqlite_last_error($this->connection); - if ($error) { - return $error.': '.sqlite_error_string($error); - } - return null; - } -/** - * Returns number of affected rows in previous database operation. If no previous operation exists, this returns false. - * - * @return int Number of affected rows - */ - function lastAffected() { - if ($this->_result) { - return sqlite_changes($this->connection); - } - return false; - } -/** - * Returns number of rows in previous resultset. If no previous resultset exists, - * this returns false. - * - * @return int Number of rows in resultset - */ - function lastNumRows() { - if ($this->_result) { - sqlite_num_rows($this->_result); - } - return false; - } -/** - * Returns the ID generated from the previous INSERT operation. - * - * @return int - */ - function lastInsertId() { - return sqlite_last_insert_rowid($this->connection); - } -/** - * Converts database-layer column types to basic types - * - * @param string $real Real database-layer column type (i.e. "varchar(255)") - * @return string Abstract column type (i.e. "string") - */ - function column($real) { - if (is_array($real)) { - $col = $real['name']; - if (isset($real['limit'])) { - $col .= '('.$real['limit'].')'; - } - return $col; - } - - $col = low(r(')', '', $real)); - $limit = null; - @list($col, $limit) = explode('(', $col); - - if (in_array($col, array('text', 'integer', 'float', 'boolean', 'timestamp', 'datetime'))) { - return $col; - } - if (strpos($col, 'varchar') !== false) { - return 'string'; - } - if (in_array($col, array('blob', 'clob'))) { - return 'binary'; - } - if (strpos($col, 'numeric') !== false) { - return 'float'; - } - - return 'text'; - } -/** - * Enter description here... - * - * @param unknown_type $results - */ - function resultSet(&$results) { - $this->results =& $results; - $this->map = array(); - $num_fields = sqlite_num_fields($results); - $index = 0; - $j = 0; - - while ($j < $num_fields) { - $columnName = str_replace('"', '', sqlite_field_name($results, $j)); - - if (strpos($columnName, '.')) { - $parts = explode('.', $columnName); - $this->map[$index++] = array($parts[0], $parts[1]); - } else { - $this->map[$index++] = array(0, $columnName); - } - $j++; - } - } -/** - * Fetches the next row from the current result set - * - * @return unknown - */ - function fetchResult() { - if ($row = sqlite_fetch_array($this->results, SQLITE_ASSOC)) { - $resultRow = array(); - $i = 0; - - foreach ($row as $index => $field) { - if (strpos($index, '.')) { - list($table, $column) = explode('.', str_replace('"', '', $index)); - $resultRow[$table][$column] = $row[$index]; - } else { - $resultRow[0][str_replace('"', '', $index)] = $row[$index]; - } - $i++; - } - return $resultRow; - } else { - return false; - } - } -/** - * Returns a limit statement in the correct format for the particular database. - * - * @param int $limit Limit of results returned - * @param int $offset Offset from which to start results - * @return string SQL limit/offset statement - */ - function limit ($limit, $offset = null) { - if ($limit) { - $rt = ''; - if (!strpos(strtolower($limit), 'limit') || strpos(strtolower($limit), 'limit') === 0) { - $rt = ' LIMIT'; - } - $rt .= ' ' . $limit; - if ($offset) { - $rt .= ' OFFSET ' . $offset; - } - return $rt; - } - return null; - } -/** - * Inserts multiple values into a join table - * - * @param string $table - * @param string $fields - * @param array $values - */ - function insertMulti($table, $fields, $values) { - $count = count($values); - for ($x = 0; $x < $count; $x++) { - $this->query("INSERT INTO {$table} ({$fields}) VALUES {$values[$x]}"); - } - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/model.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/model.php deleted file mode 100644 index 8e40eb5..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/model.php +++ /dev/null @@ -1,42 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.model - * @since CakePHP(tm) v 0.10.0.0 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Load the model class based on the version of PHP. - * - */ -if (phpversion() < 5) { - require(LIBS . 'model' . DS . 'model_php4.php'); - - if (function_exists("overload")) { - overload("Model"); - } -} else { - require(LIBS . 'model' . DS . 'model_php5.php'); -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/model_php4.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/model_php4.php deleted file mode 100644 index 9a24eee..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/model_php4.php +++ /dev/null @@ -1,1719 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.model - * @since CakePHP(tm) v 0.10.0.0 - * @version $Revision: 7691 $ - * @modifiedby $LastChangedBy: nate $ - * @lastmodified $Date: 2008-10-02 00:59:12 -0400 (Thu, 02 Oct 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Included libs - */ -uses('class_registry', 'validators', 'model' . DS . 'connection_manager', 'set'); -/** - * Object-relational mapper. - * - * DBO-backed object data model. - * Automatically selects a database table name based on a pluralized lowercase object class name - * (i.e. class 'User' => table 'users'; class 'Man' => table 'men') - * The table is required to have at least 'id auto_increment', 'created datetime', - * and 'modified datetime' fields. - * - * @package cake - * @subpackage cake.cake.libs.model - */ -class Model extends Object{ -/** - * The name of the DataSource connection that this Model uses - * - * @var string - * @access public - */ - var $useDbConfig = 'default'; -/** - * Custom database table name. - * - * @var string - * @access public - */ - var $useTable = null; -/** - * Custom display field name. Display fields are used by Scaffold, in SELECT boxes' OPTION elements. - * - * @var string - * @access public - */ - var $displayField = null; - -/** - * Value of the primary key ID of the record that this model is currently pointing to - * - * @var string - * @access public - */ - var $id = false; -/** - * Container for the data that this model gets from persistent storage (the database). - * - * @var array - * @access public - */ - var $data = array(); -/** - * Table name for this Model. - * - * @var string - * @access public - */ - var $table = false; -/** - * The name of the ID field for this Model. - * - * @var string - * @access public - */ - var $primaryKey = null; -/** - * Table metadata - * - * @var array - * @access protected - */ - var $_tableInfo = null; -/** - * List of validation rules. Append entries for validation as ('field_name' => '/^perl_compat_regexp$/') - * that have to match with preg_match(). Use these rules with Model::validate() - * - * @var array - * @access public - */ - var $validate = array(); -/** - * Errors in validation - * @var array - * @access public - */ - var $validationErrors = array(); -/** - * Database table prefix for tables in model. - * - * @var string - * @access public - */ - var $tablePrefix = null; -/** - * Name of the model. - * - * @var string - * @access public - */ - var $name = null; -/** - * Name of the current model. - * - * @var string - * @access public - */ - var $currentModel = null; -/** - * List of table names included in the Model description. Used for associations. - * - * @var array - * @access public - */ - var $tableToModel = array(); -/** - * List of Model names by used tables. Used for associations. - * - * @var array - * @access public - */ - var $modelToTable = array(); -/** - * List of Foreign Key names to used tables. Used for associations. - * - * @var array - * @access public - */ - var $keyToTable = array(); -/** - * Alias name for model. - * - * @var array - * @access public - */ - var $alias = null; -/** - * Whether or not transactions for this model should be logged - * - * @var boolean - * @access public - */ - var $logTransactions = false; -/** - * Whether or not to enable transactions for this model (i.e. BEGIN/COMMIT/ROLLBACK) - * - * @var boolean - * @access public - */ - var $transactional = false; -/** - * Whether or not to cache queries for this model. This enables in-memory - * caching only, the results are not stored beyond this execution. - * - * @var boolean - * @access public - */ - var $cacheQueries = true; -/** - * belongsTo association - * - * @var array - * @access public - */ - var $belongsTo = array(); -/** - * hasOne association - * - * @var array - * @access public - */ - var $hasOne = array(); -/** - * hasMany association - * - * @var array - * @access public - */ - var $hasMany = array(); -/** - * hasAndBelongsToMany association - * - * @var array - * @access public - */ - var $hasAndBelongsToMany = array(); -/** - * Depth of recursive association - * - * @var int - * @access public - */ - var $recursive = 1; -/** - * Whitelist of fields allowed to be saved - * - * @var array - */ - var $whitelist = array(); -/** - * Enter description here... - * - * @var boolean - */ - var $cacheSources = true; -/** - * Default association keys - * - * @var array - * @access private - */ - var $__associationKeys = array('belongsTo' => array('className', 'foreignKey', 'conditions', 'fields', 'order', 'counterCache'), - 'hasOne' => array('className', 'foreignKey','conditions', 'fields','order', 'dependent'), - 'hasMany' => array('className', 'foreignKey', 'conditions', 'fields', 'order', 'limit', 'offset', 'dependent', 'exclusive', 'finderQuery', 'counterQuery'), - 'hasAndBelongsToMany' => array('className', 'joinTable', 'foreignKey', 'associationForeignKey', 'conditions', 'fields', 'order', 'limit', 'offset', 'unique', 'finderQuery', 'deleteQuery', 'insertQuery')); -/** - * Holds provided/generated association key names and other data for all associations - * - * @var array - * @access private - */ - var $__associations = array('belongsTo', 'hasOne', 'hasMany', 'hasAndBelongsToMany'); -/** - * The last inserted ID of the data that this model created - * - * @var int - * @access private - */ - var $__insertID = null; -/** - * The number of records returned by the last query - * - * @var int - * @access private - */ - var $__numRows = null; -/** - * The number of records affected by the last query - * - * @var int - * @access private - */ - var $__affectedRows = null; -/** - * Holds model associations temporarily to allow for dynamic (un)binding - * - * @var array - * @access private - */ - var $__backAssociation = array(); -/** - * Constructor. Binds the Model's database table to the object. - * - * @param integer $id - * @param string $table Name of database table to use. - * @param DataSource $ds DataSource connection object. - */ - function __construct($id = false, $table = null, $ds = null) { - parent::__construct(); - - if (is_array($id) && isset($id['name'])) { - $options = array_merge(array('id' => false, 'table' => null, 'ds' => null, 'alias' => null), $id); - list($id, $table, $ds) = array($options['id'], $options['table'], $options['ds']); - $this->name = $options['name']; - } - - if ($this->name === null) { - $this->name = get_class($this); - } - - if ($this->primaryKey === null) { - $this->primaryKey = 'id'; - } - - if (isset($options['alias']) || !empty($options['alias'])) { - $this->alias = $options['alias']; - unset($options); - } else { - $this->alias = $this->name; - } - ClassRegistry::addObject($this->alias, $this); - - $this->id = $id; - unset($id); - - if ($table === false) { - $this->useTable = false; - } elseif ($table) { - $this->useTable = $table; - } - - if ($this->useTable !== false) { - $this->setDataSource($ds); - - if ($this->useTable === null) { - $this->useTable = Inflector::tableize($this->name); - } - - if (in_array('settableprefix', get_class_methods($this))) { - $this->setTablePrefix(); - } - - $this->setSource($this->useTable); - $this->__createLinks(); - - if ($this->displayField == null) { - if ($this->hasField('title')) { - $this->displayField = 'title'; - } - - if ($this->hasField('name')) { - $this->displayField = 'name'; - } - - if ($this->displayField == null) { - $this->displayField = $this->primaryKey; - } - } - } - } - -/** - * PHP4 Only - * - * Handles custom method calls, like findBy for DB models, - * and custom RPC calls for remote data sources - * - * @param unknown_type $method - * @param unknown_type $params - * @param unknown_type $return - * @return unknown - * @access protected - */ - function __call($method, $params, &$return) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - $return = $db->query($method, $params, $this); - if (isset($this->__backAssociation)) { - $this->__resetAssociations(); - } - return true; - } -/** - * Bind model associations on the fly. - * - * @param array $params - * @return true - * @access public - */ - function bindModel($params) { - foreach ($params as $assoc => $model) { - if(!isset($this->__backAssociation[$assoc])) { - $this->__backAssociation[$assoc] = $this->{$assoc}; - } - - foreach ($model as $key => $value) { - $assocName = $key; - - if (is_numeric($key)) { - $assocName = $value; - $value = array(); - } - $modelName = $assocName; - $this->{$assoc}[$assocName] = $value; - } - } - $this->__createLinks(); - return true; - } -/** - * Turn off associations on the fly. - * - * @param array $params - * @return true - * @access public - */ - function unbindModel($params) { - foreach ($params as $assoc => $models) { - if(!isset($this->__backAssociation[$assoc])) { - $this->__backAssociation[$assoc] = $this->{$assoc}; - } - - foreach ($models as $model) { - $this->__backAssociation = array_merge($this->__backAssociation, $this->{$assoc}); - unset ($this->{$assoc}[$model]); - } - } - return true; - } -/** - * Private helper method to create a set of associations. - * - * @access private - */ - function __createLinks() { - - foreach ($this->__associations as $type) { - if (!is_array($this->{$type})) { - $this->{$type} = explode(',', $this->{$type}); - - foreach ($this->{$type} as $i => $className) { - $className = trim($className); - unset ($this->{$type}[$i]); - $this->{$type}[$className] = array(); - } - } - - foreach ($this->{$type} as $assoc => $value) { - if (is_numeric($assoc)) { - unset ($this->{$type}[$assoc]); - $assoc = $value; - $value = array(); - $this->{$type}[$assoc] = $value; - } - - $className = $assoc; - - if (isset($value['className']) && !empty($value['className'])) { - $className = $value['className']; - } - $this->__constructLinkedModel($assoc, $className); - } - } - - foreach ($this->__associations as $type) { - $this->__generateAssociation($type); - } - } - -/** - * Private helper method to create associated models of given class. - * @param string $assoc - * @param string $className Class name - * @param string $type Type of assocation - * @access private - */ - function __constructLinkedModel($assoc, $className) { - if(empty($className)) { - $className = $assoc; - } - - if (!class_exists($className)) { - loadModel($className); - } - $colKey = Inflector::underscore($className); - $model = array('name' => $className, 'alias' => $assoc); - - if (ClassRegistry::isKeySet($colKey)) { - $this->{$assoc} =& ClassRegistry::getObject($colKey); - $this->{$className} =& $this->{$assoc}; - } else { - $this->{$assoc} =& new $className($model); - $this->{$className} =& $this->{$assoc}; - } - $this->tableToModel[$this->{$assoc}->table] = $className; - $this->modelToTable[$assoc] = $this->{$assoc}->table; - } -/** - * Build array-based association from string. - * - * @param string $type "Belongs", "One", "Many", "ManyTo" - * @access private - */ - function __generateAssociation($type) { - foreach ($this->{$type}as $assocKey => $assocData) { - $class = $assocKey; - - foreach ($this->__associationKeys[$type] as $key) { - if (!isset($this->{$type}[$assocKey][$key]) || $this->{$type}[$assocKey][$key] == null) { - $data = ''; - - switch($key) { - case 'fields': - $data = ''; - break; - - case 'foreignKey': - $data = Inflector::singularize($this->table) . '_id'; - - if ($type == 'belongsTo') { - $data = Inflector::singularize($this->{$class}->table) . '_id'; - } - break; - - case 'associationForeignKey': - $data = Inflector::singularize($this->{$class}->table) . '_id'; - break; - - case 'joinTable': - $tables = array($this->table, $this->{$class}->table); - sort ($tables); - $data = $tables[0] . '_' . $tables[1]; - break; - - case 'className': - $data = $class; - break; - } - - $this->{$type}[$assocKey][$key] = $data; - } - - if ($key == 'foreignKey' && !isset($this->keyToTable[$this->{$type}[$assocKey][$key]])) { - $this->keyToTable[$this->{$type}[$assocKey][$key]][0] = $this->{$class}->table; - $this->keyToTable[$this->{$type}[$assocKey][$key]][1] = $this->{$class}->alias; - } - } - } - } -/** - * Sets a custom table for your controller class. Used by your controller to select a database table. - * - * @param string $tableName Name of the custom table - * @access public - */ - function setSource($tableName) { - $this->setDataSource($this->useDbConfig); - $db =& ConnectionManager::getDataSource($this->useDbConfig); - $db->cacheSources = $this->cacheSources; - - if ($db->isInterfaceSupported('listSources')) { - $sources = $db->listSources(); - if (is_array($sources) && !in_array(low($this->tablePrefix . $tableName), array_map('low', $sources))) { - return $this->cakeError('missingTable', array(array( - 'className' => $this->alias, - 'table' => $this->tablePrefix . $tableName))); - - } - $this->_tableInfo = null; - } - $this->table = $this->useTable = $tableName; - $this->tableToModel[$this->table] = $this->alias; - $this->loadInfo(); - } -/** - * This function does two things: 1) it scans the array $one for the primary key, - * and if that's found, it sets the current id to the value of $one[id]. - * For all other keys than 'id' the keys and values of $one are copied to the 'data' property of this object. - * 2) Returns an array with all of $one's keys and values. - * (Alternative indata: two strings, which are mangled to - * a one-item, two-dimensional array using $one for a key and $two as its value.) - * - * @param mixed $one Array or string of data - * @param string $two Value string for the alternative indata method - * @return array - * @access public - */ - function set($one, $two = null) { - if (is_array($one)) { - if (countdim($one) == 1) { - $data = array($this->alias => $one); - } else { - $data = $one; - } - } else { - $data = array($this->alias => array($one => $two)); - } - - foreach ($data as $n => $v) { - if (is_array($v)) { - - foreach ($v as $x => $y) { - if (empty($this->whitelist) || (in_array($x, $this->whitelist) || $n !== $this->alias)) { - if (isset($this->validationErrors[$x])) { - unset ($this->validationErrors[$x]); - } - - if ($n == $this->name || is_array($y)) { - if ($x === $this->primaryKey) { - $this->id = $y; - } - $this->data[$n][$x] = $y; - } - } - } - } - } - return $data; - } -/** - * Returns an array of table metadata (column names and types) from the database. - * - * @return array Array of table metadata - * @access public - */ - function loadInfo() { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - $db->cacheSources = $this->cacheSources; - - if (!is_object($this->_tableInfo) && $db->isInterfaceSupported('describe') && $this->useTable !== false) { - $info = new Set($db->describe($this)); - - foreach($info->value as $field => $value) { - $fields[] = am(array('name'=> $field), $value); - } - unset($info); - $this->_tableInfo = new Set($fields); - } elseif ($this->useTable === false) { - $this->_tableInfo = new Set(); - } - return $this->_tableInfo; - } -/** - * Returns an associative array of field names and column types. - * - * @return array - * @access public - */ - function getColumnTypes() { - $columns = $this->loadInfo(); - $columns = $columns->value; - $db =& ConnectionManager::getDataSource($this->useDbConfig); - $cols = array(); - - foreach ($columns as $col) { - $cols[$col['name']] = $col['type']; - } - return $cols; - } -/** - * Returns the column type of a column in the model - * - * @param string $column The name of the model column - * @return string - * @access public - */ - function getColumnType($column) { - $columns = $this->loadInfo(); - $columns = $columns->value; - $cols = array(); - - foreach ($columns as $col) { - if ($col['name'] == $column) { - return $col['type']; - } - } - return null; - } -/** - * Returns true if this Model has given field in its database table. - * - * @param string $name Name of field to look for - * @return boolean - * @access public - */ - function hasField($name) { - if (is_array($name)) { - foreach ($name as $n) { - if ($this->hasField($n)) { - return $n; - } - } - return false; - } - - if (empty($this->_tableInfo)) { - $this->loadInfo(); - } - - if ($this->_tableInfo != null) { - return in_array($name, $this->_tableInfo->extract('{n}.name')); - } - return false; - } -/** - * Initializes the model for writing a new record. - * - * @return boolean True - * @access public - */ - function create() { - $this->id = false; - unset ($this->data); - $this->data = $this->validationErrors = array(); - return true; - } -/** - * @deprecated - */ - function setId($id) { - $this->id = $id; - } -/** - * Use query() instead. - * @deprecated - */ - function findBySql($sql) { - return $this->query($sql); - } -/** - * Returns a list of fields from the database - * - * @param mixed $id The ID of the record to read - * @param mixed $fields String of single fieldname, or an array of fieldnames. - * @return array Array of database fields - * @access public - */ - function read($fields = null, $id = null) { - $this->validationErrors = array(); - - if ($id != null) { - $this->id = $id; - } - - $id = $this->id; - - if (is_array($this->id)) { - $id = $this->id[0]; - } - - if ($this->id !== null && $this->id !== false) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - $field = $db->name($this->alias) . '.' . $db->name($this->primaryKey); - return $this->find($field . ' = ' . $db->value($id, $this->getColumnType($this->primaryKey)), $fields); - } else { - return false; - } - } -/** - * Returns contents of a field in a query matching given conditions. - * - * @param string $name Name of field to get - * @param array $conditions SQL conditions (defaults to NULL) - * @param string $order SQL ORDER BY fragment - * @return field contents - * @access public - */ - function field($name, $conditions = null, $order = null) { - if ($conditions === null && $this->id !== false) { - $conditions = array($this->alias . '.' . $this->primaryKey => $this->id); - } - - if ($data = $this->find($conditions, $name, $order, 0)) { - - if (strpos($name, '.') === false) { - if (isset($data[$this->alias][$name])) { - return $data[$this->alias][$name]; - } else { - return false; - } - } else { - $name = explode('.', $name); - - if (isset($data[$name[0]][$name[1]])) { - return $data[$name[0]][$name[1]]; - } else { - return false; - } - } - } else { - return false; - } - } -/** - * Saves a single field to the database. - * - * @param string $name Name of the table field - * @param mixed $value Value of the field - * @param boolean $validate Whether or not this model should validate before saving (defaults to false) - * @return boolean True on success save - * @access public - */ - function saveField($name, $value, $validate = false) { - return $this->save(array($this->alias => array($name => $value)), $validate); - } -/** - * Saves model data to the database. - * By default, validation occurs before save. - * - * @param array $data Data to save. - * @param boolean $validate If set, validation will be done before the save - * @param array $fieldList List of fields to allow to be written - * @return boolean success - * @access public - */ - function save($data = null, $validate = true, $fieldList = array()) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - $_whitelist = $this->whitelist; - - if (!empty($fieldList)) { - $this->whitelist = $fieldList; - } elseif ($fieldList === null) { - $this->whitelist = array(); - } - - if ($data) { - if (countdim($data) == 1) { - $this->set(array($this->alias => $data)); - } else { - $this->set($data); - } - } - - if ($validate && !$this->validates()) { - $this->whitelist = $_whitelist; - return false; - } - - if (!$this->beforeSave()) { - $this->whitelist = $_whitelist; - return false; - } - $fields = $values = array(); - - if (isset($this->data[$this->alias][$this->primaryKey]) && empty($this->data[$this->alias][$this->primaryKey])) { - unset($this->data[$this->alias][$this->primaryKey]); - } - - if (count($this->data) > 1) { - $weHaveMulti = true; - $joined = false; - } else { - $weHaveMulti = false; - } - - foreach ($this->data as $n => $v) { - if (isset($weHaveMulti) && isset($v[$n]) && in_array($n, array_keys($this->hasAndBelongsToMany))) { - $joined[] = $v; - } else { - if ($n === $this->alias) { - foreach (array('created', 'updated', 'modified') as $field) { - if (array_key_exists($field, $v) && (empty($v[$field]) || $v[$field] === null)) { - unset($v[$field]); - } - } - - foreach ($v as $x => $y) { - if ($this->hasField($x)) { - $fields[] = $x; - $values[] = $y; - } - } - } - } - } - $exists = $this->exists(); - - if (!$exists && $this->hasField('created') && !in_array('created', $fields)) { - $fields[] = 'created'; - $values[] = date('Y-m-d H:i:s'); - } - - if ($this->hasField('modified') && !in_array('modified', $fields)) { - $fields[] = 'modified'; - $values[] = date('Y-m-d H:i:s'); - } - - if ($this->hasField('updated') && !in_array('updated', $fields)) { - $fields[] = 'updated'; - $values[] = date('Y-m-d H:i:s'); - } - - if (!$exists) { - $this->id = false; - } - $this->whitelist = $_whitelist; - - if (count($fields)) { - if (!empty($this->id)) { - if ($db->update($this, $fields, $values)) { - if (!empty($joined)) { - $this->__saveMulti($joined, $this->id); - } - - $this->afterSave(); - $this->data = false; - $this->_clearCache(); - return true; - } else { - return false; - } - } else { - if ($db->create($this, $fields, $values)) { - if (!empty($joined)) { - $this->__saveMulti($joined, $this->id); - } - - $this->afterSave(); - $this->data = false; - $this->_clearCache(); - $this->validationErrors = array(); - return true; - } else { - return false; - } - } - } else { - return false; - } - } -/** - * Saves model hasAndBelongsToMany data to the database. - * - * @param array $joined Data to save. - * @param string $id - * @return void - * @access private - */ - function __saveMulti($joined, $id) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - foreach ($joined as $x => $y) { - foreach ($y as $assoc => $value) { - if (isset($this->hasAndBelongsToMany[$assoc])) { - $joinTable[$assoc] = $this->hasAndBelongsToMany[$assoc]['joinTable']; - $mainKey[$assoc] = $this->hasAndBelongsToMany[$assoc]['foreignKey']; - $keys[] = $this->hasAndBelongsToMany[$assoc]['foreignKey']; - $keys[] = $this->hasAndBelongsToMany[$assoc]['associationForeignKey']; - $fields[$assoc] = join(',', $keys); - unset($keys); - - foreach ($value as $update) { - if (!empty($update)) { - $values[] = $db->value($id, $this->getColumnType($this->primaryKey)); - $values[] = $db->value($update); - $values = join(',', $values); - $newValues[] = "({$values})"; - unset ($values); - } - } - - if (!empty($newValues)) { - $newValue[$assoc] = $newValues; - unset($newValues); - } else { - $newValue[$assoc] = array(); - } - } - } - } - - if (isset($joinTable)) { - $total = count($joinTable); - - if (is_array($newValue)) { - foreach ($newValue as $loopAssoc => $val) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - $table = $db->name($db->fullTableName($joinTable[$loopAssoc])); - $db->query("DELETE FROM {$table} WHERE {$mainKey[$loopAssoc]} = '{$id}'"); - - if (!empty($newValue[$loopAssoc])) { - $secondCount = count($newValue[$loopAssoc]); - for ($x = 0; $x < $secondCount; $x++) { - $db->query("INSERT INTO {$table} ({$fields[$loopAssoc]}) VALUES {$newValue[$loopAssoc][$x]}"); - } - } - } - } - } - } -/** - * Synonym for del(). - * - * @param mixed $id - * @see function del - * @return boolean True on success - * @access public - */ - function remove($id = null, $cascade = true) { - return $this->del($id, $cascade); - } -/** - * Removes record for given id. If no id is given, the current id is used. Returns true on success. - * - * @param mixed $id Id of record to delete - * @return boolean True on success - * @access public - */ - function del($id = null, $cascade = true) { - if ($id) { - $this->id = $id; - } - $id = $this->id; - - if ($this->exists() && $this->beforeDelete()) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - - $this->_deleteMulti($id); - $this->_deleteHasMany($id, $cascade); - $this->_deleteHasOne($id, $cascade); - $this->id = $id; - - if ($db->delete($this)) { - $this->afterDelete(); - $this->_clearCache(); - $this->id = false; - return true; - } - } - - return false; - } -/** - * Alias for del() - * - * @param mixed $id Id of record to delete - * @return boolean True on success - * @access public - */ - function delete($id = null, $cascade = true) { - return $this->del($id, $cascade); - } -/** - * Cascades model deletes to hasMany relationships. - * - * @param string $id - * @return null - * @access protected - */ - function _deleteHasMany($id, $cascade) { - if (!empty($this->__backAssociation)) { - $savedAssociatons = $this->__backAssociation; - $this->__backAssociation = array(); - } - foreach ($this->hasMany as $assoc => $data) { - if ($data['dependent'] === true && $cascade === true) { - $model =& $this->{$data['className']}; - $field = $model->escapeField($data['foreignKey']); - $model->recursive = 0; - $records = $model->findAll("$field = '$id'", $model->primaryKey, null, null); - - if ($records != false) { - foreach ($records as $record) { - $model->del($record[$data['className']][$model->primaryKey]); - } - } - } - } - if (isset($savedAssociatons)) { - $this->__backAssociation = $savedAssociatons; - } - } -/** - * Cascades model deletes to hasOne relationships. - * - * @param string $id - * @return null - * @access protected - */ - function _deleteHasOne($id, $cascade) { - if (!empty($this->__backAssociation)) { - $savedAssociatons = $this->__backAssociation; - $this->__backAssociation = array(); - } - foreach ($this->hasOne as $assoc => $data) { - if ($data['dependent'] === true && $cascade === true) { - $model =& $this->{$data['className']}; - $field = $model->escapeField($data['foreignKey']); - $model->recursive = 0; - $records = $model->findAll("$field = '$id'", $model->primaryKey, null, null); - - if ($records != false) { - foreach ($records as $record) { - $model->del($record[$data['className']][$model->primaryKey]); - } - } - } - } - if (isset($savedAssociatons)) { - $this->__backAssociation = $savedAssociatons; - } - } -/** - * Cascades model deletes to HABTM join keys. - * - * @param string $id - * @return null - * @access protected - */ - function _deleteMulti($id) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - foreach ($this->hasAndBelongsToMany as $assoc => $data) { - $db->execute("DELETE FROM " . $db->name($db->fullTableName($data['joinTable'])) . " WHERE " . $db->name($data['foreignKey']) . " = '{$id}'"); - } - } -/** - * Returns true if a record with set id exists. - * - * @return boolean True if such a record exists - * @access public - */ - function exists() { - if ($this->id) { - $id = $this->id; - - if (is_array($id)) { - $id = $id[0]; - } - - $db =& ConnectionManager::getDataSource($this->useDbConfig); - return $db->hasAny($this, array($this->primaryKey => $id)); - } - return false; - } -/** - * Returns true if a record that meets given conditions exists - * - * @param array $conditions SQL conditions array - * @return boolean True if such a record exists - * @access public - */ - function hasAny($conditions = null) { - return ($this->findCount($conditions) != false); - } -/** - * Return a single row as a resultset array. - * By using the $recursive parameter, the call can access further "levels of association" than - * the ones this model is directly associated to. - * - * @param array $conditions SQL conditions array - * @param mixed $fields Either a single string of a field name, or an array of field names - * @param string $order SQL ORDER BY conditions (e.g. "price DESC" or "name ASC") - * @param int $recursive The number of levels deep to fetch associated records - * @return array Array of records - * @access public - */ - function find($conditions = null, $fields = null, $order = null, $recursive = null) { - $data = $this->findAll($conditions, $fields, $order, 1, null, $recursive); - - if (empty($data[0])) { - return false; - } - - return $data[0]; - } -/** - * Returns a resultset array with specified fields from database matching given conditions. - * By using the $recursive parameter, the call can access further "levels of association" than - * the ones this model is directly associated to. - * - * @param mixed $conditions SQL conditions as a string or as an array('field' =>'value',...) - * @param mixed $fields Either a single string of a field name, or an array of field names - * @param string $order SQL ORDER BY conditions (e.g. "price DESC" or "name ASC") - * @param int $limit SQL LIMIT clause, for calculating items per page. - * @param int $page Page number, for accessing paged data - * @param int $recursive The number of levels deep to fetch associated records - * @return array Array of records - * @access public - */ - function findAll($conditions = null, $fields = null, $order = null, $limit = null, $page = 1, $recursive = null) { - - $db =& ConnectionManager::getDataSource($this->useDbConfig); - $this->id = $this->getID(); - $offset = null; - - if ($page > 1 && $limit != null) { - $offset = ($page - 1) * $limit; - } - - if ($order == null) { - $order = array(); - } else { - $order = array($order); - } - - $queryData = array('conditions' => $conditions, - 'fields' => $fields, - 'joins' => array(), - 'limit' => $limit, - 'offset' => $offset, - 'order' => $order - ); - - $ret = $this->beforeFind($queryData); - if (is_array($ret)) { - $queryData = $ret; - } elseif ($ret === false) { - return null; - } - - $return = $this->afterFind($db->read($this, $queryData, $recursive)); - - if (!empty($this->__backAssociation)) { - $this->__resetAssociations(); - } - - return $return; - } -/** - * Method is called only when bindTo() is used. - * This resets the association arrays for the model back - * to the original as set in the model. - * - * @return boolean - * @access private - */ - function __resetAssociations() { - foreach ($this->__associations as $type) { - if (isset($this->__backAssociation[$type])) { - $this->{$type} = $this->__backAssociation[$type]; - } - } - - $this->__backAssociation = array(); - return true; - } -/** - * Runs a direct query against the bound DataSource, and returns the result. - * - * @param string $data Query data - * @return array - * @access public - */ - function execute($data) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - $data = $db->fetchAll($data, $this->cacheQueries); - - foreach ($data as $key => $value) { - foreach ($this->tableToModel as $key1 => $value1) { - if (isset($data[$key][$key1])) { - $newData[$key][$value1] = $data[$key][$key1]; - } - } - } - - if (!empty($newData)) { - return $newData; - } - - return $data; - } -/** - * Returns number of rows matching given SQL condition. - * - * @param array $conditions SQL conditions array for findAll - * @param int $recursize The number of levels deep to fetch associated records - * @return int Number of matching rows - * @see Model::findAll - * @access public - */ - function findCount($conditions = null, $recursive = 0) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - - list($data) = $this->findAll($conditions, 'COUNT(*) AS ' . $db->name('count'), null, null, 1, $recursive); - - if (isset($data[0]['count'])) { - return $data[0]['count']; - } elseif (isset($data[$this->alias]['count'])) { - return $data[$this->alias]['count']; - } - - return false; - } -/** - * Special findAll variation for tables joined to themselves. - * The table needs the fields id and parent_id to work. - * - * @param array $conditions Conditions for the findAll() call - * @param array $fields Fields for the findAll() call - * @param string $sort SQL ORDER BY statement - * @return array - * @access public - * @todo Perhaps create a Component with this logic - */ - function findAllThreaded($conditions = null, $fields = null, $sort = null) { - return $this->__doThread(Model::findAll($conditions, $fields, $sort), null); - } -/** - * Private, recursive helper method for findAllThreaded. - * - * @param array $data - * @param string $root NULL or id for root node of operation - * @return array - * @access private - * @see findAllThreaded - */ - function __doThread($data, $root) { - $out = array(); - $sizeOf = sizeof($data); - - for ($ii = 0; $ii < $sizeOf; $ii++) { - if (($data[$ii][$this->alias]['parent_id'] == $root) || (($root === null) && ($data[$ii][$this->alias]['parent_id'] == '0'))) { - $tmp = $data[$ii]; - - if (isset($data[$ii][$this->alias][$this->primaryKey])) { - $tmp['children'] = $this->__doThread($data, $data[$ii][$this->alias][$this->primaryKey]); - } else { - $tmp['children'] = null; - } - - $out[] = $tmp; - } - } - - return $out; - } -/** - * Returns an array with keys "prev" and "next" that holds the id's of neighbouring data, - * which is useful when creating paged lists. - * - * @param string $conditions SQL conditions for matching rows - * @param string $field Field name (parameter for findAll) - * @param unknown_type $value - * @return array Array with keys "prev" and "next" that holds the id's - * @access public - */ - function findNeighbours($conditions = null, $field, $value) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - - if (!is_null($conditions)) { - $conditions = $conditions . ' AND '; - } - - @list($prev) = Model::findAll($conditions . $field . ' < ' . $db->value($value), $field, $field . ' DESC', 1, null, 0); - @list($next) = Model::findAll($conditions . $field . ' > ' . $db->value($value), $field, $field . ' ASC', 1, null, 0); - - if (!isset($prev)) { - $prev = null; - } - - if (!isset($next)) { - $next = null; - } - - return array('prev' => $prev, 'next' => $next); - } -/** - * Returns a resultset for given SQL statement. Generic SQL queries should be made with this method. - * - * @param string $sql SQL statement - * @return array Resultset - * @access public - */ - function query() { - $params = func_get_args(); - $db =& ConnectionManager::getDataSource($this->useDbConfig); - return call_user_func_array(array(&$db, 'query'), $params); - } -/** - * Returns true if all fields pass validation, otherwise false. - * - * @param array $data POST data - * @return boolean True if there are no errors - * @access public - */ - function validates($data = array()) { - $errors = $this->invalidFields($data); - return count($errors) == 0; - } -/** - * Returns an array of invalid fields. - * - * @param array $data - * @return array Array of invalid fields or boolean case any error occurs - * @access public - */ - function invalidFields($data = array()) { - if (empty($data)) { - $data = $this->data; - } - - if (!$this->beforeValidate()) { - return $this->validationErrors; - } - - if (!isset($this->validate)) { - return $this->validationErrors; - } - - if (!empty($data)) { - $data = $data; - } elseif (isset($this->data)) { - $data = $this->data; - } - - if (isset($data[$this->alias])) { - $data = $data[$this->alias]; - } - - foreach ($this->validate as $field_name => $validator) { - if (isset($data[$field_name]) && !preg_match($validator, $data[$field_name])) { - $this->invalidate($field_name); - } - } - return $this->validationErrors; - } -/** - * Sets a field as invalid - * - * @param string $field The name of the field to invalidate - * @return void - * @access public - */ - function invalidate($field) { - if (!is_array($this->validationErrors)) { - $this->validationErrors = array(); - } - $this->validationErrors[$field] = 1; - } -/** - * Returns true if given field name is a foreign key in this Model. - * - * @param string $field Returns true if the input string ends in "_id" - * @return True if the field is a foreign key listed in the belongsTo array. - * @access public - */ - function isForeignKey($field) { - $foreignKeys = array(); - - if (count($this->belongsTo)) { - foreach ($this->belongsTo as $assoc => $data) { - $foreignKeys[] = $data['foreignKey']; - } - } - return (bool)(in_array($field, $foreignKeys)); - } -/** - * Gets the display field for this model - * - * @return string The name of the display field for this Model (i.e. 'name', 'title'). - * @access public - */ - function getDisplayField() { - return $this->displayField; - } -/** - * Returns a resultset array with specified fields from database matching given conditions. - * Method can be used to generate option lists for SELECT elements. - * - * @param mixed $conditions SQL conditions as a string or as an array('field' =>'value',...) - * @param string $order SQL ORDER BY conditions (e.g. "price DESC" or "name ASC") - * @param int $limit SQL LIMIT clause, for calculating items per page - * @param string $keyPath A string path to the key, i.e. "{n}.Post.id" - * @param string $valuePath A string path to the value, i.e. "{n}.Post.title" - * @return array An associative array of records, where the id is the key, and the display field is the value - * @access public - */ - function generateList($conditions = null, $order = null, $limit = null, $keyPath = null, $valuePath = null) { - if ($keyPath == null && $valuePath == null && $this->hasField($this->displayField)) { - $fields = array($this->primaryKey, $this->displayField); - } else { - $fields = null; - } - $recursive = $this->recursive; - - if ($recursive >= 1) { - $this->recursive = -1; - } - $result = $this->findAll($conditions, $fields, $order, $limit); - $this->recursive = $recursive; - - if (!$result) { - return false; - } - - if ($keyPath == null) { - $keyPath = '{n}.' . $this->alias . '.' . $this->primaryKey; - } - - if ($valuePath == null) { - $valuePath = '{n}.' . $this->alias . '.' . $this->displayField; - } - - $keys = Set::extract($result, $keyPath); - $vals = Set::extract($result, $valuePath); - - if (!empty($keys) && !empty($vals)) { - $return = array_combine($keys, $vals); - return $return; - } - return null; - } -/** - * Escapes the field name and prepends the model name. Escaping will be done according to the current database driver's rules. - * - * @param unknown_type $field - * @return string The name of the escaped field for this Model (i.e. id becomes `Post`.`id`). - * @access public - */ - function escapeField($field) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - return $db->name($this->alias) . '.' . $db->name($field); - } -/** - * Returns the current record's ID - * - * @param unknown_type $list - * @return mixed The ID of the current record - * @access public - */ - function getID($list = 0) { - if (!is_array($this->id)) { - return $this->id; - } - - if (count($this->id) == 0) { - return false; - } - - if (isset($this->id[$list])) { - return $this->id[$list]; - } - - foreach ($this->id as $id) { - return $id; - } - - return false; - } -/** - * Returns the ID of the last record this Model inserted - * - * @return mixed - * @access public - */ - function getLastInsertID() { - return $this->getInsertID(); - } -/** - * Returns the ID of the last record this Model inserted - * - * @return mixed - * @access public - */ - function getInsertID() { - return $this->__insertID; - } -/** - * Sets the ID of the last record this Model inserted - * - * @param mixed $id - * @return void - */ - function setInsertID($id) { - $this->__insertID = $id; - } -/** - * Returns the number of rows returned from the last query - * - * @return int - * @access public - */ - function getNumRows() { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - return $db->lastNumRows(); - } -/** - * Returns the number of rows affected by the last query - * - * @return int - * @access public - */ - function getAffectedRows() { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - return $db->lastAffected(); - } -/** - * Sets the DataSource to which this model is bound - * - * @param string $dataSource The name of the DataSource, as defined in Connections.php - * @return boolean True on success - * @access public - */ - function setDataSource($dataSource = null) { - if ($dataSource != null) { - $this->useDbConfig = $dataSource; - } - $db =& ConnectionManager::getDataSource($this->useDbConfig); - - if (!empty($db->config['prefix']) && $this->tablePrefix === null) { - $this->tablePrefix = $db->config['prefix']; - } - - if (empty($db) || $db == null || !is_object($db)) { - return $this->cakeError('missingConnection', array(array('className' => $this->alias))); - } - } -/** - * Before find callback - * - * @param array $queryData Data used to execute this query, i.e. conditions, order, etc. - * @return boolean True if the operation should continue, false if it should abort - * @access public - */ - function beforeFind(&$queryData) { - return true; - } -/** - * After find callback. Can be used to modify any results returned by find and findAll. - * - * @param mixed $results The results of the find operation - * @return mixed Result of the find operation - * @access public - */ - function afterFind($results) { - return $results; - } -/** - * Before save callback - * - * @return boolean True if the operation should continue, false if it should abort - * @access public - */ - function beforeSave() { - return true; - } -/** - * After save callback - * - * @return boolean - * @access public - */ - function afterSave() { - return true; - } -/** - * Before delete callback - * - * @return boolean True if the operation should continue, false if it should abort - * @access public - */ - function beforeDelete() { - return true; - } -/** - * After delete callback - * - * @return boolean - * @access public - */ - function afterDelete() { - return true; - } -/** - * Before validate callback - * - * @return boolean - * @access public - */ - function beforeValidate() { - return true; - } -/** - * DataSource error callback - * - * @return void - */ - function onError() { - } -/** - * Private method. Clears cache for this model - * - * @param string $type If null this deletes cached views if CACHE_CHECK is true - * Will be used to allow deleting query cache also - * @return boolean true on delete - * @access protected - */ - function _clearCache($type = null) { - if ($type === null) { - if (defined('CACHE_CHECK') && CACHE_CHECK === true) { - $assoc[] = strtolower(Inflector::pluralize($this->alias)); - - foreach ($this->__associations as $key => $association) { - foreach ($this->$association as $key => $className) { - $check = strtolower(Inflector::pluralize($className['className'])); - - if (!in_array($check, $assoc)) { - $assoc[] = strtolower(Inflector::pluralize($className['className'])); - } - } - } - clearCache($assoc); - return true; - } - } else { - //Will use for query cache deleting - } - } -/** - * Called when serializing a model - * - * @return array - * @access public - */ - function __sleep() { - $return = array_keys(get_object_vars($this)); - return $return; - } -/** - * Called when unserializing a model - * - * @return void - * @access public - */ - function __wakeup() { - } -} -// --- PHP4 Only -overload ('Model'); -// --- PHP4 Only - -?> diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/model_php5.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/model_php5.php deleted file mode 100644 index 55a4594..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/model/model_php5.php +++ /dev/null @@ -1,1716 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.model - * @since CakePHP(tm) v 0.10.0.0 - * @version $Revision: 7691 $ - * @modifiedby $LastChangedBy: nate $ - * @lastmodified $Date: 2008-10-02 00:59:12 -0400 (Thu, 02 Oct 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Included libs - */ -uses('class_registry', 'validators', 'model' . DS . 'connection_manager', 'set'); -/** - * Object-relational mapper. - * - * DBO-backed object data model. - * Automatically selects a database table name based on a pluralized lowercase object class name - * (i.e. class 'User' => table 'users'; class 'Man' => table 'men') - * The table is required to have at least 'id auto_increment', 'created datetime', - * and 'modified datetime' fields. - * - * @package cake - * @subpackage cake.cake.libs.model - */ -class Model extends Object{ -/** - * The name of the DataSource connection that this Model uses - * - * @var string - * @access public - */ - var $useDbConfig = 'default'; -/** - * Custom database table name. - * - * @var string - * @access public - */ - var $useTable = null; -/** - * Custom display field name. Display fields are used by Scaffold, in SELECT boxes' OPTION elements. - * - * @var string - * @access public - */ - var $displayField = null; - -/** - * Value of the primary key ID of the record that this model is currently pointing to - * - * @var string - * @access public - */ - var $id = false; -/** - * Container for the data that this model gets from persistent storage (the database). - * - * @var array - * @access public - */ - var $data = array(); -/** - * Table name for this Model. - * - * @var string - * @access public - */ - var $table = false; -/** - * The name of the ID field for this Model. - * - * @var string - * @access public - */ - var $primaryKey = null; -/** - * Table metadata - * - * @var array - * @access protected - */ - var $_tableInfo = null; -/** - * List of validation rules. Append entries for validation as ('field_name' => '/^perl_compat_regexp$/') - * that have to match with preg_match(). Use these rules with Model::validate() - * - * @var array - * @access public - */ - var $validate = array(); -/** - * Errors in validation - * @var array - * @access public - */ - var $validationErrors = array(); -/** - * Database table prefix for tables in model. - * - * @var string - * @access public - */ - var $tablePrefix = null; -/** - * Name of the model. - * - * @var string - * @access public - */ - var $name = null; -/** - * Name of the current model. - * - * @var string - * @access public - */ - var $currentModel = null; -/** - * List of table names included in the Model description. Used for associations. - * - * @var array - * @access public - */ - var $tableToModel = array(); -/** - * List of Model names by used tables. Used for associations. - * - * @var array - * @access public - */ - var $modelToTable = array(); -/** - * List of Foreign Key names to used tables. Used for associations. - * - * @var array - * @access public - */ - var $keyToTable = array(); -/** - * Alias name for model. - * - * @var array - * @access public - */ - var $alias = null; -/** - * Whether or not transactions for this model should be logged - * - * @var boolean - * @access public - */ - var $logTransactions = false; -/** - * Whether or not to enable transactions for this model (i.e. BEGIN/COMMIT/ROLLBACK) - * - * @var boolean - * @access public - */ - var $transactional = false; -/** - * Whether or not to cache queries for this model. This enables in-memory - * caching only, the results are not stored beyond this execution. - * - * @var boolean - * @access public - */ - var $cacheQueries = true; -/** - * belongsTo association - * - * @var array - * @access public - */ - var $belongsTo = array(); -/** - * hasOne association - * - * @var array - * @access public - */ - var $hasOne = array(); -/** - * hasMany association - * - * @var array - * @access public - */ - var $hasMany = array(); -/** - * hasAndBelongsToMany association - * - * @var array - * @access public - */ - var $hasAndBelongsToMany = array(); -/** - * Depth of recursive association - * - * @var int - * @access public - */ - var $recursive = 1; -/** - * Whitelist of fields allowed to be saved - * - * @var array - */ - var $whitelist = array(); -/** - * Enter description here... - * - * @var boolean - */ - var $cacheSources = true; -/** - * Default association keys - * - * @var array - * @access private - */ - var $__associationKeys = array('belongsTo' => array('className', 'foreignKey', 'conditions', 'fields', 'order', 'counterCache'), - 'hasOne' => array('className', 'foreignKey','conditions', 'fields','order', 'dependent'), - 'hasMany' => array('className', 'foreignKey', 'conditions', 'fields', 'order', 'limit', 'offset', 'dependent', 'exclusive', 'finderQuery', 'counterQuery'), - 'hasAndBelongsToMany' => array('className', 'joinTable', 'foreignKey', 'associationForeignKey', 'conditions', 'fields', 'order', 'limit', 'offset', 'unique', 'finderQuery', 'deleteQuery', 'insertQuery')); -/** - * Holds provided/generated association key names and other data for all associations - * - * @var array - * @access private - */ - var $__associations = array('belongsTo', 'hasOne', 'hasMany', 'hasAndBelongsToMany'); -/** - * The last inserted ID of the data that this model created - * - * @var int - * @access private - */ - var $__insertID = null; -/** - * The number of records returned by the last query - * - * @var int - * @access private - */ - var $__numRows = null; -/** - * The number of records affected by the last query - * - * @var int - * @access private - */ - var $__affectedRows = null; -/** - * Holds model associations temporarily to allow for dynamic (un)binding - * - * @var array - * @access private - */ - var $__backAssociation = array(); -/** - * Constructor. Binds the Model's database table to the object. - * - * @param integer $id - * @param string $table Name of database table to use. - * @param DataSource $ds DataSource connection object. - */ - function __construct($id = false, $table = null, $ds = null) { - parent::__construct(); - - if (is_array($id) && isset($id['name'])) { - $options = array_merge(array('id' => false, 'table' => null, 'ds' => null, 'alias' => null), $id); - list($id, $table, $ds) = array($options['id'], $options['table'], $options['ds']); - $this->name = $options['name']; - } - - if ($this->name === null) { - $this->name = get_class($this); - } - - if ($this->primaryKey === null) { - $this->primaryKey = 'id'; - } - - if (isset($options['alias']) || !empty($options['alias'])) { - $this->alias = $options['alias']; - unset($options); - } else { - $this->alias = $this->name; - } - ClassRegistry::addObject($this->alias, $this); - - $this->id = $id; - unset($id); - - if ($table === false) { - $this->useTable = false; - } elseif ($table) { - $this->useTable = $table; - } - - if ($this->useTable !== false) { - $this->setDataSource($ds); - - if ($this->useTable === null) { - $this->useTable = Inflector::tableize($this->name); - } - - if (in_array('settableprefix', get_class_methods($this))) { - $this->setTablePrefix(); - } - - $this->setSource($this->useTable); - $this->__createLinks(); - - if ($this->displayField == null) { - if ($this->hasField('title')) { - $this->displayField = 'title'; - } - - if ($this->hasField('name')) { - $this->displayField = 'name'; - } - - if ($this->displayField == null) { - $this->displayField = $this->primaryKey; - } - } - } - } - -/** - * Handles custom method calls, like findBy for DB models, - * and custom RPC calls for remote data sources - * - * @param unknown_type $method - * @param array $params - * @return unknown - * @access protected - */ - function __call($method, $params) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - return $db->query($method, $params, $this); - } -/** - * Bind model associations on the fly. - * - * @param array $params - * @return true - * @access public - */ - function bindModel($params) { - foreach ($params as $assoc => $model) { - if(!isset($this->__backAssociation[$assoc])) { - $this->__backAssociation[$assoc] = $this->{$assoc}; - } - - foreach ($model as $key => $value) { - $assocName = $key; - - if (is_numeric($key)) { - $assocName = $value; - $value = array(); - } - $modelName = $assocName; - $this->{$assoc}[$assocName] = $value; - } - } - $this->__createLinks(); - return true; - } -/** - * Turn off associations on the fly. - * - * @param array $params - * @return true - * @access public - */ - function unbindModel($params) { - foreach ($params as $assoc => $models) { - if(!isset($this->__backAssociation[$assoc])) { - $this->__backAssociation[$assoc] = $this->{$assoc}; - } - - foreach ($models as $model) { - $this->__backAssociation = array_merge($this->__backAssociation, $this->{$assoc}); - unset ($this->{$assoc}[$model]); - } - } - return true; - } -/** - * Private helper method to create a set of associations. - * - * @access private - */ - function __createLinks() { - - foreach ($this->__associations as $type) { - if (!is_array($this->{$type})) { - $this->{$type} = explode(',', $this->{$type}); - - foreach ($this->{$type} as $i => $className) { - $className = trim($className); - unset ($this->{$type}[$i]); - $this->{$type}[$className] = array(); - } - } - - foreach ($this->{$type} as $assoc => $value) { - if (is_numeric($assoc)) { - unset ($this->{$type}[$assoc]); - $assoc = $value; - $value = array(); - $this->{$type}[$assoc] = $value; - } - - $className = $assoc; - - if (isset($value['className']) && !empty($value['className'])) { - $className = $value['className']; - } - $this->__constructLinkedModel($assoc, $className); - } - } - - foreach ($this->__associations as $type) { - $this->__generateAssociation($type); - } - } - -/** - * Private helper method to create associated models of given class. - * @param string $assoc - * @param string $className Class name - * @param string $type Type of assocation - * @access private - */ - function __constructLinkedModel($assoc, $className) { - if(empty($className)) { - $className = $assoc; - } - - if (!class_exists($className)) { - loadModel($className); - } - $colKey = Inflector::underscore($className); - $model = array('name' => $className, 'alias' => $assoc); - - if (ClassRegistry::isKeySet($colKey)) { - $this->{$assoc} = ClassRegistry::getObject($colKey); - $this->{$className} = $this->{$assoc}; - } else { - $this->{$assoc} = new $className($model); - $this->{$className} = $this->{$assoc}; - } - $this->tableToModel[$this->{$assoc}->table] = $className; - $this->modelToTable[$assoc] = $this->{$assoc}->table; - } -/** - * Build array-based association from string. - * - * @param string $type "Belongs", "One", "Many", "ManyTo" - * @access private - */ - function __generateAssociation($type) { - foreach ($this->{$type}as $assocKey => $assocData) { - $class = $assocKey; - - foreach ($this->__associationKeys[$type] as $key) { - if (!isset($this->{$type}[$assocKey][$key]) || $this->{$type}[$assocKey][$key] == null) { - $data = ''; - - switch($key) { - case 'fields': - $data = ''; - break; - - case 'foreignKey': - $data = Inflector::singularize($this->table) . '_id'; - - if ($type == 'belongsTo') { - $data = Inflector::singularize($this->{$class}->table) . '_id'; - } - break; - - case 'associationForeignKey': - $data = Inflector::singularize($this->{$class}->table) . '_id'; - break; - - case 'joinTable': - $tables = array($this->table, $this->{$class}->table); - sort ($tables); - $data = $tables[0] . '_' . $tables[1]; - break; - - case 'className': - $data = $class; - break; - } - - $this->{$type}[$assocKey][$key] = $data; - } - - if ($key == 'foreignKey' && !isset($this->keyToTable[$this->{$type}[$assocKey][$key]])) { - $this->keyToTable[$this->{$type}[$assocKey][$key]][0] = $this->{$class}->table; - $this->keyToTable[$this->{$type}[$assocKey][$key]][1] = $this->{$class}->alias; - } - } - } - } -/** - * Sets a custom table for your controller class. Used by your controller to select a database table. - * - * @param string $tableName Name of the custom table - * @access public - */ - function setSource($tableName) { - $this->setDataSource($this->useDbConfig); - $db =& ConnectionManager::getDataSource($this->useDbConfig); - $db->cacheSources = $this->cacheSources; - - if ($db->isInterfaceSupported('listSources')) { - $sources = $db->listSources(); - if (is_array($sources) && !in_array(low($this->tablePrefix . $tableName), array_map('low', $sources))) { - return $this->cakeError('missingTable', array(array( - 'className' => $this->alias, - 'table' => $this->tablePrefix . $tableName))); - - } - $this->_tableInfo = null; - } - $this->table = $this->useTable = $tableName; - $this->tableToModel[$this->table] = $this->alias; - $this->loadInfo(); - } -/** - * This function does two things: 1) it scans the array $one for the primary key, - * and if that's found, it sets the current id to the value of $one[id]. - * For all other keys than 'id' the keys and values of $one are copied to the 'data' property of this object. - * 2) Returns an array with all of $one's keys and values. - * (Alternative indata: two strings, which are mangled to - * a one-item, two-dimensional array using $one for a key and $two as its value.) - * - * @param mixed $one Array or string of data - * @param string $two Value string for the alternative indata method - * @return array - * @access public - */ - function set($one, $two = null) { - if (is_array($one)) { - if (countdim($one) == 1) { - $data = array($this->alias => $one); - } else { - $data = $one; - } - } else { - $data = array($this->alias => array($one => $two)); - } - - foreach ($data as $n => $v) { - if (is_array($v)) { - - foreach ($v as $x => $y) { - if (empty($this->whitelist) || (in_array($x, $this->whitelist) || $n !== $this->alias)) { - if (isset($this->validationErrors[$x])) { - unset ($this->validationErrors[$x]); - } - - if ($n == $this->name || is_array($y)) { - if ($x === $this->primaryKey) { - $this->id = $y; - } - $this->data[$n][$x] = $y; - } - } - } - } - } - return $data; - } -/** - * Returns an array of table metadata (column names and types) from the database. - * - * @return array Array of table metadata - * @access public - */ - function loadInfo() { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - $db->cacheSources = $this->cacheSources; - - if (!is_object($this->_tableInfo) && $db->isInterfaceSupported('describe') && $this->useTable !== false) { - $info = new Set($db->describe($this)); - - foreach($info->value as $field => $value) { - $fields[] = am(array('name'=> $field), $value); - } - unset($info); - $this->_tableInfo = new Set($fields); - } elseif ($this->useTable === false) { - $this->_tableInfo = new Set(); - } - return $this->_tableInfo; - } -/** - * Returns an associative array of field names and column types. - * - * @return array - * @access public - */ - function getColumnTypes() { - $columns = $this->loadInfo(); - $columns = $columns->value; - $db =& ConnectionManager::getDataSource($this->useDbConfig); - $cols = array(); - - foreach ($columns as $col) { - $cols[$col['name']] = $col['type']; - } - return $cols; - } -/** - * Returns the column type of a column in the model - * - * @param string $column The name of the model column - * @return string - * @access public - */ - function getColumnType($column) { - $columns = $this->loadInfo(); - $columns = $columns->value; - $cols = array(); - - foreach ($columns as $col) { - if ($col['name'] == $column) { - return $col['type']; - } - } - return null; - } -/** - * Returns true if this Model has given field in its database table. - * - * @param string $name Name of field to look for - * @return boolean - * @access public - */ - function hasField($name) { - if (is_array($name)) { - foreach ($name as $n) { - if ($this->hasField($n)) { - return $n; - } - } - return false; - } - - if (empty($this->_tableInfo)) { - $this->loadInfo(); - } - - if ($this->_tableInfo != null) { - return in_array($name, $this->_tableInfo->extract('{n}.name')); - } - return false; - } -/** - * Initializes the model for writing a new record. - * - * @return boolean True - * @access public - */ - function create() { - $this->id = false; - unset ($this->data); - $this->data = $this->validationErrors = array(); - return true; - } -/** - * @deprecated - */ - function setId($id) { - $this->id = $id; - } -/** - * Use query() instead. - * @deprecated - */ - function findBySql($sql) { - return $this->query($sql); - } -/** - * Returns a list of fields from the database - * - * @param mixed $id The ID of the record to read - * @param mixed $fields String of single fieldname, or an array of fieldnames. - * @return array Array of database fields - * @access public - */ - function read($fields = null, $id = null) { - $this->validationErrors = array(); - - if ($id != null) { - $this->id = $id; - } - - $id = $this->id; - - if (is_array($this->id)) { - $id = $this->id[0]; - } - - if ($this->id !== null && $this->id !== false) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - $field = $db->name($this->alias) . '.' . $db->name($this->primaryKey); - return $this->find($field . ' = ' . $db->value($id, $this->getColumnType($this->primaryKey)), $fields); - } else { - return false; - } - } -/** - * Returns contents of a field in a query matching given conditions. - * - * @param string $name Name of field to get - * @param array $conditions SQL conditions (defaults to NULL) - * @param string $order SQL ORDER BY fragment - * @return field contents - * @access public - */ - function field($name, $conditions = null, $order = null) { - if ($conditions === null && $this->id !== false) { - $conditions = array($this->alias . '.' . $this->primaryKey => $this->id); - } - - if ($data = $this->find($conditions, $name, $order, 0)) { - - if (strpos($name, '.') === false) { - if (isset($data[$this->alias][$name])) { - return $data[$this->alias][$name]; - } else { - return false; - } - } else { - $name = explode('.', $name); - - if (isset($data[$name[0]][$name[1]])) { - return $data[$name[0]][$name[1]]; - } else { - return false; - } - } - } else { - return false; - } - } -/** - * Saves a single field to the database. - * - * @param string $name Name of the table field - * @param mixed $value Value of the field - * @param array $validate See $options param in Model::save(). Does not respect 'fieldList' key if passed - * @return boolean See Model::save() - * @access public - * @see Model::save() - */ - function saveField($name, $value, $validate = false) { - $id = $this->id; - $this->create(); - - if (is_array($validate)) { - $options = array_merge(array('validate' => false, 'fieldList' => array($name)), $validate); - } else { - $options = array('validate' => $validate, 'fieldList' => array($name)); - } - - return $this->save(array($this->alias => array($this->primaryKey => $id, $name => $value)), $options); - } -/** - * Saves model data to the database. - * By default, validation occurs before save. - * - * @param array $data Data to save. - * @param boolean $validate If set, validation will be done before the save - * @param array $fieldList List of fields to allow to be written - * @return boolean success - * @access public - */ - function save($data = null, $validate = true, $fieldList = array()) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - $_whitelist = $this->whitelist; - - if (!empty($fieldList)) { - $this->whitelist = $fieldList; - } elseif ($fieldList === null) { - $this->whitelist = array(); - } - - if ($data) { - if (countdim($data) == 1) { - $this->set(array($this->alias => $data)); - } else { - $this->set($data); - } - } - - if ($validate && !$this->validates()) { - $this->whitelist = $_whitelist; - return false; - } - - if (!$this->beforeSave()) { - $this->whitelist = $_whitelist; - return false; - } - $fields = $values = array(); - - if (isset($this->data[$this->alias][$this->primaryKey]) && empty($this->data[$this->alias][$this->primaryKey])) { - unset($this->data[$this->alias][$this->primaryKey]); - } - - if (count($this->data) > 1) { - $weHaveMulti = true; - $joined = false; - } else { - $weHaveMulti = false; - } - - foreach ($this->data as $n => $v) { - if (isset($weHaveMulti) && isset($v[$n]) && in_array($n, array_keys($this->hasAndBelongsToMany))) { - $joined[] = $v; - } else { - if ($n === $this->alias) { - foreach (array('created', 'updated', 'modified') as $field) { - if (array_key_exists($field, $v) && (empty($v[$field]) || $v[$field] === null)) { - unset($v[$field]); - } - } - - foreach ($v as $x => $y) { - if ($this->hasField($x)) { - $fields[] = $x; - $values[] = $y; - } - } - } - } - } - $exists = $this->exists(); - - if (!$exists && $this->hasField('created') && !in_array('created', $fields)) { - $fields[] = 'created'; - $values[] = date('Y-m-d H:i:s'); - } - - if ($this->hasField('modified') && !in_array('modified', $fields)) { - $fields[] = 'modified'; - $values[] = date('Y-m-d H:i:s'); - } - - if ($this->hasField('updated') && !in_array('updated', $fields)) { - $fields[] = 'updated'; - $values[] = date('Y-m-d H:i:s'); - } - - if (!$exists) { - $this->id = false; - } - $this->whitelist = $_whitelist; - - - if (count($fields)) { - if (!empty($this->id)) { - if ($db->update($this, $fields, $values)) { - if (!empty($joined)) { - $this->__saveMulti($joined, $this->id); - } - - $this->afterSave(); - $this->data = false; - $this->_clearCache(); - return true; - } - return false; - } - - if ($db->create($this, $fields, $values)) { - if (!empty($joined)) { - $this->__saveMulti($joined, $this->id); - } - - $this->afterSave(); - $this->data = false; - $this->_clearCache(); - $this->validationErrors = array(); - return true; - } - return false; - } - return false; - } -/** - * Saves model hasAndBelongsToMany data to the database. - * - * @param array $joined Data to save. - * @param string $id - * @return void - * @access private - */ - function __saveMulti($joined, $id) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - foreach ($joined as $x => $y) { - foreach ($y as $assoc => $value) { - if (isset($this->hasAndBelongsToMany[$assoc])) { - $joinTable[$assoc] = $this->hasAndBelongsToMany[$assoc]['joinTable']; - $mainKey[$assoc] = $this->hasAndBelongsToMany[$assoc]['foreignKey']; - $keys[] = $this->hasAndBelongsToMany[$assoc]['foreignKey']; - $keys[] = $this->hasAndBelongsToMany[$assoc]['associationForeignKey']; - $fields[$assoc] = join(',', $keys); - unset($keys); - - foreach ($value as $update) { - if (!empty($update)) { - $values[] = $db->value($id, $this->getColumnType($this->primaryKey)); - $values[] = $db->value($update); - $values = join(',', $values); - $newValues[] = "({$values})"; - unset ($values); - } - } - - if (!empty($newValues)) { - $newValue[$assoc] = $newValues; - unset($newValues); - } else { - $newValue[$assoc] = array(); - } - } - } - } - - if (isset($joinTable)) { - $total = count($joinTable); - - if (is_array($newValue)) { - foreach ($newValue as $loopAssoc => $val) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - $table = $db->name($db->fullTableName($joinTable[$loopAssoc])); - $db->query("DELETE FROM {$table} WHERE {$mainKey[$loopAssoc]} = '{$id}'"); - - if (!empty($newValue[$loopAssoc])) { - $secondCount = count($newValue[$loopAssoc]); - for ($x = 0; $x < $secondCount; $x++) { - $db->query("INSERT INTO {$table} ({$fields[$loopAssoc]}) VALUES {$newValue[$loopAssoc][$x]}"); - } - } - } - } - } - } -/** - * Synonym for del(). - * - * @param mixed $id - * @see function del - * @return boolean True on success - * @access public - */ - function remove($id = null, $cascade = true) { - return $this->del($id, $cascade); - } -/** - * Removes record for given id. If no id is given, the current id is used. Returns true on success. - * - * @param mixed $id Id of record to delete - * @return boolean True on success - * @access public - */ - function del($id = null, $cascade = true) { - if ($id) { - $this->id = $id; - } - $id = $this->id; - - if ($this->exists() && $this->beforeDelete()) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - - $this->_deleteMulti($id); - $this->_deleteHasMany($id, $cascade); - $this->_deleteHasOne($id, $cascade); - $this->id = $id; - - if ($db->delete($this)) { - $this->afterDelete(); - $this->_clearCache(); - $this->id = false; - return true; - } - } - - return false; - } -/** - * Alias for del() - * - * @param mixed $id Id of record to delete - * @return boolean True on success - * @access public - */ - function delete($id = null, $cascade = true) { - return $this->del($id, $cascade); - } -/** - * Cascades model deletes to hasMany relationships. - * - * @param string $id - * @return null - * @access protected - */ - function _deleteHasMany($id, $cascade) { - if (!empty($this->__backAssociation)) { - $savedAssociatons = $this->__backAssociation; - $this->__backAssociation = array(); - } - foreach ($this->hasMany as $assoc => $data) { - if ($data['dependent'] === true && $cascade === true) { - $model =& $this->{$data['className']}; - $field = $model->escapeField($data['foreignKey']); - $model->recursive = 0; - $records = $model->findAll("$field = '$id'", $model->primaryKey, null, null); - - if ($records != false) { - foreach ($records as $record) { - $model->del($record[$data['className']][$model->primaryKey]); - } - } - } - } - if (isset($savedAssociatons)) { - $this->__backAssociation = $savedAssociatons; - } - } -/** - * Cascades model deletes to hasOne relationships. - * - * @param string $id - * @return null - * @access protected - */ - function _deleteHasOne($id, $cascade) { - if (!empty($this->__backAssociation)) { - $savedAssociatons = $this->__backAssociation; - $this->__backAssociation = array(); - } - foreach ($this->hasOne as $assoc => $data) { - if ($data['dependent'] === true && $cascade === true) { - $model =& $this->{$data['className']}; - $field = $model->escapeField($data['foreignKey']); - $model->recursive = 0; - $records = $model->findAll("$field = '$id'", $model->primaryKey, null, null); - - if ($records != false) { - foreach ($records as $record) { - $model->del($record[$data['className']][$model->primaryKey]); - } - } - } - } - if (isset($savedAssociatons)) { - $this->__backAssociation = $savedAssociatons; - } - } -/** - * Cascades model deletes to HABTM join keys. - * - * @param string $id - * @return null - * @access protected - */ - function _deleteMulti($id) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - foreach ($this->hasAndBelongsToMany as $assoc => $data) { - $db->execute("DELETE FROM " . $db->name($db->fullTableName($data['joinTable'])) . " WHERE " . $db->name($data['foreignKey']) . " = '{$id}'"); - } - } -/** - * Returns true if a record with set id exists. - * - * @return boolean True if such a record exists - * @access public - */ - function exists() { - if ($this->id) { - $id = $this->id; - - if (is_array($id)) { - $id = $id[0]; - } - - $db =& ConnectionManager::getDataSource($this->useDbConfig); - return $db->hasAny($this, array($this->primaryKey => $id)); - } - return false; - } -/** - * Returns true if a record that meets given conditions exists - * - * @param array $conditions SQL conditions array - * @return boolean True if such a record exists - * @access public - */ - function hasAny($conditions = null) { - return ($this->findCount($conditions) != false); - } -/** - * Return a single row as a resultset array. - * By using the $recursive parameter, the call can access further "levels of association" than - * the ones this model is directly associated to. - * - * @param array $conditions SQL conditions array - * @param mixed $fields Either a single string of a field name, or an array of field names - * @param string $order SQL ORDER BY conditions (e.g. "price DESC" or "name ASC") - * @param int $recursive The number of levels deep to fetch associated records - * @return array Array of records - * @access public - */ - function find($conditions = null, $fields = null, $order = null, $recursive = null) { - $data = $this->findAll($conditions, $fields, $order, 1, null, $recursive); - - if (empty($data[0])) { - return false; - } - - return $data[0]; - } -/** - * Returns a resultset array with specified fields from database matching given conditions. - * By using the $recursive parameter, the call can access further "levels of association" than - * the ones this model is directly associated to. - * - * @param mixed $conditions SQL conditions as a string or as an array('field' =>'value',...) - * @param mixed $fields Either a single string of a field name, or an array of field names - * @param string $order SQL ORDER BY conditions (e.g. "price DESC" or "name ASC") - * @param int $limit SQL LIMIT clause, for calculating items per page. - * @param int $page Page number, for accessing paged data - * @param int $recursive The number of levels deep to fetch associated records - * @return array Array of records - * @access public - */ - function findAll($conditions = null, $fields = null, $order = null, $limit = null, $page = 1, $recursive = null) { - - $db =& ConnectionManager::getDataSource($this->useDbConfig); - $this->id = $this->getID(); - $offset = null; - - if ($page > 1 && $limit != null) { - $offset = ($page - 1) * $limit; - } - - if ($order == null) { - $order = array(); - } else { - $order = array($order); - } - - $queryData = array('conditions' => $conditions, - 'fields' => $fields, - 'joins' => array(), - 'limit' => $limit, - 'offset' => $offset, - 'order' => $order - ); - - $ret = $this->beforeFind($queryData); - if (is_array($ret)) { - $queryData = $ret; - } elseif ($ret === false) { - return null; - } - - $return = $this->afterFind($db->read($this, $queryData, $recursive)); - - if (!empty($this->__backAssociation)) { - $this->__resetAssociations(); - } - - return $return; - } -/** - * Method is called only when bindTo() is used. - * This resets the association arrays for the model back - * to the original as set in the model. - * - * @return boolean - * @access private - */ - function __resetAssociations() { - foreach ($this->__associations as $type) { - if (isset($this->__backAssociation[$type])) { - $this->{$type} = $this->__backAssociation[$type]; - } - } - - $this->__backAssociation = array(); - return true; - } -/** - * Runs a direct query against the bound DataSource, and returns the result. - * - * @param string $data Query data - * @return array - * @access public - */ - function execute($data) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - $data = $db->fetchAll($data, $this->cacheQueries); - - foreach ($data as $key => $value) { - foreach ($this->tableToModel as $key1 => $value1) { - if (isset($data[$key][$key1])) { - $newData[$key][$value1] = $data[$key][$key1]; - } - } - } - - if (!empty($newData)) { - return $newData; - } - - return $data; - } -/** - * Returns number of rows matching given SQL condition. - * - * @param array $conditions SQL conditions array for findAll - * @param int $recursize The number of levels deep to fetch associated records - * @return int Number of matching rows - * @see Model::findAll - * @access public - */ - function findCount($conditions = null, $recursive = 0) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - - list($data) = $this->findAll($conditions, 'COUNT(*) AS ' . $db->name('count'), null, null, 1, $recursive); - - if (isset($data[0]['count'])) { - return $data[0]['count']; - } elseif (isset($data[$this->alias]['count'])) { - return $data[$this->alias]['count']; - } - - return false; - } -/** - * Special findAll variation for tables joined to themselves. - * The table needs the fields id and parent_id to work. - * - * @param array $conditions Conditions for the findAll() call - * @param array $fields Fields for the findAll() call - * @param string $sort SQL ORDER BY statement - * @return array - * @access public - * @todo Perhaps create a Component with this logic - */ - function findAllThreaded($conditions = null, $fields = null, $sort = null) { - return $this->__doThread(Model::findAll($conditions, $fields, $sort), null); - } -/** - * Private, recursive helper method for findAllThreaded. - * - * @param array $data - * @param string $root NULL or id for root node of operation - * @return array - * @access private - * @see findAllThreaded - */ - function __doThread($data, $root) { - $out = array(); - $sizeOf = sizeof($data); - - for ($ii = 0; $ii < $sizeOf; $ii++) { - if (($data[$ii][$this->alias]['parent_id'] == $root) || (($root === null) && ($data[$ii][$this->alias]['parent_id'] == '0'))) { - $tmp = $data[$ii]; - - if (isset($data[$ii][$this->alias][$this->primaryKey])) { - $tmp['children'] = $this->__doThread($data, $data[$ii][$this->alias][$this->primaryKey]); - } else { - $tmp['children'] = null; - } - - $out[] = $tmp; - } - } - - return $out; - } -/** - * Returns an array with keys "prev" and "next" that holds the id's of neighbouring data, - * which is useful when creating paged lists. - * - * @param string $conditions SQL conditions for matching rows - * @param string $field Field name (parameter for findAll) - * @param unknown_type $value - * @return array Array with keys "prev" and "next" that holds the id's - * @access public - */ - function findNeighbours($conditions = null, $field, $value) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - - if (!is_null($conditions)) { - $conditions = $conditions . ' AND '; - } - - @list($prev) = Model::findAll($conditions . $field . ' < ' . $db->value($value), $field, $field . ' DESC', 1, null, 0); - @list($next) = Model::findAll($conditions . $field . ' > ' . $db->value($value), $field, $field . ' ASC', 1, null, 0); - - if (!isset($prev)) { - $prev = null; - } - - if (!isset($next)) { - $next = null; - } - - return array('prev' => $prev, 'next' => $next); - } -/** - * Returns a resultset for given SQL statement. Generic SQL queries should be made with this method. - * - * @param string $sql SQL statement - * @return array Resultset - * @access public - */ - function query() { - $params = func_get_args(); - $db =& ConnectionManager::getDataSource($this->useDbConfig); - return call_user_func_array(array(&$db, 'query'), $params); - } -/** - * Returns true if all fields pass validation, otherwise false. - * - * @param array $data POST data - * @return boolean True if there are no errors - * @access public - */ - function validates($data = array()) { - $errors = $this->invalidFields($data); - return count($errors) == 0; - } -/** - * Returns an array of invalid fields. - * - * @param array $data - * @return array Array of invalid fields or boolean case any error occurs - * @access public - */ - function invalidFields($data = array()) { - if (empty($data)) { - $data = $this->data; - } - - if (!$this->beforeValidate()) { - return $this->validationErrors; - } - - if (!isset($this->validate)) { - return $this->validationErrors; - } - - if (!empty($data)) { - $data = $data; - } elseif (isset($this->data)) { - $data = $this->data; - } - - if (isset($data[$this->alias])) { - $data = $data[$this->alias]; - } - - foreach ($this->validate as $field_name => $validator) { - if (isset($data[$field_name]) && !preg_match($validator, $data[$field_name])) { - $this->invalidate($field_name); - } - } - return $this->validationErrors; - } -/** - * Sets a field as invalid - * - * @param string $field The name of the field to invalidate - * @return void - * @access public - */ - function invalidate($field) { - if (!is_array($this->validationErrors)) { - $this->validationErrors = array(); - } - $this->validationErrors[$field] = 1; - } -/** - * Returns true if given field name is a foreign key in this Model. - * - * @param string $field Returns true if the input string ends in "_id" - * @return True if the field is a foreign key listed in the belongsTo array. - * @access public - */ - function isForeignKey($field) { - $foreignKeys = array(); - - if (count($this->belongsTo)) { - foreach ($this->belongsTo as $assoc => $data) { - $foreignKeys[] = $data['foreignKey']; - } - } - return (bool)(in_array($field, $foreignKeys)); - } -/** - * Gets the display field for this model - * - * @return string The name of the display field for this Model (i.e. 'name', 'title'). - * @access public - */ - function getDisplayField() { - return $this->displayField; - } -/** - * Returns a resultset array with specified fields from database matching given conditions. - * Method can be used to generate option lists for SELECT elements. - * - * @param mixed $conditions SQL conditions as a string or as an array('field' =>'value',...) - * @param string $order SQL ORDER BY conditions (e.g. "price DESC" or "name ASC") - * @param int $limit SQL LIMIT clause, for calculating items per page - * @param string $keyPath A string path to the key, i.e. "{n}.Post.id" - * @param string $valuePath A string path to the value, i.e. "{n}.Post.title" - * @return array An associative array of records, where the id is the key, and the display field is the value - * @access public - */ - function generateList($conditions = null, $order = null, $limit = null, $keyPath = null, $valuePath = null) { - if ($keyPath == null && $valuePath == null && $this->hasField($this->displayField)) { - $fields = array($this->primaryKey, $this->displayField); - } else { - $fields = null; - } - $recursive = $this->recursive; - - if ($recursive >= 1) { - $this->recursive = -1; - } - $result = $this->findAll($conditions, $fields, $order, $limit); - $this->recursive = $recursive; - - if (!$result) { - return false; - } - - if ($keyPath == null) { - $keyPath = '{n}.' . $this->alias . '.' . $this->primaryKey; - } - - if ($valuePath == null) { - $valuePath = '{n}.' . $this->alias . '.' . $this->displayField; - } - - $keys = Set::extract($result, $keyPath); - $vals = Set::extract($result, $valuePath); - - if (!empty($keys) && !empty($vals)) { - $return = array_combine($keys, $vals); - return $return; - } - return null; - } -/** - * Escapes the field name and prepends the model name. Escaping will be done according to the current database driver's rules. - * - * @param unknown_type $field - * @return string The name of the escaped field for this Model (i.e. id becomes `Post`.`id`). - * @access public - */ - function escapeField($field) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - return $db->name($this->alias) . '.' . $db->name($field); - } -/** - * Returns the current record's ID - * - * @param unknown_type $list - * @return mixed The ID of the current record - * @access public - */ - function getID($list = 0) { - if (!is_array($this->id)) { - return $this->id; - } - - if (count($this->id) == 0) { - return false; - } - - if (isset($this->id[$list])) { - return $this->id[$list]; - } - - foreach ($this->id as $id) { - return $id; - } - - return false; - } -/** - * Returns the ID of the last record this Model inserted - * - * @return mixed - * @access public - */ - function getLastInsertID() { - return $this->getInsertID(); - } -/** - * Returns the ID of the last record this Model inserted - * - * @return mixed - * @access public - */ - function getInsertID() { - return $this->__insertID; - } -/** - * Sets the ID of the last record this Model inserted - * - * @param mixed $id - * @return void - */ - function setInsertID($id) { - $this->__insertID = $id; - } -/** - * Returns the number of rows returned from the last query - * - * @return int - * @access public - */ - function getNumRows() { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - return $db->lastNumRows(); - } -/** - * Returns the number of rows affected by the last query - * - * @return int - * @access public - */ - function getAffectedRows() { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - return $db->lastAffected(); - } -/** - * Sets the DataSource to which this model is bound - * - * @param string $dataSource The name of the DataSource, as defined in Connections.php - * @return boolean True on success - * @access public - */ - function setDataSource($dataSource = null) { - if ($dataSource != null) { - $this->useDbConfig = $dataSource; - } - $db =& ConnectionManager::getDataSource($this->useDbConfig); - - if (!empty($db->config['prefix']) && $this->tablePrefix === null) { - $this->tablePrefix = $db->config['prefix']; - } - - if (empty($db) || $db == null || !is_object($db)) { - return $this->cakeError('missingConnection', array(array('className' => $this->alias))); - } - } -/** - * Before find callback - * - * @param array $queryData Data used to execute this query, i.e. conditions, order, etc. - * @return boolean True if the operation should continue, false if it should abort - * @access public - */ - function beforeFind(&$queryData) { - return true; - } -/** - * After find callback. Can be used to modify any results returned by find and findAll. - * - * @param mixed $results The results of the find operation - * @return mixed Result of the find operation - * @access public - */ - function afterFind($results) { - return $results; - } -/** - * Before save callback - * - * @return boolean True if the operation should continue, false if it should abort - * @access public - */ - function beforeSave() { - return true; - } -/** - * After save callback - * - * @return boolean - * @access public - */ - function afterSave() { - return true; - } -/** - * Before delete callback - * - * @return boolean True if the operation should continue, false if it should abort - * @access public - */ - function beforeDelete() { - return true; - } -/** - * After delete callback - * - * @return boolean - * @access public - */ - function afterDelete() { - return true; - } -/** - * Before validate callback - * - * @return boolean - * @access public - */ - function beforeValidate() { - return true; - } -/** - * DataSource error callback - * - * @return void - */ - function onError() { - } -/** - * Private method. Clears cache for this model - * - * @param string $type If null this deletes cached views if CACHE_CHECK is true - * Will be used to allow deleting query cache also - * @return boolean true on delete - * @access protected - */ - function _clearCache($type = null) { - if ($type === null) { - if (defined('CACHE_CHECK') && CACHE_CHECK === true) { - $assoc[] = strtolower(Inflector::pluralize($this->alias)); - - foreach ($this->__associations as $key => $association) { - foreach ($this->$association as $key => $className) { - $check = strtolower(Inflector::pluralize($className['className'])); - - if (!in_array($check, $assoc)) { - $assoc[] = strtolower(Inflector::pluralize($className['className'])); - } - } - } - clearCache($assoc); - return true; - } - } else { - //Will use for query cache deleting - } - } -/** - * Called when serializing a model - * - * @return array - * @access public - */ - function __sleep() { - $return = array_keys(get_object_vars($this)); - return $return; - } -/** - * Called when unserializing a model - * - * @return void - * @access public - */ - function __wakeup() { - } -} -?> diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/neat_array.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/neat_array.php deleted file mode 100644 index fd04a6b..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/neat_array.php +++ /dev/null @@ -1,318 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs - * @since CakePHP(tm) v 0.2.9 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Class used for internal manipulation of multi-dimensional arrays (arrays of arrays). - * - * Long description for class - * - * @package cake - * @subpackage cake.cake.libs - */ -class NeatArray{ -/** - * Value of NeatArray. - * - * @var array - * @access public - */ - var $value; -/** - * Constructor. Defaults to an empty array. - * - * @param array $value - * @access public - * @uses NeatArray::value - */ - function NeatArray($value = array()) { - $this->value = $value; - } -/** - * Finds and returns records with $fieldName equal to $value from this NeatArray. - * - * @param string $fieldName - * @param string $value - * @return mixed - * @access public - * @uses NeatArray::value - */ - function findIn($fieldName, $value) { - if (!is_array($this->value)) { - return false; - } - $out = false; - $keys = array_keys($this->value); - $count = sizeof($keys); - - for ($i = 0; $i < $count; $i++) { - if (isset($this->value[$keys[$i]][$fieldName]) && ($this->value[$keys[$i]][$fieldName] == $value)) - { - $out[$keys[$i]] = $this->value[$keys[$i]]; - } - } - return $out; - } -/** - * Checks if $this->value is an array, and removes all empty elements. - * - * @access public - * @uses NeatArray::value - */ - function cleanup() { - $out = is_array($this->value) ? array(): null; - foreach ($this->value as $k => $v) { - if ($v == "0") { - $out[$k] = $v; - } elseif ($v) { - $out[$k] = $v; - } - } - $this->value=$out; - } -/** - * Adds elements from given array to itself. - * - * @param string $value - * @return bool - * @access public - * @uses NeatArray::value - */ - function add($value) { - return ($this->value = $this->plus($value)) ? true : false; - } -/** - * Returns itself merged with given array. - * - * @param array $value Array to add to NeatArray. - * @return array - * @access public - * @uses NeatArray::value - */ - function plus($value) { - $merge = array_merge($this->value, (is_array($value) ? $value : array($value))); - return $merge; - } -/** - * Counts repeating strings and returns an array of totals. - * - * @param int $sortedBy A value of 1 sorts by values, a value of 2 sorts by keys. Defaults to null (no sorting). - * @return array - * @access public - * @uses NeatArray::value - */ - function totals($sortedBy = 1, $reverse = true) { - $out = array(); - foreach ($this->value as $val) { - isset($out[$val]) ? $out[$val]++ : $out[$val] = 1; - } - - if ($sortedBy == 1) { - $reverse ? arsort($out, SORT_NUMERIC) : asort($out, SORT_NUMERIC); - } - - if ($sortedBy == 2) { - $reverse ? krsort($out, SORT_STRING) : ksort($out, SORT_STRING); - } - return $out; - } -/** - * Performs an array_filter() on the contents of this NeatArray. - * - * @param string $with Name of callback function to perform on each element of this NeatArray. - * @return array - */ - function filter($with) { - return $this->value = array_filter($this->value, $with); - } -/** - * Passes each of its values through a specified function or method. - * Think of PHP's {@link http://php.net/array_walk array_walk()}. - * - * @param string $with Name of callback function - * @return array Returns value of NeatArray::value - * @access public - * @uses NeatArray::value - */ - function walk($with) { - array_walk($this->value, $with); - return $this->value; - } -/** - * Apply $template to all elements of this NeatArray, and return the array itself. - * - * @param string $template {@link http://php.net/sprintf sprintf()}-compatible string to be applied to all values of this NeatArray. - * @return array - */ - function sprintf($template) { - $count = count($this->value); - for ($ii = 0; $ii < $count; $ii++) { - $this->value[$ii] = sprintf($template, $this->value[$ii]); - } - return $this->value; - } -/** - * Extracts a value from all array items. - * - * @return array - * @access public - * @uses NeatArray::value - */ - function extract($name) { - $out = array(); - foreach ($this->value as $val) { - if (isset($val[$name])) - $out[]=$val[$name]; - } - return $out; - } -/** - * Returns a list of unique elements. - * - * @return array - */ - function unique() { - $unique = array_unique($this->value); - return $unique; - } -/** - * Removes duplicate elements from the value and returns it. - * - * @return array - */ - function makeUnique() { - return $this->value = array_unique($this->value); - } -/** - * Joins an array with myself using a key (like a join between database tables). - * - * Example: - * - * $alice = array('id'=>'1', 'name'=>'Alice'); - * $bob = array('id'=>'2', 'name'=>'Bob'); - * - * $users = new NeatArray(array($alice, $bob)); - * - * $born = array - * ( - * array('user_id'=>'1', 'born'=>'1980'), - * array('user_id'=>'2', 'born'=>'1976') - * ); - * - * $users->joinWith($born, 'id', 'user_id'); - * - * Result: - * - * $users->value == array - * ( - * array('id'=>'1', 'name'=>'Alice', 'born'=>'1980'), - * array('id'=>'2', 'name'=>'Bob', 'born'=>'1976') - * ); - * - * @param array $his The array to join with myself. - * @param string $onMine Key to use on myself. - * @param string $onHis Key to use on him. - * @return array - */ - function joinWith($his, $onMine, $onHis = null) { - if (empty($onHis)) { - $onHis = $onMine; - } - $his = new NeatArray($his); - $out = array(); - - foreach ($this->value as $key => $val) { - if ($fromHis = $his->findIn($onHis, $val[$onMine])) { - list($fromHis) = array_values($fromHis); - $out[$key] = array_merge($val, $fromHis); - } else { - $out[$key] = $val; - } - } - return $this->value = $out; - } -/** - * Enter description here... - * @todo Explain this function. almost looks like it creates a tree - * - * @param string $root - * @param string $idKey - * @param string $parentIdKey - * @param string $childrenKey - * @return array - */ - function threaded($root = null, $idKey = 'id', $parentIdKey = 'parent_id', $childrenKey = 'children') { - $out = array(); - $sizeof = sizeof($this->value); - - for ($ii = 0; $ii < $sizeof; $ii++) { - if ($this->value[$ii][$parentIdKey] == $root) { - $tmp = $this->value[$ii]; - $tmp[$childrenKey]=isset($this->value[$ii][$idKey]) - ? $this->threaded($this->value[$ii][$idKey], $idKey, $parentIdKey, $childrenKey) : null; - $out[] = $tmp; - } - } - return $out; - } -/** - * Array multi search - * - * @param string $search_value - * @param array $the_array - * @return array - * @link http://php.net/array_search#47116 - */ - function multi_search($search_value, $the_array = null) { - if ($the_array == null) { - $the_array = $this->value; - } - - if (is_array($the_array)) { - foreach ($the_array as $key => $value) { - $result = $this->multi_search($search_value, $value); - - if (is_array($result)) { - $return = $result; - array_unshift($return, $key); - return $return; - } elseif ($result == true) { - $return[]=$key; - return $return; - } - } - return false; - } else { - if ($search_value == $the_array) { - return true; - } else { - return false; - } - } - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/neat_string.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/neat_string.php deleted file mode 100644 index 620e60b..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/neat_string.php +++ /dev/null @@ -1,88 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs - * @since CakePHP(tm) v 0.2.9 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * String handling methods. - * - * Random passwords, splitting strings into arrays, removing Cyrillic characters, stripping whitespace. - * - * @package cake - * @subpackage cake.cake.libs - */ -class NeatString{ -/** - * Returns an array with each of the non-empty characters in $string as an element. - * - * @param string $string - * @return array - */ - function toArray($string) { - $split = preg_split('//', $string, -1, PREG_SPLIT_NO_EMPTY); - return $split; - } -/** - * Returns string with Cyrillic characters translated to Roman ones. - * - * @param string $string - * @return string - */ - function toRoman($string) { - $pl = array('ą','ć','ę','ł','ń','ó','ś','ź','ż','Ą','Ć','Ę','�?','Ń','Ó','Ś','Ź','Ż'); - $ro = array('a','c','e','l','n','o','s','z','z','A','C','E','L','N','O','S','Z','Z'); - $replace = str_replace($pl, $ro, $string); - return $replace; - } -/** - * Returns string as lowercase with whitespace removed. - * - * @param string $string - * @return string - */ - function toCompressed($string) { - $whitespace = array("\n", " ", "\r", "\0", "\x0B", " "); - $replace = strtolower(str_replace($whitespace, '', $string)); - return $replace; - } -/** - * Returns a random password. - * - * @param integer $length Length of generated password - * @param string $available_chars List of characters to use in password - * @return string Generated password - */ - function randomPassword($length, $available_chars = 'ABDEFHKMNPRTWXYABDEFHKMNPRTWXY23456789') { - $chars = preg_split('//', $available_chars, -1, PREG_SPLIT_NO_EMPTY); - $char_count = count($chars); - $out = ''; - for ($ii = 0; $ii < $length; $ii++) { - $out .= $chars[rand(1, $char_count)-1]; - } - return $out; - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/object.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/object.php deleted file mode 100644 index a23afc9..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/object.php +++ /dev/null @@ -1,259 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs - * @since CakePHP(tm) v 0.2.9 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Object class, allowing __construct and __destruct in PHP4. - * - * Also includes methods for logging and the special method RequestAction, - * to call other Controllers' Actions from anywhere. - * - * @package cake - * @subpackage cake.cake.libs - */ -class Object{ -/** - * Log object - * - * @var object - * @access protected - */ - var $_log = null; -/** - * A hack to support __construct() on PHP 4 - * Hint: descendant classes have no PHP4 class_name() constructors, - * so this constructor gets called first and calls the top-layer __construct() - * which (if present) should call parent::__construct() - * - * @return Object - * @access public - */ - function Object() { - $args = func_get_args(); - if (method_exists($this, '__destruct')) { - register_shutdown_function (array(&$this, '__destruct')); - } - call_user_func_array(array(&$this, '__construct'), $args); - } -/** - * Class constructor, overridden in descendant classes. - * - * @abstract - * @access public - */ - function __construct() { - } - -/** - * Object-to-string conversion. - * Each class can override this method as necessary. - * - * @return string The name of this class - * @access public - */ - function toString() { - $class = get_class($this); - return $class; - } -/** - * Calls a controller's method from any location. Allows for - * controllers to communicate with each other. - * - * @param string $url URL in the form of Cake URL ("/controller/method/parameter") - * @param array $extra If array includes the key "return" it sets the AutoRender to true. - * @return boolean Success - * @access public - */ - function requestAction($url, $extra = array()) { - if (!empty($url)) { - $dispatcher =& new Dispatcher(); - if (isset($this->plugin)) { - $extra['plugin'] = $this->plugin; - } - if (in_array('return', $extra, true)) { - $extra['return'] = 0; - $extra['bare'] = 1; - $extra['requested'] = 1; - ob_start(); - $out = $dispatcher->dispatch($url, $extra); - $out = ob_get_clean(); - return $out; - } else { - $extra['return'] = 1; - $extra['bare'] = 1; - $extra['requested'] = 1; - return $dispatcher->dispatch($url, $extra); - } - } else { - return false; - } - } -/** - * API for logging events. - * - * @param string $msg Log message - * @param int $type Error type constant. Defined in app/config/core.php. - * @access - */ - function log($msg, $type = LOG_ERROR) { - if (!class_exists('CakeLog')) { - uses('cake_log'); - } - - if (is_null($this->_log)) { - $this->_log = new CakeLog(); - } - - if (!is_string($msg)) { - ob_start(); - print_r ($msg); - $msg=ob_get_contents(); - ob_end_clean(); - } - - switch($type) { - case LOG_DEBUG: - return $this->_log->write('debug', $msg); - break; - default: - return $this->_log->write('error', $msg); - break; - } - } -/** - * Used to report user friendly errors. - * If there is a file app/error.php this file will be loaded - * error.php is the AppError class it should extend ErrorHandler class. - * - * @param string $method Method to be called in the error class (AppError or ErrorHandler classes) - * @param array $messages Message that is to be displayed by the error class - * @return error message - * @access public - */ - function cakeError($method, $messages) { - if (!class_exists('ErrorHandler')) { - uses('error'); - if (file_exists(APP . 'error.php')) { - include_once (APP . 'error.php'); - } - } - - if (class_exists('AppError')) { - $error = new AppError($method, $messages); - } else { - $error = new ErrorHandler($method, $messages); - } - return $error; - } -/** - * Checks for a persistent class file, if found file is opened and true returned - * If file is not found a file is created and false returned - * - * There are many uses for this method, see manual for examples also art of - * the cache system - * - * @param string $name name of class to persist - * @param boolean $return - * @param object $object - * @param string $type - * @return boolean - * @todo add examples to manual - * @access protected - */ - function _persist($name, $return = null, &$object, $type = null) { - $file = CACHE . 'persistent' . DS . strtolower($name) . '.php'; - if ($return === null) { - if (!file_exists($file)) { - return false; - } else { - return true; - } - } - - if (!file_exists($file)) { - $this->_savePersistent($name, $object); - return false; - } else { - $this->__openPersistent($name, $type); - return true; - } - } -/** - * You should choose a unique name for the persistent file - * - * There are many uses for this method, see manual for examples also part of - * the cache system - * - * @param string $name name used for object to cache - * @param object $object the object to persist - * @return true on save, throws error if file can not be created - * @access protected - */ - function _savePersistent($name, &$object) { - $file = 'persistent' . DS . strtolower($name) . '.php'; - $objectArray = array(&$object); - $data = str_replace('\\', '\\\\', serialize($objectArray)); - $data = ''; - cache($file, $data, '+1 day'); - } -/** - * Open the persistent class file for reading - * Used by Object::_persist(), part of the cache - * system - * - * @param string $name Name of the persistant file - * @param string $type - * @access private - */ - function __openPersistent($name, $type = null) { - $file = CACHE . 'persistent' . DS . strtolower($name) . '.php'; - include($file); - - switch($type) { - case 'registry': - $vars = unserialize(${$name}); - foreach ($vars['0'] as $key => $value) { - loadModel(Inflector::classify($key)); - } - unset($vars); - $vars = unserialize(${$name}); - foreach ($vars['0'] as $key => $value) { - ClassRegistry::addObject($key, $value); - unset ($value); - } - unset($vars); - break; - default: - $vars = unserialize(${$name}); - $this->{$name} = $vars['0']; - unset($vars); - break; - } - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/router.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/router.php deleted file mode 100644 index bf32954..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/router.php +++ /dev/null @@ -1,230 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs - * @since CakePHP(tm) v 0.2.9 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Included libraries. - * - */ - if (!class_exists('Object')) { - uses ('object'); - } -/** - * Parses the request URL into controller, action, and parameters. - * - * @package cake - * @subpackage cake.cake.libs - */ -class Router extends Object { -/** - * Array of routes - * - * @var array - * @access public - */ - var $routes = array(); -/** - * CAKE_ADMIN route - * - * @var array - * @access private - */ - var $__admin = null; -/** - * Constructor - * - * @access public - */ - function __construct() { - if (defined('CAKE_ADMIN')) { - $admin = CAKE_ADMIN; - if (!empty($admin)) { - $this->__admin = array('/:' . $admin . '/:controller/:action/* (default)', - '/^(?:\/(?:(' . $admin . ')(?:\\/([a-zA-Z0-9_\\-\\.\\;\\:]+)(?:\\/([a-zA-Z0-9_\\-\\.\\;\\:]+)(?:[\\/\\?](.*))?)?)?))[\/]*$/', - array($admin, 'controller', 'action'), array()); - } - } - } -/** - * Returns this object's routes array. Returns false if there are no routes available. - * - * @param string $route An empty string, or a route string "/" - * @param array $default NULL or an array describing the default route - * @return array Array of routes - */ - function connect($route, $default = null) { - $parsed = $names = array(); - - if (defined('CAKE_ADMIN') && $default == null) { - if ($route == CAKE_ADMIN) { - $this->routes[] = $this->__admin; - $this->__admin = null; - } - } - $r = null; - if (($route == '') || ($route == '/')) { - $regexp='/^[\/]*$/'; - $this->routes[] = array($route, $regexp, array(), $default); - } else { - $elements = array(); - - foreach (explode('/', $route)as $element) { - if (trim($element)) - $elements[] = $element; - } - - if (!count($elements)) { - return false; - } - - foreach ($elements as $element) { - - if (preg_match('/^:(.+)$/', $element, $r)) { - $parsed[]='(?:\/([^\/]+))?'; - $names[] =$r[1]; - } elseif (preg_match('/^\*$/', $element, $r)) { - $parsed[] = '(?:\/(.*))?'; - } else { - $parsed[] = '/' . $element; - } - } - - $regexp='#^' . join('', $parsed) . '[\/]*$#'; - $this->routes[] = array($route, $regexp, $names, $default); - } - return $this->routes; - } -/** - * Parses given URL and returns an array of controllers, action and parameters - * taken from that URL. - * - * @param string $url URL to be parsed - * @return array - * @access public - */ - function parse($url) { - if (ini_get('magic_quotes_gpc') == 1) { - $url = stripslashes_deep($url); - } - - if ($url && ('/' != $url[0])) { - if (!defined('SERVER_IIS')) { - $url = '/' . $url; - } - } - $out = array('pass'=>array()); - $r = null; - $default_route = array('/:controller/:action/* (default)', - '/^(?:\/(?:([a-zA-Z0-9_\\-\\.\\;\\:]+)(?:\\/([a-zA-Z0-9_\\-\\.\\;\\:]+)(?:[\\/\\?](.*))?)?))[\\/]*$/', - array('controller', 'action'), array()); - - if (defined('CAKE_ADMIN') && $this->__admin != null) { - $this->routes[]=$this->__admin; - $this->__admin =null; - } - $this->connect('/bare/:controller/:action/*', array('bare' => '1')); - $this->connect('/ajax/:controller/:action/*', array('bare' => '1')); - - if (defined('WEBSERVICES') && WEBSERVICES == 'on') { - $this->connect('/rest/:controller/:action/*', array('webservices' => 'Rest')); - $this->connect('/rss/:controller/:action/*', array('webservices' => 'Rss')); - $this->connect('/soap/:controller/:action/*', array('webservices' => 'Soap')); - $this->connect('/xml/:controller/:action/*', array('webservices' => 'Xml')); - $this->connect('/xmlrpc/:controller/:action/*', array('webservices' => 'XmlRpc')); - } - $this->routes[] = $default_route; - - if (strpos($url, '?') !== false) { - $url = substr($url, 0, strpos($url, '?')); - } - - foreach ($this->routes as $route) { - list($route, $regexp, $names, $defaults) = $route; - - if (preg_match($regexp, $url, $r)) { - // remove the first element, which is the url - array_shift ($r); - // hack, pre-fill the default route names - foreach ($names as $name) { - $out[$name] = null; - } - $ii=0; - - if (is_array($defaults)) { - foreach ($defaults as $name => $value) { - if (preg_match('#[a-zA-Z_\-]#i', $name)) { - $out[$name] = $this->stripEscape($value); - } else { - $out['pass'][] = $this->stripEscape($value); - } - } - } - - foreach ($r as $found) { - // if $found is a named url element (i.e. ':action') - if (isset($names[$ii])) { - $out[$names[$ii]] = $found; - } else { - // unnamed elements go in as 'pass' - $found = explode('/', $found); - $pass = array(); - foreach ($found as $key => $value) { - if ($value == "0") { - $pass[$key] = $this->stripEscape($value); - } elseif ($value) { - $pass[$key] = $this->stripEscape($value); - } - } - $out['pass'] = am($out['pass'], $pass); - } - $ii++; - } - break; - } - } - return $out; - } - function stripEscape($param) { - if (!is_array($param) || empty($param)) { - if (is_bool($param)) { - return $param; - } - - $return = preg_replace('/^[\\t ]*(?:-!)+/', '', $param); - return $return; - } - foreach ($param as $key => $value) { - if (is_string($value)) { - $return[$key] = preg_replace('/^[\\t ]*(?:-!)+/', '', $value); - } else { - foreach ($value as $array => $string) { - $return[$key][$array] = $this->stripEscape($string); - } - } - } - return $return; - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/sanitize.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/sanitize.php deleted file mode 100644 index ef818b0..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/sanitize.php +++ /dev/null @@ -1,245 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs - * @since CakePHP(tm) v 0.10.0.1076 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Data Sanitization. - * - * Removal of alpahnumeric characters, SQL-safe slash-added strings, HTML-friendly strings, - * and all of the above on arrays. - * - * @package cake - * @subpackage cake.cake.libs - */ -class Sanitize{ -/** - * Removes any non-alphanumeric characters. - * - * @param string $string - * @return string - * @access public - */ - function paranoid($string, $allowed = array()) { - $allow = null; - if (!empty($allowed)) { - foreach ($allowed as $value) { - $allow .= "\\$value"; - } - } - - if (is_array($string)) { - foreach ($string as $key => $clean) { - $cleaned[$key] = preg_replace("/[^{$allow}a-zA-Z0-9]/", "", $clean); - } - } else { - $cleaned = preg_replace("/[^{$allow}a-zA-Z0-9]/", "", $string); - } - return $cleaned; - } -/** - * Makes a string SQL-safe by adding slashes (if needed). - * - * @param string $string - * @return string - * @access public - */ - function sql($string) { - if (!ini_get('magic_quotes_gpc')) { - $string = addslashes($string); - } - return $string; - } -/** - * Returns given string safe for display as HTML. Renders entities. - * - * @param string $string - * @param boolean $remove If true, the string is stripped of all HTML tags - * @return string - * @access public - */ - function html($string, $remove = false) { - if ($remove) { - $string = strip_tags($string); - } else { - $patterns = array("/\&/", "/%/", "//", '/"/', "/'/", "/\(/", "/\)/", "/\+/", "/-/"); - $replacements = array("&", "%", "<", ">", """, "'", "(", ")", "+", "-"); - $string = preg_replace($patterns, $replacements, $string); - } - return $string; - } -/** - * Recursively sanitizes given array of data for safe input. - * - * @param mixed $toClean - * @return mixed - * @access public - */ - function cleanArray(&$toClean) { - return $this->cleanArrayR($toClean); - } -/** - * Method used for recursively sanitizing arrays of data - * for safe input - * - * @param array $toClean - * @return array The clean array - * @access public - */ - function cleanArrayR(&$toClean) { - if (is_array($toClean)) { - while (list($k, $v) = each($toClean)) { - if (is_array($toClean[$k])) { - $this->cleanArray($toClean[$k]); - } else { - $toClean[$k] = $this->cleanValue($v); - } - } - } else { - return null; - } - } -/** - * Do we really need to sanitize array keys? If so, we can use this code... - function cleanKey($key) { - if ($key == "") - { - return ""; - } - //URL decode and convert chars to HTML entities - $key = htmlspecialchars(urldecode($key)); - //Remove .. - $key = preg_replace( "/\.\./", "", $key ); - //Remove __FILE__, etc. - $key = preg_replace( "/\_\_(.+?)\_\_/", "", $key ); - //Trim word chars, '.', '-', '_' - $key = preg_replace( "/^([\w\.\-\_]+)$/", "$1", $key ); - return $key; - } - */ - -/** - * Method used by cleanArray() to sanitize array nodes. - * - * @param string $val - * @return string - * @access public - */ - function cleanValue($val) { - if ($val == "") { - return ""; - } - //Replace odd spaces with safe ones - $val = str_replace(" ", " ", $val); - $val = str_replace(chr(0xCA), "", $val); - //Encode any HTML to entities. - $val = $this->html($val); - //Double-check special chars and replace carriage returns with new lines - $val = preg_replace("/\\\$/", "$", $val); - $val = preg_replace("/\r\n/", "\n", $val); - $val = str_replace("!", "!", $val); - $val = str_replace("'", "'", $val); - //Allow unicode (?) - $val = preg_replace("/&#([0-9]+);/s", "&#\\1;", $val); - //Add slashes for SQL - $val = $this->sql($val); - //Swap user-inputted backslashes (?) - $val = preg_replace("/\\\(?!&#|\?#)/", "\\", $val); - return $val; - } - -/** - * Formats column data from definition in DBO's $columns array - * - * @param Model $model The model containing the data to be formatted - * @return void - * @access public - */ - function formatColumns(&$model) { - foreach ($model->data as $name => $values) { - if ($name == $model->name) { - $curModel =& $model; - } elseif (isset($model->{$name}) && is_object($model->{$name}) && is_subclass_of($model->{$name}, 'Model')) { - $curModel =& $model->{$name}; - } else { - $curModel = null; - } - - if ($curModel != null) { - foreach ($values as $column => $data) { - $colType = $curModel->getColumnType($column); - - if ($colType != null) { - $db =& ConnectionManager::getDataSource($curModel->useDbConfig); - $colData = $db->columns[$colType]; - - if (isset($colData['limit']) && strlen(strval($data)) > $colData['limit']) { - $data = substr(strval($data), 0, $colData['limit']); - } - - if (isset($colData['formatter']) || isset($colData['format'])) { - - switch(strtolower($colData['formatter'])) { - case 'date': - $data = date($colData['format'], strtotime($data)); - break; - case 'sprintf': - $data = sprintf($colData['format'], $data); - break; - case 'intval': - $data = intval($data); - break; - case 'floatval': - $data = floatval($data); - break; - } - } - $model->data[$name][$column]=$data; - /* - switch($colType) { - case 'integer': - case 'int': - return $data; - break; - case 'string': - case 'text': - case 'binary': - case 'date': - case 'time': - case 'datetime': - case 'timestamp': - case 'date': - return "'" . $data . "'"; - break; - } - */ - } - } - } - } - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/security.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/security.php deleted file mode 100644 index c3a59b2..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/security.php +++ /dev/null @@ -1,151 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs - * @since CakePHP(tm) v .0.10.0.1233 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Security Class - * - * This class is a singleton class that contains functions for hasing and security. - * - * @package cake - * @subpackage cake.cake.libs - */ -class Security extends Object { -/** - * Singleton method to retrieve the instance of the Security class - * - * @return object Security - * @access public - */ - function &getInstance() { - static $instance = array(); - if (!$instance) { - $instance[0] = &new Security; - } - return $instance[0]; - } -/** - * Returns inactive minutes constant based on cake the security level - * - * @return integer - * @access public - */ - function inactiveMins() { - switch(CAKE_SECURITY) { - case 'high': - return 10; - break; - case 'medium': - return 100; - break; - case 'low': - default: - return 300; - break; - } - } -/** - * Generates a unique authkey - * - * @return mixed - * @access public - */ - function generateAuthKey() { - $_this =& Security::getInstance(); - return $_this->hash(uniqid(rand(), true)); - } -/** - * Validates the authkey - * - * @param mixed $authKey - * @return boolean - * @access public - */ - function validateAuthKey($authKey) { - return true; - } -/** - * Generates a hash of a string using a php built in hashing function - * - * @param string $string The string to be hashed - * @param string $type The hashing algorithm - * @return string - * @access public - */ - function hash($string, $type = 'sha1') { - $type = strtolower($type); - if ($type == 'sha1') { - if (function_exists('sha1')) { - $return = sha1($string); - return $return; - } else { - $type = 'sha256'; - } - } - - if ($type == 'sha256') { - if (function_exists('mhash')) { - $return = bin2hex(mhash(MHASH_SHA256, $string)); - return $return; - } else { - $type = 'md5'; - } - } - - if ($type == 'md5') { - $return = md5($string); - return $return; - } - } -/** - * Function that ciphers a text using a key - * - * @param string $text - * @param string $key - * @return string - * @access public - */ - function cipher($text, $key) { - if (!defined('CIPHER_SEED')) { - //This is temporary will change later - define('CIPHER_SEED', '76859309657453542496749683645'); - } - srand (CIPHER_SEED); - $out = ''; - - for ($i = 0; $i < strlen($text); $i++) { - for ($j = 0; $j < ord(substr($key, $i % strlen($key), 1)); $j++) { - $toss = rand(0, 255); - } - $mask = rand(0, 255); - $out .= chr(ord(substr($text, $i, 1)) ^ $mask); - } - return $out; - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/session.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/session.php deleted file mode 100644 index 924b931..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/session.php +++ /dev/null @@ -1,757 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs - * @since CakePHP(tm) v .0.10.0.1222 - * @version $Revision: 7691 $ - * @modifiedby $LastChangedBy: nate $ - * @lastmodified $Date: 2008-10-02 00:59:12 -0400 (Thu, 02 Oct 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Database name for cake sessions. - * - */ - if (!defined('CAKE_SESSION_TABLE')) { - define('CAKE_SESSION_TABLE', 'cake_sessions'); - } - - if (CAKE_SESSION_SAVE === 'database') { - uses('model' . DS . 'connection_manager'); - } - uses('set'); -/** - * Session class for Cake. - * - * Cake abstracts the handling of sessions. There are several convenient methods to access session information. - * This class is the implementation of those methods. They are mostly used by the Session Component. - * - * @package cake - * @subpackage cake.cake.libs - */ -class CakeSession extends Object { -/** - * True if the Session is still valid - * - * @var boolean - * @access public - */ - var $valid = false; -/** - * Error messages for this session - * - * @var array - * @access public - */ - var $error = false; -/** - * User agent string - * - * @var string - * @access protected - */ - var $_userAgent = ''; -/** - * Path to where the session is active. - * - * @var string - * @access public - */ - var $path = '/'; -/** - * Error number of last occurred error - * - * @var integer - * @access public - */ - var $lastError = null; -/** - * CAKE_SECURITY setting, "high", "medium", or "low". - * - * @var string - * @access public - */ - var $security = null; -/** - * Start time for this session. - * - * @var integer - * @access public - */ - var $time = false; -/** - * Time when this session becomes invalid. - * - * @var integer - * @access public - */ - var $sessionTime = false; -/** - * Keeps track of keys to watch for writes on - * - * @var array - * @access public - */ - var $watchKeys = array(); -/** - * Current Session id - * - * @var string - * @access public - */ - var $id = null; -/** - * Constructor. - * - * @param string $base The base path for the Session - * @param boolean $start Should session be started right now - * @access public - */ - function __construct($base = null, $start = true) { - if (Configure::read('Session.checkAgent') === true) { - if (env('HTTP_USER_AGENT') != null) { - $this->_userAgent = md5(env('HTTP_USER_AGENT') . CAKE_SESSION_STRING); - } - } - $this->time = time(); - - if ($start === true) { - $this->host = env('HTTP_HOST'); - - if (empty($base) || strpos($base, '?') === 0 || strpos($base, 'index.php') === 0) { - $this->path = '/'; - } else { - $this->path = $base; - } - - if (strpos($this->host, ':') !== false) { - $this->host = substr($this->host, 0, strpos($this->host, ':')); - } - - $this->sessionTime = $this->time + (Security::inactiveMins() * CAKE_SESSION_TIMEOUT); - $this->security = CAKE_SECURITY; - } - parent::__construct(); - } -/** - * Starts the Session. - * - * @param string $name Variable name to check for - * @return boolean True if variable is there - * @access public - */ - function start() { - if (function_exists('session_write_close')) { - session_write_close(); - } - $this->__initSession(); - return $this->__startSession(); - } -/** - * Determine if Session has been started. - * - * @access public - */ - function started(){ - if (isset($_SESSION)) { - return true; - } - return false; - } -/** - * Returns true if given variable is set in session. - * - * @param string $name Variable name to check for - * @return boolean True if variable is there - * @access public - */ - function check($name) { - $var = $this->__validateKeys($name); - if (empty($var)) { - return false; - } - $result = Set::extract($_SESSION, $var); - return isset($result); - } -/** - * - * @param id $name string - * @return string Session id - * @access public - */ - function id($id = null) { - if ($id) { - $this->id = $id; - session_id($this->id); - } - if (isset($_SESSION)) { - return session_id(); - } else { - return $this->id; - } - } -/** - * Temp method until we are able to remove the last eval(). - * Builds an expression to fetch a session variable with specified name. - * - * @param string $name Name of variable (in dot notation) - * @access private - */ - function __sessionVarNames($name) { - if (is_string($name) && preg_match("/^[ 0-9a-zA-Z._-]*$/", $name)) { - if (strpos($name, ".")) { - $names = explode(".", $name); - } else { - $names = array($name); - } - $expression = "\$_SESSION"; - foreach ($names as $item) { - $expression .= is_numeric($item) ? "[$item]" : "['$item']"; - } - return $expression; - } - $this->__setError(3, "$name is not a string"); - return false; - } -/** - * Removes a variable from session. - * - * @param string $name Session variable to remove - * @return boolean Success - * @access public - */ - function del($name) { - if ($this->check($name)) { - if ($var = $this->__validateKeys($name)) { - if (in_array($var, $this->watchKeys)) { - trigger_error('Deleting session key {' . $var . '}', E_USER_NOTICE); - } - $this->__overwrite($_SESSION, Set::remove($_SESSION, $var)); - return ($this->check($var) == false); - } - } - $this->__setError(2, "$name doesn't exist"); - return false; - } -/** - * Used to write new data to _SESSION, since PHP doesn't like us setting the _SESSION var itself - * - * @param array $old Set of old variables => values - * @param array $new New set of variable => value - * @access private - */ - function __overwrite(&$old, $new) { - if(!empty($old)) { - foreach ($old as $key => $var) { - if (!isset($new[$key])) { - unset($old[$key]); - } - } - } - foreach ($new as $key => $var) { - $old[$key] = $var; - } - } -/** - * Return error description for given error number. - * - * @param integer $errorNumber Error to set - * @return string Error as string - * @access private - */ - function __error($errorNumber) { - if (!is_array($this->error) || !array_key_exists($errorNumber, $this->error)) { - return false; - } else { - return $this->error[$errorNumber]; - } - } -/** - * Returns last occurred error as a string, if any. - * - * @return mixed Error description as a string, or false. - * @access public - */ - function error() { - if ($this->lastError) { - return $this->__error($this->lastError); - } else { - return false; - } - } -/** - * Returns true if session is valid. - * - * @return boolean Success - * @access public - */ - function valid() { - if ($this->read('Config')) { - if (Configure::read('Session.checkAgent') === false || $this->_userAgent == $this->read("Config.userAgent") && $this->time <= $this->read("Config.time")) { - if ($this->error === false) { - $this->valid = true; - } - } else { - $this->valid = false; - $this->__setError(1, "Session Highjacking Attempted !!!"); - } - } - return $this->valid; - } -/** - * Returns given session variable, or all of them, if no parameters given. - * - * @param mixed $name The name of the session variable (or a path as sent to Set.extract) - * @return mixed The value of the session variable - * @access public - */ - function read($name = null) { - if (is_null($name)) { - return $this->__returnSessionVars(); - } - if (empty($name)) { - return false; - } - $result = Set::extract($_SESSION, $name); - - if (!is_null($result)) { - return $result; - } - $this->__setError(2, "$name doesn't exist"); - return null; - } -/** - * Returns all session variables. - * - * @return mixed Full $_SESSION array, or false on error. - * @access private - */ - function __returnSessionVars() { - if (!empty($_SESSION)) { - return $_SESSION; - } - $this->__setError(2, "No Session vars set"); - return false; - } -/** - * Tells Session to write a notification when a certain session path or subpath is written to - * - * @param mixed $var The variable path to watch - * @access public - */ - function watch($var) { - $var = $this->__validateKeys($var); - if (empty($var)) { - return false; - } - $this->watchKeys[] = $var; - } -/** - * Tells Session to stop watching a given key path - * - * @param mixed $var The variable path to watch - * @access public - */ - function ignore($var) { - $var = $this->__validateKeys($var); - if (!in_array($var, $this->watchKeys)) { - return; - } - foreach ($this->watchKeys as $i => $key) { - if ($key == $var) { - unset($this->watchKeys[$i]); - $this->watchKeys = array_values($this->watchKeys); - return; - } - } - } -/** - * Writes value to given session variable name. - * - * @param mixed $name Name of variable - * @param string $value Value to write - * @return boolean True if the write was successful, false if the write failed - * @access public - */ - function write($name, $value) { - $var = $this->__validateKeys($name); - - if (empty($var)) { - return false; - } - if (in_array($var, $this->watchKeys)) { - trigger_error('Writing session key {' . $var . '}: ' . print_r($value), E_USER_NOTICE); - } - $this->__overwrite($_SESSION, Set::insert($_SESSION, $var, $value)); - return (Set::extract($_SESSION, $var) === $value); - } -/** - * Helper method to destroy invalid sessions. - * - * @access public - */ - function destroy() { - $sessionpath = session_save_path(); - if (empty($sessionpath)) { - $sessionpath = "/tmp"; - } - - if (isset($_COOKIE[session_name()])) { - setcookie(CAKE_SESSION_COOKIE, '', time() - 42000, $this->path); - } - - $_SESSION = array(); - $file = $sessionpath . DS . "sess_" . session_id(); - @session_destroy(); - @unlink ($file); - $this->__construct($this->path); - $this->renew(); - } -/** - * Helper method to initialize a session, based on Cake core settings. - * - * @access private - */ - function __initSession() { - switch($this->security) { - case 'high': - $this->cookieLifeTime = 0; - if (function_exists('ini_set')) { - ini_set('session.referer_check', $this->host); - } - break; - case 'medium': - $this->cookieLifeTime = 7 * 86400; - if (function_exists('ini_set')) { - ini_set('session.referer_check', $this->host); - } - break; - case 'low': - default: - $this->cookieLifeTime = 788940000; - break; - } - - switch(CAKE_SESSION_SAVE) { - case 'cake': - if (!isset($_SESSION)) { - if (function_exists('ini_set')) { - ini_set('session.use_trans_sid', 0); - ini_set('url_rewriter.tags', ''); - ini_set('session.serialize_handler', 'php'); - ini_set('session.use_cookies', 1); - ini_set('session.name', CAKE_SESSION_COOKIE); - ini_set('session.cookie_lifetime', $this->cookieLifeTime); - ini_set('session.cookie_path', $this->path); - ini_set('session.auto_start', 0); - ini_set('session.save_path', TMP . 'sessions'); - } - } - break; - case 'database': - if (!isset($_SESSION)) { - if (function_exists('ini_set')) { - ini_set('session.use_trans_sid', 0); - ini_set('url_rewriter.tags', ''); - ini_set('session.save_handler', 'user'); - ini_set('session.serialize_handler', 'php'); - ini_set('session.use_cookies', 1); - ini_set('session.name', CAKE_SESSION_COOKIE); - ini_set('session.cookie_lifetime', $this->cookieLifeTime); - ini_set('session.cookie_path', $this->path); - ini_set('session.auto_start', 0); - } - } - session_set_save_handler(array('CakeSession','__open'), - array('CakeSession', '__close'), - array('CakeSession', '__read'), - array('CakeSession', '__write'), - array('CakeSession', '__destroy'), - array('CakeSession', '__gc')); - break; - case 'php': - if (!isset($_SESSION)) { - if (function_exists('ini_set')) { - ini_set('session.use_trans_sid', 0); - ini_set('session.name', CAKE_SESSION_COOKIE); - ini_set('session.cookie_lifetime', $this->cookieLifeTime); - ini_set('session.cookie_path', $this->path); - } - } - break; - default: - if (!isset($_SESSION)) { - $config = CONFIGS . CAKE_SESSION_SAVE . '.php'; - - if (is_file($config)) { - require_once ($config); - } - } - break; - } - } -/** - * Helper method to start a session - * - * @access private - */ - function __startSession() { - if (headers_sent()) { - if (!isset($_SESSION)) { - $_SESSION = array(); - } - return false; - } elseif (!isset($_SESSION)) { - session_cache_limiter ("must-revalidate"); - session_start(); - header ('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"'); - return true; - } else { - session_start(); - return true; - } - } -/** - * Helper method to create a new session. - * - * @access protected - */ - function _checkValid() { - if ($this->read('Config')) { - if (Configure::read('Session.checkAgent') === false || $this->_userAgent == $this->read("Config.userAgent") && $this->time <= $this->read("Config.time")) { - $time = $this->read("Config.time"); - $this->write("Config.time", $this->sessionTime); - - if ($this->security === 'high') { - $check = $this->read("Config.timeout"); - $check = $check - 1; - $this->write("Config.timeout", $check); - - if (time() > ($time - (Security::inactiveMins() * CAKE_SESSION_TIMEOUT) + 2) || $check < 1) { - $this->renew(); - $this->write('Config.timeout', 10); - } - } - $this->valid = true; - } else { - $this->destroy(); - $this->valid = false; - $this->__setError(1, "Session Highjacking Attempted !!!"); - } - } else { - srand ((double)microtime() * 1000000); - $this->write("Config.userAgent", $this->_userAgent); - $this->write("Config.time", $this->sessionTime); - $this->write('Config.rand', rand()); - $this->write('Config.timeout', 10); - $this->valid = true; - $this->__setError(1, "Session is valid"); - } - } -/** - * Helper method to restart a session. - * - * @access private - */ - function __regenerateId() { - $oldSessionId = session_id(); - if ($oldSessionId) { - $sessionpath = session_save_path(); - if (empty($sessionpath)) { - $sessionpath = "/tmp"; - } - - if (isset($_COOKIE[session_name()])) { - setcookie(CAKE_SESSION_COOKIE, '', time() - 42000, $this->path); - } - session_regenerate_id(); - $newSessid = session_id(); - - if (function_exists('session_write_close')) { - session_write_close(); - } - $this->__initSession(); - session_id($oldSessionId); - session_start(); - session_destroy(); - $file = $sessionpath . DS . "sess_$oldSessionId"; - @unlink($file); - $this->__initSession(); - session_id($newSessid); - session_start(); - } - } -/** - * Restarts this session. - * - * @access public - */ - function renew() { - $this->__regenerateId(); - } -/** - * Validate that the $name is in correct dot notation - * example: $name = 'ControllerName.key'; - * - * @param string $name Session key names as string. - * @return mixed false is $name is not correct format, or $name if it is correct - * @access private - */ - function __validateKeys($name) { - if (is_string($name) && preg_match("/^[ 0-9a-zA-Z._-]*$/", $name)) { - return $name; - } - $this->__setError(3, "$name is not a string"); - return false; - } -/** - * Helper method to set an internal error message. - * - * @param integer $errorNumber Number of the error - * @param string $errorMessage Description of the error - * @access private - */ - function __setError($errorNumber, $errorMessage) { - if ($this->error === false) { - $this->error = array(); - } - $this->error[$errorNumber] = $errorMessage; - $this->lastError = $errorNumber; - } -/** - * Method called on open of a database session. - * - * @return boolean Success - * @access private - */ - function __open() { - return true; - } -/** - * Method called on close of a database session. - * - * @return boolean Success - * @access private - */ - function __close() { - $probability = mt_rand(1, 150); - if ($probability <= 3) { - CakeSession::__gc(); - } - return true; - } -/** - * Method used to read from a database session. - * - * @param mixed $key The key of the value to read - * @return mixed The value of the key or false if it does not exist - * @access private - */ - function __read($key) { - $db =& ConnectionManager::getDataSource('default'); - $table = $db->fullTableName(CAKE_SESSION_TABLE, false); - $row = $db->query("SELECT " . $db->name($table.'.data') . " FROM " . $db->name($table) . " WHERE " . $db->name($table.'.id') . " = " . $db->value($key), false); - - if ($row && !isset($row[0][$table]) && isset($row[0][0])) { - $table = 0; - } - - if ($row && $row[0][$table]['data']) { - return $row[0][$table]['data']; - } else { - return false; - } - } -/** - * Helper function called on write for database sessions. - * - * @param mixed $key The name of the var - * @param mixed $value The value of the var - * @return boolean Success - * @access private - */ - function __write($key, $value) { - $db =& ConnectionManager::getDataSource('default'); - $table = $db->fullTableName(CAKE_SESSION_TABLE); - - switch(CAKE_SECURITY) { - case 'high': - $factor = 10; - break; - case 'medium': - $factor = 100; - break; - case 'low': - $factor = 300; - break; - default: - $factor = 10; - break; - } - $expires = time() + CAKE_SESSION_TIMEOUT * $factor; - $row = $db->query("SELECT COUNT(id) AS count FROM " . $db->name($table) . " WHERE " - . $db->name('id') . " = " - . $db->value($key), false); - - if ($row[0][0]['count'] > 0) { - $db->execute("UPDATE " . $db->name($table) . " SET " . $db->name('data') . " = " - . $db->value($value) . ", " . $db->name('expires') . " = " - . $db->value($expires) . " WHERE " . $db->name('id') . " = " - . $db->value($key)); - } else { - $db->execute("INSERT INTO " . $db->name($table) . " (" . $db->name('data') . "," - . $db->name('expires') . "," . $db->name('id') - . ") VALUES (" . $db->value($value) . ", " . $db->value($expires) . ", " - . $db->value($key) . ")"); - } - return true; - } -/** - * Method called on the destruction of a database session. - * - * @param int $key Key that uniquely identifies session in database - * @return boolean Success - * @access private - */ - function __destroy($key) { - $db =& ConnectionManager::getDataSource('default'); - $table = $db->fullTableName(CAKE_SESSION_TABLE); - $db->execute("DELETE FROM " . $db->name($table) . " WHERE " . $db->name($table.'.id') . " = " . $db->value($key, 'integer')); - return true; - } -/** - * Helper function called on gc for database sessions. - * - * @param int $expires Timestamp (defaults to current time) - * @return boolean Success - * @access private - */ - function __gc($expires = null) { - $db =& ConnectionManager::getDataSource('default'); - $table = $db->fullTableName(CAKE_SESSION_TABLE); - $db->execute("DELETE FROM " . $db->name($table) . " WHERE " . $db->name($table.'.expires') . " < ". $db->value(time())); - return true; - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/set.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/set.php deleted file mode 100644 index 44147b9..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/set.php +++ /dev/null @@ -1,805 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs - * @since CakePHP(tm) v 1.2.0 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Class used for manipulation of arrays. - * - * Long description for class - * - * @package cake - * @subpackage cake.cake.libs - */ -class Set extends Object { -/** - * Value of the Set object. - * - * @var array - * @access public - */ - var $value = array(); -/** - * Constructor. Defaults to an empty array. - * - * @access public - */ - function __construct() { - if (func_num_args() == 1 && is_array(func_get_arg(0))) { - $this->value = func_get_arg(0); - } else { - $this->value = func_get_args(); - } - } -/** - * Returns the contents of the Set object - * - * @return array - * @access public - */ - function &get() { - return $this->value; - } -/** - * This function can be thought of as a hybrid between PHP's array_merge and array_merge_recursive. The difference - * to the two is that if an array key contains another array then the function behaves recursive (unlike array_merge) - * but does not do if for keys containing strings (unlike array_merge_recursive). See the unit test for more information. - * - * Note: This function will work with an unlimited amount of arguments and typecasts non-array parameters into arrays. - * - * @param array $arr1 Array to be merged - * @param array $arr2 Array to merge with - * @return array Merged array - * @access public - */ - function merge($arr1, $arr2 = null) { - $args = func_get_args(); - - if (is_a($this, 'set')) { - $backtrace = debug_backtrace(); - $previousCall = strtolower($backtrace[1]['class'].'::'.$backtrace[1]['function']); - if ($previousCall != 'set::merge') { - $r =& $this->value; - array_unshift($args, null); - } - } - if (!isset($r)) { - $r = (array)current($args); - } - - while (($arg = next($args)) !== false) { - if (is_a($arg, 'set')) { - $arg = $arg->get(); - } - - foreach ((array)$arg as $key => $val) { - if (is_array($val) && isset($r[$key]) && is_array($r[$key])) { - $r[$key] = Set::merge($r[$key], $val); - } elseif (is_int($key)) { - $r[] = $val; - } else { - $r[$key] = $val; - } - } - } - return $r; - } -/** - * Filters empty elements out of a route array, excluding '0'. - * - * @param mixed $var Either an array to filter, or value when in callback - * @param boolean $isArray Force to tell $var is an array when $var is empty - * @return mixed Either filtered array, or true/false when in callback - * @access public - */ - function filter($var, $isArray = false) { - if (is_array($var) && (!empty($var) || $isArray)) { - return array_filter($var, array('Set', 'filter')); - } else { - if ($var === 0 || $var === '0' || !empty($var)) { - return true; - } else { - return false; - } - } - } -/** - * Pushes the differences in $array2 onto the end of $array - * - * @param mixed $array Original array - * @param mixed $array2 Differences to push - * @return array Combined array - * @access public - */ - function pushDiff($array = null, $array2 = null) { - if ($array2 !== null && is_array($array2)) { - foreach ($array2 as $key => $value) { - if (!array_key_exists($key, $array)) { - $array[$key] = $value; - } else { - if (is_array($value)) { - $array[$key] = Set::pushDiff($array[$key], $array2[$key]); - } - } - } - return $array; - } - - if (!isset($this->value)) { - $this->value = array(); - } - $this->value = Set::pushDiff($this->value, Set::__array($array)); - return $this->value; - } -/** - * Maps the contents of the Set object to an object hierarchy. - * Maintains numeric keys as arrays of objects - * - * @param string $class A class name of the type of object to map to - * @param string $tmp A temporary class name used as $class if $class is an array - * @return object Hierarchical object - * @access public - */ - function map($class = 'stdClass', $tmp = 'stdClass') { - if (is_array($class)) { - $val = $class; - $class = $tmp; - } elseif (is_a($this, 'set')) { - $val = $this->get(); - } - - if (empty($val) || $val == null) { - return null; - } - return Set::__map($val, $class); - } - -/** - * Get the array value of $array. If $array is null, it will return - * the current array Set holds. If it is an object of type Set, it - * will return its value. If it is another object, its object variables. - * If it is anything else but an array, it will return an array whose first - * element is $array. - * - * @param mixed $array Data from where to get the array. - * @return array Array from $array. - * @access private - */ - function __array($array) { - if ($array == null) { - $array = $this->value; - } elseif (is_object($array) && (is_a($array, 'set'))) { - $array = $array->get(); - } elseif (is_object($array)) { - $array = get_object_vars($array); - } elseif (!is_array($array)) { - $array = array($array); - } - return $array; - } - -/** - * Maps the given value as an object. If $value is an object, - * it returns $value. Otherwise it maps $value as an object of - * type $class, and if primary assign _name_ $key on first array. - * If $value is not empty, it will be used to set properties of - * returned object (recursively). If $key is numeric will maintain array - * structure - * - * @param mixed $value Value to map - * @param string $class Class name - * @param boolean $primary whether to assign first array key as the _name_ - * @return mixed Mapped object - * @access private - */ - function __map(&$array, $class, $primary = false) { - if ($class === true) { - $out = new stdClass; - } else { - $out = new $class; - } - if (is_array($array)) { - $keys = array_keys($array); - foreach ($array as $key => $value) { - if($keys[0] === $key && $class !== true) { - $primary = true; - } - if (is_numeric($key)) { - if (is_object($out) && is_array($value)) { - $out = get_object_vars($out); - } - $out[$key] = Set::__map($value, $class, true); - } elseif ($primary === true && is_array($value)) { - $out->_name_ = $key; - $primary = false; - foreach($value as $key2 => $value2) { - $out->{$key2} = Set::__map($value2, $class); - } - } else { - $out->{$key} = Set::__map($value, $class); - } - } - } else { - $out = $array; - } - return $out; - } -/** - * Checks to see if all the values in the array are numeric - * - * @param array $array The array to check. If null, the value of the current Set object - * @return boolean true if values are numeric, false otherwise - * @access public - */ - function numeric($array = null) { - if ($array == null && (is_a($this, 'set') || is_a($this, 'Set'))) { - $array = $this->get(); - } - - $numeric = true; - $keys = array_keys($array); - $count = count($keys); - for ($i = 0; $i < $count; $i++) { - if (!is_numeric($array[$keys[$i]])) { - $numeric = false; - break; - } - } - return $numeric; - } -/** - * Return a value from an array list if the key exists. - * - * If a comma separated $list is passed arrays are numeric with the key of the first being 0 - * $list = 'no, yes' would translate to $list = array(0 => 'no', 1 => 'yes'); - * - * If an array is used, keys can be strings example: array('no' => 0, 'yes' => 1); - * - * $list defaults to 0 = no 1 = yes if param is not passed - * - * @param mixed $select Key in $list to return - * @param mixed $list can be an array or a comma-separated list. - * @return string the value of the array key or null if no match - * @access public - */ - function enum($select, $list = null) { - if (empty($list) && is_a($this, 'Set')) { - $list = $this->get(); - } elseif (empty($list)) { - $list = array('no', 'yes'); - } - - $return = null; - $list = Set::normalize($list, false); - - if (array_key_exists($select, $list)) { - $return = $list[$select]; - } - return $return; - } -/** - * Returns a series of values extracted from an array, formatted in a format string. - * - * @param array $data Source array from which to extract the data - * @param string $format Format string into which values will be inserted, see sprintf() - * @param array $keys An array containing one or more Set::extract()-style key paths - * @return array An array of strings extracted from $keys and formatted with $format - * @access public - */ - function format($data, $format, $keys) { - - $extracted = array(); - $count = count($keys); - - if (!$count) { - return; - } - - for ($i = 0; $i < $count; $i++) { - $extracted[] = Set::extract($data, $keys[$i]); - } - $out = array(); - $data = $extracted; - $count = count($data[0]); - - if (preg_match_all('/\{([0-9]+)\}/msi', $format, $keys2) && isset($keys2[1])) { - $keys = $keys2[1]; - $format = preg_split('/\{([0-9]+)\}/msi', $format); - $count2 = count($format); - - for ($j = 0; $j < $count; $j++) { - $formatted = ''; - for ($i = 0; $i <= $count2; $i++) { - if (isset($format[$i])) { - $formatted .= $format[$i]; - } - if (isset($keys[$i]) && isset($data[$keys[$i]][$j])) { - $formatted .= $data[$keys[$i]][$j]; - } - } - $out[] = $formatted; - } - } else { - $count2 = count($data); - for ($j = 0; $j < $count; $j++) { - $args = array(); - for ($i = 0; $i < $count2; $i++) { - if (isset($data[$i][$j])) { - $args[] = $data[$i][$j]; - } - } - $out[] = vsprintf($format, $args); - } - } - return $out; - } -/** - * Gets a value from an array or object that maps a given path. - * The special {n}, as seen in the Model::generateList method, is taken care of here. - * - * @param array $data Array from where to extract - * @param mixed $path As an array, or as a dot-separated string. - * @return array Extracted data - * @access public - */ - function extract($data, $path = null) { - if ($path === null && is_a($this, 'set')) { - $path = $data; - $data = $this->get(); - } - if (is_object($data)) { - $data = get_object_vars($data); - } - - if (!is_array($path)) { - if (strpos($path, '/') !== 0 && strpos($path, './') === false) { - $path = explode('.', $path); - } else { - } - } - $tmp = array(); - if (!is_array($path) || empty($path)) { - return null; - } - - foreach ($path as $i => $key) { - if (is_numeric($key) && intval($key) > 0 || $key == '0') { - if (isset($data[intval($key)])) { - $data = $data[intval($key)]; - } else { - return null; - } - } elseif ($key == '{n}') { - foreach ($data as $j => $val) { - if (is_int($j)) { - $tmpPath = array_slice($path, $i + 1); - if (empty($tmpPath)) { - $tmp[] = $val; - } else { - $tmp[] = Set::extract($val, $tmpPath); - } - } - } - return $tmp; - } else { - if (isset($data[$key])) { - $data = $data[$key]; - } else { - return null; - } - } - } - return $data; - } -/** - * Inserts $data into an array as defined by $path. - * - * @param mixed $list Where to insert into - * @param mixed $path A dot-separated string. - * @param array $data Data to insert - * @return array - * @access public - */ - function insert($list, $path, $data = null) { - if (empty($data) && is_a($this, 'Set')) { - $data = $path; - $path = $list; - $list =& $this->get(); - } - if (!is_array($path)) { - $path = explode('.', $path); - } - $_list =& $list; - - foreach ($path as $i => $key) { - if (is_numeric($key) && intval($key) > 0 || $key == '0') { - $key = intval($key); - } - if ($i == count($path) - 1) { - $_list[$key] = $data; - } else { - if (!isset($_list[$key])) { - $_list[$key] = array(); - } - $_list =& $_list[$key]; - } - } - return $list; - } -/** - * Removes an element from a Set or array as defined by $path. - * - * @param mixed $list From where to remove - * @param mixed $path A dot-separated string. - * @return array Array with $path removed from its value - * @access public - */ - function remove($list, $path = null) { - if (empty($path) && is_a($this, 'Set')) { - $path = $list; - $list =& $this->get(); - } - if (!is_array($path)) { - $path = explode('.', $path); - } - $_list =& $list; - - foreach ($path as $i => $key) { - if (is_numeric($key) && intval($key) > 0 || $key == '0') { - $key = intval($key); - } - if ($i == count($path) - 1) { - unset($_list[$key]); - } else { - if (!isset($_list[$key])) { - return $list; - } - $_list =& $_list[$key]; - } - } - - if (is_a($this, 'Set')) { - $this->value = $list; - return $this; - } else { - return $list; - } - } -/** - * Checks if a particular path is set in an array - * - * @param mixed $data Data to check on - * @param mixed $path A dot-separated string. - * @return boolean true if path is found, false otherwise - * @access public - */ - function check($data, $path = null) { - if (empty($path) && is_a($this, 'Set')) { - $path = $data; - $data = $this->get(); - } - if (!is_array($path)) { - $path = explode('.', $path); - } - - foreach ($path as $i => $key) { - if (is_numeric($key) && intval($key) > 0 || $key == '0') { - $key = intval($key); - } - if ($i == count($path) - 1) { - return isset($data[$key]); - } else { - if (!isset($data[$key])) { - return false; - } - $data =& $data[$key]; - } - } - return true; - } -/** - * Computes the difference between a Set and an array, two Sets, or two arrays - * - * @param mixed $val1 First value - * @param mixed $val2 Second value - * @return array Computed difference - * @access public - */ - function diff($val1, $val2 = null) { - if ($val2 == null && (is_a($this, 'set') || is_a($this, 'Set'))) { - $val2 = $val1; - $val1 = $this->get(); - } - - if (is_object($val2) && (is_a($val2, 'set') || is_a($val2, 'Set'))) { - $val2 = $val2->get(); - } - $out = array(); - - if (empty($val1)) { - return (array)$val2; - } elseif (empty($val2)) { - return (array)$val1; - } - - foreach ($val1 as $key => $val) { - if (array_key_exists($key, $val2) && $val2[$key] != $val) { - $out[$key] = $val; - } elseif (!array_key_exists($key, $val2)) { - $out[$key] = $val; - } - unset($val2[$key]); - } - - foreach ($val2 as $key => $val) { - if (!array_key_exists($key, $out)) { - $out[$key] = $val; - } - } - return $out; - } -/** - * Determines if two Sets or arrays are equal - * - * @param array $val1 First value - * @param array $val2 Second value - * @return boolean true if they are equal, false otherwise - * @access public - */ - function isEqual($val1, $val2 = null) { - if ($val2 == null && (is_a($this, 'set') || is_a($this, 'Set'))) { - $val2 = $val1; - $val1 = $this->get(); - } - - return ($val1 == $val2); - } -/** - * Determines if one Set or array contains the exact keys and values of another. - * - * @param array $val1 First value - * @param array $val2 Second value - * @return boolean true if $val1 contains $val2, false otherwise - * @access public - */ - function contains($val1, $val2 = null) { - if ($val2 == null && is_a($this, 'set')) { - $val2 = $val1; - $val1 = $this->get(); - } elseif ($val2 != null && is_object($val2) && is_a($val2, 'set')) { - $val2 = $val2->get(); - } - - foreach ($val2 as $key => $val) { - if (is_numeric($key)) { - if (!in_array($val, $val1)) { - return false; - } - } else { - if (!isset($val1[$key]) || $val1[$key] != $val) { - return false; - } - } - } - return true; - } -/** - * Counts the dimensions of an array. If $all is set to false (which is the default) it will - * only consider the dimension of the first element in the array. - * - * @param array $array Array to count dimensions on - * @param boolean $all Set to true to count the dimension considering all elements in array - * @param integer $count Start the dimension count at this number - * @return integer The number of dimensions in $array - * @access public - */ - function countDim($array = null, $all = false, $count = 0) { - if ($array === null) { - $array = $this->get(); - } elseif (is_object($array) && is_a($array, 'set')) { - $array = $array->get(); - } - if ($all) { - $depth = array($count); - if (is_array($array) && reset($array) !== false) { - foreach ($array as $value) { - $depth[] = Set::countDim($value, true, $count + 1); - } - } - $return = max($depth); - } else { - if (is_array(reset($array))) { - $return = Set::countDim(reset($array)) + 1; - } else { - $return = 1; - } - } - return $return; - } -/** - * Normalizes a string or array list. - * - * @param mixed $list List to normalize - * @param boolean $assoc If true, $list will be converted to an associative array - * @param string $sep If $list is a string, it will be split into an array with $sep - * @param boolean $trim If true, separated strings will be trimmed - * @return array - * @access public - */ - function normalize($list, $assoc = true, $sep = ',', $trim = true) { - if (is_string($list)) { - $list = explode($sep, $list); - if ($trim) { - $list = array_map('trim', $list); - } - if ($assoc) { - return Set::normalize($list); - } - } elseif (is_array($list)) { - $keys = array_keys($list); - $count = count($keys); - $numeric = true; - - if (!$assoc) { - for ($i = 0; $i < $count; $i++) { - if (!is_int($keys[$i])) { - $numeric = false; - break; - } - } - } - if (!$numeric || $assoc) { - $newList = array(); - for ($i = 0; $i < $count; $i++) { - if (is_int($keys[$i])) { - $newList[$list[$keys[$i]]] = null; - } else { - $newList[$keys[$i]] = $list[$keys[$i]]; - } - } - $list = $newList; - } - } - return $list; - } -/** - * Creates an associative array using a $path1 as the path to build its keys, and optionally - * $path2 as path to get the values. If $path2 is not specified, all values will be initialized - * to null (useful for Set::merge). You can optionally group the values by what is obtained when - * following the path specified in $groupPath. - * - * @param array $data Array from where to extract keys and values - * @param mixed $path1 As an array, or as a dot-separated string. - * @param mixed $path2 As an array, or as a dot-separated string. - * @param string $groupPath As an array, or as a dot-separated string. - * @return array Combined array - * @access public - */ - function combine($data, $path1 = null, $path2 = null, $groupPath = null) { - if (is_a($this, 'set') && is_string($data) && is_string($path1) && is_string($path2)) { - $groupPath = $path2; - $path2 = $path1; - $path1 = $data; - $data = $this->get(); - - } elseif (is_a($this, 'set') && is_string($data) && empty($path2)) { - $path2 = $path1; - $path1 = $data; - $data = $this->get(); - } - - if (is_object($data)) { - $data = get_object_vars($data); - } - - if (is_array($path1)) { - $format = array_shift($path1); - $keys = Set::format($data, $format, $path1); - } else { - $keys = Set::extract($data, $path1); - } - - if (!empty($path2) && is_array($path2)) { - $format = array_shift($path2); - $vals = Set::format($data, $format, $path2); - - } elseif (!empty($path2)) { - $vals = Set::extract($data, $path2); - - } else { - $count = count($keys); - for ($i = 0; $i < $count; $i++) { - $vals[$i] = null; - } - } - - if ($groupPath != null) { - $group = Set::extract($data, $groupPath); - if (!empty($group)) { - $c = count($keys); - for ($i = 0; $i < $c; $i++) { - if (!isset($group[$i])) { - $group[$i] = 0; - } - if (!isset($out[$group[$i]])) { - $out[$group[$i]] = array(); - } - $out[$group[$i]][$keys[$i]] = $vals[$i]; - } - return $out; - } - } - - return array_combine($keys, $vals); - } -/** - * Converts an object into an array - * - * @param object $object - * @return array - */ - function reverse($object) { - if (is_a($object, 'xmlnode') || is_a($object, 'XMLNode')) { - if ($object->name != Inflector::underscore($this->name)) { - if (is_object($object->child(Inflector::underscore($this->name)))) { - $object = $object->child(Inflector::underscore($this->name)); - $object = $object->attributes; - } else { - return null; - } - } - } else { - $out = array(); - if (is_object($object)) { - $keys = get_object_vars($object); - if (isset($keys['_name_'])) { - $identity = $keys['_name_']; - unset($keys['_name_']); - } - $new = array(); - foreach ($keys as $key => $value) { - if (is_array($value)) { - $new[$key] = (array)Set::reverse($value); - } else { - $new[$key] = Set::reverse($value); - } - } - if (isset($identity)) { - $out[$identity] = $new; - } else { - $out = $new; - } - } elseif (is_array($object)) { - foreach ($object as $key => $value) { - $out[$key] = Set::reverse($value); - } - } else { - $out = $object; - } - return $out; - } - return $object; - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/validators.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/validators.php deleted file mode 100644 index cbd7c03..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/validators.php +++ /dev/null @@ -1,45 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs - * @since CakePHP(tm) v 0.2.9 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Not empty. - */ - define('VALID_NOT_EMPTY', '/.+/'); -/** - * Numbers [0-9] only. - */ - define('VALID_NUMBER', '/^[-+]?\\b[0-9]*\\.?[0-9]+\\b$/'); -/** - * A valid email address. - */ - define('VALID_EMAIL', '/\\A(?:^([a-z0-9][a-z0-9_\\-\\.\\+]*)@([a-z0-9][a-z0-9\\.\\-]{0,63}\\.(com|org|net|biz|info|name|net|pro|aero|coop|museum|[a-z]{2,4}))$)\\z/i'); -/** - * A valid year (1000-2999). - */ - define('VALID_YEAR', '/^[12][0-9]{3}$/'); -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helper.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helper.php deleted file mode 100644 index 99ec582..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helper.php +++ /dev/null @@ -1,167 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.view - * @since CakePHP(tm) v 0.2.9 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Backend for helpers. - * - * Long description for class - * - * @package cake - * @subpackage cake.cake.libs.view - */ -class Helper extends Object { -/** - * Holds tag templates. - * - * @access public - * @var array - */ - var $tags = array('link' => '%s', - 'mailto' => '%s', - 'form' => '
', - 'input' => '', - 'textarea' => '', - 'hidden' => '', - 'textarea' => '', - 'checkbox' => '', - 'radio' => '%s', - 'selectstart' => '', - 'selectempty' => '', - 'selectoption' => '', - 'selectend' => '', - 'password' => '', - 'file' => '', - 'file_no_model' => '', - 'submit' => '', - 'image' => '', - 'tableheader' => '%s', - 'tableheaderrow' => '%s', - 'tablecell' => '%s', - 'tablerow' => '%s', - 'block' => '%s', - 'blockstart' => '', - 'blockend' => '', - 'css' => '', - 'style' => '', - 'charset' => '', - 'javascriptblock' => '', - 'javascriptlink' => ''); -/** - * Parses custom config/tags.ini.php and merges with $this->tags. - * - * @return html tags used by helpers - */ - function loadConfig() { - - if (file_exists(APP . 'config' . DS . 'tags.ini.php')) { - $tags = $this->readConfigFile(APP . 'config' . DS . 'tags.ini.php'); - $this->tags = am($this->tags, $tags); - } - return $this->tags; - } -/** - * Decides whether to output or return a string. - * - * Based on AUTO_OUTPUT and $return's value, this method decides whether to - * output a string, or return it. - * - * @param string $str String to be output or returned. - * @param boolean $return Whether this method should return a value or output it. - * @return mixed Either string or echos the value, depends on AUTO_OUTPUT and $return. - */ - function output($str, $return = false) { - if (AUTO_OUTPUT && $return === false) { - echo $str; - } else { - return $str; - } - } -/** - * Assigns values to tag templates. - * - * Finds a tag template by $keyName, and replaces $values's keys with - * $values's keys. - * - * @param string $keyName Name of the key in the tag array. - * @param array $values Values to be inserted into tag. - * @return string Tag with inserted values. - */ - function assign($keyName, $values) { - return str_replace('%%' . array_keys($values) . '%%', array_values($values), $this->tags[$keyName]); - } -/** - * Returns an array of settings in given INI file. - * - * @param string $fileName ini file to read - * @return array of lines from the $fileName - */ - function readConfigFile($fileName) { - $fileLineArray = file($fileName); - - foreach ($fileLineArray as $fileLine) { - $dataLine = trim($fileLine); - $firstChar = substr($dataLine, 0, 1); - - if ($firstChar != ';' && $dataLine != '') { - if ($firstChar == '[' && substr($dataLine, -1, 1) == ']') { - // [section block] we might use this later do not know for sure - // this could be used to add a key with the section block name - // but it adds another array level - } else { - $delimiter = strpos($dataLine, '='); - - if ($delimiter > 0) { - $key = strtolower(trim(substr($dataLine, 0, $delimiter))); - $value = trim(stripcslashes(substr($dataLine, $delimiter + 1))); - - if (substr($value, 0, 1) == '"' && substr($value, -1) == '"') { - $value = substr($value, 1, -1); - } - - $iniSetting[$key] = $value; - - } else { - $iniSetting[strtolower(trim($dataLine))] = ''; - } - } - } else { - } - } - - return $iniSetting; - } -/** - * After render callback. Overridden in subclasses. - * - * @return void - */ - function afterRender() { - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/ajax.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/ajax.php deleted file mode 100644 index 9e14931..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/ajax.php +++ /dev/null @@ -1,853 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.view.helpers - * @since CakePHP(tm) v 0.10.0.1076 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * AjaxHelper library. - * - * Helps doing AJAX using the Prototype library. - * - * @package cake - * @subpackage cake.cake.libs.view.helpers - */ -class AjaxHelper extends Helper { -/** - * Included helpers. - * - * @var array - * @access public - */ - var $helpers = array('Html', 'Javascript'); -/** - * Names of Javascript callback functions. - * - * @var array - * @access public - */ - var $callbacks = array('uninitialized', 'loading', 'loaded', 'interactive', 'complete', 'success', 'failure'); -/** - * Names of AJAX options. - * - * @var array - * @access public - */ - var $ajaxOptions = array('type', 'confirm', 'condition', 'before', 'after', 'fallback', 'update', 'loading', 'loaded', 'interactive', 'complete', 'with', 'url', 'method', 'position', 'form', 'parameters', 'evalScripts', 'asynchronous', 'onComplete', 'onUninitialized', 'onLoading', 'onLoaded', 'onInteractive', 'success', 'failure', 'onSuccess', 'onFailure', 'insertion', 'requestHeaders'); -/** - * Options for draggable. - * - * @var array - * @access public - */ - var $dragOptions = array('handle', 'revert', 'constraint', 'change', 'ghosting'); -/** - * Options for droppable. - * - * @var array - * @access public - */ - var $dropOptions = array('accept', 'containment', 'overlap', 'greedy', 'hoverclass', 'onHover', 'onDrop'); -/** - * Options for sortable. - * - * @var array - * @access public - */ - var $sortOptions = array('tag', 'only', 'overlap', 'constraint', 'containment', 'handle', 'hoverclass', 'ghosting', 'dropOnEmpty', 'onUpdate', 'onChange'); -/** - * Options for slider. - * - * @var array - * @access public - */ - var $sliderOptions = array('axis', 'increment', 'maximum', 'minimum', 'alignX', 'alignY', 'sliderValue', 'disabled', 'handleImage', 'handleDisabled', 'values', 'onSlide', 'onChange'); -/** - * Options for in-place editor. - * - * @var array - * @access public - */ - var $editorOptions = array('okText', 'cancelText', 'savingText', 'formId', 'externalControl', 'rows', 'cols', 'size', 'highlightcolor', 'highlightendcolor', 'savingClassName', 'formClassName', 'loadTextURL', 'loadingText', 'callback', 'ajaxOptions', 'clickToEditText'); -/** - * Options for auto-complete editor. - * - * @var array - * @access public - */ - var $autoCompleteOptions = array('paramName', 'tokens', 'frequency', 'minChars', 'indicator', 'updateElement', 'afterUpdateElement', 'onShow', 'onHide'); -/** - * Output buffer for Ajax update content - * - * @var array - * @access private - */ - var $__ajaxBuffer = array(); -/** - * Returns link to remote action - * - * Returns a link to a remote action defined by options[url] - * (using the urlFor format) that's called in the background using - * XMLHttpRequest. The result of that request can then be inserted into a - * DOM object whose id can be specified with options[update]. - * - * Examples: - * - * $ajax->link("Delete this post", "/posts/delete/{$post['Post']['id']}" - * array("update" => "posts", "loading"=>"Element.show('loading');", "complete"=>"Element.hide('loading');"), - * "Are you sure you want to delte this post?"); - * $ajax->link($html->img("refresh"), '/emails/refresh', - * array("update" => "posts", "loading"=>"Element.show('loading');", "complete"=>"Element.hide('loading');"), - * null, false); - * - * - * By default, these remote requests are processed asynchronous during - * which various callbacks can be triggered (for progress indicators and - * the likes). - * - * The callbacks that may be specified are: - * - * - loading:: Called when the remote document is being - * loaded with data by the browser. - * - loaded:: Called when the browser has finished loading - * the remote document. - * - interactive:: Called when the user can interact with the - * remote document, even though it has not - * finished loading. - * - complete:: Called when the request is complete. - * - * If you for some reason or another need synchronous processing (that'll - * block the browser while the request is happening), you can specify - * $options['type'] = synchronous. - * - * You can customize further browser side call logic by passing - * in Javascript code snippets via some optional parameters. In - * their order of use these are: - * - * - confirm :: Adds confirmation dialog. - * - condition :: Perform remote request conditionally - * by this expression. Use this to - * describe browser-side conditions when - * request should not be initiated. - * - before :: Called before request is initiated. - * - after :: Called immediately after request was - * initiated and before loading. - * - * @link http://wiki.script.aculo.us/scriptaculous/show/Ajax.Updater - * @param string $title Title of link - * @param string $href href string "/products/view/12" - * @param array $options Options for JavaScript function - * @param string $confirm Confirmation message. Calls up a JavaScript confirm() message. - * @param boolean $escapeTitle Escaping the title string to HTML entities - * @return HTML code for link to remote action - * @access public - */ - function link($title, $href = null, $options = array(), $confirm = null, $escapeTitle = true) { - if (!isset($href)) { - $href = $title; - } - - if (!isset($options['url'])) { - $options['url'] = $href; - } - - if (isset($confirm)) { - $options['confirm'] = $confirm; - unset($confirm); - } - $htmlOptions = $this->__getHtmlOptions($options); - - if (empty($options['fallback']) || !isset($options['fallback'])) { - $options['fallback'] = $href; - } - - if (!isset($htmlOptions['id'])) { - $htmlOptions['id'] = 'link' . intval(rand()); - } - - if (!isset($htmlOptions['onclick'])) { - $htmlOptions['onclick'] = ''; - } - $htmlOptions['onclick'] .= ' event.returnValue = false; return false;'; - $return = $this->Html->link($title, $href, $htmlOptions, null, $escapeTitle); - $script = $this->Javascript->event("'{$htmlOptions['id']}'", "click", $this->remoteFunction($options)); - - if (is_string($script)) { - $return .= $script; - } - return $return; - } -/** - * Creates JavaScript function for remote AJAX call - * - * This function creates the javascript needed to make a remote call - * it is primarily used as a helper for link. - * - * @link http://wiki.script.aculo.us/scriptaculous/show/Ajax.Updater - * @see link() for docs on options parameter. - * @param array $options options for javascript - * @return string html code for link to remote action - * @access public - */ - function remoteFunction($options = null) { - if (isset($options['update'])) { - if (!is_array($options['update'])) { - $func = "new Ajax.Updater('{$options['update']}',"; - } else { - $func = "new Ajax.Updater(document.createElement('div'),"; - } - if (!isset($options['requestHeaders'])) { - $options['requestHeaders'] = array(); - } - if (is_array($options['update'])) { - $options['update'] = join(' ', $options['update']); - } - $options['requestHeaders']['X-Update'] = $options['update']; - } else { - $func = "new Ajax.Request("; - } - - $func .= "'" . $this->Html->url(isset($options['url']) ? $options['url'] : "") . "'"; - $func .= ", " . $this->__optionsForAjax($options) . ")"; - - if (isset($options['before'])) { - $func = "{$options['before']}; $func"; - } - - if (isset($options['after'])) { - $func = "$func; {$options['after']};"; - } - - if (isset($options['condition'])) { - $func = "if ({$options['condition']}) { $func; }"; - } - - if (isset($options['confirm'])) { - $func = "if (confirm('" . $this->Javascript->escapeString($options['confirm']) - . "')) { $func; } else { event.returnValue = false; return false; }"; - } - return $func; - } -/** - * Periodically call remote url via AJAX. - * - * Periodically calls the specified url (options['url']) every options['frequency'] seconds (default is 10). - * Usually used to update a specified div (options['update']) with the results of the remote call. - * The options for specifying the target with url and defining callbacks is the same as link. - * - * @link http://wiki.script.aculo.us/scriptaculous/show/Ajax.Updater - * @param array $options Callback options - * @return string Javascript codeblock - * @access public - */ - function remoteTimer($options = null) { - $frequency=(isset($options['frequency'])) ? $options['frequency'] : 10; - $code="new PeriodicalExecuter(function() {" . $this->remoteFunction($options) . "}, $frequency)"; - return $this->Javascript->codeBlock($code); - } -/** - * Returns form tag that will submit using Ajax. - * - * Returns a form tag that will submit using XMLHttpRequest in the background instead of the regular - * reloading POST arrangement. Even though it's using Javascript to serialize the form elements, the form submission - * will work just like a regular submission as viewed by the receiving side (all elements available in params). - * The options for defining callbacks is the same as link(). - * - * @param array $params Form target - * @param array $type How form data is posted: 'get' or 'post' - * @param array $options Callback/HTML options - * @return string JavaScript/HTML code - * @access public - */ - function form($params = null, $type = 'post', $options = array()) { - if (is_array($params)) { - extract($params, EXTR_OVERWRITE); - - if (!isset($action)) { - $action = null; - } - - if (!isset($type)) { - $type = 'post'; - } - - if (!isset($options)) { - $options = array(); - } - } else { - $action = $params; - } - $htmlOptions = $this->__getHtmlOptions($options); - $htmlOptions['action'] = $action; - - if (!isset($htmlOptions['id'])) { - $htmlOptions['id'] = 'form' . intval(rand()); - } - $htmlOptions['onsubmit']="event.returnValue = false; return false;"; - - if (!isset($options['with'])) { - $options['with'] = "Form.serialize('{$htmlOptions['id']}')"; - } - $options['url']=$action; - - return $this->Html->formTag($htmlOptions['action'], $type, $htmlOptions) - . $this->Javascript->event("'" . $htmlOptions['id']. "'", "submit", $this->remoteFunction($options)); - } -/** - * Returns a button input tag that will submit using Ajax - * - * Returns a button input tag that will submit form using XMLHttpRequest in the background instead of regular - * reloading POST arrangement. options argument is the same as in form_remote_tag - * - * @param string $title Input button title - * @param array $options Callback options - * @return string Ajaxed input button - * @access public - */ - function submit($title = 'Submit', $options = array()) { - $htmlOptions =$this->__getHtmlOptions($options); - $htmlOptions['value']=$title; - - if (!isset($options['with'])) { - $options['with'] = 'Form.serialize(Event.element(event).form)'; - } - - if (!isset($htmlOptions['id'])) { - $htmlOptions['id'] = 'submit' . intval(rand()); - } - $htmlOptions['onclick']="event.returnValue = false; return false;"; - return $this->Html->submit($title, $htmlOptions) - . $this->Javascript->event('"' . $htmlOptions['id'] . '"', 'click', $this->remoteFunction($options)); - } -/** - * Observe field and call ajax on change. - * - * Observes the field with the DOM ID specified by field_id and makes - * an Ajax when its contents have changed. - * - * Required +options+ are: - * - frequency:: The frequency (in seconds) at which changes to - * this field will be detected. - * - url:: @see urlFor() -style options for the action to call - * when the field has changed. - * - * Additional options are: - * - update:: Specifies the DOM ID of the element whose - * innerHTML should be updated with the - * XMLHttpRequest response text. - * - with:: A Javascript expression specifying the - * parameters for the XMLHttpRequest. This defaults - * to Form.Element.serialize('$field_id'), which can be - * accessed from params['form']['field_id']. - * - * @see link(). - * @param string $field_id DOM ID of field to observe - * @param array $options ajax options - * @return string ajax script - * @access public - */ - function observeField($field_id, $options = array()) { - if (!isset($options['with'])) { - $options['with'] = "Form.Element.serialize('$field_id')"; - } - return $this->Javascript->codeBlock($this->_buildObserver('Form.Element.Observer', $field_id, $options)); - } -/** - * Observe entire form and call ajax on change. - * - * Like @see observeField(), but operates on an entire form identified by the - * DOM ID form_id. options are the same as observe_field, except - * the default value of the with option evaluates to the - * serialized (request string) value of the form. - * - * @param string $field_id DOM ID of field to observe - * @param array $options ajax options - * @return string ajax script - * @access public - */ - function observeForm($field_id, $options = array()) { - if (!isset($options['with'])) { - $options['with'] = 'Form.serialize("' . $field_id . '")'; - } - return $this->Javascript->codeBlock($this->_buildObserver('Form.Observer', $field_id, $options)); - } -/** - * Create a text field with Autocomplete. - * - * Creates an autocomplete field with the given ID and options. - * - * options['with'] defaults to "Form.Element.serialize('$field_id')", - * but can be any valid javascript expression defining the - * - * @link http://wiki.script.aculo.us/scriptaculous/show/Ajax.Autocompleter - * @param string $field_id DOM ID of field to observe - * @param string $url URL for the autocomplete action - * @param array $options Ajax options - * @return string Ajax script - * @access public - */ - function autoComplete($field, $url = "", $options = array()) { - $var = ''; - if (isset($options['var'])) { - $var = 'var ' . $options['var'] . ' = '; - unset($options['var']); - } - - if (!isset($options['id'])) { - $options['id'] = Inflector::camelize(r("/", "_", $field)); - } - $divOptions = array('id' => $options['id'] . "_autoComplete", 'class' => isset($options['class']) ? $options['class'] : 'auto_complete'); - - if (isset($options['div_id'])) { - $divOptions['id'] = $options['div_id']; - unset($options['div_id']); - } - $htmlOptions = $this->__getHtmlOptions($options); - $htmlOptions['autocomplete'] = "off"; - - foreach ($this->autoCompleteOptions as $opt) { - unset($htmlOptions[$opt]); - } - - if (isset($options['tokens'])) { - if (is_array($options['tokens'])) { - $options['tokens'] = $this->Javascript->object($options['tokens']); - } else { - $options['tokens'] = '"' . $options['tokens'] . '"'; - } - } - $options = $this->_optionsToString($options, array('paramName', 'indicator')); - $options = $this->_buildOptions($options, $this->autoCompleteOptions); - return $this->Html->input($field, $htmlOptions) . "\n" . - $this->Html->tag('div', $divOptions, true) . "\n" . - $this->Javascript->codeBlock("{$var}new Ajax.Autocompleter('" . $htmlOptions['id'] - . "', '" . $divOptions['id'] . "', '" . $this->Html->url($url) . "', " . - $options . ");"); - } -/** - * Setup a Draggable Element. - * For a reference on the options for this function, check out - * - * @link http://wiki.script.aculo.us/scriptaculous/show/Draggable - * @param sting $id the DOM id to enable - * @param array $options a set of options - * @return string Javascript::codeBlock(); - * @access public - */ - function drag($id, $options = array()) { - return $this->Javascript->codeBlock("new Draggable('$id', " . $this->_optionsForDraggable($options) . ");"); - } -/** - * Creates an Ajax-updateable DIV element - * - * @param string $id options for javascript - * @param array $options a set of options - * @return string HTML code - * @access public - */ - function div($id, $options = array()) { - if (env('HTTP_X_UPDATE') != null) { - $divs = explode(' ', env('HTTP_X_UPDATE')); - if (in_array($id, $divs)) { - @ob_end_clean(); - ob_start(); - return ''; - } - } - $attr = $this->Html->_parseAttributes(am($options, array('id' => $id))); - return $this->output(sprintf($this->tags['blockstart'], $attr)); - } -/** - * Closes an Ajax-updateable DIV element - * - * @param string $id The DOM ID of the element - * @return string HTML code - * @access public - */ - function divEnd($id) { - if (env('HTTP_X_UPDATE') != null) { - $divs = explode(' ', env('HTTP_X_UPDATE')); - if (in_array($id, $divs)) { - $this->__ajaxBuffer[$id] = ob_get_contents(); - ob_end_clean(); - return ''; - } - } - return $this->output($this->tags['blockend']); - } -/** - * Protectd helper method to return an array of options for draggable. - * - * @param array $options - * @return array - * @access protected - */ - function _optionsForDraggable($options) { - $options = $this->_optionsToString($options, array('handle', 'constraint')); - return $this->_buildOptions($options, $this->dragOptions); - } -/** - * Setup a droppable element - * For a reference on the options for this function, check out - * - * @link http://wiki.script.aculo.us/scriptaculous/show/Droppables.add - * @param string $id - * @param array $options - * @return array - * @access public - */ - function drop($id, $options = array()) { - $options = $this->_optionsForDroppable($options); - return $this->Javascript->codeBlock("Droppables.add('$id', $options);"); - } -/** - * Protected helper method to return an array of options for droppable. - * - * @param string $options - * @return string String of Javascript array definition - * @access protected - */ - function _optionsForDroppable($options) { - $options = $this->_optionsToString($options, array('accept', 'overlap', 'hoverclass')); - return $this->_buildOptions($options, $this->dropOptions); - } -/** - * Setup a remote droppable element. - * - * @link http://wiki.script.aculo.us/scriptaculous/show/Droppables.add - * @see link() and remoteFunction() - * @param string $id DOM id of droppable - * @param array $options ame as drop() - * @param array $ajaxOptions same as remoteFunction() - * @return string Javascript::codeBlock() - * @access public - */ - function dropRemote($id, $options = array(), $ajaxOptions = array()) { - $options['onDrop'] = "function(element) {" . $this->remoteFunction($ajaxOptions) . "}"; - $options = $this->_optionsForDroppable($options); - return $this->Javascript->codeBlock("Droppables.add('$id', $options);"); - } -/** - * Makes a slider control. - * - * @link http://wiki.script.aculo.us/scriptaculous/show/Slider - * @param string $id DOM ID of slider handle - * @param string $track_id DOM ID of slider track - * @param array $options Array of options to control the slider - * @return string Javascript::codeBlock() - * @access public - */ - function slider($id, $track_id, $options = array()) { - $options = $this->_optionsToString($options, array('axis', 'handleImage', 'handleDisabled')); - - if (isset($options['change'])) { - $options['onChange'] = $options['change']; - unset($options['change']); - } - - if (isset($options['slide'])) { - $options['onSlide'] = $options['slide']; - unset($options['slide']); - } - - $options = $this->_buildOptions($options, $this->sliderOptions); - return $this->Javascript->codeBlock("var $id = new Control.Slider('$id', '$track_id', $options);"); - } -/** - * Makes an Ajax In Place editor control. - * - * @link http://wiki.script.aculo.us/scriptaculous/show/Ajax.InPlaceEditor - * @param string $id DOM ID of input element - * @param string $url Postback URL of saved data - * @param array $options Array of options to control the editor, including ajaxOptions (see link). - * @return string Javascript::codeBlock() - * @access public - */ - function editor($id, $url, $options = array()) { - $url = $this->Html->url($url); - $options['ajaxOptions'] = $this->__optionsForAjax($options); - - foreach ($this->ajaxOptions as $opt) { - if (isset($options[$opt])) { - unset($options[$opt]); - } - } - - if (isset($options['callback'])) { - $options['callback'] = 'function(form, value) {' . $options['callback'] . '}'; - } - - $options = $this->_optionsToString($options, array('okText', 'cancelText', 'savingText', 'formId', 'externalControl', 'highlightcolor', 'highlightendcolor', 'savingClassName', 'formClassName', 'loadTextURL', 'loadingText', 'clickToEditText')); - $options = $this->_buildOptions($options, $this->editorOptions); - return $this->Javascript->codeBlock("new Ajax.InPlaceEditor('{$id}', '{$url}', {$options});"); - } -/** - * Makes a list or group of floated objects sortable. - * - * @link http://wiki.script.aculo.us/scriptaculous/show/Sortable.create - * @param string $id DOM ID of parent - * @param array $options Array of options to control sort - * @return string Javascript::codeBlock() - * @access public - */ - function sortable($id, $options = array()) { - if (!empty($options['url'])) { - $options['with'] = "Sortable.serialize('$id')"; - $options['onUpdate'] = 'function(sortable) {' . $this->remoteFunction($options) . '}'; - } - - $options = $this->__optionsForSortable($options); - return $this->Javascript->codeBlock("Sortable.create('$id', $options);"); - } -/** - * Private method; generates sortables code from array options - * - * @param array $options - * @return string String of Javascript array definition - * @access private - */ - function __optionsForSortable($options) { - $options = $this->_optionsToString($options, array('handle', 'tag', 'constraint', 'ghosting', 'only', 'hoverclass')); - return $this->_buildOptions($options, $this->sortOptions); - } -/** - * Private helper function for Ajax. - * - * @param array $options - * @return string String of Javascript array definition - * @access private - */ - function __optionsForAjax($options = array()) { - - if (isset($options['indicator'])) { - if (isset($options['loading'])) { - $options['loading'] .= "Element.show('{$options['indicator']}');"; - } else { - $options['loading'] = "Element.show('{$options['indicator']}');"; - } - if (isset($options['complete'])) { - $options['complete'] .= "Element.hide('{$options['indicator']}');"; - } else { - $options['complete'] = "Element.hide('{$options['indicator']}');"; - } - unset($options['indicator']); - } - - $jsOptions = am( - array('asynchronous' => 'true', 'evalScripts' => 'true'), - $this->_buildCallbacks($options) - ); - $options = $this->_optionsToString($options, array('method')); - - foreach ($options as $key => $value) { - switch($key) { - case 'type': - $jsOptions['asynchronous'] = ife(($value == 'synchronous'), 'false', 'true'); - break; - case 'evalScripts': - $jsOptions['evalScripts'] = ife($value, 'true', 'false'); - break; - case 'position': - $jsOptions['insertion'] = "Insertion." . Inflector::camelize($options['position']); - break; - case 'with': - $jsOptions['parameters'] = $options['with']; - break; - case 'form': - $jsOptions['parameters'] = 'Form.serialize(this)'; - break; - case 'requestHeaders': - $keys = array(); - foreach ($value as $key => $val) { - $keys[] = "'" . $key . "'"; - $keys[] = "'" . $val . "'"; - } - $jsOptions['requestHeaders'] = '[' . join(', ', $keys) . ']'; - break; - } - } - return $this->_buildOptions($jsOptions, $this->ajaxOptions); - } -/** - * Private Method to return a string of html options - * option data as a JavaScript options hash. - * - * @param array $options Options in the shape of keys and values - * @param array $extra Array of legal keys in this options context - * @return array Array of html options - * @access private - */ - function __getHtmlOptions($options, $extra = array()) { - foreach ($this->ajaxOptions as $key) { - if (isset($options[$key])) { - unset($options[$key]); - } - } - - foreach ($extra as $key) { - if (isset($options[$key])) { - unset($options[$key]); - } - } - return $options; - } -/** - * Protected Method to return a string of JavaScript with the given - * option data as a JavaScript options hash. - * - * @param array $options Options in the shape of keys and values - * @param array $acceptable Array of legal keys in this options context - * @return string String of Javascript array definition - * @access protected - */ - function _buildOptions($options, $acceptable) { - if (is_array($options)) { - $out = array(); - - foreach ($options as $k => $v) { - if (in_array($k, $acceptable)) { - $out[] = "$k:$v"; - } - } - - $out = join(', ', $out); - $out = '{' . $out . '}'; - return $out; - } else { - return false; - } - } -/** - * Protected Method to return JavaScript text for an observer... - * - * @param string $klass Name of JavaScript class - * @param string $name - * @param array $options Ajax options - * @return string Formatted JavaScript - * @access protected - */ - function _buildObserver($klass, $name, $options = null) { - if (!isset($options['with']) && isset($options['update'])) { - $options['with'] = 'value'; - } - - $callback = $this->remoteFunction($options); - $javascript = "new $klass('$name', "; - $javascript .= (isset($options['frequency']) ? $options['frequency'] : 2) . ", function(element, value) {"; - $javascript .= "$callback})"; - return $javascript; - } -/** - * Protected Method to return JavaScript text for all callbacks... - * - * @param array $options - * @return array - * @access protected - */ - function _buildCallbacks($options) { - $callbacks = array(); - - foreach ($this->callbacks as $callback) { - if (isset($options[$callback])) { - $name = 'on' . ucfirst($callback); - $code = $options[$callback]; - $callbacks[$name] = "function(request) {" . $code . "}"; - } - } - return $callbacks; - } -/** - * Protected Method to return a string of JavaScript with a string representation - * of given options array. - * - * @param array $options Ajax options array - * @param array $stringOpts Options as strings in an array - * @access private - * @return array - * @access protected - */ - function _optionsToString($options, $stringOpts = array()) { - foreach ($stringOpts as $option) { - if (isset($options[$option]) && !$options[$option][0] != "'") { - if ($options[$option] === true || $options[$option] === 'true') { - $options[$option] = 'true'; - } elseif ($options[$option] === false || $options[$option] === 'false') { - $options[$option] = 'false'; - } else { - $options[$option] = "'{$options[$option]}'"; - } - } - } - return $options; - } -/** - * afterRender callback - * - * @return array - * @access public - */ - function afterRender() { - if (env('HTTP_X_UPDATE') != null && count($this->__ajaxBuffer) > 0) { - $data = array(); - $divs = explode(' ', env('HTTP_X_UPDATE')); - - foreach ($this->__ajaxBuffer as $key => $val) { - if (in_array($key, $divs)) { - $data[] = $key . ':"' . rawurlencode($val) . '"'; - } - } - - $out = 'var __ajaxUpdater__ = {' . join(', ', $data) . '};' . "\n"; - $out .= 'for (n in __ajaxUpdater__) { if (typeof __ajaxUpdater__[n] == "string" && $(n)) Element.update($(n), unescape(decodeURIComponent(__ajaxUpdater__[n]))); }'; - - @ob_end_clean(); - e($this->Javascript->codeBlock($out)); - exit(); - } - } -/** - * Replaced by AjaxHelper::link() - * - * @deprecated will not be avialable after 1.1.x.x - */ - function linkToRemote($title, $options = array(), $html_options = array()) { - trigger_error('Deprecated function: use AjaxHelper::link', E_USER_WARNING); - $href = '#'; - - if (!empty($options['fallback']) && isset($options['fallback'])) { - $href = $options['fallback']; - } - - if (isset($html_options['id'])) { - return $this->Html->link($title, $href, $html_options) . - $this->Javascript->event("$('{$html_options['id']}')", "click", $this->remoteFunction($options)); - } else { - $html_options['onclick'] = $this->remoteFunction($options) . "; event.returnValue = false; return false;"; - return $this->Html->link($title, $href, $html_options); - } - } -} - -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/cache.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/cache.php deleted file mode 100644 index 99d609f..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/cache.php +++ /dev/null @@ -1,272 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.view.helpers - * @since CakePHP(tm) v 1.0.0.2277 - * @version $Revision: 7691 $ - * @modifiedby $LastChangedBy: nate $ - * @lastmodified $Date: 2008-10-02 00:59:12 -0400 (Thu, 02 Oct 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Short description for file. - * - * Long description for file - * - * @package cake - * @subpackage cake.cake.libs.view.helpers - */ -class CacheHelper extends Helper{ -/** - * Array of strings replaced in cached views. - * The strings are found between in views - * - * @var array - * @access private - */ - var $__replace = array(); -/** - * Array of string that are replace with there var replace above. - * The strings are any content inside and includes the tags in views - * - * @var array - * @access private - */ - var $__match = array(); -/** - * holds the View object passed in final call to CacheHelper::cache() - * - * @var object - * @access public - */ - var $view; -/** - * Main method used to cache a view - * - * @param string $file File to cache - * @param string $out output to cache - * @param boolean $cache - * @return view ouput - */ - function cache($file, $out, $cache = false) { - if (is_array($this->cacheAction)) { - $check = str_replace('/', '_', $this->here); - $replace = str_replace('/', '_', $this->base); - $match = str_replace($this->base, '', $this->here); - $match = str_replace('//', '/', $match); - $match = str_replace('/' . $this->controllerName . '/', '', $match); - $check = str_replace($replace, '', $check); - $check = str_replace('_' . $this->controllerName . '_', '', $check); - $check = convertSlash($check); - $check = preg_replace('/^_+/', '', $check); - $keys = str_replace('/', '_', array_keys($this->cacheAction)); - $found = array_keys($this->cacheAction); - $index = null; - $count = 0; - - foreach ($keys as $key => $value) { - if (strpos($check, $value) === 0) { - $index = $found[$count]; - break; - } - $count++; - } - - if (isset($index)) { - $pos1 = strrpos($match, '/'); - $char = strlen($match) - 1; - - if ($pos1 == $char) { - $match = substr($match, 0, $char); - } - - $key = $match; - } elseif ($this->action == 'index') { - $index = 'index'; - } - if (isset($this->cacheAction[$index])) { - $cacheTime = $this->cacheAction[$index]; - } else { - $cacheTime = 0; - } - } else { - $cacheTime = $this->cacheAction; - } - - if ($cacheTime != '' && $cacheTime > 0) { - $this->__parseFile($file, $out); - - if ($cache === true) { - $cached = $this->__parseOutput($out); - $this->__writeFile($cached, $cacheTime); - } - } - return $out; - } -/** - * Parse file searching for no cache tags - * - * @param string $file - * @param boolean $cache - * @access private - */ - function __parseFile($file, $cache) { - if (is_file($file)) { - $file = file_get_contents($file); - } elseif ($file = fileExistsInPath($file)) { - $file = file_get_contents($file); - } - - preg_match_all('/((?<=)[\\s\\S]*?(?=<\/cake:nocache>)<\/cake:nocache>)/i', $cache, $oresult, PREG_PATTERN_ORDER); - preg_match_all('/(?<=)([\\s\\S]*?)(?=<\/cake:nocache>)/i', $file, $result, PREG_PATTERN_ORDER); - - if (!empty($this->__replace)) { - foreach ($oresult['0'] as $k => $element) { - if (array_search($element, $this->__match) !== false) { - array_splice($oresult[0], $k, 1); - } - } - } - - if (!empty($result['0'])) { - $count = 0; - - foreach ($result['0'] as $block) { - if (isset($oresult['0'][$count])) { - $this->__replace[] = $block; - $this->__match[] = $oresult['0'][$count]; - } - $count++; - } - } - } -/** - * Parse the output and replace cache tags - * - * @param sting $cache - * @return string with all replacements made to - * @access private - */ - function __parseOutput($cache) { - $count = 0; - if (!empty($this->__match)) { - - foreach ($this->__match as $found) { - $original = $cache; - $length = strlen($found); - $position = 0; - - for ($i = 1; $i <= 1; $i++) { - $position = strpos($cache, $found, $position); - - if ($position !== false) { - $cache = substr($original, 0, $position); - $cache .= $this->__replace[$count]; - $cache .= substr($original, $position + $length); - } else { - break; - } - } - $count++; - } - return $cache; - } - return $cache; - } -/** - * Write a cached version of the file - * - * @param string $content - * @param sting $timestamp - * @return cached view - * @access private - */ - function __writeFile($content, $timestamp) { - $now = time(); - - if (is_numeric($timestamp)) { - $cacheTime = $now + $timestamp; - } else { - $cacheTime = strtotime($timestamp, $now); - } - - $cache = convertSlash($this->here); - if (empty($cache)) { - return; - } - - $cache = $cache . '.php'; - $file = 'plugin)) { - $file .= ' - loadController(\'' . $this->view->name. '\'); - loadModels(); - '; - } else { - $file .= ' - if (!class_exists(\'AppController\')) { - if (file_exists(\'' . APP . 'app_controller.php\')) { - require(\''. APP . 'app_controller.php\'); - } else { - require(\''.CAKE . 'app_controller.php\'); - } - } - loadPluginController(\''.$this->plugin.'\',\''.$this->view->name.'\'); - loadPluginModels(\''.$this->plugin.'\'); - '; - } - $file .= '$this->controller = new ' . $this->view->name . 'Controller(); - $this->controller->plugin = \''.$this->plugin.'\'; - $this->controller->_initComponents(); - $this->helpers = unserialize(\'' . serialize($this->view->helpers) . '\'); - $this->base = \'' . $this->view->base . '\'; - $this->layout = \'' . $this->view->layout. '\'; - $this->webroot = \'' . $this->view->webroot . '\'; - $this->here = \'' . $this->view->here . '\'; - $this->params = unserialize(stripslashes(\'' . addslashes(serialize($this->view->params)) . '\')); - $this->action = unserialize(\'' . serialize($this->view->action) . '\'); - $this->data = unserialize(stripslashes(\'' . addslashes(serialize($this->view->data)) . '\')); - $this->themeWeb = \'' . $this->view->themeWeb . '\'; - $this->plugin = \'' . $this->view->plugin . '\'; - $loadedHelpers = array(); - $loadedHelpers = $this->_loadHelpers($loadedHelpers, $this->helpers); - foreach (array_keys($loadedHelpers) as $helper) - { - $replace = strtolower(substr($helper, 0, 1)); - $camelBackedHelper = preg_replace(\'/\\w/\', $replace, $helper, 1); - ${$camelBackedHelper} =& $loadedHelpers[$helper]; - - if (isset(${$camelBackedHelper}->helpers) && is_array(${$camelBackedHelper}->helpers)) - { - foreach (${$camelBackedHelper}->helpers as $subHelper) - { - ${$camelBackedHelper}->{$subHelper} =& $loadedHelpers[$subHelper]; - } - } - $this->loaded[$camelBackedHelper] = (${$camelBackedHelper}); - } - ?>'; - $content = preg_replace("/(<\\?xml)/", "",$content); - $file .= $content; - return cache('views' . DS . $cache, $file, $timestamp); - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/form.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/form.php deleted file mode 100644 index d2d58a4..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/form.php +++ /dev/null @@ -1,491 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.view.helpers - * @since CakePHP(tm) v 0.10.0.1076 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Tag template for a div with a class attribute. - */ - define('TAG_DIV', '
%s
'); -/** - * Tag template for a paragraph with a class attribute. - */ - define('TAG_P_CLASS', '

%s

'); -/** - * Tag template for a label with a for attribute. - */ - define('TAG_LABEL', ''); -/** - * Tag template for a fieldset with a legend tag inside. - */ - define('TAG_FIELDSET', '
%s%s'); -/** - * Form helper library. - * - * Automatic generation of HTML FORMs from given data. - * - * @package cake - * @subpackage cake.cake.libs.view.helpers - */ -class FormHelper extends Helper{ -/** - * Included helpers. - * - * @var array - * @access public - */ - var $helpers = array('Html'); -/** - * Returns a formatted error message for given FORM field, NULL if no errors. - * - * @param string $field This should be "Modelname/fieldname" - * @return bool If there are errors this method returns true, else false. - * @access public - */ - function isFieldError($field) { - $error=1; - $this->Html->setFormTag($field); - - if ($error == $this->Html->tagIsInvalid($this->Html->model, $this->Html->field)) { - return true; - } else { - return false; - } - } -/** - * Returns a formatted LABEL element for HTML FORMs. - * - * @param string $tagName This should be "Modelname/fieldname" - * @param string $text Text that will appear in the label field. - * @return string The formatted LABEL element - * @access public - */ - function labelTag($tagName, $text) { - return sprintf(TAG_LABEL, Inflector::camelize(str_replace('/', '_', $tagName)), $text); - } -/** - * Returns a formatted DIV tag for HTML FORMs. - * - * @param string $class CSS class name of the div element. - * @param string $text String content that will appear inside the div element. - * @return string The formatted DIV element - * @access public - */ - function divTag($class, $text) { - return sprintf(TAG_DIV, $class, $text); - } -/** - * Returns a formatted P tag with class for HTML FORMs. - * - * @param string $class CSS class name of the p element. - * @param string $text Text that will appear inside the p element. - * @return string The formatted P element - * @access public - */ - function pTag($class, $text) { - return sprintf(TAG_P_CLASS, $class, $text); - } -/** - * Returns a formatted INPUT tag for HTML FORMs. - * - * @param string $tagName This should be "Modelname/fieldname" - * @param string $prompt Text that will appear in the label field. - * @param bool $required True if this field is a required field. - * @param string $errorMsg Text that will appear if an error has occurred. - * @param int $size Size attribute for INPUT element - * @param array $htmlOptions HTML options array. - * @return string The formatted INPUT element, with a label and wrapped in a div. - * @access public - */ - function generateInputDiv($tagName, $prompt, $required = false, $errorMsg = null, $size = 20, $htmlOptions = null) { - $htmlAttributes = $htmlOptions; - $htmlAttributes['size'] = $size; - $str = $this->Html->input($tagName, $htmlAttributes); - $strLabel = $this->labelTag($tagName, $prompt); - $divClass = "optional"; - if ($required) { - $divClass = "required"; - } - $strError = ""; - - if ($this->isFieldError($tagName)) { - $strError = $this->pTag('error', $errorMsg); - $divClass = sprintf("%s error", $divClass); - } - $divTagInside = sprintf("%s %s %s", $strError, $strLabel, $str); - return $this->divTag($divClass, $divTagInside); - } -/** - * Returns a formatted CHECKBOX tag inside a DIV for HTML FORMs. - * - * @param string $tagName This should be "Modelname/fieldname" - * @param string $prompt Text that will appear in the label field. - * @param bool $required True if this field is a required field. - * @param string $errorMsg Text that will appear if an error has occurred. - * @param array $htmlOptions HTML options array. - * @return string The formatted checkbox div - * @access public - */ - function generateCheckboxDiv($tagName, $prompt, $required = false, $errorMsg = null, $htmlOptions = null) { - $htmlOptions['class'] = "inputCheckbox"; - $str = $this->Html->checkbox($tagName, null, $htmlOptions); - $strLabel = $this->labelTag($tagName, $prompt); - $divClass = "optional"; - if ($required) { - $divClass = "required"; - } - $strError = ""; - - if ($this->isFieldError($tagName)) { - $strError = $this->pTag('error', $errorMsg); - $divClass = sprintf("%s error", $divClass); - } - $divTagInside = sprintf("%s %s %s", $strError, $strLabel, $str); - return $this->divTag($divClass, $divTagInside); - } -/** - * Returns a formatted date option element for HTML FORMs. - * - * @param string $tagName This should be "Modelname/fieldname" - * @param string $prompt Text that will appear in the label field. - * @param bool $required True if this field is a required field. - * @param string $errorMsg Text that will appear if an error has occurred. - * @param int $size Not used. - * @param array $htmlOptions HTML options array - * @return string Date option wrapped in a div. - * @todo Remove the $size parameter from this method. - * @access public - */ - function generateDate($tagName, $prompt, $required = false, $errorMsg = null, $size = 20, $htmlOptions = null, $selected = null) { - $str = $this->Html->dateTimeOptionTag($tagName, 'MDY', 'NONE', $selected, $htmlOptions); - $strLabel = $this->labelTag($tagName, $prompt); - $divClass = "optional"; - if ($required) { - $divClass = "required"; - } - $strError = ""; - - if ($this->isFieldError($tagName)) { - $strError = $this->pTag('error', $errorMsg); - $divClass = sprintf("%s error", $divClass); - } - $divTagInside = sprintf("%s %s %s", $strError, $strLabel, $str); - $requiredDiv = $this->divTag($divClass, $divTagInside); - return $this->divTag("date", $requiredDiv); - } -/** - * Returns a formatted date option element for HTML FORMs. - * - * @param string $tagName This should be "Modelname/fieldname" - * @param string $prompt Text that will appear in the label field. - * @param bool $required True if this field is a required field. - * @param string $errorMsg Text that will appear if an error has occurred. - * @param int $size Not used. - * @param array $htmlOptions HTML options array - * @return string Date option wrapped in a div. - * @todo Remove the $size parameter from this method. - * @access public - */ - function generateTime($tagName, $prompt, $required = false, $errorMsg = null, $size = 20, $htmlOptions = null, $selected = null) { - $str = $this->Html->dateTimeOptionTag($tagName, 'NONE', '24', $selected, $htmlOptions); - $strLabel = $this->labelTag($tagName, $prompt); - $divClass = "optional"; - if ($required) { - $divClass = "required"; - } - $strError = ""; - - if ($this->isFieldError($tagName)) { - $strError = $this->pTag('error', $errorMsg); - $divClass = sprintf("%s error", $divClass); - } - $divTagInside = sprintf("%s %s %s", $strError, $strLabel, $str); - $requiredDiv = $this->divTag($divClass, $divTagInside); - return $this->divTag("time", $requiredDiv); - } -/** - * Returns a formatted year option element for HTML FORMs. - * - * @param string $tagName This should be "Modelname/fieldname" - * @param string $prompt Text that will appear in the label field. - * @param bool $required True if this field is a required field. - * @param string $errorMsg Text that will appear if an error has occurred. - * @param int $size Not used. - * @param array $htmlOptions HTML options array - * @return string Date option wrapped in a div. - * @todo Remove the $size parameter from this method. - * @access public - */ - function generateYear($tagName, $prompt, $required = false, $errorMsg = null, $size = 20, $htmlOptions = null, $selected = null) { - $str = $this->Html->dateTimeOptionTag($tagName, 'Y', 'NONE', $selected, $htmlOptions); - $strLabel = $this->labelTag($tagName, $prompt); - $divClass = "optional"; - if ($required) { - $divClass = "required"; - } - $strError = ""; - - if ($this->isFieldError($tagName)) { - $strError = $this->pTag('error', $errorMsg); - $divClass = sprintf("%s error", $divClass); - } - $divTagInside = sprintf("%s %s %s", $strError, $strLabel, $str); - $requiredDiv = $this->divTag($divClass, $divTagInside); - return $this->divTag("year", $requiredDiv); - } -/** - * Returns a formatted datetime option element for HTML FORMs. - * - * @param string $tagName This should be "Modelname/fieldname" - * @param string $prompt Text that will appear in the label field. - * @param bool $required True if this field is required. - * @param string $errorMsg Text that will appear if an error has occurred. - * @param int $size Not used. - * @param array $htmlOptions HTML options array - * @param array $selected Selected index in the dateTimeOption tag. - * @return string The formatted datetime option element wrapped in a div. - * @todo Remove the $size parameter from this method. - * @access public - */ - function generateDateTime($tagName, $prompt, $required = false, $errorMsg = null, $size = 20, $htmlOptions = null, $selected = null) { - $str = $this->Html->dateTimeOptionTag($tagName, 'MDY', '12', $selected, $htmlOptions); - $strLabel = $this->labelTag($tagName, $prompt); - $divClass = "optional"; - if ($required) { - $divClass = "required"; - } - $strError = ""; - - if ($this->isFieldError($tagName)) { - $strError = $this->pTag('error', $errorMsg); - $divClass = sprintf("%s error", $divClass); - } - $divTagInside = sprintf("%s %s %s", $strError, $strLabel, $str); - $requiredDiv = $this->divTag($divClass, $divTagInside); - return $this->divTag("date", $requiredDiv); - } -/** - * Returns a formatted TEXTAREA inside a DIV for use with HTML forms. - * - * @param string $tagName This should be "Modelname/fieldname" - * @param string $prompt Text that will appear in the label field. - * @param boolean $required True if this field is required. - * @param string $errorMsg ext that will appear if an error has occurred. - * @param integer $cols Number of columns. - * @param integer $rows Number of rows. - * @param array $htmlOptions HTML options array. - * @return string The formatted TEXTAREA element, wrapped in a div. - * @access public - */ - function generateAreaDiv($tagName, $prompt, $required = false, $errorMsg = null, $cols = 60, $rows = 10, $htmlOptions = null) { - $htmlAttributes = $htmlOptions; - $htmlAttributes['cols'] = $cols; - $htmlAttributes['rows'] = $rows; - $str = $this->Html->textarea($tagName, $htmlAttributes); - $strLabel = $this->labelTag($tagName, $prompt); - $divClass = "optional"; - - if ($required) { - $divClass="required"; - } - $strError = ""; - - if ($this->isFieldError($tagName)) { - $strError = $this->pTag('error', $errorMsg); - $divClass = sprintf("%s error", $divClass); - } - $divTagInside = sprintf("%s %s %s", $strError, $strLabel, $str); - return $this->divTag($divClass, $divTagInside); - } -/** - * Returns a formatted SELECT tag for HTML FORMs. - * - * @param string $tagName This should be "Modelname/fieldname" - * @param string $prompt Text that will appear in the label field - * @param array $options Options to be contained in SELECT element - * @param string $selected Currently selected item - * @param array $selectAttr Array of HTML attributes for the SELECT element - * @param array $optionAttr Array of HTML attributes for the OPTION elements - * @param bool $required True if this field is required - * @param string $errorMsg Text that will appear if an error has occurred - * @return string The formatted INPUT element, wrapped in a div - * @access public - */ - function generateSelectDiv($tagName, $prompt, $options, $selected = null, $selectAttr = null, $optionAttr = null, $required = false, $errorMsg = null) { - $str = $this->Html->selectTag($tagName, $options, $selected, $selectAttr, $optionAttr); - $strLabel = $this->labelTag($tagName, $prompt); - $divClass = "optional"; - - if ($required) { - $divClass = "required"; - } - $strError = ""; - - if ($this->isFieldError($tagName)) { - $strError=$this->pTag('error', $errorMsg); - $divClass=sprintf("%s error", $divClass); - } - $divTagInside = sprintf("%s %s %s", $strError, $strLabel, $str); - return $this->divTag($divClass, $divTagInside); - } -/** - * Returns a formatted submit widget for HTML FORMs. - * - * @param string $displayText Text that will appear on the widget - * @param array $htmlOptions HTML options array - * @return string The formatted submit widget - * @access public - */ - function generateSubmitDiv($displayText, $htmlOptions = null) { - return $this->divTag('submit', $this->Html->submit($displayText, $htmlOptions)); - } -/** - * Generates a form to go onto a HtmlHelper object. - * - * @param array $fields An array of form field definitions - * @param boolean $readOnly True if the form should be rendered as READONLY - * @return string The completed form specified by the $fields parameter - * @access public - */ - function generateFields($fields, $readOnly = false) { - $strFormFields = ''; - - foreach ($fields as $field) { - if (isset($field['type'])) { - - if (!isset($field['required'])) { - $field['required'] = false; - } - - if (!isset($field['errorMsg'])) { - $field['errorMsg'] = null; - } - - if (!isset($field['htmlOptions'])) { - $field['htmlOptions'] = array(); - } - - if ($readOnly) { - $field['htmlOptions']['READONLY'] = "readonly"; - } - - switch($field['type']) { - case "input": - if (!isset($field['size'])) { - $field['size'] = 40; - } - $strFormFields = $strFormFields . $this->generateInputDiv($field['tagName'], $field['prompt'], - $field['required'], $field['errorMsg'], $field['size'], $field['htmlOptions']); - break; - case "checkbox": - $strFormFields = $strFormFields . $this->generateCheckboxDiv($field['tagName'], $field['prompt'], - $field['required'], $field['errorMsg'], $field['htmlOptions']); - break; - case "select": - case "selectMultiple": - if ("selectMultiple" == $field['type']) { - $field['selectAttr']['multiple'] = 'multiple'; - $field['selectAttr']['class'] = 'selectMultiple'; - } - - if (!isset($field['selected'])) { - $field['selected'] = null; - } - - if (!isset($field['selectAttr'])) { - $field['selectAttr'] = null; - } - - if (!isset($field['optionsAttr'])) { - $field['optionsAttr'] = null; - } - - if ($readOnly) { - $field['selectAttr']['DISABLED'] = true; - } - - if (!isset($field['options'])) { - $field['options'] = null; - } - $strFormFields = $strFormFields . $this->generateSelectDiv($field['tagName'], $field['prompt'], $field['options'], - $field['selected'], $field['selectAttr'], $field['optionsAttr'], $field['required'], $field['errorMsg']); - break; - case "area": - if (!isset($field['rows'])) { - $field['rows'] = 10; - } - - if (!isset($field['cols'])) { - $field['cols'] = 60; - } - $strFormFields = $strFormFields . $this->generateAreaDiv($field['tagName'], $field['prompt'], - $field['required'], $field['errorMsg'], $field['cols'], $field['rows'], $field['htmlOptions']); - break; - case "fieldset": - $strFieldsetFields = $this->generateFields($field['fields']); - $strFieldSet = sprintf('
%s

%s

%s

%s
', - $field['legend'], $field['noteHeading'], $field['note'], $strFieldsetFields); - $strFormFields = $strFormFields . $strFieldSet; - break; - case "hidden": - if (!isset($field['value'])) { - $field['value'] = null; - } - $strFormFields = $strFormFields . $this->Html->hidden($field['tagName'], $field['value']); - break; - case "date": - if (!isset($field['selected'])) { - $field['selected'] = null; - } - $strFormFields = $strFormFields . $this->generateDate($field['tagName'], $field['prompt'], $field['required'], $field['errorMsg'], null, $field['htmlOptions'], $field['selected']); - break; - case "datetime": - if (!isset($field['selected'])) { - $field['selected'] = null; - } - $strFormFields = $strFormFields . $this->generateDateTime($field['tagName'], $field['prompt'], $field['required'], $field['errorMsg'], null, $field['htmlOptions'], $field['selected']); - break; - case "time": - if (!isset($field['selected'])) { - $field['selected'] = null; - } - $strFormFields = $strFormFields . $this->generateTime($field['tagName'], $field['prompt'], $field['required'], $field['errorMsg'], null, $field['htmlOptions'], $field['selected']); - break; - case "year": - if (!isset($field['selected'])) { - $field['selected'] = null; - } - $strFormFields = $strFormFields . $this->generateYear($field['tagName'], $field['prompt'], $field['required'], $field['errorMsg'], null, $field['htmlOptions'], $field['selected']); - break; - default: - break; - } - } - } - return $strFormFields; - } -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/html.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/html.php deleted file mode 100644 index 9b86c91..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/html.php +++ /dev/null @@ -1,1257 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.view.helpers - * @since CakePHP(tm) v 0.9.1 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Html Helper class for easy use of HTML widgets. - * - * HtmlHelper encloses all methods needed while working with HTML pages. - * - * @package cake - * @subpackage cake.cake.libs.view.helpers - */ -class HtmlHelper extends Helper { -/** - * Base URL - * - * @var string - * @access public - */ - var $base = null; -/** - * URL to current action. - * - * @var string - * @access public - */ - var $here = null; -/** - * Parameter array. - * - * @var array - * @access public - */ - var $params = array(); -/** - * Current action. - * - * @var string - * @access public - */ - var $action = null; -/** - * Controller::data; - * - * @var array - * @access public - */ - var $data = null; -/** - * Name of model this helper is attached to. - * - * @var string - * @access public - */ - var $model = null; -/** - * - * @var string - * @access public - */ - var $field = null; -/** - * Breadcrumbs. - * - * @var array - * @access protected - */ - var $_crumbs = array(); -/** - * Adds a link to the breadcrumbs array. - * - * @param string $name Text for link - * @param string $link URL for link - * @return void - * @access public - */ - function addCrumb($name, $link) { - $this->_crumbs[] = array($name, $link); - } -/** - * Returns a charset META-tag. - * - * @param string $charset - * @param boolean $return Wheter this method should return a value or output it. This overrides AUTO_OUTPUT. - * @return mixed Either string or echos the value, depends on AUTO_OUTPUT and $return. - * @access public - */ - function charset($charset = null, $return = false) { - if (is_null($charset)) { - $charset = 'utf-8'; - } - return $this->output(sprintf($this->tags['charset'], $charset), $return); - } -/** - * Finds URL for specified action. - * - * Returns an URL pointing to a combination of controller and action. Param - * $url can be: - * + Empty - the method will find adress to actuall controller/action. - * + '/' - the method will find base URL of application. - * + A combination of controller/action - the method will find url for it. - * - * @param string $url Cake-relative URL, like "/products/edit/92" or "/presidents/elect/4" - * @param boolean $return Wheter this method should return a value or output it. This overrides AUTO_OUTPUT. - * @return mixed Either string or echos the value, depends on AUTO_OUTPUT and $return. - * @access public - */ - function url($url = null, $return = false) { - if (isset($this->plugin)) { - $base = strip_plugin($this->base, $this->plugin); - } else { - $base = $this->base; - } - - if (empty($url)) { - return $this->here; - } elseif ($url{0} == '/') { - $output = $base . $url; - } else { - $output = $base . '/' . Inflector::underscore($this->params['controller']) . '/' . $url; - } - - return $this->output($output, $return); - } -/** - * Creates an HTML link. - * - * If $url starts with "http://" this is treated as an external link. Else, - * it is treated as a path to controller/action and parsed with the - * HtmlHelper::url() method. - * - * If the $url is empty, $title is used instead. - * - * @param string $title The content of the A tag. - * @param string $url Cake-relative URL, or external URL (starts with http://) - * @param array $htmlAttributes Array of HTML attributes. - * @param string $confirmMessage Confirmation message. - * @param boolean $escapeTitle Whether or not the text in the $title variable should be HTML escaped. - * @param boolean $return Wheter this method should return a value or output it. This overrides AUTO_OUTPUT. - * @return mixed Either string or echos the value, depends on AUTO_OUTPUT and $return. - * @access public - */ - function link($title, $url = null, $htmlAttributes = array(), $confirmMessage = false, $escapeTitle = true, $return = false) { - if ($escapeTitle === true) { - $title = htmlspecialchars($title, ENT_QUOTES); - } elseif (is_string($escapeTitle)) { - $title = htmlentities($title, ENT_QUOTES); - } - $url = $url ? $url : $title; - - if ($confirmMessage) { - $confirmMessage = str_replace("'", "\'", $confirmMessage); - $confirmMessage = str_replace('"', '\"', $confirmMessage); - $htmlAttributes['onclick']="return confirm('{$confirmMessage}');"; - } - - if (((strpos($url, '://')) || (strpos($url, 'javascript:') === 0) || (strpos($url, 'mailto:') === 0) || substr($url,0,1) == '#')) { - $output = sprintf($this->tags['link'], $url, $this->_parseAttributes($htmlAttributes), $title); - } else { - $output = sprintf($this->tags['link'], $this->url($url, true), $this->_parseAttributes($htmlAttributes), $title); - } - return $this->output($output, $return); - } -/** - * Creates a submit widget. - * - * @param string $caption Text on submit button - * @param array $htmlAttributes Array of HTML attributes. - * @param boolean $return Wheter this method should return a value or output it. This overrides AUTO_OUTPUT. - * @return mixed Either string or echos the value, depends on AUTO_OUTPUT and $return. - * @access public - */ - function submit($caption = 'Submit', $htmlAttributes = array(), $return = false) { - $htmlAttributes['value'] = $caption; - return $this->output(sprintf($this->tags['submit'], $this->_parseAttributes($htmlAttributes, null, '', ' ')), $return); - } -/** - * Creates a password input widget. - * - * @param string $fieldName Name of a field, like this "Modelname/fieldname" - * @param array $htmlAttributes Array of HTML attributes. - * @param boolean $return Wheter this method should return a value or output it. This overrides AUTO_OUTPUT. - * @return mixed Either string or echos the value, depends on AUTO_OUTPUT and $return. - * @access public - */ - function password($fieldName, $htmlAttributes = array(), $return = false) { - $this->setFormTag($fieldName); - if (!isset($htmlAttributes['value'])) { - $htmlAttributes['value'] = $this->tagValue($fieldName); - } - if (!isset($htmlAttributes['id'])) { - $htmlAttributes['id'] = $this->model . Inflector::camelize($this->field); - } - - if ($this->tagIsInvalid($this->model, $this->field)) { - if (isset($htmlAttributes['class']) && trim($htmlAttributes['class']) != "") { - $htmlAttributes['class'] .= ' form_error'; - } else { - $htmlAttributes['class'] = 'form_error'; - } - } - return $this->output(sprintf($this->tags['password'], $this->model, $this->field, $this->_parseAttributes($htmlAttributes, null, ' ', ' ')), $return); - } -/** - * Creates a textarea widget. - * - * @param string $fieldName Name of a field, like this "Modelname/fieldname" - * @param array $htmlAttributes Array of HTML attributes. - * @param boolean $return Wheter this method should return a value or output it. This overrides AUTO_OUTPUT. - * @return mixed Either string or echos the value, depends on AUTO_OUTPUT and $return. - * @access public - */ - function textarea($fieldName, $htmlAttributes = array(), $return = false) { - $this->setFormTag($fieldName); - $value = $this->tagValue($fieldName); - if (!empty($htmlAttributes['value'])) { - $value = $htmlAttributes['value']; - unset($htmlAttributes['value']); - } - if (!isset($htmlAttributes['id'])) { - $htmlAttributes['id'] = $this->model . Inflector::camelize($this->field); - } - - if ($this->tagIsInvalid($this->model, $this->field)) { - 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, $this->_parseAttributes($htmlAttributes, null, ' '), $value), $return); - } -/** - * Creates a checkbox widget. - * - * @param string $fieldName Name of a field, like this "Modelname/fieldname" - * @deprecated string $title - * @param array $htmlAttributes Array of HTML attributes. - * @param boolean $return Wheter this method should return a value or output it. This overrides AUTO_OUTPUT. - * @return mixed Either string or echos the value, depends on AUTO_OUTPUT and $return. - * @access public - */ - function checkbox($fieldName, $title = null, $htmlAttributes = array(), $return = false) { - $value = $this->tagValue($fieldName); - $notCheckedValue = 0; - - if (!isset($htmlAttributes['id'])) { - $htmlAttributes['id'] = $this->model . Inflector::camelize($this->field); - } - - if (isset($htmlAttributes['checked'])) { - if ($htmlAttributes['checked'] == 'checked' || intval($htmlAttributes['checked']) === 1 || $htmlAttributes['checked'] === true) { - $htmlAttributes['checked'] = 'checked'; - } else { - $htmlAttributes['checked'] = null; - $notCheckedValue = -1; - } - } else { - if (isset($htmlAttributes['value']) || (!class_exists($this->model) && !loadModel($this->model))) { - $htmlAttributes['checked'] = ($htmlAttributes['value'] == $value) ? 'checked' : null; - - if ($htmlAttributes['value'] == '0') { - $notCheckedValue = -1; - } - } else { - $model = new $this->model; - $db =& ConnectionManager::getDataSource($model->useDbConfig); - $value = $db->boolean($value); - $htmlAttributes['checked'] = $value ? 'checked' : null; - $htmlAttributes['value'] = 1; - } - } - - $output = $this->hidden($fieldName, array('value' => $notCheckedValue, 'id' => $htmlAttributes['id'] . '_'), true); - $output .= sprintf($this->tags['checkbox'], $this->model, $this->field, $this->_parseAttributes($htmlAttributes, null, '', ' ')); - return $this->output($output, $return); - } -/** - * Creates a link element for CSS stylesheets. - * - * @param string $path Path to CSS file - * @param string $rel Rel attribute. Defaults to "stylesheet". - * @param array $htmlAttributes Array of HTML attributes. - * @param boolean $return Wheter this method should return a value or output it. This overrides AUTO_OUTPUT. - * @return mixed Either string or echos the value, depends on AUTO_OUTPUT and $return. - * @access public - */ - function css($path, $rel = 'stylesheet', $htmlAttributes = array(), $return = false) { - $url = "{$this->webroot}" . (COMPRESS_CSS ? 'c' : '') . $this->themeWeb . CSS_URL . $path . ".css"; - - if ($rel == 'import') { - return $this->output(sprintf($this->tags['style'], $this->parseHtmlOptions($htmlAttributes, null, '', ' '), '@import url(' . $url . ');'), $return); - } else { - return $this->output(sprintf($this->tags['css'], $rel, $url, $this->parseHtmlOptions($htmlAttributes, null, '', ' ')), $return); - } - } -/** - * Creates file input widget. - * - * @param string $fieldName Name of a field, like this "Modelname/fieldname" - * @param array $htmlAttributes Array of HTML attributes. - * @param boolean $return Wheter this method should return a valueor output it. This overrides AUTO_OUTPUT. - * @return mixed Either string or echos the value, depends on AUTO_OUTPUT and $return. - * @access public - */ - function file($fieldName, $htmlAttributes = array(), $return = false) { - if (strpos($fieldName, '/')) { - $this->setFormTag($fieldName); - if (!isset($htmlAttributes['id'])) { - $htmlAttributes['id'] = $this->model . Inflector::camelize($this->field); - } - return $this->output(sprintf($this->tags['file'], $this->model, $this->field, $this->_parseAttributes($htmlAttributes, null, '', ' ')), $return); - } - return $this->output(sprintf($this->tags['file_no_model'], $fieldName, $this->_parseAttributes($htmlAttributes, null, '', ' ')), $return); - } -/** - * Returns the breadcrumb trail as a sequence of »-separated links. - * - * @param string $separator Text to separate crumbs. - * @param string $startText This will be the first crumb, if false it defaults to first crumb in array - * @param boolean $return Wheter this method should return a value or output it. This overrides AUTO_OUTPUT. - * @return mixed Either string or echos the value, depends on AUTO_OUTPUT and $return. If $this->_crumbs is empty, return null. - * @access public - */ - function getCrumbs($separator = '»', $startText = false, $return = false) { - if (count($this->_crumbs)) { - $out = array(); - if ($startText) { - $out[] = $this->link($startText, '/'); - } - - foreach ($this->_crumbs as $crumb) { - $out[] = $this->link($crumb[0], $crumb[1]); - } - return $this->output(join($separator, $out), $return); - } else { - return null; - } - } -/** - * Creates a hidden input field. - * - * @param string $fieldName Name of a field, like this "Modelname/fieldname" - * @param array $htmlAttributes Array of HTML attributes. - * @param boolean $return Wheter this method should return a value or output it. This overrides AUTO_OUTPUT. - * @return mixed Either string or echos the value, depends on AUTO_OUTPUT and $return. - * @access public - */ - function hidden($fieldName, $htmlAttributes = array(), $return = false) { - $this->setFormTag($fieldName); - if (!isset($htmlAttributes['value'])) { - $htmlAttributes['value'] = $this->tagValue($fieldName); - } - if (!isset($htmlAttributes['id'])) { - $htmlAttributes['id'] = $this->model . Inflector::camelize($this->field); - } - return $this->output(sprintf($this->tags['hidden'], $this->model, $this->field, $this->_parseAttributes($htmlAttributes, null, ' ', ' ')), $return); - } -/** - * Creates a formatted IMG element. - * - * @param string $path Path to the image file, relative to the webroot/img/ directory. - * @param array $htmlAttributes Array of HTML attributes. - * @param boolean $return Wheter this method should return a value or output it. This overrides AUTO_OUTPUT. - * @return mixed Either string or echos the value, depends on AUTO_OUTPUT and $return. - * @access public - */ - function image($path, $htmlAttributes = array(), $return = false) { - if (strpos($path, '://')) { - $url = $path; - } else { - $url = $this->webroot . $this->themeWeb . IMAGES_URL . $path; - } - return $this->output(sprintf($this->tags['image'], $url, $this->parseHtmlOptions($htmlAttributes, null, '', ' ')), $return); - } -/** - * Creates a text input widget. - * - * @param string $fieldNamem Name of a field, like this "Modelname/fieldname" - * @param array $htmlAttributes Array of HTML attributes. - * @param boolean $return Wheter this method should return a value or output it. This overrides AUTO_OUTPUT. - * @return mixed Either string or echos the value, depends on AUTO_OUTPUT and $return. - * @access public - */ - function input($fieldName, $htmlAttributes = array(), $return = false) { - $this->setFormTag($fieldName); - if (!isset($htmlAttributes['value'])) { - $htmlAttributes['value'] = $this->tagValue($fieldName); - } - - if (!isset($htmlAttributes['type'])) { - $htmlAttributes['type'] = 'text'; - } - - if (!isset($htmlAttributes['id'])) { - $htmlAttributes['id'] = $this->model . Inflector::camelize($this->field); - } - - if ($this->tagIsInvalid($this->model, $this->field)) { - 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, $this->_parseAttributes($htmlAttributes, null, ' ', ' ')), $return); - } - /** - * Returns a formatted SELECT element. - * - * @param string $fieldName Name attribute of the SELECT - * @param array $optionElements Array of the OPTION elements (as 'value'=>'Text' pairs) to be used in the SELECT element - * @param mixed $selected Selected option - * @param array $selectAttr Array of HTML options for the opening SELECT element - * @param array $optionAttr Array of HTML options for the enclosed OPTION elements - * @param boolean $show_empty If true, the empty select option is shown - * @param boolean $return Whether this method should return a value - * @return string Formatted SELECT element - * @access public - */ - function selectTag($fieldName, $optionElements, $selected = null, $selectAttr = array(), $optionAttr = null, $showEmpty = true, $return = false) { - $this->setFormTag($fieldName); - if ($this->tagIsInvalid($this->model, $this->field)) { - if (isset($selectAttr['class']) && trim($selectAttr['class']) != "") { - $selectAttr['class'] .= ' form_error'; - } else { - $selectAttr['class'] = 'form_error'; - } - } - if (!isset($selectAttr['id'])) { - $selectAttr['id'] = $this->model . Inflector::camelize($this->field); - } - - if (!is_array($optionElements)) { - return null; - } - - if (!isset($selected)) { - $selected = $this->tagValue($fieldName); - } - - if (isset($selectAttr) && array_key_exists("multiple", $selectAttr)) { - $select[] = sprintf($this->tags['selectmultiplestart'], $this->model, $this->field, $this->parseHtmlOptions($selectAttr)); - } else { - $select[] = sprintf($this->tags['selectstart'], $this->model, $this->field, $this->parseHtmlOptions($selectAttr)); - } - - if ($showEmpty == true) { - $select[] = sprintf($this->tags['selectempty'], $this->parseHtmlOptions($optionAttr)); - } - - foreach ($optionElements as $name => $title) { - $optionsHere = $optionAttr; - - if (($selected != null) && ($selected == $name)) { - $optionsHere['selected'] = 'selected'; - } elseif (is_array($selected) && in_array($name, $selected)) { - $optionsHere['selected'] = 'selected'; - } - - $select[] = sprintf($this->tags['selectoption'], $name, $this->parseHtmlOptions($optionsHere), h($title)); - } - - $select[] = sprintf($this->tags['selectend']); - return $this->output(implode("\n", $select), $return); - } -/** - * Creates a set of radio widgets. - * - * @param string $fieldName Name of a field, like this "Modelname/fieldname" - * @param array $options Radio button options array - * @param array $inbetween String that separates the radio buttons. - * @param array $htmlAttributes Array of HTML attributes. - * @param boolean $return Wheter this method should return a value or output it. This overrides AUTO_OUTPUT. - * @return mixed Either string or echos the value, depends on AUTO_OUTPUT and $return. - * @access public - */ - function radio($fieldName, $options, $inbetween = null, $htmlAttributes = array(), $return = false) { - - $this->setFormTag($fieldName); - $value = isset($htmlAttributes['value']) ? $htmlAttributes['value'] : $this->tagValue($fieldName); - $out = array(); - - foreach ($options as $optValue => $optTitle) { - $optionsHere = array('value' => $optValue); - if ($value !== false && $optValue == $value) { - $optionsHere['checked'] = 'checked'; - } - $parsedOptions = $this->parseHtmlOptions(array_merge($htmlAttributes, $optionsHere), null, '', ' '); - $individualTagName = "{$this->field}_{$optValue}"; - $out[] = sprintf($this->tags['radio'], $this->model, $this->field, $individualTagName, $parsedOptions, $optTitle); - } - - $out = join($inbetween, $out); - return $this->output($out ? $out : null, $return); - } -/** - * Returns a SELECT element for days. - * - * @param string $tagName Prefix name for the SELECT element - * @deprecated string $value - * @param string $selected Option which is selected. - * @param array $optionAttr Attribute array for the option elements. - * @param boolean $showEmpty Show/hide the empty select option - * @return mixed - * @access public - */ - function dayOptionTag($tagName, $value = null, $selected = null, $selectAttr = null, $optionAttr = null, $showEmpty = true) { - if (empty($selected) && $this->tagValue($tagName)) { - $selected = date('d', strtotime($this->tagValue($tagName))); - } - $dayValue = empty($selected) ? ($showEmpty == true ? NULL : date('d')) : $selected; - $days = array('01' => '1', '02' => '2', '03' => '3', '04' => '4', '05' => '5', '06' => '6', '07' => '7', '08' => '8', '09' => '9', '10' => '10', '11' => '11', '12' => '12', '13' => '13', '14' => '14', '15' => '15', '16' => '16', '17' => '17', '18' => '18', '19' => '19', '20' => '20', '21' => '21', '22' => '22', '23' => '23', '24' => '24', '25' => '25', '26' => '26', '27' => '27', '28' => '28', '29' => '29', '30' => '30', '31' => '31'); - $option = $this->selectTag($tagName . "_day", $days, $dayValue, $selectAttr, $optionAttr, $showEmpty); - return $option; - } -/** - * Returns a SELECT element for years - * - * @param string $tagName Prefix name for the SELECT element - * @deprecated string $value - * @param integer $minYear First year in sequence - * @param integer $maxYear Last year in sequence - * @param string $selected Option which is selected. - * @param array $optionAttr Attribute array for the option elements. - * @param boolean $showEmpty Show/hide the empty select option - * @return mixed - * @access public - */ - function yearOptionTag($tagName, $value = null, $minYear = null, $maxYear = null, $selected = null, $selectAttr = null, $optionAttr = null, $showEmpty = true) { - if (empty($selected) && ($this->tagValue($tagName))) { - $selected = date('Y', strtotime($this->tagValue($tagName))); - } - - $yearValue = empty($selected) ? ($showEmpty ? NULL : date('Y')) : $selected; - $currentYear = date('Y'); - $maxYear = is_null($maxYear) ? $currentYear + 11 : $maxYear + 1; - $minYear = is_null($minYear) ? $currentYear - 60 : $minYear; - - if ($minYear > $maxYear) { - $tmpYear = $minYear; - $minYear = $maxYear; - $maxYear = $tmpYear; - } - - $minYear = $currentYear < $minYear ? $currentYear : $minYear; - $maxYear = $currentYear > $maxYear ? $currentYear : $maxYear; - - for ($yearCounter = $minYear; $yearCounter < $maxYear; $yearCounter++) { - $years[$yearCounter] = $yearCounter; - } - - return $this->selectTag($tagName . "_year", $years, $yearValue, $selectAttr, $optionAttr, $showEmpty); - } -/** - * Returns a SELECT element for months. - * - * @param string $tagName Prefix name for the SELECT element - * @deprecated string $value - * @param string $selected Option which is selected. - * @param array $optionAttr Attribute array for the option elements. - * @param boolean $showEmpty Show/hide the empty select option - * @return mixed - * @access public - */ - function monthOptionTag($tagName, $value = null, $selected = null, $selectAttr = null, $optionAttr = null, $showEmpty = true) { - if (empty($selected) && ($this->tagValue($tagName))) { - $selected = date('m', strtotime($this->tagValue($tagName))); - } - $monthValue = empty($selected) ? ($showEmpty ? NULL : date('m')) : $selected; - $months = array('01' => 'January', '02' => 'February', '03' => 'March', '04' => 'April', '05' => 'May', '06' => 'June', '07' => 'July', '08' => 'August', '09' => 'September', '10' => 'October', '11' => 'November', '12' => 'December'); - - return $this->selectTag($tagName . "_month", $months, $monthValue, $selectAttr, $optionAttr, $showEmpty); - } -/** - * Returns a SELECT element for hours. - * - * @param string $tagName Prefix name for the SELECT element - * @deprecated string $value - * @param boolean $format24Hours True for 24 hours format - * @param string $selected Option which is selected. - * @param array $optionAttr Attribute array for the option elements. - * @return mixed - * @access public - */ - function hourOptionTag($tagName, $value = null, $format24Hours = false, $selected = null, $selectAttr = null, $optionAttr = null, $showEmpty = true) { - if (empty($selected) && ($this->tagValue($tagName))) { - if ($format24Hours) { - $selected = date('H', strtotime($this->tagValue($tagName))); - } else { - $selected = date('g', strtotime($this->tagValue($tagName))); - } - } - if ($format24Hours) { - $hourValue = empty($selected) ? ($showEmpty ? NULL : date('H')) : $selected; - } else { - $hourValue = empty($selected) ? ($showEmpty ? NULL : date('g')) : $selected; - if (isset($selected) && intval($hourValue) == 0 && !$showEmpty) { - $hourValue = 12; - } - } - - if ($format24Hours) { - $hours = array('00' => '00', '01' => '01', '02' => '02', '03' => '03', '04' => '04', '05' => '05', '06' => '06', '07' => '07', '08' => '08', '09' => '09', '10' => '10', '11' => '11', '12' => '12', '13' => '13', '14' => '14', '15' => '15', '16' => '16', '17' => '17', '18' => '18', '19' => '19', '20' => '20', '21' => '21', '22' => '22', '23' => '23'); - } else { - $hours = array('01' => '1', '02' => '2', '03' => '3', '04' => '4', '05' => '5', '06' => '6', '07' => '7', '08' => '8', '09' => '9', '10' => '10', '11' => '11', '12' => '12'); - } - - $option = $this->selectTag($tagName . "_hour", $hours, $hourValue, $selectAttr, $optionAttr, $showEmpty); - return $option; - } -/** - * Returns a SELECT element for minutes. - * - * @param string $tagName Prefix name for the SELECT element - * @deprecated string $value - * @param string $selected Option which is selected. - * @param array $optionAttr Attribute array for the option elements. - * @return mixed - * @access public - */ - function minuteOptionTag($tagName, $value = null, $selected = null, $selectAttr = null, $optionAttr = null, $showEmpty = true) { - if (empty($selected) && ($this->tagValue($tagName))) { - $selected = date('i', strtotime($this->tagValue($tagName))); - } - $minValue = empty($selected) ? ($showEmpty ? NULL : date('i')) : $selected; - - for ($minCount = 0; $minCount < 60; $minCount++) { - $mins[sprintf('%02d', $minCount)] = sprintf('%02d', $minCount); - } - $option = $this->selectTag($tagName . "_min", $mins, $minValue, $selectAttr, $optionAttr, $showEmpty); - return $option; - } - -/** - * Returns a SELECT element for AM or PM. - * - * @param string $tagName Prefix name for the SELECT element - * @deprecated string $value - * @param string $selected Option which is selected. - * @param array $optionAttr Attribute array for the option elements. - * @return mixed - * @access public - */ - function meridianOptionTag($tagName, $value = null, $selected = null, $selectAttr = null, $optionAttr = null, $showEmpty = true) { - if (empty($selected) && ($this->tagValue($tagName))) { - $selected = date('a', strtotime($this->tagValue($tagName))); - } - $merValue = empty($selected) ? ($showEmpty ? NULL : date('a')) : $selected; - $meridians = array('am' => 'am', 'pm' => 'pm'); - - $option = $this->selectTag($tagName . "_meridian", $meridians, $merValue, $selectAttr, $optionAttr, $showEmpty); - return $option; - } -/** - * Returns a set of SELECT elements for a full datetime setup: day, month and year, and then time. - * - * @param string $tagName Prefix name for the SELECT element - * @param string $dateFormat DMY, MDY, YMD or NONE. - * @param string $timeFormat 12, 24, NONE - * @param string $selected Option which is selected. - * @param array $optionAttr Attribute array for the option elements. - * @return string The HTML formatted OPTION element - * @access public - */ - function dateTimeOptionTag($tagName, $dateFormat = 'DMY', $timeFormat = '12', $selected = null, $selectAttr = null, $optionAttr = null, $showEmpty = true) { - $day = null; - $month = null; - $year = null; - $hour = null; - $min = null; - $meridian = null; - - if (empty($selected)) { - $selected = $this->tagValue($tagName); - } - - if (!empty($selected)) { - - if (is_int($selected)) { - $selected = strftime('%Y-%m-%d %H:%M:%S', $selected); - } - - $meridian = 'am'; - $pos = strpos($selected, '-'); - if ($pos !== false) { - $date = explode('-', $selected); - $days = explode(' ', $date[2]); - $day = $days[0]; - $month = $date[1]; - $year = $date[0]; - } else { - $days[1] = $selected; - } - - if ($timeFormat != 'NONE' && !empty($timeFormat)) { - $time = explode(':', $days[1]); - $check = str_replace(':', '', $days[1]); - - if (($check > 115959) && $timeFormat == '12') { - $time[0] = $time[0] - 12; - $meridian = 'pm'; - } elseif ($time[0] > 12) { - $meridian = 'pm'; - } - - $hour = $time[0]; - $min = $time[1]; - } - } - - $elements = array('Day','Month','Year','Hour','Minute','Meridian'); - if (isset($selectAttr['id'])) { - if (is_string($selectAttr['id'])) { - // build out an array version - foreach ($elements as $element) { - $selectAttrName = 'select' . $element . 'Attr'; - ${$selectAttrName} = $selectAttr; - ${$selectAttrName}['id'] = $selectAttr['id'] . $element; - } - } elseif (is_array($selectAttr['id'])) { - // check for missing ones and build selectAttr for each element - foreach ($elements as $element) { - $selectAttrName = 'select' . $element . 'Attr'; - ${$selectAttrName} = $selectAttr; - ${$selectAttrName}['id'] = $selectAttr['id'][strtolower($element)]; - } - } - } else { - // build the selectAttrName with empty id's to pass - foreach ($elements as $element) { - $selectAttrName = 'select' . $element . 'Attr'; - ${$selectAttrName} = $selectAttr; - } - } - - switch($dateFormat) { - case 'DMY': // so uses the new selex - $opt = $this->dayOptionTag($tagName, null, $day, $selectDayAttr, $optionAttr, $showEmpty) . '-' . - $this->monthOptionTag($tagName, null, $month, $selectMonthAttr, $optionAttr, $showEmpty) . '-' . $this->yearOptionTag($tagName, null, null, null, $year, $selectYearAttr, $optionAttr, $showEmpty); - break; - case 'MDY': - $opt = $this->monthOptionTag($tagName, null, $month, $selectMonthAttr, $optionAttr, $showEmpty) . '-' . - $this->dayOptionTag($tagName, null, $day, $selectDayAttr, $optionAttr, $showEmpty) . '-' . $this->yearOptionTag($tagName, null, null, null, $year, $selectYearAttr, $optionAttr, $showEmpty); - break; - case 'YMD': - $opt = $this->yearOptionTag($tagName, null, null, null, $year, $selectYearAttr, $optionAttr, $showEmpty) . '-' . - $this->monthOptionTag($tagName, null, $month, $selectMonthAttr, $optionAttr, $showEmpty) . '-' . - $this->dayOptionTag($tagName, null, $day, $selectDayAttr, $optionAttr, $showEmpty); - break; - case 'Y': - $opt = $this->yearOptionTag($tagName, null, null, null, $selected, $selectYearAttr, $optionAttr, $showEmpty); - break; - case 'NONE': - default: - $opt = ''; - break; - } - - switch($timeFormat) { - case '24': - $opt .= $this->hourOptionTag($tagName, null, true, $hour, $selectHourAttr, $optionAttr, $showEmpty) . ':' . - $this->minuteOptionTag($tagName, null, $min, $selectMinuteAttr, $optionAttr, $showEmpty); - break; - case '12': - $opt .= $this->hourOptionTag($tagName, null, false, $hour, $selectHourAttr, $optionAttr, $showEmpty) . ':' . - $this->minuteOptionTag($tagName, null, $min, $selectMinuteAttr, $optionAttr, $showEmpty) . ' ' . - $this->meridianOptionTag($tagName, null, $meridian, $selectMeridianAttr, $optionAttr, $showEmpty); - break; - case 'NONE': - default: - $opt .= ''; - break; - } - return $opt; - } -/** - * Returns a row of formatted and named TABLE headers. - * - * @param array $names Array of tablenames. - * @param array $trOptions HTML options for TR elements. - * @param array $thOptions HTML options for TH elements. - * @param boolean $return Wheter this method should return a value - * @return string - * @access public - */ - function tableHeaders($names, $trOptions = null, $thOptions = null, $return = false) { - $out = array(); - foreach ($names as $arg) { - $out[] = sprintf($this->tags['tableheader'], $this->parseHtmlOptions($thOptions), $arg); - } - - $data = sprintf($this->tags['tablerow'], $this->parseHtmlOptions($trOptions), join(' ', $out)); - return $this->output($data, $return); - } -/** - * Returns a formatted string of table rows (TR's with TD's in them). - * - * @param array $data Array of table data - * @param array $oddTrOptionsHTML options for odd TR elements - * @param array $evenTrOptionsHTML options for even TR elements - * @param boolean $return Wheter this method should return a value - * @return string Formatted HTML - * @access public - */ - function tableCells($data, $oddTrOptions = null, $evenTrOptions = null, $return = false) { - if (empty($data[0]) || !is_array($data[0])) { - $data = array($data); - } - static $count = 0; - - foreach ($data as $line) { - $count++; - $cellsOut = array(); - - foreach ($line as $cell) { - $cellsOut[] = sprintf($this->tags['tablecell'], null, $cell); - } - $options = $this->parseHtmlOptions($count % 2 ? $oddTrOptions : $evenTrOptions); - $out[] = sprintf($this->tags['tablerow'], $options, join(' ', $cellsOut)); - } - return $this->output(join("\n", $out), $return); - } -/** - * Generates a nested unordered list tree from an array. - * - * @param array $data - * @param array $htmlAttributes - * @param string $bodyKey - * @param string $childrenKey - * @param boolean $return Wheter this method should return a value or output it. This overrides AUTO_OUTPUT. - * @return mixed Either string or echos the value, depends on AUTO_OUTPUT and $return. If $this->_crumbs is empty, return null. - * @access public - */ - function guiListTree($data, $htmlAttributes = array(), $bodyKey = 'body', $childrenKey = 'children', $return = false) { - $out="_parseAttributes($htmlAttributes) . ">\n"; - foreach ($data as $item) { - $out .= "
  • {$item[$bodyKey]}\n"; - if (isset($item[$childrenKey]) && is_array($item[$childrenKey]) && count($item[$childrenKey])) { - $out .= $this->guiListTree($item[$childrenKey], $htmlAttributes, $bodyKey, $childrenKey); - } - $out .= "
  • \n"; - } - $out .= "\n"; - return $this->output($out, $return); - } -/** - * Returns value of $fieldName. False if the tag does not exist. - * - * @param string $fieldName Fieldname as "Modelname/fieldname" string - * @return string htmlspecialchars Value of the named tag. - * @access public - */ - function tagValue($fieldName, $escape = false) { - $this->setFormTag($fieldName); - if (isset($this->params['data'][$this->model][$this->field])) { - return ife($escape, h($this->params['data'][$this->model][$this->field]), $this->params['data'][$this->model][$this->field]); - } elseif (isset($this->data[$this->model][$this->field])) { - return ife($escape, h($this->data[$this->model][$this->field]), $this->data[$this->model][$this->field]); - } - return false; - } -/** - * Returns false if given FORM field has no errors. Otherwise it returns the constant set in the array Model->validationErrors. - * - * @param string $model Model name as string - * @param string $field Fieldname as string - * @return boolean True on errors. - * @access public - */ - function tagIsInvalid($model, $field) { - return empty($this->validationErrors[$model][$field]) ? 0 : $this->validationErrors[$model][$field]; - } -/** - * Returns number of errors in a submitted FORM. - * - * @return int Number of errors - * @access public - */ - function validate() { - $args = func_get_args(); - $errors = call_user_func_array(array(&$this, 'validateErrors'), $args); - return count($errors); - } -/** - * Validates a FORM according to the rules set up in the Model. - * - * @return int Number of errors - * @access public - */ - function validateErrors() { - $objects = func_get_args(); - if (!count($objects)) { - return false; - } - - $errors = array(); - foreach ($objects as $object) { - $errors = array_merge($errors, $object->invalidFields($object->data)); - } - return $this->validationErrors = (count($errors) ? $errors : false); - } -/** - * Returns a formatted error message for given FORM field, NULL if no errors. - * - * @param string $field A field name, like "Modelname/fieldname" - * @param string $text Error message - * @return string If there are errors this method returns an error message, else NULL. - * @access public - */ - function tagErrorMsg($field, $text) { - $error = 1; - $this->setFormTag($field); - if ($error == $this->tagIsInvalid($this->model, $this->field)) { - return sprintf('
    %s
    ', is_array($text) ? (empty($text[$error - 1]) ? 'Error in field' : $text[$error - 1]) : $text); - } else { - return null; - } - } -/** - * Sets this helper's model and field properties to the slash-separated value-pair in $tagValue. - * - * @param string $tagValue A field name, like "Modelname/fieldname" - * @return - * @access public - */ - function setFormTag($tagValue) { - return list($this->model, $this->field) = explode("/", $tagValue); - } -/** - * Returns a space-delimited string with items of the $options array. If a - * key of $options array happens to be one of: - * + 'compact' - * + 'checked' - * + 'declare' - * + 'readonly' - * + 'disabled' - * + 'selected' - * + 'defer' - * + 'ismap' - * + 'nohref' - * + 'noshade' - * + 'nowrap' - * + 'multiple' - * + 'noresize' - * - * And its value is one of: - * + 1 - * + true - * + 'true' - * - * Then the value will be reset to be identical with key's name. - * If the value is not one of these 3, the parameter is not output. - * - * @param array $options Array of options. - * @param array $exclude Array of options to be excluded. - * @param string $insertBefore String to be inserted before options. - * @param string $insertAfter String to be inserted ater options. - * @return string - * @access protected - */ - function _parseAttributes($options, $exclude = null, $insertBefore = ' ', $insertAfter = null) { - if (is_array($options)) { - $default = array ( - 'escape' => true - ); - $options = am($default, $options); - if (!is_array($exclude)) { - $exclude = array(); - } - $exclude = am($exclude, array('escape')); - $keys = array_diff(array_keys($options), $exclude); - $values = array_intersect_key(array_values($options), $keys); - $escape = $options['escape']; - $attributes = array(); - foreach ($keys as $index => $key) { - $attributes[] = $this->__formatAttribute($key, $values[$index], $escape); - } - $out = implode(' ', $attributes); - } else { - $out = $options; - } - return $out ? $insertBefore . $out . $insertAfter : ''; - } -/** - * @param string $key - * @param string $value - * @return string - * @access private - */ - function __formatAttribute($key, $value, $escape = true) { - $attribute = ''; - $attributeFormat = '%s="%s"'; - $minimizedAttributes = array('compact', 'checked', 'declare', 'readonly', 'disabled', 'selected', 'defer', 'ismap', 'nohref', 'noshade', 'nowrap', 'multiple', 'noresize'); - - if (in_array($key, $minimizedAttributes)) { - if ($value === 1 || $value === true || $value === 'true' || $value == $key) { - $attribute = sprintf($attributeFormat, $key, $key); - } - } else { - $attribute = sprintf($attributeFormat, $key, ife($escape, h($value), $value)); - } - return $attribute; - } -/** - * @deprecated Name changed to 'textarea'. Version 0.9.2. - * @see HtmlHelper::textarea() - */ - function areaTag($tagName, $cols = 60, $rows = 10, $htmlAttributes = array(), $return = false) { - $htmlAttributes['cols']=$cols; - $htmlAttributes['rows']=$rows; - return $this->textarea($tagName, $htmlAttributes, $return); - } -/** - * @deprecated Name changed to 'charset'. Version 0.9.2. - * @see HtmlHelper::charset() - */ - function charsetTag($charset, $return = false) { - return $this->charset($charset, $return); - } -/** - * @deprecated Name changed to 'checkbox'. Version 0.9.2. - * @see HtmlHelper::checkbox() - */ - function checkboxTag($fieldName, $title = null, $htmlAttributes = array(), $return = false) { - return $this->checkbox($fieldName, $title, $htmlAttributes, $return); - } -/** - * @deprecated Name changed to 'css'. Version 0.9.2. - * @see HtmlHelper::css() - */ - function cssTag($path, $rel = 'stylesheet', $htmlAttributes = array(), $return = false) { - return $this->css($path, $rel, $htmlAttributes, $return); - } -/** - * @deprecated Name changed to 'file'. Version 0.9.2. - * @see HtmlHelper::file() - */ - function fileTag($fieldName, $htmlAttributes = array(), $return = false) { - return $this->file($fieldName, $htmlAttributes, $return); - } -/** - * @deprecated Name changed to 'hidden'. Version 0.9.2. - * @see HtmlHelper::hidden() - */ - function hiddenTag($tagName, $value = null, $htmlOptions = null) { - $this->setFormTag($tagName); - $htmlOptions['value'] = $value ? $value : $this->tagValue($tagName); - return $this->output(sprintf($this->tags['hidden'], $this->model, $this->field, $this->parseHtmlOptions($htmlOptions, null, '', ' '))); - } -/** - * @deprecated Name changed to 'image'. Version 0.9.2. - * @see HtmlHelper::image() - */ - function imageTag($path, $alt = null, $htmlAttributes = array(), $return = false) { - $htmlAttributes['alt'] = $alt; - return $this->image($path, $htmlAttributes, $return); - } -/** - * @deprecated Name changed to 'input'. Version 0.9.2. - * @see HtmlHelper::input() - */ - function inputTag($tagName, $size = 20, $htmlOptions = null) { - $this->setFormTag($tagName); - $htmlOptions['value'] = isset($htmlOptions['value']) ? $htmlOptions['value'] : $this->tagValue($tagName); - $this->tagIsInvalid($this->model, $this->field) ? $htmlOptions['class'] = 'form_error' : null; - return $this->output(sprintf($this->tags['input'], $this->model, $this->field, $this->parseHtmlOptions($htmlOptions, null, '', ' '))); - } -/** - * @deprecated Unified with 'link'. Version 0.9.2. - * @see HtmlHelper::link() - */ - function linkOut($title, $url = null, $htmlAttributes = array(), $escapeTitle = true, $return = false) { - return $this->link($title, $url, $htmlAttributes, false, $escapeTitle, $return); - } -/** - * @deprecated Unified with 'link'. Version 0.9.2. - * @see HtmlHelper::link() - */ - function linkTo($title, $url, $htmlAttributes = array(), $confirmMessage = false, $escapeTitle = true, $return = false) { - return $this->link($title, $url, $htmlAttributes, $confirmMessage, $escapeTitle, $return); - } -/** - * @deprecated Name changed to '_parseAttributes'. Version 0.9.2. - * @see HtmlHelper::_parseAttributes() - */ - function parseHtmlOptions($options, $exclude = null, $insertBefore = ' ', $insertAfter = null) { - if (!is_array($exclude)) - $exclude=array(); - - if (is_array($options)) { - $out=array(); - - foreach ($options as $k => $v) { - if (!in_array($k, $exclude)) { - $out[] = "{$k}=\"{$v}\""; - } - } - $out = join(' ', $out); - return $out ? $insertBefore . $out . $insertAfter : null; - } else { - return $options ? $insertBefore . $options . $insertAfter : null; - } - } -/** - * @deprecated Name changed to 'password'. Version 0.9.2. - * @see HtmlHelper::password() - */ - function passwordTag($fieldName, $size = 20, $htmlAttributes = array(), $return = false) { - $args = func_get_args(); - return call_user_func_array(array(&$this, - "password"), $args); - } -/** - * @deprecated Name changed to 'radio'. Version 0.9.2. - * @see HtmlHelper::radio() - */ - function radioTags($fieldName, $options, $inbetween = null, $htmlAttributes = array(), $return = false) { - return $this->radio($fieldName, $options, $inbetween, $htmlAttributes, $return); - } -/** - * @deprecated Name changed to 'url'. Version 0.9.2. - * @see HtmlHelper::url() - */ - function urlFor($url) { - return $this->url($url); - } -/** - * @deprecated Name changed to 'submit'. Version 0.9.2. - * @see HtmlHelper::submit() - */ - function submitTag() { - $args = func_get_args(); - return call_user_func_array(array(&$this, "submit"), $args); - } -/************************************************************************* - * Moved methods - *************************************************************************/ -/** - * @deprecated Moved to TextHelper. Version 0.9.2. - */ - function trim() { - die("Method HtmlHelper::trim() was moved to TextHelper::trim()."); - } -/** - * @deprecated Moved to JavascriptHelper. Version 0.9.2. - */ - function javascriptIncludeTag($url) { - die("Method HtmlHelper::javascriptIncludeTag() was moved to JavascriptHelper::link()."); - } -/** - * @deprecated Moved to JavascriptHelper. Version 0.9.2. - */ - function javascriptTag($script) { - die("Method HtmlHelper::javascriptTag() was moved to JavascriptHelper::codeBlock()."); - } -/** - * This is very WYSIWYG unfriendly, use HtmlHelper::url() to get contents of "action" attribute. Version 0.9.2. - * @deprecated Version 0.9.2. Will not be available after 1.1.x.x - * @see FormHelper::create() - */ - function formTag($target = null, $type = 'post', $htmlAttributes = array()) { - $htmlAttributes['action']=$this->urlFor ($target); - $htmlAttributes['method']=$type == 'get' ? 'get' : 'post'; - $type == 'file' ? $htmlAttributes['enctype'] = 'multipart/form-data' : null; - - $append = ''; - - if (isset($this->params['_Token']) && !empty($this->params['_Token'])) { - $append .= '

    '; - $append .= $this->hidden('_Token/key', array('value' => $this->params['_Token']['key'], 'id' => '_TokenKey' . mt_rand()), true); - $append .= '

    '; - } - - return sprintf($this->tags['form'], $this->parseHtmlOptions($htmlAttributes, null, '')) . $append; - } -/** - * This should be done using a content filter. - * @deprecated Version 0.9.2. Will not be available after 1.1.x.x - */ - function linkEmail($title, $email = null, $options = null) { - // if no $email, then title contains the email. - if (empty($email)) - $email=$title; - - $match=array(); - - // does the address contain extra attributes? - preg_match('!^(.*)(\?.*)$!', $email, $match); - - // plaintext - if (empty($options['encode']) || !empty($match[2])) { - return sprintf($this->tags['mailto'], $email, $this->parseHtmlOptions($options), $title); - } - // encoded to avoid spiders - else { - $email_encoded=null; - - for ($ii = 0; $ii < strlen($email); $ii++) { - if (preg_match('!\w!', $email[$ii])) { - $email_encoded .= '%' . bin2hex($email[$ii]); - } else { - $email_encoded .= $email[$ii]; - } - } - - $title_encoded=null; - - for ($ii = 0; $ii < strlen($title); $ii++) { - $title_encoded .= preg_match('/^[A-Za-z0-9]$/', $title[$ii]) - ? '&#x' . bin2hex($title[$ii]) . ';' : $title[$ii]; - } - - return sprintf($this->tags['mailto'], $email_encoded, - $this->parseHtmlOptions($options, array('encode')), $title_encoded); - } - } - -/** - * @deprecated Version 0.9.2. Will not be available after 1.1.x.x - */ - function tag($name, $options = null, $open = false) { - $tag = "<$name " . $this->parseHtmlOptions($options); - $tag .= $open ? ">" : " />"; - return $tag; - } -/** - * @deprecated Version 0.9.2. Will not be available after 1.1.x.x - */ - function contentTag($name, $content, $options = null) { - return "<$name " . $this->parseHtmlOptions($options) . ">$content"; - } - -} -?> \ No newline at end of file diff --git a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/javascript.php b/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/javascript.php deleted file mode 100644 index 1219987..0000000 --- a/poc/poc02-compiling-cake/src/vendor/cake_1.1.20.7692/cake/libs/view/helpers/javascript.php +++ /dev/null @@ -1,317 +0,0 @@ - - * Copyright 2005-2008, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.view.helpers - * @since CakePHP(tm) v 0.10.0.1076 - * @version $Revision: 6305 $ - * @modifiedby $LastChangedBy: phpnut $ - * @lastmodified $Date: 2008-01-01 21:33:56 -0500 (Tue, 01 Jan 2008) $ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Javascript Helper class for easy use of JavaScript. - * - * JavascriptHelper encloses all methods needed while working with JavaScript. - * - * @package cake - * @subpackage cake.cake.libs.view.helpers - */ -class JavascriptHelper extends Helper{ - var $_cachedEvents = array(); - var $_cacheEvents = false; - var $_cacheToFile = false; - var $_cacheAll = false; - var $_rules = array(); -/** - * Returns a JavaScript script tag. - * - * @param string $script The JavaScript to be wrapped in SCRIPT tags. - * @param boolean $allowCache Allows the script to be cached if non-event caching is active - * @return string The full SCRIPT element, with the JavaScript inside it. - * @access public - */ - function codeBlock($script, $allowCache = true) { - if ($this->_cacheEvents && $this->_cacheAll && $allowCache) { - $this->_cachedEvents[] = $script; - } else { - return sprintf($this->tags['javascriptblock'], $script); - } - } -/** - * Returns a JavaScript include tag (SCRIPT element) - * - * @param string $url URL to JavaScript file. - * @return string - * @access public - */ - function link($url) { - if (strpos($url, '.js') === false) { - $url .= ".js"; - } - return sprintf($this->tags['javascriptlink'], $this->webroot . $this->themeWeb . JS_URL . $url); - } -/** - * Returns a JavaScript include tag for an externally-hosted script - * - * @param string $url URL to JavaScript file. - * @return string - * @access public - */ - function linkOut($url) { - if (strpos($url, '.js') === false && strpos($url, '?') === false) { - $url .= '.js'; - } - return sprintf($this->tags['javascriptlink'], $url); - } -/** - * Escape carriage returns and single and double quotes for JavaScript segments. - * - * @param string $script string that might have javascript elements - * @return string escaped string - * @access public - */ - function escapeScript($script) { - $script = r(array("\r\n", "\n", "\r"), '\n', $script); - $script = r(array('"', "'"), array('\"', "\\'"), $script); - return $script; - } -/** - * Escape a string to be JavaScript friendly. - * - * List of escaped ellements: - * + "\r\n" => '\n' - * + "\r" => '\n' - * + "\n" => '\n' - * + '"' => '\"' - * + "'" => "\\'" - * - * @param string $script String that needs to get escaped. - * @return string Escaped string. - * @access public - */ - function escapeString($string) { - $escape = array("\r\n" => '\n', "\r" => '\n', "\n" => '\n', '"' => '\"', "'" => "\\'"); - return r(array_keys($escape), array_values($escape), $string); - } -/** - * Attach an event to an element. Used with the Prototype library. - * - * @param string $object Object to be observed - * @param string $event event to observe - * @param string $observer function to call - * @param boolean $useCapture default true - * @return boolean true on success - * @access public - */ - function event($object, $event, $observer = null, $useCapture = false) { - - if ($useCapture == true) { - $useCapture = "true"; - } else { - $useCapture = "false"; - } - - if ($object == 'window' || strpos($object, '$(') !== false || strpos($object, '"') !== false || strpos($object, '\'') !== false) { - $b = "Event.observe($object, '$event', function(event) { $observer }, $useCapture);"; - } else { - $chars = array('#', ' ', ', ', '.', ':'); - $found = false; - foreach ($chars as $char) { - if (strpos($object, $char) !== false) { - $found = true; - break; - } - } - if ($found) { - $this->_rules[$object] = $event; - } else { - $b = "Event.observe(\$('$object'), '$event', function(event) { $observer }, $useCapture);"; - } - } - - if (isset($b) && !empty($b)) { - if ($this->_cacheEvents === true) { - $this->_cachedEvents[] = $b; - return; - } else { - return $this->codeBlock($b); - } - } - } -/** - * Cache JavaScript events created with event() - * - * @param boolean $file If true, code will be written to a file - * @param boolean $all If true, all code written with JavascriptHelper will be sent to a file - * @return void - * @access public - */ - function cacheEvents($file = false, $all = false) { - $this->_cacheEvents = true; - $this->_cacheToFile = $file; - $this->_cacheAll = $all; - } -/** - * Write cached JavaScript events - * - * @return string - * @access public - */ - function writeEvents() { - - $rules = array(); - if (!empty($this->_rules)) { - foreach ($this->_rules as $sel => $event) { - $rules[] = "\t'{$sel}': function(element, event) {\n\t\t{$event}\n\t}"; - } - $this->_cacheEvents = true; - } - - if ($this->_cacheEvents) { - - $this->_cacheEvents = false; - $events = $this->_cachedEvents; - $data = implode("\n", $events); - $this->_cachedEvents = array(); - - if (!empty($rules)) { - $data .= "\n\nvar SelectorRules = {\n" . implode(",\n\n", $rules) . "\n}\n"; - $data .= "\nEventSelectors.start(SelectorRules);\n"; - } - - if (!empty($events) || !empty($rules)) { - if ($this->_cacheToFile) { - $filename = md5($data); - if (!file_exists(JS . $filename . '.js')) { - cache(r(WWW_ROOT, '', JS) . $filename . '.js', $data, '+999 days', 'public'); - } - return $this->link($filename); - } else { - return $this->codeBlock("\n" . $data . "\n"); - } - } - } - } -/** - * Includes the Prototype Javascript library (and anything else) inside a single script tag. - * - * Note: The recommended approach is to copy the contents of - * javascripts into your application's - * public/javascripts/ directory, and use @see javascriptIncludeTag() to - * create remote script links. - * - * @param string $script name of script to include - * @return string script with all javascript in/javascripts folder - * @access public - */ - function includeScript($script = "") { - if ($script == "") { - $dh = opendir(JS); - while (false !== ($filename = readdir($dh))) { - $files[] = $filename; - } - sort($files); - $javascript = ''; - foreach ($files as $file) { - if (substr($file, -3) == '.js') { - $javascript .= file_get_contents(JS . "{$file}") . "\n\n"; - } - } - } else { - $javascript = file_get_contents(JS . "$script.js") . "\n\n"; - } - return $this->codeBlock("\n\n" . $javascript); - } -/** - * Generates a JavaScript object in JavaScript Object Notation (JSON) - * from an array - * - * @param array $data Data to be converted - * @param boolean $block Wraps return value in a