From 98c347de9f62a3427170f9f73a692d159765e8cf Mon Sep 17 00:00:00 2001
From: Nick Busey
Date: Thu, 2 Feb 2012 11:07:03 -0700
Subject: Adding equal to greater than, equal to less than form validators.
---
system/language/english/form_validation_lang.php | 48 ++++++++---------
system/libraries/Form_validation.php | 38 +++++++++++++-
.../source/libraries/form_validation.rst | 60 ++++++++++++----------
3 files changed, 94 insertions(+), 52 deletions(-)
diff --git a/system/language/english/form_validation_lang.php b/system/language/english/form_validation_lang.php
index 6afa37a29..2ee2cb9dd 100644
--- a/system/language/english/form_validation_lang.php
+++ b/system/language/english/form_validation_lang.php
@@ -25,29 +25,31 @@
* @filesource
*/
-$lang['required'] = "The %s field is required.";
-$lang['isset'] = "The %s field must have a value.";
-$lang['valid_email'] = "The %s field must contain a valid email address.";
-$lang['valid_emails'] = "The %s field must contain all valid email addresses.";
-$lang['valid_url'] = "The %s field must contain a valid URL.";
-$lang['valid_ip'] = "The %s field must contain a valid IP.";
-$lang['min_length'] = "The %s field must be at least %s characters in length.";
-$lang['max_length'] = "The %s field cannot exceed %s characters in length.";
-$lang['exact_length'] = "The %s field must be exactly %s characters in length.";
-$lang['alpha'] = "The %s field may only contain alphabetical characters.";
-$lang['alpha_numeric'] = "The %s field may only contain alpha-numeric characters.";
-$lang['alpha_dash'] = "The %s field may only contain alpha-numeric characters, underscores, and dashes.";
-$lang['numeric'] = "The %s field must contain only numbers.";
-$lang['is_numeric'] = "The %s field must contain only numeric characters.";
-$lang['integer'] = "The %s field must contain an integer.";
-$lang['regex_match'] = "The %s field is not in the correct format.";
-$lang['matches'] = "The %s field does not match the %s field.";
-$lang['is_unique'] = "The %s field must contain a unique value.";
-$lang['is_natural'] = "The %s field must contain only positive numbers.";
-$lang['is_natural_no_zero'] = "The %s field must contain a number greater than zero.";
-$lang['decimal'] = "The %s field must contain a decimal number.";
-$lang['less_than'] = "The %s field must contain a number less than %s.";
-$lang['greater_than'] = "The %s field must contain a number greater than %s.";
+$lang['required'] = "The %s field is required.";
+$lang['isset'] = "The %s field must have a value.";
+$lang['valid_email'] = "The %s field must contain a valid email address.";
+$lang['valid_emails'] = "The %s field must contain all valid email addresses.";
+$lang['valid_url'] = "The %s field must contain a valid URL.";
+$lang['valid_ip'] = "The %s field must contain a valid IP.";
+$lang['min_length'] = "The %s field must be at least %s characters in length.";
+$lang['max_length'] = "The %s field cannot exceed %s characters in length.";
+$lang['exact_length'] = "The %s field must be exactly %s characters in length.";
+$lang['alpha'] = "The %s field may only contain alphabetical characters.";
+$lang['alpha_numeric'] = "The %s field may only contain alpha-numeric characters.";
+$lang['alpha_dash'] = "The %s field may only contain alpha-numeric characters, underscores, and dashes.";
+$lang['numeric'] = "The %s field must contain only numbers.";
+$lang['is_numeric'] = "The %s field must contain only numeric characters.";
+$lang['integer'] = "The %s field must contain an integer.";
+$lang['regex_match'] = "The %s field is not in the correct format.";
+$lang['matches'] = "The %s field does not match the %s field.";
+$lang['is_unique'] = "The %s field must contain a unique value.";
+$lang['is_natural'] = "The %s field must contain only positive numbers.";
+$lang['is_natural_no_zero'] = "The %s field must contain a number greater than zero.";
+$lang['decimal'] = "The %s field must contain a decimal number.";
+$lang['less_than'] = "The %s field must contain a number less than %s.";
+$lang['equal_to_less_than'] = "The %s field must contain a number equal to or less than %s.";
+$lang['greater_than'] = "The %s field must contain a number greater than %s.";
+$lang['equal_to_greater_than'] = "The %s field must contain a number equal to or greater than %s.";
/* End of file form_validation_lang.php */
diff --git a/system/libraries/Form_validation.php b/system/libraries/Form_validation.php
index 0a6a2af0d..1b2907a08 100644
--- a/system/libraries/Form_validation.php
+++ b/system/libraries/Form_validation.php
@@ -1116,7 +1116,7 @@ class CI_Form_validation {
// --------------------------------------------------------------------
/**
- * Greather than
+ * Greater than
*
* @param string
* @return bool
@@ -1130,6 +1130,24 @@ class CI_Form_validation {
return $str > $min;
}
+ // --------------------------------------------------------------------
+
+ /**
+ * Equal to or Greater than
+ *
+ * @access public
+ * @param string
+ * @return bool
+ */
+ function equal_to_greater_than($str, $min)
+ {
+ if ( ! is_numeric($str))
+ {
+ return FALSE;
+ }
+ return $str >= $min;
+ }
+
// --------------------------------------------------------------------
/**
@@ -1149,6 +1167,24 @@ class CI_Form_validation {
// --------------------------------------------------------------------
+ /**
+ * Equal to or Less than
+ *
+ * @access public
+ * @param string
+ * @return bool
+ */
+ function equal_to_less_than($str, $max)
+ {
+ if ( ! is_numeric($str))
+ {
+ return FALSE;
+ }
+ return $str <= $max;
+ }
+
+ // --------------------------------------------------------------------
+
/**
* Is a Natural number (0,1,2,3, etc.)
*
diff --git a/user_guide_src/source/libraries/form_validation.rst b/user_guide_src/source/libraries/form_validation.rst
index e7875bc22..185850b5a 100644
--- a/user_guide_src/source/libraries/form_validation.rst
+++ b/user_guide_src/source/libraries/form_validation.rst
@@ -823,34 +823,38 @@ Rule Reference
The following is a list of all the native rules that are available to
use:
-======================= ========== ============================================================================================= =======================
-Rule Parameter Description Example
-======================= ========== ============================================================================================= =======================
-**required** No Returns FALSE if the form element is empty.
-**matches** Yes Returns FALSE if the form element does not match the one in the parameter. matches[form_item]
-**is_unique** Yes Returns FALSE if the form element is not unique to the is_unique[table.field]
- table and field name in the parameter. is_unique[table.field]
-**max_length** Yes Returns FALSE if the form element is longer then the parameter value. max_length[12]
-**exact_length** Yes Returns FALSE if the form element is not exactly the parameter value. exact_length[8]
-**greater_than** Yes Returns FALSE if the form element is less than the parameter value or not numeric. greater_than[8]
-**less_than** Yes Returns FALSE if the form element is greater than the parameter value or not numeric. less_than[8]
-**alpha** No Returns FALSE if the form element contains anything other than alphabetical characters.
-**alpha_numeric** No Returns FALSE if the form element contains anything other than alpha-numeric characters.
-**alpha_dash** No Returns FALSE if the form element contains anything other than alpha-numeric characters,
- underscores or dashes.
-**numeric** No Returns FALSE if the form element contains anything other than numeric characters.
-**integer** No Returns FALSE if the form element contains anything other than an integer.
-**decimal** Yes Returns FALSE if the form element is not exactly the parameter value.
-**is_natural** No Returns FALSE if the form element contains anything other than a natural number:
- 0, 1, 2, 3, etc.
-**is_natural_no_zero** No Returns FALSE if the form element contains anything other than a natural
- number, but not zero: 1, 2, 3, etc.
-**is_unique** Yes Returns FALSE if the form element is not unique in a database table. is_unique[table.field]
-**valid_email** No Returns FALSE if the form element does not contain a valid email address.
-**valid_emails** No Returns FALSE if any value provided in a comma separated list is not a valid email.
-**valid_ip** No Returns FALSE if the supplied IP is not valid.
-**valid_base64** No Returns FALSE if the supplied string contains anything other than valid Base64 characters.
-======================= ========== ============================================================================================= =======================
+========================= ========== ============================================================================================= =======================
+Rule Parameter Description Example
+========================= ========== ============================================================================================= =======================
+**required** No Returns FALSE if the form element is empty.
+**matches** Yes Returns FALSE if the form element does not match the one in the parameter. matches[form_item]
+**is_unique** Yes Returns FALSE if the form element is not unique to the is_unique[table.field]
+ table and field name in the parameter. is_unique[table.field]
+**max_length** Yes Returns FALSE if the form element is longer then the parameter value. max_length[12]
+**exact_length** Yes Returns FALSE if the form element is not exactly the parameter value. exact_length[8]
+**greater_than** Yes Returns FALSE if the form element is less than the parameter value or not numeric. greater_than[8]
+**equal_to_greater_than** Yes Returns FALSE if the form element is not equal to or less than the parameter value, greater_than[8]
+ or not numeric.
+**less_than** Yes Returns FALSE if the form element is greater than the parameter value or not numeric. less_than[8]
+**equal_to_less_than** Yes Returns FALSE if the form element is not equal to or greater than the parameter value, less_than[8]
+ or not numeric.
+**alpha** No Returns FALSE if the form element contains anything other than alphabetical characters.
+**alpha_numeric** No Returns FALSE if the form element contains anything other than alpha-numeric characters.
+**alpha_dash** No Returns FALSE if the form element contains anything other than alpha-numeric characters,
+ underscores or dashes.
+**numeric** No Returns FALSE if the form element contains anything other than numeric characters.
+**integer** No Returns FALSE if the form element contains anything other than an integer.
+**decimal** Yes Returns FALSE if the form element is not exactly the parameter value.
+**is_natural** No Returns FALSE if the form element contains anything other than a natural number:
+ 0, 1, 2, 3, etc.
+**is_natural_no_zero** No Returns FALSE if the form element contains anything other than a natural
+ number, but not zero: 1, 2, 3, etc.
+**is_unique** Yes Returns FALSE if the form element is not unique in a database table. is_unique[table.field]
+**valid_email** No Returns FALSE if the form element does not contain a valid email address.
+**valid_emails** No Returns FALSE if any value provided in a comma separated list is not a valid email.
+**valid_ip** No Returns FALSE if the supplied IP is not valid.
+**valid_base64** No Returns FALSE if the supplied string contains anything other than valid Base64 characters.
+========================= ========== ============================================================================================= =======================
.. note:: These rules can also be called as discrete functions. For
example::
--
cgit v1.2.3-24-g4f1b
From c1931667cbc614a704f536beb882931af82241cd Mon Sep 17 00:00:00 2001
From: Nick Busey
Date: Mon, 6 Feb 2012 17:55:58 -0700
Subject: Renaming equal_to_greater_than to greater_than_equal_to,
equal_to_less_than to less_than_equal_to
---
system/language/english/form_validation_lang.php | 4 ++--
system/libraries/Form_validation.php | 4 ++--
user_guide_src/source/libraries/form_validation.rst | 4 ++--
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/system/language/english/form_validation_lang.php b/system/language/english/form_validation_lang.php
index 2ee2cb9dd..7fa6934f5 100644
--- a/system/language/english/form_validation_lang.php
+++ b/system/language/english/form_validation_lang.php
@@ -47,9 +47,9 @@ $lang['is_natural'] = "The %s field must contain only positive numbers.";
$lang['is_natural_no_zero'] = "The %s field must contain a number greater than zero.";
$lang['decimal'] = "The %s field must contain a decimal number.";
$lang['less_than'] = "The %s field must contain a number less than %s.";
-$lang['equal_to_less_than'] = "The %s field must contain a number equal to or less than %s.";
+$lang['less_than_equal_to'] = "The %s field must contain a number equal to or less than %s.";
$lang['greater_than'] = "The %s field must contain a number greater than %s.";
-$lang['equal_to_greater_than'] = "The %s field must contain a number equal to or greater than %s.";
+$lang['greater_than_equal_to'] = "The %s field must contain a number equal to or greater than %s.";
/* End of file form_validation_lang.php */
diff --git a/system/libraries/Form_validation.php b/system/libraries/Form_validation.php
index 1b2907a08..3ee3cf9df 100644
--- a/system/libraries/Form_validation.php
+++ b/system/libraries/Form_validation.php
@@ -1139,7 +1139,7 @@ class CI_Form_validation {
* @param string
* @return bool
*/
- function equal_to_greater_than($str, $min)
+ function greater_than_equal_to($str, $min)
{
if ( ! is_numeric($str))
{
@@ -1174,7 +1174,7 @@ class CI_Form_validation {
* @param string
* @return bool
*/
- function equal_to_less_than($str, $max)
+ function less_than_equal_to($str, $max)
{
if ( ! is_numeric($str))
{
diff --git a/user_guide_src/source/libraries/form_validation.rst b/user_guide_src/source/libraries/form_validation.rst
index 185850b5a..0ca6e767b 100644
--- a/user_guide_src/source/libraries/form_validation.rst
+++ b/user_guide_src/source/libraries/form_validation.rst
@@ -833,10 +833,10 @@ Rule Parameter Description
**max_length** Yes Returns FALSE if the form element is longer then the parameter value. max_length[12]
**exact_length** Yes Returns FALSE if the form element is not exactly the parameter value. exact_length[8]
**greater_than** Yes Returns FALSE if the form element is less than the parameter value or not numeric. greater_than[8]
-**equal_to_greater_than** Yes Returns FALSE if the form element is not equal to or less than the parameter value, greater_than[8]
+**greater_than_equal_to** Yes Returns FALSE if the form element is not equal to or less than the parameter value, greater_than[8]
or not numeric.
**less_than** Yes Returns FALSE if the form element is greater than the parameter value or not numeric. less_than[8]
-**equal_to_less_than** Yes Returns FALSE if the form element is not equal to or greater than the parameter value, less_than[8]
+**less_than_equal_to** Yes Returns FALSE if the form element is not equal to or greater than the parameter value, less_than[8]
or not numeric.
**alpha** No Returns FALSE if the form element contains anything other than alphabetical characters.
**alpha_numeric** No Returns FALSE if the form element contains anything other than alpha-numeric characters.
--
cgit v1.2.3-24-g4f1b
From d5c0172e02b99278f4928897c1489cd628a50e2d Mon Sep 17 00:00:00 2001
From: John Crepezzi
Date: Tue, 7 Feb 2012 19:06:46 -0500
Subject: Fix #1009 documentation fixed
---
system/language/english/form_validation_lang.php | 6 +++---
user_guide_src/source/libraries/form_validation.rst | 10 ++++++----
2 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/system/language/english/form_validation_lang.php b/system/language/english/form_validation_lang.php
index 7fa6934f5..ea589618a 100644
--- a/system/language/english/form_validation_lang.php
+++ b/system/language/english/form_validation_lang.php
@@ -47,10 +47,10 @@ $lang['is_natural'] = "The %s field must contain only positive numbers.";
$lang['is_natural_no_zero'] = "The %s field must contain a number greater than zero.";
$lang['decimal'] = "The %s field must contain a decimal number.";
$lang['less_than'] = "The %s field must contain a number less than %s.";
-$lang['less_than_equal_to'] = "The %s field must contain a number equal to or less than %s.";
+$lang['less_than_equal_to'] = "The %s field must contain a number less than or equal to %s.";
$lang['greater_than'] = "The %s field must contain a number greater than %s.";
-$lang['greater_than_equal_to'] = "The %s field must contain a number equal to or greater than %s.";
+$lang['greater_than_equal_to'] = "The %s field must contain a number greater than or equal to %s.";
/* End of file form_validation_lang.php */
-/* Location: ./system/language/english/form_validation_lang.php */
\ No newline at end of file
+/* Location: ./system/language/english/form_validation_lang.php */
diff --git a/user_guide_src/source/libraries/form_validation.rst b/user_guide_src/source/libraries/form_validation.rst
index 0ca6e767b..684051db5 100644
--- a/user_guide_src/source/libraries/form_validation.rst
+++ b/user_guide_src/source/libraries/form_validation.rst
@@ -832,11 +832,13 @@ Rule Parameter Description
table and field name in the parameter. is_unique[table.field]
**max_length** Yes Returns FALSE if the form element is longer then the parameter value. max_length[12]
**exact_length** Yes Returns FALSE if the form element is not exactly the parameter value. exact_length[8]
-**greater_than** Yes Returns FALSE if the form element is less than the parameter value or not numeric. greater_than[8]
-**greater_than_equal_to** Yes Returns FALSE if the form element is not equal to or less than the parameter value, greater_than[8]
+**greater_than** Yes Returns FALSE if the form element is less than or equal to the parameter value or not greater_than[8]
+ numeric.
+**greater_than_equal_to** Yes Returns FALSE if the form element is less than the parameter value, greater_than_equal_to[8]
or not numeric.
-**less_than** Yes Returns FALSE if the form element is greater than the parameter value or not numeric. less_than[8]
-**less_than_equal_to** Yes Returns FALSE if the form element is not equal to or greater than the parameter value, less_than[8]
+**less_than** Yes Returns FALSE if the form element is greater than or equal to the parameter value or less_than[8]
+ not numeric.
+**less_than_equal_to** Yes Returns FALSE if the form element is greater than the parameter value, less_than_equal_to[8]
or not numeric.
**alpha** No Returns FALSE if the form element contains anything other than alphabetical characters.
**alpha_numeric** No Returns FALSE if the form element contains anything other than alpha-numeric characters.
--
cgit v1.2.3-24-g4f1b
From ef7474c6ca9887283c964e17c450ca09559643c4 Mon Sep 17 00:00:00 2001
From: Ryan Dial
Date: Thu, 1 Mar 2012 16:11:36 -0500
Subject: compile binds before caching the query, otherwise the cached query
will never match the unbound query. updated changlog to mention bug fix.
---
system/database/DB_driver.php | 12 ++++++------
user_guide/changelog.html | 1 +
2 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/system/database/DB_driver.php b/system/database/DB_driver.php
index 4dfb584f2..6161f149b 100644
--- a/system/database/DB_driver.php
+++ b/system/database/DB_driver.php
@@ -265,6 +265,12 @@ class CI_DB_driver {
$sql = preg_replace("/(\W)".$this->swap_pre."(\S+?)/", "\\1".$this->dbprefix."\\2", $sql);
}
+ // Compile binds if needed
+ if ($binds !== FALSE)
+ {
+ $sql = $this->compile_binds($sql, $binds);
+ }
+
// Is query caching enabled? If the query is a "read type"
// we will load the caching class and return the previously
// cached query if it exists
@@ -280,12 +286,6 @@ class CI_DB_driver {
}
}
- // Compile binds if needed
- if ($binds !== FALSE)
- {
- $sql = $this->compile_binds($sql, $binds);
- }
-
// Save the query for debugging
if ($this->save_queries == TRUE)
{
diff --git a/user_guide/changelog.html b/user_guide/changelog.html
index 76a0bcb19..b87e61ba8 100644
--- a/user_guide/changelog.html
+++ b/user_guide/changelog.html
@@ -79,6 +79,7 @@ Change Log
Fixed a bug - form_open() compared $action against site_url() instead of base_url()
Fixed a bug - CI_Upload::_file_mime_type() could've failed if mime_content_type() is used for the detection and returns FALSE.
Fixed a bug (#538) - Windows paths were ignored when using the Image Manipulation Class to create a new file.
+
Fixed a bug - When database caching was enabled, $this->db->query() checked the cache before binding variables which resulted in cached queries never being found.
--
cgit v1.2.3-24-g4f1b
From 2f8473c031e8a1fa62a5556e013e293c297c41da Mon Sep 17 00:00:00 2001
From: Brenderous
Date: Fri, 2 Mar 2012 20:29:38 -0700
Subject: Just a grammar fix. Changed "...as the code these file contain will
be minimized" to "...as the code these files contain will be minimized".
---
user_guide_src/source/overview/at_a_glance.rst | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/user_guide_src/source/overview/at_a_glance.rst b/user_guide_src/source/overview/at_a_glance.rst
index 31f0b4dd9..6dcfdbb14 100644
--- a/user_guide_src/source/overview/at_a_glance.rst
+++ b/user_guide_src/source/overview/at_a_glance.rst
@@ -41,7 +41,7 @@ CodeIgniter Uses M-V-C
CodeIgniter uses the Model-View-Controller approach, which allows great
separation between logic and presentation. This is particularly good for
projects in which designers are working with your template files, as the
-code these file contain will be minimized. We describe MVC in more
+code these files contain will be minimized. We describe MVC in more
detail on its own page.
CodeIgniter Generates Clean URLs
--
cgit v1.2.3-24-g4f1b
From 3722e50439fd88281f8730fd329b41812cd19963 Mon Sep 17 00:00:00 2001
From: Andrey Andreev
Date: Sat, 3 Mar 2012 15:04:38 +0200
Subject: Fix MySQL/MySQLi field_data()
---
system/database/drivers/mysql/mysql_driver.php | 31 +++++++++++++++++++-----
system/database/drivers/mysqli/mysqli_driver.php | 31 +++++++++++++++++++-----
2 files changed, 50 insertions(+), 12 deletions(-)
diff --git a/system/database/drivers/mysql/mysql_driver.php b/system/database/drivers/mysql/mysql_driver.php
index 84f7791c7..7fd08a6ed 100644
--- a/system/database/drivers/mysql/mysql_driver.php
+++ b/system/database/drivers/mysql/mysql_driver.php
@@ -404,16 +404,35 @@ class CI_DB_mysql_driver extends CI_DB {
// --------------------------------------------------------------------
/**
- * Field data query
- *
- * Generates a platform-specific query so that the column data can be retrieved
+ * Returns an object with field data
*
* @param string the table name
- * @return string
+ * @return object
*/
- public function _field_data($table)
+ public function field_data($table = '')
{
- return 'DESCRIBE '.$table;
+ if ($table == '')
+ {
+ return ($this->db_debug) ? $this->display_error('db_field_param_missing') : FALSE;
+ }
+
+ $query = $this->query('DESCRIBE '.$this->_protect_identifiers($table, TRUE, NULL, FALSE));
+ $query = $query->result_object();
+
+ $retval = array();
+ for ($i = 0, $c = count($query); $i < $c; $i++)
+ {
+ preg_match('/([a-z]+)(\(\d+\))?/', $query[$i]->Type, $matches);
+
+ $retval[$i] = new stdClass();
+ $retval[$i]->name = $query[$i]->Field;
+ $retval[$i]->type = empty($matches[1]) ? NULL : $matches[1];
+ $retval[$i]->default = $query[$i]->Default;
+ $retval[$i]->max_length = empty($matches[2]) ? NULL : preg_replace('/[^\d]/', '', $matches[2]);
+ $retval[$i]->primary_key = (int) ($query[$i]->Key === 'PRI');
+ }
+
+ return $retval;
}
// --------------------------------------------------------------------
diff --git a/system/database/drivers/mysqli/mysqli_driver.php b/system/database/drivers/mysqli/mysqli_driver.php
index 19353944d..25b6ceca1 100644
--- a/system/database/drivers/mysqli/mysqli_driver.php
+++ b/system/database/drivers/mysqli/mysqli_driver.php
@@ -405,16 +405,35 @@ class CI_DB_mysqli_driver extends CI_DB {
// --------------------------------------------------------------------
/**
- * Field data query
- *
- * Generates a platform-specific query so that the column data can be retrieved
+ * Returns an object with field data
*
* @param string the table name
- * @return string
+ * @return object
*/
- protected function _field_data($table)
+ public function field_data($table = '')
{
- return 'DESCRIBE '.$table;
+ if ($table == '')
+ {
+ return ($this->db_debug) ? $this->display_error('db_field_param_missing') : FALSE;
+ }
+
+ $query = $this->query('DESCRIBE '.$this->_protect_identifiers($table, TRUE, NULL, FALSE));
+ $query = $query->result_object();
+
+ $retval = array();
+ for ($i = 0, $c = count($query); $i < $c; $i++)
+ {
+ preg_match('/([a-z]+)(\(\d+\))?/', $query[$i]->Type, $matches);
+
+ $retval[$i] = new stdClass();
+ $retval[$i]->name = $query[$i]->Field;
+ $retval[$i]->type = empty($matches[1]) ? NULL : $matches[1];
+ $retval[$i]->default = $query[$i]->Default;
+ $retval[$i]->max_length = empty($matches[2]) ? NULL : preg_replace('/[^\d]/', '', $matches[2]);
+ $retval[$i]->primary_key = (int) ($query[$i]->Key === 'PRI');
+ }
+
+ return $retval;
}
// --------------------------------------------------------------------
--
cgit v1.2.3-24-g4f1b
From 3edd88eee84886fc6ba3e1fc25beda3c424370bc Mon Sep 17 00:00:00 2001
From: tubalmartin
Date: Sat, 3 Mar 2012 22:10:34 +0100
Subject: An even better url_title helper. Tests: http://codepad.org/tuJgvkyN
Changelog entry added for 2.1.1
---
system/helpers/url_helper.php | 27 +++++++--------------------
user_guide/changelog.html | 5 +++++
2 files changed, 12 insertions(+), 20 deletions(-)
diff --git a/system/helpers/url_helper.php b/system/helpers/url_helper.php
index 9f4b85248..cdb6dae9c 100644
--- a/system/helpers/url_helper.php
+++ b/system/helpers/url_helper.php
@@ -478,27 +478,14 @@ if ( ! function_exists('url_title'))
{
function url_title($str, $separator = 'dash', $lowercase = FALSE)
{
- if ($separator == 'dash')
- {
- $search = '_';
- $replace = '-';
- }
- else
- {
- $search = '-';
- $replace = '_';
- }
+ $replace = $separator == 'dash' ? '-' : '_';
$trans = array(
- '&\#\d+?;' => '',
- '&\S+?;' => '',
- '\s+' => $replace,
- '[^a-z0-9\-\._]' => '',
- $replace.'+' => $replace,
- $replace.'$' => $replace,
- '^'.$replace => $replace,
- '\.+$' => ''
- );
+ '&.+?;' => '',
+ '[^a-z0-9 _-]' => '',
+ '\s+' => $replace,
+ $replace.'+' => $replace
+ );
$str = strip_tags($str);
@@ -512,7 +499,7 @@ if ( ! function_exists('url_title'))
$str = strtolower($str);
}
- return trim(stripslashes($str));
+ return trim($str, $replace);
}
}
diff --git a/user_guide/changelog.html b/user_guide/changelog.html
index b87e61ba8..b85dc8d52 100644
--- a/user_guide/changelog.html
+++ b/user_guide/changelog.html
@@ -71,6 +71,11 @@ Change Log
--
cgit v1.2.3-24-g4f1b
From 010f1f4b315c8f5aef2e0b4c6571e4c4752f56c6 Mon Sep 17 00:00:00 2001
From: tubalmartin
Date: Sat, 3 Mar 2012 22:24:31 +0100
Subject: Fixed a bug - CI_Upload::_file_mime_type() could've failed if popen()
is used for the detection.
---
system/libraries/Upload.php | 2 +-
user_guide/changelog.html | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/system/libraries/Upload.php b/system/libraries/Upload.php
index 91fbf66ca..b0490de30 100644
--- a/system/libraries/Upload.php
+++ b/system/libraries/Upload.php
@@ -1095,7 +1095,7 @@ class CI_Upload {
$proc = @popen($cmd, 'r');
if (is_resource($proc))
{
- $mime = @fread($test, 512);
+ $mime = @fread($proc, 512);
@pclose($proc);
if ($mime !== FALSE)
{
diff --git a/user_guide/changelog.html b/user_guide/changelog.html
index b87e61ba8..cf693685b 100644
--- a/user_guide/changelog.html
+++ b/user_guide/changelog.html
@@ -78,6 +78,7 @@ Change Log
Fixed a bug (#697) - A wrong array key was used in the Upload library to check for mime-types.
Fixed a bug - form_open() compared $action against site_url() instead of base_url()
Fixed a bug - CI_Upload::_file_mime_type() could've failed if mime_content_type() is used for the detection and returns FALSE.
+
Fixed a bug - CI_Upload::_file_mime_type() could've failed if popen() is used for the detection.
Fixed a bug (#538) - Windows paths were ignored when using the Image Manipulation Class to create a new file.
Fixed a bug - When database caching was enabled, $this->db->query() checked the cache before binding variables which resulted in cached queries never being found.
Fixed a bug (#697) - A wrong array key was used in the Upload library to check for mime-types.
Fixed a bug - form_open() compared $action against site_url() instead of base_url()
Fixed a bug - CI_Upload::_file_mime_type() could've failed if mime_content_type() is used for the detection and returns FALSE.
-
Fixed a bug - CI_Upload::_file_mime_type() could've failed if popen() is used for the detection.
Fixed a bug (#538) - Windows paths were ignored when using the Image Manipulation Class to create a new file.
Fixed a bug - When database caching was enabled, $this->db->query() checked the cache before binding variables which resulted in cached queries never being found.
';
protected $error_string = '';
protected $_safe_form_data = FALSE;
-
+ protected $validation_data = array();
+
/**
* Constructor
*/
@@ -84,8 +85,9 @@ class CI_Form_validation {
*/
public function set_rules($field, $label = '', $rules = '')
{
- // No reason to set rules if we have no POST data
- if (count($_POST) === 0)
+ // No reason to set rules if we have no POST data
+ // or a validation array has not been specified
+ if (count($_POST) === 0 && count($this->validation_data) === 0)
{
return $this;
}
@@ -159,13 +161,31 @@ class CI_Form_validation {
return $this;
}
+ // --------------------------------------------------------------------
+
+ /**
+ * By default, form validation uses the $_POST array to validate
+ *
+ * If an array is set through this method, then this array will
+ * be used instead of the $_POST array
+ *
+ * @param array $data
+ */
+ public function set_data($data = '')
+ {
+ if ( ! empty($data) && is_array($data))
+ {
+ $this->validation_data = $data;
+ }
+ }
+
// --------------------------------------------------------------------
/**
* Set Error Message
*
* Lets users set their own error messages on the fly. Note: The key
- * name has to match the function name that it corresponds to.
+ * name has to match the function name that it corresponds to.
*
* @param string
* @param string
@@ -300,10 +320,14 @@ class CI_Form_validation {
public function run($group = '')
{
// Do we even have any data to process? Mm?
- if (count($_POST) === 0)
+ $validation_array = ( ! empty($this->validation_data)) ? $this->validation_data : $_POST;
+ if (count($validation_array) === 0)
{
return FALSE;
}
+
+ // Clear any previous validation data
+ $this->_reset_validation();
// Does the _field_data array containing the validation rules exist?
// If not, we look to see if they were assigned via a config file
@@ -342,18 +366,18 @@ class CI_Form_validation {
// corresponding $_POST item and test for errors
foreach ($this->_field_data as $field => $row)
{
- // Fetch the data from the corresponding $_POST array and cache it in the _field_data array.
+ // Fetch the data from the corresponding $_POST or validation array and cache it in the _field_data array.
// Depending on whether the field name is an array or a string will determine where we get it from.
if ($row['is_array'] === TRUE)
{
- $this->_field_data[$field]['postdata'] = $this->_reduce_array($_POST, $row['keys']);
+ $this->_field_data[$field]['postdata'] = $this->_reduce_array($validation_array, $row['keys']);
}
else
{
- if (isset($_POST[$field]) AND $_POST[$field] != "")
+ if (isset($validation_array[$field]) AND $validation_array[$field] != "")
{
- $this->_field_data[$field]['postdata'] = $_POST[$field];
+ $this->_field_data[$field]['postdata'] = $validation_array[$field];
}
}
@@ -867,12 +891,13 @@ class CI_Form_validation {
*/
public function matches($str, $field)
{
- if ( ! isset($_POST[$field]))
+ $validation_array = ( ! empty($this->validation_data)) ? $this->validation_data : $_POST;
+ if ( ! isset($validation_array[$field]))
{
return FALSE;
}
- return ($str === $_POST[$field]);
+ return ($str === $validation_array[$field]);
}
// --------------------------------------------------------------------
@@ -1282,7 +1307,25 @@ class CI_Form_validation {
{
return str_replace(array(''), array('<?php', '<?PHP', '<?', '?>'), $str);
}
-
+
+ // --------------------------------------------------------------------
+
+ /**
+ * Reset validation vars
+ *
+ * Prevents subsequent validation routines from being affected by the
+ * results of any previous validation routine due to the CI singleton.
+ *
+ * @return void
+ */
+ protected function _reset_validation()
+ {
+ $this->_field_data = array();
+ $this->_config_rules = array();
+ $this->_error_array = array();
+ $this->_error_messages = array();
+ $this->error_string = '';
+ }
}
/* End of file Form_validation.php */
diff --git a/user_guide_src/source/changelog.rst b/user_guide_src/source/changelog.rst
index 2ada9ee67..2158104f9 100644
--- a/user_guide_src/source/changelog.rst
+++ b/user_guide_src/source/changelog.rst
@@ -83,6 +83,7 @@ Release Date: Not Released
- Removed SHA1 function in the :doc:`Encryption Library `.
- Added $config['csrf_regeneration'] to the CSRF protection in the :doc:`Security library `, which makes token regeneration optional.
- Added function error_array() to return all error messages as an array in the Form_validation class.
+ - Added function set_data() to Form_validation library, which can be used in place of the default $_POST array.
- Changed the Session library to select only one row when using database sessions.
- Core
diff --git a/user_guide_src/source/libraries/form_validation.rst b/user_guide_src/source/libraries/form_validation.rst
index 09a192bb0..2fe315dba 100644
--- a/user_guide_src/source/libraries/form_validation.rst
+++ b/user_guide_src/source/libraries/form_validation.rst
@@ -579,7 +579,27 @@ must supply it as an array to the function. Example::
For more info please see the :ref:`using-arrays-as-field-names` section below.
-.. _saving-groups:
+Validating An Array (Other Than The $_POST Array)
+=================================================
+
+Sometimes you may want to validate an array that does not originate from $_POST data.
+
+In this case, you can specify the array to be validated::
+
+ $data = array(
+ 'username' => 'johndoe',
+ 'password' => 'mypassword',
+ 'passconf' => 'mypassword'
+ ));
+
+ $this->form_validation->set_data($data);
+
+Creating validation rules, running the validation and retrieving error messages works the same whether you are
+validating $_POST data or an array.
+
+For more info please see the :ref:`function-reference` section below.
+
+-.. _saving-groups:
************************************************
Saving Sets of Validation Rules to a Config File
@@ -930,6 +950,16 @@ $this->form_validation->set_message();
Permits you to set custom error messages. See :ref:`setting-error-messages`
+$this->form_validation->set_data();
+========================================
+
+ .. php:method:: set_data ($data = '')
+
+ :param array $data: The data to validate
+
+ Permits you to set an array for validation, instead of using the default
+ $_POST array.
+
$this->form_validation->error_array();
========================================
@@ -1019,5 +1049,4 @@ This function is identical to the **set_checkbox()** function above.
::
/>
- />
-
+ />
\ No newline at end of file
--
cgit v1.2.3-24-g4f1b
From 1a6971030718e2e92e6fc80750f7a14faf035257 Mon Sep 17 00:00:00 2001
From: tubalmartin
Date: Sun, 4 Mar 2012 16:01:11 +0100
Subject: Allow developers to use any string as a separator, not just dashes or
underscores. Backwards compatible when using 'dash' or 'underscore' as string
separator.
Tests: http://codepad.org/DWcxVH5r
---
system/helpers/url_helper.php | 29 +++++++++++++++++++----------
1 file changed, 19 insertions(+), 10 deletions(-)
diff --git a/system/helpers/url_helper.php b/system/helpers/url_helper.php
index cdb6dae9c..f1e8c6ac6 100644
--- a/system/helpers/url_helper.php
+++ b/system/helpers/url_helper.php
@@ -466,25 +466,34 @@ if ( ! function_exists('prep_url'))
* Create URL Title
*
* Takes a "title" string as input and creates a
- * human-friendly URL string with either a dash
- * or an underscore as the word separator.
+ * human-friendly URL string with a "separator" string
+ * as the word separator.
*
* @access public
* @param string the string
- * @param string the separator: dash, or underscore
+ * @param string the separator
* @return string
*/
if ( ! function_exists('url_title'))
{
- function url_title($str, $separator = 'dash', $lowercase = FALSE)
+ function url_title($str, $separator = '-', $lowercase = FALSE)
{
- $replace = $separator == 'dash' ? '-' : '_';
+ if ($separator == 'dash')
+ {
+ $separator = '-';
+ }
+ else if ($separator == 'underscore')
+ {
+ $separator = '_';
+ }
+
+ $q_separator = preg_quote($separator);
$trans = array(
- '&.+?;' => '',
- '[^a-z0-9 _-]' => '',
- '\s+' => $replace,
- $replace.'+' => $replace
+ '&.+?;' => '',
+ '[^a-z0-9 _-]' => '',
+ '\s+' => $separator,
+ '('.$q_separator.')+' => $separator
);
$str = strip_tags($str);
@@ -499,7 +508,7 @@ if ( ! function_exists('url_title'))
$str = strtolower($str);
}
- return trim($str, $replace);
+ return trim($str, $separator);
}
}
--
cgit v1.2.3-24-g4f1b
From a67ddc61937d178231607f66f2af3ef729f208d4 Mon Sep 17 00:00:00 2001
From: tubalmartin
Date: Sun, 4 Mar 2012 16:18:04 +0100
Subject: User guide updated
---
user_guide/helpers/url_helper.html | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/user_guide/helpers/url_helper.html b/user_guide/helpers/url_helper.html
index 76ec32ab2..c23c5ac92 100644
--- a/user_guide/helpers/url_helper.html
+++ b/user_guide/helpers/url_helper.html
@@ -231,11 +231,11 @@ $url_title = url_title($title);
-
The second parameter determines the word delimiter. By default dashes are used. Options are: dash, or underscore:
+
The second parameter determines the word delimiter. By default dashes are used.
url_title() performance and output improved. You can now use any string as the word delimiter. Backwards compatible with 'dash' or 'underscore' as words delimiters.
--
cgit v1.2.3-24-g4f1b
From c8da4fe74d9cb0d456a18316fa9a0879d50e33f4 Mon Sep 17 00:00:00 2001
From: Andrey Andreev
Date: Sun, 4 Mar 2012 19:20:33 +0200
Subject: Fix indentation for changes from pull #1121
---
system/libraries/Form_validation.php | 49 +++++++++++-----------
.../source/libraries/form_validation.rst | 18 ++++----
2 files changed, 33 insertions(+), 34 deletions(-)
diff --git a/system/libraries/Form_validation.php b/system/libraries/Form_validation.php
index b3efe82cf..1c0089d85 100644
--- a/system/libraries/Form_validation.php
+++ b/system/libraries/Form_validation.php
@@ -48,10 +48,7 @@ class CI_Form_validation {
protected $error_string = '';
protected $_safe_form_data = FALSE;
protected $validation_data = array();
-
- /**
- * Constructor
- */
+
public function __construct($rules = array())
{
$this->CI =& get_instance();
@@ -85,7 +82,7 @@ class CI_Form_validation {
*/
public function set_rules($field, $label = '', $rules = '')
{
- // No reason to set rules if we have no POST data
+ // No reason to set rules if we have no POST data
// or a validation array has not been specified
if (count($_POST) === 0 && count($this->validation_data) === 0)
{
@@ -162,23 +159,24 @@ class CI_Form_validation {
}
// --------------------------------------------------------------------
-
+
/**
* By default, form validation uses the $_POST array to validate
- *
+ *
* If an array is set through this method, then this array will
* be used instead of the $_POST array
- *
- * @param array $data
+ *
+ * @param array $data
+ * @return void
*/
public function set_data($data = '')
{
if ( ! empty($data) && is_array($data))
{
- $this->validation_data = $data;
+ $this->validation_data = $data;
}
}
-
+
// --------------------------------------------------------------------
/**
@@ -325,7 +323,7 @@ class CI_Form_validation {
{
return FALSE;
}
-
+
// Clear any previous validation data
$this->_reset_validation();
@@ -891,7 +889,7 @@ class CI_Form_validation {
*/
public function matches($str, $field)
{
- $validation_array = ( ! empty($this->validation_data)) ? $this->validation_data : $_POST;
+ $validation_array = ( ! empty($this->validation_data)) ? $this->validation_data : $_POST;
if ( ! isset($validation_array[$field]))
{
return FALSE;
@@ -1307,25 +1305,26 @@ class CI_Form_validation {
{
return str_replace(array(''), array('<?php', '<?PHP', '<?', '?>'), $str);
}
-
+
// --------------------------------------------------------------------
-
- /**
- * Reset validation vars
- *
- * Prevents subsequent validation routines from being affected by the
+
+ /**
+ * Reset validation vars
+ *
+ * Prevents subsequent validation routines from being affected by the
* results of any previous validation routine due to the CI singleton.
- *
- * @return void
- */
- protected function _reset_validation()
- {
+ *
+ * @return void
+ */
+ protected function _reset_validation()
+ {
$this->_field_data = array();
$this->_config_rules = array();
$this->_error_array = array();
$this->_error_messages = array();
$this->error_string = '';
- }
+ }
+
}
/* End of file Form_validation.php */
diff --git a/user_guide_src/source/libraries/form_validation.rst b/user_guide_src/source/libraries/form_validation.rst
index 2fe315dba..0d8218374 100644
--- a/user_guide_src/source/libraries/form_validation.rst
+++ b/user_guide_src/source/libraries/form_validation.rst
@@ -579,20 +579,20 @@ must supply it as an array to the function. Example::
For more info please see the :ref:`using-arrays-as-field-names` section below.
-Validating An Array (Other Than The $_POST Array)
-=================================================
+Validating an Array (other than $_POST)
+=======================================
Sometimes you may want to validate an array that does not originate from $_POST data.
In this case, you can specify the array to be validated::
- $data = array(
- 'username' => 'johndoe',
- 'password' => 'mypassword',
- 'passconf' => 'mypassword'
- ));
+ $data = array(
+ 'username' => 'johndoe',
+ 'password' => 'mypassword',
+ 'passconf' => 'mypassword'
+ );
- $this->form_validation->set_data($data);
+ $this->form_validation->set_data($data);
Creating validation rules, running the validation and retrieving error messages works the same whether you are
validating $_POST data or an array.
@@ -1049,4 +1049,4 @@ This function is identical to the **set_checkbox()** function above.
::
/>
- />
\ No newline at end of file
+ />
--
cgit v1.2.3-24-g4f1b