diff --git a/config/paths.php b/config/paths.php
index 800499bc6..6a3819193 100644
--- a/config/paths.php
+++ b/config/paths.php
@@ -87,6 +87,11 @@ define ('MODULES', ROOT.'modules'.DS);
*/
define ('PUBLIC', ROOT.'public'.DS);
+/**
+ * Web path to the public images directory.
+ */
+define ('IMAGES', '/img/');
+
/**
* Path to the tests directory.
*/
diff --git a/config/tags.php b/config/tags.php
index 1d14daf22..749bb7205 100644
--- a/config/tags.php
+++ b/config/tags.php
@@ -21,6 +21,11 @@
*/
define('TAG_LINK', '%s');
+/**
+ * Tag template for a mailto: link.
+ */
+define('TAG_MAILTO', '%s');
+
/**
* Tag template for opening form tag.
*/
diff --git a/libs/controller.php b/libs/controller.php
index 3f3c182ab..dc95f128d 100644
--- a/libs/controller.php
+++ b/libs/controller.php
@@ -75,17 +75,9 @@ class Controller extends Template {
var $action = null;
/**
- * This Controller's Model.
+ * An array of names of models the particular controller wants to use.
*
- * @var unknown_type
- * @access public
- */
- var $use_model = null;
-
-/**
- * Enter description here...
- *
- * @var unknown_type
+ * @var mixed A single name as a string or a list of names as an array.
* @access private
*/
var $uses = false;
@@ -194,16 +186,25 @@ class Controller extends Template {
* @param unknown_type $insert_after
* @return string
*/
- function parseHtmlOptions ($options, $insert_before=' ', $insert_after=null) {
- if (is_array($options)) {
+ function parseHtmlOptions ($options, $exclude=null, $insert_before=' ', $insert_after=null)
+ {
+ if (!is_array($exclude)) $exclude = array();
+
+ if (is_array($options))
+ {
$out = array();
- foreach ($options as $k=>$v) {
- $out[] = "{$k}=\"{$v}\"";
+ foreach ($options as $k=>$v)
+ {
+ if (!in_array($k, $exclude))
+ {
+ $out[] = "{$k}=\"{$v}\"";
+ }
}
$out = join(' ', $out);
return $out? $insert_before.$out.$insert_after: null;
}
- else {
+ else
+ {
return $options? $insert_before.$options.$insert_after: null;
}
}
@@ -249,7 +250,7 @@ class Controller extends Template {
$html_options['method'] = $type=='get'? 'get': 'post';
$type == 'file'? $html_options['enctype'] = 'multipart/form-data': null;
- return sprintf(TAG_FORM, $this->parseHtmlOptions($html_options, ''));
+ return sprintf(TAG_FORM, $this->parseHtmlOptions($html_options, null, ''));
}
/**
@@ -296,7 +297,7 @@ class Controller extends Template {
*/
function submitTag ($caption='Submit', $html_options=null) {
$html_options['value'] = $caption;
- return sprintf(TAG_SUBMIT, $this->parseHtmlOptions($html_options, '', ' '));
+ return sprintf(TAG_SUBMIT, $this->parseHtmlOptions($html_options, null, '', ' '));
}
/**
@@ -311,7 +312,7 @@ class Controller extends Template {
$html_options['size'] = $size;
$html_options['value'] = isset($html_options['value'])? $html_options['value']: $this->tagValue($tag_name);
$this->tagIsInvalid($tag_name)? $html_options['class'] = 'form_error': null;
- return sprintf(TAG_INPUT, $tag_name, $this->parseHtmlOptions($html_options, '', ' '));
+ return sprintf(TAG_INPUT, $tag_name, $this->parseHtmlOptions($html_options, null, '', ' '));
}
/**
@@ -325,7 +326,7 @@ class Controller extends Template {
function passwordTag ($tag_name, $size=20, $html_options=null) {
$html_options['size'] = $size;
empty($html_options['value'])? $html_options['value'] = $this->tagValue($tag_name): null;
- return sprintf(TAG_PASSWORD, $tag_name, $this->parseHtmlOptions($html_options, '', ' '));
+ return sprintf(TAG_PASSWORD, $tag_name, $this->parseHtmlOptions($html_options, null, '', ' '));
}
/**
@@ -338,7 +339,7 @@ class Controller extends Template {
*/
function hiddenTag ($tag_name, $value=null, $html_options=null) {
$html_options['value'] = $value? $value: $this->tagValue($tag_name);
- return sprintf(TAG_HIDDEN, $tag_name, $this->parseHtmlOptions($html_options, '', ' '));
+ return sprintf(TAG_HIDDEN, $tag_name, $this->parseHtmlOptions($html_options, null, '', ' '));
}
/**
@@ -349,7 +350,7 @@ class Controller extends Template {
* @return string
*/
function fileTag ($tag_name, $html_options=null) {
- return sprintf(TAG_FILE, $tag_name, $this->parseHtmlOptions($html_options, '', ' '));
+ return sprintf(TAG_FILE, $tag_name, $this->parseHtmlOptions($html_options, null, '', ' '));
}
/**
@@ -365,7 +366,7 @@ class Controller extends Template {
$value = empty($html_options['value'])? $this->tagValue($tag_name): empty($html_options['value']);
$html_options['cols'] = $cols;
$html_options['rows'] = $rows;
- return sprintf(TAG_AREA, $tag_name, $this->parseHtmlOptions($html_options, ' '), $value);
+ return sprintf(TAG_AREA, $tag_name, $this->parseHtmlOptions($html_options, null, ' '), $value);
}
/**
@@ -379,7 +380,7 @@ class Controller extends Template {
function checkboxTag ($tag_name, $title=null, $html_options=null) {
$this->tagValue($tag_name)? $html_options['checked'] = 'checked': null;
$title = $title? $title: ucfirst($tag_name);
- return sprintf(TAG_CHECKBOX, $tag_name, $tag_name, $tag_name, $this->parseHtmlOptions($html_options, '', ' '), $title);
+ return sprintf(TAG_CHECKBOX, $tag_name, $tag_name, $tag_name, $this->parseHtmlOptions($html_options, null, '', ' '), $title);
}
/**
@@ -397,7 +398,7 @@ class Controller extends Template {
foreach ($options as $opt_value=>$opt_title) {
$options_here = array('value' => $opt_value);
$opt_value==$value? $options_here['checked'] = 'checked': null;
- $parsed_options = $this->parseHtmlOptions(array_merge($html_options, $options_here), '', ' ');
+ $parsed_options = $this->parseHtmlOptions(array_merge($html_options, $options_here), null, '', ' ');
$individual_tag_name = "{$tag_name}_{$opt_value}";
$out[] = sprintf(TAG_RADIOS, $individual_tag_name, $tag_name, $individual_tag_name, $parsed_options, $opt_title);
}
@@ -447,11 +448,52 @@ class Controller extends Template {
* @return string Formatted IMG tag
*/
function imageTag ($path, $alt=null, $html_options=null) {
- $url = "{$this->base}/images/{$path}";
- return sprintf(TAG_IMAGE, $url, $alt, $this->parseHtmlOptions($html_options, '', ' '));
+ $url = $this->base.IMAGES.$path;
+ return sprintf(TAG_IMAGE, $url, $alt, $this->parseHtmlOptions($html_options, null, '', ' '));
}
+ /**
+ * Returns a mailto: link.
+ *
+ * @param string $title Title of the link, or the e-mail address (if the same)
+ * @param string $email E-mail address if different from title
+ * @param array $options
+ * @return string Formatted A tag
+ */
+ function linkEmail($title, $email=null, $options=null)
+ {
+ // if no $email, then title contains the email.
+ if (empty($email)) $email = $title;
+
+ // does the address contain extra attributes?
+ preg_match('!^(.*)(\?.*)$!', $email, $match);
+ // plaintext
+ if (empty($options['encode']) || !empty($match[2]))
+ {
+ return sprintf(TAG_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 .= '' . bin2hex($title[$ii]).';';
+ }
+
+ return sprintf(TAG_MAILTO, $email_encoded, $this->parseHtmlOptions($options, array('encode')), $title_encoded);
+ }
+ }
+
/**
* Returns a LINK element for CSS stylesheets.
*
@@ -462,10 +504,9 @@ class Controller extends Template {
*/
function cssTag ($path, $rel='stylesheet', $html_options=null) {
$url = "{$this->base}/css/{$path}.css";
- return sprintf(TAG_CSS, $rel, $url, $this->parseHtmlOptions($html_options, '', ' '));
+ return sprintf(TAG_CSS, $rel, $url, $this->parseHtmlOptions($html_options, null, '', ' '));
}
-
/**
* Returns a charset meta-tag
*
diff --git a/libs/dbo.php b/libs/dbo.php
index 68e0b44af..66948737d 100644
--- a/libs/dbo.php
+++ b/libs/dbo.php
@@ -265,7 +265,6 @@ class DBO extends Object {
return array_map('strtolower', $this->tablesList());
}
-
/**
* Executes given SQL statement.
*
@@ -306,8 +305,16 @@ class DBO extends Object {
* @param resource $res
* @return array A single row of results
*/
- function farr ($res=false, $assoc=false) {
- return $this->fetchRow($res? $res: $this->_result, $assoc);
+ function farr ($assoc=false)
+ {
+ if ($assoc === false)
+ {
+ return $this->fetchRow();
+ }
+ else
+ {
+ return $this->fetchRow($assoc);
+ }
}
/**
diff --git a/libs/dbo/dbo_adodb.php b/libs/dbo/dbo_adodb.php
index e96c31a7f..8ecfc79ff 100644
--- a/libs/dbo/dbo_adodb.php
+++ b/libs/dbo/dbo_adodb.php
@@ -67,7 +67,7 @@ class DBO_AdoDB extends DBO
if(!$this->connected)
die('Could not connect to DB.');
}
-
+
/**
* Disconnects from database.
*
@@ -92,12 +92,11 @@ class DBO_AdoDB extends DBO
/**
* Returns a row from given resultset as an array .
*
- * @param unknown_type $res Resultset
* @return array The fetched row as an array
*/
- function fetchRow ($res)
+ function fetchRow ()
{
- return $res->FetchRow();
+ return $this->_result->FetchRow();
}
/**
@@ -105,7 +104,7 @@ class DBO_AdoDB extends DBO
*
* @return array Array of tablenames in the database
*/
- function tablesList()
+ function tablesList ()
{
$tables = $this->_adodb->MetaTables('TABLES');
@@ -122,7 +121,7 @@ class DBO_AdoDB extends DBO
* @param string $table_name Name of database table to inspect
* @return array Fields in table. Keys are name and type
*/
- function fields ($table_name)
+ function fields ($table_name)
{
$data = $this->_adodb->MetaColumns($table_name);
$fields = false;
@@ -146,27 +145,12 @@ class DBO_AdoDB extends DBO
return $this->_adodb->Quote($data);
}
-
- /**
- * 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=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
- }
-
/**
* Returns a formatted error message from previous database operation.
*
* @return string Error message
*/
- function lastError ()
+ function lastError ()
{
return $this->_adodb->ErrorMsg();
}
@@ -185,7 +169,7 @@ class DBO_AdoDB extends DBO
* Returns number of rows in previous resultset. If no previous resultset exists,
* this returns false.
*
- * @return int Number of rows
+ * @return int Number of rows in resultset
*/
function lastNumRows ()
{
@@ -200,6 +184,21 @@ class DBO_AdoDB extends DBO
* :TODO: To be implemented.
*/
function lastInsertId () { die('Please implement DBO::lastInsertId() first.'); }
+
+ /**
+ * 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=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
+ }
+
}
?>
\ No newline at end of file
diff --git a/libs/dbo/dbo_generic.php b/libs/dbo/dbo_generic.php
index fb2920d41..1a6148da4 100644
--- a/libs/dbo/dbo_generic.php
+++ b/libs/dbo/dbo_generic.php
@@ -44,31 +44,31 @@ class DBO_generic extends DBO
{
}
- function fetchRow ($result)
+ function fetchRow ()
{
}
- function tablesList()
+ function tablesList ()
{
}
- function fields ($table_name)
+ function fields ($table_name)
{
}
- function prepareValue ($data)
+ function prepareValue ($data)
{
}
- function lastError ($result)
+ function lastError ()
{
}
- function lastAffected ()
+ function lastAffected ()
{
}
- function lastNumRows ($result)
+ function lastNumRows ()
{
}
@@ -76,7 +76,7 @@ class DBO_generic extends DBO
{
}
- function selectLimit ($limit, $offset)
+ function selectLimit ($limit, $offset=null)
{
}
diff --git a/libs/dbo/dbo_mysql.php b/libs/dbo/dbo_mysql.php
index e666c681e..e581ecca9 100644
--- a/libs/dbo/dbo_mysql.php
+++ b/libs/dbo/dbo_mysql.php
@@ -3,20 +3,14 @@
// + $Id$
// +------------------------------------------------------------------+ //
// + Cake + //
-// + Copyright: (c) 2005 Cake Authors/Developers + //
-// + + //
+// + 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. + //
-// + You may not use this file except in compliance with the License. + //
-// + + //
-// + You may obtain a copy of the License at: + //
-// + License page: http://www.opensource.org/licenses/mit-license.php + //
-// +------------------------------------------------------------------+ //
+// + See: http://www.opensource.org/licenses/mit-license.php + //
//////////////////////////////////////////////////////////////////////////
/**
@@ -38,8 +32,8 @@
/**
* Include DBO.
*/
-
uses('dbo');
+
/**
* MySQL layer for DBO.
*
@@ -47,23 +41,26 @@ uses('dbo');
* @subpackage cake.libs
* @since Cake v 0.2.9
*/
-class DBO_MySQL extends DBO {
-
+class DBO_MySQL extends DBO
+{
+
/**
* 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) {
- if($config) {
+ function connect ($config)
+ {
+ if ($config)
+ {
$this->config = $config;
$this->_conn = mysql_pconnect($config['host'],$config['login'],$config['password']);
}
$this->connected = $this->_conn? true: false;
if($this->connected)
- Return mysql_select_db($config['database'], $this->_conn);
+ return mysql_select_db($config['database'], $this->_conn);
else
die('Could not connect to DB.');
}
@@ -73,7 +70,8 @@ class DBO_MySQL extends DBO {
*
* @return boolean True if the database could be disconnected, else false
*/
- function disconnect () {
+ function disconnect ()
+ {
return mysql_close();
}
@@ -81,20 +79,22 @@ class DBO_MySQL extends DBO {
* Executes given SQL statement.
*
* @param string $sql SQL statement
- * @return resource MySQL result resource identifier
+ * @return resource Result resource identifier
*/
- function execute ($sql) {
+ function execute ($sql)
+ {
return mysql_query($sql);
}
/**
* Returns a row from given resultset as an array .
*
- * @param unknown_type $res Resultset
+ * @param bool $assoc Associative array only, or both?
* @return array The fetched row as an array
*/
- function fetchRow ($res, $assoc=false) {
- return mysql_fetch_array($res, $assoc? MYSQL_ASSOC: MYSQL_BOTH);
+ function fetchRow ($assoc=false)
+ {
+ return mysql_fetch_array($this->_result, $assoc? MYSQL_ASSOC: MYSQL_BOTH);
}
/**
@@ -102,16 +102,20 @@ class DBO_MySQL extends DBO {
*
* @return array Array of tablenames in the database
*/
- function tablesList () {
+ function tablesList ()
+ {
$result = mysql_list_tables($this->config['database']);
- if (!$result) {
+ if (!$result)
+ {
trigger_error(ERROR_NO_TABLE_LIST, E_USER_NOTICE);
exit;
}
- else {
+ else
+ {
$tables = array();
- while ($line = mysql_fetch_array($result)) {
+ while ($line = mysql_fetch_array($result))
+ {
$tables[] = $line[0];
}
return $tables;
@@ -124,12 +128,13 @@ class DBO_MySQL extends DBO {
* @param string $table_name Name of database table to inspect
* @return array Fields in table. Keys are name and type
*/
- function fields ($table_name) {
- $data = $this->all("DESC {$table_name}");
+ function fields ($table_name)
+ {
$fields = false;
+ $cols = $this->all("DESC {$table_name}");
- foreach ($data as $item)
- $fields[] = array('name'=>$item['Field'], 'type'=>$item['Type']);
+ foreach ($cols as $column)
+ $fields[] = array('name'=>$column['Field'], 'type'=>$column['Type']);
return $fields;
}
@@ -140,11 +145,52 @@ class DBO_MySQL extends DBO {
* @param string $data String to be prepared for use in an SQL statement
* @return string Quoted and escaped
*/
- function prepareValue ($data) {
+ function prepareValue ($data)
+ {
return "'".mysql_real_escape_string($data)."'";
}
-
+/**
+ * Returns a formatted error message from previous database operation.
+ *
+ * @return string Error message with error number
+ */
+ function lastError ()
+ {
+ return mysql_errno()? mysql_errno().': '.mysql_error(): 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->_result? mysql_affected_rows(): 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 ()
+ {
+ return $this->_result? @mysql_num_rows($this->_result): false;
+ }
+
+/**
+ * Returns the ID generated from the previous INSERT operation.
+ *
+ * @return int
+ */
+ function lastInsertId ()
+ {
+ return mysql_insert_id();
+ }
+
/**
* Returns a limit statement in the correct format for the particular database.
*
@@ -154,44 +200,7 @@ class DBO_MySQL extends DBO {
*/
function selectLimit ($limit, $offset=null)
{
- return "LIMIT {$limit}".($offset? "{$offset}": null);
- }
-
-/**
- * Returns a formatted error message from previous database operation.
- *
- * @return string Error message with error number
- */
- function lastError () {
- return mysql_errno()? mysql_errno().': '.mysql_error(): 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->_result? mysql_affected_rows(): false;
- }
-
-/**
- * Returns number of rows in previous resultset. If no previous resultset exists,
- * this returns false.
- *
- * @return int Number of rows
- */
- function lastNumRows () {
- return $this->_result? @mysql_num_rows($this->_result): false;
- }
-
-/**
- * Returns the ID generated from the previous INSERT operation.
- *
- * @return int
- */
- function lastInsertId() {
- return mysql_insert_id();
+ return " LIMIT {$limit}".($offset? "{$offset}": null);
}
}
diff --git a/libs/dbo/dbo_pear.php b/libs/dbo/dbo_pear.php
index 2d56e126d..17fcbe6eb 100644
--- a/libs/dbo/dbo_pear.php
+++ b/libs/dbo/dbo_pear.php
@@ -30,13 +30,12 @@
*/
/**
- * Include required libraries.
+ * Create an include path required Pear libraries.
*/
uses('dbo');
ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . PEAR);
vendor('Pear/DB');
-
/**
* Pear::DB layer for DBO.
*
@@ -58,7 +57,7 @@ class DBO_Pear extends DBO
* Connects to the database using options in the given configuration array.
*
* @param array $config Configuration array for connecting
- * @return unknown
+ * @return boolean True if the database could be connected, else false
*/
function connect ($config)
{
@@ -72,10 +71,7 @@ class DBO_Pear extends DBO
$this->_pear =& DB::connect($dsn, $options);
- if (PEAR::isError($this->_pear))
- {
- die('Could not connect to the database.');
- }
+ return !(PEAR::isError($this->_pear));
}
/**
@@ -102,12 +98,11 @@ class DBO_Pear extends DBO
/**
* Returns a row from given resultset as an array .
*
- * @param unknown_type $res Resultset
* @return array The fetched row as an array
*/
- function fetchRow ($result)
+ function fetchRow ()
{
- return $result->fetchRow(DB_FETCHMODE_ASSOC);
+ return $this->_result->fetchRow(DB_FETCHMODE_ASSOC);
}
/**
@@ -168,7 +163,7 @@ class DBO_Pear extends DBO
* @param string $table_name Name of database table to inspect
* @return array Fields in table. Keys are name and type
*/
- function fields ($table_name)
+ function fields ($table_name)
{
$data = $this->_pear->tableInfo($table_name);
$fields = false;
@@ -190,29 +185,14 @@ class DBO_Pear extends DBO
return $this->_pear->quoteSmart($data);
}
-
- /**
- * 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);
- }
-
/**
* Returns a formatted error message from previous database operation.
*
* @return string Error message
*/
- function lastError ($result=null)
+ function lastError ()
{
- if (!$result) $result = $this->_result;
-
- return PEAR::isError($result)? $result->getMessage(): null;
+ return PEAR::isError($this->_result)? $this->_result->getMessage(): null;
}
/**
@@ -220,7 +200,7 @@ class DBO_Pear extends DBO
*
* @return int Number of affected rows
*/
- function lastAffected ()
+ function lastAffected ()
{
return $this->_pear->affectedRows();
}
@@ -229,12 +209,12 @@ class DBO_Pear extends DBO
* Returns number of rows in previous resultset. If no previous resultset exists,
* this returns false.
*
- * @return int Number of rows
+ * @return int Number of rows in resultset
*/
- function lastNumRows ($result)
+ function lastNumRows ()
{
- if (method_exists($result, 'numRows'))
- return $result->numRows();
+ if (method_exists($this->_result, 'numRows'))
+ return $this->_result->numRows();
else
return false;
}
@@ -250,6 +230,18 @@ class DBO_Pear extends DBO
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);
+ }
+
}
?>
\ No newline at end of file
diff --git a/libs/dbo/dbo_postgres.php b/libs/dbo/dbo_postgres.php
index 2e2a4beef..4e3c09c6b 100644
--- a/libs/dbo/dbo_postgres.php
+++ b/libs/dbo/dbo_postgres.php
@@ -41,7 +41,8 @@ uses('dbo');
* @subpackage cake.libs
* @since Cake v 1.0.0.114
*/
-class DBO_Postgres extends DBO {
+class DBO_Postgres extends DBO
+{
/**
* Connects to the database using options in the given configuration array.
@@ -49,8 +50,10 @@ class DBO_Postgres extends DBO {
* @param array $config Configuration array for connecting
* @return True if successfully connected.
*/
- function connect ($config) {
- if($config) {
+ function connect ($config)
+ {
+ if ($config)
+ {
$this->config = $config;
$this->_conn = pg_pconnect("host={$config['host']} dbname={$config['database']} user={$config['login']} password={$config['password']}");
}
@@ -60,7 +63,6 @@ class DBO_Postgres extends DBO {
return true;
else
die('Could not connect to DB.');
-
}
/**
@@ -68,7 +70,8 @@ class DBO_Postgres extends DBO {
*
* @return boolean True if the database could be disconnected, else false
*/
- function disconnect () {
+ function disconnect ()
+ {
return pg_close($this->_conn);
}
@@ -78,18 +81,19 @@ class DBO_Postgres extends DBO {
* @param string $sql SQL statement
* @return resource Result resource identifier
*/
- function execute ($sql) {
+ function execute ($sql)
+ {
return pg_query($this->_conn, $sql);
}
/**
- * Returns a row from given resultset.
+ * Returns a row from given resultset as an array .
*
- * @param unknown_type $res
- * @return unknown
+ * @return array The fetched row as an array
*/
- function fetchRow ($res) {
- return pg_fetch_array($res);
+ function fetchRow ()
+ {
+ return pg_fetch_array();
}
/**
@@ -97,7 +101,8 @@ class DBO_Postgres extends DBO {
*
* @return array Array of tablenames in the database
*/
- function tablesList () {
+ function tablesList ()
+ {
$sql = "SELECT a.relname AS name
FROM pg_class a, pg_user b
WHERE ( relkind = 'r') and relname !~ '^pg_' AND relname !~ '^sql_'
@@ -106,11 +111,13 @@ class DBO_Postgres extends DBO {
$result = $this->all($sql);
- if (!$result) {
+ if (!$result)
+ {
trigger_error(ERROR_NO_TABLE_LIST, E_USER_ERROR);
exit;
}
- else {
+ else
+ {
$tables = array();
foreach ($result as $item) $tables[] = $item['name'];
return $tables;
@@ -123,7 +130,8 @@ class DBO_Postgres extends DBO {
* @param string $table_name Name of database table to inspect
* @return array Fields in table. Keys are name and type
*/
- function fields ($table_name) {
+ function fields ($table_name)
+ {
$sql = "SELECT c.relname, a.attname, t.typname FROM pg_class c, pg_attribute a, pg_type t WHERE c.relname = '{$table_name}' AND a.attnum > 0 AND a.attrelid = c.oid AND a.atttypid = t.oid";
$fields = false;
@@ -142,11 +150,58 @@ class DBO_Postgres extends DBO {
* @param string $data String to be prepared for use in an SQL statement
* @return string Quoted and escaped
*/
- function prepareValue ($data) {
+ function prepareValue ($data)
+ {
return "'".pg_escape_string($data)."'";
}
-
+/**
+ * Returns a formatted error message from previous database operation.
+ *
+ * @return string Error message
+ */
+ function lastError ()
+ {
+ $last_error = pg_last_error($this->_result);
+ return $last_error? $last_error: 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->_result? pg_affected_rows($this->_result): 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 ()
+ {
+ return $this->_result? pg_num_rows($this->_result): false;
+ }
+
+/**
+ * Returns the ID generated from the previous INSERT operation.
+ *
+ * @param string $table Name of the database table
+ * @param string $field Name of the ID database field. Defaults to "id"
+ * @return int
+ */
+ function lastInsertId ($table, $field='id')
+ {
+ $sql = "SELECT CURRVAL('{$table}_{$field}_seq') AS max";
+ $res = $this->rawQuery($sql);
+ $data = $this->fetchRow($res);
+ return $data['max'];
+ }
+
/**
* Returns a limit statement in the correct format for the particular database.
*
@@ -156,50 +211,9 @@ class DBO_Postgres extends DBO {
*/
function selectLimit ($limit, $offset=null)
{
- return "LIMIT {$limit}".($offset? " OFFSET {$offset}": null);
- }
-
-/**
- * Returns a formatted error message from previous database operation.
- *
- * @return string Error message
- */
- function lastError () {
- return pg_last_error()? pg_last_error(): null;
+ return " LIMIT {$limit}".($offset? " OFFSET {$offset}": 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->_result? pg_affected_rows($this->_result): false;
- }
-
-/**
- * Returns number of rows in previous resultset. If no previous resultset exists,
- * this returns false.
- *
- * @return int Number of rows
- */
- function lastNumRows () {
- return $this->_result? pg_num_rows($this->_result): false;
- }
-
-/**
- * Returns the ID generated from the previous INSERT operation.
- *
- * @param string $table Name of the database table
- * @param string $field Name of the ID database field. Defaults to "id"
- * @return unknown
- */
- function lastInsertId ($table, $field='id') {
- $sql = "SELECT CURRVAL('{$table}_{$field}_seq') AS max";
- $res = $this->rawQuery($sql);
- $data = $this->fetchRow($res);
- return $data['max'];
- }
}
?>
\ No newline at end of file
diff --git a/libs/dbo/dbo_sqlite.php b/libs/dbo/dbo_sqlite.php
index 97ea709c7..976f0d40e 100644
--- a/libs/dbo/dbo_sqlite.php
+++ b/libs/dbo/dbo_sqlite.php
@@ -14,7 +14,6 @@
//////////////////////////////////////////////////////////////////////////
/**
- * Purpose: DBO_SQLite
* SQLite layer for DBO
*
* @filesource
@@ -31,38 +30,39 @@
*/
/**
- * Enter description here...
- *
+ * Include DBO.
*/
-
uses('dbo');
+
/**
* SQLite layer for DBO.
*
* @package cake
* @subpackage cake.libs
* @since Cake v 0.9.0
- *
*/
-class DBO_SQLite extends DBO {
-
+class DBO_SQLite extends DBO
+{
+
/**
- * We are connecting to the database, and using config['host'] as a filename.
+ * Connects to the database using config['host'] as a filename.
*
- * @param array $config
+ * @param array $config Configuration array for connecting
* @return mixed
*/
- function connect ($config) {
- if($config) {
+ function connect ($config)
+ {
+ if ($config)
+ {
$this->config = $config;
$this->_conn = sqlite_open($config['host']);
}
- $this->connected = $this->_conn ? true: false;
+ $this->connected = $this->_conn? true: false;
- if($this->connected==false)
- die('Could not connect to DB.');
- else
+ if($this->connected)
return $this->_conn;
+ else
+ die('Could not connect to DB.');
}
/**
@@ -70,7 +70,8 @@ class DBO_SQLite extends DBO {
*
* @return boolean True if the database could be disconnected, else false
*/
- function disconnect () {
+ function disconnect ()
+ {
return sqlite_close($this->_conn);
}
@@ -80,18 +81,19 @@ class DBO_SQLite extends DBO {
* @param string $sql SQL statement
* @return resource Result resource identifier
*/
- function execute ($sql) {
+ function execute ($sql)
+ {
return sqlite_query($this->_conn, $sql);
}
/**
* Returns a row from given resultset as an array .
*
- * @param unknown_type $res Resultset
* @return array The fetched row as an array
*/
- function fetchRow ($res) {
- return sqlite_fetch_array($res);
+ function fetchRow ()
+ {
+ return sqlite_fetch_array($this->_result);
}
/**
@@ -99,16 +101,20 @@ class DBO_SQLite extends DBO {
*
* @return array Array of tablenames in the database
*/
- function tablesList () {
+ function tablesList ()
+ {
$result = sqlite_query($this->_conn, "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;");
-$this->_conn
- if (!$result) {
+
+ if (!$result)
+ {
trigger_error(ERROR_NO_TABLE_LIST, E_USER_NOTICE);
exit;
}
- else {
+ else
+ {
$tables = array();
- while ($line = sqlite_fetch_array($result)) {
+ while ($line = sqlite_fetch_array($result))
+ {
$tables[] = $line[0];
}
return $tables;
@@ -138,10 +144,52 @@ $this->_conn
* @param string $data String to be prepared for use in an SQL statement
* @return string Quoted and escaped
*/
- function prepareValue ($data) {
+ function prepareValue ($data)
+ {
return "'".sqlite_escape_string($data)."'";
}
+/**
+ * Returns a formatted error message from previous database operation.
+ *
+ * @return string Error message
+ */
+ function lastError ()
+ {
+ return sqlite_last_error($this->_conn)? sqlite_last_error($this->_conn).': '.sqlite_error_string(sqlite_last_error($this->_conn)): 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->_result? sqlite_changes($this->_conn): 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 ()
+ {
+ return $this->_result? sqlite_num_rows($this->_result): false;
+ }
+
+/**
+ * Returns the ID generated from the previous INSERT operation.
+ *
+ * @return int
+ */
+ function lastInsertId ()
+ {
+ return sqlite_last_insert_rowid($this->_conn);
+ }
+
/**
* Returns a limit statement in the correct format for the particular database.
*
@@ -152,44 +200,7 @@ $this->_conn
function selectLimit ($limit, $offset=null)
{
// :TODO: Please verify this with SQLite, untested.
- return "LIMIT {$limit}".($offset? " OFFSET {$offset}": null);
- }
-
-/**
- * Returns a formatted error message from previous database operation.
- *
- * @return string Error message
- */
- function lastError () {
- return sqlite_last_error($this->_conn)? sqlite_last_error($this->_conn).': '.sqlite_error_string(sqlite_last_error($this->_conn)): 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->_result? sqlite_changes($this->_conn): 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 () {
- return $this->_result? sqlite_num_rows($this->_result): false;
- }
-
-/**
- * Returns the ID generated from the previous INSERT operation.
- *
- * @return int
- */
- function lastInsertId() {
- Return sqlite_last_insert_rowid($this->_conn);
+ return " LIMIT {$limit}".($offset? " OFFSET {$offset}": null);
}
}
diff --git a/libs/flay.php b/libs/flay.php
index f6c78d8d9..6fe73fd86 100644
--- a/libs/flay.php
+++ b/libs/flay.php
@@ -264,11 +264,13 @@ class Flay extends Object
* @param unknown_type $string
* @return unknown
*/
- function colorMark($words, $string) {
+ function colorMark($words, $string)
+ {
$colors = array('yl','gr','rd','bl','fu','cy');
$nextColorIndex = 0;
- foreach ($words as $word) {
+ foreach ($words as $word)
+ {
$string = preg_replace("/({$word})/i", '\\1", $string);
$nextColorIndex++;
}
@@ -282,7 +284,8 @@ class Flay extends Object
* @param unknown_type $text
* @return unknown
*/
- function toClean ($text) {
+ function toClean ($text)
+ {
return strip_tags(html_entity_decode($text, ENT_QUOTES));
}
diff --git a/libs/template.php b/libs/template.php
index 480768bde..3cc6afe31 100644
--- a/libs/template.php
+++ b/libs/template.php
@@ -234,7 +234,7 @@ class Template extends Object {
if (!file_exists($fn))
return "(Error rendering {$name})";
- return $this->_render($fn, $params);
+ return $this->_render($fn, array_merge($this->_view_vars, $params));
}
/**
diff --git a/public/index.php b/public/index.php
index 220db1fc6..f480d3b9f 100644
--- a/public/index.php
+++ b/public/index.php
@@ -33,8 +33,8 @@
session_start();
/**
- * Get Cake's root directory
- */
+ * Get Cake's root directory
+ */
if (!defined('DS'))
define ('DS', DIRECTORY_SEPARATOR);
@@ -65,10 +65,9 @@ config ('tags', 'database');
if (class_exists('DATABASE_CONFIG'))
{
$DB = DboFactory::make('devel');
+ loadModels ();
}
-loadModels ();
-
## RUN THE SCRIPT
$url = empty($_GET['url'])? null: $_GET['url'];
$DISPATCHER = new Dispatcher ();