From b071bb5a92aade551345a495fb13f5678f3978d0 Mon Sep 17 00:00:00 2001
From: admin
Date: Sat, 26 Aug 2006 19:28:37 +0000
Subject:
---
system/application/config/config.php | 2 ++
system/application/config/routes.php | 3 +-
system/codeigniter/CodeIgniter.php | 6 ++--
system/codeigniter/Common.php | 3 +-
system/drivers/DB_mssql.php | 2 +-
system/drivers/DB_mysql.php | 2 +-
system/drivers/DB_mysqli.php | 2 +-
system/drivers/DB_odbc.php | 2 +-
system/drivers/DB_postgre.php | 8 ++---
system/drivers/DB_sqlite.php | 2 +-
system/helpers/form_helper.php | 2 +-
system/helpers/url_helper.php | 4 +--
system/libraries/Calendar.php | 2 +-
system/libraries/Loader.php | 2 +-
system/libraries/Router.php | 45 +++++++++++++-----------
system/libraries/URI.php | 14 ++++----
user_guide/general/changelog.html | 16 ++++++---
user_guide/general/controllers.html | 20 +++++++++++
user_guide/general/routing.html | 2 +-
user_guide/helpers/form_helper.html | 10 +++---
user_guide/helpers/url_helper.html | 6 ++--
user_guide/libraries/database/active_record.html | 2 +-
22 files changed, 96 insertions(+), 61 deletions(-)
diff --git a/system/application/config/config.php b/system/application/config/config.php
index 0b4f33f41..c33bda37c 100644
--- a/system/application/config/config.php
+++ b/system/application/config/config.php
@@ -37,6 +37,8 @@ $config['index_page'] = "index.php";
| 'auto' Default - auto detects
| 'path_info' Uses the PATH_INFO
| 'query_string' Uses the QUERY_STRING
+| 'orig_path_info' Uses the ORIG_PATH_INFO
+| 'request_uri' Uses the REQUEST_URI
|
*/
$config['uri_protocol'] = "auto";
diff --git a/system/application/config/routes.php b/system/application/config/routes.php
index 5167f7569..dc8a32d01 100644
--- a/system/application/config/routes.php
+++ b/system/application/config/routes.php
@@ -45,7 +45,8 @@ $route['scaffolding_trigger'] = "scaffolding";
// Define your own routes below -------------------------------------------
+$route['products/([a-z]+)/(\d+)'] = "bamo/$1/a$2";
+
-$route['products\/([a-z]+)\/(\d+)'] = "$1/a$2";
?>
\ No newline at end of file
diff --git a/system/codeigniter/CodeIgniter.php b/system/codeigniter/CodeIgniter.php
index de7f89af2..872f4c049 100644
--- a/system/codeigniter/CodeIgniter.php
+++ b/system/codeigniter/CodeIgniter.php
@@ -27,7 +27,7 @@
* @link http://www.codeigniter.com/user_guide/
*/
-define('APPVER', '1.4');
+define('APPVER', '1.4.0');
/*
* ------------------------------------------------------
@@ -122,7 +122,7 @@ $LANG =& _load_class('CI_Language');
*
*/
-_load_class('CI_Loader');
+_load_class('CI_Loader', FALSE);
if (floor(phpversion()) < 5)
{
@@ -133,7 +133,7 @@ else
require(BASEPATH.'codeigniter/Base5'.EXT);
}
-_load_class('CI_Controller');
+_load_class('CI_Controller', FALSE);
require(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().EXT);
diff --git a/system/codeigniter/Common.php b/system/codeigniter/Common.php
index 2ec1c3d38..4879e7099 100644
--- a/system/codeigniter/Common.php
+++ b/system/codeigniter/Common.php
@@ -63,11 +63,10 @@ function &_load_class($class, $instantiate = TRUE)
}
else
{
- $objects[$class] = TRUE;
+ $objects[$class] = FALSE;
}
}
-
return $objects[$class];
}
diff --git a/system/drivers/DB_mssql.php b/system/drivers/DB_mssql.php
index 6156ec3c9..48d1929e3 100644
--- a/system/drivers/DB_mssql.php
+++ b/system/drivers/DB_mssql.php
@@ -93,7 +93,7 @@ class CI_DB_mssql extends CI_DB {
* @param string an SQL query
* @return string
*/
- function &_prep_query($sql)
+ function _prep_query($sql)
{
return $sql;
}
diff --git a/system/drivers/DB_mysql.php b/system/drivers/DB_mysql.php
index 18c080b21..82e677a1a 100644
--- a/system/drivers/DB_mysql.php
+++ b/system/drivers/DB_mysql.php
@@ -100,7 +100,7 @@ class CI_DB_mysql extends CI_DB {
* @param string an SQL query
* @return string
*/
- function &_prep_query($sql)
+ function _prep_query($sql)
{
// "DELETE FROM TABLE" returns 0 affected rows This hack modifies
// the query so that it returns the number of affected rows
diff --git a/system/drivers/DB_mysqli.php b/system/drivers/DB_mysqli.php
index f8cb19dbe..32c4c0f89 100644
--- a/system/drivers/DB_mysqli.php
+++ b/system/drivers/DB_mysqli.php
@@ -102,7 +102,7 @@ class CI_DB_mysqli extends CI_DB {
* @param string an SQL query
* @return string
*/
- function &_prep_query($sql)
+ function _prep_query($sql)
{
// "DELETE FROM TABLE" returns 0 affected rows This hack modifies
// the query so that it returns the number of affected rows
diff --git a/system/drivers/DB_odbc.php b/system/drivers/DB_odbc.php
index fac44904b..50f39accd 100644
--- a/system/drivers/DB_odbc.php
+++ b/system/drivers/DB_odbc.php
@@ -94,7 +94,7 @@ class CI_DB_odbc extends CI_DB {
* @param string an SQL query
* @return string
*/
- function &_prep_query($sql)
+ function _prep_query($sql)
{
return $sql;
}
diff --git a/system/drivers/DB_postgre.php b/system/drivers/DB_postgre.php
index 01d4b3df0..3829b04af 100644
--- a/system/drivers/DB_postgre.php
+++ b/system/drivers/DB_postgre.php
@@ -94,7 +94,7 @@ class CI_DB_postgre extends CI_DB {
* @param string an SQL query
* @return string
*/
- function &_prep_query($sql)
+ function _prep_query($sql)
{
return $sql;
}
@@ -174,7 +174,7 @@ class CI_DB_postgre extends CI_DB {
if ($table == '')
return '0';
- $query = $this->query("SELECT COUNT(*) AS numrows FROM `".$this->dbprefix.$table."`");
+ $query = $this->query("SELECT COUNT(*) AS numrows FROM ".$this->dbprefix.$table."");
if ($query->num_rows() == 0)
return '0';
@@ -225,7 +225,7 @@ class CI_DB_postgre extends CI_DB {
{
if (stristr($table, '.'))
{
- $table = preg_replace("/\./", "`.`", $table);
+ $table = preg_replace("/\./", ".", $table);
}
return $table;
@@ -432,7 +432,7 @@ class CI_DB_postgre_result extends CI_DB_result {
$F->name = pg_field_name($this->result_id, $i);
$F->type = pg_field_type($this->result_id, $i);
$F->max_length = pg_field_size($this->result_id, $i);
- $F->primary_key = 0;
+ $F->primary_key = $i == 0;
$F->default = '';
$retval[] = $F;
diff --git a/system/drivers/DB_sqlite.php b/system/drivers/DB_sqlite.php
index 6428dd5bb..1192e6dc7 100644
--- a/system/drivers/DB_sqlite.php
+++ b/system/drivers/DB_sqlite.php
@@ -115,7 +115,7 @@ class CI_DB_sqlite extends CI_DB {
* @param string an SQL query
* @return string
*/
- function &_prep_query($sql)
+ function _prep_query($sql)
{
return $sql;
}
diff --git a/system/helpers/form_helper.php b/system/helpers/form_helper.php
index f82ad01a0..d4e45a0af 100644
--- a/system/helpers/form_helper.php
+++ b/system/helpers/form_helper.php
@@ -326,7 +326,7 @@ function form_close($extra = '')
*/
function form_prep($str = '')
{
- if ($str == '')
+ if ($str === '')
{
return '';
}
diff --git a/system/helpers/url_helper.php b/system/helpers/url_helper.php
index d2d2a5985..03d6c3b2c 100644
--- a/system/helpers/url_helper.php
+++ b/system/helpers/url_helper.php
@@ -90,7 +90,7 @@ function index_page()
*/
function anchor($uri = '', $title = '', $attributes = '')
{
- $site_url = site_url($uri);
+ $site_url = ( ! preg_match('!^\w+://!i', $uri)) ? site_url($uri) : $uri;
if ($title == '')
{
@@ -128,7 +128,7 @@ function anchor($uri = '', $title = '', $attributes = '')
*/
function anchor_popup($uri = '', $title = '', $attributes = FALSE)
{
- $site_url = site_url($uri);
+ $site_url = ( ! preg_match('!^\w+://!i', $uri)) ? site_url($uri) : $uri;
if ($title == '')
{
diff --git a/system/libraries/Calendar.php b/system/libraries/Calendar.php
index 013f06796..b77dd1b6f 100644
--- a/system/libraries/Calendar.php
+++ b/system/libraries/Calendar.php
@@ -263,7 +263,7 @@ class CI_Calendar {
}
else
{
- $month_names = array('01' => 'cal_january', '02' => 'cal_february', '03' => 'cal_march', '04' => 'cal_april', '05' => 'cal_mayl', '06' => 'cal_june', '07' => 'cal_july', '08' => 'cal_august', '09' => 'cal_september', '10' => 'cal_october', '11' => 'cal_novermber', '12' => 'cal_december');
+ $month_names = array('01' => 'cal_january', '02' => 'cal_february', '03' => 'cal_march', '04' => 'cal_april', '05' => 'cal_mayl', '06' => 'cal_june', '07' => 'cal_july', '08' => 'cal_august', '09' => 'cal_september', '10' => 'cal_october', '11' => 'cal_november', '12' => 'cal_december');
}
$month = $month_names[$month];
diff --git a/system/libraries/Loader.php b/system/libraries/Loader.php
index e2467fa64..3d2501fc0 100644
--- a/system/libraries/Loader.php
+++ b/system/libraries/Loader.php
@@ -478,7 +478,7 @@ class CI_Loader {
if ($path == '')
{
$ext = pathinfo($view, PATHINFO_EXTENSION);
- $file = ($ext == '') ? $view.EXT : $view;
+ $file = ($ext != EXT) ? $view.EXT : $view;
$path = $this->view_path.$file;
}
else
diff --git a/system/libraries/Router.php b/system/libraries/Router.php
index 678145458..b28ead953 100644
--- a/system/libraries/Router.php
+++ b/system/libraries/Router.php
@@ -87,25 +87,31 @@ class CI_Router {
// Fetch the URI string Depending on the server,
// the URI will be available in one of two globals
- switch ($this->config->item('uri_protocol'))
+ if ($this->config->item('uri_protocol') == 'auto')
{
- case 'path_info' : $this->uri_string = (isset($_SERVER['PATH_INFO'])) ? $_SERVER['PATH_INFO'] : @getenv('PATH_INFO');
- break;
- case 'query_string' : $this->uri_string = (isset($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : @getenv('QUERY_STRING');
- break;
- default :
- $path_info = (isset($_SERVER['PATH_INFO'])) ? $_SERVER['PATH_INFO'] : @getenv('PATH_INFO');
-
- if ($path_info != '' AND $path_info != "/".SELF)
- {
- $this->uri_string = $path_info;
- }
- else
- {
- $this->uri_string = (isset($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : @getenv('QUERY_STRING');
- }
- break;
+ $path_info = getenv('PATH_INFO');
+ if ($path_info != '' AND $path_info != "/".SELF)
+ {
+ $this->uri_string = $path_info;
+ }
+ else
+ {
+ $path_info = getenv('ORIG_PATH_INFO');
+ if ($path_info != '' AND $path_info != "/".SELF)
+ {
+ $this->uri_string = $path_info;
+ }
+ else
+ {
+ $this->uri_string = getenv('QUERY_STRING');
+ }
+ }
+ }
+ else
+ {
+ $this->uri_string = getenv(strtoupper($this->config->item('uri_protocol')));
}
+
// Is there a URI string? If not, the default controller specified
// by the admin in the "routes" file will be shown.
@@ -291,10 +297,7 @@ class CI_Router {
// Loop through the route array looking for wildcards
foreach (array_slice($this->routes, 1) as $key => $val)
- {
- if (count(explode('/', $key)) != $num)
- continue;
-
+ {
// Convert wildcards to RegEx
$key = str_replace(':any', '.+', str_replace(':num', '[0-9]+', $key));
diff --git a/system/libraries/URI.php b/system/libraries/URI.php
index 4c2fa9c7f..c5fd4625b 100644
--- a/system/libraries/URI.php
+++ b/system/libraries/URI.php
@@ -28,7 +28,7 @@
*/
class CI_URI {
- var $uri;
+ var $router;
var $keyval = array();
/**
@@ -42,7 +42,7 @@ class CI_URI {
*/
function CI_URI()
{
- $this->uri =& _load_class('CI_Router');
+ $this->router =& _load_class('CI_Router');
log_message('debug', "URI Class Initialized");
}
@@ -60,7 +60,7 @@ class CI_URI {
*/
function segment($n, $no_result = FALSE)
{
- return ( ! isset($this->uri->segments[$n])) ? $no_result : $this->uri->segments[$n];
+ return ( ! isset($this->router->segments[$n])) ? $no_result : $this->router->segments[$n];
}
// --------------------------------------------------------------------
@@ -196,7 +196,7 @@ class CI_URI {
$leading = '/';
$trailing = '/';
}
- return ( ! isset($this->uri->segments[$n])) ? '' : $leading.$this->uri->segments[$n].$trailing;
+ return ( ! isset($this->router->segments[$n])) ? '' : $leading.$this->router->segments[$n].$trailing;
}
// --------------------------------------------------------------------
@@ -209,7 +209,7 @@ class CI_URI {
*/
function segment_array()
{
- return $this->uri->segments;
+ return $this->router->segments;
}
// --------------------------------------------------------------------
@@ -222,7 +222,7 @@ class CI_URI {
*/
function total_segments()
{
- return count($this->uri->segments);
+ return count($this->router->segments);
}
// --------------------------------------------------------------------
@@ -235,7 +235,7 @@ class CI_URI {
*/
function uri_string()
{
- return $this->uri->uri_string;
+ return $this->router->uri_string;
}
}
diff --git a/user_guide/general/changelog.html b/user_guide/general/changelog.html
index 5f3b86904..5721bc866 100644
--- a/user_guide/general/changelog.html
+++ b/user_guide/general/changelog.html
@@ -69,20 +69,28 @@ Change Log
- Added Hooks feature, enabling you to tap into and modify the inner workings of the framework without hacking the core files.
+- Added the ability to organize controller files into sub-folders. Kudos to Marco for suggesting this (and the next two) feature.
+- Added regular expressions support for routing rules.
- Added the ability to replace core system classes with your own classes.
- Added support for % character in URL.
-- Added the ability to organize controller files into sub-folders.
-
- Updated the Routing feature to accept regular expressions within routing rules.
+- Added the ability to supply full URLs using the anchor() helper function.
- Moved the MIME type array out of the Upload class and into its own file in the applications/comfig/ folder.
+- Tweaked the URI Protocol code to allow more options so that URLs will work more reliably in different environments.
- Removed a strtolower() call that was changing URL segments to lower case.
+- Removed some references that were interfering with PHP 4.4.1 compatibility.
+- Removed backticks from Postgre class since these are not needed.
- Deprecated the hash() function due to a naming conflict with a native PHP function with the same name. Please use dohash() instead.
-- Fixed a MS SQL issue.
- Fixed an issue when removing GET variables.
- Fixed this router bug.
- Fixed a bug that was preventing multiple discreet database calls.
- Fixed a bug in which loading a language file was producing a "file contains no data" message.
- Fixed a session bug caused by the XSS Filtering feature inadvertently changing the case of certain words.
-- Removed backticks from Postgre class since these are not needed.
+- Fixed some missing prefixes when using the database prefix feature.
+- Fixed a bug that was causing the Loader class to incorrectly identify the file extension.
+- Fixed a typo in the Calendar class (cal_november).
+- Fixed an evaluation bug in the database initialization function.
+- Fixed some MS SQL bugs.
+- Fixed some doc typos.
diff --git a/user_guide/general/controllers.html b/user_guide/general/controllers.html
index 648298eb0..b45b5aef7 100644
--- a/user_guide/general/controllers.html
+++ b/user_guide/general/controllers.html
@@ -71,6 +71,7 @@ Controllers
Functions
Private Functions
Defining a Default Controller
+Organizing Controllers into Sub-folders
Class Constructors
Reserved Function Names
@@ -204,6 +205,25 @@ your application/config/routes.php file and set this variable:
specifying any URI segments you'll see your Hello World message by default.
+
+Organizing Your Controllers into Sub-folders
+
+If you are building a large application you might find it convenient to organize your controllers into sub-folders. Code Igniter permits you to do this.
+
+Simply create folders within your application/controllers directory and place your controller classes within them.
+
+Note: When using this feature the first segment or your URI must specify the folder. For example, lets say you have a controller
+located here:
+
+application/controllers/products/shoes.php
+
+To call the above controller your URI will look something like this:
+
+www.your-site.com/index.php/products/shoes/123
+
+Code Igniter also permits you to remap your URIs using its URI Routing feature.
+
+
Class Constructors
diff --git a/user_guide/general/routing.html b/user_guide/general/routing.html
index 977698b9f..e5dac6808 100644
--- a/user_guide/general/routing.html
+++ b/user_guide/general/routing.html
@@ -138,7 +138,7 @@ Higher routes will always take precedence over lower ones.
A typical RegEx route might look something like this:
-$route['products\/([a-z]+)\/(\d+)'] = "$1/id_$2";
+$route['products/([a-z]+)/(\d+)'] = "$1/id_$2";
In the above example, a URI similar to products/shirts/123 would instead call the shirts controller class and the id_123 function.
diff --git a/user_guide/helpers/form_helper.html b/user_guide/helpers/form_helper.html
index 8593f81d9..f38d4ada1 100644
--- a/user_guide/helpers/form_helper.html
+++ b/user_guide/helpers/form_helper.html
@@ -208,7 +208,7 @@ value you wish to be selected. Example:
$options = array(
'small' => 'Small Shirt',
'med' => 'Medium Shirt',
- large' => 'Large Shirt',
+ 'large' => 'Large Shirt',
'xlarge' => 'Extra Large Shirt',
);
@@ -217,10 +217,10 @@ echo form_dropdown('shirts', $options, 'large');
// Would produce:
<select name="shirts">
-<option value="small">Small Shirt
-<option value="med">Medium Shirt
-<option value="large" selected>Large Shirt
-<option value="xlarge">Extra Large Shirt
+<option value="small">Small Shirt</option>
+<option value="med">Medium Shirt</option>
+<option value="large" selected>Large Shirt</option>
+<option value="xlarge">Extra Large Shirt</option>
</select>
diff --git a/user_guide/helpers/url_helper.html b/user_guide/helpers/url_helper.html
index a8f5c14d6..2b5b354cc 100644
--- a/user_guide/helpers/url_helper.html
+++ b/user_guide/helpers/url_helper.html
@@ -117,8 +117,10 @@ echo site_url($segments);
anchor(uri segments, text, attributes)
The first parameter can contain any segments you wish appended to the URL. As with the site_url() function above,
-segments can be a string or an array. Note: Do not include the base URL. It will be built as specified in your config file. Include
-only the URI segments you wish appended to the URL.
+segments can be a string or an array.
+
+Note: If you are building links that are internal to your application do not include the base URL (http://...). This
+will be added automatically from the information specified in your config file. Include only the URI segments you wish appended to the URL.
The second segment is the text you would like the link to say. If you leave it blank, the URL will be used.
diff --git a/user_guide/libraries/database/active_record.html b/user_guide/libraries/database/active_record.html
index 8fc3b8131..6e5d6126a 100644
--- a/user_guide/libraries/database/active_record.html
+++ b/user_guide/libraries/database/active_record.html
@@ -557,7 +557,7 @@ You can optionally pass this information directly into the update function as a
Generates a delete SQL string and runs the query.
-$this->db->delete('mytable', array('id', $id));
+$this->db->delete('mytable', array('id' => $id));
// Produces:
// DELETE FROM mytable
--
cgit v1.2.3-24-g4f1b