diff --git a/.htaccess b/.htaccess
index d7e98ac48..f4d6c636e 100644
--- a/.htaccess
+++ b/.htaccess
@@ -1,7 +1,5 @@
RewriteEngine on
RewriteRule ^$ public/ [L]
-
- #RewriteCond %{REQUEST_URI} !^/cake$
RewriteRule (.*) public/$1 [L]
diff --git a/config/core.php b/config/core.php
index 117b7dd3c..4786cd50c 100644
--- a/config/core.php
+++ b/config/core.php
@@ -38,24 +38,4 @@
*/
define ('DEBUG', 0);
-/**
- * Page cacheing setting.
- */
-define ('CACHE_PAGES', false);
-
-/**
- * Cache lifetime in seconds, 0 for debugging, -1 for eternity.
- */
-define ('CACHE_PAGES_FOR', -1);
-
-/**
- * Set any extra debug options here.
- */
-if (DEBUG)
-{
- error_reporting(E_ALL);
- ini_set('error_reporting', E_ALL);
- $TIME_START = getmicrotime();
-}
-
?>
diff --git a/config/database.php.default b/config/database.php.default
index 7736d24a3..111fda9b0 100644
--- a/config/database.php.default
+++ b/config/database.php.default
@@ -30,27 +30,30 @@
*/
/**
- * Database configuration array. You can configure multiple connections.
- *
- * @var array $DATABASE_CONFIG
+ * Database configuration class.
+ * You can specify multiple configurations for production, development and testing.
*/
-$DATABASE_CONFIG = array(
- 'devel' => array(
- 'driver' => 'mysql',
- 'host' => 'localhost',
- 'login' => 'login',
- 'password' => 'password',
- 'database' => 'database'
- ),
+class DATABASE_CONFIG {
- 'test' => array(
- 'driver' => 'mysql',
- 'host' => 'localhost',
- 'login' => 'login',
- 'password' => 'password',
- 'database' => 'database'
- ),
+ function devel () {
+ return array(
+ 'driver' => 'mysql',
+ 'host' => 'localhost',
+ 'login' => 'www',
+ 'password' => '',
+ 'database' => 'project_name'
+ );
+ }
-);
+ function test () {
+ return array(
+ 'driver' => 'mysql',
+ 'host' => 'localhost',
+ 'login' => 'www-test',
+ 'password' => '',
+ 'database' => 'project_name-test'
+ );
+ }
+}
?>
diff --git a/config/paths.php b/config/paths.php
index 67c07b5da..fba63b3ea 100644
--- a/config/paths.php
+++ b/config/paths.php
@@ -42,71 +42,73 @@ if( !defined('ROOT') ){
/**
* Path to the application directory.
*/
-define ('APP', ROOT.'app/');
+define ('APP', ROOT.'app'.DS);
/**
* Path to the application models directory.
*/
-define ('MODELS', APP.'models/');
+define ('MODELS', APP.'models'.DS);
/**
* Path to the application controllers directory.
*/
-define ('CONTROLLERS', APP.'controllers/');
+define ('CONTROLLERS', APP.'controllers'.DS);
/**
* Path to the application helpers directory.
*/
-define ('HELPERS', APP.'helpers/');
+define ('HELPERS', APP.'helpers'.DS);
/**
* Path to the application views directory.
*/
-define ('VIEWS', APP.'views/');
+define ('VIEWS', APP.'views'.DS);
/**
* Path to the configuration files directory.
*/
-define ('CONFIGS', ROOT.'config/');
+define ('CONFIGS', ROOT.'config'.DS);
/**
* Path to the libs directory.
*/
-define ('LIBS', ROOT.'libs/');
+define ('LIBS', ROOT.'libs'.DS);
+define ('LOGS', ROOT.'logs'.DS);
+define ('MODULES', ROOT.'modules'.DS);
/**
* Path to the public directory.
*/
-define ('PUBLIC', ROOT.'public/');
+define ('PUBLIC', ROOT.'public'.DS);
/**
* Path to the tests directory.
*/
-define ('TESTS', ROOT.'tests/');
+define ('TESTS', ROOT.'tests'.DS);
/**
* Path to the vendors directory.
*/
-define ('VENDORS', ROOT.'vendors/');
+define ('VENDORS', ROOT.'vendors'.DS);
/**
* Path to the controller test directory.
*/
-define ('CONTROLLER_TESTS',TESTS.'app/controllers/');
+define ('CONTROLLER_TESTS',TESTS.'app'.DS.'controllers'.DS);
/**
* Path to the helpers test directory.
*/
-define ('HELPER_TESTS', TESTS.'app/helpers/');
+define ('HELPER_TESTS', TESTS.'app'.DS.'helpers'.DS);
/**
* Path to the models test directory.
*/
-define ('MODEL_TESTS', TESTS.'app/models/');
+define ('MODEL_TESTS', TESTS.'app'.DS.'models'.DS);
/**
* Path to the lib test directory.
*/
-define ('LIB_TESTS', TESTS.'libs/')
+define ('LIB_TESTS', TESTS.'libs'.DS);
?>
diff --git a/libs/bake.php b/libs/bake.php
index e36e39446..ff21217cd 100644
--- a/libs/bake.php
+++ b/libs/bake.php
@@ -42,9 +42,9 @@ uses('object', 'inflector');
* @package cake
* @subpackage cake.libs
* @since Cake v 0.2.9
- */
-class Bake extends Object
-{
+ */
+class Bake extends Object {
+
/**
* Standard input stream (php://stdin).
*
@@ -455,16 +455,16 @@ class %sTest extends TestCase {
if (is_file($path) && !$this->dontAsk) {
fwrite($this->stdout, "File {$path} exists, overwrite? (yNaq) ");
- $key = fgets($this->stdin);
+ $key = trim(fgets($this->stdin));
- if (preg_match("/^q$/", $key)) {
+ if ($key=='q') {
fwrite($this->stdout, "Quitting.\n");
exit;
}
- elseif (preg_match("/^a$/", $key)) {
- $this->dontAsk = true;
+ elseif ($key=='a') {
+ $this->dont_ask = true;
}
- elseif (preg_match("/^y$/", $key)) {
+ elseif ($key=='y') {
}
else {
fwrite($this->stdout, "Skip {$path}\n");
diff --git a/libs/basics.php b/libs/basics.php
index c78a8e2d7..41581d438 100644
--- a/libs/basics.php
+++ b/libs/basics.php
@@ -30,20 +30,6 @@
*
*/
-/**
- * Loads all libs from LIBS directory.
- *
- * @uses listModules()
- * @uses LIBS
- */
-function loadLibs () {
- foreach (listModules(LIBS) as $lib) {
- if ($lib != 'basics') {
- include_once (LIBS.$lib.'.php');
- }
- }
-}
-
/**
* Loads all models.
*
@@ -53,8 +39,8 @@ function loadLibs () {
*/
function loadModels () {
require (APP.'app_model.php');
- foreach (listModules(MODELS) as $model) {
- require (MODELS.$model.'.php');
+ foreach (listClasses(MODELS) as $model_fn) {
+ require (MODELS.$model_fn);
}
}
@@ -69,97 +55,52 @@ function loadModels () {
function loadControllers () {
require (APP.'app_controller.php');
- foreach (listModules(HELPERS) as $helper) {
+ foreach (listClasses(HELPERS) as $helper) {
require (HELPERS.$helper.'.php');
}
- foreach (listModules(CONTROLLERS) as $controller) {
+ foreach (listClasses(CONTROLLERS) as $controller) {
require (CONTROLLERS.$controller.'.php');
}
}
/**
- * Lists all .php files from a given path.
- *
- * @param string $path
- * @param boolean $sort
- * @return array
- */
-function listModules($path, $sort=true) {
- if ($d = opendir($path)) {
- $out = array();
- $r = null;
- while (false !== ($fn = readdir($d))) {
- if (preg_match('#^(.+)\.php$#', $fn, $r)) {
- $out[] = $r[1];
- }
- }
- if ($sort || $this->sort) {
- sort($out);
- }
+ * Loads a controller and it's helper libraries
+ *
+ * @param string $name
+ * @return boolean
+ */
+function loadController ($name) {
+ $controller_fn = CONTROLLERS.Inflector::underscore($name).'_controller.php';
+ $helper_fn = HELPERS.Inflector::underscore($name).'_helper.php';
- return $out;
+ require(APP.'app_controller.php');
+
+ if (file_exists($helper_fn))
+ require($helper_fn);
+
+ return file_exists($controller_fn)? require($controller_fn): false;
+}
+
+/**
+ * Lists PHP files in a specified directory
+ *
+ * @param string $path
+ * @return array
+ */
+function listClasses($path) {
+ $modules = new Folder($path);
+ return $modules->find('(.+)\.php');
+}
+
+/**
+ * Loads configuration files
+ */
+function config () {
+ $args = func_get_args();
+ foreach ($args as $arg) {
+ require_once (CONFIGS.$arg.'.php');
}
- else {
- return false;
- }
-}
-
-/**
- * Loads core config.
- *
- * @uses $TIME_START
- * @uses CONFIGS
- */
-function usesConfig () {
- global $TIME_START;
-
- require (CONFIGS.'core.php');
-}
-
-/**
- * Loads database connection identified by $level.
- *
- * @param string $level
- * @uses $DB
- * @uses DbFactory::make()
- * @uses loadDatabaseConfig()
- */
-function usesDatabase ($level='devel') {
- global $DB;
-
- $DB = DbFactory::make(loadDatabaseConfig($level));
-}
-
-/**
- * Loads database configuration identified by $level from CONFIGS/database.php.
- *
- * @param string $level
- * @return mixed
- */
-function loadDatabaseConfig ($level='devel') {
- if (file_exists(CONFIGS.'database.php'))
- require (CONFIGS.'database.php');
-
- if (empty($DATABASE_CONFIG))
- return false;
-
- if (empty($DATABASE_CONFIG[$level]))
- return false;
-
- if (!is_array($DATABASE_CONFIG[$level]))
- return false;
-
- return $DATABASE_CONFIG[$level];
-}
-
-/**
- * Loads tags configuration from CONFIGS/tags.php.
- *
- * @uses CONFIGS
- */
-function usesTagGenerator () {
- require (CONFIGS.'tags.php');
}
/**
@@ -252,13 +193,15 @@ if (!function_exists('array_combine')) {
function array_combine($a1, $a2) {
$a1 = array_values($a1);
$a2 = array_values($a2);
+ $c1 = count($a1);
+ $c2 = count($a2);
- if (count($a1) != count($a2)) return false; // different lenghts
- if (count($a1) <= 0) return false; // arrays are the same and both are empty
+ if ($c1 != $c2) return false; // different lenghts
+ if ($c1 <= 0) return false; // arrays are the same and both are empty
$output = array();
- for ($i = 0, $c = count($a1); $i < $c; $i++) {
+ for ($i = 0; $i < $c1; $i++) {
$output[$a1[$i]] = $a2[$i];
}
@@ -267,7 +210,7 @@ if (!function_exists('array_combine')) {
}
/**
- * Class used for internal manipulation with recordsets (?).
+ * Class used for internal manipulation of multiarrays (arrays of arrays)
*
* @package cake
* @subpackage cake.libs
@@ -319,13 +262,10 @@ class NeatArray {
* @access public
* @uses NeatArray::value
*/
- function cleanup ()
- {
+ function cleanup () {
$out = is_array($this->value)? array(): null;
- foreach ($this->value as $k=>$v)
- {
- if ($v)
- {
+ foreach ($this->value as $k=>$v) {
+ if ($v) {
$out[$k] = $v;
}
}
diff --git a/libs/controller.php b/libs/controller.php
index 28522fc38..6e5801a4e 100644
--- a/libs/controller.php
+++ b/libs/controller.php
@@ -402,6 +402,32 @@ class Controller extends Template {
return sprintf(TAG_IMAGE, $url, $alt, $this->parseHtmlOptions($html_options, '', ' '));
}
+
+/**
+ * Returns a CSS link meta-tag
+ *
+ * @param string $path
+ * @param string $rel
+ * @param array $html_options
+ * @return string
+ */
+ function cssTag ($path, $rel='stylesheet', $html_options=null) {
+ $url = "{$this->base}/css/{$path}.css";
+ return sprintf(TAG_CSS, $rel, $url, $this->parseHtmlOptions($html_options, '', ' '));
+ }
+
+
+/**
+ * Returns a charset meta-tag
+ *
+ * @param string $charset
+ * @return string
+ */
+ function charsetTag ($charset) {
+ return sprintf(TAG_CHARSET, $charset);
+ }
+
+
/**
* Enter description here...
*
@@ -480,10 +506,10 @@ class Controller extends Template {
$errors = array();
foreach ($objects as $object) {
- $errors = array_merge($errors, $object->invalidFields());
+ $errors = array_merge($errors, $object->invalidFields($object->data));
}
- return $this->validation_errors = (count($errors)? $errors: false);
+ return $this->validationErrors = (count($errors)? $errors: false);
}
/**
@@ -494,7 +520,12 @@ class Controller extends Template {
* @return unknown
*/
function tagErrorMsg ($field, $text) {
- return $this->tagIsInvalid($field)? sprintf(SHORT_ERROR_MESSAGE, $text): null;
+ if ($error = $this->tagIsInvalid($field)) {
+ return sprintf(SHORT_ERROR_MESSAGE, is_array($text)? (empty($text[$error-1])? 'Error in field': $text[$error-1]): $text);
+ }
+ else {
+ return null;
+ }
}
/**
@@ -504,7 +535,7 @@ class Controller extends Template {
* @return unknown
*/
function tagIsInvalid ($field) {
- return !empty($this->validation_errors[$field]);
+ return empty($this->validationErrors[$field])? 0: $this->validationErrors[$field];
}
@@ -548,7 +579,7 @@ class Controller extends Template {
*/
function error ($code, $name, $message) {
header ("HTTP/1.0 {$code} {$name}");
- print ($this->_do_render(VIEWS.'layouts/error.thtml', array('code'=>$code,'name'=>$name,'message'=>$message)));
+ print ($this->_render(VIEWS.'layouts/error.thtml', array('code'=>$code,'name'=>$name,'message'=>$message)));
}
}
diff --git a/libs/dbo.php b/libs/dbo.php
index 99341ad4e..30e2f37b8 100644
--- a/libs/dbo.php
+++ b/libs/dbo.php
@@ -264,7 +264,7 @@ class DBO extends Object {
}
/**
- * Enter description here...
+ * Returns a single row of results from the _last_ query
*
* @param unknown_type $results
* @param unknown_type $type
@@ -275,7 +275,7 @@ class DBO extends Object {
}
/**
- * Enter description here...
+ * Returns a single row of results for a _given_ query
*
* @param unknown_type $sql
* @return unknown
@@ -285,7 +285,7 @@ class DBO extends Object {
}
/**
- * Enter description here...
+ * Returns all result rows for a given query
*
* @param unknown_type $sql
* @return unknown
diff --git a/libs/dbo_adodb.php b/libs/dbo_adodb.php
index 7de340c65..e4df82ac4 100644
--- a/libs/dbo_adodb.php
+++ b/libs/dbo_adodb.php
@@ -165,166 +165,6 @@ class DBO_AdoDB extends DBO {
*
*/
function lastInsertId () { die('Please implement DBO::lastInsertId() first.'); }
-/*
-
-
- function connect($config) {
- if($config) {
- $this->config = $config;
- if(isset($this->config['driver'])) {
- $this->_adodb = NewADOConnection($this->config['driver']);
- $adodb =& $this->_adodb;
- $this->connected = $adodb->Connect($this->config['host'],$this->config['login'],$this->config['password'],$this->config['database']);
- }
- }
-
- if(!$this->connected)
- die('Could not connect to DB.');
- }
-
- function close() {
- $adodb =& $this->_adodb;
- $adodb->close;
- showLog();
- $this->_conn = NULL;
- $this->connected = NULL;
- }
-
- function query($q,$DEBUG=FALSE,$log=TRUE) {
- $adodb =& $this->_adodb;
- $t = getMicrotime();
-
- if($log){
- $this->_result =& $adodb->Execute($q);
- $result =& $this->_result;
- $this->took = round((getmicrotime()-$t)*1000, 0);
- if(!$this->_result && $adodb->ErrorMsg())
- $this->error = $adodb->ErrorMsg();
- else
- $this->error = NULL;
-
- $this->insert_id = $adodb->Insert_ID();
-
- $this->affected = $adodb->Affected_Rows();
-
- $this->num_rows = $result->RecordCount();
- $this->_logQuery($q);
-
- if($this->debug || $DEBUG) $this->_showQuery($q);
-
- Return $this->error? FALSE: $this->_result;
- }
- else {
- $this->_result = $adodb->Execute($q);
- Return $this->_result;
- }
- }
-
- function farr() {
- $result =& $this->_result;
- return $result->FetchRow();
- }
-
- //SAME AS ABOVE?
- function one($q,$DEBUG=FALSE) {
- $result =& $this->_result;
- Return $this->query($q,$DEBUG)? $result->FetchRow(): FALSE;
- }
-
- function all($q,$DEBUG=FALSE) {
- if($this->query($q,$DEBUG)) {
- $result = $this->_result;
- return $result->GetRows();
- } else {
- Return FALSE;
- }
- }
-
- function field($name, $q, $DEBUG=FALSE) {
- $data = $this->one($q, $DEBUG);
- return empty($data[$name])? false: $data[$name];
- }
-
- function tables() {
- $adodb =& $this->_adodb;
- $tables = $adodb->MetaTables('TABLES');
-
- if (!sizeof($tables)>0) {
- trigger_error(ERROR_NO_TABLE_LIST, E_USER_NOTICE);
- exit;
- }
- return $tables;
- }
-
- function fields ($table_name) {
- return $this->all("DESC {$table_name}");
- }
-
-
- function hasAny($table, $sql) {
- $out = $this->one("SELECT COUNT(*) AS count FROM {$table}".($sql? " WHERE {$sql}":""));
- return is_array($out)? $out['count']: FALSE;
- }
-
- function isConnected() {
- Return $this->connected;
- }
- function lastInsertId() {
- Return $this->insert_id;
- }
- function lastAffected() {
- Return $this->affected;
- }
- function lastNumRows() {
- Return $this->num_rows;
- }
- function lastError() {
- return $this->error;
- }
-
- function showLog($sorted=FALSE) {
- $log = $sorted?
- sortByKey($this->_queries_log, 'took', 'desc', SORT_NUMERIC):
- $this->_queries_log;
-
- print("
\n{$this->_queries_cnt} queries took {$this->_queries_time} ms |
\n");
- print("Nr | Query | Error | Affected | Num. rows | Took (ms) |
\n");
-
- foreach($log AS $k=>$i) {
- print("".($k+1)." | {$i['query']} | {$i['error']} | {$i['affected']} | {$i['num_rows']} | {$i['took']} |
\n");
- }
-
- print("
\n");
- }
-
- function _logQuery($q) {
- $this->_queries_cnt++;
- $this->_queries_time += $this->took;
- $this->_queries_log[] = array(
- 'query'=>$q,
- 'error'=>$this->error,
- 'affected'=>$this->affected,
- 'num_rows'=>$this->num_rows,
- 'took'=>$this->took
- );
-
-
- if ($this->error && function_exists('logError'))
- logError("Query: {$q} RETURNS ERROR {$this->error}");
- }
-
- function _showQuery($q) {
- $error = $this->error;
-
- if ($this->debug || $error) {
- print("Query: {$q} [Aff:{$this->affected} Num:{$this->num_rows} Took:{$this->took}ms]");
- if($error) {
- print("
ERROR: {$this->error}");
- }
- print('
');
- }
- }
-*/
}
?>
\ No newline at end of file
diff --git a/libs/db_factory.php b/libs/dbo_factory.php
similarity index 90%
rename from libs/db_factory.php
rename to libs/dbo_factory.php
index f12c4c1c5..210087367 100644
--- a/libs/db_factory.php
+++ b/libs/dbo_factory.php
@@ -1,72 +1,74 @@
- + //
-// + Copyright: (c) 2005, Cake Authors/Developers + //
-// + Author(s): Michal Tatarynowicz aka Pies + //
-// + Larry E. Masters aka PhpNut + //
-// + Kamil Dzielinski aka Brego + //
-// +------------------------------------------------------------------+ //
-// + Licensed under The MIT License + //
-// + Redistributions of files must retain the above copyright notice. + //
-// + See: http://www.opensource.org/licenses/mit-license.php + //
-//////////////////////////////////////////////////////////////////////////
-/**
- * Purpose: DbFactory
- *
- * Description:
- * Creates DBO-descendant objects from a given db connection configuration
- *
- * @filesource
- * @author Cake Authors/Developers
- * @copyright Copyright (c) 2005, Cake Authors/Developers
- * @link https://developers.nextco.com/cake/wiki/Authors Authors/Developers
- * @version $Revision: $
- * @modifiedby $LastChangedBy: $
- * @lastmodified $Date: $
- * @license http://www.opensource.org/licenses/mit-license.php The MIT License
- */
-
-/**
- * Enter description here...
- *
- */
-uses('object');
-
-/**
- * Enter description here...
- *
- * @package cake
- * @subpackage cake.libs
- * @since Cake v 1.0.0.0
- *
- */
-class DbFactory extends Object {
-
- function make ($config) {
-
- // special case for AdoDB -- driver name in the form of 'adodb_drivername'
- if (preg_match('#^adodb_(.*)$#i', $config['driver'], $res)) {
- uses('DBO_AdoDB');
- $config['driver'] = $res[1];
- $conn = new DBO_AdoDB($config);
- return $conn;
- }
- // regular, Cake-native db drivers
- else {
- $db_driver_class = 'DBO_'.$config['driver'];
- $db_driver_fn = LIBS.strtolower($db_driver_class.'.php');
- if (file_exists($db_driver_fn)) {
- uses(strtolower($db_driver_class));
- return new $db_driver_class ($config);
- }
- else {
- trigger_error (ERROR_UNKNOWN_DATABASE_DRIVER, E_USER_ERROR);
- return false;
- }
- }
- }
-}
-
+ + //
+// + Copyright: (c) 2005, Cake Authors/Developers + //
+// + Author(s): Michal Tatarynowicz aka Pies + //
+// + Larry E. Masters aka PhpNut + //
+// + Kamil Dzielinski aka Brego + //
+// +------------------------------------------------------------------+ //
+// + Licensed under The MIT License + //
+// + Redistributions of files must retain the above copyright notice. + //
+// + See: http://www.opensource.org/licenses/mit-license.php + //
+//////////////////////////////////////////////////////////////////////////
+/**
+ * Purpose: DbFactory
+ *
+ * Description:
+ * Creates DBO-descendant objects from a given db connection configuration
+ *
+ * @filesource
+ * @author Cake Authors/Developers
+ * @copyright Copyright (c) 2005, Cake Authors/Developers
+ * @link https://developers.nextco.com/cake/wiki/Authors Authors/Developers
+ * @version $Revision$
+ * @modifiedby $LastChangedBy$
+ * @lastmodified $Date$
+ * @license http://www.opensource.org/licenses/mit-license.php The MIT License
+ */
+
+/**
+ * Enter description here...
+ *
+ */
+uses('object');
+
+/**
+ * Enter description here...
+ *
+ * @package cake
+ * @subpackage cake.libs
+ * @since Cake v 1.0.0.0
+ *
+ */
+class DboFactory extends Object {
+
+ function make ($activeConfig) {
+ $config = DATABASE_CONFIG::$activeConfig();
+
+ // special case for AdoDB -- driver name in the form of 'adodb_drivername'
+ if (preg_match('#^adodb_(.*)$#i', $config['driver'], $res)) {
+ uses('DBO_AdoDB');
+ $config['driver'] = $res[1];
+ $conn = new DBO_AdoDB($config);
+ return $conn;
+ }
+ // regular, Cake-native db drivers
+ else {
+ $db_driver_class = 'DBO_'.$config['driver'];
+ $db_driver_fn = LIBS.strtolower($db_driver_class.'.php');
+
+ if (file_exists($db_driver_fn)) {
+ uses(strtolower($db_driver_class));
+ return new $db_driver_class ($config);
+ }
+ else {
+ trigger_error (ERROR_UNKNOWN_DATABASE_DRIVER, E_USER_ERROR);
+ return false;
+ }
+ }
+ }
+}
+
?>
\ No newline at end of file
diff --git a/libs/dispatcher.php b/libs/dispatcher.php
index d947a1276..82662ba8c 100644
--- a/libs/dispatcher.php
+++ b/libs/dispatcher.php
@@ -65,6 +65,7 @@ class Dispatcher extends Object {
*
*/
function __construct () {
+ $this->base = $this->baseUrl();
parent::__construct();
}
@@ -77,39 +78,34 @@ class Dispatcher extends Object {
function dispatch ($url) {
global $_POST, $_GET, $_FILES, $_SESSION;
- if (CACHE_PAGES) {
- $Cache = new Cache($url);
- if ($Cache->has()) return print $Cache->restore();
- }
-
- $this->base = $this->parseBaseUrl();
$params = $this->parseParams($url);
- // if no controller set
+ // die if no controller set
if (empty($params['controller']))
$this->errorNoController($url);
- $controller_class = ucfirst($params['controller']).'Controller';
+ $ctrl_name = ucfirst($params['controller']);
+ $ctrl_class = $ctrl_name.'Controller';
// if specified controller class doesn't exist
- if (!class_exists($controller_class))
- $this->errorUnknownController($url, $controller_class);
+ if (!loadController($ctrl_name) || !class_exists($ctrl_class))
+ $this->errorUnknownController($url, $ctrl_name);
- $controller = new $controller_class ($this);
+ $controller = new $ctrl_class ($this);
$controller->cache = &$Cache;
$controller->base = $this->base;
// if action is not set, and the default Controller::index() method doesn't exist
if (empty($params['action'])) {
- if (!method_exists($controller, 'index'))
- $this->errorNoAction($url);
- else
+ if (method_exists($controller, 'index'))
$params['action'] = 'index';
+ else
+ $this->errorNoAction($url);
}
// if the requested action doesn't exist
if (!method_exists($controller, $params['action']))
- $this->errorUnknownAction($url, $controller_class, $params['action']);
+ $this->errorUnknownAction($url, $ctrl_class, $params['action']);
$controller->params = $params;
$controller->action = $params['action'];
@@ -122,8 +118,6 @@ class Dispatcher extends Object {
if ($controller->autoRender)
$controller->render();
- if (CACHE_PAGES) $Cache->remember(null);
-
return $params;
}
@@ -157,7 +151,7 @@ class Dispatcher extends Object {
*
* @return unknown
*/
- function parseBaseUrl () {
+ function baseUrl () {
global $_SERVER;
//non mod_rewrite use:
diff --git a/libs/folder.php b/libs/folder.php
index 1b9d05acb..12c3ea84d 100644
--- a/libs/folder.php
+++ b/libs/folder.php
@@ -126,6 +126,27 @@ class Folder extends Object {
}
}
+
+/**
+ * Finds all matching files in a directory
+ *
+ * @param string $pattern
+ * @return unknown
+ */
+ function find ($regexp_pattern='.*') {
+ list($dirs, $files) = $this->ls();
+
+ $found = array();
+ foreach ($files as $file) {
+ if (preg_match("/^{$regexp_pattern}$/i", $file)) {
+ $found[] = $file;
+ }
+ }
+
+ return $found;
+ }
+
+
/**
* Enter description here...
*
diff --git a/libs/log.php b/libs/log.php
new file mode 100644
index 000000000..3fd64795b
--- /dev/null
+++ b/libs/log.php
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/libs/model.php b/libs/model.php
index bfed20163..c2115a933 100644
--- a/libs/model.php
+++ b/libs/model.php
@@ -136,7 +136,14 @@ class Model extends Object {
var $validate = array();
/**
- * Enter description here...
+ * Append entries for validation as ('field_name' => '/^perl_compat_regexp$/') that has to match with preg_match()
+ * validate with Model::validate()
+ * @var unknown_type
+ */
+ var $validationErrors = null;
+
+/**
+ * Constructor binds the Model's database table
*
* @param unknown_type $id
*/
@@ -149,16 +156,16 @@ class Model extends Object {
$this->id = $id;
$table_name = $this->use_table? $this->use_table: Inflector::tableize(get_class($this));
- $this->use_table ($table_name);
+ $this->useTable ($table_name);
parent::__construct();
- $this->create_links();
+ $this->createLinks();
}
/**
* Enter description here...
*
*/
- function create_links () {
+ function createLinks () {
if (!empty($this->hasMany))
$this->_hasMany = explode(',', $this->hasMany);
@@ -178,8 +185,8 @@ class Model extends Object {
function relink () {
foreach ($this->_hasMany as $model) {
$name = Inflector::singularize($model);
- $this->$name->clear_links();
- $this->$name->link_many_to_one(get_class($this), $this->id);
+ $this->$name->clearLinks();
+ $this->$name->linkManyToOne(get_class($this), $this->id);
}
}
@@ -189,7 +196,7 @@ class Model extends Object {
* @param unknown_type $model_name
* @param unknown_type $value
*/
- function link_many_to_one ($model_name, $value=null) {
+ function linkManyToOne ($model_name, $value=null) {
$table_name = Inflector::tableize($model_name);
$field_name = Inflector::singularize($table_name).'_id';
$this->_one_to_many[] = array($table_name, $field_name, $value);
@@ -199,7 +206,7 @@ class Model extends Object {
* Enter description here...
*
*/
- function clear_links () {
+ function clearLinks () {
$this->_one_to_many = array();
}
@@ -208,14 +215,14 @@ class Model extends Object {
*
* @param unknown_type $table_name
*/
- function use_table ($table_name) {
+ function useTable ($table_name) {
if (!in_array($table_name, $this->db->tables())) {
trigger_error (sprintf(ERROR_NO_MODEL_TABLE, get_class($this), $table_name), E_USER_ERROR);
die();
}
else {
$this->table = $table_name;
- $this->load_info();
+ $this->loadInfo();
}
}
@@ -228,15 +235,17 @@ class Model extends Object {
* @return unknown
*/
function set ($one, $two=null) {
+ $this->validationErrors = null;
$data = is_array($one)? $one: array($one=>$two);
foreach ($data as $n => $v) {
- if (!$this->has_field($n)) {
+/*
+ if (!$this->hasField($n)) {
DEBUG?
trigger_error(sprintf(ERROR_NO_FIELD_IN_MODEL_DB, $n, $this->table), E_USER_ERROR):
trigger_error('Application error occured, trying to set a field name that doesn\'t exist.', E_USER_WARNING);
}
-
+*/
$n == 'id'? $this->id = $v: $this->data[$n] = $v;
}
@@ -248,7 +257,7 @@ class Model extends Object {
*
* @param unknown_type $id
*/
- function set_id ($id) {
+ function setId ($id) {
$this->id = $id;
$this->relink();
}
@@ -257,7 +266,7 @@ class Model extends Object {
* Enter description here...
*
*/
- function load_info () {
+ function loadInfo () {
if (empty($this->_table_info))
$this->_table_info = new NeatArray($this->db->fields($this->table));
}
@@ -268,7 +277,8 @@ class Model extends Object {
* @param unknown_type $name
* @return unknown
*/
- function has_field ($name) {
+ function hasField ($name) {
+ if (empty($this->_table_info)) $this->loadInfo();
return $this->_table_info->findIn('name', $name);
}
@@ -280,6 +290,7 @@ class Model extends Object {
* @return array of values
*/
function read ($fields=null) {
+ $this->validationErrors = null;
return $this->id? $this->find("id = '{$this->id}'", $fields): false;
}
@@ -302,29 +313,42 @@ class Model extends Object {
}
}
+/**
+ * saves a single field to the db
+ *
+ * @param string $name
+ * @param mixed $value
+ * @return success
+ */
+ function saveField($name, $value) {
+ return $this->save(array($name=>$value), false);
+ }
+
/**
* saves model data to the db
*
* @param array $data
* @return success
*/
- function save ($data=null) {
+ function save ($data=null, $validate=true) {
if ($data) $this->set($data);
- if (!$this->validates())
+ if ($validate && !$this->validates())
return false;
$fields = $values = array();
foreach ($this->data as $n=>$v) {
- $fields[] = $n;
- $values[] = $this->db->prepare($v);
+ if ($this->hasField($n)) {
+ $fields[] = $n;
+ $values[] = $this->db->prepare($v);
+ }
}
- if (empty($this->id) && $this->has_field('created')) {
+ if (empty($this->id) && $this->hasField('created') && !in_array('created', $fields)) {
$fields[] = 'created';
$values[] = date("'Y-m-d H:i:s'");
}
- if ($this->has_field('modified')) {
+ if ($this->hasField('modified') && !in_array('modified', $fields)) {
$fields[] = 'modified';
$values[] = 'NOW()';
}
@@ -397,6 +421,17 @@ class Model extends Object {
return $this->id? $this->db->hasAny($this->table, "id = '{$this->id}'"): false;
}
+
+/**
+ * checks for existance of a record with specified conditions
+ *
+ * @return true if such record exists
+ */
+ function hasAny ($sql_conditions=null) {
+ return $this->db->hasAny($this->table, $sql_conditions);
+ }
+
+
/**
* reads a single row
*
@@ -542,7 +577,7 @@ class Model extends Object {
* @return unknown
*/
function validates ($data=null) {
- $errors = count($this->invalidFields($data));
+ $errors = count($this->invalidFields($data? $data: $this->data));
return $errors == 0;
}
@@ -567,16 +602,18 @@ class Model extends Object {
if (!isset($this->validate))
return true;
+ if (is_array($this->validationErrors))
+ return $this->validationErrors;
+
$data = ($data? $data: (isset($this->data)? $this->data: array()));
$errors = array();
foreach ($this->validate as $field_name=>$validator) {
- if (isset($data[$field_name])) {
- if (!preg_match($validator, $data[$field_name]))
+ if (!isset($data[$field_name]) || !preg_match($validator, $data[$field_name]))
$errors[$field_name] = 1;
- }
}
+ $this->validationErrors = $errors;
return $errors;
}
diff --git a/libs/object.php b/libs/object.php
index b09ed7dec..a612937cd 100644
--- a/libs/object.php
+++ b/libs/object.php
@@ -13,8 +13,11 @@
// + See: http://www.opensource.org/licenses/mit-license.php + //
//////////////////////////////////////////////////////////////////////////
+uses('log');
+
/**
* Purpose: Object
+ * Allows for __construct to be used in PHP4.
*
* @filesource
* @author Cake Authors/Developers
@@ -28,34 +31,62 @@
* @lastmodified $Date$
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
+class Object {
/**
- * Enter description here...
- *
- *
- * @package cake
- * @subpackage cake.libs
- * @since Cake v 0.2.9
- *
- */
-class Object {
-/**
- * Enter description here...
+ * A hack to support __construct() on PHP 4
+ * Hint: descendant classes have no PHP4 class_name() constructors,
+ * so this one gets called first and calls the top-layer __construct()
+ * which (if present) should call parent::__construct()
*
* @return Object
*/
function Object() {
- $args= func_get_args();
+ $args = func_get_args();
+ register_shutdown_function(array(&$this, '__destruct'));
call_user_func_array(array(&$this, '__construct'), $args);
}
/**
- * Enter description here...
- *
- * @param unknown_type $args
+ * Class constructor, overriden in descendant classes
*/
- function __construct($args=NULL) {
+ function __construct() {
}
+
+/**
+ * Class destructor, overriden in descendant classes
+ */
+ function __destruct() {
+ }
+
+/**
+ * Object-to-string conversion
+ * Each class can override it as necessary
+ *
+ * @return string this class' name
+ */
+ function toString () {
+ return get_class($this);
+ }
+
+/**
+ * API for logging events
+ *
+ * @param string $msg
+ * @param string $type
+ */
+ function log ($msg, LOG_ERROR) {
+ if (!$this->_log)
+ $this->_log = new Log ();
+
+ switch ($type) {
+ case LOG_DEBUG:
+ return $this->_log->write('debug', $msg);
+ default:
+ return $this->_log->write('error', $msg);
+ }
+ }
+
}
?>
\ No newline at end of file
diff --git a/libs/router.php b/libs/router.php
index 39eb20367..acbaa351b 100644
--- a/libs/router.php
+++ b/libs/router.php
@@ -90,7 +90,7 @@ class Router extends Object {
$names[] = $r[1];
}
elseif (preg_match('/^\*$/', $element, $r)) {
- $parsed[] = '/(.*)';
+ $parsed[] = '(?:\/(.*))?';
}
else {
$parsed[] = '/'.$element;
@@ -126,6 +126,7 @@ class Router extends Object {
list($route, $regexp, $names, $defaults) = $route;
if (preg_match($regexp, $url, $r)) {
+ // $this->log($url.' matched '.$regexp, 'note');
// remove the first element, which is the url
array_shift($r);
diff --git a/libs/template.php b/libs/template.php
index b1cfde6c0..132444cb1 100644
--- a/libs/template.php
+++ b/libs/template.php
@@ -108,7 +108,7 @@ class Template extends Object {
*
* @param unknown_type $layout
*/
- function set_layout ($layout) {
+ function setLayout ($layout) {
$this->layout = $layout;
}
@@ -120,7 +120,7 @@ class Template extends Object {
* @return unknown
*/
function set($one, $two=null) {
- return $this->_set_array(is_array($one)? $one: array($one=>$two));
+ return $this->_setArray(is_array($one)? $one: array($one=>$two));
}
/**
@@ -128,7 +128,7 @@ class Template extends Object {
*
* @param unknown_type $value
*/
- function set_title ($value) {
+ function setTitle ($value) {
$this->_page_title = $value;
}
@@ -137,10 +137,10 @@ class Template extends Object {
*
* @param unknown_type $data
*/
- function _set_array($data) {
+ function _setArray($data) {
foreach ($data as $name => $value) {
if ($name == 'title')
- $this->set_title ($value);
+ $this->setTitle ($value);
else
$this->_view_vars[$name] = $value;
}
@@ -161,7 +161,7 @@ class Template extends Object {
$this->set('message', $message);
$this->set('time', $time);
- $this->render(null,false,VIEWS.'layouts/flash.thtml');
+ $this->render(null,false,VIEWS.'layouts'.DS.'flash.thtml');
}
/**
@@ -175,9 +175,9 @@ class Template extends Object {
$this->autoRender = false;
if (!$action) $action = $this->action;
- if ($layout) $this->set_layout($layout);
+ if ($layout) $this->setLayout($layout);
- $view_fn = $file? $file: $this->_get_view_fn($action);
+ $view_fn = $file? $file: $this->_getViewFn($action);
if (!is_file($view_fn)) {
DEBUG? trigger_error (sprintf(ERROR_NO_VIEW, $action, $view_fn), E_USER_ERROR)
@@ -185,17 +185,15 @@ class Template extends Object {
die();
}
- $out = $this->_do_render($view_fn, $this->_view_vars, 0);
+ $out = $this->_render($view_fn, $this->_view_vars, 0);
if ($out !== false) {
if ($this->layout && $this->autoLayout)
- $out = $this->render_layout($out);
- if (CACHE_PAGES)
- $this->cache->append($out);
+ $out = $this->renderLayout($out);
print $out;
}
else {
- $out = $this->_do_render($view_fn, $this->_view_vars, false);
+ $out = $this->_render($view_fn, $this->_view_vars, false);
trigger_error (sprintf(ERROR_IN_VIEW, $view_fn, $out), E_USER_ERROR);
}
}
@@ -206,18 +204,18 @@ class Template extends Object {
* @param unknown_type $content_for_layout
* @return unknown
*/
- function render_layout ($content_for_layout) {
- $layout_fn = $this->_get_layout_fn();
+ function renderLayout ($content_for_layout) {
+ $layout_fn = $this->_getLayoutFn();
$data_for_layout = array_merge($this->_view_vars, array(
'title_for_layout'=>$this->_page_title !== false? $this->_page_title: ucfirst($this->name),
'content_for_layout'=>$content_for_layout));
if (is_file($layout_fn)) {
- $out = $this->_do_render($layout_fn, $data_for_layout);
+ $out = $this->_render($layout_fn, $data_for_layout);
if ($out === false) {
- $out = $this->_do_render($layout_fn, $data_for_layout, false);
+ $out = $this->_render($layout_fn, $data_for_layout, false);
trigger_error (sprintf(ERROR_IN_LAYOUT, $layout_fn, $out), E_USER_ERROR);
return false;
}
@@ -236,8 +234,8 @@ class Template extends Object {
*
* @return unknown
*/
- function _get_layout_fn() {
- return VIEWS."layouts/{$this->layout}.thtml";
+ function _getLayoutFn() {
+ return VIEWS."layouts".DS."{$this->layout}.thtml";
}
/**
@@ -246,8 +244,8 @@ class Template extends Object {
* @param unknown_type $action
* @return unknown
*/
- function _get_view_fn($action) {
- return VIEWS.$this->name."/{$action}.thtml";
+ function _getViewFn($action) {
+ return VIEWS.$this->name.DS."{$action}.thtml";
}
/**
@@ -258,7 +256,7 @@ class Template extends Object {
* @param unknown_type $___play_safe
* @return unknown
*/
- function _do_render($___view_fn, $___data_for_view, $___play_safe = true) {
+ function _render($___view_fn, $___data_for_view, $___play_safe = true) {
extract($___data_for_view, EXTR_SKIP); # load all view variables
$BASE = $this->base;
$params = &$this->params;
@@ -281,7 +279,7 @@ class Template extends Object {
* @param unknown_type $length
* @return unknown
*/
- function trim_to ($string, $length) {
+ function trimTo ($string, $length) {
return substr($string, 0, $length).(strlen($string)>$length? '..': null);
}
}
diff --git a/libs/test.php b/libs/test.php
index d7a38c8dd..7cc9e56b7 100644
--- a/libs/test.php
+++ b/libs/test.php
@@ -45,20 +45,6 @@
* @lastmodified $Date$
*/
-/**
- * Enter description here...
- *
- */
-error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE |
- E_CORE_ERROR | E_CORE_WARNING);
-
-//
-//interface Test {
-// function run(&$aTestResult);
-// function countTestCases();
-//}
-
-
/**
* Enter description here...
*
@@ -304,8 +290,8 @@ class Assert {
/**
* Enter description here...
*
- * @param unknown_type $value
- * @return unknown
+ * @param mixed $value
+ * @return string
*/
function _formatValue ($value) {
@@ -325,44 +311,6 @@ class Assert {
return array($valueStr, gettype($value));
}
-/**
- * Enter description here...
- *
- * @param unknown_type $value
- * @param unknown_type $class
- * @return unknown
- */
- function _old_formatValue($value, $class="") {
- $translateValue = $value;
- if (phpversion() >= '4.0.0') {
- if (is_object($value)) {
- if (method_exists($value, "toString") ) {
- $translateValue = $value->toString();
- }
- else {
- $translateValue = serialize($value);
- }
- }
- else if (is_array($value)) {
- $translateValue = serialize($value);
- }
- }
- $htmlValue = "" . htmlspecialchars($translateValue) . "
";
- if (phpversion() >= '4.0.0') {
- if (is_bool($value)) {
- $htmlValue = $value ? "true" : "false";
- }
- elseif (phpversion() >= '4.0.4' && is_null($value)) {
- $htmlValue = "null";
- }
- $htmlValue .= " ";
- $htmlValue .= " type:" . gettype($value);
- $htmlValue .= is_object($value) ? ", class:" . get_class($value) : "";
- $htmlValue .= "";
- }
- return $htmlValue;
- }
-
/**
* Enter description here...
diff --git a/libs/validators.php b/libs/validators.php
index fd9b135d6..605b37f84 100644
--- a/libs/validators.php
+++ b/libs/validators.php
@@ -60,4 +60,10 @@ define('VALID_TAG', '/[^\ ]+/i');
*/
define('VALID_TAGS', '/.+/i');
+/**
+ * Enter description here...
+ *
+ */
+define('VALID_YEAR', '/^[12][0-9]{3}$/');
+
?>
\ No newline at end of file
diff --git a/public/dispatch.php b/public/dispatch.php
index 2edbc764c..37643677d 100644
--- a/public/dispatch.php
+++ b/public/dispatch.php
@@ -30,33 +30,37 @@
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
-/**
- * DIRECTORY LAYOUT
- */
-require ('../config/paths.php');
+session_start();
/**
- * Startup
- */
-require (LIBS.'basics.php');
+ * Get Cake's root directory
+ */
+define ('DS', DIRECTORY_SEPARATOR);
+define ('ROOT', substr(__FILE__, 0, strrpos(dirname(__FILE__), DS)+1));
-uses ('dispatcher', 'db_factory');
-usesConfig();
-usesDatabase();
-usesTagGenerator();
+/**
+ * Directory layout and basic functions
+ */
+require (ROOT.'config/core.php');
+require (ROOT.'config/paths.php');
+require (ROOT.'libs/basics.php');
+
+DEBUG? error_reporting(E_ALL): error_reporting(0);
+
+$TIME_START = getMicrotime();
+
+uses ('folder', 'dispatcher', 'dbo_factory');
+config ('tags', 'database');
+
+$DB = DboFactory::make('devel');
loadModels ();
-loadControllers ();
-
-session_start();
## RUN THE SCRIPT
$url = empty($_GET['url'])? null: $_GET['url'];
$DISPATCHER = new Dispatcher ();
$DISPATCHER->dispatch($url);
-if ($DB) $DB->close();
-
## CLEANUP
if (DEBUG) echo "";
diff --git a/scripts/add.php b/scripts/add.php
index ba3edf530..a736cec67 100644
--- a/scripts/add.php
+++ b/scripts/add.php
@@ -33,7 +33,10 @@
/**
* START-UP
*/
-require ('../config/paths.php');
+define ('DS', DIRECTORY_SEPARATOR);
+define ('ROOT', substr(__FILE__, 0, strrpos(dirname(__FILE__), DS)+1));
+
+require (ROOT.'config'.DS.'paths.php');
require (LIBS.'basics.php');
uses ('bake');
diff --git a/tests/libs/dbo_adodb_test.php.disabled b/tests/libs/dbo_adodb_test.php.disabled
deleted file mode 100644
index 59b15ba43..000000000
--- a/tests/libs/dbo_adodb_test.php.disabled
+++ /dev/null
@@ -1,76 +0,0 @@
-TestCase($name);
- }
-
- // called before the test functions will be executed
- // this function is defined in PHPUnit_TestCase and overwritten
- // here
- function setUp() {
- $this->abc = new DBO_AdoDB (loadDatabaseConfig('test'));
- $this->createTemporaryTable();
- }
-
- // called after the test functions are executed
- // this function is defined in PHPUnit_TestCase and overwritten
- // here
- function tearDown() {
- $this->dropTemporaryTable();
- }
-
- function createTemporaryTable () {
- $create_sqls = array(
- 'mysql' => 'CREATE TABLE __test (id INT UNSIGNED PRIMARY KEY, body VARCHAR(255))',
- 'postgres' => 'CREATE TABLE __test (id serial NOT NULL, body CHARACTER VARYING(255))'
- );
- $sql = $create_sqls[$this->abc->config['driver']];
-
- return $this->abc->query($sql);
- }
-
- function dropTemporaryTable () {
- return $this->abc->query("DROP TABLE __test");
- }
-
- function testHasImplementation () {
- $functions = array(
- 'connect',
- 'disconnect',
- 'execute',
- 'fetchRow',
- 'tables',
- 'fields',
- 'prepare',
- 'lastError',
- 'lastAffected',
- 'lastNumRows',
- 'lastInsertId'
- );
-
- foreach ($functions as $function) {
- $this->assertTrue(method_exists($this->abc, $function));
- }
- }
-
- function testConnectivity () {
- $this->assertTrue($this->abc->connected);
- }
-
- function testFields () {
- $fields = $this->abc->fields('__test');
- $this->assertEquals(count($fields), 2, 'equals');
- }
-
- function testTables () {
- $this->assertTrue(in_array('__test', $this->abc->tables()));
- }
-}
-
-?>
\ No newline at end of file
diff --git a/tests/libs/db_factory_test.php b/tests/libs/dbo_factory_test.php
similarity index 76%
rename from tests/libs/db_factory_test.php
rename to tests/libs/dbo_factory_test.php
index 9a11ac29e..35cf66386 100644
--- a/tests/libs/db_factory_test.php
+++ b/tests/libs/dbo_factory_test.php
@@ -1,58 +1,56 @@
-TestCase($name);
- }
-
- // called before the test functions will be executed
- // this function is defined in PHPUnit_TestCase and overwritten
- // here
- function setUp() {
- $this->abc = new DbFactory ();
- }
-
- // called after the test functions are executed
- // this function is defined in PHPUnit_TestCase and overwritten
- // here
- function tearDown() {
- unset($this->abc);
- }
-
-
- function testMake () {
- $config = loadDatabaseConfig ('test');
-
- $output = $this->abc->make($config);
- $this->assertTrue(is_object($output));
-
- if (preg_match('#^(adodb)_.*$#i', $config['driver'], $res)) {
- $desired_driver_name = $res[1];
- }
- else
- $desired_driver_name = $config['driver'];
-
- $desired_class_name = 'dbo_'.strtolower($desired_driver_name);
- $output_class_name = is_object($output)? get_class($output): false;
-
- $this->assertEquals($output_class_name, $desired_class_name);
-
- $this->assertTrue($output->connected);
- }
-
-// this test expect an E_USER_ERROR to occur during it's run
-// disabled until I find a way to assert it happen
-//
-// function testBadConfig () {
-// $output = $this->abc->make(null);
-// $this->assertTrue($output === false);
-// }
-}
-
-
+TestCase($name);
+ }
+
+ // called before the test functions will be executed
+ // this function is defined in PHPUnit_TestCase and overwritten
+ // here
+ function setUp() {
+ $this->abc = new DboFactory ();
+ }
+
+ // called after the test functions are executed
+ // this function is defined in PHPUnit_TestCase and overwritten
+ // here
+ function tearDown() {
+ unset($this->abc);
+ }
+
+
+ function testMake () {
+ $output = $this->abc->make('test');
+ $this->assertTrue(is_object($output));
+
+ $config = DATABASE_CONFIG::test();
+ if (preg_match('#^(adodb)_.*$#i', $config['driver'], $res)) {
+ $desired_driver_name = $res[1];
+ }
+ else
+ $desired_driver_name = $config['driver'];
+
+ $desired_class_name = 'dbo_'.strtolower($desired_driver_name);
+ $output_class_name = is_object($output)? get_class($output): false;
+
+ $this->assertEquals($output_class_name, $desired_class_name);
+
+ $this->assertTrue($output->connected);
+ }
+
+// this test expect an E_USER_ERROR to occur during it's run
+// I've disabled it until I find a way to assert it happen
+//
+// function testBadConfig () {
+// $output = $this->abc->make(null);
+// $this->assertTrue($output === false);
+// }
+}
+
?>
\ No newline at end of file
diff --git a/tests/libs/dbo_mysql_test.php.disabled b/tests/libs/dbo_mysql_test.php.disabled
deleted file mode 100644
index 64382ed73..000000000
--- a/tests/libs/dbo_mysql_test.php.disabled
+++ /dev/null
@@ -1,74 +0,0 @@
-TestCase($name);
- }
-
- // called before the test functions will be executed
- // this function is defined in PHPUnit_TestCase and overwritten
- // here
- function setUp() {
- $this->abc = new DBO_MySQL (loadDatabaseConfig('test'));
- $this->createTemporaryTable();
- }
-
- // called after the test functions are executed
- // this function is defined in PHPUnit_TestCase and overwritten
- // here
- function tearDown() {
- $this->dropTemporaryTable();
- }
-
-
- function createTemporaryTable () {
- // $sql = "CREATE TABLE __test (id serial NOT NULL, body CHARACTER VARYING(255))"; // postgresql
- $sql = "CREATE TABLE __test (id INT UNSIGNED PRIMARY KEY, body VARCHAR(255))"; // mysql
-
- return $this->abc->query($sql);
- }
-
- function dropTemporaryTable () {
- return $this->abc->query("DROP TABLE __test");
- }
-
- function testHasImplementation () {
- $functions = array(
- 'connect',
- 'disconnect',
- 'execute',
- 'fetchRow',
- 'tables',
- 'fields',
- 'prepare',
- 'lastError',
- 'lastAffected',
- 'lastNumRows',
- 'lastInsertId'
- );
-
- foreach ($functions as $function) {
- $this->assertTrue(method_exists($this->abc, $function));
- }
- }
-
- function testConnectivity () {
- $this->assertTrue($this->abc->connected);
- }
-
- function testFields () {
- $fields = $this->abc->fields('__test');
- $this->assertEquals(count($fields), 2, 'equals');
- }
-
- function testTables () {
- $this->assertTrue(in_array('__test', $this->abc->tables()));
- }
-}
-
-?>
\ No newline at end of file
diff --git a/tests/libs/dbo_postgres_test.php.disabled b/tests/libs/dbo_postgres_test.php.disabled
deleted file mode 100644
index 57d3ac733..000000000
--- a/tests/libs/dbo_postgres_test.php.disabled
+++ /dev/null
@@ -1,74 +0,0 @@
-TestCase($name);
- }
-
- // called before the test functions will be executed
- // this function is defined in PHPUnit_TestCase and overwritten
- // here
- function setUp() {
- $this->abc = new DBO_Postgres (loadDatabaseConfig('test'));
- $this->createTemporaryTable();
- }
-
- // called after the test functions are executed
- // this function is defined in PHPUnit_TestCase and overwritten
- // here
- function tearDown() {
- $this->dropTemporaryTable();
- }
-
-
- function createTemporaryTable () {
- $sql = "CREATE TABLE __test (id serial NOT NULL, body CHARACTER VARYING(255))"; // postgresql
- // $sql = "CREATE TABLE __test (id INT UNSIGNED PRIMARY KEY, body VARCHAR(255))"; // mysql
-
- return $this->abc->query($sql);
- }
-
- function dropTemporaryTable () {
- return $this->abc->query("DROP TABLE __test");
- }
-
- function testHasImplementation () {
- $functions = array(
- 'connect',
- 'disconnect',
- 'execute',
- 'fetchRow',
- 'tables',
- 'fields',
- 'prepare',
- 'lastError',
- 'lastAffected',
- 'lastNumRows',
- 'lastInsertId'
- );
-
- foreach ($functions as $function) {
- $this->assertTrue(method_exists($this->abc, $function));
- }
- }
-
- function testConnectivity () {
- $this->assertTrue($this->abc->connected);
- }
-
- function testFields () {
- $fields = $this->abc->fields('__test');
- $this->assertEquals(count($fields), 2, 'equals');
- }
-
- function testTables () {
- $this->assertTrue(in_array('__test', $this->abc->tables()));
- }
-}
-
-?>
\ No newline at end of file
diff --git a/tests/libs/dbo_test.php b/tests/libs/dbo_test.php
index c140bf250..d503ce968 100644
--- a/tests/libs/dbo_test.php
+++ b/tests/libs/dbo_test.php
@@ -1,6 +1,6 @@
abc = DbFactory::make(loadDatabaseConfig('test'));
+ $this->abc = DboFactory::make('test');
$this->createTemporaryTable();
}
diff --git a/tests/libs/router_test.php b/tests/libs/router_test.php
index 8d946143d..02680d7b2 100644
--- a/tests/libs/router_test.php
+++ b/tests/libs/router_test.php
@@ -48,14 +48,15 @@ class RouterTest extends TestCase {
'/foo/baz/' => array('controller'=>'Foo', 'action'=>'baz'),
'/foo/foo+bar' => array('pass'=>array('foo+bar'), 'controller'=>'Foo', 'action'=>'dodo'),
'/foobar/' => array('controller'=>'Foobar', 'action'=>'bar'),
- '/foo/bar/baz' => array('pass'=>array('bar', 'baz'), 'controller'=>'Foo', 'action'=>'dodo'),
+ '/foo/bar/baz' => array('controller'=>'Foo', 'action'=>'dodo', 'pass'=>array('bar', 'baz')),
'/one/two/three/' => array('controller'=>'one', 'action'=>'two', 'pass'=>array('three')),
- '/foo' => array('controller'=>'foo','action'=>null),
+ '/ruburb' => array('controller'=>'ruburb','action'=>null),
'???' => array()
);
foreach ($tests as $test=>$expected) {
- $this->asEq($this->abc->parse($test), $expected);
+ $tested = $this->abc->parse($test);
+ $this->asEq($tested, $expected);
}
}