summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.hgflow8
-rw-r--r--.hgignore3
-rw-r--r--application/config/autoload.php24
-rw-r--r--application/config/config.php40
-rw-r--r--application/config/constants.php6
-rw-r--r--application/config/database.php16
-rw-r--r--application/config/foreign_chars.php2
-rw-r--r--application/config/hooks.php4
-rw-r--r--application/config/mimes.php8
-rw-r--r--application/config/profiler.php2
-rw-r--r--application/config/routes.php2
-rw-r--r--application/config/smileys.php4
-rw-r--r--application/config/user_agents.php6
-rw-r--r--application/controllers/welcome.php4
-rw-r--r--application/errors/error_404.php58
-rw-r--r--application/errors/error_db.php58
-rw-r--r--application/errors/error_general.php58
-rw-r--r--application/errors/error_php.php2
-rw-r--r--application/migrations/001_Create_accounts.php32
-rw-r--r--application/views/welcome_message.php108
-rw-r--r--index.php36
-rw-r--r--license.txt4
-rw-r--r--system/core/Benchmark.php4
-rw-r--r--system/core/CodeIgniter.php104
-rw-r--r--system/core/Common.php136
-rw-r--r--system/core/Config.php61
-rw-r--r--system/core/Controller.php9
-rw-r--r--system/core/Exceptions.php10
-rw-r--r--system/core/Hooks.php12
-rw-r--r--system/core/Input.php40
-rw-r--r--system/core/Lang.php19
-rw-r--r--system/core/Loader.php301
-rw-r--r--system/core/Model.php2
-rw-r--r--system/core/Output.php38
-rw-r--r--system/core/Router.php40
-rw-r--r--system/core/Security.php (renamed from system/libraries/Security.php)638
-rw-r--r--system/core/URI.php77
-rw-r--r--system/core/Utf8.php4
-rw-r--r--system/database/DB.php35
-rw-r--r--system/database/DB_active_rec.php74
-rw-r--r--system/database/DB_cache.php6
-rw-r--r--system/database/DB_driver.php40
-rw-r--r--system/database/DB_forge.php2
-rw-r--r--system/database/DB_result.php111
-rw-r--r--system/database/DB_utility.php6
-rw-r--r--system/database/drivers/mssql/mssql_driver.php10
-rw-r--r--system/database/drivers/mssql/mssql_forge.php4
-rw-r--r--system/database/drivers/mssql/mssql_result.php4
-rw-r--r--system/database/drivers/mssql/mssql_utility.php2
-rw-r--r--system/database/drivers/mysql/mysql_driver.php29
-rw-r--r--system/database/drivers/mysql/mysql_forge.php4
-rw-r--r--system/database/drivers/mysql/mysql_result.php4
-rw-r--r--system/database/drivers/mysql/mysql_utility.php4
-rw-r--r--system/database/drivers/mysqli/mysqli_driver.php23
-rw-r--r--system/database/drivers/mysqli/mysqli_forge.php4
-rw-r--r--system/database/drivers/mysqli/mysqli_result.php4
-rw-r--r--system/database/drivers/mysqli/mysqli_utility.php2
-rw-r--r--system/database/drivers/oci8/oci8_driver.php138
-rw-r--r--system/database/drivers/oci8/oci8_forge.php4
-rw-r--r--system/database/drivers/oci8/oci8_result.php34
-rw-r--r--system/database/drivers/oci8/oci8_utility.php2
-rw-r--r--system/database/drivers/odbc/odbc_driver.php2
-rw-r--r--system/database/drivers/odbc/odbc_forge.php4
-rw-r--r--system/database/drivers/odbc/odbc_result.php4
-rw-r--r--system/database/drivers/odbc/odbc_utility.php2
-rw-r--r--system/database/drivers/postgre/postgre_driver.php20
-rw-r--r--system/database/drivers/postgre/postgre_forge.php10
-rw-r--r--system/database/drivers/postgre/postgre_result.php4
-rw-r--r--system/database/drivers/postgre/postgre_utility.php2
-rw-r--r--system/database/drivers/sqlite/sqlite_driver.php2
-rw-r--r--system/database/drivers/sqlite/sqlite_forge.php6
-rw-r--r--system/database/drivers/sqlite/sqlite_result.php4
-rw-r--r--system/database/drivers/sqlite/sqlite_utility.php4
-rw-r--r--system/helpers/array_helper.php8
-rw-r--r--system/helpers/captcha_helper.php20
-rw-r--r--system/helpers/cookie_helper.php6
-rw-r--r--system/helpers/date_helper.php22
-rw-r--r--system/helpers/directory_helper.php4
-rw-r--r--system/helpers/download_helper.php11
-rw-r--r--system/helpers/email_helper.php2
-rw-r--r--system/helpers/file_helper.php15
-rw-r--r--system/helpers/form_helper.php45
-rw-r--r--system/helpers/html_helper.php26
-rw-r--r--system/helpers/inflector_helper.php26
-rw-r--r--system/helpers/language_helper.php2
-rw-r--r--system/helpers/number_helper.php2
-rw-r--r--system/helpers/path_helper.php4
-rw-r--r--system/helpers/security_helper.php38
-rw-r--r--system/helpers/smiley_helper.php24
-rw-r--r--system/helpers/string_helper.php8
-rw-r--r--system/helpers/text_helper.php20
-rw-r--r--system/helpers/typography_helper.php7
-rw-r--r--system/helpers/url_helper.php6
-rw-r--r--system/helpers/xml_helper.php4
-rw-r--r--system/language/english/email_lang.php6
-rw-r--r--system/language/english/form_validation_lang.php3
-rw-r--r--system/language/english/ftp_lang.php14
-rw-r--r--system/language/english/imglib_lang.php10
-rw-r--r--system/language/english/profiler_lang.php3
-rw-r--r--system/libraries/Cache/Cache.php36
-rw-r--r--system/libraries/Cache/drivers/Cache_apc.php26
-rw-r--r--system/libraries/Cache/drivers/Cache_dummy.php26
-rw-r--r--system/libraries/Cache/drivers/Cache_file.php42
-rw-r--r--system/libraries/Cache/drivers/Cache_memcached.php2
-rw-r--r--system/libraries/Calendar.php20
-rw-r--r--system/libraries/Cart.php22
-rw-r--r--system/libraries/Driver.php30
-rw-r--r--system/libraries/Email.php90
-rw-r--r--system/libraries/Encrypt.php4
-rw-r--r--system/libraries/Form_validation.php43
-rw-r--r--system/libraries/Ftp.php8
-rw-r--r--system/libraries/Image_lib.php118
-rw-r--r--system/libraries/Javascript.php12
-rw-r--r--system/libraries/Log.php10
-rw-r--r--system/libraries/Pagination.php18
-rw-r--r--system/libraries/Parser.php18
-rw-r--r--system/libraries/Profiler.php104
-rw-r--r--system/libraries/Session.php38
-rw-r--r--system/libraries/Sha1.php8
-rw-r--r--system/libraries/Table.php12
-rw-r--r--system/libraries/Trackback.php16
-rw-r--r--system/libraries/Typography.php36
-rw-r--r--system/libraries/Unit_test.php2
-rw-r--r--system/libraries/Upload.php52
-rw-r--r--system/libraries/User_agent.php12
-rw-r--r--system/libraries/Xmlrpc.php96
-rw-r--r--system/libraries/Xmlrpcs.php44
-rw-r--r--system/libraries/Zip.php12
-rw-r--r--system/libraries/javascript/Jquery.php218
-rw-r--r--user_guide/changelog.html207
-rw-r--r--user_guide/database/active_record.html74
-rw-r--r--user_guide/database/caching.html36
-rw-r--r--user_guide/database/call_function.html10
-rw-r--r--user_guide/database/configuration.html20
-rw-r--r--user_guide/database/connecting.html8
-rw-r--r--user_guide/database/examples.html14
-rw-r--r--user_guide/database/fields.html6
-rw-r--r--user_guide/database/forge.html12
-rw-r--r--user_guide/database/helpers.html14
-rw-r--r--user_guide/database/index.html6
-rw-r--r--user_guide/database/queries.html16
-rw-r--r--user_guide/database/results.html22
-rw-r--r--user_guide/database/table_data.html8
-rw-r--r--user_guide/database/transactions.html16
-rw-r--r--user_guide/database/utilities.html22
-rw-r--r--user_guide/doc_style/index.html2
-rw-r--r--user_guide/doc_style/template.html2
-rw-r--r--user_guide/general/alternative_php.html18
-rw-r--r--user_guide/general/ancillary_classes.html2
-rw-r--r--user_guide/general/autoloader.html4
-rw-r--r--user_guide/general/caching.html10
-rw-r--r--user_guide/general/cli.html150
-rw-r--r--user_guide/general/common_functions.html8
-rw-r--r--user_guide/general/controllers.html56
-rw-r--r--user_guide/general/core_classes.html6
-rw-r--r--user_guide/general/creating_drivers.html2
-rw-r--r--user_guide/general/creating_libraries.html36
-rw-r--r--user_guide/general/credits.html7
-rw-r--r--user_guide/general/drivers.html8
-rw-r--r--user_guide/general/environments.html50
-rw-r--r--user_guide/general/errors.html20
-rw-r--r--user_guide/general/helpers.html28
-rw-r--r--user_guide/general/hooks.html18
-rw-r--r--user_guide/general/libraries.html4
-rw-r--r--user_guide/general/managing_apps.html10
-rw-r--r--user_guide/general/models.html20
-rw-r--r--user_guide/general/profiling.html107
-rw-r--r--user_guide/general/quick_reference.html2
-rw-r--r--user_guide/general/requirements.html2
-rw-r--r--user_guide/general/reserved_names.html7
-rw-r--r--user_guide/general/routing.html19
-rw-r--r--user_guide/general/security.html34
-rw-r--r--user_guide/general/styleguide.html66
-rw-r--r--user_guide/general/urls.html10
-rw-r--r--user_guide/general/views.html30
-rw-r--r--user_guide/helpers/array_helper.html18
-rw-r--r--user_guide/helpers/captcha_helper.html20
-rw-r--r--user_guide/helpers/cookie_helper.html12
-rw-r--r--user_guide/helpers/date_helper.html34
-rw-r--r--user_guide/helpers/directory_helper.html6
-rw-r--r--user_guide/helpers/download_helper.html2
-rw-r--r--user_guide/helpers/email_helper.html2
-rw-r--r--user_guide/helpers/file_helper.html18
-rw-r--r--user_guide/helpers/form_helper.html58
-rw-r--r--user_guide/helpers/html_helper.html31
-rw-r--r--user_guide/helpers/inflector_helper.html12
-rw-r--r--user_guide/helpers/language_helper.html4
-rw-r--r--user_guide/helpers/number_helper.html4
-rw-r--r--user_guide/helpers/path_helper.html2
-rw-r--r--user_guide/helpers/security_helper.html16
-rw-r--r--user_guide/helpers/smiley_helper.html10
-rw-r--r--user_guide/helpers/string_helper.html8
-rw-r--r--user_guide/helpers/text_helper.html32
-rw-r--r--user_guide/helpers/typography_helper.html4
-rw-r--r--user_guide/helpers/url_helper.html50
-rw-r--r--user_guide/helpers/xml_helper.html4
-rw-r--r--user_guide/index.html2
-rw-r--r--user_guide/installation/downloads.html7
-rw-r--r--user_guide/installation/index.html18
-rw-r--r--user_guide/installation/troubleshooting.html6
-rw-r--r--user_guide/installation/upgrade_120.html2
-rw-r--r--user_guide/installation/upgrade_130.html10
-rw-r--r--user_guide/installation/upgrade_131.html4
-rw-r--r--user_guide/installation/upgrade_132.html4
-rw-r--r--user_guide/installation/upgrade_133.html10
-rw-r--r--user_guide/installation/upgrade_140.html8
-rw-r--r--user_guide/installation/upgrade_141.html12
-rw-r--r--user_guide/installation/upgrade_150.html10
-rw-r--r--user_guide/installation/upgrade_152.html4
-rw-r--r--user_guide/installation/upgrade_153.html2
-rw-r--r--user_guide/installation/upgrade_154.html2
-rw-r--r--user_guide/installation/upgrade_160.html8
-rw-r--r--user_guide/installation/upgrade_161.html2
-rw-r--r--user_guide/installation/upgrade_162.html2
-rw-r--r--user_guide/installation/upgrade_163.html2
-rw-r--r--user_guide/installation/upgrade_170.html10
-rw-r--r--user_guide/installation/upgrade_171.html2
-rw-r--r--user_guide/installation/upgrade_172.html2
-rw-r--r--user_guide/installation/upgrade_200.html12
-rw-r--r--user_guide/installation/upgrade_201.html18
-rw-r--r--user_guide/installation/upgrade_202.html97
-rw-r--r--user_guide/installation/upgrade_203.html125
-rw-r--r--user_guide/installation/upgrade_b11.html8
-rw-r--r--user_guide/installation/upgrading.html4
-rw-r--r--user_guide/libraries/benchmark.html10
-rw-r--r--user_guide/libraries/caching.html22
-rw-r--r--user_guide/libraries/calendar.html14
-rw-r--r--user_guide/libraries/cart.html48
-rw-r--r--user_guide/libraries/config.html42
-rw-r--r--user_guide/libraries/email.html26
-rw-r--r--user_guide/libraries/encryption.html36
-rw-r--r--user_guide/libraries/file_uploading.html60
-rw-r--r--user_guide/libraries/form_validation.html96
-rw-r--r--user_guide/libraries/ftp.html38
-rw-r--r--user_guide/libraries/image_lib.html66
-rw-r--r--user_guide/libraries/input.html46
-rw-r--r--user_guide/libraries/javascript.html36
-rw-r--r--user_guide/libraries/language.html24
-rw-r--r--user_guide/libraries/loader.html70
-rw-r--r--user_guide/libraries/output.html22
-rw-r--r--user_guide/libraries/pagination.html24
-rw-r--r--user_guide/libraries/parser.html18
-rw-r--r--user_guide/libraries/security.html10
-rw-r--r--user_guide/libraries/sessions.html71
-rw-r--r--user_guide/libraries/table.html30
-rw-r--r--user_guide/libraries/trackback.html28
-rw-r--r--user_guide/libraries/typography.html6
-rw-r--r--user_guide/libraries/unit_testing.html18
-rw-r--r--user_guide/libraries/uri.html16
-rw-r--r--user_guide/libraries/user_agent.html12
-rw-r--r--user_guide/libraries/xmlrpc.html48
-rw-r--r--user_guide/libraries/zip.html36
-rw-r--r--user_guide/license.html4
-rw-r--r--user_guide/nav/hacks.txt2
-rwxr-xr-xuser_guide/nav/moo.fx.js4
-rw-r--r--user_guide/nav/nav.js3
-rwxr-xr-xuser_guide/nav/prototype.lite.js92
-rw-r--r--user_guide/overview/appflow.html4
-rw-r--r--user_guide/overview/at_a_glance.html14
-rw-r--r--user_guide/overview/cheatsheets.html2
-rw-r--r--user_guide/overview/features.html8
-rw-r--r--user_guide/overview/getting_started.html4
-rw-r--r--user_guide/overview/goals.html8
-rw-r--r--user_guide/overview/index.html2
-rw-r--r--user_guide/overview/mvc.html8
-rw-r--r--user_guide/toc.html6
-rw-r--r--user_guide/userguide.css2
267 files changed, 4088 insertions, 3118 deletions
diff --git a/.hgflow b/.hgflow
new file mode 100644
index 000000000..ad6e56e0f
--- /dev/null
+++ b/.hgflow
@@ -0,0 +1,8 @@
+[Basic]
+develop = develop
+feature = feature/
+version_tag =
+publish = default
+release = release/
+hotfix = hotfix/
+
diff --git a/.hgignore b/.hgignore
index 880040b30..5ee4d823e 100644
--- a/.hgignore
+++ b/.hgignore
@@ -3,4 +3,5 @@ syntax: glob
.DS_Store
syntax: regexp
-system/cache/(?!index\.html|\.htaccess) \ No newline at end of file
+application/cache/(?!index\.html|\.htaccess)
+application/logs/(?!index\.html|\.htaccess)
diff --git a/application/config/autoload.php b/application/config/autoload.php
index 90b1a808f..1c492a20d 100644
--- a/application/config/autoload.php
+++ b/application/config/autoload.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| AUTO-LOADER
@@ -8,7 +8,7 @@
| In order to keep the framework as light-weight as possible only the
| absolute minimal resources are loaded by default. For example,
| the database is not connected to automatically since no assumption
-| is made regarding whether you intend to use it. This file lets
+| is made regarding whether you intend to use it. This file lets
| you globally define which systems you would like loaded with every
| request.
|
@@ -29,20 +29,20 @@
/*
| -------------------------------------------------------------------
-| Auto-load Packges
+| Auto-load Packges
| -------------------------------------------------------------------
| Prototype:
|
-| $autoload['packages'] = array(APPPATH.'third_party', '/usr/local/shared');
+| $autoload['packages'] = array(APPPATH.'third_party', '/usr/local/shared');
|
*/
-$autoload['packages'] = array(APPPATH.'third_party');
+$autoload['packages'] = array();
/*
| -------------------------------------------------------------------
-| Auto-load Libraries
+| Auto-load Libraries
| -------------------------------------------------------------------
| These are the classes located in the system/libraries folder
| or in your application/libraries folder.
@@ -57,7 +57,7 @@ $autoload['libraries'] = array();
/*
| -------------------------------------------------------------------
-| Auto-load Helper Files
+| Auto-load Helper Files
| -------------------------------------------------------------------
| Prototype:
|
@@ -69,14 +69,14 @@ $autoload['helper'] = array();
/*
| -------------------------------------------------------------------
-| Auto-load Config files
+| Auto-load Config files
| -------------------------------------------------------------------
| Prototype:
|
| $autoload['config'] = array('config1', 'config2');
|
| NOTE: This item is intended for use ONLY if you have created custom
-| config files. Otherwise, leave it blank.
+| config files. Otherwise, leave it blank.
|
*/
@@ -85,13 +85,13 @@ $autoload['config'] = array();
/*
| -------------------------------------------------------------------
-| Auto-load Language files
+| Auto-load Language files
| -------------------------------------------------------------------
| Prototype:
|
| $autoload['language'] = array('lang1', 'lang2');
|
-| NOTE: Do not include the "_lang" part of your file. For example
+| NOTE: Do not include the "_lang" part of your file. For example
| "codeigniter_lang.php" would be referenced as array('codeigniter');
|
*/
@@ -101,7 +101,7 @@ $autoload['language'] = array();
/*
| -------------------------------------------------------------------
-| Auto-load Models
+| Auto-load Models
| -------------------------------------------------------------------
| Prototype:
|
diff --git a/application/config/config.php b/application/config/config.php
index 1ec65435e..bcda884f0 100644
--- a/application/config/config.php
+++ b/application/config/config.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
|--------------------------------------------------------------------------
@@ -34,7 +34,7 @@ $config['index_page'] = 'index.php';
|--------------------------------------------------------------------------
|
| This item determines which server global should be used to retrieve the
-| URI string. The default setting of 'AUTO' works for most servers.
+| URI string. The default setting of 'AUTO' works for most servers.
| If your links do not seem to work, try one of the other delicious flavors:
|
| 'AUTO' Default - auto detects
@@ -88,7 +88,7 @@ $config['charset'] = 'UTF-8';
|--------------------------------------------------------------------------
|
| If you would like to use the 'hooks' feature you must enable it by
-| setting this variable to TRUE (boolean). See the user guide for details.
+| setting this variable to TRUE (boolean). See the user guide for details.
|
*/
$config['enable_hooks'] = FALSE;
@@ -100,7 +100,7 @@ $config['enable_hooks'] = FALSE;
|--------------------------------------------------------------------------
|
| This item allows you to set the filename/classname prefix when extending
-| native libraries. For more information please see the user guide:
+| native libraries. For more information please see the user guide:
|
| http://codeigniter.com/user_guide/general/core_classes.html
| http://codeigniter.com/user_guide/general/creating_libraries.html
@@ -115,11 +115,11 @@ $config['subclass_prefix'] = 'MY_';
|--------------------------------------------------------------------------
|
| This lets you specify with a regular expression which characters are permitted
-| within your URLs. When someone tries to submit a URL with disallowed
+| within your URLs. When someone tries to submit a URL with disallowed
| characters they will get a warning message.
|
| As a security measure you are STRONGLY encouraged to restrict URLs to
-| as few characters as possible. By default only these are allowed: a-z 0-9~%.:_-
+| as few characters as possible. By default only these are allowed: a-z 0-9~%.:_-
|
| Leave blank to allow all characters -- but only if you are insane.
|
@@ -137,7 +137,7 @@ $config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
| By default CodeIgniter uses search-engine friendly segment based URLs:
| example.com/who/what/where/
|
-| By default CodeIgniter enables access to the $_GET array. If for some
+| By default CodeIgniter enables access to the $_GET array. If for some
| reason you would like to disable it, set 'allow_get_array' to FALSE.
|
| You can optionally enable standard query string based URLs:
@@ -210,7 +210,7 @@ $config['log_date_format'] = 'Y-m-d H:i:s';
|--------------------------------------------------------------------------
|
| Leave this BLANK unless you would like to set something other than the default
-| system/cache/ folder. Use a full server path with trailing slash.
+| system/cache/ folder. Use a full server path with trailing slash.
|
*/
$config['cache_path'] = '';
@@ -221,7 +221,7 @@ $config['cache_path'] = '';
|--------------------------------------------------------------------------
|
| If you use the Encryption class or the Session class you
-| MUST set an encryption key. See the user guide for info.
+| MUST set an encryption key. See the user guide for info.
|
*/
$config['encryption_key'] = '';
@@ -233,9 +233,9 @@ $config['encryption_key'] = '';
|
| 'sess_cookie_name' = the name you want for the cookie
| 'sess_expiration' = the number of SECONDS you want the session to last.
-| by default sessions last 7200 seconds (two hours). Set to zero for no expiration.
+| by default sessions last 7200 seconds (two hours). Set to zero for no expiration.
| 'sess_expire_on_close' = Whether to cause the session to expire automatically
-| when the browser window is closed
+| when the browser window is closed
| 'sess_encrypt_cookie' = Whether to encrypt the cookie
| 'sess_use_database' = Whether to save the session data to a database
| 'sess_table_name' = The name of the session database table
@@ -261,8 +261,8 @@ $config['sess_time_to_update'] = 300;
|
| 'cookie_prefix' = Set a prefix if you need to avoid collisions
| 'cookie_domain' = Set to .your-domain.com for site-wide cookies
-| 'cookie_path' = Typically will be a forward slash
-| 'cookie_secure' = Cookies will only be set if a secure HTTPS connection exists.
+| 'cookie_path' = Typically will be a forward slash
+| 'cookie_secure' = Cookies will only be set if a secure HTTPS connection exists.
|
*/
$config['cookie_prefix'] = "";
@@ -303,16 +303,16 @@ $config['csrf_expire'] = 7200;
| Output Compression
|--------------------------------------------------------------------------
|
-| Enables Gzip output compression for faster page loads. When enabled,
+| Enables Gzip output compression for faster page loads. When enabled,
| the output class will test whether your server supports Gzip.
| Even if it does, however, not all browsers support compression
| so enable only if you are reasonably sure your visitors can handle it.
|
-| VERY IMPORTANT: If you are getting a blank page when compression is enabled it
+| VERY IMPORTANT: If you are getting a blank page when compression is enabled it
| means you are prematurely outputting something to your browser. It could
-| even be a line of whitespace at the end of one of your scripts. For
+| even be a line of whitespace at the end of one of your scripts. For
| compression to work, nothing can be sent before the output buffer is called
-| by the output class. Do not 'echo' any values with compression enabled.
+| by the output class. Do not 'echo' any values with compression enabled.
|
*/
$config['compress_output'] = FALSE;
@@ -322,9 +322,9 @@ $config['compress_output'] = FALSE;
| Master Time Reference
|--------------------------------------------------------------------------
|
-| Options are 'local' or 'gmt'. This pref tells the system whether to use
+| Options are 'local' or 'gmt'. This pref tells the system whether to use
| your server's local time as the master 'now' reference, or convert it to
-| GMT. See the 'date helper' page of the user guide for information
+| GMT. See the 'date helper' page of the user guide for information
| regarding date handling.
|
*/
@@ -338,7 +338,7 @@ $config['time_reference'] = 'local';
|
| If your PHP installation does not have short tag support enabled CI
| can rewrite the tags on-the-fly, enabling you to utilize that syntax
-| in your view files. Options are TRUE or FALSE (boolean)
+| in your view files. Options are TRUE or FALSE (boolean)
|
*/
$config['rewrite_short_tags'] = FALSE;
diff --git a/application/config/constants.php b/application/config/constants.php
index 4a879d360..edaefe86b 100644
--- a/application/config/constants.php
+++ b/application/config/constants.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
|--------------------------------------------------------------------------
@@ -6,10 +6,10 @@
|--------------------------------------------------------------------------
|
| These prefs are used when checking and setting modes when working
-| with the file system. The defaults are fine on servers with proper
+| with the file system. The defaults are fine on servers with proper
| security, but you may wish (or even need) to change the values in
| certain environments (Apache running a separate process for each
-| user, PHP under CGI with Apache suEXEC, etc.). Octal values should
+| user, PHP under CGI with Apache suEXEC, etc.). Octal values should
| always be used to set the mode correctly.
|
*/
diff --git a/application/config/database.php b/application/config/database.php
index 24d611ac5..e77bf97df 100644
--- a/application/config/database.php
+++ b/application/config/database.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| DATABASE CONNECTIVITY SETTINGS
@@ -16,23 +16,29 @@
| ['username'] The username used to connect to the database
| ['password'] The password used to connect to the database
| ['database'] The name of the database you want to connect to
-| ['dbdriver'] The database type. ie: mysql. Currently supported:
- mysql, mysqli, postgre, odbc, mssql, sqlite, oci8
+| ['dbdriver'] The database type. ie: mysql. Currently supported:
+| mysql, mysqli, postgre, odbc, mssql, sqlite, oci8
| ['dbprefix'] You can add an optional prefix, which will be added
-| to the table name when using the Active Record class
+| to the table name when using the Active Record class
| ['pconnect'] TRUE/FALSE - Whether to use a persistent connection
| ['db_debug'] TRUE/FALSE - Whether database errors should be displayed.
| ['cache_on'] TRUE/FALSE - Enables/disables query caching
| ['cachedir'] The path to the folder where cache files should be stored
| ['char_set'] The character set used in communicating with the database
| ['dbcollat'] The character collation used in communicating with the database
+| NOTE: For MySQL and MySQLi databases, this setting is only used
+| as a backup if your server is running PHP < 5.2.3 or MySQL < 5.0.7.
+| There is an incompatibility in PHP with mysql_real_escape_string() which
+| can make your site vulnerable to SQL injection if you are using a
+| multi-byte character set and are running versions lower than these.
+| Sites using Latin-1 or UTF-8 database character set and collation are unaffected.
| ['swap_pre'] A default table prefix that should be swapped with the dbprefix
| ['autoinit'] Whether or not to automatically initialize the database.
| ['stricton'] TRUE/FALSE - forces 'Strict Mode' connections
| - good for ensuring strict SQL while developing
|
| The $active_group variable lets you choose which connection group to
-| make active. By default there is only one group (the 'default' group).
+| make active. By default there is only one group (the 'default' group).
|
| The $active_record variables lets you determine whether or not to load
| the active record class
diff --git a/application/config/foreign_chars.php b/application/config/foreign_chars.php
index 14b0d7373..111fe5821 100644
--- a/application/config/foreign_chars.php
+++ b/application/config/foreign_chars.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| Foreign Characters
diff --git a/application/config/hooks.php b/application/config/hooks.php
index a4ad2be6d..4b2666569 100644
--- a/application/config/hooks.php
+++ b/application/config/hooks.php
@@ -1,10 +1,10 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| Hooks
| -------------------------------------------------------------------------
| This file lets you define "hooks" to extend CI without hacking the core
-| files. Please see the user guide for info:
+| files. Please see the user guide for info:
|
| http://codeigniter.com/user_guide/general/hooks.html
|
diff --git a/application/config/mimes.php b/application/config/mimes.php
index 8065794ff..e573ed061 100644
--- a/application/config/mimes.php
+++ b/application/config/mimes.php
@@ -1,9 +1,9 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| MIME TYPES
| -------------------------------------------------------------------
-| This file contains an array of mime types. It is used by the
+| This file contains an array of mime types. It is used by the
| Upload class to help identify allowed file types.
|
*/
@@ -51,7 +51,7 @@ $mimes = array( 'hqx' => 'application/mac-binhex40',
'tgz' => array('application/x-tar', 'application/x-gzip-compressed'),
'xhtml' => 'application/xhtml+xml',
'xht' => 'application/xhtml+xml',
- 'zip' => array('application/x-zip', 'application/zip', 'application/x-zip-compressed'),
+ 'zip' => array('application/x-zip', 'application/zip', 'application/x-zip-compressed'),
'mid' => 'audio/midi',
'midi' => 'audio/midi',
'mpga' => 'audio/mpeg',
@@ -71,7 +71,7 @@ $mimes = array( 'hqx' => 'application/mac-binhex40',
'jpeg' => array('image/jpeg', 'image/pjpeg'),
'jpg' => array('image/jpeg', 'image/pjpeg'),
'jpe' => array('image/jpeg', 'image/pjpeg'),
- 'png' => array('image/png', 'image/x-png'),
+ 'png' => array('image/png', 'image/x-png'),
'tiff' => 'image/tiff',
'tif' => 'image/tiff',
'css' => 'text/css',
diff --git a/application/config/profiler.php b/application/config/profiler.php
index f8a5b1a1e..b0f43b1d8 100644
--- a/application/config/profiler.php
+++ b/application/config/profiler.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| Profiler Sections
diff --git a/application/config/routes.php b/application/config/routes.php
index 5f9a58343..480645c83 100644
--- a/application/config/routes.php
+++ b/application/config/routes.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| URI ROUTING
diff --git a/application/config/smileys.php b/application/config/smileys.php
index 25d28b2c4..5b2964e24 100644
--- a/application/config/smileys.php
+++ b/application/config/smileys.php
@@ -1,10 +1,10 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| SMILEYS
| -------------------------------------------------------------------
| This file contains an array of smileys for use with the emoticon helper.
-| Individual images can be used to replace multiple simileys. For example:
+| Individual images can be used to replace multiple simileys. For example:
| :-) and :) use the same image replacement.
|
| Please see user guide for more info:
diff --git a/application/config/user_agents.php b/application/config/user_agents.php
index e2d3c3af0..3c018a357 100644
--- a/application/config/user_agents.php
+++ b/application/config/user_agents.php
@@ -1,11 +1,11 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| USER AGENT TYPES
| -------------------------------------------------------------------
-| This file contains four arrays of user agent data. It is used by the
+| This file contains four arrays of user agent data. It is used by the
| User Agent Class to help identify browser, platform, robot, and
-| mobile device data. The array keys are used to identify the device
+| mobile device data. The array keys are used to identify the device
| and the array values are used to set the actual name of the item.
|
*/
diff --git a/application/controllers/welcome.php b/application/controllers/welcome.php
index 21bef43d9..65d55bffd 100644
--- a/application/controllers/welcome.php
+++ b/application/controllers/welcome.php
@@ -7,10 +7,10 @@ class Welcome extends CI_Controller {
*
* Maps to the following URL
* http://example.com/index.php/welcome
- * - or -
+ * - or -
* http://example.com/index.php/welcome/index
* - or -
- * Since this controller is set as the default controller in
+ * Since this controller is set as the default controller in
* config/routes.php, it's displayed at http://example.com/
*
* So any other public methods not prefixed with an underscore will
diff --git a/application/errors/error_404.php b/application/errors/error_404.php
index a304f4561..792726a67 100644
--- a/application/errors/error_404.php
+++ b/application/errors/error_404.php
@@ -1,32 +1,60 @@
-<html>
+<!DOCTYPE html>
+<html lang="en">
<head>
<title>404 Page Not Found</title>
<style type="text/css">
+::selection{ background-color: #E13300; color: white; }
+::moz-selection{ background-color: #E13300; color: white; }
+::webkit-selection{ background-color: #E13300; color: white; }
+
body {
-background-color: #fff;
-margin: 40px;
-font-family: Lucida Grande, Verdana, Sans-serif;
-font-size: 12px;
-color: #000;
+ background-color: #fff;
+ margin: 40px;
+ font: 13px/20px normal Helvetica, Arial, sans-serif;
+ color: #4F5155;
}
-#content {
-border: #999 1px solid;
-background-color: #fff;
-padding: 20px 20px 12px 20px;
+a {
+ color: #003399;
+ background-color: transparent;
+ font-weight: normal;
}
h1 {
-font-weight: normal;
-font-size: 14px;
-color: #990000;
-margin: 0 0 4px 0;
+ color: #444;
+ background-color: transparent;
+ border-bottom: 1px solid #D0D0D0;
+ font-size: 19px;
+ font-weight: normal;
+ margin: 0 0 14px 0;
+ padding: 14px 15px 10px 15px;
+}
+
+code {
+ font-family: Consolas, Monaco, Courier New, Courier, monospace;
+ font-size: 12px;
+ background-color: #f9f9f9;
+ border: 1px solid #D0D0D0;
+ color: #002166;
+ display: block;
+ margin: 14px 0 14px 0;
+ padding: 12px 10px 12px 10px;
+}
+
+#container {
+ margin: 10px;
+ border: 1px solid #D0D0D0;
+ -webkit-box-shadow: 0 0 8px #D0D0D0;
+}
+
+p {
+ margin: 12px 15px 12px 15px;
}
</style>
</head>
<body>
- <div id="content">
+ <div id="container">
<h1><?php echo $heading; ?></h1>
<?php echo $message; ?>
</div>
diff --git a/application/errors/error_db.php b/application/errors/error_db.php
index 181de960b..b396cda9f 100644
--- a/application/errors/error_db.php
+++ b/application/errors/error_db.php
@@ -1,32 +1,60 @@
-<html>
+<!DOCTYPE html>
+<html lang="en">
<head>
<title>Database Error</title>
<style type="text/css">
+::selection{ background-color: #E13300; color: white; }
+::moz-selection{ background-color: #E13300; color: white; }
+::webkit-selection{ background-color: #E13300; color: white; }
+
body {
-background-color: #fff;
-margin: 40px;
-font-family: Lucida Grande, Verdana, Sans-serif;
-font-size: 12px;
-color: #000;
+ background-color: #fff;
+ margin: 40px;
+ font: 13px/20px normal Helvetica, Arial, sans-serif;
+ color: #4F5155;
}
-#content {
-border: #999 1px solid;
-background-color: #fff;
-padding: 20px 20px 12px 20px;
+a {
+ color: #003399;
+ background-color: transparent;
+ font-weight: normal;
}
h1 {
-font-weight: normal;
-font-size: 14px;
-color: #990000;
-margin: 0 0 4px 0;
+ color: #444;
+ background-color: transparent;
+ border-bottom: 1px solid #D0D0D0;
+ font-size: 19px;
+ font-weight: normal;
+ margin: 0 0 14px 0;
+ padding: 14px 15px 10px 15px;
+}
+
+code {
+ font-family: Consolas, Monaco, Courier New, Courier, monospace;
+ font-size: 12px;
+ background-color: #f9f9f9;
+ border: 1px solid #D0D0D0;
+ color: #002166;
+ display: block;
+ margin: 14px 0 14px 0;
+ padding: 12px 10px 12px 10px;
+}
+
+#container {
+ margin: 10px;
+ border: 1px solid #D0D0D0;
+ -webkit-box-shadow: 0 0 8px #D0D0D0;
+}
+
+p {
+ margin: 12px 15px 12px 15px;
}
</style>
</head>
<body>
- <div id="content">
+ <div id="container">
<h1><?php echo $heading; ?></h1>
<?php echo $message; ?>
</div>
diff --git a/application/errors/error_general.php b/application/errors/error_general.php
index 7734d34c7..fd63ce2c5 100644
--- a/application/errors/error_general.php
+++ b/application/errors/error_general.php
@@ -1,32 +1,60 @@
-<html>
+<!DOCTYPE html>
+<html lang="en">
<head>
<title>Error</title>
<style type="text/css">
+::selection{ background-color: #E13300; color: white; }
+::moz-selection{ background-color: #E13300; color: white; }
+::webkit-selection{ background-color: #E13300; color: white; }
+
body {
-background-color: #fff;
-margin: 40px;
-font-family: Lucida Grande, Verdana, Sans-serif;
-font-size: 12px;
-color: #000;
+ background-color: #fff;
+ margin: 40px;
+ font: 13px/20px normal Helvetica, Arial, sans-serif;
+ color: #4F5155;
}
-#content {
-border: #999 1px solid;
-background-color: #fff;
-padding: 20px 20px 12px 20px;
+a {
+ color: #003399;
+ background-color: transparent;
+ font-weight: normal;
}
h1 {
-font-weight: normal;
-font-size: 14px;
-color: #990000;
-margin: 0 0 4px 0;
+ color: #444;
+ background-color: transparent;
+ border-bottom: 1px solid #D0D0D0;
+ font-size: 19px;
+ font-weight: normal;
+ margin: 0 0 14px 0;
+ padding: 14px 15px 10px 15px;
+}
+
+code {
+ font-family: Consolas, Monaco, Courier New, Courier, monospace;
+ font-size: 12px;
+ background-color: #f9f9f9;
+ border: 1px solid #D0D0D0;
+ color: #002166;
+ display: block;
+ margin: 14px 0 14px 0;
+ padding: 12px 10px 12px 10px;
+}
+
+#container {
+ margin: 10px;
+ border: 1px solid #D0D0D0;
+ -webkit-box-shadow: 0 0 8px #D0D0D0;
+}
+
+p {
+ margin: 12px 15px 12px 15px;
}
</style>
</head>
<body>
- <div id="content">
+ <div id="container">
<h1><?php echo $heading; ?></h1>
<?php echo $message; ?>
</div>
diff --git a/application/errors/error_php.php b/application/errors/error_php.php
index f085c2037..5f0c07bfd 100644
--- a/application/errors/error_php.php
+++ b/application/errors/error_php.php
@@ -3,7 +3,7 @@
<h4>A PHP Error was encountered</h4>
<p>Severity: <?php echo $severity; ?></p>
-<p>Message: <?php echo $message; ?></p>
+<p>Message: <?php echo $message; ?></p>
<p>Filename: <?php echo $filepath; ?></p>
<p>Line Number: <?php echo $line; ?></p>
diff --git a/application/migrations/001_Create_accounts.php b/application/migrations/001_Create_accounts.php
deleted file mode 100644
index 4b2fc936f..000000000
--- a/application/migrations/001_Create_accounts.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php defined('BASEPATH') OR exit('No direct script access allowed');
-
-class Migration_Create_accounts extends CI_Migration {
-
- function up()
- {
- if ( ! $this->db->table_exists('accounts'))
- {
- // Setup Keys
- $this->dbforge->add_key('id', TRUE);
-
- $this->dbforge->add_field(array(
- 'id' => array('type' => 'INT', 'constraint' => 5, 'unsigned' => TRUE, 'auto_increment' => TRUE),
- 'company_name' => array('type' => 'VARCHAR', 'constraint' => '200', 'null' => FALSE),
- 'first_name' => array('type' => 'VARCHAR', 'constraint' => '200', 'null' => FALSE),
- 'last_name' => array('type' => 'VARCHAR', 'constraint' => '200', 'null' => FALSE),
- 'phone' => array('type' => 'TEXT', 'null' => FALSE),
- 'email' => array('type' => 'TEXT', 'null' => FALSE),
- 'address' => array('type' => 'TEXT', 'null' => FALSE),
- 'Last_Update' => array('type' => 'DATETIME', 'null' => FALSE)
- ));
-
- $this->dbforge->add_field("Created_At TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP");
- $this->dbforge->create_table('accounts', TRUE);
- }
- }
-
- function down()
- {
- $this->dbforge->drop_table('accounts');
- }
-}
diff --git a/application/views/welcome_message.php b/application/views/welcome_message.php
index ca68fc101..0bf5a8d2e 100644
--- a/application/views/welcome_message.php
+++ b/application/views/welcome_message.php
@@ -4,61 +4,85 @@
<meta charset="utf-8">
<title>Welcome to CodeIgniter</title>
-<style type="text/css">
+ <style type="text/css">
-body {
- background-color: #fff;
- margin: 40px;
- font-family: Lucida Grande, Verdana, Sans-serif;
- font-size: 14px;
- color: #4F5155;
-}
+ ::selection{ background-color: #E13300; color: white; }
+ ::moz-selection{ background-color: #E13300; color: white; }
+ ::webkit-selection{ background-color: #E13300; color: white; }
-a {
- color: #003399;
- background-color: transparent;
- font-weight: normal;
-}
+ body {
+ background-color: #fff;
+ margin: 40px;
+ font: 13px/20px normal Helvetica, Arial, sans-serif;
+ color: #4F5155;
+ }
-h1 {
- color: #444;
- background-color: transparent;
- border-bottom: 1px solid #D0D0D0;
- font-size: 16px;
- font-weight: bold;
- margin: 24px 0 2px 0;
- padding: 5px 0 6px 0;
-}
+ a {
+ color: #003399;
+ background-color: transparent;
+ font-weight: normal;
+ }
-code {
- font-family: Monaco, Verdana, Sans-serif;
- font-size: 12px;
- background-color: #f9f9f9;
- border: 1px solid #D0D0D0;
- color: #002166;
- display: block;
- margin: 14px 0 14px 0;
- padding: 12px 10px 12px 10px;
-}
+ h1 {
+ color: #444;
+ background-color: transparent;
+ border-bottom: 1px solid #D0D0D0;
+ font-size: 19px;
+ font-weight: normal;
+ margin: 0 0 14px 0;
+ padding: 14px 15px 10px 15px;
+ }
-</style>
+ code {
+ font-family: Consolas, Monaco, Courier New, Courier, monospace;
+ font-size: 12px;
+ background-color: #f9f9f9;
+ border: 1px solid #D0D0D0;
+ color: #002166;
+ display: block;
+ margin: 14px 0 14px 0;
+ padding: 12px 10px 12px 10px;
+ }
+
+ #body{
+ margin: 0 15px 0 15px;
+ }
+
+ p.footer{
+ text-align: right;
+ font-size: 11px;
+ border-top: 1px solid #D0D0D0;
+ line-height: 32px;
+ padding: 0 10px 0 10px;
+ margin: 20px 0 0 0;
+ }
+
+ #container{
+ margin: 10px;
+ border: 1px solid #D0D0D0;
+ -webkit-box-shadow: 0 0 8px #D0D0D0;
+ }
+ </style>
</head>
<body>
-<h1>Welcome to CodeIgniter!</h1>
-
-<p>The page you are looking at is being generated dynamically by CodeIgniter.</p>
+<div id="container">
+ <h1>Welcome to CodeIgniter!</h1>
-<p>If you would like to edit this page you'll find it located at:</p>
-<code>application/views/welcome_message.php</code>
+ <div id="body">
+ <p>The page you are looking at is being generated dynamically by CodeIgniter.</p>
-<p>The corresponding controller for this page is found at:</p>
-<code>application/controllers/welcome.php</code>
+ <p>If you would like to edit this page you'll find it located at:</p>
+ <code>application/views/welcome_message.php</code>
-<p>If you are exploring CodeIgniter for the very first time, you should start by reading the <a href="user_guide/">User Guide</a>.</p>
+ <p>The corresponding controller for this page is found at:</p>
+ <code>application/controllers/welcome.php</code>
+ <p>If you are exploring CodeIgniter for the very first time, you should start by reading the <a href="user_guide/">User Guide</a>.</p>
+ </div>
-<p><br />Page rendered in {elapsed_time} seconds</p>
+ <p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds</p>
+</div>
</body>
</html> \ No newline at end of file
diff --git a/index.php b/index.php
index 74e3ba32a..e56de13ed 100644
--- a/index.php
+++ b/index.php
@@ -11,9 +11,9 @@
*
* This can be set to anything, but default usage is:
*
- * development
- * testing
- * production
+ * development
+ * testing
+ * production
*
* NOTE: If you change these, also change the error_reporting() code below
*
@@ -28,12 +28,14 @@
* By default development will show errors but testing and live will hide them.
*/
+if (defined('ENVIRONMENT'))
+{
switch (ENVIRONMENT)
{
case 'development':
error_reporting(E_ALL);
break;
-
+
case 'testing':
case 'production':
error_reporting(0);
@@ -42,6 +44,7 @@
default:
exit('The application environment is not set correctly.');
}
+}
/*
*---------------------------------------------------------------
@@ -49,7 +52,7 @@
*---------------------------------------------------------------
*
* This variable must contain the name of your "system" folder.
- * Include the path if the folder is not in the same directory
+ * Include the path if the folder is not in the same directory
* as this file.
*
*/
@@ -62,7 +65,7 @@
*
* If you want this front controller to use a different "application"
* folder then the default one you can set its name here. The folder
- * can also be renamed or relocated anywhere on your server. If
+ * can also be renamed or relocated anywhere on your server. If
* you do, use a full server path. For more info please see the user guide:
* http://codeigniter.com/user_guide/general/managing_apps.html
*
@@ -78,24 +81,24 @@
*
* Normally you will set your default controller in the routes.php file.
* You can, however, force a custom routing by hard-coding a
- * specific controller class/function here. For most applications, you
+ * specific controller class/function here. For most applications, you
* WILL NOT set your routing here, but it's an option for those
* special instances where you might want to override the standard
* routing in a specific front controller that shares a common CI installation.
*
- * IMPORTANT: If you set the routing here, NO OTHER controller will be
+ * IMPORTANT: If you set the routing here, NO OTHER controller will be
* callable. In essence, this preference limits your application to ONE
- * specific controller. Leave the function name blank if you need
+ * specific controller. Leave the function name blank if you need
* to call functions dynamically via the URI.
*
* Un-comment the $routing array below to use this feature
*
*/
- // The directory name, relative to the "controllers" folder. Leave blank
+ // The directory name, relative to the "controllers" folder. Leave blank
// if your controller is not in a sub-folder within the "controllers" folder
// $routing['directory'] = '';
- // The controller class file name. Example: Mycontroller.php
+ // The controller class file name. Example: Mycontroller
// $routing['controller'] = '';
// The controller function you wish to be called.
@@ -104,7 +107,7 @@
/*
* -------------------------------------------------------------------
- * CUSTOM CONFIG VALUES
+ * CUSTOM CONFIG VALUES
* -------------------------------------------------------------------
*
* The $assign_to_config array below will be passed dynamically to the
@@ -122,12 +125,12 @@
// --------------------------------------------------------------------
-// END OF USER CONFIGURABLE SETTINGS. DO NOT EDIT BELOW THIS LINE
+// END OF USER CONFIGURABLE SETTINGS. DO NOT EDIT BELOW THIS LINE
// --------------------------------------------------------------------
/*
* ---------------------------------------------------------------
- * Resolve the system path for increased reliability
+ * Resolve the system path for increased reliability
* ---------------------------------------------------------------
*/
@@ -153,13 +156,14 @@
/*
* -------------------------------------------------------------------
- * Now that we know the path, set the main path constants
+ * Now that we know the path, set the main path constants
* -------------------------------------------------------------------
*/
// The name of THIS file
define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME));
// The PHP file extension
+ // this global constant is deprecated.
define('EXT', '.php');
// Path to the system folder
@@ -195,7 +199,7 @@
* And away we go...
*
*/
-require_once BASEPATH.'core/CodeIgniter'.EXT;
+require_once BASEPATH.'core/CodeIgniter.php';
/* End of file index.php */
/* Location: ./index.php */ \ No newline at end of file
diff --git a/license.txt b/license.txt
index 061cdb9db..4809e8ca4 100644
--- a/license.txt
+++ b/license.txt
@@ -2,7 +2,7 @@ Copyright (c) 2008 - 2011, EllisLab, Inc.
All rights reserved.
This license is a legal agreement between you and EllisLab Inc. for the use
-of CodeIgniter Software (the "Software"). By obtaining the Software you
+of CodeIgniter Software (the "Software"). By obtaining the Software you
agree to comply with the terms and conditions of this license.
PERMITTED USE
@@ -48,4 +48,4 @@ FOR CLAIMS, DAMAGES OR OTHER LIABILITY ARISING FROM, OUT OF, OR IN CONNECTION
WITH THE SOFTWARE. LICENSE HOLDERS ARE SOLELY RESPONSIBLE FOR DETERMINING THE
APPROPRIATENESS OF USE AND ASSUME ALL RISKS ASSOCIATED WITH ITS USE, INCLUDING
BUT NOT LIMITED TO THE RISKS OF PROGRAM ERRORS, DAMAGE TO EQUIPMENT, LOSS OF
-DATA OR SOFTWARE PROGRAMS, OR UNAVAILABILITY OR INTERRUPTION OF OPERATIONS.
+DATA OR SOFTWARE PROGRAMS, OR UNAVAILABILITY OR INTERRUPTION OF OPERATIONS. \ No newline at end of file
diff --git a/system/core/Benchmark.php b/system/core/Benchmark.php
index 515550e9f..3686c2d73 100644
--- a/system/core/Benchmark.php
+++ b/system/core/Benchmark.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -19,7 +19,7 @@
* CodeIgniter Benchmark Class
*
* This class enables you to mark points and calculate the time difference
- * between them. Memory consumption can also be displayed.
+ * between them. Memory consumption can also be displayed.
*
* @package CodeIgniter
* @subpackage Libraries
diff --git a/system/core/CodeIgniter.php b/system/core/CodeIgniter.php
index 99c261e74..b6f5e872c 100644
--- a/system/core/CodeIgniter.php
+++ b/system/core/CodeIgniter.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -29,35 +29,42 @@
/*
* ------------------------------------------------------
- * Define the CodeIgniter Version
+ * Define the CodeIgniter Version
* ------------------------------------------------------
*/
- define('CI_VERSION', '2.0.1');
+ define('CI_VERSION', '2.0.2');
/*
* ------------------------------------------------------
- * Define the CodeIgniter Branch (Core = TRUE, Reactor = FALSE)
+ * Define the CodeIgniter Branch (Core = TRUE, Reactor = FALSE)
* ------------------------------------------------------
*/
define('CI_CORE', FALSE);
/*
* ------------------------------------------------------
- * Load the global functions
+ * Load the global functions
* ------------------------------------------------------
*/
- require(BASEPATH.'core/Common'.EXT);
+ require(BASEPATH.'core/Common.php');
/*
* ------------------------------------------------------
- * Load the framework constants
+ * Load the framework constants
* ------------------------------------------------------
*/
- require(APPPATH.'config/constants'.EXT);
+ if (defined('ENVIRONMENT') AND file_exists(APPPATH.'config/'.ENVIRONMENT.'/constants.php'))
+ {
+ require(APPPATH.'config/'.ENVIRONMENT.'/constants.php');
+ }
+ else
+ {
+ require(APPPATH.'config/constants.php');
+ }
/*
* ------------------------------------------------------
- * Define a custom error handler so we can log PHP errors
+ * Define a custom error handler so we can log PHP errors
* ------------------------------------------------------
*/
set_error_handler('_exception_handler');
@@ -69,7 +76,7 @@
/*
* ------------------------------------------------------
- * Set the subclass_prefix
+ * Set the subclass_prefix
* ------------------------------------------------------
*
* Normally the "subclass_prefix" is set in the config file.
@@ -78,7 +85,7 @@
* "libraries" folder. Since CI allows config items to be
* overriden via data set in the main index. php file,
* before proceeding we need to know if a subclass_prefix
- * override exists. If so, we will set this value now,
+ * override exists. If so, we will set this value now,
* before any classes are loaded
* Note: Since the config file data is cached it doesn't
* hurt to load it here.
@@ -90,7 +97,7 @@
/*
* ------------------------------------------------------
- * Set a liberal script execution time limit
+ * Set a liberal script execution time limit
* ------------------------------------------------------
*/
if (function_exists("set_time_limit") == TRUE AND @ini_get("safe_mode") == 0)
@@ -100,7 +107,7 @@
/*
* ------------------------------------------------------
- * Start the timer... tick tock tick tock...
+ * Start the timer... tick tock tick tock...
* ------------------------------------------------------
*/
$BM =& load_class('Benchmark', 'core');
@@ -109,21 +116,21 @@
/*
* ------------------------------------------------------
- * Instantiate the hooks class
+ * Instantiate the hooks class
* ------------------------------------------------------
*/
$EXT =& load_class('Hooks', 'core');
/*
* ------------------------------------------------------
- * Is there a "pre_system" hook?
+ * Is there a "pre_system" hook?
* ------------------------------------------------------
*/
$EXT->_call_hook('pre_system');
/*
* ------------------------------------------------------
- * Instantiate the config class
+ * Instantiate the config class
* ------------------------------------------------------
*/
$CFG =& load_class('Config', 'core');
@@ -136,7 +143,7 @@
/*
* ------------------------------------------------------
- * Instantiate the UTF-8 class
+ * Instantiate the UTF-8 class
* ------------------------------------------------------
*
* Note: Order here is rather important as the UTF-8
@@ -150,14 +157,14 @@
/*
* ------------------------------------------------------
- * Instantiate the URI class
+ * Instantiate the URI class
* ------------------------------------------------------
*/
$URI =& load_class('URI', 'core');
/*
* ------------------------------------------------------
- * Instantiate the routing class and set the routing
+ * Instantiate the routing class and set the routing
* ------------------------------------------------------
*/
$RTR =& load_class('Router', 'core');
@@ -171,14 +178,14 @@
/*
* ------------------------------------------------------
- * Instantiate the output class
+ * Instantiate the output class
* ------------------------------------------------------
*/
$OUT =& load_class('Output', 'core');
/*
* ------------------------------------------------------
- * Is there a valid cache file? If so, we're done...
+ * Is there a valid cache file? If so, we're done...
* ------------------------------------------------------
*/
if ($EXT->_call_hook('cache_override') === FALSE)
@@ -190,27 +197,34 @@
}
/*
+ * -----------------------------------------------------
+ * Load the security class for xss and csrf support
+ * -----------------------------------------------------
+ */
+ $SEC =& load_class('Security', 'core');
+
+/*
* ------------------------------------------------------
- * Load the Input class and sanitize globals
+ * Load the Input class and sanitize globals
* ------------------------------------------------------
*/
$IN =& load_class('Input', 'core');
/*
* ------------------------------------------------------
- * Load the Language class
+ * Load the Language class
* ------------------------------------------------------
*/
$LANG =& load_class('Lang', 'core');
/*
* ------------------------------------------------------
- * Load the app controller and local controller
+ * Load the app controller and local controller
* ------------------------------------------------------
*
*/
// Load the base controller class
- require BASEPATH.'core/Controller'.EXT;
+ require BASEPATH.'core/Controller.php';
function &get_instance()
{
@@ -218,34 +232,34 @@
}
- if (file_exists(APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller'.EXT))
+ if (file_exists(APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller.php'))
{
- require APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller'.EXT;
+ require APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller.php';
}
// Load the local application controller
// Note: The Router class automatically validates the controller path using the router->_validate_request().
// If this include fails it means that the default controller in the Routes.php file is not resolving to something valid.
- if ( ! file_exists(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().EXT))
+ if ( ! file_exists(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().'.php'))
{
show_error('Unable to load your default controller. Please make sure the controller specified in your Routes.php file is valid.');
}
- include(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().EXT);
+ include(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().'.php');
// Set a mark point for benchmarking
$BM->mark('loading_time:_base_classes_end');
/*
* ------------------------------------------------------
- * Security check
+ * Security check
* ------------------------------------------------------
*
- * None of the functions in the app controller or the
- * loader class can be called via the URI, nor can
- * controller functions that begin with an underscore
+ * None of the functions in the app controller or the
+ * loader class can be called via the URI, nor can
+ * controller functions that begin with an underscore
*/
- $class = $RTR->fetch_class();
+ $class = $RTR->fetch_class();
$method = $RTR->fetch_method();
if ( ! class_exists($class)
@@ -258,14 +272,14 @@
/*
* ------------------------------------------------------
- * Is there a "pre_controller" hook?
+ * Is there a "pre_controller" hook?
* ------------------------------------------------------
*/
$EXT->_call_hook('pre_controller');
/*
* ------------------------------------------------------
- * Instantiate the requested controller
+ * Instantiate the requested controller
* ------------------------------------------------------
*/
// Mark a start point so we can benchmark the controller
@@ -275,14 +289,14 @@
/*
* ------------------------------------------------------
- * Is there a "post_controller_constructor" hook?
+ * Is there a "post_controller_constructor" hook?
* ------------------------------------------------------
*/
$EXT->_call_hook('post_controller_constructor');
/*
* ------------------------------------------------------
- * Call the requested method
+ * Call the requested method
* ------------------------------------------------------
*/
// Is there a "remap" function? If so, we call it instead
@@ -304,12 +318,12 @@
$method = (isset($x[1]) ? $x[1] : 'index');
if ( ! class_exists($class))
{
- if ( ! file_exists(APPPATH.'controllers/'.$class.EXT))
+ if ( ! file_exists(APPPATH.'controllers/'.$class.'.php'))
{
show_404("{$class}/{$method}");
}
- include_once(APPPATH.'controllers/'.$class.EXT);
+ include_once(APPPATH.'controllers/'.$class.'.php');
unset($CI);
$CI = new $class();
}
@@ -331,14 +345,14 @@
/*
* ------------------------------------------------------
- * Is there a "post_controller" hook?
+ * Is there a "post_controller" hook?
* ------------------------------------------------------
*/
$EXT->_call_hook('post_controller');
/*
* ------------------------------------------------------
- * Send the final rendered output to the browser
+ * Send the final rendered output to the browser
* ------------------------------------------------------
*/
if ($EXT->_call_hook('display_override') === FALSE)
@@ -348,14 +362,14 @@
/*
* ------------------------------------------------------
- * Is there a "post_system" hook?
+ * Is there a "post_system" hook?
* ------------------------------------------------------
*/
$EXT->_call_hook('post_system');
/*
* ------------------------------------------------------
- * Close the DB connection if one exists
+ * Close the DB connection if one exists
* ------------------------------------------------------
*/
if (class_exists('CI_DB') AND isset($CI->db))
@@ -365,4 +379,4 @@
/* End of file CodeIgniter.php */
-/* Location: ./system/core/CodeIgniter.php */
+/* Location: ./system/core/CodeIgniter.php */ \ No newline at end of file
diff --git a/system/core/Common.php b/system/core/Common.php
index cd6b93355..e50f7794a 100644
--- a/system/core/Common.php
+++ b/system/core/Common.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -39,6 +39,8 @@
* @param string
* @return bool TRUE if the current version is $version or higher
*/
+if ( ! function_exists('is_php'))
+{
function is_php($version = '5.0.0')
{
static $_is_php;
@@ -51,6 +53,7 @@
return $_is_php[$version];
}
+}
// ------------------------------------------------------------------------
@@ -58,12 +61,14 @@
* Tests for file writability
*
* is_writable() returns TRUE on Windows servers when you really can't write to
- * the file, based on the read-only attribute. is_writable() is also unreliable
+ * the file, based on the read-only attribute. is_writable() is also unreliable
* on Unix servers if safe_mode is on.
*
* @access private
* @return void
*/
+if ( ! function_exists('is_really_writable'))
+{
function is_really_writable($file)
{
// If we're on a Unix server with safe_mode off we call is_writable
@@ -73,7 +78,7 @@
}
// For windows servers and safe_mode "on" installations we'll actually
- // write a file then read it. Bah...
+ // write a file then read it. Bah...
if (is_dir($file))
{
$file = rtrim($file, '/').'/'.md5(mt_rand(1,100).mt_rand(1,100));
@@ -88,7 +93,7 @@
@unlink($file);
return TRUE;
}
- elseif (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE)
+ elseif ( ! is_file($file) OR ($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE)
{
return FALSE;
}
@@ -96,14 +101,15 @@
fclose($fp);
return TRUE;
}
+}
// ------------------------------------------------------------------------
/**
* Class registry
*
-* This function acts as a singleton. If the requested class does not
-* exist it is instantiated and set to a static variable. If it has
+* This function acts as a singleton. If the requested class does not
+* exist it is instantiated and set to a static variable. If it has
* previously been instantiated the variable is returned.
*
* @access public
@@ -112,11 +118,13 @@
* @param string the class name prefix
* @return object
*/
+if ( ! function_exists('load_class'))
+{
function &load_class($class, $directory = 'libraries', $prefix = 'CI_')
{
static $_classes = array();
- // Does the class exist? If so, we're done...
+ // Does the class exist? If so, we're done...
if (isset($_classes[$class]))
{
return $_classes[$class];
@@ -128,27 +136,27 @@
// thenin the local application/libraries folder
foreach (array(BASEPATH, APPPATH) as $path)
{
- if (file_exists($path.$directory.'/'.$class.EXT))
+ if (file_exists($path.$directory.'/'.$class.'.php'))
{
$name = $prefix.$class;
if (class_exists($name) === FALSE)
{
- require($path.$directory.'/'.$class.EXT);
+ require($path.$directory.'/'.$class.'.php');
}
break;
}
}
- // Is the request a class extension? If so we load it too
- if (file_exists(APPPATH.$directory.'/'.config_item('subclass_prefix').$class.EXT))
+ // Is the request a class extension? If so we load it too
+ if (file_exists(APPPATH.$directory.'/'.config_item('subclass_prefix').$class.'.php'))
{
$name = config_item('subclass_prefix').$class;
if (class_exists($name) === FALSE)
{
- require(APPPATH.$directory.'/'.config_item('subclass_prefix').$class.EXT);
+ require(APPPATH.$directory.'/'.config_item('subclass_prefix').$class.'.php');
}
}
@@ -157,7 +165,7 @@
{
// Note: We use exit() rather then show_error() in order to avoid a
// self-referencing loop with the Excptions class
- exit('Unable to locate the specified class: '.$class.EXT);
+ exit('Unable to locate the specified class: '.$class.'.php');
}
// Keep track of what we just loaded
@@ -166,16 +174,19 @@
$_classes[$class] = new $name();
return $_classes[$class];
}
+}
// --------------------------------------------------------------------
/**
-* Keeps track of which libraries have been loaded. This function is
+* Keeps track of which libraries have been loaded. This function is
* called by the load_class() function above
*
* @access public
* @return array
*/
+if ( ! function_exists('is_loaded'))
+{
function is_loaded($class = '')
{
static $_is_loaded = array();
@@ -187,6 +198,7 @@
return $_is_loaded;
}
+}
// ------------------------------------------------------------------------
@@ -199,6 +211,8 @@
* @access private
* @return array
*/
+if ( ! function_exists('get_config'))
+{
function &get_config($replace = array())
{
static $_config;
@@ -208,19 +222,18 @@
return $_config[0];
}
- $file_path = APPPATH.'config/'.ENVIRONMENT.'/config'.EXT;
+ // Is the config file in the environment folder?
+ if ( ! defined('ENVIRONMENT') OR ! file_exists($file_path = APPPATH.'config/'.ENVIRONMENT.'/config.php'))
+ {
+ $file_path = APPPATH.'config/config.php';
+ }
// Fetch the config file
if ( ! file_exists($file_path))
{
- $file_path = APPPATH.'config/config'.EXT;
-
- if ( ! file_exists($file_path))
- {
- exit('The configuration file does not exist.');
- }
+ exit('The configuration file does not exist.');
}
-
+
require($file_path);
// Does the $config array exist in the file?
@@ -243,6 +256,7 @@
return $_config[0] =& $config;
}
+}
// ------------------------------------------------------------------------
@@ -252,6 +266,8 @@
* @access public
* @return mixed
*/
+if ( ! function_exists('config_item'))
+{
function config_item($item)
{
static $_config_item = array();
@@ -269,6 +285,7 @@
return $_config_item[$item];
}
+}
// ------------------------------------------------------------------------
@@ -284,12 +301,15 @@
* @access public
* @return void
*/
+if ( ! function_exists('show_error'))
+{
function show_error($message, $status_code = 500, $heading = 'An Error Was Encountered')
{
$_error =& load_class('Exceptions', 'core');
echo $_error->show_error($heading, $message, 'error_general', $status_code);
exit;
}
+}
// ------------------------------------------------------------------------
@@ -303,12 +323,15 @@
* @access public
* @return void
*/
+if ( ! function_exists('show_404'))
+{
function show_404($page = '', $log_error = TRUE)
{
$_error =& load_class('Exceptions', 'core');
$_error->show_404($page, $log_error);
exit;
}
+}
// ------------------------------------------------------------------------
@@ -321,6 +344,8 @@
* @access public
* @return void
*/
+if ( ! function_exists('log_message'))
+{
function log_message($level = 'error', $message, $php_error = FALSE)
{
static $_log;
@@ -333,6 +358,7 @@
$_log =& load_class('Log');
$_log->write_log($level, $message, $php_error);
}
+}
// ------------------------------------------------------------------------
@@ -344,6 +370,8 @@
* @param string
* @return void
*/
+if ( ! function_exists('set_status_header'))
+{
function set_status_header($code = 200, $text = '')
{
$stati = array(
@@ -400,7 +428,7 @@
if ($text == '')
{
- show_error('No status text available. Please check your status code number or supply your own message text.', 500);
+ show_error('No status text available. Please check your status code number or supply your own message text.', 500);
}
$server_protocol = (isset($_SERVER['SERVER_PROTOCOL'])) ? $_SERVER['SERVER_PROTOCOL'] : FALSE;
@@ -418,6 +446,7 @@
header("HTTP/1.1 {$code} {$text}", TRUE, $code);
}
}
+}
// --------------------------------------------------------------------
@@ -425,7 +454,7 @@
* Exception Handler
*
* This is the custom exception handler that is declaired at the top
-* of Codeigniter.php. The main reason we use this is to permit
+* of Codeigniter.php. The main reason we use this is to permit
* PHP errors to be logged in our own log files since the user may
* not have access to server logs. Since this function
* effectively intercepts PHP errors, however, we also need
@@ -435,6 +464,8 @@
* @access private
* @return void
*/
+if ( ! function_exists('_exception_handler'))
+{
function _exception_handler($severity, $message, $filepath, $line)
{
// We don't bother with "strict" notices since they tend to fill up
@@ -456,7 +487,7 @@
$_error->show_php_error($severity, $message, $filepath, $line);
}
- // Should we log the error? No? We're done...
+ // Should we log the error? No? We're done...
if (config_item('log_threshold') == 0)
{
return;
@@ -464,45 +495,46 @@
$_error->log_exception($severity, $message, $filepath, $line);
}
+}
+
+// --------------------------------------------------------------------
- // --------------------------------------------------------------------
-
- /**
- * Remove Invisible Characters
- *
- * This prevents sandwiching null characters
- * between ascii characters, like Java\0script.
- *
- * @access public
- * @param string
- * @return string
- */
- function remove_invisible_characters($str)
+/**
+ * Remove Invisible Characters
+ *
+ * This prevents sandwiching null characters
+ * between ascii characters, like Java\0script.
+ *
+ * @access public
+ * @param string
+ * @return string
+ */
+if ( ! function_exists('remove_invisible_characters'))
+{
+ function remove_invisible_characters($str, $url_encoded = TRUE)
{
- static $non_displayables;
+ $non_displayables = array();
+
+ // every control character except newline (dec 10)
+ // carriage return (dec 13), and horizontal tab (dec 09)
- if ( ! isset($non_displayables))
+ if ($url_encoded)
{
- // every control character except newline (dec 10), carriage return (dec 13), and horizontal tab (dec 09),
- $non_displayables = array(
- '/%0[0-8bcef]/', // url encoded 00-08, 11, 12, 14, 15
- '/%1[0-9a-f]/', // url encoded 16-31
- '/[\x00-\x08]/', // 00-08
- '/\x0b/', '/\x0c/', // 11, 12
- '/[\x0e-\x1f]/' // 14-31
- );
+ $non_displayables[] = '/%0[0-8bcef]/'; // url encoded 00-08, 11, 12, 14, 15
+ $non_displayables[] = '/%1[0-9a-f]/'; // url encoded 16-31
}
+ $non_displayables[] = '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S'; // 00-08, 11, 12, 14-31, 127
+
do
{
- $cleaned = $str;
- $str = preg_replace($non_displayables, '', $str);
+ $str = preg_replace($non_displayables, '', $str, -1, $count);
}
- while ($cleaned != $str);
+ while ($count);
return $str;
}
-
+}
/* End of file Common.php */
/* Location: ./system/core/Common.php */ \ No newline at end of file
diff --git a/system/core/Config.php b/system/core/Config.php
index a2a7dd564..fa71f4d3d 100644
--- a/system/core/Config.php
+++ b/system/core/Config.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -37,11 +37,11 @@ class CI_Config {
*
* Sets the $config data from the primary config.php file as a class variable
*
- * @access public
- * @param string the config file name
- * @param boolean if configuration values should be loaded into their own section
- * @param boolean true if errors should just return false, false if an error message should be displayed
- * @return boolean if the file was successfully loaded or not
+ * @access public
+ * @param string the config file name
+ * @param boolean if configuration values should be loaded into their own section
+ * @param boolean true if errors should just return false, false if an error message should be displayed
+ * @return boolean if the file was successfully loaded or not
*/
function __construct()
{
@@ -74,36 +74,44 @@ class CI_Config {
*
* @access public
* @param string the config file name
- * @param boolean if configuration values should be loaded into their own section
- * @param boolean true if errors should just return false, false if an error message should be displayed
+ * @param boolean if configuration values should be loaded into their own section
+ * @param boolean true if errors should just return false, false if an error message should be displayed
* @return boolean if the file was loaded correctly
*/
function load($file = '', $use_sections = FALSE, $fail_gracefully = FALSE)
{
- $file = ($file == '') ? 'config' : str_replace(EXT, '', $file);
+ $file = ($file == '') ? 'config' : str_replace('.php', '', $file);
+ $found = FALSE;
$loaded = FALSE;
foreach ($this->_config_paths as $path)
- {
- $file_path = $path.'config/'.ENVIRONMENT.'/'.$file.EXT;
+ {
+ $check_locations = defined('ENVIRONMENT')
+ ? array(ENVIRONMENT.'/'.$file, $file)
+ : array($file);
- if (in_array($file_path, $this->is_loaded, TRUE))
+ foreach ($check_locations as $location)
{
- $loaded = TRUE;
- continue;
- }
+ $file_path = $path.'config/'.$location.'.php';
- if ( ! file_exists($file_path))
- {
- log_message('debug', 'Config for '.ENVIRONMENT.' environment is not found. Trying global config.');
- $file_path = $path.'config/'.$file.EXT;
-
- if ( ! file_exists($file_path))
+ if (in_array($file_path, $this->is_loaded, TRUE))
+ {
+ $loaded = TRUE;
+ continue 2;
+ }
+
+ if (file_exists($file_path))
{
- continue;
+ $found = TRUE;
+ break;
}
}
-
+
+ if ($found === FALSE)
+ {
+ continue;
+ }
+
include($file_path);
if ( ! isset($config) OR ! is_array($config))
@@ -136,6 +144,7 @@ class CI_Config {
$loaded = TRUE;
log_message('debug', 'Config file loaded: '.$file_path);
+ break;
}
if ($loaded === FALSE)
@@ -144,9 +153,9 @@ class CI_Config {
{
return FALSE;
}
- show_error('The configuration file '.ENVIRONMENT.'/'.$file.EXT.' and '.$file.EXT.' do not exist.');
+ show_error('The configuration file '.$file.'.php'.' does not exist.');
}
-
+
return TRUE;
}
@@ -296,7 +305,7 @@ class CI_Config {
* Assign to Config
*
* This function is called by the front controller (CodeIgniter.php)
- * after the Config class is instantiated. It permits config items
+ * after the Config class is instantiated. It permits config items
* to be assigned or overriden by variables contained in the index.php file
*
* @access private
diff --git a/system/core/Controller.php b/system/core/Controller.php
index 469663f09..107d3f346 100644
--- a/system/core/Controller.php
+++ b/system/core/Controller.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -37,7 +37,7 @@ class CI_Controller {
public function __construct()
{
self::$instance =& $this;
-
+
// Assign all the class objects that were instantiated by the
// bootstrap file (CodeIgniter.php) to local class variables
// so that CI can run as one big super object.
@@ -48,12 +48,9 @@ class CI_Controller {
$this->load =& load_class('Loader', 'core');
- $this->load->_base_classes =& is_loaded();
-
- $this->load->_ci_autoloader();
+ $this->load->set_base_classes()->ci_autoloader();
log_message('debug', "Controller Class Initialized");
-
}
public static function &get_instance()
diff --git a/system/core/Exceptions.php b/system/core/Exceptions.php
index f5659561c..2503c907f 100644
--- a/system/core/Exceptions.php
+++ b/system/core/Exceptions.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -54,7 +54,7 @@ class CI_Exceptions {
public function __construct()
{
$this->ob_level = ob_get_level();
- // Note: Do not log messages from this constructor.
+ // Note: Do not log messages from this constructor.
}
// --------------------------------------------------------------------
@@ -75,7 +75,7 @@ class CI_Exceptions {
{
$severity = ( ! isset($this->levels[$severity])) ? $severity : $this->levels[$severity];
- log_message('error', 'Severity: '.$severity.' --> '.$message. ' '.$filepath.' '.$line, TRUE);
+ log_message('error', 'Severity: '.$severity.' --> '.$message. ' '.$filepath.' '.$line, TRUE);
}
// --------------------------------------------------------------------
@@ -128,7 +128,7 @@ class CI_Exceptions {
ob_end_flush();
}
ob_start();
- include(APPPATH.'errors/'.$template.EXT);
+ include(APPPATH.'errors/'.$template.'.php');
$buffer = ob_get_contents();
ob_end_clean();
return $buffer;
@@ -164,7 +164,7 @@ class CI_Exceptions {
ob_end_flush();
}
ob_start();
- include(APPPATH.'errors/error_php'.EXT);
+ include(APPPATH.'errors/error_php.php');
$buffer = ob_get_contents();
ob_end_clean();
echo $buffer;
diff --git a/system/core/Hooks.php b/system/core/Hooks.php
index 75fd811b0..ffb3258d8 100644
--- a/system/core/Hooks.php
+++ b/system/core/Hooks.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -65,7 +65,15 @@ class CI_Hooks {
// Grab the "hooks" definition file.
// If there are no hooks, we're done.
- @include(APPPATH.'config/hooks'.EXT);
+ if (defined('ENVIRONMENT') AND is_file(APPPATH.'config/'.ENVIRONMENT.'/hooks.php'))
+ {
+ include(APPPATH.'config/'.ENVIRONMENT.'/hooks.php');
+ }
+ elseif (is_file(APPPATH.'config/hooks.php'))
+ {
+ include(APPPATH.'config/hooks.php');
+ }
+
if ( ! isset($hook) OR ! is_array($hook))
{
diff --git a/system/core/Input.php b/system/core/Input.php
index 626245390..89eda56b0 100644
--- a/system/core/Input.php
+++ b/system/core/Input.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -36,7 +36,7 @@ class CI_Input {
var $_enable_csrf = FALSE; // Set automatically based on config setting
protected $headers = array();
-
+
/**
* Constructor
@@ -53,11 +53,8 @@ class CI_Input {
$this->_enable_xss = (config_item('global_xss_filtering') === TRUE);
$this->_enable_csrf = (config_item('csrf_protection') === TRUE);
- // Do we need to load the security class?
- if ($this->_enable_xss == TRUE OR $this->_enable_csrf == TRUE)
- {
- $this->security =& load_class('Security');
- }
+ global $SEC;
+ $this->security =& $SEC;
// Do we need the UTF-8 class?
if (UTF8_ENABLED === TRUE)
@@ -92,8 +89,7 @@ class CI_Input {
if ($xss_clean === TRUE)
{
- $_security =& load_class('Security');
- return $_security->xss_clean($array[$index]);
+ return $this->security->xss_clean($array[$index]);
}
return $array[$index];
@@ -151,7 +147,7 @@ class CI_Input {
}
return $post;
}
-
+
return $this->_fetch_from_array($_POST, $index, $xss_clean);
}
@@ -205,7 +201,7 @@ class CI_Input {
* @param mixed
* @param string the value of the cookie
* @param string the number of seconds until expiration
- * @param string the cookie domain. Usually: .yourdomain.com
+ * @param string the cookie domain. Usually: .yourdomain.com
* @param string the cookie path
* @param string the cookie prefix
* @param bool true makes the cookie secure
@@ -406,9 +402,9 @@ class CI_Input {
function _sanitize_globals()
{
// It would be "wrong" to unset any of these GLOBALS.
- $protected = array('_SERVER', '_GET', '_POST', '_FILES', '_REQUEST',
+ $protected = array('_SERVER', '_GET', '_POST', '_FILES', '_REQUEST',
'_SESSION', '_ENV', 'GLOBALS', 'HTTP_RAW_POST_DATA',
- 'system_folder', 'application_folder', 'BM', 'EXT',
+ 'system_folder', 'application_folder', 'BM', 'EXT',
'CFG', 'URI', 'RTR', 'OUT', 'IN');
// Unset globals for securiy.
@@ -528,6 +524,9 @@ class CI_Input {
$str = $this->uni->clean_string($str);
}
+ // Remove control characters
+ $str = remove_invisible_characters($str);
+
// Should we filter the input data?
if ($this->_enable_xss === TRUE)
{
@@ -539,7 +538,7 @@ class CI_Input {
{
if (strpos($str, "\r") !== FALSE)
{
- $str = str_replace(array("\r\n", "\r"), PHP_EOL, $str);
+ $str = str_replace(array("\r\n", "\r", "\r\n\n"), PHP_EOL, $str);
}
}
@@ -580,7 +579,7 @@ class CI_Input {
/**
* Request Headers
*
- * In Apache, you can simply call apache_request_headers(), however for
+ * In Apache, you can simply call apache_request_headers(), however for
* people running other webservers the function is undefined.
*
* @return array
@@ -610,10 +609,10 @@ class CI_Input {
{
$key = str_replace('_', ' ', strtolower($key));
$key = str_replace(' ', '-', ucwords($key));
-
+
$this->headers[$key] = $val;
}
-
+
return $this->headers;
}
@@ -634,7 +633,7 @@ class CI_Input {
{
$this->request_headers();
}
-
+
if ( ! isset($this->headers[$index]))
{
return FALSE;
@@ -642,11 +641,10 @@ class CI_Input {
if ($xss_clean === TRUE)
{
- $_security =& load_class('Security');
- return $_security->xss_clean($this->headers[$index]);
+ return $this->security->xss_clean($this->headers[$index]);
}
- return $this->headers[$index];
+ return $this->headers[$index];
}
// --------------------------------------------------------------------
diff --git a/system/core/Lang.php b/system/core/Lang.php
index fb177902e..79eb443a0 100644
--- a/system/core/Lang.php
+++ b/system/core/Lang.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -51,14 +51,14 @@ class CI_Lang {
*/
function load($langfile = '', $idiom = '', $return = FALSE, $add_suffix = TRUE, $alt_path = '')
{
- $langfile = str_replace(EXT, '', $langfile);
+ $langfile = str_replace('.php', '', $langfile);
if ($add_suffix == TRUE)
{
$langfile = str_replace('_lang.', '', $langfile).'_lang';
}
- $langfile .= EXT;
+ $langfile .= '.php';
if (in_array($langfile, $this->is_loaded, TRUE))
{
@@ -129,12 +129,19 @@ class CI_Lang {
*/
function line($line = '')
{
- $line = ($line == '' OR ! isset($this->language[$line])) ? FALSE : $this->language[$line];
- return $line;
+ $value = ($line == '' OR ! isset($this->language[$line])) ? FALSE : $this->language[$line];
+
+ // Because killer robots like unicorns!
+ if ($value === FALSE)
+ {
+ log_message('error', 'Could not find the language line "'.$line.'"');
+ }
+
+ return $value;
}
}
// END Language Class
/* End of file Lang.php */
-/* Location: ./system/core/Lang.php */ \ No newline at end of file
+/* Location: ./system/core/Lang.php */
diff --git a/system/core/Loader.php b/system/core/Loader.php
index 7003318ee..87f05d86e 100644
--- a/system/core/Loader.php
+++ b/system/core/Loader.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -29,34 +29,32 @@
class CI_Loader {
// All these are set automatically. Don't mess with them.
- var $_ci_ob_level;
- var $_ci_view_path = '';
- var $_ci_library_paths = array();
- var $_ci_model_paths = array();
- var $_ci_helper_paths = array();
- var $_base_classes = array(); // Set by the controller class
- var $_ci_cached_vars = array();
- var $_ci_classes = array();
- var $_ci_loaded_files = array();
- var $_ci_models = array();
- var $_ci_helpers = array();
- var $_ci_varmap = array('unit_test' => 'unit', 'user_agent' => 'agent');
-
+ protected $_ci_ob_level;
+ protected $_ci_view_paths = array();
+ protected $_ci_library_paths = array();
+ protected $_ci_model_paths = array();
+ protected $_ci_helper_paths = array();
+ protected $_base_classes = array(); // Set by the controller class
+ protected $_ci_cached_vars = array();
+ protected $_ci_classes = array();
+ protected $_ci_loaded_files = array();
+ protected $_ci_models = array();
+ protected $_ci_helpers = array();
+ protected $_ci_varmap = array('unit_test' => 'unit',
+ 'user_agent' => 'agent');
/**
* Constructor
*
* Sets the path to the view files and gets the initial output buffering level
- *
- * @access public
*/
- function __construct()
+ public function __construct()
{
- $this->_ci_view_path = APPPATH.'views/';
- $this->_ci_ob_level = ob_get_level();
+ $this->_ci_ob_level = ob_get_level();
$this->_ci_library_paths = array(APPPATH, BASEPATH);
$this->_ci_helper_paths = array(APPPATH, BASEPATH);
$this->_ci_model_paths = array(APPPATH);
+ $this->_ci_view_paths = array(APPPATH.'views/' => TRUE);
log_message('debug', "Loader Class Initialized");
}
@@ -64,24 +62,64 @@ class CI_Loader {
// --------------------------------------------------------------------
/**
+ * Set _base_classes variable
+ *
+ * This method is called once in CI_Controller.
+ *
+ * @param array
+ * @return object
+ */
+ public function set_base_classes()
+ {
+ $this->_base_classes =& is_loaded();
+
+ return $this;
+ }
+
+ // --------------------------------------------------------------------
+
+ /**
+ * Is Loaded
+ *
+ * A utility function to test if a class is in the self::$_ci_classes array.
+ * This function returns the object name if the class tested for is loaded,
+ * and returns FALSE if it isn't.
+ *
+ * It is mainly used in the form_helper -> _get_validation_object()
+ *
+ * @param string class being checked for
+ * @return mixed class object name on the CI SuperObject or FALSE
+ */
+ public function is_loaded($class)
+ {
+ if (isset($this->_ci_classes[$class]))
+ {
+ return $this->_ci_classes[$class];
+ }
+
+ return FALSE;
+ }
+
+ // --------------------------------------------------------------------
+
+ /**
* Class Loader
*
* This function lets users load and instantiate classes.
* It is designed to be called from a user's app controllers.
*
- * @access public
* @param string the name of the class
* @param mixed the optional parameters
* @param string an optional object name
* @return void
*/
- function library($library = '', $params = NULL, $object_name = NULL)
+ public function library($library = '', $params = NULL, $object_name = NULL)
{
if (is_array($library))
{
- foreach ($library as $read)
+ foreach ($library as $class)
{
- $this->library($read);
+ $this->library($class, $params);
}
return;
@@ -97,17 +135,7 @@ class CI_Loader {
$params = NULL;
}
- if (is_array($library))
- {
- foreach ($library as $class)
- {
- $this->_ci_load_class($class, $params, $object_name);
- }
- }
- else
- {
- $this->_ci_load_class($library, $params, $object_name);
- }
+ $this->_ci_load_class($library, $params, $object_name);
}
// --------------------------------------------------------------------
@@ -117,13 +145,12 @@ class CI_Loader {
*
* This function lets users load and instantiate models.
*
- * @access public
* @param string the name of the class
* @param string name for the model
* @param bool database connection
* @return void
*/
- function model($model, $name = '', $db_conn = FALSE)
+ public function model($model, $name = '', $db_conn = FALSE)
{
if (is_array($model))
{
@@ -171,7 +198,7 @@ class CI_Loader {
foreach ($this->_ci_model_paths as $mod_path)
{
- if ( ! file_exists($mod_path.'models/'.$path.$model.EXT))
+ if ( ! file_exists($mod_path.'models/'.$path.$model.'.php'))
{
continue;
}
@@ -191,7 +218,7 @@ class CI_Loader {
load_class('Model', 'core');
}
- require_once($mod_path.'models/'.$path.$model.EXT);
+ require_once($mod_path.'models/'.$path.$model.'.php');
$model = ucfirst($model);
@@ -210,13 +237,12 @@ class CI_Loader {
/**
* Database Loader
*
- * @access public
* @param string the DB credentials
* @param bool whether to return the DB object
* @param bool whether to enable active record (this allows us to override the config setting)
* @return object
*/
- function database($params = '', $return = FALSE, $active_record = NULL)
+ public function database($params = '', $return = FALSE, $active_record = NULL)
{
// Grab the super object
$CI =& get_instance();
@@ -227,14 +253,14 @@ class CI_Loader {
return FALSE;
}
- require_once(BASEPATH.'database/DB'.EXT);
+ require_once(BASEPATH.'database/DB.php');
if ($return === TRUE)
{
return DB($params, $active_record);
}
- // Initialize the db variable. Needed to prevent
+ // Initialize the db variable. Needed to prevent
// reference errors with some configurations
$CI->db = '';
@@ -247,10 +273,9 @@ class CI_Loader {
/**
* Load the Utilities Class
*
- * @access public
* @return string
*/
- function dbutil()
+ public function dbutil()
{
if ( ! class_exists('CI_DB'))
{
@@ -263,8 +288,8 @@ class CI_Loader {
// this use is deprecated and strongly discouraged
$CI->load->dbforge();
- require_once(BASEPATH.'database/DB_utility'.EXT);
- require_once(BASEPATH.'database/drivers/'.$CI->db->dbdriver.'/'.$CI->db->dbdriver.'_utility'.EXT);
+ require_once(BASEPATH.'database/DB_utility.php');
+ require_once(BASEPATH.'database/drivers/'.$CI->db->dbdriver.'/'.$CI->db->dbdriver.'_utility.php');
$class = 'CI_DB_'.$CI->db->dbdriver.'_utility';
$CI->dbutil = new $class();
@@ -275,10 +300,9 @@ class CI_Loader {
/**
* Load the Database Forge Class
*
- * @access public
* @return string
*/
- function dbforge()
+ public function dbforge()
{
if ( ! class_exists('CI_DB'))
{
@@ -287,8 +311,8 @@ class CI_Loader {
$CI =& get_instance();
- require_once(BASEPATH.'database/DB_forge'.EXT);
- require_once(BASEPATH.'database/drivers/'.$CI->db->dbdriver.'/'.$CI->db->dbdriver.'_forge'.EXT);
+ require_once(BASEPATH.'database/DB_forge.php');
+ require_once(BASEPATH.'database/drivers/'.$CI->db->dbdriver.'/'.$CI->db->dbdriver.'_forge.php');
$class = 'CI_DB_'.$CI->db->dbdriver.'_forge';
$CI->dbforge = new $class();
@@ -299,21 +323,20 @@ class CI_Loader {
/**
* Load View
*
- * This function is used to load a "view" file. It has three parameters:
+ * This function is used to load a "view" file. It has three parameters:
*
* 1. The name of the "view" file to be included.
* 2. An associative array of data to be extracted for use in the view.
- * 3. TRUE/FALSE - whether to return the data or load it. In
+ * 3. TRUE/FALSE - whether to return the data or load it. In
* some cases it's advantageous to be able to return data so that
* a developer can process it in some way.
*
- * @access public
* @param string
* @param array
* @param bool
* @return void
*/
- function view($view, $vars = array(), $return = FALSE)
+ public function view($view, $vars = array(), $return = FALSE)
{
return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));
}
@@ -325,12 +348,11 @@ class CI_Loader {
*
* This is a generic file loader
*
- * @access public
* @param string
* @param bool
* @return string
*/
- function file($path, $return = FALSE)
+ public function file($path, $return = FALSE)
{
return $this->_ci_load(array('_ci_path' => $path, '_ci_return' => $return));
}
@@ -343,11 +365,10 @@ class CI_Loader {
* Once variables are set they become available within
* the controller class and its "view" files.
*
- * @access public
* @param array
* @return void
*/
- function vars($vars = array(), $val = '')
+ public function vars($vars = array(), $val = '')
{
if ($val != '' AND is_string($vars))
{
@@ -372,11 +393,10 @@ class CI_Loader {
*
* This function loads the specified helper file.
*
- * @access public
* @param mixed
* @return void
*/
- function helper($helpers = array())
+ public function helper($helpers = array())
{
foreach ($this->_ci_prep_filename($helpers, '_helper') as $helper)
{
@@ -385,16 +405,16 @@ class CI_Loader {
continue;
}
- $ext_helper = APPPATH.'helpers/'.config_item('subclass_prefix').$helper.EXT;
+ $ext_helper = APPPATH.'helpers/'.config_item('subclass_prefix').$helper.'.php';
// Is this a helper extension request?
if (file_exists($ext_helper))
{
- $base_helper = BASEPATH.'helpers/'.$helper.EXT;
+ $base_helper = BASEPATH.'helpers/'.$helper.'.php';
if ( ! file_exists($base_helper))
{
- show_error('Unable to load the requested file: helpers/'.$helper.EXT);
+ show_error('Unable to load the requested file: helpers/'.$helper.'.php');
}
include_once($ext_helper);
@@ -408,9 +428,9 @@ class CI_Loader {
// Try to load the helper
foreach ($this->_ci_helper_paths as $path)
{
- if (file_exists($path.'helpers/'.$helper.EXT))
+ if (file_exists($path.'helpers/'.$helper.'.php'))
{
- include_once($path.'helpers/'.$helper.EXT);
+ include_once($path.'helpers/'.$helper.'.php');
$this->_ci_helpers[$helper] = TRUE;
log_message('debug', 'Helper loaded: '.$helper);
@@ -421,7 +441,7 @@ class CI_Loader {
// unable to load the helper
if ( ! isset($this->_ci_helpers[$helper]))
{
- show_error('Unable to load the requested file: helpers/'.$helper.EXT);
+ show_error('Unable to load the requested file: helpers/'.$helper.'.php');
}
}
}
@@ -434,11 +454,10 @@ class CI_Loader {
* This is simply an alias to the above function in case the
* user has written the plural form of this function.
*
- * @access public
* @param array
* @return void
*/
- function helpers($helpers = array())
+ public function helpers($helpers = array())
{
$this->helper($helpers);
}
@@ -448,12 +467,11 @@ class CI_Loader {
/**
* Loads a language file
*
- * @access public
* @param array
* @param string
* @return void
*/
- function language($file = array(), $lang = '')
+ public function language($file = array(), $lang = '')
{
$CI =& get_instance();
@@ -473,11 +491,10 @@ class CI_Loader {
/**
* Loads a config file
*
- * @access public
* @param string
* @return void
*/
- function config($file = '', $use_sections = FALSE, $fail_gracefully = FALSE)
+ public function config($file = '', $use_sections = FALSE, $fail_gracefully = FALSE)
{
$CI =& get_instance();
$CI->config->load($file, $use_sections, $fail_gracefully);
@@ -495,12 +512,12 @@ class CI_Loader {
* @param string an optional object name
* @return void
*/
- function driver($library = '', $params = NULL, $object_name = NULL)
+ public function driver($library = '', $params = NULL, $object_name = NULL)
{
if ( ! class_exists('CI_Driver_Library'))
{
// we aren't instantiating an object here, that'll be done by the Library itself
- require BASEPATH.'libraries/Driver'.EXT;
+ require BASEPATH.'libraries/Driver.php';
}
// We can save the loader some time since Drivers will *always* be in a subfolder,
@@ -520,11 +537,11 @@ class CI_Loader {
*
* Prepends a parent path to the library, model, helper, and config path arrays
*
- * @access public
* @param string
+ * @param boolean
* @return void
*/
- function add_package_path($path)
+ public function add_package_path($path, $view_cascade=TRUE)
{
$path = rtrim($path, '/').'/';
@@ -532,6 +549,8 @@ class CI_Loader {
array_unshift($this->_ci_model_paths, $path);
array_unshift($this->_ci_helper_paths, $path);
+ $this->_ci_view_paths = array($path.'views/' => $view_cascade) + $this->_ci_view_paths;
+
// Add config file path
$config =& $this->_ci_get_component('config');
array_unshift($config->_config_paths, $path);
@@ -544,11 +563,10 @@ class CI_Loader {
*
* Return a list of all package paths, by default it will ignore BASEPATH.
*
- * @access public
* @param string
* @return void
*/
- function get_package_paths($include_base = FALSE)
+ public function get_package_paths($include_base = FALSE)
{
return $include_base === TRUE ? $this->_ci_library_paths : $this->_ci_model_paths;
}
@@ -561,11 +579,10 @@ class CI_Loader {
* Remove a path from the library, model, and helper path arrays if it exists
* If no path is provided, the most recently added path is removed.
*
- * @access public
* @param type
* @return type
*/
- function remove_package_path($path = '', $remove_config_path = TRUE)
+ public function remove_package_path($path = '', $remove_config_path = TRUE)
{
$config =& $this->_ci_get_component('config');
@@ -574,12 +591,12 @@ class CI_Loader {
$void = array_shift($this->_ci_library_paths);
$void = array_shift($this->_ci_model_paths);
$void = array_shift($this->_ci_helper_paths);
+ $void = array_shift($this->_ci_view_paths);
$void = array_shift($config->_config_paths);
}
else
{
$path = rtrim($path, '/').'/';
-
foreach (array('_ci_library_paths', '_ci_model_paths', '_ci_helper_paths') as $var)
{
if (($key = array_search($path, $this->{$var})) !== FALSE)
@@ -588,6 +605,11 @@ class CI_Loader {
}
}
+ if (isset($this->_ci_view_paths[$path.'views/']))
+ {
+ unset($this->_ci_view_paths[$path.'views/']);
+ }
+
if (($key = array_search($path, $config->_config_paths)) !== FALSE)
{
unset($config->_config_paths[$key]);
@@ -598,6 +620,7 @@ class CI_Loader {
$this->_ci_library_paths = array_unique(array_merge($this->_ci_library_paths, array(APPPATH, BASEPATH)));
$this->_ci_helper_paths = array_unique(array_merge($this->_ci_helper_paths, array(APPPATH, BASEPATH)));
$this->_ci_model_paths = array_unique(array_merge($this->_ci_model_paths, array(APPPATH)));
+ $this->_ci_view_paths = array_merge($this->_ci_view_paths, array(APPPATH.'views/' => TRUE));
$config->_config_paths = array_unique(array_merge($config->_config_paths, array(APPPATH)));
}
@@ -610,11 +633,10 @@ class CI_Loader {
* Variables are prefixed with _ci_ to avoid symbol collision with
* variables made available to view files
*
- * @access private
* @param array
* @return void
*/
- function _ci_load($_ci_data)
+ protected function _ci_load($_ci_data)
{
// Set the default data variables
foreach (array('_ci_view', '_ci_vars', '_ci_path', '_ci_return') as $_ci_val)
@@ -622,20 +644,36 @@ class CI_Loader {
$$_ci_val = ( ! isset($_ci_data[$_ci_val])) ? FALSE : $_ci_data[$_ci_val];
}
+ $file_exists = FALSE;
+
// Set the path to the requested file
- if ($_ci_path == '')
+ if ($_ci_path != '')
{
- $_ci_ext = pathinfo($_ci_view, PATHINFO_EXTENSION);
- $_ci_file = ($_ci_ext == '') ? $_ci_view.EXT : $_ci_view;
- $_ci_path = $this->_ci_view_path.$_ci_file;
+ $_ci_x = explode('/', $_ci_path);
+ $_ci_file = end($_ci_x);
}
else
{
- $_ci_x = explode('/', $_ci_path);
- $_ci_file = end($_ci_x);
+ $_ci_ext = pathinfo($_ci_view, PATHINFO_EXTENSION);
+ $_ci_file = ($_ci_ext == '') ? $_ci_view.'.php' : $_ci_view;
+
+ foreach ($this->_ci_view_paths as $view_file => $cascade)
+ {
+ if (file_exists($view_file.$_ci_file))
+ {
+ $_ci_path = $view_file.$_ci_file;
+ $file_exists = TRUE;
+ break;
+ }
+
+ if ( ! $cascade)
+ {
+ break;
+ }
+ }
}
- if ( ! file_exists($_ci_path))
+ if ( ! $file_exists && ! file_exists($_ci_path))
{
show_error('Unable to load the requested file: '.$_ci_file);
}
@@ -672,9 +710,9 @@ class CI_Loader {
* We buffer the output for two reasons:
* 1. Speed. You get a significant speed boost.
* 2. So that the final rendered template can be
- * post-processed by the output class. Why do we
- * need post processing? For one thing, in order to
- * show the elapsed page load time. Unless we
+ * post-processed by the output class. Why do we
+ * need post processing? For one thing, in order to
+ * show the elapsed page load time. Unless we
* can intercept the content right before it's sent to
* the browser and then stop the timer it won't be accurate.
*/
@@ -731,18 +769,17 @@ class CI_Loader {
*
* This function loads the requested class.
*
- * @access private
* @param string the item that is being loaded
* @param mixed any additional parameters
* @param string an optional object name
* @return void
*/
- function _ci_load_class($class, $params = NULL, $object_name = NULL)
+ protected function _ci_load_class($class, $params = NULL, $object_name = NULL)
{
// Get the class name, and while we're at it trim any slashes.
// The directory path can be included as part of the class name,
// but we don't want a leading slash
- $class = str_replace(EXT, '', trim($class, '/'));
+ $class = str_replace('.php', '', trim($class, '/'));
// Was the path included with the class name?
// We look for a slash to determine this
@@ -759,12 +796,12 @@ class CI_Loader {
// We'll test for both lowercase and capitalized versions of the file name
foreach (array(ucfirst($class), strtolower($class)) as $class)
{
- $subclass = APPPATH.'libraries/'.$subdir.config_item('subclass_prefix').$class.EXT;
+ $subclass = APPPATH.'libraries/'.$subdir.config_item('subclass_prefix').$class.'.php';
// Is this a class extension request?
if (file_exists($subclass))
{
- $baseclass = BASEPATH.'libraries/'.ucfirst($class).EXT;
+ $baseclass = BASEPATH.'libraries/'.ucfirst($class).'.php';
if ( ! file_exists($baseclass))
{
@@ -772,11 +809,11 @@ class CI_Loader {
show_error("Unable to load the requested class: ".$class);
}
- // Safety: Was the class already loaded by a previous call?
+ // Safety: Was the class already loaded by a previous call?
if (in_array($subclass, $this->_ci_loaded_files))
{
// Before we deem this to be a duplicate request, let's see
- // if a custom object name is being supplied. If so, we'll
+ // if a custom object name is being supplied. If so, we'll
// return a new instance of the object
if ( ! is_null($object_name))
{
@@ -803,19 +840,19 @@ class CI_Loader {
$is_duplicate = FALSE;
foreach ($this->_ci_library_paths as $path)
{
- $filepath = $path.'libraries/'.$subdir.$class.EXT;
+ $filepath = $path.'libraries/'.$subdir.$class.'.php';
- // Does the file exist? No? Bummer...
+ // Does the file exist? No? Bummer...
if ( ! file_exists($filepath))
{
continue;
}
- // Safety: Was the class already loaded by a previous call?
+ // Safety: Was the class already loaded by a previous call?
if (in_array($filepath, $this->_ci_loaded_files))
{
// Before we deem this to be a duplicate request, let's see
- // if a custom object name is being supplied. If so, we'll
+ // if a custom object name is being supplied. If so, we'll
// return a new instance of the object
if ( ! is_null($object_name))
{
@@ -838,7 +875,7 @@ class CI_Loader {
} // END FOREACH
- // One last attempt. Maybe the library is in a subdirectory, but it wasn't specified?
+ // One last attempt. Maybe the library is in a subdirectory, but it wasn't specified?
if ($subdir == '')
{
$path = strtolower($class).'/'.$class;
@@ -859,15 +896,14 @@ class CI_Loader {
/**
* Instantiates a class
*
- * @access private
* @param string
* @param string
* @param string an optional object name
* @return null
*/
- function _ci_init_class($class, $prefix = '', $config = FALSE, $object_name = NULL)
+ protected function _ci_init_class($class, $prefix = '', $config = FALSE, $object_name = NULL)
{
- // Is there an associated config file for this class? Note: these should always be lowercase
+ // Is there an associated config file for this class? Note: these should always be lowercase
if ($config === NULL)
{
// Fetch the config paths containing any package paths
@@ -882,24 +918,24 @@ class CI_Loader {
// We test for both uppercase and lowercase, for servers that
// are case-sensitive with regard to file names. Check for environment
// first, global next
- if (file_exists($path .'config/'.ENVIRONMENT.'/'.strtolower($class).EXT))
+ if (defined('ENVIRONMENT') AND file_exists($path .'config/'.ENVIRONMENT.'/'.strtolower($class).'.php'))
{
- include_once($path .'config/'.ENVIRONMENT.'/'.strtolower($class).EXT);
+ include_once($path .'config/'.ENVIRONMENT.'/'.strtolower($class).'.php');
break;
}
- elseif (file_exists($path .'config/'.ENVIRONMENT.'/'.ucfirst(strtolower($class)).EXT))
+ elseif (defined('ENVIRONMENT') AND file_exists($path .'config/'.ENVIRONMENT.'/'.ucfirst(strtolower($class)).'.php'))
{
- include_once($path .'config/'.ENVIRONMENT.'/'.ucfirst(strtolower($class)).EXT);
+ include_once($path .'config/'.ENVIRONMENT.'/'.ucfirst(strtolower($class)).'.php');
break;
}
- elseif (file_exists($path .'config/'.strtolower($class).EXT))
+ elseif (file_exists($path .'config/'.strtolower($class).'.php'))
{
- include_once($path .'config/'.strtolower($class).EXT);
+ include_once($path .'config/'.strtolower($class).'.php');
break;
}
- elseif (file_exists($path .'config/'.ucfirst(strtolower($class)).EXT))
+ elseif (file_exists($path .'config/'.ucfirst(strtolower($class)).'.php'))
{
- include_once($path .'config/'.ucfirst(strtolower($class)).EXT);
+ include_once($path .'config/'.ucfirst(strtolower($class)).'.php');
break;
}
}
@@ -934,7 +970,7 @@ class CI_Loader {
}
// Set the variable name we will assign the class to
- // Was a custom class name supplied? If so we'll use it
+ // Was a custom class name supplied? If so we'll use it
$class = strtolower($class);
if (is_null($object_name))
@@ -969,13 +1005,23 @@ class CI_Loader {
* The config/autoload.php file contains an array that permits sub-systems,
* libraries, and helpers to be loaded automatically.
*
- * @access private
+ * This function is public, as it's used in the CI_Controller class.
+ * However, there is no reason you should ever needs to use it.
+ *
* @param array
* @return void
*/
- function _ci_autoloader()
+ public function ci_autoloader()
{
- include_once(APPPATH.'config/autoload'.EXT);
+ if (defined('ENVIRONMENT') AND file_exists(APPPATH.'config/'.ENVIRONMENT.'/autoload.php'))
+ {
+ include_once(APPPATH.'config/'.ENVIRONMENT.'/autoload.php');
+ }
+ else
+ {
+ include_once(APPPATH.'config/autoload.php');
+ }
+
if ( ! isset($autoload))
{
@@ -1048,11 +1094,10 @@ class CI_Loader {
*
* Takes an object as input and converts the class variables to array key/vals
*
- * @access private
* @param object
* @return array
*/
- function _ci_object_to_array($object)
+ protected function _ci_object_to_array($object)
{
return (is_object($object)) ? get_object_vars($object) : $object;
}
@@ -1062,10 +1107,9 @@ class CI_Loader {
/**
* Get a reference to a specific library or model
*
- * @access private
* @return bool
*/
- function &_ci_get_component($component)
+ protected function &_ci_get_component($component)
{
$CI =& get_instance();
return $CI->$component;
@@ -1078,28 +1122,25 @@ class CI_Loader {
*
* This function preps the name of various items to make loading them more reliable.
*
- * @access private
* @param mixed
* @return array
*/
- function _ci_prep_filename($filename, $extension)
+ protected function _ci_prep_filename($filename, $extension)
{
if ( ! is_array($filename))
{
- return array(strtolower(str_replace(EXT, '', str_replace($extension, '', $filename)).$extension));
+ return array(strtolower(str_replace('.php', '', str_replace($extension, '', $filename)).$extension));
}
else
{
foreach ($filename as $key => $val)
{
- $filename[$key] = strtolower(str_replace(EXT, '', str_replace($extension, '', $val)).$extension);
+ $filename[$key] = strtolower(str_replace('.php', '', str_replace($extension, '', $val)).$extension);
}
return $filename;
}
}
-
-
}
/* End of file Loader.php */
diff --git a/system/core/Model.php b/system/core/Model.php
index 8566a0b66..61c71b672 100644
--- a/system/core/Model.php
+++ b/system/core/Model.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
diff --git a/system/core/Output.php b/system/core/Output.php
index 6644b3bff..562dbb86b 100644
--- a/system/core/Output.php
+++ b/system/core/Output.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -33,19 +33,27 @@ class CI_Output {
protected $headers = array();
protected $mime_types = array();
protected $enable_profiler = FALSE;
- protected $parse_exec_vars = TRUE; // whether or not to parse variables like {elapsed_time} and {memory_usage}
-
protected $_zlib_oc = FALSE;
protected $_profiler_sections = array();
+ protected $parse_exec_vars = TRUE; // whether or not to parse variables like {elapsed_time} and {memory_usage}
function __construct()
{
$this->_zlib_oc = @ini_get('zlib.output_compression');
// Get mime types for later
- include APPPATH.'config/mimes'.EXT;
+ if (defined('ENVIRONMENT') AND file_exists(APPPATH.'config/'.ENVIRONMENT.'/mimes.php'))
+ {
+ include APPPATH.'config/'.ENVIRONMENT.'/mimes.php';
+ }
+ else
+ {
+ include APPPATH.'config/mimes.php';
+ }
+
+
$this->mime_types = $mimes;
-
+
log_message('debug', "Output Class Initialized");
}
@@ -78,7 +86,7 @@ class CI_Output {
function set_output($output)
{
$this->final_output = $output;
-
+
return $this;
}
@@ -114,7 +122,7 @@ class CI_Output {
*
* Lets you set a server header which will be outputted with the final display.
*
- * Note: If a file is cached, headers will not be sent. We need to figure out
+ * Note: If a file is cached, headers will not be sent. We need to figure out
* how to permit header data to be saved with the cache data...
*
* @access public
@@ -168,7 +176,7 @@ class CI_Output {
$header = 'Content-Type: '.$mime_type;
$this->headers[] = array($header, TRUE);
-
+
return $this;
}
@@ -253,7 +261,7 @@ class CI_Output {
* $this->final_output
*
* This function sends the finalized output data to the browser along
- * with any server headers and profile data. It also stops the
+ * with any server headers and profile data. It also stops the
* benchmark timer so the page rendering speed and memory usage can be shown.
*
* @access public
@@ -261,7 +269,7 @@ class CI_Output {
*/
function _display($output = '')
{
- // Note: We use globals because we can't use $CI =& get_instance()
+ // Note: We use globals because we can't use $CI =& get_instance()
// since this function is sometimes called by the caching mechanism,
// which happens before the CI super object is available.
global $BM, $CFG;
@@ -282,7 +290,7 @@ class CI_Output {
// --------------------------------------------------------------------
- // Do we need to write a cache file? Only if the controller does not have its
+ // Do we need to write a cache file? Only if the controller does not have its
// own _output() method and we are not dealing with a cache file, which we
// can determine by the existence of the $CI object above
if ($this->cache_expiration > 0 && isset($CI) && ! method_exists($CI, '_output'))
@@ -360,7 +368,7 @@ class CI_Output {
// we will remove them and add them back after we insert the profile data
if (preg_match("|</body>.*?</html>|is", $output))
{
- $output = preg_replace("|</body>.*?</html>|is", '', $output);
+ $output = preg_replace("|</body>.*?</html>|is", '', $output);
$output .= $CI->profiler->run();
$output .= '</body></html>';
}
@@ -373,14 +381,14 @@ class CI_Output {
// --------------------------------------------------------------------
// Does the controller contain a function named _output()?
- // If so send the output there. Otherwise, echo it.
+ // If so send the output there. Otherwise, echo it.
if (method_exists($CI, '_output'))
{
$CI->_output($output);
}
else
{
- echo $output; // Send it to the browser!
+ echo $output; // Send it to the browser!
}
log_message('debug', "Final output sent to browser");
@@ -450,7 +458,7 @@ class CI_Output {
{
$cache_path = ($CFG->item('cache_path') == '') ? APPPATH.'cache/' : $CFG->item('cache_path');
- // Build the file path. The file name is an MD5 hash of the full URI
+ // Build the file path. The file name is an MD5 hash of the full URI
$uri = $CFG->item('base_url').
$CFG->item('index_page').
$URI->uri_string;
diff --git a/system/core/Router.php b/system/core/Router.php
index 6893e6e92..a76a7bd0a 100644
--- a/system/core/Router.php
+++ b/system/core/Router.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -61,7 +61,7 @@ class CI_Router {
*/
function _set_routing()
{
- // Are query strings enabled in the config file? Normally CI doesn't utilize query strings
+ // Are query strings enabled in the config file? Normally CI doesn't utilize query strings
// since URI segments are more search-engine friendly, but they can optionally be used.
// If this feature is enabled, we will gather the directory/class/method a little differently
$segments = array();
@@ -87,7 +87,15 @@ class CI_Router {
}
// Load the routes.php file.
- @include(APPPATH.'config/routes'.EXT);
+ if (defined('ENVIRONMENT') AND is_file(APPPATH.'config/'.ENVIRONMENT.'/routes.php'))
+ {
+ include(APPPATH.'config/'.ENVIRONMENT.'/routes.php');
+ }
+ elseif (is_file(APPPATH.'config/routes.php'))
+ {
+ include(APPPATH.'config/routes.php');
+ }
+
$this->routes = ( ! isset($route) OR ! is_array($route)) ? array() : $route;
unset($route);
@@ -95,7 +103,7 @@ class CI_Router {
// the URI doesn't correlated to a valid controller.
$this->default_controller = ( ! isset($this->routes['default_controller']) OR $this->routes['default_controller'] == '') ? FALSE : strtolower($this->routes['default_controller']);
- // Were there any query string segments? If so, we'll validate them and bail out since we're done.
+ // Were there any query string segments? If so, we'll validate them and bail out since we're done.
if (count($segments) > 0)
{
return $this->_validate_request($segments);
@@ -204,7 +212,7 @@ class CI_Router {
// --------------------------------------------------------------------
/**
- * Validates the supplied segments. Attempts to determine the path to
+ * Validates the supplied segments. Attempts to determine the path to
* the controller.
*
* @access private
@@ -219,7 +227,7 @@ class CI_Router {
}
// Does the requested controller exist in the root folder?
- if (file_exists(APPPATH.'controllers/'.$segments[0].EXT))
+ if (file_exists(APPPATH.'controllers/'.$segments[0].'.php'))
{
return $segments;
}
@@ -234,7 +242,7 @@ class CI_Router {
if (count($segments) > 0)
{
// Does the requested controller exist in the sub-folder?
- if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$segments[0].EXT))
+ if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$segments[0].'.php'))
{
show_404($this->fetch_directory().$segments[0]);
}
@@ -256,7 +264,7 @@ class CI_Router {
}
// Does the default controller exist in the sub-folder?
- if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$this->default_controller.EXT))
+ if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$this->default_controller.'.php'))
{
$this->directory = '';
return array();
@@ -269,7 +277,7 @@ class CI_Router {
// If we've gotten this far it means that the URI does not correlate to a valid
- // controller class. We will now see if there is an override
+ // controller class. We will now see if there is an override
if ( ! empty($this->routes['404_override']))
{
$x = explode('/', $this->routes['404_override']);
@@ -288,7 +296,7 @@ class CI_Router {
// --------------------------------------------------------------------
/**
- * Parse Routes
+ * Parse Routes
*
* This function matches any routes that may exist in
* the config/routes.php file against the URI to
@@ -302,7 +310,7 @@ class CI_Router {
// Turn the segment array into a URI string
$uri = implode('/', $this->uri->segments);
- // Is there a literal match? If so we're done
+ // Is there a literal match? If so we're done
if (isset($this->routes[$uri]))
{
return $this->_set_request(explode('/', $this->routes[$uri]));
@@ -362,7 +370,7 @@ class CI_Router {
// --------------------------------------------------------------------
/**
- * Set the method name
+ * Set the method name
*
* @access public
* @param string
@@ -376,7 +384,7 @@ class CI_Router {
// --------------------------------------------------------------------
/**
- * Fetch the current method
+ * Fetch the current method
*
* @access public
* @return string
@@ -394,7 +402,7 @@ class CI_Router {
// --------------------------------------------------------------------
/**
- * Set the directory name
+ * Set the directory name
*
* @access public
* @param string
@@ -408,7 +416,7 @@ class CI_Router {
// --------------------------------------------------------------------
/**
- * Fetch the sub-directory (if any) that contains the requested controller class
+ * Fetch the sub-directory (if any) that contains the requested controller class
*
* @access public
* @return string
@@ -421,7 +429,7 @@ class CI_Router {
// --------------------------------------------------------------------
/**
- * Set the controller overrides
+ * Set the controller overrides
*
* @access public
* @param array
diff --git a/system/libraries/Security.php b/system/core/Security.php
index 58db4e79c..f5bfafd9b 100644
--- a/system/libraries/Security.php
+++ b/system/core/Security.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -22,44 +22,56 @@
* @subpackage Libraries
* @category Security
* @author ExpressionEngine Dev Team
- * @link http://codeigniter.com/user_guide/libraries/sessions.html
+ * @link http://codeigniter.com/user_guide/libraries/security.html
*/
class CI_Security {
- public $xss_hash = '';
- public $csrf_hash = '';
- public $csrf_expire = 7200; // Two hours (in seconds)
- public $csrf_token_name = 'ci_csrf_token';
- public $csrf_cookie_name = 'ci_csrf_token';
+ protected $_xss_hash = '';
+ protected $_csrf_hash = '';
+ protected $_csrf_expire = 7200; // Two hours (in seconds)
+ protected $_csrf_token_name = 'ci_csrf_token';
+ protected $_csrf_cookie_name = 'ci_csrf_token';
/* never allowed, string replacement */
- public $never_allowed_str = array(
- 'document.cookie' => '[removed]',
- 'document.write' => '[removed]',
- '.parentNode' => '[removed]',
- '.innerHTML' => '[removed]',
- 'window.location' => '[removed]',
- '-moz-binding' => '[removed]',
- '<!--' => '&lt;!--',
- '-->' => '--&gt;',
- '<![CDATA[' => '&lt;![CDATA['
- );
+ protected $_never_allowed_str = array(
+ 'document.cookie' => '[removed]',
+ 'document.write' => '[removed]',
+ '.parentNode' => '[removed]',
+ '.innerHTML' => '[removed]',
+ 'window.location' => '[removed]',
+ '-moz-binding' => '[removed]',
+ '<!--' => '&lt;!--',
+ '-->' => '--&gt;',
+ '<![CDATA[' => '&lt;![CDATA['
+ );
+
/* never allowed, regex replacement */
- public $never_allowed_regex = array(
- "javascript\s*:" => '[removed]',
- "expression\s*(\(|&\#40;)" => '[removed]', // CSS and IE
- "vbscript\s*:" => '[removed]', // IE, surprise!
- "Redirect\s+302" => '[removed]'
- );
+ protected $_never_allowed_regex = array(
+ "javascript\s*:" => '[removed]',
+ "expression\s*(\(|&\#40;)" => '[removed]', // CSS and IE
+ "vbscript\s*:" => '[removed]', // IE, surprise!
+ "Redirect\s+302" => '[removed]'
+ );
+ /**
+ * Constructor
+ */
public function __construct()
{
- $this->csrf_token_name = (config_item('csrf_token_name')) ? config_item('csrf_token_name') : 'csrf_token_name';
- $this->csrf_cookie_name = (config_item('csrf_cookie_name')) ? config_item('csrf_cookie_name') : 'csrf_cookie_name';
- $this->csrf_expire = (config_item('csrf_expire')) ? config_item('csrf_expire') : 7200;
+ // CSRF config
+ foreach(array('csrf_expire', 'csrf_token_name', 'csrf_cookie_name') as $key)
+ {
+ if (FALSE !== ($val = config_item($key)))
+ {
+ $this->{'_'.$key} = $val;
+ }
+ }
- // Append application specific cookie prefix to token name
- $this->csrf_cookie_name = (config_item('cookie_prefix')) ? config_item('cookie_prefix').$this->csrf_token_name : $this->csrf_token_name;
+ // Append application specific cookie prefix
+ if (config_item('cookie_prefix'))
+ {
+ $this->_csrf_cookie_name = config_item('cookie_prefix').$this->_csrf_cookie_name;
+ }
// Set the CSRF hash
$this->_csrf_set_hash();
@@ -72,8 +84,7 @@ class CI_Security {
/**
* Verify Cross Site Request Forgery Protection
*
- * @access public
- * @return null
+ * @return object
*/
public function csrf_verify()
{
@@ -84,26 +95,30 @@ class CI_Security {
}
// Do the tokens exist in both the _POST and _COOKIE arrays?
- if ( ! isset($_POST[$this->csrf_token_name]) OR ! isset($_COOKIE[$this->csrf_cookie_name]))
+ if ( ! isset($_POST[$this->_csrf_token_name]) OR
+ ! isset($_COOKIE[$this->_csrf_cookie_name]))
{
$this->csrf_show_error();
}
// Do the tokens match?
- if ($_POST[$this->csrf_token_name] != $_COOKIE[$this->csrf_cookie_name])
+ if ($_POST[$this->_csrf_token_name] != $_COOKIE[$this->_csrf_cookie_name])
{
$this->csrf_show_error();
}
- // We kill this since we're done and we don't want to polute the _POST array
- unset($_POST[$this->csrf_token_name]);
+ // We kill this since we're done and we don't want to
+ // polute the _POST array
+ unset($_POST[$this->_csrf_token_name]);
// Nothing should last forever
- unset($_COOKIE[$this->csrf_cookie_name]);
+ unset($_COOKIE[$this->_csrf_cookie_name]);
$this->_csrf_set_hash();
$this->csrf_set_cookie();
log_message('debug', "CSRF token verified ");
+
+ return $this;
}
// --------------------------------------------------------------------
@@ -111,57 +126,68 @@ class CI_Security {
/**
* Set Cross Site Request Forgery Protection Cookie
*
- * @access public
- * @return null
+ * @return object
*/
public function csrf_set_cookie()
{
- $expire = time() + $this->csrf_expire;
+ $expire = time() + $this->_csrf_expire;
$secure_cookie = (config_item('cookie_secure') === TRUE) ? 1 : 0;
- setcookie($this->csrf_cookie_name, $this->csrf_hash, $expire, config_item('cookie_path'), config_item('cookie_domain'), $secure_cookie);
+ if ($secure_cookie)
+ {
+ $req = isset($_SERVER['HTTPS']) ? $_SERVER['HTTPS'] : FALSE;
+
+ if ( ! $req OR $req == 'off')
+ {
+ return FALSE;
+ }
+ }
+
+ setcookie($this->_csrf_cookie_name, $this->_csrf_hash, $expire, config_item('cookie_path'), config_item('cookie_domain'), $secure_cookie);
log_message('debug', "CRSF cookie Set");
+
+ return $this;
}
// --------------------------------------------------------------------
/**
- * Set Cross Site Request Forgery Protection Cookie
+ * Show CSRF Error
*
- * @access private
- * @return null
+ * @return void
*/
- private function _csrf_set_hash()
+ public function csrf_show_error()
{
- if ($this->csrf_hash == '')
- {
- // If the cookie exists we will use it's value. We don't necessarily want to regenerate it with
- // each page load since a page could contain embedded sub-pages causing this feature to fail
- if (isset($_COOKIE[$this->csrf_cookie_name]) AND $_COOKIE[$this->csrf_cookie_name] != '')
- {
- $this->csrf_hash = $_COOKIE[$this->csrf_cookie_name];
- }
- else
- {
- $this->csrf_hash = md5(uniqid(rand(), TRUE));
- }
- }
+ show_error('The action you have requested is not allowed.');
+ }
- return $this->csrf_hash;
+ // --------------------------------------------------------------------
+
+ /**
+ * Get CSRF Hash
+ *
+ * Getter Method
+ *
+ * @return string self::_csrf_hash
+ */
+ public function get_csrf_hash()
+ {
+ return $this->_csrf_hash;
}
// --------------------------------------------------------------------
/**
- * Show CSRF Error
+ * Get CSRF Token Name
+ *
+ * Getter Method
*
- * @access public
- * @return null
+ * @return string self::csrf_token_name
*/
- public function csrf_show_error()
+ public function get_csrf_token_name()
{
- show_error('The action you have requested is not allowed.');
+ return $this->_csrf_token_name;
}
// --------------------------------------------------------------------
@@ -170,14 +196,14 @@ class CI_Security {
* XSS Clean
*
* Sanitizes data so that Cross Site Scripting Hacks can be
- * prevented. This function does a fair amount of work but
+ * prevented. This function does a fair amount of work but
* it is extremely thorough, designed to prevent even the
- * most obscure XSS attempts. Nothing is ever 100% foolproof,
+ * most obscure XSS attempts. Nothing is ever 100% foolproof,
* of course, but I haven't been able to get anything passed
* the filter.
*
* Note: This function should only be used to deal with data
- * upon submission. It's not something that should
+ * upon submission. It's not something that should
* be used for general runtime processing.
*
* This function was based in part on some code and ideas I
@@ -188,7 +214,6 @@ class CI_Security {
* harvested from examining vulnerabilities in other programs:
* http://ha.ckers.org/xss.html
*
- * @access public
* @param mixed string or array
* @return string
*/
@@ -213,35 +238,8 @@ class CI_Security {
*/
$str = remove_invisible_characters($str);
- /*
- * Protect GET variables in URLs
- */
-
- // 901119URL5918AMP18930PROTECT8198
-
- $str = preg_replace('|\&([a-z\_0-9\-]+)\=([a-z\_0-9\-]+)|i', $this->xss_hash()."\\1=\\2", $str);
-
- /*
- * Validate standard character entities
- *
- * Add a semicolon if missing. We do this to enable
- * the conversion of entities to ASCII later.
- *
- */
- $str = preg_replace('#(&\#?[0-9a-z]{2,})([\x00-\x20])*;?#i', "\\1;\\2", $str);
-
- /*
- * Validate UTF16 two byte encoding (x00)
- *
- * Just as above, adds a semicolon if missing.
- *
- */
- $str = preg_replace('#(&\#x?)([0-9A-F]+);?#i',"\\1\\2;",$str);
-
- /*
- * Un-Protect GET variables in URLs
- */
- $str = str_replace($this->xss_hash(), '&', $str);
+ // Validate Entities in URLs
+ $str = $this->_validate_entities($str);
/*
* URL Decode
@@ -278,9 +276,8 @@ class CI_Security {
*
* This prevents strings like this: ja vascript
* NOTE: we deal with spaces between characters later.
- * NOTE: preg_replace was found to be amazingly slow here on large blocks of data,
- * so we use str_replace.
- *
+ * NOTE: preg_replace was found to be amazingly slow here on
+ * large blocks of data, so we use str_replace.
*/
if (strpos($str, "\t") !== FALSE)
@@ -293,49 +290,41 @@ class CI_Security {
*/
$converted_string = $str;
- /*
- * Not Allowed Under Any Conditions
- */
-
- foreach ($this->never_allowed_str as $key => $val)
- {
- $str = str_replace($key, $val, $str);
- }
-
- foreach ($this->never_allowed_regex as $key => $val)
- {
- $str = preg_replace("#".$key."#i", $val, $str);
- }
+ // Remove Strings that are never allowed
+ $str = $this->_do_never_allowed($str);
/*
* Makes PHP tags safe
*
- * Note: XML tags are inadvertently replaced too:
+ * Note: XML tags are inadvertently replaced too:
*
- * <?xml
+ * <?xml
*
* But it doesn't seem to pose a problem.
- *
*/
if ($is_image === TRUE)
{
- // Images have a tendency to have the PHP short opening and closing tags every so often
- // so we skip those and only do the long opening tags.
+ // Images have a tendency to have the PHP short opening and
+ // closing tags every so often so we skip those and only
+ // do the long opening tags.
$str = preg_replace('/<\?(php)/i', "&lt;?\\1", $str);
}
else
{
- $str = str_replace(array('<?', '?'.'>'), array('&lt;?', '?&gt;'), $str);
+ $str = str_replace(array('<?', '?'.'>'), array('&lt;?', '?&gt;'), $str);
}
/*
* Compact any exploded words
*
- * This corrects words like: j a v a s c r i p t
+ * This corrects words like: j a v a s c r i p t
* These words are compacted back to their correct state.
- *
*/
- $words = array('javascript', 'expression', 'vbscript', 'script', 'applet', 'alert', 'document', 'write', 'cookie', 'window');
+ $words = array(
+ 'javascript', 'expression', 'vbscript', 'script',
+ 'applet', 'alert', 'document', 'write', 'cookie', 'window'
+ );
+
foreach ($words as $word)
{
$temp = '';
@@ -352,8 +341,9 @@ class CI_Security {
/*
* Remove disallowed Javascript in links or img tags
- * We used to do some version comparisons and use of stripos for PHP5, but it is dog slow compared
- * to these simplified non-capturing preg_match(), especially if the pattern exists in the string
+ * We used to do some version comparisons and use of stripos for PHP5,
+ * but it is dog slow compared to these simplified non-capturing
+ * preg_match(), especially if the pattern exists in the string
*/
do
{
@@ -374,30 +364,12 @@ class CI_Security {
$str = preg_replace("#<(/*)(script|xss)(.*?)\>#si", '[removed]', $str);
}
}
- while ($original != $str);
+ while($original != $str);
unset($original);
- /*
- * Remove JavaScript Event Handlers
- *
- * Note: This code is a little blunt. It removes
- * the event handler and anything up to the closing >,
- * but it's unlikely to be a problem.
- *
- */
- $event_handlers = array('[^a-z_\-]on\w*','xmlns');
-
- if ($is_image === TRUE)
- {
- /*
- * Adobe Photoshop puts XML metadata into JFIF images, including namespacing,
- * so we have to allow this for images. -Paul
- */
- unset($event_handlers[array_search('xmlns', $event_handlers)]);
- }
-
- $str = preg_replace("#<([^><]+?)(".implode('|', $event_handlers).")(\s*=\s*[^><]*)([><]*)#i", "<\\1\\4", $str);
+ // Remove evil attributes such as style, onclick and xmlns
+ $str = $this->_remove_evil_attributes($str, $is_image);
/*
* Sanitize naughty HTML elements
@@ -407,7 +379,6 @@ class CI_Security {
*
* So this: <blink>
* Becomes: &lt;blink&gt;
- *
*/
$naughty = 'alert|applet|audio|basefont|base|behavior|bgsound|blink|body|embed|expression|form|frameset|frame|head|html|ilayer|iframe|input|isindex|layer|link|meta|object|plaintext|style|script|textarea|title|video|xml|xss';
$str = preg_replace_callback('#<(/*\s*)('.$naughty.')([^><]*)([><]*)#is', array($this, '_sanitize_naughty_html'), $str);
@@ -417,51 +388,34 @@ class CI_Security {
*
* Similar to above, only instead of looking for
* tags it looks for PHP and JavaScript commands
- * that are disallowed. Rather than removing the
+ * that are disallowed. Rather than removing the
* code, it simply converts the parenthesis to entities
* rendering the code un-executable.
*
* For example: eval('some code')
* Becomes: eval&#40;'some code'&#41;
- *
*/
$str = preg_replace('#(alert|cmd|passthru|eval|exec|expression|system|fopen|fsockopen|file|file_get_contents|readfile|unlink)(\s*)\((.*?)\)#si', "\\1\\2&#40;\\3&#41;", $str);
- /*
- * Final clean up
- *
- * This adds a bit of extra precaution in case
- * something got through the above filters
- *
- */
- foreach ($this->never_allowed_str as $key => $val)
- {
- $str = str_replace($key, $val, $str);
- }
- foreach ($this->never_allowed_regex as $key => $val)
- {
- $str = preg_replace("#".$key."#i", $val, $str);
- }
+ // Final clean up
+ // This adds a bit of extra precaution in case
+ // something got through the above filters
+ $str = $this->_do_never_allowed($str);
/*
- * Images are Handled in a Special Way
- * - Essentially, we want to know that after all of the character conversion is done whether
- * any unwanted, likely XSS, code was found. If not, we return TRUE, as the image is clean.
- * However, if the string post-conversion does not matched the string post-removal of XSS,
- * then it fails, as there was unwanted XSS code found and removed/changed during processing.
+ * Images are Handled in a Special Way
+ * - Essentially, we want to know that after all of the character
+ * conversion is done whether any unwanted, likely XSS, code was found.
+ * If not, we return TRUE, as the image is clean.
+ * However, if the string post-conversion does not matched the
+ * string post-removal of XSS, then it fails, as there was unwanted XSS
+ * code found and removed/changed during processing.
*/
if ($is_image === TRUE)
{
- if ($str == $converted_string)
- {
- return TRUE;
- }
- else
- {
- return FALSE;
- }
+ return ($str == $converted_string) ? TRUE: FALSE;
}
log_message('debug', "XSS Filtering completed");
@@ -473,59 +427,208 @@ class CI_Security {
/**
* Random Hash for protecting URLs
*
- * @access public
* @return string
*/
public function xss_hash()
{
- if ($this->xss_hash == '')
+ if ($this->_xss_hash == '')
{
if (phpversion() >= 4.2)
+ {
mt_srand();
+ }
else
+ {
mt_srand(hexdec(substr(md5(microtime()), -8)) & 0x7fffffff);
+ }
- $this->xss_hash = md5(time() + mt_rand(0, 1999999999));
+ $this->_xss_hash = md5(time() + mt_rand(0, 1999999999));
}
- return $this->xss_hash;
+ return $this->_xss_hash;
}
// --------------------------------------------------------------------
/**
+ * HTML Entities Decode
+ *
+ * This function is a replacement for html_entity_decode()
+ *
+ * In some versions of PHP the native function does not work
+ * when UTF-8 is the specified character set, so this gives us
+ * a work-around. More info here:
+ * http://bugs.php.net/bug.php?id=25670
+ *
+ * NOTE: html_entity_decode() has a bug in some PHP versions when UTF-8 is the
+ * character set, and the PHP developers said they were not back porting the
+ * fix to versions other than PHP 5.x.
+ *
+ * @param string
+ * @param string
+ * @return string
+ */
+ public function entity_decode($str, $charset='UTF-8')
+ {
+ if (stristr($str, '&') === FALSE) return $str;
+
+ // The reason we are not using html_entity_decode() by itself is because
+ // while it is not technically correct to leave out the semicolon
+ // at the end of an entity most browsers will still interpret the entity
+ // correctly. html_entity_decode() does not convert entities without
+ // semicolons, so we are left with our own little solution here. Bummer.
+
+ if (function_exists('html_entity_decode') &&
+ (strtolower($charset) != 'utf-8'))
+ {
+ $str = html_entity_decode($str, ENT_COMPAT, $charset);
+ $str = preg_replace('~&#x(0*[0-9a-f]{2,5})~ei', 'chr(hexdec("\\1"))', $str);
+ return preg_replace('~&#([0-9]{2,4})~e', 'chr(\\1)', $str);
+ }
+
+ // Numeric Entities
+ $str = preg_replace('~&#x(0*[0-9a-f]{2,5});{0,1}~ei', 'chr(hexdec("\\1"))', $str);
+ $str = preg_replace('~&#([0-9]{2,4});{0,1}~e', 'chr(\\1)', $str);
+
+ // Literal Entities - Slightly slow so we do another check
+ if (stristr($str, '&') === FALSE)
+ {
+ $str = strtr($str, array_flip(get_html_translation_table(HTML_ENTITIES)));
+ }
+
+ return $str;
+ }
+
+ // --------------------------------------------------------------------
+
+ /**
+ * Filename Security
+ *
+ * @param string
+ * @return string
+ */
+ public function sanitize_filename($str, $relative_path = FALSE)
+ {
+ $bad = array(
+ "../",
+ "<!--",
+ "-->",
+ "<",
+ ">",
+ "'",
+ '"',
+ '&',
+ '$',
+ '#',
+ '{',
+ '}',
+ '[',
+ ']',
+ '=',
+ ';',
+ '?',
+ "%20",
+ "%22",
+ "%3c", // <
+ "%253c", // <
+ "%3e", // >
+ "%0e", // >
+ "%28", // (
+ "%29", // )
+ "%2528", // (
+ "%26", // &
+ "%24", // $
+ "%3f", // ?
+ "%3b", // ;
+ "%3d" // =
+ );
+
+ if ( ! $relative_path)
+ {
+ $bad[] = './';
+ $bad[] = '/';
+ }
+
+ $str = remove_invisible_characters($str, FALSE);
+ return stripslashes(str_replace($bad, '', $str));
+ }
+
+ // ----------------------------------------------------------------
+
+ /**
* Compact Exploded Words
*
* Callback function for xss_clean() to remove whitespace from
* things like j a v a s c r i p t
*
- * @access private
* @param type
* @return type
*/
- private function _compact_exploded_words($matches)
+ protected function _compact_exploded_words($matches)
{
return preg_replace('/\s+/s', '', $matches[1]).$matches[2];
}
// --------------------------------------------------------------------
+ /*
+ * Remove Evil HTML Attributes (like evenhandlers and style)
+ *
+ * It removes the evil attribute and either:
+ * - Everything up until a space
+ * For example, everything between the pipes:
+ * <a |style=document.write('hello');alert('world');| class=link>
+ * - Everything inside the quotes
+ * For example, everything between the pipes:
+ * <a |style="document.write('hello'); alert('world');"| class="link">
+ *
+ * @param string $str The string to check
+ * @param boolean $is_image TRUE if this is an image
+ * @return string The string with the evil attributes removed
+ */
+ protected function _remove_evil_attributes($str, $is_image)
+ {
+ // All javascript event handlers (e.g. onload, onclick, onmouseover), style, and xmlns
+ $evil_attributes = array('on\w*', 'style', 'xmlns');
+
+ if ($is_image === TRUE)
+ {
+ /*
+ * Adobe Photoshop puts XML metadata into JFIF images,
+ * including namespacing, so we have to allow this for images.
+ */
+ unset($evil_attributes[array_search('xmlns', $evil_attributes)]);
+ }
+
+ do {
+ $str = preg_replace(
+ "#<(/?[^><]+?)([^A-Za-z\-])(".implode('|', $evil_attributes).")(\s*=\s*)([\"][^>]*?[\"]|[\'][^>]*?[\']|[^>]*?)([\s><])([><]*)#i",
+ "<$1$6",
+ $str, -1, $count
+ );
+ } while ($count);
+
+ return $str;
+ }
+
+ // --------------------------------------------------------------------
+
/**
* Sanitize Naughty HTML
*
* Callback function for xss_clean() to remove naughty HTML elements
*
- * @access private
* @param array
* @return string
*/
- private function _sanitize_naughty_html($matches)
+ protected function _sanitize_naughty_html($matches)
{
// encode opening brace
$str = '&lt;'.$matches[1].$matches[2].$matches[3];
// encode captured opening or closing brace to prevent recursive vectors
- $str .= str_replace(array('>', '<'), array('&gt;', '&lt;'), $matches[4]);
+ $str .= str_replace(array('>', '<'), array('&gt;', '&lt;'),
+ $matches[4]);
return $str;
}
@@ -540,16 +643,18 @@ class CI_Security {
* and prevents PREG_BACKTRACK_LIMIT_ERROR from being triggered in
* PHP 5.2+ on link-heavy strings
*
- * @access private
* @param array
* @return string
*/
- private function _js_link_removal($match)
+ protected function _js_link_removal($match)
{
$attributes = $this->_filter_attributes(str_replace(array('<', '>'), '', $match[1]));
- return str_replace($match[1], preg_replace("#href=.*?(alert\(|alert&\#40;|javascript\:|charset\=|window\.|document\.|\.cookie|<script|<xss|base64\s*,)#si", "", $attributes), $match[0]);
+
+ return str_replace($match[1], preg_replace("#href=.*?(alert\(|alert&\#40;|javascript\:|livescript\:|mocha\:|charset\=|window\.|document\.|\.cookie|<script|<xss|base64\s*,)#si", "", $attributes), $match[0]);
}
+ // --------------------------------------------------------------------
+
/**
* JS Image Removal
*
@@ -558,14 +663,14 @@ class CI_Security {
* and prevents PREG_BACKTRACK_LIMIT_ERROR from being triggered in
* PHP 5.2+ on image tag heavy strings
*
- * @access private
* @param array
* @return string
*/
- private function _js_img_removal($match)
+ protected function _js_img_removal($match)
{
$attributes = $this->_filter_attributes(str_replace(array('<', '>'), '', $match[1]));
- return str_replace($match[1], preg_replace("#src=.*?(alert\(|alert&\#40;|javascript\:|charset\=|window\.|document\.|\.cookie|<script|<xss|base64\s*,)#si", "", $attributes), $match[0]);
+
+ return str_replace($match[1], preg_replace("#src=.*?(alert\(|alert&\#40;|javascript\:|livescript\:|mocha\:|charset\=|window\.|document\.|\.cookie|<script|<xss|base64\s*,)#si", "", $attributes), $match[0]);
}
// --------------------------------------------------------------------
@@ -575,11 +680,10 @@ class CI_Security {
*
* Used as a callback for XSS Clean
*
- * @access private
* @param array
* @return string
*/
- private function _convert_attribute($match)
+ protected function _convert_attribute($match)
{
return str_replace(array('>', '<', '\\'), array('&gt;', '&lt;', '\\\\'), $match[0]);
}
@@ -591,11 +695,10 @@ class CI_Security {
*
* Filters tag attributes for consistency and safety
*
- * @access private
* @param string
* @return string
*/
- private function _filter_attributes($str)
+ protected function _filter_attributes($str)
{
$out = '';
@@ -617,11 +720,10 @@ class CI_Security {
*
* Used as a callback for XSS Clean
*
- * @access private
* @param array
* @return string
*/
- private function _decode_entity($match)
+ protected function _decode_entity($match)
{
return $this->entity_decode($match[0], strtoupper(config_item('charset')));
}
@@ -629,49 +731,68 @@ class CI_Security {
// --------------------------------------------------------------------
/**
- * HTML Entities Decode
+ * Validate URL entities
*
- * This function is a replacement for html_entity_decode()
+ * Called by xss_clean()
*
- * In some versions of PHP the native function does not work
- * when UTF-8 is the specified character set, so this gives us
- * a work-around. More info here:
- * http://bugs.php.net/bug.php?id=25670
- *
- * NOTE: html_entity_decode() has a bug in some PHP versions when UTF-8 is the
- * character set, and the PHP developers said they were not back porting the
- * fix to versions other than PHP 5.x.
- *
- * @access public
- * @param string
- * @param string
- * @return string
+ * @param string
+ * @return string
*/
- public function entity_decode($str, $charset='UTF-8')
+ protected function _validate_entities($str)
{
- if (stristr($str, '&') === FALSE) return $str;
+ /*
+ * Protect GET variables in URLs
+ */
- // The reason we are not using html_entity_decode() by itself is because
- // while it is not technically correct to leave out the semicolon
- // at the end of an entity most browsers will still interpret the entity
- // correctly. html_entity_decode() does not convert entities without
- // semicolons, so we are left with our own little solution here. Bummer.
+ // 901119URL5918AMP18930PROTECT8198
+
+ $str = preg_replace('|\&([a-z\_0-9\-]+)\=([a-z\_0-9\-]+)|i', $this->xss_hash()."\\1=\\2", $str);
- if (function_exists('html_entity_decode') && (strtolower($charset) != 'utf-8' OR is_php('5.0.0')))
+ /*
+ * Validate standard character entities
+ *
+ * Add a semicolon if missing. We do this to enable
+ * the conversion of entities to ASCII later.
+ *
+ */
+ $str = preg_replace('#(&\#?[0-9a-z]{2,})([\x00-\x20])*;?#i', "\\1;\\2", $str);
+
+ /*
+ * Validate UTF16 two byte encoding (x00)
+ *
+ * Just as above, adds a semicolon if missing.
+ *
+ */
+ $str = preg_replace('#(&\#x?)([0-9A-F]+);?#i',"\\1\\2;",$str);
+
+ /*
+ * Un-Protect GET variables in URLs
+ */
+ $str = str_replace($this->xss_hash(), '&', $str);
+
+ return $str;
+ }
+
+ // ----------------------------------------------------------------------
+
+ /**
+ * Do Never Allowed
+ *
+ * A utility function for xss_clean()
+ *
+ * @param string
+ * @return string
+ */
+ protected function _do_never_allowed($str)
+ {
+ foreach ($this->_never_allowed_str as $key => $val)
{
- $str = html_entity_decode($str, ENT_COMPAT, $charset);
- $str = preg_replace('~&#x(0*[0-9a-f]{2,5})~ei', 'chr(hexdec("\\1"))', $str);
- return preg_replace('~&#([0-9]{2,4})~e', 'chr(\\1)', $str);
+ $str = str_replace($key, $val, $str);
}
- // Numeric Entities
- $str = preg_replace('~&#x(0*[0-9a-f]{2,5});{0,1}~ei', 'chr(hexdec("\\1"))', $str);
- $str = preg_replace('~&#([0-9]{2,4});{0,1}~e', 'chr(\\1)', $str);
-
- // Literal Entities - Slightly slow so we do another check
- if (stristr($str, '&') === FALSE)
+ foreach ($this->_never_allowed_regex as $key => $val)
{
- $str = strtr($str, array_flip(get_html_translation_table(HTML_ENTITIES)));
+ $str = preg_replace("#".$key."#i", $val, $str);
}
return $str;
@@ -680,59 +801,32 @@ class CI_Security {
// --------------------------------------------------------------------
/**
- * Filename Security
+ * Set Cross Site Request Forgery Protection Cookie
*
- * @access public
- * @param string
* @return string
*/
- public function sanitize_filename($str, $relative_path = FALSE)
+ protected function _csrf_set_hash()
{
- $bad = array(
- "../",
- "<!--",
- "-->",
- "<",
- ">",
- "'",
- '"',
- '&',
- '$',
- '#',
- '{',
- '}',
- '[',
- ']',
- '=',
- ';',
- '?',
- "%20",
- "%22",
- "%3c", // <
- "%253c", // <
- "%3e", // >
- "%0e", // >
- "%28", // (
- "%29", // )
- "%2528", // (
- "%26", // &
- "%24", // $
- "%3f", // ?
- "%3b", // ;
- "%3d" // =
- );
-
- if ( ! $relative_path)
+ if ($this->_csrf_hash == '')
{
- $bad[] = './';
- $bad[] = '/';
+ // If the cookie exists we will use it's value.
+ // We don't necessarily want to regenerate it with
+ // each page load since a page could contain embedded
+ // sub-pages causing this feature to fail
+ if (isset($_COOKIE[$this->_csrf_cookie_name]) &&
+ $_COOKIE[$this->_csrf_cookie_name] != '')
+ {
+ return $this->_csrf_hash = $_COOKIE[$this->_csrf_cookie_name];
+ }
+
+ return $this->_csrf_hash = md5(uniqid(rand(), TRUE));
}
- return stripslashes(str_replace($bad, '', $str));
+ return $this->_csrf_hash;
}
}
// END Security Class
/* End of file Security.php */
-/* Location: ./system/libraries/Security.php */ \ No newline at end of file
+/* Location: ./system/libraries/Security.php */
diff --git a/system/core/URI.php b/system/core/URI.php
index c43cde005..94fac59ac 100644
--- a/system/core/URI.php
+++ b/system/core/URI.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -36,7 +36,7 @@ class CI_URI {
/**
* Constructor
*
- * Simply globalizes the $RTR object. The front
+ * Simply globalizes the $RTR object. The front
* loads the Router class early on so it's not available
* normally as other classes are.
*
@@ -64,14 +64,14 @@ class CI_URI {
// Is the request coming from the command line?
if (defined('STDIN'))
{
- $this->uri_string = $this->_parse_cli_args();
+ $this->_set_uri_string($this->_parse_cli_args());
return;
}
// Let's try the REQUEST_URI first, this will work in most situations
if ($uri = $this->_detect_uri())
{
- $this->uri_string = $uri;
+ $this->_set_uri_string($uri);
return;
}
@@ -80,51 +80,62 @@ class CI_URI {
$path = (isset($_SERVER['PATH_INFO'])) ? $_SERVER['PATH_INFO'] : @getenv('PATH_INFO');
if (trim($path, '/') != '' && $path != "/".SELF)
{
- $this->uri_string = $path;
+ $this->_set_uri_string($path);
return;
}
// No PATH_INFO?... What about QUERY_STRING?
- $path = (isset($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : @getenv('QUERY_STRING');
+ $path = (isset($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : @getenv('QUERY_STRING');
if (trim($path, '/') != '')
{
- $this->uri_string = $path;
+ $this->_set_uri_string($path);
return;
}
// As a last ditch effort lets try using the $_GET array
if (is_array($_GET) && count($_GET) == 1 && trim(key($_GET), '/') != '')
{
- $this->uri_string = key($_GET);
+ $this->_set_uri_string(key($_GET));
return;
}
// We've exhausted all our options...
$this->uri_string = '';
+ return;
}
- else
- {
- $uri = strtoupper($this->config->item('uri_protocol'));
- if ($uri == 'REQUEST_URI')
- {
- $this->uri_string = $this->_detect_uri();
- return;
- }
- elseif ($uri == 'CLI')
- {
- $this->uri_string = $this->_parse_cli_args();
- return;
- }
+ $uri = strtoupper($this->config->item('uri_protocol'));
- $this->uri_string = (isset($_SERVER[$uri])) ? $_SERVER[$uri] : @getenv($uri);
+ if ($uri == 'REQUEST_URI')
+ {
+ $this->_set_uri_string($this->_detect_uri());
+ return;
}
-
- // If the URI contains only a slash we'll kill it
- if ($this->uri_string == '/')
+ elseif ($uri == 'CLI')
{
- $this->uri_string = '';
+ $this->_set_uri_string($this->_parse_cli_args());
+ return;
}
+
+ $path = (isset($_SERVER[$uri])) ? $_SERVER[$uri] : @getenv($uri);
+ $this->_set_uri_string($path);
+ }
+
+ // --------------------------------------------------------------------
+
+ /**
+ * Set the URI String
+ *
+ * @access public
+ * @return string
+ */
+ function _set_uri_string($str)
+ {
+ // Filter out control characters
+ $str = remove_invisible_characters($str, FALSE);
+
+ // If the URI contains only a slash we'll kill it
+ $this->uri_string = ($str == '/') ? '' : $str;
}
// --------------------------------------------------------------------
@@ -140,7 +151,7 @@ class CI_URI {
*/
private function _detect_uri()
{
- if ( ! isset($_SERVER['REQUEST_URI']))
+ if ( ! isset($_SERVER['REQUEST_URI']) OR ! isset($_SERVER['SCRIPT_NAME']))
{
return '';
}
@@ -173,12 +184,12 @@ class CI_URI {
$_SERVER['QUERY_STRING'] = '';
$_GET = array();
}
-
+
if ($uri == '/' || empty($uri))
{
return '/';
}
-
+
$uri = parse_url($uri, PHP_URL_PATH);
// Do some final cleaning of the URI and return it
@@ -240,7 +251,7 @@ class CI_URI {
*/
function _remove_url_suffix()
{
- if ($this->config->item('url_suffix') != "")
+ if ($this->config->item('url_suffix') != "")
{
$this->uri_string = preg_replace("|".preg_quote($this->config->item('url_suffix'))."$|", "", $this->uri_string);
}
@@ -274,7 +285,7 @@ class CI_URI {
* Re-index Segments
*
* This function re-indexes the $this->segment array so that it
- * starts at 1 rather than 0. Doing so makes it simpler to
+ * starts at 1 rather than 0. Doing so makes it simpler to
* use functions like $this->uri->segment(n) since there is
* a 1:1 relationship between the segment array and the actual segments.
*
@@ -312,7 +323,7 @@ class CI_URI {
* Fetch a URI "routed" Segment
*
* This function returns the re-routed URI segment (assuming routing rules are used)
- * based on the number provided. If there is no routing this function returns the
+ * based on the number provided. If there is no routing this function returns the
* same result as $this->segment()
*
* @access public
@@ -414,7 +425,7 @@ class CI_URI {
$i = 0;
$lastval = '';
- $retval = array();
+ $retval = array();
foreach ($segments as $seg)
{
if ($i % 2)
diff --git a/system/core/Utf8.php b/system/core/Utf8.php
index 5d5a7ef72..738d7e9d8 100644
--- a/system/core/Utf8.php
+++ b/system/core/Utf8.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -107,7 +107,7 @@ class CI_Utf8 {
*/
function safe_ascii_for_xml($str)
{
- return preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S', '', $str);
+ return remove_invisible_characters($str, FALSE);
}
// --------------------------------------------------------------------
diff --git a/system/database/DB.php b/system/database/DB.php
index 93ee3922a..4481cef63 100644
--- a/system/database/DB.php
+++ b/system/database/DB.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -27,20 +27,15 @@ function &DB($params = '', $active_record_override = NULL)
// Load the DB config file if a DSN string wasn't passed
if (is_string($params) AND strpos($params, '://') === FALSE)
{
-
- $file_path = APPPATH.'config/'.ENVIRONMENT.'/database'.EXT;
-
- if ( ! file_exists($file_path))
+ // Is the config file in the environment folder?
+ if ( ! defined('ENVIRONMENT') OR ! file_exists($file_path = APPPATH.'config/'.ENVIRONMENT.'/database.php'))
{
- log_message('debug', 'Database config for '.ENVIRONMENT.' environment is not found. Trying global config.');
- $file_path = APPPATH.'config/database'.EXT;
-
- if ( ! file_exists($file_path))
+ if ( ! file_exists($file_path = APPPATH.'config/database.php'))
{
- continue;
+ show_error('The configuration file database.php does not exist.');
}
}
-
+
include($file_path);
if ( ! isset($db) OR count($db) == 0)
@@ -64,10 +59,10 @@ function &DB($params = '', $active_record_override = NULL)
{
/* parse the URL from the DSN string
- * Database settings can be passed as discreet
- * parameters or as a data source name in the first
- * parameter. DSNs must have this prototype:
- * $dsn = 'driver://username:password@hostname/database';
+ * Database settings can be passed as discreet
+ * parameters or as a data source name in the first
+ * parameter. DSNs must have this prototype:
+ * $dsn = 'driver://username:password@hostname/database';
*/
if (($dns = @parse_url($params)) === FALSE)
@@ -105,13 +100,13 @@ function &DB($params = '', $active_record_override = NULL)
}
}
- // No DB specified yet? Beat them senseless...
+ // No DB specified yet? Beat them senseless...
if ( ! isset($params['dbdriver']) OR $params['dbdriver'] == '')
{
show_error('You have not selected a database type to connect to.');
}
- // Load the DB classes. Note: Since the active record class is optional
+ // Load the DB classes. Note: Since the active record class is optional
// we need to dynamically create a class that extends proper parent class
// based on whether we're using the active record class or not.
// Kudos to Paul for discovering this clever use of eval()
@@ -121,11 +116,11 @@ function &DB($params = '', $active_record_override = NULL)
$active_record = $active_record_override;
}
- require_once(BASEPATH.'database/DB_driver'.EXT);
+ require_once(BASEPATH.'database/DB_driver.php');
if ( ! isset($active_record) OR $active_record == TRUE)
{
- require_once(BASEPATH.'database/DB_active_rec'.EXT);
+ require_once(BASEPATH.'database/DB_active_rec.php');
if ( ! class_exists('CI_DB'))
{
@@ -140,7 +135,7 @@ function &DB($params = '', $active_record_override = NULL)
}
}
- require_once(BASEPATH.'database/drivers/'.$params['dbdriver'].'/'.$params['dbdriver'].'_driver'.EXT);
+ require_once(BASEPATH.'database/drivers/'.$params['dbdriver'].'/'.$params['dbdriver'].'_driver.php');
// Instantiate the DB adapter
$driver = 'CI_DB_'.$params['dbdriver'].'_driver';
diff --git a/system/database/DB_active_rec.php b/system/database/DB_active_rec.php
index ee72dbbf4..d94d4a13c 100644
--- a/system/database/DB_active_rec.php
+++ b/system/database/DB_active_rec.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -59,6 +59,8 @@ class CI_DB_active_record extends CI_DB_driver {
var $ar_cache_orderby = array();
var $ar_cache_set = array();
+ var $ar_no_escape = array();
+ var $ar_cache_no_escape = array();
// --------------------------------------------------------------------
@@ -73,12 +75,6 @@ class CI_DB_active_record extends CI_DB_driver {
*/
function select($select = '*', $escape = NULL)
{
- // Set the global value if this was sepecified
- if (is_bool($escape))
- {
- $this->_protect_identifiers = $escape;
- }
-
if (is_string($select))
{
$select = explode(',', $select);
@@ -91,11 +87,13 @@ class CI_DB_active_record extends CI_DB_driver {
if ($val != '')
{
$this->ar_select[] = $val;
+ $this->ar_no_escape[] = $escape;
if ($this->ar_caching === TRUE)
{
$this->ar_cache_select[] = $val;
$this->ar_cache_exists[] = 'select';
+ $this->ar_cache_no_escape[] = $escape;
}
}
}
@@ -178,7 +176,7 @@ class CI_DB_active_record extends CI_DB_driver {
* select_max()
* select_min()
* select_avg()
- * select_sum()
+ * select_sum()
*
* @access public
* @param string the field
@@ -289,7 +287,7 @@ class CI_DB_active_record extends CI_DB_driver {
{
$val = trim($val);
- // Extract any aliases that might exist. We use this information
+ // Extract any aliases that might exist. We use this information
// in the _protect_identifiers to know whether to add a table prefix
$this->_track_aliases($val);
@@ -335,7 +333,7 @@ class CI_DB_active_record extends CI_DB_driver {
}
}
- // Extract any aliases that might exist. We use this information
+ // Extract any aliases that might exist. We use this information
// in the _protect_identifiers to know whether to add a table prefix
$this->_track_aliases($table);
@@ -444,7 +442,7 @@ class CI_DB_active_record extends CI_DB_driver {
if ( ! $this->_has_operator($k))
{
- $k .= ' =';
+ $k .= ' = ';
}
}
else
@@ -929,7 +927,7 @@ class CI_DB_active_record extends CI_DB_driver {
// --------------------------------------------------------------------
/**
- * The "set" function. Allows key/value pairs to be set for inserting or updating
+ * The "set" function. Allows key/value pairs to be set for inserting or updating
*
* @access public
* @param mixed
@@ -1020,11 +1018,11 @@ class CI_DB_active_record extends CI_DB_driver {
if ($query->num_rows() == 0)
{
- return '0';
+ return 0;
}
$row = $query->row();
- return $row->numrows;
+ return (int) $row->numrows;
}
// --------------------------------------------------------------------
@@ -1087,7 +1085,7 @@ class CI_DB_active_record extends CI_DB_driver {
{
if ($this->db_debug)
{
- //No valid data array. Folds in cases where keys and values did not match up
+ //No valid data array. Folds in cases where keys and values did not match up
return $this->display_error('db_must_use_set');
}
return FALSE;
@@ -1127,7 +1125,7 @@ class CI_DB_active_record extends CI_DB_driver {
// --------------------------------------------------------------------
/**
- * The "set_insert_batch" function. Allows key/value pairs to be set for batch inserts
+ * The "set_insert_batch" function. Allows key/value pairs to be set for batch inserts
*
* @access public
* @param mixed
@@ -1161,7 +1159,7 @@ class CI_DB_active_record extends CI_DB_driver {
if ($escape === FALSE)
{
- $this->ar_set[] = '('.implode(',', $row).')';
+ $this->ar_set[] = '('.implode(',', $row).')';
}
else
{
@@ -1172,7 +1170,7 @@ class CI_DB_active_record extends CI_DB_driver {
$clean[] = $this->escape($value);
}
- $this->ar_set[] = '('.implode(',', $clean).')';
+ $this->ar_set[] = '('.implode(',', $clean).')';
}
}
@@ -1402,7 +1400,7 @@ class CI_DB_active_record extends CI_DB_driver {
// --------------------------------------------------------------------
/**
- * The "set_update_batch" function. Allows key/value pairs to be set for batch updating
+ * The "set_update_batch" function. Allows key/value pairs to be set for batch updating
*
* @access public
* @param array
@@ -1655,7 +1653,7 @@ class CI_DB_active_record extends CI_DB_driver {
return;
}
- // Does the string contain a comma? If so, we need to separate
+ // Does the string contain a comma? If so, we need to separate
// the string into discreet statements
if (strpos($table, ',') !== FALSE)
{
@@ -1685,7 +1683,7 @@ class CI_DB_active_record extends CI_DB_driver {
* Compile the SELECT statement
*
* Generates a query string based on which functions were used.
- * Should not be called directly. The get() function calls it.
+ * Should not be called directly. The get() function calls it.
*
* @access private
* @return string
@@ -1718,7 +1716,7 @@ class CI_DB_active_record extends CI_DB_driver {
// is because until the user calls the from() function we don't know if there are aliases
foreach ($this->ar_select as $key => $val)
{
- $this->ar_select[$key] = $this->_protect_identifiers($val);
+ $this->ar_select[$key] = $this->_protect_identifiers($val, FALSE, $this->ar_no_escape[$key]);
}
$sql .= implode(', ', $this->ar_select);
@@ -1753,9 +1751,7 @@ class CI_DB_active_record extends CI_DB_driver {
if (count($this->ar_where) > 0 OR count($this->ar_like) > 0)
{
- $sql .= "\n";
-
- $sql .= "WHERE ";
+ $sql .= "\nWHERE ";
}
$sql .= implode("\n", $this->ar_where);
@@ -1938,16 +1934,17 @@ class CI_DB_active_record extends CI_DB_driver {
{
$this->_reset_run(
array(
- 'ar_cache_select' => array(),
- 'ar_cache_from' => array(),
- 'ar_cache_join' => array(),
- 'ar_cache_where' => array(),
- 'ar_cache_like' => array(),
- 'ar_cache_groupby' => array(),
- 'ar_cache_having' => array(),
- 'ar_cache_orderby' => array(),
- 'ar_cache_set' => array(),
- 'ar_cache_exists' => array()
+ 'ar_cache_select' => array(),
+ 'ar_cache_from' => array(),
+ 'ar_cache_join' => array(),
+ 'ar_cache_where' => array(),
+ 'ar_cache_like' => array(),
+ 'ar_cache_groupby' => array(),
+ 'ar_cache_having' => array(),
+ 'ar_cache_orderby' => array(),
+ 'ar_cache_set' => array(),
+ 'ar_cache_exists' => array(),
+ 'ar_cache_no_escape' => array()
)
);
}
@@ -1989,12 +1986,14 @@ class CI_DB_active_record extends CI_DB_driver {
{
$this->_track_aliases($this->ar_from);
}
+
+ $this->ar_no_escape = $this->ar_cache_no_escape;
}
// --------------------------------------------------------------------
/**
- * Resets the active record values. Called by the get() function
+ * Resets the active record values. Called by the get() function
*
* @access private
* @param array An array of fields to reset
@@ -2014,7 +2013,7 @@ class CI_DB_active_record extends CI_DB_driver {
// --------------------------------------------------------------------
/**
- * Resets the active record values. Called by the get() function
+ * Resets the active record values. Called by the get() function
*
* @access private
* @return void
@@ -2032,6 +2031,7 @@ class CI_DB_active_record extends CI_DB_driver {
'ar_orderby' => array(),
'ar_wherein' => array(),
'ar_aliased_tables' => array(),
+ 'ar_no_escape' => array(),
'ar_distinct' => FALSE,
'ar_limit' => FALSE,
'ar_offset' => FALSE,
diff --git a/system/database/DB_cache.php b/system/database/DB_cache.php
index 3bf065ca5..3249e9d8e 100644
--- a/system/database/DB_cache.php
+++ b/system/database/DB_cache.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -64,7 +64,7 @@ class CI_DB_Cache {
}
// Add a trailing slash to the path if needed
- $path = preg_replace("/(.+?)\/*$/", "\\1/", $path);
+ $path = preg_replace("/(.+?)\/*$/", "\\1/", $path);
if ( ! is_dir($path) OR ! is_really_writable($path))
{
@@ -162,7 +162,7 @@ class CI_DB_Cache {
{
if ($segment_one == '')
{
- $segment_one = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1);
+ $segment_one = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1);
}
if ($segment_two == '')
diff --git a/system/database/DB_driver.php b/system/database/DB_driver.php
index e7a9de475..40be2f903 100644
--- a/system/database/DB_driver.php
+++ b/system/database/DB_driver.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -73,7 +73,7 @@ class CI_DB_driver {
/**
- * Constructor. Accepts one parameter containing the database
+ * Constructor. Accepts one parameter containing the database
* connection settings.
*
* @param array
@@ -114,7 +114,7 @@ class CI_DB_driver {
// Connect to the database and set the connection ID
$this->conn_id = ($this->pconnect == FALSE) ? $this->db_connect() : $this->db_pconnect();
- // No connection resource? Throw an error
+ // No connection resource? Throw an error
if ( ! $this->conn_id)
{
log_message('error', 'Unable to connect to the database');
@@ -199,7 +199,7 @@ class CI_DB_driver {
// --------------------------------------------------------------------
/**
- * Database Version Number. Returns a string containing the
+ * Database Version Number. Returns a string containing the
* version of the database being used
*
* @access public
@@ -237,7 +237,7 @@ class CI_DB_driver {
* Execute the query
*
* Accepts an SQL string as input and returns a result object upon
- * successful execution of a "read" type query. Returns boolean TRUE
+ * successful execution of a "read" type query. Returns boolean TRUE
* upon successful execution of a "write" type query. Returns boolean
* FALSE upon failure, and if the $db_debug variable is set to TRUE
* will raise an error.
@@ -265,7 +265,7 @@ class CI_DB_driver {
$sql = preg_replace("/(\W)".$this->swap_pre."(\S+?)/", "\\1".$this->dbprefix."\\2", $sql);
}
- // Is query caching enabled? If the query is a "read type"
+ // 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
if ($this->cache_on == TRUE AND stristr($sql, 'SELECT'))
@@ -286,7 +286,7 @@ class CI_DB_driver {
$sql = $this->compile_binds($sql, $binds);
}
- // Save the query for debugging
+ // Save the query for debugging
if ($this->save_queries == TRUE)
{
$this->queries[] = $sql;
@@ -314,7 +314,7 @@ class CI_DB_driver {
$error_msg = $this->_error_message();
// We call this function in order to roll-back queries
- // if transactions are enabled. If we don't call this here
+ // if transactions are enabled. If we don't call this here
// the error message will trigger an exit, causing the
// transactions to remain in limbo.
$this->trans_complete();
@@ -385,7 +385,7 @@ class CI_DB_driver {
// oci8 vars must be set before calling this
$RES->num_rows = $RES->num_rows();
- // Is query caching enabled? If so, we'll serialize the
+ // Is query caching enabled? If so, we'll serialize the
// result object and save it to a cache file.
if ($this->cache_on == TRUE AND $this->_cache_init())
{
@@ -424,8 +424,8 @@ class CI_DB_driver {
if ( ! class_exists($driver))
{
- include_once(BASEPATH.'database/DB_result'.EXT);
- include_once(BASEPATH.'database/drivers/'.$this->dbdriver.'/'.$this->dbdriver.'_result'.EXT);
+ include_once(BASEPATH.'database/DB_result.php');
+ include_once(BASEPATH.'database/drivers/'.$this->dbdriver.'/'.$this->dbdriver.'_result.php');
}
return $driver;
@@ -435,7 +435,7 @@ class CI_DB_driver {
/**
* Simple Query
- * This is a simplified version of the query() function. Internally
+ * This is a simplified version of the query() function. Internally
* we only use it when running transaction commands since they do
* not require all the features of the main query() function.
*
@@ -718,7 +718,7 @@ class CI_DB_driver {
/**
* Primary
*
- * Retrieves the primary key. It assumes that the row in the first
+ * Retrieves the primary key. It assumes that the row in the first
* position is the primary key
*
* @access public
@@ -1115,7 +1115,7 @@ class CI_DB_driver {
if ( ! class_exists('CI_DB_Cache'))
{
- if ( ! @include(BASEPATH.'database/DB_cache'.EXT))
+ if ( ! @include(BASEPATH.'database/DB_cache.php'))
{
return $this->cache_off();
}
@@ -1216,8 +1216,8 @@ class CI_DB_driver {
* This function is used extensively by the Active Record class, and by
* a couple functions in this class.
* It takes a column or table name (optionally with an alias) and inserts
- * the table prefix onto it. Some logic is necessary in order to deal with
- * column names that include the path. Consider a query like this:
+ * the table prefix onto it. Some logic is necessary in order to deal with
+ * column names that include the path. Consider a query like this:
*
* SELECT * FROM hostname.database.table.column AS c FROM hostname.database.table
*
@@ -1270,7 +1270,7 @@ class CI_DB_driver {
// This is basically a bug fix for queries that use MAX, MIN, etc.
// If a parenthesis is found we know that we do not need to
- // escape the data or add a prefix. There's probably a more graceful
+ // escape the data or add a prefix. There's probably a more graceful
// way to deal with this, but I'm not thinking of it -- Rick
if (strpos($item, '(') !== FALSE)
{
@@ -1285,7 +1285,7 @@ class CI_DB_driver {
$parts = explode('.', $item);
// Does the first segment of the exploded item match
- // one of the aliases previously identified? If so,
+ // one of the aliases previously identified? If so,
// we have nothing more to do other than escape the item
if (in_array($parts[0], $this->ar_aliased_tables))
{
@@ -1304,7 +1304,7 @@ class CI_DB_driver {
return $item.$alias;
}
- // Is there a table prefix defined in the config file? If not, no need to do anything
+ // Is there a table prefix defined in the config file? If not, no need to do anything
if ($this->dbprefix != '')
{
// We now add the table prefix based on some logic.
@@ -1358,7 +1358,7 @@ class CI_DB_driver {
return $item.$alias;
}
- // Is there a table prefix? If not, no need to insert it
+ // Is there a table prefix? If not, no need to insert it
if ($this->dbprefix != '')
{
// Verify table prefix and replace if necessary
diff --git a/system/database/DB_forge.php b/system/database/DB_forge.php
index a71fca78f..9730c7761 100644
--- a/system/database/DB_forge.php
+++ b/system/database/DB_forge.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Code Igniter
*
diff --git a/system/database/DB_result.php b/system/database/DB_result.php
index 76e1d6abb..e83228386 100644
--- a/system/database/DB_result.php
+++ b/system/database/DB_result.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -28,18 +28,18 @@
*/
class CI_DB_result {
- var $conn_id = NULL;
- var $result_id = NULL;
- var $result_array = array();
- var $result_object = array();
- var $custom_result_object = array();
- var $current_row = 0;
- var $num_rows = 0;
- var $row_data = NULL;
+ var $conn_id = NULL;
+ var $result_id = NULL;
+ var $result_array = array();
+ var $result_object = array();
+ var $custom_result_object = array();
+ var $current_row = 0;
+ var $num_rows = 0;
+ var $row_data = NULL;
/**
- * Query result. Acts as a wrapper function for the following functions.
+ * Query result. Acts as a wrapper function for the following functions.
*
* @access public
* @param string can be "object" or "array"
@@ -47,50 +47,55 @@ class CI_DB_result {
*/
function result($type = 'object')
{
- if ($type == 'array') return $this->result_array();
- else if ($type == 'object') return $this->result_object();
- else return $this->custom_result_object($type);
+ if ($type == 'array') return $this->result_array();
+ else if ($type == 'object') return $this->result_object();
+ else return $this->custom_result_object($type);
}
// --------------------------------------------------------------------
- /**
- * Custom query result.
- *
- * @param class_name A string that represents the type of object you want back
- * @return array of objects
- */
- function custom_result_object($class_name)
- {
- if (array_key_exists($class_name, $this->custom_result_object))
- {
- return $this->custom_result_object[$class_name];
- }
-
- if ($this->result_id === FALSE OR $this->num_rows() == 0)
- {
- return array();
- }
-
- // add the data to the object
- $this->_data_seek(0);
- $result_object = array();
+ /**
+ * Custom query result.
+ *
+ * @param class_name A string that represents the type of object you want back
+ * @return array of objects
+ */
+ function custom_result_object($class_name)
+ {
+ if (array_key_exists($class_name, $this->custom_result_object))
+ {
+ return $this->custom_result_object[$class_name];
+ }
+
+ if ($this->result_id === FALSE OR $this->num_rows() == 0)
+ {
+ return array();
+ }
+
+ // add the data to the object
+ $this->_data_seek(0);
+ $result_object = array();
+
while ($row = $this->_fetch_object())
- {
- $object = new $class_name();
- foreach ($row as $key => $value)
- {
- $object->$key = $value;
- }
+ {
+ $object = new $class_name();
+
+ foreach ($row as $key => $value)
+ {
+ $object->$key = $value;
+ }
+
$result_object[] = $object;
}
- // return the array
- return $this->custom_result_object[$class_name] = $result_object;
- }
+ // return the array
+ return $this->custom_result_object[$class_name] = $result_object;
+ }
+
+ // --------------------------------------------------------------------
/**
- * Query result. "object" version.
+ * Query result. "object" version.
*
* @access public
* @return object
@@ -122,7 +127,7 @@ class CI_DB_result {
// --------------------------------------------------------------------
/**
- * Query result. "array" version.
+ * Query result. "array" version.
*
* @access public
* @return array
@@ -154,7 +159,7 @@ class CI_DB_result {
// --------------------------------------------------------------------
/**
- * Query result. Acts as a wrapper function for the following functions.
+ * Query result. Acts as a wrapper function for the following functions.
*
* @access public
* @param string
@@ -180,9 +185,9 @@ class CI_DB_result {
$n = 0;
}
- if ($type == 'object') return $this->row_object($n);
- else if ($type == 'array') return $this->row_array($n);
- else return $this->custom_row_object($n, $type);
+ if ($type == 'object') return $this->row_object($n);
+ else if ($type == 'array') return $this->row_array($n);
+ else return $this->custom_row_object($n, $type);
}
// --------------------------------------------------------------------
@@ -219,7 +224,7 @@ class CI_DB_result {
// --------------------------------------------------------------------
- /**
+ /**
* Returns a single result row - custom object version
*
* @access public
@@ -242,7 +247,7 @@ class CI_DB_result {
return $result[$this->current_row];
}
- /**
+ /**
* Returns a single result row - object version
*
* @access public
@@ -383,9 +388,9 @@ class CI_DB_result {
/**
* The following functions are normally overloaded by the identically named
* methods in the platform-specific driver -- except when query caching
- * is used. When caching is enabled we do not load the other driver.
+ * is used. When caching is enabled we do not load the other driver.
* These functions are primarily here to prevent undefined function errors
- * when a cached result object is in use. They are not otherwise fully
+ * when a cached result object is in use. They are not otherwise fully
* operational due to the unavailability of the database resource IDs with
* cached results.
*/
diff --git a/system/database/DB_utility.php b/system/database/DB_utility.php
index a5f174f0a..a3c00a5a6 100644
--- a/system/database/DB_utility.php
+++ b/system/database/DB_utility.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Code Igniter
*
@@ -342,10 +342,10 @@ class CI_DB_utility extends CI_DB_forge {
// ------------------------------------------------------
- // Is the encoder supported? If not, we'll either issue an
+ // Is the encoder supported? If not, we'll either issue an
// error or use plain text depending on the debug settings
if (($prefs['format'] == 'gzip' AND ! @function_exists('gzencode'))
- OR ($prefs['format'] == 'zip' AND ! @function_exists('gzcompress')))
+ OR ($prefs['format'] == 'zip' AND ! @function_exists('gzcompress')))
{
if ($this->db->db_debug)
{
diff --git a/system/database/drivers/mssql/mssql_driver.php b/system/database/drivers/mssql/mssql_driver.php
index 5048c0b4a..56ecf32d1 100644
--- a/system/database/drivers/mssql/mssql_driver.php
+++ b/system/database/drivers/mssql/mssql_driver.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -267,9 +267,11 @@ class CI_DB_mssql_driver extends CI_DB {
// escape LIKE condition wildcards
if ($like === TRUE)
{
- $str = str_replace( array('%', '_', $this->_like_escape_chr),
- array($this->_like_escape_chr.'%', $this->_like_escape_chr.'_', $this->_like_escape_chr.$this->_like_escape_chr),
- $str);
+ $str = str_replace(
+ array($this->_like_escape_chr, '%', '_'),
+ array($this->_like_escape_chr.$this->_like_escape_chr, $this->_like_escape_chr.'%', $this->_like_escape_chr.'_'),
+ $str
+ );
}
return $str;
diff --git a/system/database/drivers/mssql/mssql_forge.php b/system/database/drivers/mssql/mssql_forge.php
index 70b20ecf8..03151b24f 100644
--- a/system/database/drivers/mssql/mssql_forge.php
+++ b/system/database/drivers/mssql/mssql_forge.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -103,7 +103,7 @@ class CI_DB_mssql_forge extends CI_DB_forge {
$sql .= "\n\t".$this->db->_protect_identifiers($field);
- $sql .= ' '.$attributes['TYPE'];
+ $sql .= ' '.$attributes['TYPE'];
if (array_key_exists('CONSTRAINT', $attributes))
{
diff --git a/system/database/drivers/mssql/mssql_result.php b/system/database/drivers/mssql/mssql_result.php
index 2897ca5a5..f1f6dbb84 100644
--- a/system/database/drivers/mssql/mssql_result.php
+++ b/system/database/drivers/mssql/mssql_result.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -120,7 +120,7 @@ class CI_DB_mssql_result extends CI_DB_result {
/**
* Data Seek
*
- * Moves the internal pointer to the desired offset. We call
+ * Moves the internal pointer to the desired offset. We call
* this internally before fetching results to make sure the
* result set starts at zero
*
diff --git a/system/database/drivers/mssql/mssql_utility.php b/system/database/drivers/mssql/mssql_utility.php
index 48ecbc72a..3ee4d4b8f 100644
--- a/system/database/drivers/mssql/mssql_utility.php
+++ b/system/database/drivers/mssql/mssql_utility.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
diff --git a/system/database/drivers/mysql/mysql_driver.php b/system/database/drivers/mysql/mysql_driver.php
index 4ff9b0a11..dec15863f 100644
--- a/system/database/drivers/mysql/mysql_driver.php
+++ b/system/database/drivers/mysql/mysql_driver.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -132,7 +132,22 @@ class CI_DB_mysql_driver extends CI_DB {
*/
function db_set_charset($charset, $collation)
{
- return @mysql_query("SET NAMES '".$this->escape_str($charset)."' COLLATE '".$this->escape_str($collation)."'", $this->conn_id);
+ static $use_set_names;
+
+ if ( ! isset($use_set_names))
+ {
+ // mysql_set_charset() requires PHP >= 5.2.3 and MySQL >= 5.0.7, use SET NAMES as fallback
+ $use_set_names = (version_compare(PHP_VERSION, '5.2.3', '>=') && version_compare(mysql_get_server_info(), '5.0.7', '>=')) ? FALSE : TRUE;
+ }
+
+ if ($use_set_names)
+ {
+ return @mysql_query("SET NAMES '".$this->escape_str($charset)."' COLLATE '".$this->escape_str($collation)."'", $this->conn_id);
+ }
+ else
+ {
+ return @mysql_set_charset($charset, $this->conn_id);
+ }
}
// --------------------------------------------------------------------
@@ -287,12 +302,12 @@ class CI_DB_mysql_driver extends CI_DB {
if (is_array($str))
{
foreach ($str as $key => $val)
- {
+ {
$str[$key] = $this->escape_str($val, $like);
- }
+ }
- return $str;
- }
+ return $str;
+ }
if (function_exists('mysql_real_escape_string') AND is_resource($this->conn_id))
{
@@ -635,7 +650,7 @@ class CI_DB_mysql_driver extends CI_DB {
{
if ($field != $index)
{
- $final[$field][] = 'WHEN '.$index.' = '.$val[$index].' THEN '.$val[$field];
+ $final[$field][] = 'WHEN '.$index.' = '.$val[$index].' THEN '.$val[$field];
}
}
}
diff --git a/system/database/drivers/mysql/mysql_forge.php b/system/database/drivers/mysql/mysql_forge.php
index 529ec980d..5328a7b4e 100644
--- a/system/database/drivers/mysql/mysql_forge.php
+++ b/system/database/drivers/mysql/mysql_forge.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -86,7 +86,7 @@ class CI_DB_mysql_forge extends CI_DB_forge {
if (array_key_exists('TYPE', $attributes))
{
- $sql .= ' '.$attributes['TYPE'];
+ $sql .= ' '.$attributes['TYPE'];
if (array_key_exists('CONSTRAINT', $attributes))
{
diff --git a/system/database/drivers/mysql/mysql_result.php b/system/database/drivers/mysql/mysql_result.php
index 507389603..19875ba9d 100644
--- a/system/database/drivers/mysql/mysql_result.php
+++ b/system/database/drivers/mysql/mysql_result.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -120,7 +120,7 @@ class CI_DB_mysql_result extends CI_DB_result {
/**
* Data Seek
*
- * Moves the internal pointer to the desired offset. We call
+ * Moves the internal pointer to the desired offset. We call
* this internally before fetching results to make sure the
* result set starts at zero
*
diff --git a/system/database/drivers/mysql/mysql_utility.php b/system/database/drivers/mysql/mysql_utility.php
index e9747c540..5ce384c81 100644
--- a/system/database/drivers/mysql/mysql_utility.php
+++ b/system/database/drivers/mysql/mysql_utility.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -137,7 +137,7 @@ class CI_DB_mysql_utility extends CI_DB_utility {
}
// Fetch the field names and determine if the field is an
- // integer type. We use this info to decide whether to
+ // integer type. We use this info to decide whether to
// surround the data with quotes or not
$i = 0;
diff --git a/system/database/drivers/mysqli/mysqli_driver.php b/system/database/drivers/mysqli/mysqli_driver.php
index ccdabce1a..74f55c421 100644
--- a/system/database/drivers/mysqli/mysqli_driver.php
+++ b/system/database/drivers/mysqli/mysqli_driver.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -132,7 +132,22 @@ class CI_DB_mysqli_driver extends CI_DB {
*/
function _db_set_charset($charset, $collation)
{
- return @mysqli_query($this->conn_id, "SET NAMES '".$this->escape_str($charset)."' COLLATE '".$this->escape_str($collation)."'");
+ static $use_set_names;
+
+ if ( ! isset($use_set_names))
+ {
+ // mysqli_set_charset() requires MySQL >= 5.0.7, use SET NAMES as fallback
+ $use_set_names = (version_compare(mysqli_get_server_info($this->conn_id), '5.0.7', '>=')) ? FALSE : TRUE;
+ }
+
+ if ($use_set_names)
+ {
+ return @mysqli_query($this->conn_id, "SET NAMES '".$this->escape_str($charset)."' COLLATE '".$this->escape_str($collation)."'");
+ }
+ else
+ {
+ return @mysqli_set_charset($this->conn_id, $charset);
+ }
}
// --------------------------------------------------------------------
@@ -553,7 +568,7 @@ class CI_DB_mysqli_driver extends CI_DB {
{
return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES ".implode(', ', $values);
}
-
+
// --------------------------------------------------------------------
/**
@@ -615,7 +630,7 @@ class CI_DB_mysqli_driver extends CI_DB {
{
if ($field != $index)
{
- $final[$field][] = 'WHEN '.$index.' = '.$val[$index].' THEN '.$val[$field];
+ $final[$field][] = 'WHEN '.$index.' = '.$val[$index].' THEN '.$val[$field];
}
}
}
diff --git a/system/database/drivers/mysqli/mysqli_forge.php b/system/database/drivers/mysqli/mysqli_forge.php
index d5097335e..6450968dd 100644
--- a/system/database/drivers/mysqli/mysqli_forge.php
+++ b/system/database/drivers/mysqli/mysqli_forge.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -86,7 +86,7 @@ class CI_DB_mysqli_forge extends CI_DB_forge {
if (array_key_exists('TYPE', $attributes))
{
- $sql .= ' '.$attributes['TYPE'];
+ $sql .= ' '.$attributes['TYPE'];
}
if (array_key_exists('CONSTRAINT', $attributes))
diff --git a/system/database/drivers/mysqli/mysqli_result.php b/system/database/drivers/mysqli/mysqli_result.php
index c4d8f5d58..8b4613454 100644
--- a/system/database/drivers/mysqli/mysqli_result.php
+++ b/system/database/drivers/mysqli/mysqli_result.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -120,7 +120,7 @@ class CI_DB_mysqli_result extends CI_DB_result {
/**
* Data Seek
*
- * Moves the internal pointer to the desired offset. We call
+ * Moves the internal pointer to the desired offset. We call
* this internally before fetching results to make sure the
* result set starts at zero
*
diff --git a/system/database/drivers/mysqli/mysqli_utility.php b/system/database/drivers/mysqli/mysqli_utility.php
index e17889b8c..5d1f1a6d9 100644
--- a/system/database/drivers/mysqli/mysqli_utility.php
+++ b/system/database/drivers/mysqli/mysqli_utility.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
diff --git a/system/database/drivers/oci8/oci8_driver.php b/system/database/drivers/oci8/oci8_driver.php
index 14df104ff..3a05ce36c 100644
--- a/system/database/drivers/oci8/oci8_driver.php
+++ b/system/database/drivers/oci8/oci8_driver.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -6,7 +6,7 @@
*
* @package CodeIgniter
* @author ExpressionEngine Dev Team
- * @copyright Copyright (c) 2008 - 2011, EllisLab, Inc.
+ * @copyright Copyright (c) 2008 - 2011, EllisLab, Inc.
* @license http://codeigniter.com/user_guide/license.html
* @link http://codeigniter.com
* @since Version 1.0
@@ -23,7 +23,7 @@
* class is being used or not.
*
* @package CodeIgniter
- * @subpackage Drivers
+ * @subpackage Drivers
* @category Database
* @author ExpressionEngine Dev Team
* @link http://codeigniter.com/user_guide/database/
@@ -37,7 +37,7 @@
*
* NOTE: this uses the PHP 4 oci methods
*
- * @author Kelly McArdle
+ * @author Kelly McArdle
*
*/
@@ -74,8 +74,8 @@ class CI_DB_oci8_driver extends CI_DB {
/**
* Non-persistent database connection
*
- * @access private called by the base class
- * @return resource
+ * @access private called by the base class
+ * @return resource
*/
function db_connect()
{
@@ -87,8 +87,8 @@ class CI_DB_oci8_driver extends CI_DB {
/**
* Persistent database connection
*
- * @access private called by the base class
- * @return resource
+ * @access private called by the base class
+ * @return resource
*/
function db_pconnect()
{
@@ -116,8 +116,8 @@ class CI_DB_oci8_driver extends CI_DB {
/**
* Select the database
*
- * @access private called by the base class
- * @return resource
+ * @access private called by the base class
+ * @return resource
*/
function db_select()
{
@@ -145,8 +145,8 @@ class CI_DB_oci8_driver extends CI_DB {
/**
* Version number query string
*
- * @access public
- * @return string
+ * @access public
+ * @return string
*/
function _version()
{
@@ -158,9 +158,9 @@ class CI_DB_oci8_driver extends CI_DB {
/**
* Execute the query
*
- * @access private called by the base class
- * @param string an SQL query
- * @return resource
+ * @access private called by the base class
+ * @param string an SQL query
+ * @return resource
*/
function _execute($sql)
{
@@ -175,9 +175,9 @@ class CI_DB_oci8_driver extends CI_DB {
/**
* Generate a statement ID
*
- * @access private
- * @param string an SQL query
- * @return none
+ * @access private
+ * @param string an SQL query
+ * @return none
*/
function _set_stmt_id($sql)
{
@@ -194,9 +194,9 @@ class CI_DB_oci8_driver extends CI_DB {
*
* If needed, each database adapter can prep the query string
*
- * @access private called by execute()
- * @param string an SQL query
- * @return string
+ * @access private called by execute()
+ * @param string an SQL query
+ * @return string
*/
function _prep_query($sql)
{
@@ -206,10 +206,10 @@ class CI_DB_oci8_driver extends CI_DB {
// --------------------------------------------------------------------
/**
- * getCursor. Returns a cursor from the datbase
+ * getCursor. Returns a cursor from the datbase
*
- * @access public
- * @return cursor id
+ * @access public
+ * @return cursor id
*/
function get_cursor()
{
@@ -220,19 +220,19 @@ class CI_DB_oci8_driver extends CI_DB {
// --------------------------------------------------------------------
/**
- * Stored Procedure. Executes a stored procedure
+ * Stored Procedure. Executes a stored procedure
*
- * @access public
- * @param package package stored procedure is in
- * @param procedure stored procedure to execute
- * @param params array of parameters
- * @return array
+ * @access public
+ * @param package package stored procedure is in
+ * @param procedure stored procedure to execute
+ * @param params array of parameters
+ * @return array
*
* params array keys
*
- * KEY OPTIONAL NOTES
+ * KEY OPTIONAL NOTES
* name no the name of the parameter should be in :<param_name> format
- * value no the value of the parameter. If this is an OUT or IN OUT parameter,
+ * value no the value of the parameter. If this is an OUT or IN OUT parameter,
* this should be a reference to a variable
* type yes the type of the parameter
* length yes the max size of the parameter
@@ -275,8 +275,8 @@ class CI_DB_oci8_driver extends CI_DB {
/**
* Bind parameters
*
- * @access private
- * @return none
+ * @access private
+ * @return none
*/
function _bind_params($params)
{
@@ -386,10 +386,10 @@ class CI_DB_oci8_driver extends CI_DB {
/**
* Escape String
*
- * @access public
- * @param string
+ * @access public
+ * @param string
* @param bool whether or not the string will be used in a LIKE condition
- * @return string
+ * @return string
*/
function escape_str($str, $like = FALSE)
{
@@ -421,8 +421,8 @@ class CI_DB_oci8_driver extends CI_DB {
/**
* Affected Rows
*
- * @access public
- * @return integer
+ * @access public
+ * @return integer
*/
function affected_rows()
{
@@ -434,8 +434,8 @@ class CI_DB_oci8_driver extends CI_DB {
/**
* Insert ID
*
- * @access public
- * @return integer
+ * @access public
+ * @return integer
*/
function insert_id()
{
@@ -451,9 +451,9 @@ class CI_DB_oci8_driver extends CI_DB {
* Generates a platform-specific query string that counts all records in
* the specified database
*
- * @access public
- * @param string
- * @return string
+ * @access public
+ * @param string
+ * @return string
*/
function count_all($table = '')
{
@@ -480,9 +480,9 @@ class CI_DB_oci8_driver extends CI_DB {
*
* Generates a platform-specific query string so that the table names can be fetched
*
- * @access private
+ * @access private
* @param boolean
- * @return string
+ * @return string
*/
function _list_tables($prefix_limit = FALSE)
{
@@ -503,9 +503,9 @@ class CI_DB_oci8_driver extends CI_DB {
*
* Generates a platform-specific query string so that the column names can be fetched
*
- * @access public
- * @param string the table name
- * @return string
+ * @access public
+ * @param string the table name
+ * @return string
*/
function _list_columns($table = '')
{
@@ -519,9 +519,9 @@ class CI_DB_oci8_driver extends CI_DB {
*
* Generates a platform-specific query so that the column data can be retrieved
*
- * @access public
- * @param string the table name
- * @return object
+ * @access public
+ * @param string the table name
+ * @return object
*/
function _field_data($table)
{
@@ -533,8 +533,8 @@ class CI_DB_oci8_driver extends CI_DB {
/**
* The error message string
*
- * @access private
- * @return string
+ * @access private
+ * @return string
*/
function _error_message()
{
@@ -547,8 +547,8 @@ class CI_DB_oci8_driver extends CI_DB {
/**
* The error message number
*
- * @access private
- * @return integer
+ * @access private
+ * @return integer
*/
function _error_number()
{
@@ -627,11 +627,11 @@ class CI_DB_oci8_driver extends CI_DB {
*
* Generates a platform-specific insert string from the supplied data
*
- * @access public
- * @param string the table name
- * @param array the insert keys
- * @param array the insert values
- * @return string
+ * @access public
+ * @param string the table name
+ * @param array the insert keys
+ * @param array the insert values
+ * @return string
*/
function _insert($table, $keys, $values)
{
@@ -732,11 +732,11 @@ class CI_DB_oci8_driver extends CI_DB {
*
* Generates a platform-specific LIMIT clause
*
- * @access public
- * @param string the sql query string
- * @param integer the number of rows to limit the query to
- * @param integer the offset value
- * @return string
+ * @access public
+ * @param string the sql query string
+ * @param integer the number of rows to limit the query to
+ * @param integer the offset value
+ * @return string
*/
function _limit($sql, $limit, $offset)
{
@@ -759,9 +759,9 @@ class CI_DB_oci8_driver extends CI_DB {
/**
* Close DB Connection
*
- * @access public
- * @param resource
- * @return void
+ * @access public
+ * @param resource
+ * @return void
*/
function _close($conn_id)
{
diff --git a/system/database/drivers/oci8/oci8_forge.php b/system/database/drivers/oci8/oci8_forge.php
index 3cd17585a..589e3c29d 100644
--- a/system/database/drivers/oci8/oci8_forge.php
+++ b/system/database/drivers/oci8/oci8_forge.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -90,7 +90,7 @@ class CI_DB_oci8_forge extends CI_DB_forge {
$sql .= "\n\t".$this->db->_protect_identifiers($field);
- $sql .= ' '.$attributes['TYPE'];
+ $sql .= ' '.$attributes['TYPE'];
if (array_key_exists('CONSTRAINT', $attributes))
{
diff --git a/system/database/drivers/oci8/oci8_result.php b/system/database/drivers/oci8/oci8_result.php
index 88531b436..60d8396ef 100644
--- a/system/database/drivers/oci8/oci8_result.php
+++ b/system/database/drivers/oci8/oci8_result.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -6,7 +6,7 @@
*
* @package CodeIgniter
* @author ExpressionEngine Dev Team
- * @copyright Copyright (c) 2008 - 2011, EllisLab, Inc.
+ * @copyright Copyright (c) 2008 - 2011, EllisLab, Inc.
* @license http://codeigniter.com/user_guide/license.html
* @link http://codeigniter.com
* @since Version 1.0
@@ -37,8 +37,8 @@ class CI_DB_oci8_result extends CI_DB_result {
* so we have to use what amounts to a hack.
*
*
- * @access public
- * @return integer
+ * @access public
+ * @return integer
*/
function num_rows()
{
@@ -58,8 +58,8 @@ class CI_DB_oci8_result extends CI_DB_result {
/**
* Number of fields in the result set
*
- * @access public
- * @return integer
+ * @access public
+ * @return integer
*/
function num_fields()
{
@@ -102,8 +102,8 @@ class CI_DB_oci8_result extends CI_DB_result {
*
* Generates an array of objects containing field meta-data
*
- * @access public
- * @return array
+ * @access public
+ * @return array
*/
function field_data()
{
@@ -114,7 +114,7 @@ class CI_DB_oci8_result extends CI_DB_result {
$F = new stdClass();
$F->name = ocicolumnname($this->stmt_id, $c);
$F->type = ocicolumntype($this->stmt_id, $c);
- $F->max_length = ocicolumnsize($this->stmt_id, $c);
+ $F->max_length = ocicolumnsize($this->stmt_id, $c);
$retval[] = $F;
}
@@ -145,8 +145,8 @@ class CI_DB_oci8_result extends CI_DB_result {
*
* Returns the result set as an array
*
- * @access private
- * @return array
+ * @access private
+ * @return array
*/
function _fetch_assoc(&$row)
{
@@ -162,8 +162,8 @@ class CI_DB_oci8_result extends CI_DB_result {
*
* Returns the result set as an object
*
- * @access private
- * @return object
+ * @access private
+ * @return object
*/
function _fetch_object()
{
@@ -202,10 +202,10 @@ class CI_DB_oci8_result extends CI_DB_result {
// --------------------------------------------------------------------
/**
- * Query result. "array" version.
+ * Query result. "array" version.
*
- * @access public
- * @return array
+ * @access public
+ * @return array
*/
function result_array()
{
@@ -230,7 +230,7 @@ class CI_DB_oci8_result extends CI_DB_result {
/**
* Data Seek
*
- * Moves the internal pointer to the desired offset. We call
+ * Moves the internal pointer to the desired offset. We call
* this internally before fetching results to make sure the
* result set starts at zero
*
diff --git a/system/database/drivers/oci8/oci8_utility.php b/system/database/drivers/oci8/oci8_utility.php
index 854b467e1..f1fe5dc00 100644
--- a/system/database/drivers/oci8/oci8_utility.php
+++ b/system/database/drivers/oci8/oci8_utility.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
diff --git a/system/database/drivers/odbc/odbc_driver.php b/system/database/drivers/odbc/odbc_driver.php
index 81e0d7cf2..4268ccd94 100644
--- a/system/database/drivers/odbc/odbc_driver.php
+++ b/system/database/drivers/odbc/odbc_driver.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
diff --git a/system/database/drivers/odbc/odbc_forge.php b/system/database/drivers/odbc/odbc_forge.php
index 3ec86b4e9..7e9414cc4 100644
--- a/system/database/drivers/odbc/odbc_forge.php
+++ b/system/database/drivers/odbc/odbc_forge.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -102,7 +102,7 @@ class CI_DB_odbc_forge extends CI_DB_forge {
$sql .= "\n\t".$this->db->_protect_identifiers($field);
- $sql .= ' '.$attributes['TYPE'];
+ $sql .= ' '.$attributes['TYPE'];
if (array_key_exists('CONSTRAINT', $attributes))
{
diff --git a/system/database/drivers/odbc/odbc_result.php b/system/database/drivers/odbc/odbc_result.php
index 5d64a464f..d83b2e5f0 100644
--- a/system/database/drivers/odbc/odbc_result.php
+++ b/system/database/drivers/odbc/odbc_result.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -120,7 +120,7 @@ class CI_DB_odbc_result extends CI_DB_result {
/**
* Data Seek
*
- * Moves the internal pointer to the desired offset. We call
+ * Moves the internal pointer to the desired offset. We call
* this internally before fetching results to make sure the
* result set starts at zero
*
diff --git a/system/database/drivers/odbc/odbc_utility.php b/system/database/drivers/odbc/odbc_utility.php
index d335bed99..424958b43 100644
--- a/system/database/drivers/odbc/odbc_utility.php
+++ b/system/database/drivers/odbc/odbc_utility.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
diff --git a/system/database/drivers/postgre/postgre_driver.php b/system/database/drivers/postgre/postgre_driver.php
index 47ff36246..43d4d4d28 100644
--- a/system/database/drivers/postgre/postgre_driver.php
+++ b/system/database/drivers/postgre/postgre_driver.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -554,6 +554,24 @@ class CI_DB_postgre_driver extends CI_DB {
// --------------------------------------------------------------------
/**
+ * Insert_batch statement
+ *
+ * Generates a platform-specific insert string from the supplied data
+ *
+ * @access public
+ * @param string the table name
+ * @param array the insert keys
+ * @param array the insert values
+ * @return string
+ */
+ function _insert_batch($table, $keys, $values)
+ {
+ return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES ".implode(', ', $values);
+ }
+
+ // --------------------------------------------------------------------
+
+ /**
* Update statement
*
* Generates a platform-specific update string from the supplied data
diff --git a/system/database/drivers/postgre/postgre_forge.php b/system/database/drivers/postgre/postgre_forge.php
index 91a1c6861..fbfaac864 100644
--- a/system/database/drivers/postgre/postgre_forge.php
+++ b/system/database/drivers/postgre/postgre_forge.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -128,14 +128,14 @@ class CI_DB_postgre_forge extends CI_DB_forge {
}
// If this is an auto-incrementing primary key, use the serial data type instead
- if (in_array($field, $primary_keys) && array_key_exists('AUTO_INCREMENT', $attributes)
+ if (in_array($field, $primary_keys) && array_key_exists('AUTO_INCREMENT', $attributes)
&& $attributes['AUTO_INCREMENT'] === TRUE)
{
$sql .= ' SERIAL';
}
else
{
- $sql .= ' '.$attributes['TYPE'];
+ $sql .= ' '.$attributes['TYPE'];
}
// Modified to prevent constraints with integer data types
@@ -213,8 +213,8 @@ class CI_DB_postgre_forge extends CI_DB_forge {
/**
* Drop Table
*
- * @access private
- * @return bool
+ * @access private
+ * @return bool
*/
function _drop_table($table)
{
diff --git a/system/database/drivers/postgre/postgre_result.php b/system/database/drivers/postgre/postgre_result.php
index e9a1d1607..e73a2583a 100644
--- a/system/database/drivers/postgre/postgre_result.php
+++ b/system/database/drivers/postgre/postgre_result.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -120,7 +120,7 @@ class CI_DB_postgre_result extends CI_DB_result {
/**
* Data Seek
*
- * Moves the internal pointer to the desired offset. We call
+ * Moves the internal pointer to the desired offset. We call
* this internally before fetching results to make sure the
* result set starts at zero
*
diff --git a/system/database/drivers/postgre/postgre_utility.php b/system/database/drivers/postgre/postgre_utility.php
index 741c52ea8..c7690fc8f 100644
--- a/system/database/drivers/postgre/postgre_utility.php
+++ b/system/database/drivers/postgre/postgre_utility.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
diff --git a/system/database/drivers/sqlite/sqlite_driver.php b/system/database/drivers/sqlite/sqlite_driver.php
index eb4e585b3..17b5f513c 100644
--- a/system/database/drivers/sqlite/sqlite_driver.php
+++ b/system/database/drivers/sqlite/sqlite_driver.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
diff --git a/system/database/drivers/sqlite/sqlite_forge.php b/system/database/drivers/sqlite/sqlite_forge.php
index 56904082e..c1f8099dd 100644
--- a/system/database/drivers/sqlite/sqlite_forge.php
+++ b/system/database/drivers/sqlite/sqlite_forge.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -100,7 +100,7 @@ class CI_DB_sqlite_forge extends CI_DB_forge {
$sql .= "\n\t".$this->db->_protect_identifiers($field);
- $sql .= ' '.$attributes['TYPE'];
+ $sql .= ' '.$attributes['TYPE'];
if (array_key_exists('CONSTRAINT', $attributes))
{
@@ -172,7 +172,7 @@ class CI_DB_sqlite_forge extends CI_DB_forge {
/**
* Drop Table
*
- * Unsupported feature in SQLite
+ * Unsupported feature in SQLite
*
* @access private
* @return bool
diff --git a/system/database/drivers/sqlite/sqlite_result.php b/system/database/drivers/sqlite/sqlite_result.php
index 7bd30db7c..62204946c 100644
--- a/system/database/drivers/sqlite/sqlite_result.php
+++ b/system/database/drivers/sqlite/sqlite_result.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -116,7 +116,7 @@ class CI_DB_sqlite_result extends CI_DB_result {
/**
* Data Seek
*
- * Moves the internal pointer to the desired offset. We call
+ * Moves the internal pointer to the desired offset. We call
* this internally before fetching results to make sure the
* result set starts at zero
*
diff --git a/system/database/drivers/sqlite/sqlite_utility.php b/system/database/drivers/sqlite/sqlite_utility.php
index 508023e2f..bd741dd79 100644
--- a/system/database/drivers/sqlite/sqlite_utility.php
+++ b/system/database/drivers/sqlite/sqlite_utility.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -28,7 +28,7 @@ class CI_DB_sqlite_utility extends CI_DB_utility {
* List databases
*
* I don't believe you can do a database listing with SQLite
- * since each database is its own file. I suppose we could
+ * since each database is its own file. I suppose we could
* try reading a directory looking for SQLite files, but
* that doesn't seem like a terribly good idea
*
diff --git a/system/helpers/array_helper.php b/system/helpers/array_helper.php
index 075a31fdf..daa21a3ef 100644
--- a/system/helpers/array_helper.php
+++ b/system/helpers/array_helper.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -79,7 +79,7 @@ if ( ! function_exists('random_element'))
/**
* Elements
*
- * Returns only the array items specified. Will return a default value if
+ * Returns only the array items specified. Will return a default value if
* it is not set.
*
* @access public
@@ -93,12 +93,12 @@ if ( ! function_exists('elements'))
function elements($items, $array, $default = FALSE)
{
$return = array();
-
+
if ( ! is_array($items))
{
$items = array($items);
}
-
+
foreach ($items as $item)
{
if (isset($array[$item]))
diff --git a/system/helpers/captcha_helper.php b/system/helpers/captcha_helper.php
index 19ec0c778..130c2c746 100644
--- a/system/helpers/captcha_helper.php
+++ b/system/helpers/captcha_helper.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -106,8 +106,8 @@ if ( ! function_exists('create_captcha'))
// Do we have a "word" yet?
// -----------------------------------
- if ($word == '')
- {
+ if ($word == '')
+ {
$pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$str = '';
@@ -117,7 +117,7 @@ if ( ! function_exists('create_captcha'))
}
$word = $str;
- }
+ }
// -----------------------------------
// Determine angle and position
@@ -143,7 +143,7 @@ if ( ! function_exists('create_captcha'))
}
// -----------------------------------
- // Assign colors
+ // Assign colors
// -----------------------------------
$bg_color = imagecolorallocate ($im, 255, 255, 255);
@@ -153,13 +153,13 @@ if ( ! function_exists('create_captcha'))
$shadow_color = imagecolorallocate($im, 255, 240, 240);
// -----------------------------------
- // Create the rectangle
+ // Create the rectangle
// -----------------------------------
ImageFilledRectangle($im, 0, 0, $img_width, $img_height, $bg_color);
// -----------------------------------
- // Create the spiral pattern
+ // Create the spiral pattern
// -----------------------------------
$theta = 1;
@@ -183,7 +183,7 @@ if ( ! function_exists('create_captcha'))
}
// -----------------------------------
- // Write the text
+ // Write the text
// -----------------------------------
$use_font = ($font_path != '' AND file_exists($font_path) AND function_exists('imagettftext')) ? TRUE : FALSE;
@@ -219,13 +219,13 @@ if ( ! function_exists('create_captcha'))
// -----------------------------------
- // Create the border
+ // Create the border
// -----------------------------------
imagerectangle($im, 0, 0, $img_width-1, $img_height-1, $border_color);
// -----------------------------------
- // Generate the image
+ // Generate the image
// -----------------------------------
$img_name = $now.'.jpg';
diff --git a/system/helpers/cookie_helper.php b/system/helpers/cookie_helper.php
index 7cee02827..31d2d31c8 100644
--- a/system/helpers/cookie_helper.php
+++ b/system/helpers/cookie_helper.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -37,7 +37,7 @@
* @param mixed
* @param string the value of the cookie
* @param string the number of seconds until expiration
- * @param string the cookie domain. Usually: .yourdomain.com
+ * @param string the cookie domain. Usually: .yourdomain.com
* @param string the cookie path
* @param string the cookie prefix
* @return void
@@ -85,7 +85,7 @@ if ( ! function_exists('get_cookie'))
* Delete a COOKIE
*
* @param mixed
- * @param string the cookie domain. Usually: .yourdomain.com
+ * @param string the cookie domain. Usually: .yourdomain.com
* @param string the cookie path
* @param string the cookie prefix
* @return void
diff --git a/system/helpers/date_helper.php b/system/helpers/date_helper.php
index 553e8d7ee..f3f01f751 100644
--- a/system/helpers/date_helper.php
+++ b/system/helpers/date_helper.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -69,7 +69,7 @@ if ( ! function_exists('now'))
* This function is identical to PHPs date() function,
* except that it allows date codes to be formatted using
* the MySQL style, where each code letter is preceded
- * with a percent sign: %Y %m %d etc...
+ * with a percent sign: %Y %m %d etc...
*
* The benefit of doing dates this way is that you don't
* have to worry about escaping your text letters that
@@ -366,7 +366,7 @@ if ( ! function_exists('mysql_to_unix'))
$time = str_replace(' ', '', $time);
// YYYYMMDDHHMMSS
- return mktime(
+ return mktime(
substr($time, 8, 2),
substr($time, 10, 2),
substr($time, 12, 2),
@@ -394,7 +394,7 @@ if ( ! function_exists('unix_to_human'))
{
function unix_to_human($time = '', $seconds = FALSE, $fmt = 'us')
{
- $r = date('Y', $time).'-'.date('m', $time).'-'.date('d', $time).' ';
+ $r = date('Y', $time).'-'.date('m', $time).'-'.date('d', $time).' ';
if ($fmt == 'us')
{
@@ -451,18 +451,18 @@ if ( ! function_exists('human_to_unix'))
$ex = explode("-", $split['0']);
- $year = (strlen($ex['0']) == 2) ? '20'.$ex['0'] : $ex['0'];
- $month = (strlen($ex['1']) == 1) ? '0'.$ex['1'] : $ex['1'];
- $day = (strlen($ex['2']) == 1) ? '0'.$ex['2'] : $ex['2'];
+ $year = (strlen($ex['0']) == 2) ? '20'.$ex['0'] : $ex['0'];
+ $month = (strlen($ex['1']) == 1) ? '0'.$ex['1'] : $ex['1'];
+ $day = (strlen($ex['2']) == 1) ? '0'.$ex['2'] : $ex['2'];
$ex = explode(":", $split['1']);
$hour = (strlen($ex['0']) == 1) ? '0'.$ex['0'] : $ex['0'];
- $min = (strlen($ex['1']) == 1) ? '0'.$ex['1'] : $ex['1'];
+ $min = (strlen($ex['1']) == 1) ? '0'.$ex['1'] : $ex['1'];
if (isset($ex['2']) && preg_match('/[0-9]{1,2}/', $ex['2']))
{
- $sec = (strlen($ex['2']) == 1) ? '0'.$ex['2'] : $ex['2'];
+ $sec = (strlen($ex['2']) == 1) ? '0'.$ex['2'] : $ex['2'];
}
else
{
@@ -478,7 +478,7 @@ if ( ! function_exists('human_to_unix'))
$hour = $hour + 12;
if (substr($ampm, 0, 1) == 'a' AND $hour == 12)
- $hour = '00';
+ $hour = '00';
if (strlen($hour) == 1)
$hour = '0'.$hour;
@@ -537,7 +537,7 @@ if ( ! function_exists('timezone_menu'))
/**
* Timezones
*
- * Returns an array of timezones. This is a helper function
+ * Returns an array of timezones. This is a helper function
* for various other ones in this library
*
* @access public
diff --git a/system/helpers/directory_helper.php b/system/helpers/directory_helper.php
index 38347fa62..757901480 100644
--- a/system/helpers/directory_helper.php
+++ b/system/helpers/directory_helper.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -31,7 +31,7 @@
* Create a Directory Map
*
* Reads the specified directory and builds an array
- * representation of it. Sub-folders contained with the
+ * representation of it. Sub-folders contained with the
* directory will be mapped as well.
*
* @access public
diff --git a/system/helpers/download_helper.php b/system/helpers/download_helper.php
index 6cecd0d11..e6752db4a 100644
--- a/system/helpers/download_helper.php
+++ b/system/helpers/download_helper.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -58,7 +58,14 @@ if ( ! function_exists('force_download'))
$extension = end($x);
// Load the mime types
- @include(APPPATH.'config/mimes'.EXT);
+ if (defined('ENVIRONMENT') AND is_file(APPPATH.'config/'.ENVIRONMENT.'/mimes.php'))
+ {
+ include(APPPATH.'config/'.ENVIRONMENT.'/mimes.php');
+ }
+ elseif (is_file(APPPATH.'config/mimes.php'))
+ {
+ include(APPPATH.'config/mimes.php');
+ }
// Set a default mime if we can't find it
if ( ! isset($mimes[$extension]))
diff --git a/system/helpers/email_helper.php b/system/helpers/email_helper.php
index 651aef439..8fcdad9b5 100644
--- a/system/helpers/email_helper.php
+++ b/system/helpers/email_helper.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
diff --git a/system/helpers/file_helper.php b/system/helpers/file_helper.php
index 9518e4843..2bd8bce10 100644
--- a/system/helpers/file_helper.php
+++ b/system/helpers/file_helper.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -311,7 +311,7 @@ if ( ! function_exists('get_file_info'))
$fileinfo['readable'] = is_readable($file);
break;
case 'writable':
- // There are known problems using is_weritable on IIS. It may not be reliable - consider fileperms()
+ // There are known problems using is_weritable on IIS. It may not be reliable - consider fileperms()
$fileinfo['writable'] = is_writable($file);
break;
case 'executable':
@@ -352,7 +352,16 @@ if ( ! function_exists('get_mime_by_extension'))
if ( ! is_array($mimes))
{
- if ( ! require_once(APPPATH.'config/mimes.php'))
+ if (defined('ENVIRONMENT') AND is_file(APPPATH.'config/'.ENVIRONMENT.'/mimes.php'))
+ {
+ include(APPPATH.'config/'.ENVIRONMENT.'/mimes.php');
+ }
+ elseif (is_file(APPPATH.'config/mimes.php'))
+ {
+ include(APPPATH.'config/mimes.php');
+ }
+
+ if ( ! is_array($mimes))
{
return FALSE;
}
diff --git a/system/helpers/form_helper.php b/system/helpers/form_helper.php
index 758056b50..a6dfdb2ba 100644
--- a/system/helpers/form_helper.php
+++ b/system/helpers/form_helper.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -49,7 +49,14 @@ if ( ! function_exists('form_open'))
$attributes = 'method="post"';
}
- $action = ( strpos($action, '://') === FALSE) ? $CI->config->site_url($action) : $action;
+ // If an action is not a full URL then turn it into one
+ if ($action && strpos($action, '://') === FALSE)
+ {
+ $action = $CI->config->site_url($action);
+ }
+
+ // If no action is provided then set to the current url
+ $action OR $action = $CI->config->site_url($CI->uri->uri_string());
$form = '<form action="'.$action.'"';
@@ -60,12 +67,12 @@ if ( ! function_exists('form_open'))
// CSRF
if ($CI->config->item('csrf_protection') === TRUE)
{
- $hidden[$CI->security->csrf_token_name] = $CI->security->csrf_hash;
+ $hidden[$CI->security->get_csrf_token_name()] = $CI->security->get_csrf_hash();
}
if (is_array($hidden) AND count($hidden) > 0)
{
- $form .= sprintf("\n<div class=\"hidden\">%s</div>", form_hidden($hidden));
+ $form .= sprintf("<div style=\"display:none\">%s</div>", form_hidden($hidden));
}
return $form;
@@ -107,7 +114,7 @@ if ( ! function_exists('form_open_multipart'))
/**
* Hidden Input Field
*
- * Generates hidden fields. You can pass a simple key/value string or an associative
+ * Generates hidden fields. You can pass a simple key/value string or an associative
* array with multiple values.
*
* @access public
@@ -533,7 +540,7 @@ if ( ! function_exists('form_label'))
/**
* Fieldset Tag
*
- * Used to produce <fieldset><legend>text</legend>. To close fieldset
+ * Used to produce <fieldset><legend>text</legend>. To close fieldset
* use form_fieldset_close()
*
* @access public
@@ -656,7 +663,7 @@ if ( ! function_exists('form_prep'))
* Form Value
*
* Grabs a value from the POST array for the specified field so you can
- * re-populate an input field or textarea. If Form Validation
+ * re-populate an input field or textarea. If Form Validation
* is active it retrieves the info from the validation class
*
* @access public
@@ -851,7 +858,7 @@ if ( ! function_exists('set_radio'))
/**
* Form Error
*
- * Returns the error for a specific form field. This is a helper for the
+ * Returns the error for a specific form field. This is a helper for the
* form validation class.
*
* @access public
@@ -878,7 +885,7 @@ if ( ! function_exists('form_error'))
/**
* Validation Error String
*
- * Returns all the errors associated with a form submission. This is a helper
+ * Returns all the errors associated with a form submission. This is a helper
* function for the form validation class.
*
* @access public
@@ -1025,25 +1032,23 @@ if ( ! function_exists('_get_validation_object'))
{
$CI =& get_instance();
- // We set this as a variable since we're returning by reference
+ // We set this as a variable since we're returning by reference.
$return = FALSE;
- if ( ! isset($CI->load->_ci_classes) OR ! isset($CI->load->_ci_classes['form_validation']))
+ if (FALSE !== ($object = $CI->load->is_loaded('form_validation')))
{
- return $return;
- }
-
- $object = $CI->load->_ci_classes['form_validation'];
+ if ( ! isset($CI->$object) OR ! is_object($CI->$object))
+ {
+ return $return;
+ }
- if ( ! isset($CI->$object) OR ! is_object($CI->$object))
- {
- return $return;
+ return $CI->$object;
}
- return $CI->$object;
+ return $return;
}
}
/* End of file form_helper.php */
-/* Location: ./system/helpers/form_helper.php */ \ No newline at end of file
+/* Location: ./system/helpers/form_helper.php */
diff --git a/system/helpers/html_helper.php b/system/helpers/html_helper.php
index 68c6f5908..bd66bc2d0 100644
--- a/system/helpers/html_helper.php
+++ b/system/helpers/html_helper.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -30,7 +30,7 @@
/**
* Heading
*
- * Generates an HTML heading tag. First param is the data.
+ * Generates an HTML heading tag. First param is the data.
* Second param is the size of the heading tag.
*
* @access public
@@ -40,9 +40,10 @@
*/
if ( ! function_exists('heading'))
{
- function heading($data = '', $h = '1')
+ function heading($data = '', $h = '1', $attributes = '')
{
- return "<h".$h.">".$data."</h".$h.">";
+ $attributes = ($attributes != '') ? ' '.$attributes : $attributes;
+ return "<h".$h.$attributes.">".$data."</h".$h.">";
}
}
@@ -113,7 +114,7 @@ if ( ! function_exists('_list'))
// Set the indentation based on the depth
$out = str_repeat(" ", $depth);
- // Were any attributes submitted? If so generate a string
+ // Were any attributes submitted? If so generate a string
if (is_array($attributes))
{
$atts = '';
@@ -127,7 +128,7 @@ if ( ! function_exists('_list'))
// Write the opening list tag
$out .= "<".$type.$attributes.">\n";
- // Cycle through the list elements. If an array is
+ // Cycle through the list elements. If an array is
// encountered we will recursively call _list()
static $_last_list_item = '';
@@ -243,7 +244,7 @@ if ( ! function_exists('img'))
* Generates a page document type declaration
*
* Valid options are xhtml-11, xhtml-strict, xhtml-trans, xhtml-frame,
- * html4-strict, html4-trans, and html4-frame. Values are saved in the
+ * html4-strict, html4-trans, and html4-frame. Values are saved in the
* doctypes config file.
*
* @access public
@@ -258,7 +259,16 @@ if ( ! function_exists('doctype'))
if ( ! is_array($_doctypes))
{
- if ( ! require_once(APPPATH.'config/doctypes.php'))
+ if (defined('ENVIRONMENT') AND is_file(APPPATH.'config/'.ENVIRONMENT.'/doctypes.php'))
+ {
+ include(APPPATH.'config/'.ENVIRONMENT.'/doctypes.php');
+ }
+ elseif (is_file(APPPATH.'config/doctypes.php'))
+ {
+ include(APPPATH.'config/doctypes.php');
+ }
+
+ if ( ! is_array($_doctypes))
{
return FALSE;
}
diff --git a/system/helpers/inflector_helper.php b/system/helpers/inflector_helper.php
index 4cd7486b4..2352b642e 100644
--- a/system/helpers/inflector_helper.php
+++ b/system/helpers/inflector_helper.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -41,20 +41,22 @@ if ( ! function_exists('singular'))
{
function singular($str)
{
- $str = strtolower(trim($str));
+ $str = trim($str);
$end = substr($str, -3);
- if ($end == 'ies')
+ $str = preg_replace('/(.*)?([s|c]h)es/i','$1$2',$str);
+
+ if (strtolower($end) == 'ies')
{
- $str = substr($str, 0, strlen($str)-3).'y';
+ $str = substr($str, 0, strlen($str)-3).(preg_match('/[a-z]/',$end) ? 'y' : 'Y');
}
- elseif ($end == 'ses')
+ elseif (strtolower($end) == 'ses')
{
$str = substr($str, 0, strlen($str)-2);
}
else
{
- $end = substr($str, -1);
+ $end = strtolower(substr($str, -1));
if ($end == 's')
{
@@ -82,18 +84,18 @@ if ( ! function_exists('plural'))
{
function plural($str, $force = FALSE)
{
- $str = strtolower(trim($str));
+ $str = trim($str);
$end = substr($str, -1);
- if ($end == 'y')
+ if (preg_match('/y/i',$end))
{
// Y preceded by vowel => regular plural
- $vowels = array('a', 'e', 'i', 'o', 'u');
+ $vowels = array('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U');
$str = in_array(substr($str, -2, 1), $vowels) ? $str.'s' : substr($str, 0, -1).'ies';
}
- elseif ($end == 'h')
+ elseif (preg_match('/h/i',$end))
{
- if (substr($str, -2) == 'ch' OR substr($str, -2) == 'sh')
+ if(preg_match('/^[c|s]h$/i',substr($str, -2)))
{
$str .= 'es';
}
@@ -102,7 +104,7 @@ if ( ! function_exists('plural'))
$str .= 's';
}
}
- elseif ($end == 's')
+ elseif (preg_match('/s/i',$end))
{
if ($force == TRUE)
{
diff --git a/system/helpers/language_helper.php b/system/helpers/language_helper.php
index ac0d69da1..e768b453c 100644
--- a/system/helpers/language_helper.php
+++ b/system/helpers/language_helper.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
diff --git a/system/helpers/number_helper.php b/system/helpers/number_helper.php
index 611777559..fc967e8b5 100644
--- a/system/helpers/number_helper.php
+++ b/system/helpers/number_helper.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
diff --git a/system/helpers/path_helper.php b/system/helpers/path_helper.php
index ffcf46842..02b14e836 100644
--- a/system/helpers/path_helper.php
+++ b/system/helpers/path_helper.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -39,7 +39,7 @@ if ( ! function_exists('set_realpath'))
{
function set_realpath($path, $check_existance = FALSE)
{
- // Security check to make sure the path is NOT a URL. No remote file inclusion!
+ // Security check to make sure the path is NOT a URL. No remote file inclusion!
if (preg_match("#^(http:\/\/|https:\/\/|www\.|ftp|[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})#i", $path))
{
show_error('The path you submitted must be a local server path, not a URL');
diff --git a/system/helpers/security_helper.php b/system/helpers/security_helper.php
index 61ebf46f9..a4df65623 100644
--- a/system/helpers/security_helper.php
+++ b/system/helpers/security_helper.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -67,22 +67,6 @@ if ( ! function_exists('sanitize_filename'))
/**
* Hash encode a string
*
- * This is simply an alias for do_hash()
- * dohash() is now deprecated
- */
-if ( ! function_exists('dohash'))
-{
- function dohash($str, $type = 'sha1')
- {
- return do_hash($str, $type);
- }
-}
-
-// --------------------------------------------------------------------
-
-/**
- * Hash encode a string
- *
* @access public
* @param string
* @return string
@@ -93,23 +77,7 @@ if ( ! function_exists('do_hash'))
{
if ($type == 'sha1')
{
- if ( ! function_exists('sha1'))
- {
- if ( ! function_exists('mhash'))
- {
- require_once(BASEPATH.'libraries/Sha1'.EXT);
- $SH = new CI_SHA;
- return $SH->generate($str);
- }
- else
- {
- return bin2hex(mhash(MHASH_SHA1, $str));
- }
- }
- else
- {
- return sha1($str);
- }
+ return sha1($str);
}
else
{
@@ -151,7 +119,7 @@ if ( ! function_exists('encode_php_tags'))
{
function encode_php_tags($str)
{
- return str_replace(array('<?php', '<?PHP', '<?', '?>'), array('&lt;?php', '&lt;?PHP', '&lt;?', '?&gt;'), $str);
+ return str_replace(array('<?php', '<?PHP', '<?', '?>'), array('&lt;?php', '&lt;?PHP', '&lt;?', '?&gt;'), $str);
}
}
diff --git a/system/helpers/smiley_helper.php b/system/helpers/smiley_helper.php
index 463881f58..22ca4df77 100644
--- a/system/helpers/smiley_helper.php
+++ b/system/helpers/smiley_helper.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -30,7 +30,7 @@
/**
* Smiley Javascript
*
- * Returns the javascript required for the smiley insertion. Optionally takes
+ * Returns the javascript required for the smiley insertion. Optionally takes
* an array of aliases to loosely couple the smiley array to the view.
*
* @access public
@@ -157,7 +157,7 @@ if ( ! function_exists('get_clickable_smileys'))
foreach ($smileys as $key => $val)
{
// Keep duplicates from being used, which can happen if the
- // mapping array contains multiple identical replacements. For example:
+ // mapping array contains multiple identical replacements. For example:
// :-) and :) might be replaced with the same image so both smileys
// will be in the array.
if (isset($used[$smileys[$key][0]]))
@@ -204,7 +204,7 @@ if ( ! function_exists('parse_smileys'))
}
// Add a trailing slash to the file path if needed
- $image_url = preg_replace("/(.+?)\/*$/", "\\1/", $image_url);
+ $image_url = preg_replace("/(.+?)\/*$/", "\\1/", $image_url);
foreach ($smileys as $key => $val)
{
@@ -229,19 +229,21 @@ if ( ! function_exists('_get_smiley_array'))
{
function _get_smiley_array()
{
- if ( ! file_exists(APPPATH.'config/smileys'.EXT))
+ if (defined('ENVIRONMENT') AND file_exists(APPPATH.'config/'.ENVIRONMENT.'/smileys.php'))
{
- return FALSE;
+ include(APPPATH.'config/'.ENVIRONMENT.'/smileys.php');
+ }
+ elseif (file_exists(APPPATH.'config/smileys.php'))
+ {
+ include(APPPATH.'config/smileys.php');
}
- include(APPPATH.'config/smileys'.EXT);
-
- if ( ! isset($smileys) OR ! is_array($smileys))
+ if (isset($smileys) AND is_array($smileys))
{
- return FALSE;
+ return $smileys;
}
- return $smileys;
+ return FALSE;
}
}
diff --git a/system/helpers/string_helper.php b/system/helpers/string_helper.php
index 7765bba31..9f730bd10 100644
--- a/system/helpers/string_helper.php
+++ b/system/helpers/string_helper.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -150,7 +150,7 @@ if ( ! function_exists('reduce_double_slashes'))
/**
* Reduce Multiples
*
- * Reduces multiple instances of a particular character. Example:
+ * Reduces multiple instances of a particular character. Example:
*
* Fred, Bill,, Joe, Jimmy
*
@@ -187,7 +187,7 @@ if ( ! function_exists('reduce_multiples'))
* Useful for generating passwords or hashes.
*
* @access public
- * @param string type of random string. basic, alpha, alunum, numeric, nozero, unique, md5, encrypt and sha1
+ * @param string type of random string. basic, alpha, alunum, numeric, nozero, unique, md5, encrypt and sha1
* @param integer number of characters
* @return string
*/
@@ -245,7 +245,7 @@ if ( ! function_exists('random_string'))
/**
* Alternator
*
- * Allows strings to be alternated. See docs...
+ * Allows strings to be alternated. See docs...
*
* @access public
* @param string (as many parameters as needed)
diff --git a/system/helpers/text_helper.php b/system/helpers/text_helper.php
index 96afd4cee..7d621257f 100644
--- a/system/helpers/text_helper.php
+++ b/system/helpers/text_helper.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -63,7 +63,7 @@ if ( ! function_exists('word_limiter'))
/**
* Character Limiter
*
- * Limits the string based on the character count. Preserves complete words
+ * Limits the string based on the character count. Preserves complete words
* so the character count may not be exactly as specified.
*
* @access public
@@ -133,7 +133,7 @@ if ( ! function_exists('ascii_to_entities'))
*/
if (count($temp) == 1)
{
- $out .= '&#'.array_shift($temp).';';
+ $out .= '&#'.array_shift($temp).';';
$count = 1;
}
@@ -366,12 +366,14 @@ if ( ! function_exists('convert_accented_characters'))
{
function convert_accented_characters($str)
{
- if ( ! file_exists(APPPATH.'config/foreign_chars'.EXT))
+ if (defined('ENVIRONMENT') AND is_file(APPPATH.'config/'.ENVIRONMENT.'/foreign_chars.php'))
{
- return $str;
+ include(APPPATH.'config/'.ENVIRONMENT.'/foreign_chars.php');
+ }
+ elseif (is_file(APPPATH.'config/foreign_chars.php'))
+ {
+ include(APPPATH.'config/foreign_chars.php');
}
-
- include APPPATH.'config/foreign_chars'.EXT;
if ( ! isset($foreign_characters))
{
@@ -387,7 +389,7 @@ if ( ! function_exists('convert_accented_characters'))
/**
* Word Wrap
*
- * Wraps text at the specified character. Maintains the integrity of words.
+ * Wraps text at the specified character. Maintains the integrity of words.
* Anything placed between {unwrap}{/unwrap} will not be word wrapped, nor
* will URLs.
*
@@ -427,7 +429,7 @@ if ( ! function_exists('word_wrap'))
// Use PHP's native function to do the initial wordwrap.
// We set the cut flag to FALSE so that any individual words that are
- // too long get left alone. In the next step we'll deal with them.
+ // too long get left alone. In the next step we'll deal with them.
$str = wordwrap($str, $charlim, "\n", FALSE);
// Split the string into individual lines of text and cycle through them
diff --git a/system/helpers/typography_helper.php b/system/helpers/typography_helper.php
index 302bf45c5..0cd66738d 100644
--- a/system/helpers/typography_helper.php
+++ b/system/helpers/typography_helper.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -84,9 +84,8 @@ if ( ! function_exists('entity_decode'))
{
function entity_decode($str, $charset='UTF-8')
{
- $CI =& get_instance();
- $CI->load->library('security');
- return $CI->security->entity_decode($str, $charset);
+ global $SEC;
+ return $SEC->entity_decode($str, $charset);
}
}
diff --git a/system/helpers/url_helper.php b/system/helpers/url_helper.php
index d0516cee6..8e93744fb 100644
--- a/system/helpers/url_helper.php
+++ b/system/helpers/url_helper.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -286,7 +286,7 @@ if ( ! function_exists('safe_mailto'))
{
foreach ($attributes as $key => $val)
{
- $x[] = ' '.$key.'="';
+ $x[] = ' '.$key.'="';
for ($i = 0; $i < strlen($val); $i++)
{
$x[] = "|".ord(substr($val, $i, 1));
@@ -363,7 +363,7 @@ if ( ! function_exists('safe_mailto'))
*
* Automatically links URL and Email addresses.
* Note: There's a bit of extra code here to deal with
- * URLs or emails that end in a period. We'll strip these
+ * URLs or emails that end in a period. We'll strip these
* off and add them after the link.
*
* @access public
diff --git a/system/helpers/xml_helper.php b/system/helpers/xml_helper.php
index cdd81ad70..2219d662a 100644
--- a/system/helpers/xml_helper.php
+++ b/system/helpers/xml_helper.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -46,7 +46,7 @@ if ( ! function_exists('xml_convert'))
if ($protect_all === TRUE)
{
- $str = preg_replace("/&(\w+);/", "$temp\\1;", $str);
+ $str = preg_replace("/&(\w+);/", "$temp\\1;", $str);
}
$str = str_replace(array("&","<",">","\"", "'", "-"),
diff --git a/system/language/english/email_lang.php b/system/language/english/email_lang.php
index e3bd113cb..fe4276822 100644
--- a/system/language/english/email_lang.php
+++ b/system/language/english/email_lang.php
@@ -5,9 +5,9 @@ $lang['email_invalid_address'] = "Invalid email address: %s";
$lang['email_attachment_missing'] = "Unable to locate the following email attachment: %s";
$lang['email_attachment_unreadable'] = "Unable to open this attachment: %s";
$lang['email_no_recipients'] = "You must include recipients: To, Cc, or Bcc";
-$lang['email_send_failure_phpmail'] = "Unable to send email using PHP mail(). Your server might not be configured to send mail using this method.";
-$lang['email_send_failure_sendmail'] = "Unable to send email using PHP Sendmail. Your server might not be configured to send mail using this method.";
-$lang['email_send_failure_smtp'] = "Unable to send email using PHP SMTP. Your server might not be configured to send mail using this method.";
+$lang['email_send_failure_phpmail'] = "Unable to send email using PHP mail(). Your server might not be configured to send mail using this method.";
+$lang['email_send_failure_sendmail'] = "Unable to send email using PHP Sendmail. Your server might not be configured to send mail using this method.";
+$lang['email_send_failure_smtp'] = "Unable to send email using PHP SMTP. Your server might not be configured to send mail using this method.";
$lang['email_sent'] = "Your message has been successfully sent using the following protocol: %s";
$lang['email_no_socket'] = "Unable to open a socket to Sendmail. Please check settings.";
$lang['email_no_hostname'] = "You did not specify a SMTP hostname.";
diff --git a/system/language/english/form_validation_lang.php b/system/language/english/form_validation_lang.php
index b01885091..3f2409007 100644
--- a/system/language/english/form_validation_lang.php
+++ b/system/language/english/form_validation_lang.php
@@ -19,6 +19,9 @@ $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_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.";
/* End of file form_validation_lang.php */
diff --git a/system/language/english/ftp_lang.php b/system/language/english/ftp_lang.php
index 392b2b272..1e5168cf8 100644
--- a/system/language/english/ftp_lang.php
+++ b/system/language/english/ftp_lang.php
@@ -1,17 +1,17 @@
<?php
-$lang['ftp_no_connection'] = "Unable to locate a valid connection ID. Please make sure you are connected before peforming any file routines.";
+$lang['ftp_no_connection'] = "Unable to locate a valid connection ID. Please make sure you are connected before peforming any file routines.";
$lang['ftp_unable_to_connect'] = "Unable to connect to your FTP server using the supplied hostname.";
-$lang['ftp_unable_to_login'] = "Unable to login to your FTP server. Please check your username and password.";
+$lang['ftp_unable_to_login'] = "Unable to login to your FTP server. Please check your username and password.";
$lang['ftp_unable_to_makdir'] = "Unable to create the directory you have specified.";
$lang['ftp_unable_to_changedir'] = "Unable to change directories.";
-$lang['ftp_unable_to_chmod'] = "Unable to set file permissions. Please check your path. Note: This feature is only available in PHP 5 or higher.";
-$lang['ftp_unable_to_upload'] = "Unable to upload the specified file. Please check your path.";
-$lang['ftp_unable_to_download'] = "Unable to download the specified file. Please check your path.";
-$lang['ftp_no_source_file'] = "Unable to locate the source file. Please check your path.";
+$lang['ftp_unable_to_chmod'] = "Unable to set file permissions. Please check your path. Note: This feature is only available in PHP 5 or higher.";
+$lang['ftp_unable_to_upload'] = "Unable to upload the specified file. Please check your path.";
+$lang['ftp_unable_to_download'] = "Unable to download the specified file. Please check your path.";
+$lang['ftp_no_source_file'] = "Unable to locate the source file. Please check your path.";
$lang['ftp_unable_to_rename'] = "Unable to rename the file.";
$lang['ftp_unable_to_delete'] = "Unable to delete the file.";
-$lang['ftp_unable_to_move'] = "Unable to move the file. Please make sure the destination directory exists.";
+$lang['ftp_unable_to_move'] = "Unable to move the file. Please make sure the destination directory exists.";
/* End of file ftp_lang.php */
diff --git a/system/language/english/imglib_lang.php b/system/language/english/imglib_lang.php
index 66505da07..0a56fe0a5 100644
--- a/system/language/english/imglib_lang.php
+++ b/system/language/english/imglib_lang.php
@@ -4,20 +4,20 @@ $lang['imglib_source_image_required'] = "You must specify a source image in your
$lang['imglib_gd_required'] = "The GD image library is required for this feature.";
$lang['imglib_gd_required_for_props'] = "Your server must support the GD image library in order to determine the image properties.";
$lang['imglib_unsupported_imagecreate'] = "Your server does not support the GD function required to process this type of image.";
-$lang['imglib_gif_not_supported'] = "GIF images are often not supported due to licensing restrictions. You may have to use JPG or PNG images instead.";
+$lang['imglib_gif_not_supported'] = "GIF images are often not supported due to licensing restrictions. You may have to use JPG or PNG images instead.";
$lang['imglib_jpg_not_supported'] = "JPG images are not supported.";
$lang['imglib_png_not_supported'] = "PNG images are not supported.";
$lang['imglib_jpg_or_png_required'] = "The image resize protocol specified in your preferences only works with JPEG or PNG image types.";
-$lang['imglib_copy_error'] = "An error was encountered while attempting to replace the file. Please make sure your file directory is writable.";
+$lang['imglib_copy_error'] = "An error was encountered while attempting to replace the file. Please make sure your file directory is writable.";
$lang['imglib_rotate_unsupported'] = "Image rotation does not appear to be supported by your server.";
-$lang['imglib_libpath_invalid'] = "The path to your image library is not correct. Please set the correct path in your image preferences.";
-$lang['imglib_image_process_failed'] = "Image processing failed. Please verify that your server supports the chosen protocol and that the path to your image library is correct.";
+$lang['imglib_libpath_invalid'] = "The path to your image library is not correct. Please set the correct path in your image preferences.";
+$lang['imglib_image_process_failed'] = "Image processing failed. Please verify that your server supports the chosen protocol and that the path to your image library is correct.";
$lang['imglib_rotation_angle_required'] = "An angle of rotation is required to rotate the image.";
$lang['imglib_writing_failed_gif'] = "GIF image.";
$lang['imglib_invalid_path'] = "The path to the image is not correct.";
$lang['imglib_copy_failed'] = "The image copy routine failed.";
$lang['imglib_missing_font'] = "Unable to find a font to use.";
-$lang['imglib_save_failed'] = "Unable to save the image. Please make sure the image and file directory are writable.";
+$lang['imglib_save_failed'] = "Unable to save the image. Please make sure the image and file directory are writable.";
/* End of file imglib_lang.php */
diff --git a/system/language/english/profiler_lang.php b/system/language/english/profiler_lang.php
index b6460fb83..1111158c8 100644
--- a/system/language/english/profiler_lang.php
+++ b/system/language/english/profiler_lang.php
@@ -9,6 +9,7 @@ $lang['profiler_post_data'] = 'POST DATA';
$lang['profiler_uri_string'] = 'URI STRING';
$lang['profiler_memory_usage'] = 'MEMORY USAGE';
$lang['profiler_config'] = 'CONFIG VARIABLES';
+$lang['profiler_session_data'] = 'SESSION DATA';
$lang['profiler_headers'] = 'HTTP HEADERS';
$lang['profiler_no_db'] = 'Database driver is not currently loaded';
$lang['profiler_no_queries'] = 'No queries were run';
@@ -17,6 +18,8 @@ $lang['profiler_no_get'] = 'No GET data exists';
$lang['profiler_no_uri'] = 'No URI data exists';
$lang['profiler_no_memory'] = 'Memory Usage Unavailable';
$lang['profiler_no_profiles'] = 'No Profile data - all Profiler sections have been disabled.';
+$lang['profiler_section_hide'] = 'Hide';
+$lang['profiler_section_show'] = 'Show';
/* End of file profiler_lang.php */
/* Location: ./system/language/english/profiler_lang.php */ \ No newline at end of file
diff --git a/system/libraries/Cache/Cache.php b/system/libraries/Cache/Cache.php
index d3f6105ea..938c80857 100644
--- a/system/libraries/Cache/Cache.php
+++ b/system/libraries/Cache/Cache.php
@@ -10,30 +10,30 @@
* @license http://codeigniter.com/user_guide/license.html
* @link http://codeigniter.com
* @since Version 2.0
- * @filesource
+ * @filesource
*/
// ------------------------------------------------------------------------
/**
- * CodeIgniter Caching Class
+ * CodeIgniter Caching Class
*
* @package CodeIgniter
* @subpackage Libraries
* @category Core
* @author ExpressionEngine Dev Team
- * @link
+ * @link
*/
-class Cache extends CI_Driver_Library {
-
+class CI_Cache extends CI_Driver_Library {
+
protected $valid_drivers = array(
- 'cache_apc', 'cache_file', 'cache_memcached', 'cache_dummy'
- );
+ 'cache_apc', 'cache_file', 'cache_memcached', 'cache_dummy'
+ );
protected $_cache_path = NULL; // Path of cache files (if file-based cache)
protected $_adapter = 'dummy';
protected $_backup_driver;
-
+
// ------------------------------------------------------------------------
/**
@@ -52,16 +52,16 @@ class Cache extends CI_Driver_Library {
// ------------------------------------------------------------------------
/**
- * Get
+ * Get
*
- * Look for a value in the cache. If it exists, return the data
+ * Look for a value in the cache. If it exists, return the data
* if not, return FALSE
*
- * @param string
+ * @param string
* @return mixed value that is stored/FALSE on failure
*/
public function get($id)
- {
+ {
return $this->{$this->_adapter}->get($id);
}
@@ -112,7 +112,7 @@ class Cache extends CI_Driver_Library {
* Cache Info
*
* @param string user/filehits
- * @return mixed array on success, false on failure
+ * @return mixed array on success, false on failure
*/
public function cache_info($type = 'user')
{
@@ -120,7 +120,7 @@ class Cache extends CI_Driver_Library {
}
// ------------------------------------------------------------------------
-
+
/**
* Get Cache Metadata
*
@@ -131,7 +131,7 @@ class Cache extends CI_Driver_Library {
{
return $this->{$this->_adapter}->get_metadata($id);
}
-
+
// ------------------------------------------------------------------------
/**
@@ -139,11 +139,11 @@ class Cache extends CI_Driver_Library {
*
* Initialize class properties based on the configuration array.
*
- * @param array
+ * @param array
* @return void
*/
private function _initialize($config)
- {
+ {
$default_config = array(
'adapter',
'memcached'
@@ -207,7 +207,7 @@ class Cache extends CI_Driver_Library {
return $obj;
}
-
+
// ------------------------------------------------------------------------
}
// End Class
diff --git a/system/libraries/Cache/drivers/Cache_apc.php b/system/libraries/Cache/drivers/Cache_apc.php
index 4b995c793..ea129eded 100644
--- a/system/libraries/Cache/drivers/Cache_apc.php
+++ b/system/libraries/Cache/drivers/Cache_apc.php
@@ -10,30 +10,30 @@
* @license http://codeigniter.com/user_guide/license.html
* @link http://codeigniter.com
* @since Version 2.0
- * @filesource
+ * @filesource
*/
// ------------------------------------------------------------------------
/**
- * CodeIgniter APC Caching Class
+ * CodeIgniter APC Caching Class
*
* @package CodeIgniter
* @subpackage Libraries
* @category Core
* @author ExpressionEngine Dev Team
- * @link
+ * @link
*/
-class Cache_apc extends CI_Driver {
+class CI_Cache_apc extends CI_Driver {
/**
- * Get
+ * Get
*
- * Look for a value in the cache. If it exists, return the data
+ * Look for a value in the cache. If it exists, return the data
* if not, return FALSE
*
- * @param string
+ * @param string
* @return mixed value that is stored/FALSE on failure
*/
public function get($id)
@@ -43,8 +43,8 @@ class Cache_apc extends CI_Driver {
return (is_array($data)) ? $data[0] : FALSE;
}
- // ------------------------------------------------------------------------
-
+ // ------------------------------------------------------------------------
+
/**
* Cache Save
*
@@ -58,7 +58,7 @@ class Cache_apc extends CI_Driver {
{
return apc_store($id, array($data, time(), $ttl), $ttl);
}
-
+
// ------------------------------------------------------------------------
/**
@@ -90,7 +90,7 @@ class Cache_apc extends CI_Driver {
* Cache Info
*
* @param string user/filehits
- * @return mixed array on success, false on failure
+ * @return mixed array on success, false on failure
*/
public function cache_info($type = NULL)
{
@@ -137,13 +137,13 @@ class Cache_apc extends CI_Driver {
log_message('error', 'The APC PHP extension must be loaded to use APC Cache.');
return FALSE;
}
-
+
return TRUE;
}
// ------------------------------------------------------------------------
-
+
}
// End Class
diff --git a/system/libraries/Cache/drivers/Cache_dummy.php b/system/libraries/Cache/drivers/Cache_dummy.php
index 74f689241..f96a68e27 100644
--- a/system/libraries/Cache/drivers/Cache_dummy.php
+++ b/system/libraries/Cache/drivers/Cache_dummy.php
@@ -10,29 +10,29 @@
* @license http://codeigniter.com/user_guide/license.html
* @link http://codeigniter.com
* @since Version 2.0
- * @filesource
+ * @filesource
*/
// ------------------------------------------------------------------------
/**
- * CodeIgniter Dummy Caching Class
+ * CodeIgniter Dummy Caching Class
*
* @package CodeIgniter
* @subpackage Libraries
* @category Core
* @author ExpressionEngine Dev Team
- * @link
+ * @link
*/
-class Cache_dummy extends CI_Driver {
+class CI_Cache_dummy extends CI_Driver {
/**
- * Get
+ * Get
*
* Since this is the dummy class, it's always going to return FALSE.
*
- * @param string
+ * @param string
* @return Boolean FALSE
*/
public function get($id)
@@ -40,8 +40,8 @@ class Cache_dummy extends CI_Driver {
return FALSE;
}
- // ------------------------------------------------------------------------
-
+ // ------------------------------------------------------------------------
+
/**
* Cache Save
*
@@ -55,7 +55,7 @@ class Cache_dummy extends CI_Driver {
{
return TRUE;
}
-
+
// ------------------------------------------------------------------------
/**
@@ -112,7 +112,7 @@ class Cache_dummy extends CI_Driver {
/**
* Is this caching driver supported on the system?
* Of course this one is.
- *
+ *
* @return TRUE;
*/
public function is_supported()
@@ -121,9 +121,9 @@ class Cache_dummy extends CI_Driver {
}
// ------------------------------------------------------------------------
-
+
}
// End Class
-/* End of file Cache_apc.php */
-/* Location: ./system/libraries/Cache/drivers/Cache_apc.php */ \ No newline at end of file
+/* End of file Cache_dummy.php */
+/* Location: ./system/libraries/Cache/drivers/Cache_dummy.php */ \ No newline at end of file
diff --git a/system/libraries/Cache/drivers/Cache_file.php b/system/libraries/Cache/drivers/Cache_file.php
index 86d1a3b6a..39dcd15c2 100644
--- a/system/libraries/Cache/drivers/Cache_file.php
+++ b/system/libraries/Cache/drivers/Cache_file.php
@@ -10,22 +10,22 @@
* @license http://codeigniter.com/user_guide/license.html
* @link http://codeigniter.com
* @since Version 2.0
- * @filesource
+ * @filesource
*/
// ------------------------------------------------------------------------
/**
- * CodeIgniter Memcached Caching Class
+ * CodeIgniter Memcached Caching Class
*
* @package CodeIgniter
* @subpackage Libraries
* @category Core
* @author ExpressionEngine Dev Team
- * @link
+ * @link
*/
-class Cache_file extends CI_Driver {
+class CI_Cache_file extends CI_Driver {
protected $_cache_path;
@@ -36,9 +36,9 @@ class Cache_file extends CI_Driver {
{
$CI =& get_instance();
$CI->load->helper('file');
-
+
$path = $CI->config->item('cache_path');
-
+
$this->_cache_path = ($path == '') ? APPPATH.'cache/' : $path;
}
@@ -56,16 +56,16 @@ class Cache_file extends CI_Driver {
{
return FALSE;
}
-
+
$data = read_file($this->_cache_path.$id);
$data = unserialize($data);
-
- if (time() > $data['time'] + $data['ttl'])
+
+ if (time() > $data['time'] + $data['ttl'])
{
unlink($this->_cache_path.$id);
return FALSE;
}
-
+
return $data['data'];
}
@@ -76,22 +76,22 @@ class Cache_file extends CI_Driver {
*
* @param string unique key
* @param mixed data to store
- * @param int length of time (in seconds) the cache is valid
+ * @param int length of time (in seconds) the cache is valid
* - Default is 60 seconds
* @return boolean true on success/false on failure
*/
public function save($id, $data, $ttl = 60)
- {
+ {
$contents = array(
'time' => time(),
- 'ttl' => $ttl,
+ 'ttl' => $ttl,
'data' => $data
);
-
+
if (write_file($this->_cache_path.$id, serialize($contents)))
{
@chmod($this->_cache_path.$id, 0777);
- return TRUE;
+ return TRUE;
}
return FALSE;
@@ -116,7 +116,7 @@ class Cache_file extends CI_Driver {
* Clean the Cache
*
* @return boolean false on failure/true on success
- */
+ */
public function clean()
{
return delete_files($this->_cache_path);
@@ -151,10 +151,10 @@ class Cache_file extends CI_Driver {
{
return FALSE;
}
-
- $data = read_file($this->_cache_path.$id);
+
+ $data = read_file($this->_cache_path.$id);
$data = unserialize($data);
-
+
if (is_array($data))
{
$data = $data['data'];
@@ -170,7 +170,7 @@ class Cache_file extends CI_Driver {
'mtime' => $mtime
);
}
-
+
return FALSE;
}
@@ -180,7 +180,7 @@ class Cache_file extends CI_Driver {
* Is supported
*
* In the file driver, check to see that the cache directory is indeed writable
- *
+ *
* @return boolean
*/
public function is_supported()
diff --git a/system/libraries/Cache/drivers/Cache_memcached.php b/system/libraries/Cache/drivers/Cache_memcached.php
index 5f5a31591..ec2fd216a 100644
--- a/system/libraries/Cache/drivers/Cache_memcached.php
+++ b/system/libraries/Cache/drivers/Cache_memcached.php
@@ -25,7 +25,7 @@
* @link
*/
-class Cache_memcached extends CI_Driver {
+class CI_Cache_memcached extends CI_Driver {
private $_memcached; // Holds the memcached object
diff --git a/system/libraries/Calendar.php b/system/libraries/Calendar.php
index 72d228e73..7dcbaab47 100644
--- a/system/libraries/Calendar.php
+++ b/system/libraries/Calendar.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -47,7 +47,7 @@ class CI_Calendar {
{
$this->CI =& get_instance();
- if ( ! in_array('calendar_lang'.EXT, $this->CI->lang->is_loaded, TRUE))
+ if ( ! in_array('calendar_lang.php', $this->CI->lang->is_loaded, TRUE))
{
$this->CI->lang->load('calendar');
}
@@ -99,7 +99,7 @@ class CI_Calendar {
{
// Set and validate the supplied month/year
if ($year == '')
- $year = date("Y", $this->local_time);
+ $year = date("Y", $this->local_time);
if ($month == '')
$month = date("m", $this->local_time);
@@ -128,7 +128,7 @@ class CI_Calendar {
// Set the starting day number
$local_date = mktime(12, 0, 0, $month, 1, $year);
$date = getdate($local_date);
- $day = $start_day + 1 - $date["wday"];
+ $day = $start_day + 1 - $date["wday"];
while ($day > 1)
{
@@ -157,8 +157,8 @@ class CI_Calendar {
// "previous" month link
if ($this->show_next_prev == TRUE)
{
- // Add a trailing slash to the URL if needed
- $this->next_prev_url = preg_replace("/(.+?)\/*$/", "\\1/", $this->next_prev_url);
+ // Add a trailing slash to the URL if needed
+ $this->next_prev_url = preg_replace("/(.+?)\/*$/", "\\1/", $this->next_prev_url);
$adjusted_date = $this->adjust_date($month - 1, $year);
$out .= str_replace('{previous_url}', $this->next_prev_url.$adjusted_date['year'].'/'.$adjusted_date['month'], $this->temp['heading_previous_cell']);
@@ -233,7 +233,7 @@ class CI_Calendar {
$out .= $this->temp['cal_cell_blank'];
}
- $out .= ($is_current_month == TRUE AND $day == $cur_day) ? $this->temp['cal_cell_end_today'] : $this->temp['cal_cell_end'];
+ $out .= ($is_current_month == TRUE AND $day == $cur_day) ? $this->temp['cal_cell_end_today'] : $this->temp['cal_cell_end'];
$day++;
}
@@ -287,7 +287,7 @@ class CI_Calendar {
* Get Day Names
*
* Returns an array of day names (Sunday, Monday, etc.) based
- * on the type. Options: long, short, abrev
+ * on the type. Options: long, short, abrev
*
* @access public
* @param string
@@ -404,7 +404,7 @@ class CI_Calendar {
*/
function default_template()
{
- return array (
+ return array (
'table_open' => '<table border="0" cellpadding="4" cellspacing="0">',
'heading_row_start' => '<tr>',
'heading_previous_cell' => '<th><a href="{previous_url}">&lt;&lt;</a></th>',
@@ -451,7 +451,7 @@ class CI_Calendar {
$today = array('cal_cell_start_today', 'cal_cell_content_today', 'cal_cell_no_content_today', 'cal_cell_end_today');
- foreach (array('table_open', 'table_close', 'heading_row_start', 'heading_previous_cell', 'heading_title_cell', 'heading_next_cell', 'heading_row_end', 'week_row_start', 'week_day_cell', 'week_row_end', 'cal_row_start', 'cal_cell_start', 'cal_cell_content', 'cal_cell_no_content', 'cal_cell_blank', 'cal_cell_end', 'cal_row_end', 'cal_cell_start_today', 'cal_cell_content_today', 'cal_cell_no_content_today', 'cal_cell_end_today') as $val)
+ foreach (array('table_open', 'table_close', 'heading_row_start', 'heading_previous_cell', 'heading_title_cell', 'heading_next_cell', 'heading_row_end', 'week_row_start', 'week_day_cell', 'week_row_end', 'cal_row_start', 'cal_cell_start', 'cal_cell_content', 'cal_cell_no_content', 'cal_cell_blank', 'cal_cell_end', 'cal_row_end', 'cal_cell_start_today', 'cal_cell_content_today', 'cal_cell_no_content_today', 'cal_cell_end_today') as $val)
{
if (preg_match("/\{".$val."\}(.*?)\{\/".$val."\}/si", $this->template, $match))
{
diff --git a/system/libraries/Cart.php b/system/libraries/Cart.php
index 7f65b48b9..fbccfb3d9 100644
--- a/system/libraries/Cart.php
+++ b/system/libraries/Cart.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -30,7 +30,7 @@ class CI_Cart {
var $product_id_rules = '\.a-z0-9_-'; // alpha-numeric, dashes, underscores, or periods
var $product_name_rules = '\.\:\-_ a-z0-9'; // alpha-numeric, dashes, underscores, colons or periods
- // Private variables. Do not change!
+ // Private variables. Do not change!
var $CI;
var $_cart_contents = array();
@@ -45,7 +45,7 @@ class CI_Cart {
// Set the super object to a local variable for use later
$this->CI =& get_instance();
- // Are any config settings being passed manually? If so, set them
+ // Are any config settings being passed manually? If so, set them
$config = array();
if (count($params) > 0)
{
@@ -148,7 +148,7 @@ class CI_Cart {
// --------------------------------------------------------------------
- // Does the $items array contain an id, quantity, price, and name? These are required
+ // Does the $items array contain an id, quantity, price, and name? These are required
if ( ! isset($items['id']) OR ! isset($items['qty']) OR ! isset($items['price']) OR ! isset($items['name']))
{
log_message('error', 'The cart array must contain a product ID, quantity, price, and name.');
@@ -157,7 +157,7 @@ class CI_Cart {
// --------------------------------------------------------------------
- // Prep the quantity. It can only be a number. Duh...
+ // Prep the quantity. It can only be a number. Duh...
$items['qty'] = trim(preg_replace('/([^0-9])/i', '', $items['qty']));
// Trim any leading zeros
$items['qty'] = trim(preg_replace('/(^[0]+)/i', '', $items['qty']));
@@ -175,7 +175,7 @@ class CI_Cart {
// Note: These can be user-specified by setting the $this->product_id_rules variable.
if ( ! preg_match("/^[".$this->product_id_rules."]+$/i", $items['id']))
{
- log_message('error', 'Invalid product ID. The product ID can only contain alpha-numeric characters, dashes, and underscores');
+ log_message('error', 'Invalid product ID. The product ID can only contain alpha-numeric characters, dashes, and underscores');
return FALSE;
}
@@ -191,7 +191,7 @@ class CI_Cart {
// --------------------------------------------------------------------
- // Prep the price. Remove anything that isn't a number or decimal point.
+ // Prep the price. Remove anything that isn't a number or decimal point.
$items['price'] = trim(preg_replace('/([^0-9\.])/i', '', $items['price']));
// Trim any leading zeros
$items['price'] = trim(preg_replace('/(^[0]+)/i', '', $items['price']));
@@ -210,7 +210,7 @@ class CI_Cart {
// Each row in the cart array, however, must have a unique index that identifies not only
// a particular product, but makes it possible to store identical products with different options.
// For example, what if someone buys two identical t-shirts (same product ID), but in
- // different sizes? The product ID (and other attributes, like the name) will be identical for
+ // different sizes? The product ID (and other attributes, like the name) will be identical for
// both sizes because it's the same shirt. The only difference will be the size.
// Internally, we need to treat identical submissions, but with different options, as a unique product.
// Our solution is to convert the options array to a string and MD5 it along with the product ID.
@@ -271,7 +271,7 @@ class CI_Cart {
}
// You can either update a single product using a one-dimensional array,
- // or multiple products using a multi-dimensional one. The way we
+ // or multiple products using a multi-dimensional one. The way we
// determine the array type is by looking for a required array key named "id".
// If it's not found we assume it's a multi-dimensional array
$save_cart = FALSE;
@@ -344,7 +344,7 @@ class CI_Cart {
return FALSE;
}
- // Is the quantity zero? If so we will remove the item from the cart.
+ // Is the quantity zero? If so we will remove the item from the cart.
// If the quantity is greater than zero we are updating
if ($items['qty'] == 0)
{
@@ -392,7 +392,7 @@ class CI_Cart {
$this->_cart_contents['total_items'] = count($this->_cart_contents);
$this->_cart_contents['cart_total'] = $total;
- // Is our cart empty? If so we delete it from the session
+ // Is our cart empty? If so we delete it from the session
if (count($this->_cart_contents) <= 2)
{
$this->CI->session->unset_userdata('cart_contents');
diff --git a/system/libraries/Driver.php b/system/libraries/Driver.php
index 02e093d7e..1e01fcc1f 100644
--- a/system/libraries/Driver.php
+++ b/system/libraries/Driver.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -43,8 +43,12 @@ class CI_Driver_Library {
// The class will be prefixed with the parent lib
$child_class = $this->lib_name.'_'.$child;
-
- if (in_array(strtolower($child_class), array_map('strtolower', $this->valid_drivers)))
+
+ // Remove the CI_ prefix and lowercase
+ $lib_name = ucfirst(strtolower(str_replace('CI_', '', $this->lib_name)));
+ $driver_name = strtolower(str_replace('CI_', '', $child_class));
+
+ if (in_array($driver_name, array_map('strtolower', $this->valid_drivers)))
{
// check and see if the driver is in a separate file
if ( ! class_exists($child_class))
@@ -52,19 +56,15 @@ class CI_Driver_Library {
// check application path first
foreach (array(APPPATH, BASEPATH) as $path)
{
- // and check for case sensitivity of both the parent and child libs
- foreach (array(ucfirst($this->lib_name), strtolower($this->lib_name)) as $lib)
+ // loves me some nesting!
+ foreach (array(ucfirst($driver_name), $driver_name) as $class)
{
- // loves me some nesting!
- foreach (array(ucfirst($child_class), strtolower($child_class)) as $class)
- {
- $filepath = $path.'libraries/'.$this->lib_name.'/drivers/'.$child_class.EXT;
+ $filepath = $path.'libraries/'.$lib_name.'/drivers/'.$class.'.php';
- if (file_exists($filepath))
- {
- include_once $filepath;
- break;
- }
+ if (file_exists($filepath))
+ {
+ include_once $filepath;
+ break;
}
}
}
@@ -226,4 +226,4 @@ class CI_Driver {
// END CI_Driver CLASS
/* End of file Driver.php */
-/* Location: ./system/libraries/Driver.php */ \ No newline at end of file
+/* Location: ./system/libraries/Driver.php */
diff --git a/system/libraries/Email.php b/system/libraries/Email.php
index 6c21f114d..3166e2f7e 100644
--- a/system/libraries/Email.php
+++ b/system/libraries/Email.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -31,25 +31,25 @@ class CI_Email {
var $useragent = "CodeIgniter";
var $mailpath = "/usr/sbin/sendmail"; // Sendmail path
var $protocol = "mail"; // mail/sendmail/smtp
- var $smtp_host = ""; // SMTP Server. Example: mail.earthlink.net
+ var $smtp_host = ""; // SMTP Server. Example: mail.earthlink.net
var $smtp_user = ""; // SMTP Username
var $smtp_pass = ""; // SMTP Password
var $smtp_port = "25"; // SMTP Port
var $smtp_timeout = 5; // SMTP Timeout in seconds
- var $wordwrap = TRUE; // TRUE/FALSE Turns word-wrap on/off
+ var $wordwrap = TRUE; // TRUE/FALSE Turns word-wrap on/off
var $wrapchars = "76"; // Number of characters to wrap at.
- var $mailtype = "text"; // text/html Defines email formatting
+ var $mailtype = "text"; // text/html Defines email formatting
var $charset = "utf-8"; // Default char set: iso-8859-1 or us-ascii
var $multipart = "mixed"; // "mixed" (in the body) or "related" (separate)
var $alt_message = ''; // Alternative message for HTML emails
- var $validate = FALSE; // TRUE/FALSE. Enables email validation
+ var $validate = FALSE; // TRUE/FALSE. Enables email validation
var $priority = "3"; // Default priority (1 - 5)
var $newline = "\n"; // Default newline. "\r\n" or "\n" (Use "\r\n" to comply with RFC 822)
- var $crlf = "\n"; // The RFC 2045 compliant CRLF for quoted-printable is "\r\n". Apparently some servers,
+ var $crlf = "\n"; // The RFC 2045 compliant CRLF for quoted-printable is "\r\n". Apparently some servers,
// even on the receiving end think they need to muck with CRLFs, so using "\n", while
// distasteful, is the only thing that seems to work for all environments.
- var $send_multipart = TRUE; // TRUE/FALSE - Yahoo does not like multipart alternative, so this is an override. Set to FALSE for Yahoo.
- var $bcc_batch_mode = FALSE; // TRUE/FALSE Turns on/off Bcc batch feature
+ var $send_multipart = TRUE; // TRUE/FALSE - Yahoo does not like multipart alternative, so this is an override. Set to FALSE for Yahoo.
+ var $bcc_batch_mode = FALSE; // TRUE/FALSE Turns on/off Bcc batch feature
var $bcc_batch_size = 200; // If bcc_batch_mode = TRUE, sets max number of Bccs in each batch
var $_safe_mode = FALSE;
var $_subject = "";
@@ -396,7 +396,7 @@ class CI_Email {
{
$this->_attach_name[] = $filename;
$this->_attach_type[] = $this->_mime_types(next(explode('.', basename($filename))));
- $this->_attach_disp[] = $disposition; // Can also be 'inline' Not sure if it matters
+ $this->_attach_disp[] = $disposition; // Can also be 'inline' Not sure if it matters
return $this;
}
@@ -600,7 +600,7 @@ class CI_Email {
$from = str_replace(">", "", $from);
$from = str_replace("<", "", $from);
- return "<".uniqid('').strstr($from, '@').">";
+ return "<".uniqid('').strstr($from, '@').">";
}
// --------------------------------------------------------------------
@@ -660,15 +660,15 @@ class CI_Email {
*/
private function _get_content_type()
{
- if ($this->mailtype == 'html' && count($this->_attach_name) == 0)
+ if ($this->mailtype == 'html' && count($this->_attach_name) == 0)
{
return 'html';
}
- elseif ($this->mailtype == 'html' && count($this->_attach_name) > 0)
+ elseif ($this->mailtype == 'html' && count($this->_attach_name) > 0)
{
return 'html-attach';
}
- elseif ($this->mailtype == 'text' && count($this->_attach_name) > 0)
+ elseif ($this->mailtype == 'text' && count($this->_attach_name) > 0)
{
return 'plain-attach';
}
@@ -722,7 +722,7 @@ class CI_Email {
{
if ( ! is_array($email))
{
- $this->_set_error_message('email_must_be_array');
+ $this->_set_error_message('lang:email_must_be_array');
return FALSE;
}
@@ -730,7 +730,7 @@ class CI_Email {
{
if ( ! $this->valid_email($val))
{
- $this->_set_error_message('email_invalid_address', $val);
+ $this->_set_error_message('lang:email_invalid_address', $val);
return FALSE;
}
}
@@ -881,7 +881,7 @@ class CI_Email {
// Use PHP's native public function to do the initial wordwrap.
// We set the cut flag to FALSE so that any individual words that are
- // too long get left alone. In the next step we'll deal with them.
+ // too long get left alone. In the next step we'll deal with them.
$str = wordwrap($str, $charlim, "\n", FALSE);
// Split the string into individual lines of text and cycle through them
@@ -999,7 +999,7 @@ class CI_Email {
*/
private function _build_message()
{
- if ($this->wordwrap === TRUE AND $this->mailtype != 'html')
+ if ($this->wordwrap === TRUE AND $this->mailtype != 'html')
{
$this->_body = $this->word_wrap($this->_body);
}
@@ -1131,11 +1131,11 @@ class CI_Email {
if ( ! file_exists($filename))
{
- $this->_set_error_message('email_attachment_missing', $filename);
+ $this->_set_error_message('lang:email_attachment_missing', $filename);
return FALSE;
}
- $h = "--".$this->_atc_boundary.$this->newline;
+ $h = "--".$this->_atc_boundary.$this->newline;
$h .= "Content-type: ".$ctype."; ";
$h .= "name=\"".$basename."\"".$this->newline;
$h .= "Content-Disposition: ".$this->_attach_disp[$i].";".$this->newline;
@@ -1146,7 +1146,7 @@ class CI_Email {
if ( ! $fp = fopen($filename, FOPEN_READ))
{
- $this->_set_error_message('email_attachment_unreadable', $filename);
+ $this->_set_error_message('lang:email_attachment_unreadable', $filename);
return FALSE;
}
@@ -1237,7 +1237,7 @@ class CI_Email {
// encode = signs
if ($ascii == '61')
{
- $char = $escape.strtoupper(sprintf('%02s', dechex($ascii))); // =3D
+ $char = $escape.strtoupper(sprintf('%02s', dechex($ascii))); // =3D
}
// If we're at the character limit, add the line to the output,
@@ -1267,7 +1267,7 @@ class CI_Email {
/**
* Prep Q Encoding
*
- * Performs "Q Encoding" on a string for use in email headers. It's related
+ * Performs "Q Encoding" on a string for use in email headers. It's related
* but not identical to quoted-printable, so it has its own method
*
* @access public
@@ -1349,17 +1349,17 @@ class CI_Email {
$this->reply_to($this->_headers['From']);
}
- if (( ! isset($this->_recipients) AND ! isset($this->_headers['To'])) AND
+ if (( ! isset($this->_recipients) AND ! isset($this->_headers['To'])) AND
( ! isset($this->_bcc_array) AND ! isset($this->_headers['Bcc'])) AND
( ! isset($this->_headers['Cc'])))
{
- $this->_set_error_message('email_no_recipients');
+ $this->_set_error_message('lang:email_no_recipients');
return FALSE;
}
$this->_build_headers();
- if ($this->bcc_batch_mode AND count($this->_bcc_array) > 0)
+ if ($this->bcc_batch_mode AND count($this->_bcc_array) > 0)
{
if (count($this->_bcc_array) > $this->bcc_batch_size)
return $this->batch_bcc_send();
@@ -1380,7 +1380,7 @@ class CI_Email {
// --------------------------------------------------------------------
/**
- * Batch Bcc Send. Sends groups of BCCs in batches
+ * Batch Bcc Send. Sends groups of BCCs in batches
*
* @access public
* @return bool
@@ -1484,7 +1484,7 @@ class CI_Email {
if ( ! $this->_send_with_mail())
{
- $this->_set_error_message('email_send_failure_phpmail');
+ $this->_set_error_message('lang:email_send_failure_phpmail');
return FALSE;
}
break;
@@ -1492,7 +1492,7 @@ class CI_Email {
if ( ! $this->_send_with_sendmail())
{
- $this->_set_error_message('email_send_failure_sendmail');
+ $this->_set_error_message('lang:email_send_failure_sendmail');
return FALSE;
}
break;
@@ -1500,14 +1500,14 @@ class CI_Email {
if ( ! $this->_send_with_smtp())
{
- $this->_set_error_message('email_send_failure_smtp');
+ $this->_set_error_message('lang:email_send_failure_smtp');
return FALSE;
}
break;
}
- $this->_set_error_message('email_sent', $this->_get_protocol());
+ $this->_set_error_message('lang:email_sent', $this->_get_protocol());
return TRUE;
}
@@ -1578,8 +1578,8 @@ class CI_Email {
if ($status != 0)
{
- $this->_set_error_message('email_exit_status', $status);
- $this->_set_error_message('email_no_socket');
+ $this->_set_error_message('lang:email_exit_status', $status);
+ $this->_set_error_message('lang:email_no_socket');
return FALSE;
}
@@ -1598,7 +1598,7 @@ class CI_Email {
{
if ($this->smtp_host == '')
{
- $this->_set_error_message('email_no_hostname');
+ $this->_set_error_message('lang:email_no_hostname');
return FALSE;
}
@@ -1647,7 +1647,7 @@ class CI_Email {
if (strncmp($reply, '250', 3) != 0)
{
- $this->_set_error_message('email_smtp_error', $reply);
+ $this->_set_error_message('lang:email_smtp_error', $reply);
return FALSE;
}
@@ -1674,7 +1674,7 @@ class CI_Email {
if ( ! is_resource($this->_smtp_connect))
{
- $this->_set_error_message('email_smtp_error', $errno." ".$errstr);
+ $this->_set_error_message('lang:email_smtp_error', $errno." ".$errstr);
return FALSE;
}
@@ -1737,7 +1737,7 @@ class CI_Email {
if (substr($reply, 0, 3) != $resp)
{
- $this->_set_error_message('email_smtp_error', $reply);
+ $this->_set_error_message('lang:email_smtp_error', $reply);
return FALSE;
}
@@ -1752,7 +1752,7 @@ class CI_Email {
// --------------------------------------------------------------------
/**
- * SMTP Authenticate
+ * SMTP Authenticate
*
* @access private
* @return bool
@@ -1764,9 +1764,9 @@ class CI_Email {
return TRUE;
}
- if ($this->smtp_user == "" AND $this->smtp_pass == "")
+ if ($this->smtp_user == "" AND $this->smtp_pass == "")
{
- $this->_set_error_message('email_no_smtp_unpw');
+ $this->_set_error_message('lang:email_no_smtp_unpw');
return FALSE;
}
@@ -1776,7 +1776,7 @@ class CI_Email {
if (strncmp($reply, '334', 3) != 0)
{
- $this->_set_error_message('email_failed_smtp_login', $reply);
+ $this->_set_error_message('lang:email_failed_smtp_login', $reply);
return FALSE;
}
@@ -1786,7 +1786,7 @@ class CI_Email {
if (strncmp($reply, '334', 3) != 0)
{
- $this->_set_error_message('email_smtp_auth_un', $reply);
+ $this->_set_error_message('lang:email_smtp_auth_un', $reply);
return FALSE;
}
@@ -1796,7 +1796,7 @@ class CI_Email {
if (strncmp($reply, '235', 3) != 0)
{
- $this->_set_error_message('email_smtp_auth_pw', $reply);
+ $this->_set_error_message('lang:email_smtp_auth_pw', $reply);
return FALSE;
}
@@ -1815,7 +1815,7 @@ class CI_Email {
{
if ( ! fwrite($this->_smtp_connect, $data . $this->newline))
{
- $this->_set_error_message('email_smtp_data_failure', $data);
+ $this->_set_error_message('lang:email_smtp_data_failure', $data);
return FALSE;
}
else
@@ -1942,7 +1942,7 @@ class CI_Email {
$CI =& get_instance();
$CI->lang->load('email');
- if (FALSE === ($line = $CI->lang->line($msg)))
+ if (substr($msg, 0, 5) != 'lang:' || FALSE === ($line = $CI->lang->line(substr($msg, 5))))
{
$this->_debug_msg[] = str_replace('%s', $val, $msg)."<br />";
}
@@ -2059,4 +2059,4 @@ class CI_Email {
// END CI_Email class
/* End of file Email.php */
-/* Location: ./system/libraries/Email.php */ \ No newline at end of file
+/* Location: ./system/libraries/Email.php */
diff --git a/system/libraries/Encrypt.php b/system/libraries/Encrypt.php
index e5f65878a..2f7db6623 100644
--- a/system/libraries/Encrypt.php
+++ b/system/libraries/Encrypt.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -524,7 +524,7 @@ class CI_Encrypt {
{
if ( ! function_exists('mhash'))
{
- require_once(BASEPATH.'libraries/Sha1'.EXT);
+ require_once(BASEPATH.'libraries/Sha1.php');
$SH = new CI_SHA;
return $SH->generate($str);
}
diff --git a/system/libraries/Form_validation.php b/system/libraries/Form_validation.php
index adfd17db1..d8bcbd62b 100644
--- a/system/libraries/Form_validation.php
+++ b/system/libraries/Form_validation.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -102,7 +102,7 @@ class CI_Form_validation {
}
// No fields? Nothing to do...
- if ( ! is_string($field) OR ! is_string($rules) OR $field == '')
+ if ( ! is_string($field) OR ! is_string($rules) OR $field == '')
{
return $this;
}
@@ -110,8 +110,8 @@ class CI_Form_validation {
// If the field label wasn't passed we use the field name
$label = ($label == '') ? $field : $label;
- // Is the field name an array? We test for the existence of a bracket "[" in
- // the field name to determine this. If it is an array, we break it apart
+ // Is the field name an array? We test for the existence of a bracket "[" in
+ // the field name to determine this. If it is an array, we break it apart
// into its components so that we can fetch the corresponding POST data later
if (strpos($field, '[') !== FALSE AND preg_match_all('/\[(.*?)\]/', $field, $matches))
{
@@ -155,8 +155,8 @@ class CI_Form_validation {
/**
* 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.
+ * Lets users set their own error messages on the fly. Note: The key
+ * name has to match the function name that it corresponds to.
*
* @access public
* @param string
@@ -281,7 +281,7 @@ class CI_Form_validation {
*/
function run($group = '')
{
- // Do we even have any data to process? Mm?
+ // Do we even have any data to process? Mm?
if (count($_POST) == 0)
{
return FALSE;
@@ -291,7 +291,7 @@ class CI_Form_validation {
// If not, we look to see if they were assigned via a config file
if (count($this->_field_data) == 0)
{
- // No validation rules? We're done...
+ // No validation rules? We're done...
if (count($this->_config_rules) == 0)
{
return FALSE;
@@ -628,6 +628,10 @@ class CI_Form_validation {
$this->_field_data[$row['field']]['postdata'] = (is_bool($result)) ? $postdata : $result;
}
}
+ else
+ {
+ log_message('debug', "Unable to find validation rule: ".$rule);
+ }
continue;
}
@@ -644,7 +648,7 @@ class CI_Form_validation {
}
}
- // Did the rule test negatively? If so, grab the error.
+ // Did the rule test negatively? If so, grab the error.
if ($result === FALSE)
{
if ( ! isset($this->_error_messages[$rule]))
@@ -660,7 +664,7 @@ class CI_Form_validation {
}
// Is the parameter we are inserting into the error message the name
- // of another field? If so we need to grab its "field label"
+ // of another field? If so we need to grab its "field label"
if (isset($this->_field_data[$param]) AND isset($this->_field_data[$param]['label']))
{
$param = $this->_translate_fieldname($this->_field_data[$param]['label']);
@@ -700,7 +704,7 @@ class CI_Form_validation {
// Grab the variable
$line = substr($fieldname, 5);
- // Were we able to translate the field name? If not we use $line
+ // Were we able to translate the field name? If not we use $line
if (FALSE === ($fieldname = $this->CI->lang->line($line)))
{
return $line;
@@ -731,7 +735,7 @@ class CI_Form_validation {
}
// If the data is an array output them one at a time.
- // E.g: form_input('name[]', set_value('name[]');
+ // E.g: form_input('name[]', set_value('name[]');
if (is_array($this->_field_data[$field]['postdata']))
{
return array_shift($this->_field_data[$field]['postdata']);
@@ -910,7 +914,7 @@ class CI_Form_validation {
return FALSE;
}
- return TRUE;
+ return TRUE;
}
// --------------------------------------------------------------------
@@ -1203,7 +1207,7 @@ class CI_Form_validation {
// --------------------------------------------------------------------
/**
- * Is a Natural number (0,1,2,3, etc.)
+ * Is a Natural number (0,1,2,3, etc.)
*
* @access public
* @param string
@@ -1217,7 +1221,7 @@ class CI_Form_validation {
// --------------------------------------------------------------------
/**
- * Is a Natural number, but not a zero (1,2,3, etc.)
+ * Is a Natural number, but not a zero (1,2,3, etc.)
*
* @access public
* @param string
@@ -1336,11 +1340,6 @@ class CI_Form_validation {
*/
function xss_clean($str)
{
- if ( ! isset($this->CI->security))
- {
- $this->CI->load->library('security');
- }
-
return $this->CI->security->xss_clean($str);
}
@@ -1355,11 +1354,11 @@ class CI_Form_validation {
*/
function encode_php_tags($str)
{
- return str_replace(array('<?php', '<?PHP', '<?', '?>'), array('&lt;?php', '&lt;?PHP', '&lt;?', '?&gt;'), $str);
+ return str_replace(array('<?php', '<?PHP', '<?', '?>'), array('&lt;?php', '&lt;?PHP', '&lt;?', '?&gt;'), $str);
}
}
// END Form Validation Class
/* End of file Form_validation.php */
-/* Location: ./system/libraries/Form_validation.php */ \ No newline at end of file
+/* Location: ./system/libraries/Form_validation.php */
diff --git a/system/libraries/Ftp.php b/system/libraries/Ftp.php
index d7a8b3b02..859cc9c30 100644
--- a/system/libraries/Ftp.php
+++ b/system/libraries/Ftp.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -158,7 +158,7 @@ class CI_FTP {
*
* The second parameter lets us momentarily turn off debugging so that
* this function can be used to test for the existence of a folder
- * without throwing an error. There's no FTP equivalent to is_dir()
+ * without throwing an error. There's no FTP equivalent to is_dir()
* so we do it by trying to change to a particular directory.
* Internally, this parameter is only used by the "mirror" function below.
*
@@ -417,7 +417,7 @@ class CI_FTP {
}
// Add a trailing slash to the file path if needed
- $filepath = preg_replace("/(.+?)\/*$/", "\\1/", $filepath);
+ $filepath = preg_replace("/(.+?)\/*$/", "\\1/", $filepath);
$list = $this->list_files($filepath);
@@ -513,7 +513,7 @@ class CI_FTP {
* Read a directory and recreate it remotely
*
* This function recursively reads a folder and everything it contains (including
- * sub-folders) and creates a mirror via FTP based on it. Whatever the directory structure
+ * sub-folders) and creates a mirror via FTP based on it. Whatever the directory structure
* of the original file path will be recreated on the server.
*
* @access public
diff --git a/system/libraries/Image_lib.php b/system/libraries/Image_lib.php
index 8902f524d..099a238dd 100644
--- a/system/libraries/Image_lib.php
+++ b/system/libraries/Image_lib.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -26,7 +26,7 @@
*/
class CI_Image_lib {
- var $image_library = 'gd2'; // Can be: imagemagick, netpbm, gd, gd2
+ var $image_library = 'gd2'; // Can be: imagemagick, netpbm, gd, gd2
var $library_path = '';
var $dynamic_output = FALSE; // Whether to send to browser or write to disk
var $source_image = '';
@@ -37,28 +37,28 @@ class CI_Image_lib {
var $create_thumb = FALSE;
var $thumb_marker = '_thumb';
var $maintain_ratio = TRUE; // Whether to maintain aspect ratio when resizing or use hard values
- var $master_dim = 'auto'; // auto, height, or width. Determines what to use as the master dimension
+ var $master_dim = 'auto'; // auto, height, or width. Determines what to use as the master dimension
var $rotation_angle = '';
var $x_axis = '';
var $y_axis = '';
// Watermark Vars
var $wm_text = ''; // Watermark text if graphic is not used
- var $wm_type = 'text'; // Type of watermarking. Options: text/overlay
+ var $wm_type = 'text'; // Type of watermarking. Options: text/overlay
var $wm_x_transp = 4;
var $wm_y_transp = 4;
var $wm_overlay_path = ''; // Watermark image path
var $wm_font_path = ''; // TT font
var $wm_font_size = 17; // Font size (different versions of GD will either use points or pixels)
- var $wm_vrt_alignment = 'B'; // Vertical alignment: T M B
+ var $wm_vrt_alignment = 'B'; // Vertical alignment: T M B
var $wm_hor_alignment = 'C'; // Horizontal alignment: L R C
var $wm_padding = 0; // Padding around text
var $wm_hor_offset = 0; // Lets you push text to the right
- var $wm_vrt_offset = 0; // Lets you push text down
+ var $wm_vrt_offset = 0; // Lets you push text down
var $wm_font_color = '#ffffff'; // Text color
var $wm_shadow_color = ''; // Dropshadow color
var $wm_shadow_distance = 2; // Dropshadow distance
- var $wm_opacity = 50; // Image opacity: 1 - 100 Only works with image
+ var $wm_opacity = 50; // Image opacity: 1 - 100 Only works with image
// Private Vars
var $source_folder = '';
@@ -146,14 +146,14 @@ class CI_Image_lib {
if ($this->source_image == '')
{
$this->set_error('imglib_source_image_required');
- return FALSE;
+ return FALSE;
}
/*
* Is getimagesize() Available?
*
* We use it to determine the image properties (width/height).
- * Note: We need to figure out how to determine image
+ * Note: We need to figure out how to determine image
* properties using ImageMagick and NetPBM
*
*/
@@ -189,7 +189,7 @@ class CI_Image_lib {
// Set the Image Properties
if ( ! $this->get_image_properties($this->source_folder.$this->source_image))
{
- return FALSE;
+ return FALSE;
}
/*
@@ -197,7 +197,7 @@ class CI_Image_lib {
*
* If the user has set a "new_image" name it means
* we are making a copy of the source image. If not
- * it means we are altering the original. We'll
+ * it means we are altering the original. We'll
* set the destination filename and path accordingly.
*
*/
@@ -267,7 +267,7 @@ class CI_Image_lib {
*
* When creating thumbs or copies, the target width/height
* might not be in correct proportion with the source
- * image's width/height. We'll recalculate it here.
+ * image's width/height. We'll recalculate it here.
*
*/
if ($this->maintain_ratio === TRUE && ($this->width != '' AND $this->height != ''))
@@ -399,7 +399,7 @@ class CI_Image_lib {
if ($this->rotation_angle == '' OR ! in_array($this->rotation_angle, $degs))
{
$this->set_error('imglib_rotation_angle_required');
- return FALSE;
+ return FALSE;
}
// Reassign the width and height
@@ -469,8 +469,8 @@ class CI_Image_lib {
// Let's set up our values based on the action
if ($action == 'crop')
{
- // Reassign the source width/height if cropping
- $this->orig_width = $this->width;
+ // Reassign the source width/height if cropping
+ $this->orig_width = $this->width;
$this->orig_height = $this->height;
// GD 2.0 has a cropping bug so we'll test for it
@@ -487,19 +487,19 @@ class CI_Image_lib {
$this->y_axis = 0;
}
- // Create the image handle
+ // Create the image handle
if ( ! ($src_img = $this->image_create_gd()))
{
return FALSE;
}
- // Create The Image
+ // Create The Image
//
- // old conditional which users report cause problems with shared GD libs who report themselves as "2.0 or greater"
- // it appears that this is no longer the issue that it was in 2004, so we've removed it, retaining it in the comment
- // below should that ever prove inaccurate.
+ // old conditional which users report cause problems with shared GD libs who report themselves as "2.0 or greater"
+ // it appears that this is no longer the issue that it was in 2004, so we've removed it, retaining it in the comment
+ // below should that ever prove inaccurate.
//
- // if ($this->image_library == 'gd2' AND function_exists('imagecreatetruecolor') AND $v2_override == FALSE)
+ // if ($this->image_library == 'gd2' AND function_exists('imagecreatetruecolor') AND $v2_override == FALSE)
if ($this->image_library == 'gd2' AND function_exists('imagecreatetruecolor'))
{
$create = 'imagecreatetruecolor';
@@ -521,7 +521,7 @@ class CI_Image_lib {
$copy($dst_img, $src_img, 0, 0, $this->x_axis, $this->y_axis, $this->width, $this->height, $this->orig_width, $this->orig_height);
- // Show the image
+ // Show the image
if ($this->dynamic_output == TRUE)
{
$this->image_display_gd($dst_img);
@@ -535,7 +535,7 @@ class CI_Image_lib {
}
}
- // Kill the file handles
+ // Kill the file handles
imagedestroy($dst_img);
imagedestroy($src_img);
@@ -558,7 +558,7 @@ class CI_Image_lib {
*/
function image_process_imagemagick($action = 'resize')
{
- // Do we have a vaild library path?
+ // Do we have a vaild library path?
if ($this->library_path == '')
{
$this->set_error('imglib_libpath_invalid');
@@ -593,7 +593,7 @@ class CI_Image_lib {
$cmd .= " ".$angle." \"$this->full_src_path\" \"$this->full_dst_path\" 2>&1";
}
- else // Resize
+ else // Resize
{
$cmd .= " -resize ".$this->width."x".$this->height." \"$this->full_src_path\" \"$this->full_dst_path\" 2>&1";
}
@@ -634,7 +634,7 @@ class CI_Image_lib {
return FALSE;
}
- // Build the resizing command
+ // Build the resizing command
switch ($this->image_type)
{
case 1 :
@@ -684,7 +684,7 @@ class CI_Image_lib {
@exec($cmd, $output, $retval);
- // Did it work?
+ // Did it work?
if ($retval > 0)
{
$this->set_error('imglib_image_process_failed');
@@ -711,7 +711,7 @@ class CI_Image_lib {
*/
function image_rotate_gd()
{
- // Create the image handle
+ // Create the image handle
if ( ! ($src_img = $this->image_create_gd()))
{
return FALSE;
@@ -724,10 +724,10 @@ class CI_Image_lib {
$white = imagecolorallocate($src_img, 255, 255, 255);
- // Rotate it!
+ // Rotate it!
$dst_img = imagerotate($src_img, $this->rotation_angle, $white);
- // Save the Image
+ // Save the Image
if ($this->dynamic_output == TRUE)
{
$this->image_display_gd($dst_img);
@@ -741,7 +741,7 @@ class CI_Image_lib {
}
}
- // Kill the file handles
+ // Kill the file handles
imagedestroy($dst_img);
imagedestroy($src_img);
@@ -769,14 +769,14 @@ class CI_Image_lib {
return FALSE;
}
- $width = $this->orig_width;
+ $width = $this->orig_width;
$height = $this->orig_height;
if ($this->rotation_angle == 'hor')
{
for ($i = 0; $i < $height; $i++)
{
- $left = 0;
+ $left = 0;
$right = $width-1;
while ($left < $right)
@@ -813,7 +813,7 @@ class CI_Image_lib {
}
}
- // Show the image
+ // Show the image
if ($this->dynamic_output == TRUE)
{
$this->image_display_gd($src_img);
@@ -827,7 +827,7 @@ class CI_Image_lib {
}
}
- // Kill the file handles
+ // Kill the file handles
imagedestroy($src_img);
// Set the file to 777
@@ -876,24 +876,24 @@ class CI_Image_lib {
return FALSE;
}
- // Fetch source image properties
+ // Fetch source image properties
$this->get_image_properties();
- // Fetch watermark image properties
+ // Fetch watermark image properties
$props = $this->get_image_properties($this->wm_overlay_path, TRUE);
$wm_img_type = $props['image_type'];
$wm_width = $props['width'];
$wm_height = $props['height'];
- // Create two image resources
- $wm_img = $this->image_create_gd($this->wm_overlay_path, $wm_img_type);
+ // Create two image resources
+ $wm_img = $this->image_create_gd($this->wm_overlay_path, $wm_img_type);
$src_img = $this->image_create_gd($this->full_src_path);
// Reverse the offset if necessary
// When the image is positioned at the bottom
// we don't want the vertical offset to push it
- // further down. We want the reverse, so we'll
- // invert the offset. Same with the horizontal
+ // further down. We want the reverse, so we'll
+ // invert the offset. Same with the horizontal
// offset when the image is at the right
$this->wm_vrt_alignment = strtoupper(substr($this->wm_vrt_alignment, 0, 1));
@@ -905,11 +905,11 @@ class CI_Image_lib {
if ($this->wm_hor_alignment == 'R')
$this->wm_hor_offset = $this->wm_hor_offset * -1;
- // Set the base x and y axis values
+ // Set the base x and y axis values
$x_axis = $this->wm_hor_offset + $this->wm_padding;
$y_axis = $this->wm_vrt_offset + $this->wm_padding;
- // Set the vertical position
+ // Set the vertical position
switch ($this->wm_vrt_alignment)
{
case 'T':
@@ -920,7 +920,7 @@ class CI_Image_lib {
break;
}
- // Set the horizontal position
+ // Set the horizontal position
switch ($this->wm_hor_alignment)
{
case 'L':
@@ -931,7 +931,7 @@ class CI_Image_lib {
break;
}
- // Build the finalized image
+ // Build the finalized image
if ($wm_img_type == 3 AND function_exists('imagealphablending'))
{
@imagealphablending($src_img, TRUE);
@@ -954,7 +954,7 @@ class CI_Image_lib {
imagecopymerge($src_img, $wm_img, $x_axis, $y_axis, 0, 0, $wm_width, $wm_height, $this->wm_opacity);
}
- // Output the image
+ // Output the image
if ($this->dynamic_output == TRUE)
{
$this->image_display_gd($src_img);
@@ -994,7 +994,7 @@ class CI_Image_lib {
return FALSE;
}
- // Fetch source image properties
+ // Fetch source image properties
$this->get_image_properties();
// Set RGB values for text and shadow
@@ -1015,8 +1015,8 @@ class CI_Image_lib {
// Reverse the vertical offset
// When the image is positioned at the bottom
// we don't want the vertical offset to push it
- // further down. We want the reverse, so we'll
- // invert the offset. Note: The horizontal
+ // further down. We want the reverse, so we'll
+ // invert the offset. Note: The horizontal
// offset flips itself automatically
if ($this->wm_vrt_alignment == 'B')
@@ -1033,13 +1033,13 @@ class CI_Image_lib {
if ($this->wm_font_size == '')
$this->wm_font_size = '17';
- $fontwidth = $this->wm_font_size-($this->wm_font_size/4);
+ $fontwidth = $this->wm_font_size-($this->wm_font_size/4);
$fontheight = $this->wm_font_size;
$this->wm_vrt_offset += $this->wm_font_size;
}
else
{
- $fontwidth = imagefontwidth($this->wm_font_size);
+ $fontwidth = imagefontwidth($this->wm_font_size);
$fontheight = imagefontheight($this->wm_font_size);
}
@@ -1080,11 +1080,11 @@ class CI_Image_lib {
case "C":
if ($this->wm_use_drop_shadow)
$x_shad += floor(($this->orig_width - $fontwidth*strlen($this->wm_text))/2);
- $x_axis += floor(($this->orig_width -$fontwidth*strlen($this->wm_text))/2);
+ $x_axis += floor(($this->orig_width -$fontwidth*strlen($this->wm_text))/2);
break;
}
- // Add the text to the source image
+ // Add the text to the source image
if ($this->wm_use_truetype)
{
if ($this->wm_use_drop_shadow)
@@ -1098,7 +1098,7 @@ class CI_Image_lib {
imagestring($src_img, $this->wm_font_size, $x_axis, $y_axis, $this->wm_text, $txt_color);
}
- // Output the final image
+ // Output the final image
if ($this->dynamic_output == TRUE)
{
$this->image_display_gd($src_img);
@@ -1366,7 +1366,7 @@ class CI_Image_lib {
* Size calculator
*
* This function takes a known width x height and
- * recalculates it to a new size. Only one
+ * recalculates it to a new size. Only one
* new variable needs to be known
*
* $props = array(
@@ -1374,7 +1374,7 @@ class CI_Image_lib {
* 'height' => $height,
* 'new_width' => 40,
* 'new_height' => ''
- * );
+ * );
*
* @access public
* @param array
@@ -1418,10 +1418,10 @@ class CI_Image_lib {
* Explode source_image
*
* This is a helper function that extracts the extension
- * from the source_image. This function lets us deal with
- * source_images with multiple periods, like: my.cool.jpg
+ * from the source_image. This function lets us deal with
+ * source_images with multiple periods, like: my.cool.jpg
* It returns an associative array with two elements:
- * $array['ext'] = '.jpg';
+ * $array['ext'] = '.jpg';
* $array['name'] = 'my.cool';
*
* @access public
diff --git a/system/libraries/Javascript.php b/system/libraries/Javascript.php
index 167859abd..9e42a4385 100644
--- a/system/libraries/Javascript.php
+++ b/system/libraries/Javascript.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -49,10 +49,10 @@ class CI_Javascript {
// make js to refer to current library
$this->js =& $this->CI->$js_library_driver;
- log_message('debug', "Javascript Class Initialized and loaded. Driver used: $js_library_driver");
+ log_message('debug', "Javascript Class Initialized and loaded. Driver used: $js_library_driver");
}
- // --------------------------------------------------------------------
+ // --------------------------------------------------------------------
// Event Code
// --------------------------------------------------------------------
@@ -378,7 +378,7 @@ class CI_Javascript {
return $this->js->_unload($element, $js);
}
- // --------------------------------------------------------------------
+ // --------------------------------------------------------------------
// Effects
// --------------------------------------------------------------------
@@ -685,7 +685,7 @@ class CI_Javascript {
return $str;
}
-
+
// --------------------------------------------------------------------
/**
@@ -855,7 +855,7 @@ class CI_Javascript {
}
elseif (is_string($result) OR $is_key)
{
- return '"'.str_replace(array('\\', "\t", "\n", "\r", '"'), array('\\\\', '\\t', '\\n', "\\r", '\"'), $result).'"';
+ return '"'.str_replace(array('\\', "\t", "\n", "\r", '"', '/'), array('\\\\', '\\t', '\\n', "\\r", '\"', '\/'), $result).'"';
}
elseif (is_scalar($result))
{
diff --git a/system/libraries/Log.php b/system/libraries/Log.php
index fb2c5a49b..2505fc678 100644
--- a/system/libraries/Log.php
+++ b/system/libraries/Log.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -30,7 +30,7 @@ class CI_Log {
protected $_threshold = 1;
protected $_date_fmt = 'Y-m-d H:i:s';
protected $_enabled = TRUE;
- protected $_levels = array('ERROR' => '1', 'DEBUG' => '2', 'INFO' => '3', 'ALL' => '4');
+ protected $_levels = array('ERROR' => '1', 'DEBUG' => '2', 'INFO' => '3', 'ALL' => '4');
/**
* Constructor
@@ -83,12 +83,12 @@ class CI_Log {
return FALSE;
}
- $filepath = $this->_log_path.'log-'.date('Y-m-d').EXT;
- $message = '';
+ $filepath = $this->_log_path.'log-'.date('Y-m-d').'.php';
+ $message = '';
if ( ! file_exists($filepath))
{
- $message .= "<"."?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); ?".">\n\n";
+ $message .= "<"."?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); ?".">\n\n";
}
if ( ! $fp = @fopen($filepath, FOPEN_WRITE_CREATE))
diff --git a/system/libraries/Pagination.php b/system/libraries/Pagination.php
index 1113f862f..d9c22d501 100644
--- a/system/libraries/Pagination.php
+++ b/system/libraries/Pagination.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -30,10 +30,10 @@ class CI_Pagination {
var $prefix = ''; // A custom prefix added to the path.
var $suffix = ''; // A custom suffix added to the path.
- var $total_rows = ''; // Total number of items (database results)
+ var $total_rows = 0; // Total number of items (database results)
var $per_page = 10; // Max number of items you want shown per page
- var $num_links = 2; // Number of "digit" links to show before/after the currently viewed page
- var $cur_page = 0; // The current page being viewed
+ var $num_links = 2; // Number of "digit" links to show before/after the currently viewed page
+ var $cur_page = 0; // The current page being viewed
var $first_link = '&lsaquo; First';
var $next_link = '&gt;';
var $prev_link = '&lt;';
@@ -177,9 +177,9 @@ class CI_Pagination {
// Calculate the start and end numbers. These determine
// which number to start and end the digit links with
$start = (($this->cur_page - $this->num_links) > 0) ? $this->cur_page - ($this->num_links - 1) : 1;
- $end = (($this->cur_page + $this->num_links) < $num_pages) ? $this->cur_page + $this->num_links : $num_pages;
+ $end = (($this->cur_page + $this->num_links) < $num_pages) ? $this->cur_page + $this->num_links : $num_pages;
- // Is pagination being used over GET or POST? If get, add a per_page query
+ // Is pagination being used over GET or POST? If get, add a per_page query
// string. If post, add a trailing slash to the base URL if needed
if ($CI->config->item('enable_query_strings') === TRUE OR $this->page_query_string === TRUE)
{
@@ -194,14 +194,14 @@ class CI_Pagination {
$output = '';
// Render the "First" link
- if ($this->first_link !== FALSE AND $this->cur_page > ($this->num_links + 1))
+ if ($this->first_link !== FALSE AND $this->cur_page > ($this->num_links + 1))
{
$first_url = ($this->first_url == '') ? $this->base_url : $this->first_url;
$output .= $this->first_tag_open.'<a '.$this->anchor_class.'href="'.$first_url.'">'.$this->first_link.'</a>'.$this->first_tag_close;
}
// Render the "previous" link
- if ($this->prev_link !== FALSE AND $this->cur_page != 1)
+ if ($this->prev_link !== FALSE AND $this->cur_page != 1)
{
$i = $uri_page_number - $this->per_page;
@@ -263,7 +263,7 @@ class CI_Pagination {
$output .= $this->last_tag_open.'<a '.$this->anchor_class.'href="'.$this->base_url.$this->prefix.$i.$this->suffix.'">'.$this->last_link.'</a>'.$this->last_tag_close;
}
- // Kill double slashes. Note: Sometimes we can end up with a double slash
+ // Kill double slashes. Note: Sometimes we can end up with a double slash
// in the penultimate link so we'll kill all double slashes.
$output = preg_replace("#([^:])//+#", "\\1/", $output);
diff --git a/system/libraries/Parser.php b/system/libraries/Parser.php
index d223da020..f48f2a7e5 100644
--- a/system/libraries/Parser.php
+++ b/system/libraries/Parser.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -31,7 +31,7 @@ class CI_Parser {
var $object;
/**
- * Parse a template
+ * Parse a template
*
* Parses pseudo-variables contained in the specified template view,
* replacing them with the data in the second param
@@ -53,7 +53,7 @@ class CI_Parser {
// --------------------------------------------------------------------
/**
- * Parse a String
+ * Parse a String
*
* Parses pseudo-variables contained in the specified string,
* replacing them with the data in the second param
@@ -72,7 +72,7 @@ class CI_Parser {
// --------------------------------------------------------------------
/**
- * Parse a template
+ * Parse a template
*
* Parses pseudo-variables contained in the specified template,
* replacing them with the data in the second param
@@ -114,7 +114,7 @@ class CI_Parser {
// --------------------------------------------------------------------
/**
- * Set the left/right variable delimiters
+ * Set the left/right variable delimiters
*
* @access public
* @param string
@@ -130,7 +130,7 @@ class CI_Parser {
// --------------------------------------------------------------------
/**
- * Parse a single key/value
+ * Parse a single key/value
*
* @access private
* @param string
@@ -146,9 +146,9 @@ class CI_Parser {
// --------------------------------------------------------------------
/**
- * Parse a tag pair
+ * Parse a tag pair
*
- * Parses tag pairs: {some_tag} string... {/some_tag}
+ * Parses tag pairs: {some_tag} string... {/some_tag}
*
* @access private
* @param string
@@ -188,7 +188,7 @@ class CI_Parser {
// --------------------------------------------------------------------
/**
- * Matches a variable pair
+ * Matches a variable pair
*
* @access private
* @param string
diff --git a/system/libraries/Profiler.php b/system/libraries/Profiler.php
index 8a1f18ced..96ab15789 100644
--- a/system/libraries/Profiler.php
+++ b/system/libraries/Profiler.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -32,8 +32,6 @@
*/
class CI_Profiler {
- var $CI;
-
protected $_available_sections = array(
'benchmarks',
'get',
@@ -43,14 +41,27 @@ class CI_Profiler {
'controller_info',
'queries',
'http_headers',
+ 'session_data',
'config'
);
+ protected $_query_toggle_count = 25;
+
+ protected $CI;
+
+ // --------------------------------------------------------------------
+
public function __construct($config = array())
{
$this->CI =& get_instance();
$this->CI->load->language('profiler');
+ if (isset($config['query_toggle_count']))
+ {
+ $this->_query_toggle_count = (int) $config['query_toggle_count'];
+ unset($config['query_toggle_count']);
+ }
+
// default all sections to display
foreach ($this->_available_sections as $section)
{
@@ -91,7 +102,7 @@ class CI_Profiler {
*
* This function cycles through the entire array of mark points and
* matches any two points that are named identically (ending in "_start"
- * and "_end" respectively). It then compiles the execution times for
+ * and "_end" respectively). It then compiles the execution times for
* all points and returns it as an array
*
* @return array
@@ -114,9 +125,9 @@ class CI_Profiler {
// Build a table containing the profile data.
// Note: At some point we should turn this into a template that can
- // be modified. We also might want to make this data available to be logged
+ // be modified. We also might want to make this data available to be logged
- $output = "\n\n";
+ $output = "\n\n";
$output .= '<fieldset id="ci_profiler_benchmarks" style="border:1px solid #900;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
$output .= "\n";
$output .= '<legend style="color:#900;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_benchmarks').'&nbsp;&nbsp;</legend>';
@@ -157,12 +168,12 @@ class CI_Profiler {
if (count($dbs) == 0)
{
- $output = "\n\n";
+ $output = "\n\n";
$output .= '<fieldset id="ci_profiler_queries" style="border:1px solid #0000FF;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
$output .= "\n";
$output .= '<legend style="color:#0000FF;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_queries').'&nbsp;&nbsp;</legend>';
$output .= "\n";
- $output .= "\n\n<table style='border:none; width:100%'>\n";
+ $output .= "\n\n<table style='border:none; width:100%;'>\n";
$output .="<tr><td style='width:100%;color:#0000FF;font-weight:normal;background-color:#eee;padding:5px'>".$this->CI->lang->line('profiler_no_db')."</td></tr>\n";
$output .= "</table>\n";
$output .= "</fieldset>";
@@ -176,15 +187,28 @@ class CI_Profiler {
// Key words we want bolded
$highlight = array('SELECT', 'DISTINCT', 'FROM', 'WHERE', 'AND', 'LEFT&nbsp;JOIN', 'ORDER&nbsp;BY', 'GROUP&nbsp;BY', 'LIMIT', 'INSERT', 'INTO', 'VALUES', 'UPDATE', 'OR&nbsp;', 'HAVING', 'OFFSET', 'NOT&nbsp;IN', 'IN', 'LIKE', 'NOT&nbsp;LIKE', 'COUNT', 'MAX', 'MIN', 'ON', 'AS', 'AVG', 'SUM', '(', ')');
- $output = "\n\n";
+ $output = "\n\n";
+
+ $count = 0;
foreach ($dbs as $db)
{
+ $count++;
+
+ $hide_queries = (count($db->queries) > $this->_query_toggle_count) ? ' display:none' : '';
+
+ $show_hide_js = '(<span style="cursor: pointer;" onclick="var s=document.getElementById(\'ci_profiler_queries_db_'.$count.'\').style;s.display=s.display==\'none\'?\'\':\'none\';this.innerHTML=this.innerHTML==\''.$this->CI->lang->line('profiler_section_hide').'\'?\''.$this->CI->lang->line('profiler_section_show').'\':\''.$this->CI->lang->line('profiler_section_hide').'\';">'.$this->CI->lang->line('profiler_section_hide').'</span>)';
+
+ if ($hide_queries != '')
+ {
+ $show_hide_js = '(<span style="cursor: pointer;" onclick="var s=document.getElementById(\'ci_profiler_queries_db_'.$count.'\').style;s.display=s.display==\'none\'?\'\':\'none\';this.innerHTML=this.innerHTML==\''.$this->CI->lang->line('profiler_section_show').'\'?\''.$this->CI->lang->line('profiler_section_hide').'\':\''.$this->CI->lang->line('profiler_section_show').'\';">'.$this->CI->lang->line('profiler_section_show').'</span>)';
+ }
+
$output .= '<fieldset style="border:1px solid #0000FF;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
$output .= "\n";
- $output .= '<legend style="color:#0000FF;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_database').':&nbsp; '.$db->database.'&nbsp;&nbsp;&nbsp;'.$this->CI->lang->line('profiler_queries').': '.count($db->queries).'&nbsp;&nbsp;&nbsp;</legend>';
+ $output .= '<legend style="color:#0000FF;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_database').':&nbsp; '.$db->database.'&nbsp;&nbsp;&nbsp;'.$this->CI->lang->line('profiler_queries').': '.count($db->queries).'&nbsp;&nbsp;'.$show_hide_js.'</legend>';
$output .= "\n";
- $output .= "\n\n<table style='width:100%;'>\n";
+ $output .= "\n\n<table style='width:100%;{$hide_queries}' id='ci_profiler_queries_db_{$count}'>\n";
if (count($db->queries) == 0)
{
@@ -225,7 +249,7 @@ class CI_Profiler {
*/
protected function _compile_get()
{
- $output = "\n\n";
+ $output = "\n\n";
$output .= '<fieldset id="ci_profiler_get" style="border:1px solid #cd6e00;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
$output .= "\n";
$output .= '<legend style="color:#cd6e00;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_get_data').'&nbsp;&nbsp;</legend>';
@@ -274,7 +298,7 @@ class CI_Profiler {
*/
protected function _compile_post()
{
- $output = "\n\n";
+ $output = "\n\n";
$output .= '<fieldset id="ci_profiler_post" style="border:1px solid #009900;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
$output .= "\n";
$output .= '<legend style="color:#009900;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_post_data').'&nbsp;&nbsp;</legend>';
@@ -323,7 +347,7 @@ class CI_Profiler {
*/
protected function _compile_uri_string()
{
- $output = "\n\n";
+ $output = "\n\n";
$output .= '<fieldset id="ci_profiler_uri_string" style="border:1px solid #000;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
$output .= "\n";
$output .= '<legend style="color:#000;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_uri_string').'&nbsp;&nbsp;</legend>';
@@ -352,7 +376,7 @@ class CI_Profiler {
*/
protected function _compile_controller_info()
{
- $output = "\n\n";
+ $output = "\n\n";
$output .= '<fieldset id="ci_profiler_controller_info" style="border:1px solid #995300;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
$output .= "\n";
$output .= '<legend style="color:#995300;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_controller_info').'&nbsp;&nbsp;</legend>';
@@ -376,7 +400,7 @@ class CI_Profiler {
*/
protected function _compile_memory_usage()
{
- $output = "\n\n";
+ $output = "\n\n";
$output .= '<fieldset id="ci_profiler_memory_usage" style="border:1px solid #5a0099;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
$output .= "\n";
$output .= '<legend style="color:#5a0099;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_memory_usage').'&nbsp;&nbsp;</legend>';
@@ -388,7 +412,7 @@ class CI_Profiler {
}
else
{
- $output .= "<div style='color:#5a0099;font-weight:normal;padding:4px 0 4px 0'>".$this->CI->lang->line('profiler_no_memory_usage')."</div>";
+ $output .= "<div style='color:#5a0099;font-weight:normal;padding:4px 0 4px 0'>".$this->CI->lang->line('profiler_no_memory')."</div>";
}
$output .= "</fieldset>";
@@ -407,13 +431,13 @@ class CI_Profiler {
*/
protected function _compile_http_headers()
{
- $output = "\n\n";
+ $output = "\n\n";
$output .= '<fieldset id="ci_profiler_http_headers" style="border:1px solid #000;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
$output .= "\n";
- $output .= '<legend style="color:#000;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_headers').'&nbsp;&nbsp;</legend>';
+ $output .= '<legend style="color:#000;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_headers').'&nbsp;&nbsp;(<span style="cursor: pointer;" onclick="var s=document.getElementById(\'ci_profiler_httpheaders_table\').style;s.display=s.display==\'none\'?\'\':\'none\';this.innerHTML=this.innerHTML==\''.$this->CI->lang->line('profiler_section_show').'\'?\''.$this->CI->lang->line('profiler_section_hide').'\':\''.$this->CI->lang->line('profiler_section_show').'\';">'.$this->CI->lang->line('profiler_section_show').'</span>)</legend>';
$output .= "\n";
- $output .= "\n\n<table style='width:100%'>\n";
+ $output .= "\n\n<table style='width:100%;display:none' id='ci_profiler_httpheaders_table'>\n";
foreach (array('HTTP_ACCEPT', 'HTTP_USER_AGENT', 'HTTP_CONNECTION', 'SERVER_PORT', 'SERVER_NAME', 'REMOTE_ADDR', 'SERVER_SOFTWARE', 'HTTP_ACCEPT_LANGUAGE', 'SCRIPT_NAME', 'REQUEST_METHOD',' HTTP_HOST', 'REMOTE_HOST', 'CONTENT_TYPE', 'SERVER_PROTOCOL', 'QUERY_STRING', 'HTTP_ACCEPT_ENCODING', 'HTTP_X_FORWARDED_FOR') as $header)
{
@@ -438,13 +462,13 @@ class CI_Profiler {
*/
protected function _compile_config()
{
- $output = "\n\n";
+ $output = "\n\n";
$output .= '<fieldset id="ci_profiler_config" style="border:1px solid #000;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
$output .= "\n";
- $output .= '<legend style="color:#000;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_config').'&nbsp;&nbsp;</legend>';
+ $output .= '<legend style="color:#000;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_config').'&nbsp;&nbsp;(<span style="cursor: pointer;" onclick="var s=document.getElementById(\'ci_profiler_config_table\').style;s.display=s.display==\'none\'?\'\':\'none\';this.innerHTML=this.innerHTML==\''.$this->CI->lang->line('profiler_section_show').'\'?\''.$this->CI->lang->line('profiler_section_hide').'\':\''.$this->CI->lang->line('profiler_section_show').'\';">'.$this->CI->lang->line('profiler_section_show').'</span>)</legend>';
$output .= "\n";
- $output .= "\n\n<table style='width:100%'>\n";
+ $output .= "\n\n<table style='width:100%; display:none' id='ci_profiler_config_table'>\n";
foreach ($this->CI->config->config as $config=>$val)
{
@@ -465,6 +489,39 @@ class CI_Profiler {
// --------------------------------------------------------------------
/**
+ * Compile session userdata
+ *
+ * @return string
+ */
+ private function _compile_session_data()
+ {
+ if ( ! isset($this->CI->session))
+ {
+ return;
+ }
+
+ $output = '<fieldset id="ci_profiler_csession" style="border:1px solid #000;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
+ $output .= '<legend style="color:#000;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_session_data').'&nbsp;&nbsp;(<span style="cursor: pointer;" onclick="var s=document.getElementById(\'ci_profiler_session_data\').style;s.display=s.display==\'none\'?\'\':\'none\';this.innerHTML=this.innerHTML==\''.$this->CI->lang->line('profiler_section_show').'\'?\''.$this->CI->lang->line('profiler_section_hide').'\':\''.$this->CI->lang->line('profiler_section_show').'\';">'.$this->CI->lang->line('profiler_section_show').'</span>)</legend>';
+ $output .= "<table style='width:100%;display:none' id='ci_profiler_session_data'>";
+
+ foreach ($this->CI->session->all_userdata() as $key => $val)
+ {
+ if (is_array($val))
+ {
+ $val = print_r($val, TRUE);
+ }
+
+ $output .= "<tr><td style='padding:5px; vertical-align: top;color:#900;background-color:#ddd;'>".$key."&nbsp;&nbsp;</td><td style='padding:5px; color:#000;background-color:#ddd;'>".htmlspecialchars($val)."</td></tr>\n";
+ }
+
+ $output .= '</table>';
+ $output .= "</fieldset>";
+ return $output;
+ }
+
+ // --------------------------------------------------------------------
+
+ /**
* Run the Profiler
*
* @return string
@@ -493,7 +550,6 @@ class CI_Profiler {
return $output;
}
-
}
// END CI_Profiler class
diff --git a/system/libraries/Session.php b/system/libraries/Session.php
index 182294059..76525dbb8 100644
--- a/system/libraries/Session.php
+++ b/system/libraries/Session.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -81,14 +81,14 @@ class CI_Session {
$this->CI->load->library('encrypt');
}
- // Are we using a database? If so, load it
+ // Are we using a database? If so, load it
if ($this->sess_use_database === TRUE AND $this->sess_table_name != '')
{
$this->CI->load->database();
}
- // Set the "now" time. Can either be GMT or server time, based on the
- // config prefs. We use this to set the "last activity" time
+ // Set the "now" time. Can either be GMT or server time, based on the
+ // config prefs. We use this to set the "last activity" time
$this->now = $this->_get_time();
// Set the session length. If the session expiration is
@@ -97,12 +97,12 @@ class CI_Session {
{
$this->sess_expiration = (60*60*24*365*2);
}
-
+
// Set the cookie name
$this->sess_cookie_name = $this->cookie_prefix.$this->sess_cookie_name;
// Run the Session routine. If a session doesn't exist we'll
- // create a new one. If it does, we'll update it.
+ // create a new one. If it does, we'll update it.
if ( ! $this->sess_read())
{
$this->sess_create();
@@ -137,7 +137,7 @@ class CI_Session {
// Fetch the cookie
$session = $this->CI->input->cookie($this->sess_cookie_name);
- // No cookie? Goodbye cruel world!...
+ // No cookie? Goodbye cruel world!...
if ($session === FALSE)
{
log_message('debug', 'A session cookie was not found.');
@@ -155,8 +155,8 @@ class CI_Session {
$hash = substr($session, strlen($session)-32); // get last 32 chars
$session = substr($session, 0, strlen($session)-32);
- // Does the md5 hash match? This is to prevent manipulation of session data in userspace
- if ($hash !== md5($session.$this->encryption_key))
+ // Does the md5 hash match? This is to prevent manipulation of session data in userspace
+ if ($hash !== md5($session.$this->encryption_key))
{
log_message('error', 'The session cookie data did not match what was expected. This could be a possible hacking attempt.');
$this->sess_destroy();
@@ -189,7 +189,7 @@ class CI_Session {
}
// Does the User Agent Match?
- if ($this->sess_match_useragent == TRUE AND trim($session['user_agent']) != trim(substr($this->CI->input->user_agent(), 0, 50)))
+ if ($this->sess_match_useragent == TRUE AND trim($session['user_agent']) != trim(substr($this->CI->input->user_agent(), 0, 120)))
{
$this->sess_destroy();
return FALSE;
@@ -212,14 +212,14 @@ class CI_Session {
$query = $this->CI->db->get($this->sess_table_name);
- // No result? Kill it!
+ // No result? Kill it!
if ($query->num_rows() == 0)
{
$this->sess_destroy();
return FALSE;
}
- // Is there custom data? If so, add it to the main session array
+ // Is there custom data? If so, add it to the main session array
$row = $query->row();
if (isset($row->user_data) AND $row->user_data != '')
{
@@ -252,7 +252,7 @@ class CI_Session {
*/
function sess_write()
{
- // Are we saving custom data to the DB? If not, all we do is update the cookie
+ // Are we saving custom data to the DB? If not, all we do is update the cookie
if ($this->sess_use_database === FALSE)
{
$this->_set_cookie();
@@ -272,7 +272,7 @@ class CI_Session {
$cookie_userdata[$val] = $this->userdata[$val];
}
- // Did we find any custom data? If not, we turn the empty array into a string
+ // Did we find any custom data? If not, we turn the empty array into a string
// since there's no reason to serialize and store an empty array in the DB
if (count($custom_userdata) === 0)
{
@@ -288,7 +288,7 @@ class CI_Session {
$this->CI->db->where('session_id', $this->userdata['session_id']);
$this->CI->db->update($this->sess_table_name, array('last_activity' => $this->userdata['last_activity'], 'user_data' => $custom_userdata));
- // Write the cookie. Notice that we manually pass the cookie data array to the
+ // Write the cookie. Notice that we manually pass the cookie data array to the
// _set_cookie() function. Normally that function will store $this->userdata, but
// in this case that array contains custom data, which we do not want in the cookie.
$this->_set_cookie($cookie_userdata);
@@ -316,7 +316,7 @@ class CI_Session {
$this->userdata = array(
'session_id' => md5(uniqid($sessid, TRUE)),
'ip_address' => $this->CI->input->ip_address(),
- 'user_agent' => substr($this->CI->input->user_agent(), 0, 50),
+ 'user_agent' => substr($this->CI->input->user_agent(), 0, 120),
'last_activity' => $this->now
);
@@ -435,11 +435,11 @@ class CI_Session {
* Fetch all session data
*
* @access public
- * @return mixed
+ * @return array
*/
function all_userdata()
{
- return ( ! isset($this->userdata)) ? FALSE : $this->userdata;
+ return $this->userdata;
}
// --------------------------------------------------------------------
@@ -535,7 +535,7 @@ class CI_Session {
*/
function keep_flashdata($key)
{
- // 'old' flashdata gets removed. Here we mark all
+ // 'old' flashdata gets removed. Here we mark all
// flashdata as 'new' to preserve it from _flashdata_sweep()
// Note the function will return FALSE if the $key
// provided cannot be found
diff --git a/system/libraries/Sha1.php b/system/libraries/Sha1.php
index 1a657572b..04e07d1c1 100644
--- a/system/libraries/Sha1.php
+++ b/system/libraries/Sha1.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -74,10 +74,10 @@ class CI_SHA1 {
$x[$n * 16 - 1] = strlen($str) * 8;
- $a = 1732584193;
+ $a = 1732584193;
$b = -271733879;
$c = -1732584194;
- $d = 271733878;
+ $d = 271733878;
$e = -1009589776;
for ($i = 0; $i < count($x); $i += 16)
@@ -142,7 +142,7 @@ class CI_SHA1 {
// --------------------------------------------------------------------
/**
- * Return result based on iteration
+ * Return result based on iteration
*
* @access private
* @return string
diff --git a/system/libraries/Table.php b/system/libraries/Table.php
index def696776..764df37da 100644
--- a/system/libraries/Table.php
+++ b/system/libraries/Table.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -81,9 +81,9 @@ class CI_Table {
// --------------------------------------------------------------------
/**
- * Set columns. Takes a one-dimensional array as input and creates
+ * Set columns. Takes a one-dimensional array as input and creates
* a multi-dimensional array with a depth equal to the number of
- * columns. This allows a single array with many elements to be
+ * columns. This allows a single array with many elements to be
* displayed in a table that has a fixed column count.
*
* @access public
@@ -247,7 +247,7 @@ class CI_Table {
}
}
- // Is there anything to display? No? Smite them!
+ // Is there anything to display? No? Smite them!
if (count($this->heading) == 0 AND count($this->rows) == 0)
{
return 'Undefined table data';
@@ -376,7 +376,7 @@ class CI_Table {
// --------------------------------------------------------------------
/**
- * Clears the table arrays. Useful if multiple tables are being generated
+ * Clears the table arrays. Useful if multiple tables are being generated
*
* @access public
* @return void
@@ -495,7 +495,7 @@ class CI_Table {
*/
function _default_template()
{
- return array (
+ return array (
'table_open' => '<table border="0" cellpadding="4" cellspacing="0">',
'thead_open' => '<thead>',
diff --git a/system/libraries/Trackback.php b/system/libraries/Trackback.php
index b0a767822..b0f8a9098 100644
--- a/system/libraries/Trackback.php
+++ b/system/libraries/Trackback.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -125,7 +125,7 @@ class CI_Trackback {
// --------------------------------------------------------------------
/**
- * Receive Trackback Data
+ * Receive Trackback Data
*
* This function simply validates the incoming TB data.
* It returns FALSE on failure and TRUE on success.
@@ -170,7 +170,7 @@ class CI_Trackback {
/**
* Send Trackback Error Message
*
- * Allows custom errors to be set. By default it
+ * Allows custom errors to be set. By default it
* sends the "incomplete information" error, as that's
* the most common one.
*
@@ -221,7 +221,7 @@ class CI_Trackback {
* Process Trackback
*
* Opens a socket connection and passes the data to
- * the server. Returns TRUE on success, FALSE on failure
+ * the server. Returns TRUE on success, FALSE on failure
*
* @access public
* @param string
@@ -359,11 +359,11 @@ class CI_Trackback {
if (strpos($url, '?') !== FALSE)
{
$tb_array = explode('/', $url);
- $tb_end = $tb_array[count($tb_array)-1];
+ $tb_end = $tb_array[count($tb_array)-1];
if ( ! is_numeric($tb_end))
{
- $tb_end = $tb_array[count($tb_array)-2];
+ $tb_end = $tb_array[count($tb_array)-2];
}
$tb_array = explode('=', $tb_end);
@@ -378,7 +378,7 @@ class CI_Trackback {
if ( ! is_numeric($tb_id))
{
- $tb_id = $tb_array[count($tb_array)-2];
+ $tb_id = $tb_array[count($tb_array)-2];
}
}
@@ -406,7 +406,7 @@ class CI_Trackback {
$temp = '__TEMP_AMPERSANDS__';
$str = preg_replace("/&#(\d+);/", "$temp\\1;", $str);
- $str = preg_replace("/&(\w+);/", "$temp\\1;", $str);
+ $str = preg_replace("/&(\w+);/", "$temp\\1;", $str);
$str = str_replace(array("&","<",">","\"", "'", "-"),
array("&amp;", "&lt;", "&gt;", "&quot;", "&#39;", "&#45;"),
diff --git a/system/libraries/Typography.php b/system/libraries/Typography.php
index 734cec104..3ceb0b52b 100644
--- a/system/libraries/Typography.php
+++ b/system/libraries/Typography.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -53,7 +53,7 @@ class CI_Typography {
* - Converts single and double quotes into correctly facing curly quote entities.
* - Converts three dots into ellipsis.
* - Converts double dashes into em-dashes.
- * - Converts two spaces into entities
+ * - Converts two spaces into entities
*
* @access public
* @param string
@@ -73,7 +73,7 @@ class CI_Typography {
$str = str_replace(array("\r\n", "\r"), "\n", $str);
}
- // Reduce line breaks. If there are more than two consecutive linebreaks
+ // Reduce line breaks. If there are more than two consecutive linebreaks
// we'll compress them down to a maximum of two since there's no benefit to more.
if ($reduce_linebreaks === TRUE)
{
@@ -94,7 +94,7 @@ class CI_Typography {
}
}
- // match and yank <pre> tags if they exist. It's cheaper to do this separately since most content will
+ // match and yank <pre> tags if they exist. It's cheaper to do this separately since most content will
// not contain <pre> tags, and it keeps the PCRE patterns below simpler and faster
if (strpos($str, '<pre') !== FALSE)
{
@@ -110,12 +110,12 @@ class CI_Typography {
$str = preg_replace_callback("#\{.+?\}#si", array($this, '_protect_characters'), $str);
}
- // Convert "ignore" tags to temporary marker. The parser splits out the string at every tag
- // it encounters. Certain inline tags, like image tags, links, span tags, etc. will be
+ // Convert "ignore" tags to temporary marker. The parser splits out the string at every tag
+ // it encounters. Certain inline tags, like image tags, links, span tags, etc. will be
// adversely affected if they are split out so we'll convert the opening bracket < temporarily to: {@TAG}
$str = preg_replace("#<(/*)(".$this->inline_elements.")([ >])#i", "{@TAG}\\1\\2\\3", $str);
- // Split the string at every tag. This expression creates an array with this prototype:
+ // Split the string at every tag. This expression creates an array with this prototype:
//
// [array]
// {
@@ -126,7 +126,7 @@ class CI_Typography {
// }
$chunks = preg_split('/(<(?:[^<>]+(?:"[^"]*"|\'[^\']*\')?)+>)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
- // Build our finalized string. We cycle through the array, skipping tags, and processing the contained text
+ // Build our finalized string. We cycle through the array, skipping tags, and processing the contained text
$str = '';
$process = TRUE;
$paragraph = FALSE;
@@ -143,7 +143,7 @@ class CI_Typography {
{
if (preg_match("#".$this->skip_elements."#", $match[2]))
{
- $process = ($match[1] == '/') ? TRUE : FALSE;
+ $process = ($match[1] == '/') ? TRUE : FALSE;
}
if ($match[1] == '')
@@ -161,17 +161,17 @@ class CI_Typography {
continue;
}
- // Force a newline to make sure end tags get processed by _format_newlines()
+ // Force a newline to make sure end tags get processed by _format_newlines()
if ($current_chunk == $total_chunks)
{
$chunk .= "\n";
}
- // Convert Newlines into <p> and <br /> tags
+ // Convert Newlines into <p> and <br /> tags
$str .= $this->_format_newlines($chunk);
}
- // No opening block level tag? Add it if needed.
+ // No opening block level tag? Add it if needed.
if ( ! preg_match("/^\s*<(?:".$this->block_elements.")/i", $str))
{
$str = preg_replace("/^(.*?)<(".$this->block_elements.")/i", '<p>$1</p><$2', $str);
@@ -204,14 +204,14 @@ class CI_Typography {
'#<p></p><('.$this->block_elements.')#' => '<$1',
// Clean up stray non-breaking spaces preceeding block elements
- '#(&nbsp;\s*)+<('.$this->block_elements.')#' => ' <$2',
+ '#(&nbsp;\s*)+<('.$this->block_elements.')#' => ' <$2',
// Replace the temporary markers we added earlier
'/\{@TAG\}/' => '<',
'/\{@DQ\}/' => '"',
'/\{@SQ\}/' => "'",
'/\{@DD\}/' => '--',
- '/\{@NBS\}/' => ' ',
+ '/\{@NBS\}/' => ' ',
// An unintended consequence of the _format_newlines function is that
// some of the newlines get truncated, resulting in <p> tags
@@ -296,7 +296,7 @@ class CI_Typography {
'/(\w)\.{3}/' => '$1&#8230;',
// double space after sentences
- '/(\W) /' => '$1&nbsp; ',
+ '/(\W) /' => '$1&nbsp; ',
// ampersands, if not a character entity
'/&(?!#?[a-zA-Z0-9]{2,};)/' => '&amp;'
@@ -324,7 +324,7 @@ class CI_Typography {
return $str;
}
- if (strpos($str, "\n") === FALSE && ! in_array($this->last_block_element, $this->inner_block_required))
+ if (strpos($str, "\n") === FALSE && ! in_array($this->last_block_element, $this->inner_block_required))
{
return $str;
}
@@ -341,7 +341,7 @@ class CI_Typography {
// We trim off the right-side new line so that the closing </p> tag
// will be positioned immediately following the string, matching
// the behavior of the opening <p> tag
- $str = '<p>'.rtrim($str).'</p>';
+ $str = '<p>'.rtrim($str).'</p>';
}
// Remove empty paragraphs if they are on the first line, as this
@@ -367,7 +367,7 @@ class CI_Typography {
*/
function _protect_characters($match)
{
- return str_replace(array("'",'"','--',' '), array('{@SQ}', '{@DQ}', '{@DD}', '{@NBS}'), $match[0]);
+ return str_replace(array("'",'"','--',' '), array('{@SQ}', '{@DQ}', '{@DD}', '{@NBS}'), $match[0]);
}
// --------------------------------------------------------------------
diff --git a/system/libraries/Unit_test.php b/system/libraries/Unit_test.php
index 5bd7e801a..c9012f646 100644
--- a/system/libraries/Unit_test.php
+++ b/system/libraries/Unit_test.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
diff --git a/system/libraries/Upload.php b/system/libraries/Upload.php
index e15ea1b5d..51fbf772c 100644
--- a/system/libraries/Upload.php
+++ b/system/libraries/Upload.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -142,7 +142,7 @@ class CI_Upload {
*/
public function do_upload($field = 'userfile')
{
-
+
// Is $_FILES[$field] set? If not, no reason to continue.
if ( ! isset($_FILES[$field]))
{
@@ -185,7 +185,7 @@ class CI_Upload {
case 8: // UPLOAD_ERR_EXTENSION
$this->set_error('upload_stopped_by_extension');
break;
- default : $this->set_error('upload_no_file_selected');
+ default : $this->set_error('upload_no_file_selected');
break;
}
@@ -290,7 +290,7 @@ class CI_Upload {
/*
* Run the file through the XSS hacking filter
* This helps prevent malicious code from being
- * embedded within a file. Scripts can easily
+ * embedded within a file. Scripts can easily
* be disguised as images or other file types.
*/
if ($this->xss_clean)
@@ -305,8 +305,8 @@ class CI_Upload {
/*
* Move the file to the final destination
* To deal with different server configurations
- * we'll attempt to use copy() first. If that fails
- * we'll use move_uploaded_file(). One of the two should
+ * we'll attempt to use copy() first. If that fails
+ * we'll use move_uploaded_file(). One of the two should
* reliably work in most environments
*/
if ( ! @copy($this->file_temp, $this->upload_path.$this->file_name))
@@ -321,7 +321,7 @@ class CI_Upload {
/*
* Set the finalized image dimensions
* This sets the image width/height (assuming the
- * file was an image). We use this information
+ * file was an image). We use this information
* in the "data" function.
*/
$this->set_image_properties($this->upload_path.$this->file_name);
@@ -518,7 +518,7 @@ class CI_Upload {
$this->image_width = $D['0'];
$this->image_height = $D['1'];
$this->image_type = ( ! isset($types[$D['2']])) ? 'unknown' : $types[$D['2']];
- $this->image_size_str = $D['3']; // string containing height and width
+ $this->image_size_str = $D['3']; // string containing height and width
}
}
}
@@ -551,7 +551,7 @@ class CI_Upload {
// IE will sometimes return odd mime-types during upload, so here we just standardize all
// jpegs or pngs to the same file type.
- $png_mimes = array('image/x-png');
+ $png_mimes = array('image/x-png');
$jpeg_mimes = array('image/jpg', 'image/jpe', 'image/jpeg', 'image/pjpeg');
if (in_array($this->file_type, $png_mimes))
@@ -642,7 +642,7 @@ class CI_Upload {
*/
public function is_allowed_filesize()
{
- if ($this->max_size != 0 AND $this->file_size > $this->max_size)
+ if ($this->max_size != 0 AND $this->file_size > $this->max_size)
{
return FALSE;
}
@@ -721,7 +721,7 @@ class CI_Upload {
return FALSE;
}
- $this->upload_path = preg_replace("/(.+?)\/*$/", "\\1/", $this->upload_path);
+ $this->upload_path = preg_replace("/(.+?)\/*$/", "\\1/", $this->upload_path);
return TRUE;
}
@@ -834,7 +834,7 @@ class CI_Upload {
$current = ini_get('memory_limit') * 1024 * 1024;
// There was a bug/behavioural change in PHP 5.2, where numbers over one million get output
- // into scientific notation. number_format() ensures this number is an integer
+ // into scientific notation. number_format() ensures this number is an integer
// http://bugs.php.net/bug.php?id=43053
$new_memory = number_format(ceil(filesize($file) + $current), 0, '.', '');
@@ -844,8 +844,8 @@ class CI_Upload {
// If the file being uploaded is an image, then we should have no problem with XSS attacks (in theory), but
// IE can be fooled into mime-type detecting a malformed image as an html file, thus executing an XSS attack on anyone
- // using IE who looks at the image. It does this by inspecting the first 255 bytes of an image. To get around this
- // CI will itself look at the first 255 bytes of an image to determine its relative safety. This can save a lot of
+ // using IE who looks at the image. It does this by inspecting the first 255 bytes of an image. To get around this
+ // CI will itself look at the first 255 bytes of an image to determine its relative safety. This can save a lot of
// processor power and time if it is actually a clean image, as it will be in nearly all instances _except_ an
// attempted XSS attack.
@@ -875,12 +875,6 @@ class CI_Upload {
}
$CI =& get_instance();
-
- if ( ! isset($CI->security))
- {
- $CI->load->library('security');
- }
-
return $CI->security->xss_clean($data, TRUE);
}
@@ -939,7 +933,7 @@ class CI_Upload {
/**
* List of Mime Types
*
- * This is a list of mime types. We use it to validate
+ * This is a list of mime types. We use it to validate
* the "allowed types" set by the developer
*
* @param string
@@ -951,11 +945,21 @@ class CI_Upload {
if (count($this->mimes) == 0)
{
- if (@require_once(APPPATH.'config/mimes'.EXT))
+ if (defined('ENVIRONMENT') AND is_file(APPPATH.'config/'.ENVIRONMENT.'/mimes.php'))
+ {
+ include(APPPATH.'config/'.ENVIRONMENT.'/mimes.php');
+ }
+ elseif (is_file(APPPATH.'config/mimes.php'))
+ {
+ include(APPPATH.'config//mimes.php');
+ }
+ else
{
- $this->mimes = $mimes;
- unset($mimes);
+ return FALSE;
}
+
+ $this->mimes = $mimes;
+ unset($mimes);
}
return ( ! isset($this->mimes[$mime])) ? FALSE : $this->mimes[$mime];
diff --git a/system/libraries/User_agent.php b/system/libraries/User_agent.php
index 3774fc283..543d1d5a3 100644
--- a/system/libraries/User_agent.php
+++ b/system/libraries/User_agent.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -84,7 +84,15 @@ class CI_User_agent {
*/
private function _load_agent_file()
{
- if ( ! @include(APPPATH.'config/user_agents'.EXT))
+ if (defined('ENVIRONMENT') AND is_file(APPPATH.'config/'.ENVIRONMENT.'/user_agents.php'))
+ {
+ include(APPPATH.'config/'.ENVIRONMENT.'/user_agents.php');
+ }
+ elseif (is_file(APPPATH.'config/user_agents.php'))
+ {
+ include(APPPATH.'config/user_agents.php');
+ }
+ else
{
return FALSE;
}
diff --git a/system/libraries/Xmlrpc.php b/system/libraries/Xmlrpc.php
index a24bca9b6..aba609167 100644
--- a/system/libraries/Xmlrpc.php
+++ b/system/libraries/Xmlrpc.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -46,7 +46,7 @@ class CI_Xmlrpc {
var $xmlrpcTypes = array();
var $valid_parents = array();
var $xmlrpcerr = array(); // Response numbers
- var $xmlrpcstr = array(); // Response strings
+ var $xmlrpcstr = array(); // Response strings
var $xmlrpc_defencoding = 'UTF-8';
var $xmlrpcName = 'XML-RPC for CodeIgniter';
@@ -61,12 +61,12 @@ class CI_Xmlrpc {
var $message = '';
var $error = ''; // Error string for request
var $result;
- var $response = array(); // Response from remote server
+ var $response = array(); // Response from remote server
var $xss_clean = TRUE;
//-------------------------------------
- // VALUES THAT MULTIPLE CLASSES NEED
+ // VALUES THAT MULTIPLE CLASSES NEED
//-------------------------------------
public function __construct($config = array())
@@ -112,7 +112,7 @@ class CI_Xmlrpc {
$this->xmlrpcerr['unknown_method'] = '1';
$this->xmlrpcstr['unknown_method'] = 'This is not a known method for this XML-RPC Server';
$this->xmlrpcerr['invalid_return'] = '2';
- $this->xmlrpcstr['invalid_return'] = 'The XML data received was either invalid or not in the correct form for XML-RPC. Turn on debugging to examine the XML data further.';
+ $this->xmlrpcstr['invalid_return'] = 'The XML data received was either invalid or not in the correct form for XML-RPC. Turn on debugging to examine the XML data further.';
$this->xmlrpcerr['incorrect_params'] = '3';
$this->xmlrpcstr['incorrect_params'] = 'Incorrect parameters were passed to method';
$this->xmlrpcerr['introspect_unknown'] = '4';
@@ -129,7 +129,7 @@ class CI_Xmlrpc {
//-------------------------------------
- // Initialize Prefs
+ // Initialize Prefs
//-------------------------------------
function initialize($config = array())
@@ -148,7 +148,7 @@ class CI_Xmlrpc {
// END
//-------------------------------------
- // Take URL and parse it
+ // Take URL and parse it
//-------------------------------------
function server($url, $port=80)
@@ -172,7 +172,7 @@ class CI_Xmlrpc {
// END
//-------------------------------------
- // Set Timeout
+ // Set Timeout
//-------------------------------------
function timeout($seconds=5)
@@ -185,7 +185,7 @@ class CI_Xmlrpc {
// END
//-------------------------------------
- // Set Methods
+ // Set Methods
//-------------------------------------
function method($function)
@@ -195,7 +195,7 @@ class CI_Xmlrpc {
// END
//-------------------------------------
- // Take Array of Data and Create Objects
+ // Take Array of Data and Create Objects
//-------------------------------------
function request($incoming)
@@ -216,7 +216,7 @@ class CI_Xmlrpc {
//-------------------------------------
- // Set Debug
+ // Set Debug
//-------------------------------------
function set_debug($flag = TRUE)
@@ -225,7 +225,7 @@ class CI_Xmlrpc {
}
//-------------------------------------
- // Values Parsing
+ // Values Parsing
//-------------------------------------
function values_parsing($value, $return = FALSE)
@@ -268,7 +268,7 @@ class CI_Xmlrpc {
//-------------------------------------
- // Sends XML-RPC Request
+ // Sends XML-RPC Request
//-------------------------------------
function send_request()
@@ -294,7 +294,7 @@ class CI_Xmlrpc {
// END
//-------------------------------------
- // Returns Error
+ // Returns Error
//-------------------------------------
function display_error()
@@ -304,7 +304,7 @@ class CI_Xmlrpc {
// END
//-------------------------------------
- // Returns Remote Server Response
+ // Returns Remote Server Response
//-------------------------------------
function display_response()
@@ -314,7 +314,7 @@ class CI_Xmlrpc {
// END
//-------------------------------------
- // Sends an Error Message for Server Request
+ // Sends an Error Message for Server Request
//-------------------------------------
function send_error_message($number, $message)
@@ -325,7 +325,7 @@ class CI_Xmlrpc {
//-------------------------------------
- // Send Response for Server Request
+ // Send Response for Server Request
//-------------------------------------
function send_response($response)
@@ -399,7 +399,7 @@ class XML_RPC_Client extends CI_Xmlrpc
}
$r = "\r\n";
- $op = "POST {$this->path} HTTP/1.0$r";
+ $op = "POST {$this->path} HTTP/1.0$r";
$op .= "Host: {$this->server}$r";
$op .= "Content-Type: text/xml$r";
$op .= "User-Agent: {$this->xmlrpcName}$r";
@@ -447,7 +447,7 @@ class XML_RPC_Response
else if ( ! is_object($val))
{
// programmer error, not an object
- error_log("Invalid type '" . gettype($val) . "' (value: $val) passed to XML_RPC_Response. Defaulting to empty value.");
+ error_log("Invalid type '" . gettype($val) . "' (value: $val) passed to XML_RPC_Response. Defaulting to empty value.");
$this->val = new XML_RPC_Values();
}
else
@@ -505,11 +505,6 @@ class XML_RPC_Response
{
$CI =& get_instance();
- if ($this->xss_clean && ! isset($CI->security))
- {
- $CI->load->library('security');
- }
-
if ($array !== FALSE && is_array($array))
{
while (list($key) = each($array))
@@ -546,7 +541,7 @@ class XML_RPC_Response
//-------------------------------------
- // XML-RPC Object to PHP Types
+ // XML-RPC Object to PHP Types
//-------------------------------------
function xmlrpc_decoder($xmlrpc_val)
@@ -586,7 +581,7 @@ class XML_RPC_Response
//-------------------------------------
- // ISO-8601 time to server or UTC time
+ // ISO-8601 time to server or UTC time
//-------------------------------------
function iso8601_decode($time, $utc=0)
@@ -635,7 +630,7 @@ class XML_RPC_Message extends CI_Xmlrpc
}
//-------------------------------------
- // Create Payload to Send
+ // Create Payload to Send
//-------------------------------------
function createPayload()
@@ -655,7 +650,7 @@ class XML_RPC_Message extends CI_Xmlrpc
}
//-------------------------------------
- // Parse External XML-RPC Server's Response
+ // Parse External XML-RPC Server's Response
//-------------------------------------
function parseResponse($fp)
@@ -668,7 +663,7 @@ class XML_RPC_Message extends CI_Xmlrpc
}
//-------------------------------------
- // DISPLAY HTTP CONTENT for DEBUGGING
+ // DISPLAY HTTP CONTENT for DEBUGGING
//-------------------------------------
if ($this->debug === TRUE)
@@ -679,7 +674,7 @@ class XML_RPC_Message extends CI_Xmlrpc
}
//-------------------------------------
- // Check for data
+ // Check for data
//-------------------------------------
if ($data == "")
@@ -691,7 +686,7 @@ class XML_RPC_Message extends CI_Xmlrpc
//-------------------------------------
- // Check for HTTP 200 Response
+ // Check for HTTP 200 Response
//-------------------------------------
if (strncmp($data, 'HTTP', 4) == 0 && ! preg_match('/^HTTP\/[0-9\.]+ 200 /', $data))
@@ -702,7 +697,7 @@ class XML_RPC_Message extends CI_Xmlrpc
}
//-------------------------------------
- // Create and Set Up XML Parser
+ // Create and Set Up XML Parser
//-------------------------------------
$parser = xml_parser_create($this->xmlrpc_defencoding);
@@ -723,7 +718,7 @@ class XML_RPC_Message extends CI_Xmlrpc
//-------------------------------------
- // GET HEADERS
+ // GET HEADERS
//-------------------------------------
$lines = explode("\r\n", $data);
@@ -739,7 +734,7 @@ class XML_RPC_Message extends CI_Xmlrpc
//-------------------------------------
- // PARSE XML DATA
+ // PARSE XML DATA
//-------------------------------------
if ( ! xml_parse($parser, $data, count($data)))
@@ -755,7 +750,7 @@ class XML_RPC_Message extends CI_Xmlrpc
xml_parser_free($parser);
// ---------------------------------------
- // Got Ourselves Some Badness, It Seems
+ // Got Ourselves Some Badness, It Seems
// ---------------------------------------
if ($this->xh[$parser]['isf'] > 1)
@@ -777,7 +772,7 @@ class XML_RPC_Message extends CI_Xmlrpc
}
//-------------------------------------
- // DISPLAY XML CONTENT for DEBUGGING
+ // DISPLAY XML CONTENT for DEBUGGING
//-------------------------------------
if ($this->debug === TRUE)
@@ -802,7 +797,7 @@ class XML_RPC_Message extends CI_Xmlrpc
}
//-------------------------------------
- // SEND RESPONSE
+ // SEND RESPONSE
//-------------------------------------
$v = $this->xh[$parser]['value'];
@@ -831,21 +826,21 @@ class XML_RPC_Message extends CI_Xmlrpc
}
// ------------------------------------
- // Begin Return Message Parsing section
+ // Begin Return Message Parsing section
// ------------------------------------
// quick explanation of components:
- // ac - used to accumulate values
- // isf - used to indicate a fault
- // lv - used to indicate "looking for a value": implements
+ // ac - used to accumulate values
+ // isf - used to indicate a fault
+ // lv - used to indicate "looking for a value": implements
// the logic to allow values with no types to be strings
- // params - used to store parameters in method calls
- // method - used to store method name
+ // params - used to store parameters in method calls
+ // method - used to store method name
// stack - array with parent tree of the xml element,
// used to validate the nesting of elements
//-------------------------------------
- // Start Element Handler
+ // Start Element Handler
//-------------------------------------
function open_tag($the_parser, $name, $attrs)
@@ -947,7 +942,7 @@ class XML_RPC_Message extends CI_Xmlrpc
//-------------------------------------
- // End Element Handler
+ // End Element Handler
//-------------------------------------
function closing_tag($the_parser, $name)
@@ -956,7 +951,7 @@ class XML_RPC_Message extends CI_Xmlrpc
// Remove current element from stack and set variable
// NOTE: If the XML validates, then we do not have to worry about
- // the opening and closing of elements. Nesting is checked on the opening
+ // the opening and closing of elements. Nesting is checked on the opening
// tag so we be safe there as well.
$curr_elem = array_shift($this->xh[$the_parser]['stack']);
@@ -1085,13 +1080,13 @@ class XML_RPC_Message extends CI_Xmlrpc
// We're all good kids with nuthin' to do
break;
default:
- // End of an Invalid Element. Taken care of during the opening tag though
+ // End of an Invalid Element. Taken care of during the opening tag though
break;
}
}
//-------------------------------------
- // Parses Character Data
+ // Parses Character Data
//-------------------------------------
function character_data($the_parser, $data)
@@ -1122,11 +1117,6 @@ class XML_RPC_Message extends CI_Xmlrpc
{
$CI =& get_instance();
- if ($this->xss_clean && ! isset($CI->security))
- {
- $CI->load->library('security');
- }
-
if ($array !== FALSE && is_array($array))
{
while (list($key) = each($array))
diff --git a/system/libraries/Xmlrpcs.php b/system/libraries/Xmlrpcs.php
index 9cd332147..88af60693 100644
--- a/system/libraries/Xmlrpcs.php
+++ b/system/libraries/Xmlrpcs.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -132,7 +132,7 @@ class CI_Xmlrpcs extends CI_Xmlrpc
function serve()
{
$r = $this->parseRequest();
- $payload = '<?xml version="1.0" encoding="'.$this->xmlrpc_defencoding.'"?'.'>'."\n";
+ $payload = '<?xml version="1.0" encoding="'.$this->xmlrpc_defencoding.'"?'.'>'."\n";
$payload .= $this->debug_msg;
$payload .= $r->prepare_response();
@@ -156,7 +156,7 @@ class CI_Xmlrpcs extends CI_Xmlrpc
function add_to_map($methodname, $function, $sig, $doc)
{
$this->methods[$methodname] = array(
- 'function' => $function,
+ 'function' => $function,
'signature' => $sig,
'docstring' => $doc
);
@@ -176,7 +176,7 @@ class CI_Xmlrpcs extends CI_Xmlrpc
global $HTTP_RAW_POST_DATA;
//-------------------------------------
- // Get Data
+ // Get Data
//-------------------------------------
if ($data == '')
@@ -185,7 +185,7 @@ class CI_Xmlrpcs extends CI_Xmlrpc
}
//-------------------------------------
- // Set up XML Parser
+ // Set up XML Parser
//-------------------------------------
$parser = xml_parser_create($this->xmlrpc_defencoding);
@@ -207,7 +207,7 @@ class CI_Xmlrpcs extends CI_Xmlrpc
//-------------------------------------
- // PARSE + PROCESS XML DATA
+ // PARSE + PROCESS XML DATA
//-------------------------------------
if ( ! xml_parse($parser, $data, 1))
@@ -235,7 +235,7 @@ class CI_Xmlrpcs extends CI_Xmlrpc
{
if ($this->debug === TRUE)
{
- $plist .= "$i - " . print_r(get_object_vars($parser_object->xh[$parser]['params'][$i]), TRUE). ";\n";
+ $plist .= "$i - " . print_r(get_object_vars($parser_object->xh[$parser]['params'][$i]), TRUE). ";\n";
}
$m->addParam($parser_object->xh[$parser]['params'][$i]);
@@ -252,7 +252,7 @@ class CI_Xmlrpcs extends CI_Xmlrpc
}
//-------------------------------------
- // SET DEBUGGING MESSAGE
+ // SET DEBUGGING MESSAGE
//-------------------------------------
if ($this->debug === TRUE)
@@ -285,7 +285,7 @@ class CI_Xmlrpcs extends CI_Xmlrpc
}
//-------------------------------------
- // Valid Method
+ // Valid Method
//-------------------------------------
if ( ! isset($this->methods[$methName]['function']))
@@ -294,7 +294,7 @@ class CI_Xmlrpcs extends CI_Xmlrpc
}
//-------------------------------------
- // Check for Method (and Object)
+ // Check for Method (and Object)
//-------------------------------------
$method_parts = explode(".", $this->methods[$methName]['function']);
@@ -320,7 +320,7 @@ class CI_Xmlrpcs extends CI_Xmlrpc
}
//-------------------------------------
- // Checking Methods Signature
+ // Checking Methods Signature
//-------------------------------------
if (isset($this->methods[$methName]['signature']))
@@ -353,7 +353,7 @@ class CI_Xmlrpcs extends CI_Xmlrpc
}
//-------------------------------------
- // Calls the Function
+ // Calls the Function
//-------------------------------------
if ($objectCall === TRUE)
@@ -381,11 +381,11 @@ class CI_Xmlrpcs extends CI_Xmlrpc
return call_user_func($this->methods[$methName]['function'], $m);
}
}
-
+
// --------------------------------------------------------------------
/**
- * Server Function: List Methods
+ * Server Function: List Methods
*
* @access public
* @param mixed
@@ -409,11 +409,11 @@ class CI_Xmlrpcs extends CI_Xmlrpc
$v->addArray($output);
return new XML_RPC_Response($v);
}
-
+
// --------------------------------------------------------------------
/**
- * Server Function: Return Signature for Method
+ * Server Function: Return Signature for Method
*
* @access public
* @param mixed
@@ -458,7 +458,7 @@ class CI_Xmlrpcs extends CI_Xmlrpc
// --------------------------------------------------------------------
/**
- * Server Function: Doc String for Method
+ * Server Function: Doc String for Method
*
* @access public
* @param mixed
@@ -480,11 +480,11 @@ class CI_Xmlrpcs extends CI_Xmlrpc
return new XML_RPC_Response(0, $this->xmlrpcerr['introspect_unknown'], $this->xmlrpcstr['introspect_unknown']);
}
}
-
+
// --------------------------------------------------------------------
/**
- * Server Function: Multi-call
+ * Server Function: Multi-call
*
* @access public
* @param mixed
@@ -528,7 +528,7 @@ class CI_Xmlrpcs extends CI_Xmlrpc
// --------------------------------------------------------------------
/**
- * Multi-call Function: Error Handling
+ * Multi-call Function: Error Handling
*
* @access public
* @param mixed
@@ -536,7 +536,7 @@ class CI_Xmlrpcs extends CI_Xmlrpc
*/
function multicall_error($err)
{
- $str = is_string($err) ? $this->xmlrpcstr["multicall_${err}"] : $err->faultString();
+ $str = is_string($err) ? $this->xmlrpcstr["multicall_${err}"] : $err->faultString();
$code = is_string($err) ? $this->xmlrpcerr["multicall_${err}"] : $err->faultCode();
$struct['faultCode'] = new XML_RPC_Values($code, 'int');
@@ -548,7 +548,7 @@ class CI_Xmlrpcs extends CI_Xmlrpc
// --------------------------------------------------------------------
/**
- * Multi-call Function: Processes method
+ * Multi-call Function: Processes method
*
* @access public
* @param mixed
diff --git a/system/libraries/Zip.php b/system/libraries/Zip.php
index 666327d5c..1ae3e7f25 100644
--- a/system/libraries/Zip.php
+++ b/system/libraries/Zip.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
@@ -30,7 +30,7 @@
* @author ExpressionEngine Dev Team
* @link http://codeigniter.com/user_guide/libraries/zip.html
*/
-class CI_Zip {
+class CI_Zip {
var $zipdata = '';
var $directory = '';
@@ -150,7 +150,7 @@ class CI_Zip {
* Add Data to Zip
*
* Lets you add files to the archive. If the path is included
- * in the filename it will be placed within a directory. Make
+ * in the filename it will be placed within a directory. Make
* sure you use add_dir() first to create the folder.
*
* @access public
@@ -192,7 +192,7 @@ class CI_Zip {
$filepath = str_replace("\\", "/", $filepath);
$uncompressed_size = strlen($data);
- $crc32 = crc32($data);
+ $crc32 = crc32($data);
$gzdata = gzcompress($data);
$gzdata = substr($gzdata, 2, -4);
@@ -267,7 +267,7 @@ class CI_Zip {
* Read a directory and add it to the zip.
*
* This function recursively reads a folder and everything it contains (including
- * sub-folders) and creates a zip based on it. Whatever directory structure
+ * sub-folders) and creates a zip based on it. Whatever directory structure
* is in the original file path will be recreated in the zip file.
*
* @access public
@@ -402,7 +402,7 @@ class CI_Zip {
/**
* Initialize Data
*
- * Lets you clear current zip data. Useful if you need to create
+ * Lets you clear current zip data. Useful if you need to create
* multiple zips with different data.
*
* @access public
diff --git a/system/libraries/javascript/Jquery.php b/system/libraries/javascript/Jquery.php
index baab83d25..97107f0cc 100644
--- a/system/libraries/javascript/Jquery.php
+++ b/system/libraries/javascript/Jquery.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
@@ -23,7 +23,7 @@
* @category Loader
* @link http://www.codeigniter.com/user_guide/libraries/javascript.html
*/
-
+
class CI_Jquery extends CI_Javascript {
var $_javascript_folder = 'js';
@@ -36,20 +36,20 @@ class CI_Jquery extends CI_Javascript {
public function __construct($params)
{
- $this->CI =& get_instance();
+ $this->CI =& get_instance();
extract($params);
if ($autoload === TRUE)
{
- $this->script();
+ $this->script();
}
-
+
log_message('debug', "Jquery Class Initialized");
}
-
- // --------------------------------------------------------------------
+
+ // --------------------------------------------------------------------
// Event Code
- // --------------------------------------------------------------------
+ // --------------------------------------------------------------------
/**
* Blur
@@ -65,9 +65,9 @@ class CI_Jquery extends CI_Javascript {
{
return $this->_add_event($element, $js, 'blur');
}
-
+
// --------------------------------------------------------------------
-
+
/**
* Change
*
@@ -82,9 +82,9 @@ class CI_Jquery extends CI_Javascript {
{
return $this->_add_event($element, $js, 'change');
}
-
+
// --------------------------------------------------------------------
-
+
/**
* Click
*
@@ -112,7 +112,7 @@ class CI_Jquery extends CI_Javascript {
}
// --------------------------------------------------------------------
-
+
/**
* Double Click
*
@@ -129,7 +129,7 @@ class CI_Jquery extends CI_Javascript {
}
// --------------------------------------------------------------------
-
+
/**
* Error
*
@@ -146,7 +146,7 @@ class CI_Jquery extends CI_Javascript {
}
// --------------------------------------------------------------------
-
+
/**
* Focus
*
@@ -163,7 +163,7 @@ class CI_Jquery extends CI_Javascript {
}
// --------------------------------------------------------------------
-
+
/**
* Hover
*
@@ -185,7 +185,7 @@ class CI_Jquery extends CI_Javascript {
}
// --------------------------------------------------------------------
-
+
/**
* Keydown
*
@@ -202,7 +202,7 @@ class CI_Jquery extends CI_Javascript {
}
// --------------------------------------------------------------------
-
+
/**
* Keyup
*
@@ -216,10 +216,10 @@ class CI_Jquery extends CI_Javascript {
function _keyup($element = 'this', $js = '')
{
return $this->_add_event($element, $js, 'keyup');
- }
+ }
// --------------------------------------------------------------------
-
+
/**
* Load
*
@@ -233,10 +233,10 @@ class CI_Jquery extends CI_Javascript {
function _load($element = 'this', $js = '')
{
return $this->_add_event($element, $js, 'load');
- }
-
+ }
+
// --------------------------------------------------------------------
-
+
/**
* Mousedown
*
@@ -253,7 +253,7 @@ class CI_Jquery extends CI_Javascript {
}
// --------------------------------------------------------------------
-
+
/**
* Mouse Out
*
@@ -270,7 +270,7 @@ class CI_Jquery extends CI_Javascript {
}
// --------------------------------------------------------------------
-
+
/**
* Mouse Over
*
@@ -321,7 +321,7 @@ class CI_Jquery extends CI_Javascript {
{
$array_js = array($array_js);
}
-
+
foreach ($array_js as $js)
{
$this->jquery_code_for_compile[] = "\t$js\n";
@@ -361,7 +361,7 @@ class CI_Jquery extends CI_Javascript {
{
return $this->_add_event($element, $js, 'scroll');
}
-
+
// --------------------------------------------------------------------
/**
@@ -379,10 +379,10 @@ class CI_Jquery extends CI_Javascript {
return $this->_add_event($element, $js, 'unload');
}
- // --------------------------------------------------------------------
+ // --------------------------------------------------------------------
// Effects
- // --------------------------------------------------------------------
-
+ // --------------------------------------------------------------------
+
/**
* Add Class
*
@@ -395,7 +395,7 @@ class CI_Jquery extends CI_Javascript {
function _addClass($element = 'this', $class='')
{
$element = $this->_prep_element($element);
- $str = "$({$element}).addClass(\"$class\");";
+ $str = "$({$element}).addClass(\"$class\");";
return $str;
}
@@ -416,9 +416,9 @@ class CI_Jquery extends CI_Javascript {
{
$element = $this->_prep_element($element);
$speed = $this->_validate_speed($speed);
-
+
$animations = "\t\t\t";
-
+
foreach ($params as $param=>$value)
{
$animations .= $param.': \''.$value.'\', ';
@@ -430,19 +430,19 @@ class CI_Jquery extends CI_Javascript {
{
$speed = ', '.$speed;
}
-
+
if ($extra != '')
{
$extra = ', '.$extra;
}
-
- $str = "$({$element}).animate({\n$animations\n\t\t}".$speed.$extra.");";
-
+
+ $str = "$({$element}).animate({\n$animations\n\t\t}".$speed.$extra.");";
+
return $str;
}
// --------------------------------------------------------------------
-
+
/**
* Fade In
*
@@ -456,21 +456,21 @@ class CI_Jquery extends CI_Javascript {
*/
function _fadeIn($element = 'this', $speed = '', $callback = '')
{
- $element = $this->_prep_element($element);
+ $element = $this->_prep_element($element);
$speed = $this->_validate_speed($speed);
-
+
if ($callback != '')
{
$callback = ", function(){\n{$callback}\n}";
}
-
- $str = "$({$element}).fadeIn({$speed}{$callback});";
-
+
+ $str = "$({$element}).fadeIn({$speed}{$callback});";
+
return $str;
}
-
+
// --------------------------------------------------------------------
-
+
/**
* Fade Out
*
@@ -486,14 +486,14 @@ class CI_Jquery extends CI_Javascript {
{
$element = $this->_prep_element($element);
$speed = $this->_validate_speed($speed);
-
+
if ($callback != '')
{
$callback = ", function(){\n{$callback}\n}";
}
-
- $str = "$({$element}).fadeOut({$speed}{$callback});";
-
+
+ $str = "$({$element}).fadeOut({$speed}{$callback});";
+
return $str;
}
@@ -512,19 +512,19 @@ class CI_Jquery extends CI_Javascript {
*/
function _hide($element = 'this', $speed = '', $callback = '')
{
- $element = $this->_prep_element($element);
+ $element = $this->_prep_element($element);
$speed = $this->_validate_speed($speed);
-
+
if ($callback != '')
{
$callback = ", function(){\n{$callback}\n}";
}
-
- $str = "$({$element}).hide({$speed}{$callback});";
+
+ $str = "$({$element}).hide({$speed}{$callback});";
return $str;
}
-
+
// --------------------------------------------------------------------
/**
@@ -539,12 +539,12 @@ class CI_Jquery extends CI_Javascript {
function _removeClass($element = 'this', $class='')
{
$element = $this->_prep_element($element);
- $str = "$({$element}).removeClass(\"$class\");";
+ $str = "$({$element}).removeClass(\"$class\");";
return $str;
}
// --------------------------------------------------------------------
-
+
/**
* Slide Up
*
@@ -558,21 +558,21 @@ class CI_Jquery extends CI_Javascript {
*/
function _slideUp($element = 'this', $speed = '', $callback = '')
{
- $element = $this->_prep_element($element);
+ $element = $this->_prep_element($element);
$speed = $this->_validate_speed($speed);
-
+
if ($callback != '')
{
$callback = ", function(){\n{$callback}\n}";
}
-
- $str = "$({$element}).slideUp({$speed}{$callback});";
-
+
+ $str = "$({$element}).slideUp({$speed}{$callback});";
+
return $str;
}
-
+
// --------------------------------------------------------------------
-
+
/**
* Slide Down
*
@@ -588,19 +588,19 @@ class CI_Jquery extends CI_Javascript {
{
$element = $this->_prep_element($element);
$speed = $this->_validate_speed($speed);
-
+
if ($callback != '')
{
$callback = ", function(){\n{$callback}\n}";
}
-
- $str = "$({$element}).slideDown({$speed}{$callback});";
-
+
+ $str = "$({$element}).slideDown({$speed}{$callback});";
+
return $str;
}
// --------------------------------------------------------------------
-
+
/**
* Slide Toggle
*
@@ -616,19 +616,19 @@ class CI_Jquery extends CI_Javascript {
{
$element = $this->_prep_element($element);
$speed = $this->_validate_speed($speed);
-
+
if ($callback != '')
{
$callback = ", function(){\n{$callback}\n}";
}
-
- $str = "$({$element}).slideToggle({$speed}{$callback});";
-
+
+ $str = "$({$element}).slideToggle({$speed}{$callback});";
+
return $str;
}
-
+
// --------------------------------------------------------------------
-
+
/**
* Toggle
*
@@ -641,12 +641,12 @@ class CI_Jquery extends CI_Javascript {
function _toggle($element = 'this')
{
$element = $this->_prep_element($element);
- $str = "$({$element}).toggle();";
+ $str = "$({$element}).toggle();";
return $str;
}
-
+
// --------------------------------------------------------------------
-
+
/**
* Toggle Class
*
@@ -659,12 +659,12 @@ class CI_Jquery extends CI_Javascript {
function _toggleClass($element = 'this', $class='')
{
$element = $this->_prep_element($element);
- $str = "$({$element}).toggleClass(\"$class\");";
+ $str = "$({$element}).toggleClass(\"$class\");";
return $str;
}
-
+
// --------------------------------------------------------------------
-
+
/**
* Show
*
@@ -678,16 +678,16 @@ class CI_Jquery extends CI_Javascript {
*/
function _show($element = 'this', $speed = '', $callback = '')
{
- $element = $this->_prep_element($element);
+ $element = $this->_prep_element($element);
$speed = $this->_validate_speed($speed);
-
+
if ($callback != '')
{
$callback = ", function(){\n{$callback}\n}";
}
-
- $str = "$({$element}).show({$speed}{$callback});";
-
+
+ $str = "$({$element}).show({$speed}{$callback});";
+
return $str;
}
@@ -696,7 +696,7 @@ class CI_Jquery extends CI_Javascript {
/**
* Updater
*
- * An Ajax call that populates the designated DOM node with
+ * An Ajax call that populates the designated DOM node with
* returned content
*
* @access private
@@ -705,13 +705,13 @@ class CI_Jquery extends CI_Javascript {
* @param string optional parameters
* @return string
*/
-
+
function _updater($container = 'this', $controller, $options = '')
- {
+ {
$container = $this->_prep_element($container);
-
+
$controller = (strpos('://', $controller) === FALSE) ? $controller : $this->CI->config->site_url($controller);
-
+
// ajaxStart and ajaxStop are better choices here... but this is a stop gap
if ($this->CI->config->item('javascript_ajax_img') == '')
{
@@ -721,7 +721,7 @@ class CI_Jquery extends CI_Javascript {
{
$loading_notifier = '<img src=\'' . $this->CI->config->slash_item('base_url') . $this->CI->config->item('javascript_ajax_img') . '\' alt=\'Loading\' />';
}
-
+
$updater = "$($container).empty();\n"; // anything that was in... get it out
$updater .= "\t\t$($container).prepend(\"$loading_notifier\");\n"; // to replace with an image
@@ -741,7 +741,7 @@ class CI_Jquery extends CI_Javascript {
// --------------------------------------------------------------------
// Pre-written handy stuff
// --------------------------------------------------------------------
-
+
/**
* Zebra tables
*
@@ -753,8 +753,8 @@ class CI_Jquery extends CI_Javascript {
function _zebraTables($class = '', $odd = 'odd', $hover = '')
{
$class = ($class != '') ? '.'.$class : '';
-
- $zebra = "\t\$(\"table{$class} tbody tr:nth-child(even)\").addClass(\"{$odd}\");";
+
+ $zebra = "\t\$(\"table{$class} tbody tr:nth-child(even)\").addClass(\"{$odd}\");";
$this->jquery_code_for_compile[] = $zebra;
@@ -771,7 +771,7 @@ class CI_Jquery extends CI_Javascript {
// --------------------------------------------------------------------
// Plugins
// --------------------------------------------------------------------
-
+
/**
* Corner Plugin
*
@@ -793,7 +793,7 @@ class CI_Jquery extends CI_Javascript {
return "$(" . $this->_prep_element($element) . ").corner(".$corner_style.");";
}
-
+
// --------------------------------------------------------------------
/**
@@ -805,7 +805,7 @@ class CI_Jquery extends CI_Javascript {
* @return void
*/
function modal($src, $relative = FALSE)
- {
+ {
$this->jquery_code_for_load[] = $this->external($src, $relative);
}
@@ -897,7 +897,7 @@ class CI_Jquery extends CI_Javascript {
{
$this->jquery_code_for_compile[] = "\t$(" . $this->_prep_element($table) . ").tablesorter($options);\n";
}
-
+
// --------------------------------------------------------------------
// Class functions
// --------------------------------------------------------------------
@@ -912,7 +912,7 @@ class CI_Jquery extends CI_Javascript {
* @param string The code to execute
* @param string The event to pass
* @return string
- */
+ */
function _add_event($element, $js, $event)
{
if (is_array($js))
@@ -953,15 +953,15 @@ class CI_Jquery extends CI_Javascript {
$script = '$(document).ready(function() {' . "\n";
$script .= implode('', $this->jquery_code_for_compile);
$script .= '});';
-
+
$output = ($script_tags === FALSE) ? $script : $this->inline($script);
$this->CI->load->vars(array($view_var => $output));
}
-
+
// --------------------------------------------------------------------
-
+
/**
* Clear Compile
*
@@ -976,7 +976,7 @@ class CI_Jquery extends CI_Javascript {
}
// --------------------------------------------------------------------
-
+
/**
* Document Ready
*
@@ -992,7 +992,7 @@ class CI_Jquery extends CI_Javascript {
$js = array ($js);
}
-
+
foreach ($js as $script)
{
$this->jquery_code_for_compile[] = $script;
@@ -1016,7 +1016,7 @@ class CI_Jquery extends CI_Javascript {
$this->jquery_code_for_load[] = $library_src;
return $library_src;
}
-
+
// --------------------------------------------------------------------
/**
@@ -1036,10 +1036,10 @@ class CI_Jquery extends CI_Javascript {
{
$element = '"'.$element.'"';
}
-
+
return $element;
}
-
+
// --------------------------------------------------------------------
/**
@@ -1050,7 +1050,7 @@ class CI_Jquery extends CI_Javascript {
* @access private
* @param string
* @return string
- */
+ */
function _validate_speed($speed)
{
if (in_array($speed, array('slow', 'normal', 'fast')))
@@ -1061,7 +1061,7 @@ class CI_Jquery extends CI_Javascript {
{
$speed = '';
}
-
+
return $speed;
}
diff --git a/user_guide/changelog.html b/user_guide/changelog.html
index 4129046ff..945fafb65 100644
--- a/user_guide/changelog.html
+++ b/user_guide/changelog.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="./toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -59,17 +59,99 @@ Change Log
<p>The <img src="images/reactor-bullet.png" width="16" height="16" alt="Reactor Marker" /> indicates items that were contributed to CodeIgniter via CodeIgniter Reactor.</p>
+<h2>Version 2.0.3</h2>
+<p>Release Date: Not Released</p>
+
+<ul>
+ <li>Security
+ <ul>
+ <li>An improvement was made to the MySQL and MySQLi drivers to prevent exposing a potential vector for SQL injection on sites using multi-byte character sets in the database client connection. <p>An incompatibility in PHP versions &lt; 5.2.3 and MySQL &lt; 5.0.7 with <em>mysql_set_charset()</em> creates a situation where using multi-byte character sets on these environments may potentially expose a SQL injection attack vector. Latin-1, UTF-8, and other "low ASCII" character sets are unaffected on all environments.</p> <p class="critical">If you are running or considering running a multi-byte character set for your database connection, please pay close attention to the server environment you are deploying on to ensure you are not vulnerable.</p></li>
+ </ul>
+ <li>General Changes
+ <ul>
+ <li>Fixed a bug where there was a misspelling within a code comment in the index.php file.</li>
+ <li>Added Session Class userdata to the output profiler. Additionally, added a show/hide toggle on HTTP Headers, Session Data and Config Variables.</li>
+ <li>Removed internal usage of the <samp>EXT</samp> constant.</li>
+ <li>Visual updates to the welcome_message view file and default error templates. Thanks to <a href="https://bitbucket.org/danijelb">danijelb</a> for the pull request.</li>
+ <li>Added <samp>insert_batch()</samp> function to the PostgreSQL database driver. Thanks to epallerols for the patch.</li>
+
+ </ul>
+ </li>
+ <li>Helpers
+ <ul>
+ <li>Added an optional third parameter to <samp>heading()</samp> which allows adding html attributes to the rendered heading tag.</li>
+ </ul>
+ </li>
+ <li>Libraries
+ <ul>
+ <li>Altered Session to use a longer match against the user_agent string. See upgrade notes if using database sessions.</li>
+ </ul>
+ </li>
+</ul>
+
+<h3>Bug fixes for 2.0.3</h3>
+<ul>
+ <li class="reactor">Added ENVIRONMENT to reserved constants. (Reactor #196)</li>
+ <li class="reactor">Changed server check to ensure SCRIPT_NAME is defined. (Reactor #57)</li>
+ <li class="reactor">Removed <samp>APPPATH.'third_party'</samp> from the packages autoloader to negate needless file stats if no packages exist or if the developer does not load any other packages by default.</li>
+ <li>Fixed a bug (Reactor #231) where Sessions Library database table example SQL did not contain an index on last_activity. See <a href="installation/upgrade_203.html">Upgrade Notes</a>.</li>
+ <li>Fixed a bug (Reactor #229) where the Sessions Library example SQL in the documentation contained incorrect SQL.</li>
+ <li>Fixed a bug (Core #340) where when passing in the second parameter to $this->db->select(), column names in subsequent queries would not be properly escaped.</li>
+</ul>
+
+<h2>Version 2.0.2</h2>
+<p>Release Date: April 7, 2011<br />
+Hg Tag: v2.0.2</p>
+
+<ul>
+ <li>General changes
+ <ul>
+ <li>The <a href="./libraries/security.html">Security library</a> was moved to the core and is now loaded automatically. Please remove your loading calls.</li>
+ <li>The CI_SHA class is now deprecated. All supported versions of PHP provide a <kbd>sha1()</kbd> function.</li>
+ <li class="reactor"><kbd>constants.php</kbd> will now be loaded from the environment folder if available.</li>
+ <li class="reactor">Added language key error logging</li>
+ <li class="reactor">Made Environment Support optional. Comment out or delete the constant to stop environment checks.</li>
+ <li class="reactor">Added Environment Support for Hooks.</li>
+ <li class="reactor">Added CI_ Prefix to the <a href="libraries/caching.html">Cache driver</a>.</li>
+ <li class="reactor">Added <a href="./general/cli.html">CLI usage</a> documentation.</li>
+ </ul>
+ </li>
+ <li>Helpers
+ <ul>
+ <li>Removed the previously deprecated <kbd>dohash()</kbd> from the <a href="./helpers/security_helper.html">Security helper</a>; use <kbd>do_hash()</kbd> instead.</li>
+ <li class="reactor">Changed the 'plural' function so that it doesn't ruin the captalization of your string. It also take into consideration acronyms which are all caps.</li>
+ </ul>
+ </li>
+ <li>Database
+ <ul>
+ <li class="reactor"><kbd>$this->db->count_all_results()</kbd> will now return an integer instead of a string.</li>
+ </ul>
+ </li>
+</ul>
+
+<h3>Bug fixes for 2.0.2</h3>
+<ul>
+ <li class="reactor">Fixed a bug (Reactor #145) where the Output Library had parse_exec_vars set to protected.</li>
+ <li class="reactor">Fixed a bug (Reactor #80) where is_really_writable would create an empty file when on Windows or with safe_mode enabled.</li>
+ <li class="reactor">Fixed various bugs with User Guide.</li>
+ <li class="reactor">Added is_cli_request() method to documentation for <a href="libraries/input.html">Input class</a>.</li>
+ <li class="reactor">Added form_validation_lang entries for <kbd>decimal</kbd>, <kbd>less_than</kbd> and <kbd>greater_than</kbd>.</li>
+ <li class="reactor"><a href="https://bitbucket.org/ellislab/codeigniter-reactor/issue/153/escape-str-bug-in-mssql-driver">Fixed issue #153</a> Escape Str Bug in MSSQL driver.</li>
+ <li class="reactor"><a href="https://bitbucket.org/ellislab/codeigniter-reactor/issue/172/bug-in-chrome-and-form_open-in-201">Fixed issue #172</a> Google Chrome 11 posts incorrectly when action is empty.</li>
+
+</ul>
+
<h2>Version 2.0.1</h2>
-<p>Release Date: n/a<br />
-Hg Tag: n/a</p>
+<p>Release Date: March 15, 2011<br />
+Hg Tag: v2.0.1</p>
<ul>
<li>General changes
<ul>
<li>Added <kbd>$config['cookie_secure']</kbd> to the config file to allow requiring a secure (HTTPS) in order to set cookies.</li>
<li class="reactor">Added the constant <kbd>CI_CORE</kbd> to help differentiate between Core: TRUE and Reactor: FALSE.</li>
- <li class="reactor">Added an <kbd>ENVIRONMENT</kbd> constant in index.php, which affects PHP error reporting settings, and optionally,
- which configuration files are loaded (see below). Read more on the <a href="general/environments.html">Handling Environments</a> page.</li>
+ <li class="reactor">Added an <kbd>ENVIRONMENT</kbd> constant in index.php, which affects PHP error reporting settings, and optionally,
+ which configuration files are loaded (see below). Read more on the <a href="general/environments.html">Handling Environments</a> page.</li>
<li class="reactor">Added support for <a href="libraries/config.html#environments">environment-specific</a> configuration files.</li>
</ul>
</li>
@@ -82,6 +164,11 @@ Hg Tag: n/a</p>
<li class="reactor"><a href="libraries/output.html">Output Class</a> will now support method chaining.</li>
</ul>
</li>
+ <li>Helpers
+ <ul>
+ <li class="reactor">Changed the logic for <kbd>form_open()</kbd> in <a href="helpers/form_helper.html">Form helper</a>. If no value is passed it will submit to the current URL.</li>
+ </ul>
+ </li>
</ul>
<h3>Bug fixes for 2.0.1</h3>
@@ -101,15 +188,15 @@ Hg Tag: v2.0.0</p>
<ul>
<li>PHP 4 support is removed. CodeIgniter now requires PHP 5.1.6.</li>
<li>Scaffolding, having been deprecated for a number of versions, has been removed.</li>
- <li>Plugins have been removed, in favor of Helpers. The CAPTCHA plugin has been converted to a Helper and <a href="./helpers/captcha_helper.html">documented</a>. The JavaScript calendar plugin was removed due to the ready availability of great JavaScript calendars, particularly with jQuery.</li>
+ <li>Plugins have been removed, in favor of Helpers. The CAPTCHA plugin has been converted to a Helper and <a href="./helpers/captcha_helper.html">documented</a>. The JavaScript calendar plugin was removed due to the ready availability of great JavaScript calendars, particularly with jQuery.</li>
<li>Added new special Library type: <a href="./general/drivers.html">Drivers</a>.</li>
- <li class="reactor">Added full query-string support. See the config file for details.</li>
+ <li class="reactor">Added full query-string support. See the config file for details.</li>
<li>Moved the application folder outside of the system folder.</li>
<li>Moved system/cache and system/logs directories to the application directory.</li>
<li>Added routing overrides to the main index.php file, enabling the normal routing to be overridden on a per "index" file basis.</li>
- <li>Added the ability to set config values (or override config values) directly from data set in the main index.php file. This allows a single application to be used with multiple front controllers, each having its own config values.</li>
+ <li>Added the ability to set config values (or override config values) directly from data set in the main index.php file. This allows a single application to be used with multiple front controllers, each having its own config values.</li>
<li>Added <kbd>$config['directory_trigger']</kbd> to the config file so that a controller sub-directory can be specified when running _GET strings instead of URI segments.</li>
- <li>Added ability to set "Package" paths - specific paths where the Loader and Config classes should try to look first for a requested file. This allows distribution of sub-applications with their own libraries, models, config files, etc. in a single "package" directory. See the <a href="libraries/loader.html">Loader class</a> documentation for more details.</li>
+ <li>Added ability to set "Package" paths - specific paths where the Loader and Config classes should try to look first for a requested file. This allows distribution of sub-applications with their own libraries, models, config files, etc. in a single "package" directory. See the <a href="libraries/loader.html">Loader class</a> documentation for more details.</li>
<li>In-development code is now hosted at <a href="http://bitbucket.org/ellislab/codeigniter-reactor/">BitBucket</a>.</li>
<li>Removed the deprecated Validation Class.</li>
<li>Added CI_ Prefix to all core classes.</li>
@@ -176,7 +263,7 @@ Hg Tag: v2.0.0</p>
<li>Added <kbd>convert_accented_characters()</kbd> function to <a href="./helpers/text_helper.html">text helper</a>.</li>
<li>Added accept-charset to the list of inserted attributes of <kbd>form_open()</kbd> in the <a href="helpers/form_helper.html">Form Helper</a>.</li>
<li>Deprecated the <kbd>dohash()</kbd> function in favour of <kbd>do_hash()</kbd> for naming consistency.</li>
- <li>Non-backwards compatible change made to <kbd>get_dir_file_info()</kbd> in the <a href="helpers/file_helper.html">File Helper</a>. No longer recurses
+ <li>Non-backwards compatible change made to <kbd>get_dir_file_info()</kbd> in the <a href="helpers/file_helper.html">File Helper</a>. No longer recurses
by default so as to encourage responsible use (this function can cause server performance issues when used without caution).</li>
<li>Modified the second parameter of <kbd>directory_map()</kbd> in the <a href="helpers/directory_helper.html">Directory Helper</a> to accept an integer to specify recursion depth.</li>
<li>Modified <kbd>delete_files()</kbd> in the <a href="helpers/file_helper.html">File Helper</a> to return FALSE on failure.</li>
@@ -195,7 +282,7 @@ Hg Tag: v2.0.0</p>
<li>Other Changes
<ul>
<li>Added an optional second parameter to <kbd>show_404()</kbd> to disable logging.</li>
- <li>Updated loader to automatically apply the sub-class prefix as an option when loading classes. Class names can be prefixed with the standard "CI_" or the same prefix as the subclass prefix, or no prefix at all.</li>
+ <li>Updated loader to automatically apply the sub-class prefix as an option when loading classes. Class names can be prefixed with the standard "CI_" or the same prefix as the subclass prefix, or no prefix at all.</li>
<li>Increased randomness with <kbd>is_really_writable()</kbd> to avoid file collisions when hundreds or thousands of requests occur at once.</li>
<li>Switched some DIR_WRITE_MODE constant uses to FILE_WRITE_MODE where files and not directories are being operated on.</li>
<li><kbd>get_mime_by_extension()</kbd> is now case insensitive.</li>
@@ -405,15 +492,15 @@ Hg Tag: 1.7.0</p>
<ul>
<li>Libraries
<ul>
- <li>Added a new <a href="libraries/form_validation.html">Form Validation Class</a>. It simplifies setting rules and field names, supports arrays as field names, allows groups of validation rules to be saved in a config file, and adds some helper functions for use in view files. <strong>Please note that the old Validation class is now deprecated</strong>. We will leave it in the library folder for some time so that existing applications that use it will not break, but you are encouraged to migrate to the new version.</li>
+ <li>Added a new <a href="libraries/form_validation.html">Form Validation Class</a>. It simplifies setting rules and field names, supports arrays as field names, allows groups of validation rules to be saved in a config file, and adds some helper functions for use in view files. <strong>Please note that the old Validation class is now deprecated</strong>. We will leave it in the library folder for some time so that existing applications that use it will not break, but you are encouraged to migrate to the new version.</li>
<li>Updated the <a href="libraries/sessions.html">Sessions class</a> so that any custom data being saved gets stored to a database rather than the session cookie (assuming you are using a database to store session data), permitting much more data to be saved.</li>
<li>Added the ability to store libraries in subdirectories within either the main "libraries" or the local application "libraries" folder. Please see the <a href="libraries/loader.html">Loader class</a> for more info.</li>
<li>Added the ability to assign library objects to your own variable names when you use <kbd>$this->load->library()</kbd>. Please see the <a href="libraries/loader.html">Loader class</a> for more info.</li>
<li>Added controller class/method info to <a href="general/profiling.html">Profiler class</a> and support for multiple database connections.</li>
<li>Improved the "auto typography" feature and moved it out of the helper into its own <a href="libraries/typography.html">Typography Class</a>.</li>
<li>Improved performance and accuracy of <kbd>xss_clean()</kbd>, including reduction of false positives on image/file tests.</li>
- <li>Improved <a href="./libraries/parser.html">Parser class</a> to allow multiple calls to the parse() function. The output of each is appended in the output.</li>
- <li>Added <dfn>max_filename</dfn> option to set a file name length limit in the <a href="libraries/file_uploading.html">File Upload Class</a>.</li>
+ <li>Improved <a href="./libraries/parser.html">Parser class</a> to allow multiple calls to the parse() function. The output of each is appended in the output.</li>
+ <li>Added <dfn>max_filename</dfn> option to set a file name length limit in the <a href="libraries/file_uploading.html">File Upload Class</a>.</li>
<li>Added <dfn>set_status_header()</dfn> function to <a href="libraries/output.html">Output class</a>.</li>
<li>Modified <a href="libraries/pagination.html">Pagination</a> class to only output the "First" link when the link for page one would not be shown.</li>
<li>Added support for mb_strlen in the <a href="libraries/form_validation.html">Form Validation</a> class so that multi-byte languages will calculate string lengths properly.</li>
@@ -421,8 +508,8 @@ Hg Tag: 1.7.0</p>
</li>
<li>Database
<ul>
- <li>Improved Active Record class to allow full path column and table names: hostname.database.table.column. Also improved the alias handling.</li>
- <li>Improved how table and column names are escaped and prefixed. It now honors full path names when adding prefixes and escaping.</li>
+ <li>Improved Active Record class to allow full path column and table names: hostname.database.table.column. Also improved the alias handling.</li>
+ <li>Improved how table and column names are escaped and prefixed. It now honors full path names when adding prefixes and escaping.</li>
<li>Added Active Record caching feature to "update" and "delete" functions.</li>
<li>Added removal of non-printing control characters in <kbd>escape_str()</kbd> of DB drivers that do not have native PHP escaping mechanisms (mssql, oci8, odbc), to avoid potential SQL errors, and possible sources of SQL injection.</li>
<li>Added port support to MySQL, MySQLi, and MS SQL database drivers.</li>
@@ -431,10 +518,10 @@ Hg Tag: 1.7.0</p>
</li>
<li>Helpers
<ul>
- <li>Added several new "setting" functions to the <a href="helpers/form_helper.html">Form helper</a> that allow POST data to be retrieved and set into forms. These are intended to be used on their own, or with the new <a href="libraries/form_validation.html">Form Validation Class</a>.</li>
- <li>Added <kbd>current_url()</kbd> and uri_segments() to <a href="helpers/url_helper.html">URL helper</a>.</li>
+ <li>Added several new "setting" functions to the <a href="helpers/form_helper.html">Form helper</a> that allow POST data to be retrieved and set into forms. These are intended to be used on their own, or with the new <a href="libraries/form_validation.html">Form Validation Class</a>.</li>
+ <li>Added <kbd>current_url()</kbd> and uri_segments() to <a href="helpers/url_helper.html">URL helper</a>.</li>
<li>Altered <kbd>auto_link()</kbd> in the <a href="helpers/url_helper.html">URL helper</a> so that email addresses with "+" included will be linked.</li>
- <li>Added <kbd>meta()</kbd> function to <a href="helpers/html_helper.html">HTML helper</a>.</li>
+ <li>Added <kbd>meta()</kbd> function to <a href="helpers/html_helper.html">HTML helper</a>.</li>
<li>Improved accuracy of calculations in <a href="helpers/number_helper.html">Number helper</a>.</li>
<li>Removed added newlines ("\n") from most form and html helper functions.</li>
<li>Tightened up validation in the <a href="helpers/date_helper.html">Date helper</a> function <kbd>human_to_unix()</kbd>, and eliminated the POSIX regex.</li>
@@ -476,10 +563,10 @@ Hg Tag: 1.7.0</p>
<li>Fixed Oracle bug (#3306) that was preventing multiple queries in one action.</li>
<li>Fixed ODBC bug that was ignoring connection params due to its use of a constructor.</li>
<li>Fixed a DB driver bug with num_rows() that would cause an error with the Oracle driver.</li>
- <li>Fixed MS SQL bug (#4915). Added brackets around database name in MS SQL driver when selecting the database, in the event that reserved characters are used in the name.</li>
+ <li>Fixed MS SQL bug (#4915). Added brackets around database name in MS SQL driver when selecting the database, in the event that reserved characters are used in the name.</li>
<li>Fixed a DB caching bug (4718) in which the path was incorrect when no URI segments were present.</li>
- <li>Fixed Image_lib class bug #4562. A path was not defined for NetPBM.</li>
- <li>Fixed Image_lib class bug #4532. When cropping an image with identical height/width settings on output, a copy is made.</li>
+ <li>Fixed Image_lib class bug #4562. A path was not defined for NetPBM.</li>
+ <li>Fixed Image_lib class bug #4532. When cropping an image with identical height/width settings on output, a copy is made.</li>
<li>Fixed DB_driver bug (4900), in which a database error was not being logged correctly.</li>
<li>Fixed DB backup bug in which field names were not being escaped.</li>
<li>Fixed a DB Active Record caching bug in which multiple calls to cached data were not being honored.</li>
@@ -720,8 +807,8 @@ Hg Tag: 1.6.1</p>
<ul>
<li>Added <kbd>protect_identifiers()</kbd> in <a href="./database/active_record.html">Active Record</a>.</li>
<li>All AR queries are backticked if appropriate to the database.</li>
- <li>Added <kbd>where_in()</kbd>, <kbd>or_where_in()</kbd>, <kbd>where_not_in()</kbd>, <kbd>or_where_not_in()</kbd>, <kbd>not_like()</kbd> and <kbd>or_not_like()</kbd> to <a href="./database/active_record.html">Active Record</a>.</li>
- <li>Added support for <kbd>limit()</kbd> into <kbd>update()</kbd> and <kbd>delete()</kbd> statements in <a href="./database/active_record.html">Active Record</a>.</li>
+ <li>Added <kbd>where_in()</kbd>, <kbd>or_where_in()</kbd>, <kbd>where_not_in()</kbd>, <kbd>or_where_not_in()</kbd>, <kbd>not_like()</kbd> and <kbd>or_not_like()</kbd> to <a href="./database/active_record.html">Active Record</a>.</li>
+ <li>Added support for <kbd>limit()</kbd> into <kbd>update()</kbd> and <kbd>delete()</kbd> statements in <a href="./database/active_record.html">Active Record</a>.</li>
<li>Added <kbd>empty_table()</kbd> and <kbd>truncate_table()</kbd> to <a href="./database/active_record.html">Active Record</a>.</li>
<li>Added the ability to pass an array of tables to the <kbd>delete()</kbd> statement in <a href="./database/active_record.html">Active Record</a>.</li>
<li>Added <kbd>count_all_results()</kbd> function to <a href="./database/active_record.html">Active Record</a>.</li>
@@ -740,7 +827,7 @@ Hg Tag: 1.6.1</p>
<li>Added $this->db->dbprefix() to manually add database prefixes.</li>
<li>Added 'random' as an <kbd>order_by()</kbd> option , and removed &quot;rand()&quot; as a listed option as it was MySQL only.</li>
<li>Added a check for NULL fields in the MySQL database backup utility.</li>
- <li>Added &quot;constrain_by_prefix&quot; parameter to db-&gt;list_table() function. If set to TRUE it will limit the result to only table names with the current prefix.</li>
+ <li>Added &quot;constrain_by_prefix&quot; parameter to db-&gt;list_table() function. If set to TRUE it will limit the result to only table names with the current prefix.</li>
<li>Deprecated from Active Record; <kbd>getwhere()</kbd> for <kbd>get_where()</kbd>; <kbd>groupby()</kbd> for <kbd>group_by()</kbd>; <kbd>havingor()</kbd> for <kbd>having_or()</kbd>; <kbd>orderby()</kbd> for <kbd>order_by</kbd>; <kbd>orwhere()</kbd> for <kbd>or_where()</kbd>; and <kbd>orlike()</kbd> for <kbd>or_like()</kbd>.</li>
<li>Modified <kbd>csv_from_result()</kbd> to output CSV data more in the spirit of basic rules of RFC 4180.</li>
<li>Added 'char_set' and 'dbcollat' database configuration settings, to explicitly set the client communication properly.</li>
@@ -859,7 +946,7 @@ Hg Tag: 1.6.1</p>
<li>Fixed a bug in Validation where <kbd>valid_ip()</kbd> wasn't called properly.</li>
<li>Fixed a bug in Validation where individual error messages for checkboxes wasn't supported.</li>
<li>Fixed a bug in captcha calling an invalid PHP function.</li>
- <li>Fixed a bug in the cookie helper "set_cookie" function. It was not honoring the config settings.</li>
+ <li>Fixed a bug in the cookie helper "set_cookie" function. It was not honoring the config settings.</li>
<li>Fixed a bug that was making validation callbacks required even when not set as such.</li>
<li>Fixed a bug in the XML-RPC library so if a type is specified, a more intelligent decision is made as to the default type.</li>
<li>Fixed an example of comma-separated emails in the email library documentation.</li>
@@ -871,7 +958,7 @@ Hg Tag: 1.6.1</p>
<li>Fixed a typo in the docblock comments that had CodeIgniter spelled CodeIgnitor.</li>
<li>Fixed a typo in the <a href="./helpers/string_helper.html">String Helper</a> (uniquid changed to uniqid).</li>
<li>Fixed typos in the email Language class (email_attachment_unredable, email_filed_smtp_login), and FTP Class (ftp_unable_to_remame).</li>
- <li>Added a stripslashes() into the Upload Library.</li>
+ <li>Added a stripslashes() into the Upload Library.</li>
<li>Fixed a series of grammatical and spelling errors in the language files.</li>
<li>Fixed assorted user guide typos.</li>
</ul>
@@ -883,10 +970,10 @@ Hg Tag: 1.6.1</p>
<li>Added array to string into the <a href="general/profiling.html">profiler</a>.</li>
<li>Added some additional mime types in application/config/mimes.php.</li>
<li>Added filename_security() method to <a href="./libraries/input.html">Input library</a>.</li>
- <li>Added some additional arguments to the <a href="./helpers/inflector_helper.html">Inflection helper</a> singular() to compensate for words ending in "s". Also added a force parameter to pluralize().</li>
- <li>Added $config['charset'] to the config file. Default value is 'UTF-8', used in some string handling functions.</li>
+ <li>Added some additional arguments to the <a href="./helpers/inflector_helper.html">Inflection helper</a> singular() to compensate for words ending in "s". Also added a force parameter to pluralize().</li>
+ <li>Added $config['charset'] to the config file. Default value is 'UTF-8', used in some string handling functions.</li>
<li>Fixed MSSQL insert_id().</li>
- <li>Fixed a logic error in the DB trans_status() function. It was incorrectly returning TRUE on failure and FALSE on success.</li>
+ <li>Fixed a logic error in the DB trans_status() function. It was incorrectly returning TRUE on failure and FALSE on success.</li>
<li>Fixed a bug that was allowing multiple load attempts on extended classes.</li>
<li>Fixed a bug in the bootstrap file that was incorrectly attempting to discern the full server path even when it was explicity set by the user.</li>
<li>Fixed a bug in the escape_str() function in the MySQL driver.</li>
@@ -902,7 +989,7 @@ Hg Tag: 1.6.1</p>
<li>Fixed a bug where one could unset certain PHP superglobals by setting them via GET or POST data</li>
<li>Fixed an undefined function error in the insert_id() function of the PostgreSQL driver</li>
<li>Fixed various doc typos. </li>
- <li>Documented two functions from the <a href="./helpers/string_helper.html">String helper </a> that were missing from the user guide: trim_slashes() and reduce_double_slashes().</li>
+ <li>Documented two functions from the <a href="./helpers/string_helper.html">String helper </a> that were missing from the user guide: trim_slashes() and reduce_double_slashes().</li>
<li>Docs now validate to XHTML 1 transitional</li>
<li>Updated the XSS Filtering to take into account the IE expression() ability and improved certain deletions to prevent possible exploits</li>
<li>Modified the Router so that when Query Strings are Enabled, the controller trigger and function trigger values are sanitized for filename include security.</li>
@@ -910,7 +997,7 @@ Hg Tag: 1.6.1</p>
<li>Modified XSS Cleaning routine to be more performance friendly and compatible with PHP 5.2's new PCRE backtrack and recursion limits.</li>
<li>Modified the <a href="./helpers/url_helper.html">URL Helper</a> to type cast the $title as a string in case a numeric value is supplied</li>
<li>Modified Form Helper form_dropdown() to type cast the keys and values of the options array as strings, allowing numeric values to be properly set as 'selected'</li>
- <li>Deprecated the use if <kbd>is_numeric()</kbd> in various places since it allows periods. Due to compatibility problems with <kbd>ctype_digit()</kbd>, making it unreliable in some installations, the following regular expression was used instead: <kbd>preg_match("/[^0-9]/", $n)</kbd></li>
+ <li>Deprecated the use if <kbd>is_numeric()</kbd> in various places since it allows periods. Due to compatibility problems with <kbd>ctype_digit()</kbd>, making it unreliable in some installations, the following regular expression was used instead: <kbd>preg_match("/[^0-9]/", $n)</kbd></li>
<li>Deprecated: APPVER has been deprecated and replaced with CI_VERSION for clarity. </li>
</ul>
<h2>Version 1.5.3</h2>
@@ -936,7 +1023,7 @@ Hg Tag: 1.6.1</p>
<li>Fixed a bug in the <a href="./helpers/download_helper.html">download_helper</a> that was causing Internet Explorer to load rather than download </li>
<li>Fixed a bug in the Active Record Join function that was not taking table prefixes into consideration.</li>
<li>Removed unescaped variables in error messages of Input and Router classes</li>
- <li>Fixed a bug in the Loader that was causing errors on Libraries loaded twice. A debug message is now silently made in the log. </li>
+ <li>Fixed a bug in the Loader that was causing errors on Libraries loaded twice. A debug message is now silently made in the log. </li>
<li>Fixed a bug in the <a href="./helpers/form_helper.html">form helper</a> that gave textarea a value attribute </li>
<li>Fixed a bug in the <a href="./libraries/image_lib.php">Image Library</a> that was ignoring resizing the same size image </li>
<li>Fixed some doc typos.</li>
@@ -989,10 +1076,10 @@ Hg Tag: 1.6.1</p>
<li>Added <a href="./database/results.html">$query->free_result()</a> to database class.</li>
<li>Added <a href="./database/fields.html">$query->list_fields()</a> function to database class</li>
<li>Added <a href="./database/helpers.html">$this->db->platform()</a> function</li>
-<li>Added new <a href="./helpers/file_helper.html">File Helper</a>: get_filenames()</li>
-<li>Added new helper: <a href="./helpers/smiley_helper.html">Smiley Helper</a></li>
-<li>Added support for &lt;ul> and &lt;ol> lists in the <a href="./helpers/html_helper.html">HTML Helper</a></li>
-<li>Added the ability to rewrite <a href="./general/alternative_php.html">short tags</a> on-the-fly, converting them to standard PHP statements, for those servers that do not support short tags. This allows the cleaner syntax to be used regardless of whether it's supported by the server.</li>
+<li>Added new <a href="./helpers/file_helper.html">File Helper</a>: get_filenames()</li>
+<li>Added new helper: <a href="./helpers/smiley_helper.html">Smiley Helper</a></li>
+<li>Added support for &lt;ul> and &lt;ol> lists in the <a href="./helpers/html_helper.html">HTML Helper</a></li>
+<li>Added the ability to rewrite <a href="./general/alternative_php.html">short tags</a> on-the-fly, converting them to standard PHP statements, for those servers that do not support short tags. This allows the cleaner syntax to be used regardless of whether it's supported by the server.</li>
<li>Added the ability to <a href="./general/managing_apps.html">rename or relocate the "application" folder</a>.</li>
<li>Added more thorough initialization in the upload class so that all class variables are reset.</li>
<li>Added "is_numeric" to validation, which uses the native PHP is_numeric function.</li>
@@ -1000,7 +1087,7 @@ Hg Tag: 1.6.1</p>
<li>Moved most of the functions in the Controller class into the Loader class, allowing fewer reserved function names for controllers when running under PHP 5.</li>
<li>Updated the DB Result class to return an empty array when $query->result() doesn't produce a result.</li>
<li>Updated the <dfn>input->cookie()</dfn> and <dfn>input->post()</dfn> functions in <a href="./libraries/input.html">Input Class</a> to permit arrays contained cookies that are arrays to be run through the XSS filter.</li>
-<li>Documented three functions from the <a href="./libraries/validation.html">Validation class</a> that were missing from the user guide: set_select(), set_radio(), and set_checkbox().</li>
+<li>Documented three functions from the <a href="./libraries/validation.html">Validation class</a> that were missing from the user guide: set_select(), set_radio(), and set_checkbox().</li>
<li>Fixed a bug in the Email class related to SMTP Helo data.</li>
<li>Fixed a bug in the word wrapping helper and function in the email class.</li>
<li>Fixed a bug in the validation class.</li>
@@ -1011,9 +1098,9 @@ Hg Tag: 1.6.1</p>
<li>Fixed a pagination bug that was permitting negative values in the URL.</li>
<li>Fixed an oversight in which the Loader class was not allowed to be extended.</li>
<li>Changed <dfn>_get_config()</dfn> to <dfn>get_config()</dfn> since the function is not a private one.</li>
-<li><strong>Deprecated "init" folder</strong>. Initialization happens automatically now. <a href="./general/creating_libraries.html">Please see documentation</a>.</li>
-<li><strong>Deprecated</strong> $this->db->field_names() USE $this->db->list_fields()</li>
-<li><strong>Deprecated</strong> the <dfn>$config['log_errors']</dfn> item from the config.php file. Instead, <dfn>$config['log_threshold']</dfn> can be set to "0" to turn it off.</li>
+<li><strong>Deprecated "init" folder</strong>. Initialization happens automatically now. <a href="./general/creating_libraries.html">Please see documentation</a>.</li>
+<li><strong>Deprecated</strong> $this->db->field_names() USE $this->db->list_fields()</li>
+<li><strong>Deprecated</strong> the <dfn>$config['log_errors']</dfn> item from the config.php file. Instead, <dfn>$config['log_threshold']</dfn> can be set to "0" to turn it off.</li>
</ul>
@@ -1024,10 +1111,10 @@ Hg Tag: 1.6.1</p>
<ul>
<li>Added a new feature that passes URI segments directly to your function calls as parameters. See the <a href="./general/controllers.html">Controllers</a> page for more info.</li>
-<li>Added support for a function named <dfn>_output()</dfn>, which when used in your controllers will received the final rendered output from the output class. More info in the <a href="controllers.html">Controllers</a> page.</li>
+<li>Added support for a function named <dfn>_output()</dfn>, which when used in your controllers will received the final rendered output from the output class. More info in the <a href="controllers.html">Controllers</a> page.</li>
<li>Added several new functions in the <a href="./libraries/uri.html">URI Class</a> to let you retrieve and manipulate URI segments that have been re-routed using the <a href="routing.html">URI Routing</a> feature. Previously, the URI class did not permit you to access any re-routed URI segments, but now it does.</li>
<li>Added <a href="./libraries/output.html">$this->output->set_header()</a> function, which allows you to set server headers.</li>
-<li>Updated plugins, helpers, and language classes to allow your <dfn>application</dfn> folder to contain its own plugins, helpers, and language folders. Previously they were always treated as global for your entire installation. If your application folder contains any of these resources they will be used <em>instead</em> the global ones.</li>
+<li>Updated plugins, helpers, and language classes to allow your <dfn>application</dfn> folder to contain its own plugins, helpers, and language folders. Previously they were always treated as global for your entire installation. If your application folder contains any of these resources they will be used <em>instead</em> the global ones.</li>
<li>Added <a href="./helpers/inflector_helper.html">Inflector helper</a>.</li>
<li>Added <dfn>element()</dfn> function in the <a href="./helpers/array_helper.html">array helper</a>.</li>
<li>Added <dfn>RAND()</dfn> to active record <dfn>orderby()</dfn> function.</li>
@@ -1043,8 +1130,8 @@ Hg Tag: 1.6.1</p>
<li>Fixed an oversight in the upload class. An item mentioned in the 1.4 changelog was missing.</li>
<li>Added some code to allow email attachments to be reset when sending batches of email.</li>
<li>Deprecated the <dfn>application/scripts</dfn> folder. It will continue to work for legacy users, but it is recommended that you create your own
-<a href="./general/libraries.html">libraries</a> or <a href="./general/models.html">models</a> instead. It was originally added before CI had user libraries or models, but it's not needed anymore.</li>
-<li>Deprecated the <dfn>$autoload['core']</dfn> item from the <kbd>autoload.php</kbd> file. Instead, please now use: <kbd>$autoload['libraries']</kbd></li>
+<a href="./general/libraries.html">libraries</a> or <a href="./general/models.html">models</a> instead. It was originally added before CI had user libraries or models, but it's not needed anymore.</li>
+<li>Deprecated the <dfn>$autoload['core']</dfn> item from the <kbd>autoload.php</kbd> file. Instead, please now use: <kbd>$autoload['libraries']</kbd></li>
<li>Deprecated the following database functions: $this->db->smart_escape_str() and $this->db->fields().</li>
</ul>
@@ -1055,7 +1142,7 @@ Hg Tag: 1.6.1</p>
<ul>
<li>Added <a href="./general/hooks.html">Hooks</a> feature, enabling you to tap into and modify the inner workings of the framework without hacking the core files.</li>
-<li>Added the ability to organize controller files <a href="./general/controllers.html">into sub-folders</a>. Kudos to Marco for <a href="http://codeigniter.com/forums/viewthread/627/">suggesting</a> this (and the next two) feature.</li>
+<li>Added the ability to organize controller files <a href="./general/controllers.html">into sub-folders</a>. Kudos to Marco for <a href="http://codeigniter.com/forums/viewthread/627/">suggesting</a> this (and the next two) feature.</li>
<li>Added regular expressions support for <a href="./general/routing.html">routing rules</a>.</li>
<li>Added the ability to <a href="./general/controllers.html">remap function calls</a> within your controllers.</li>
<li>Added the ability to <a href="./general/core_classes.html">replace core system classes</a> with your own classes.</li>
@@ -1070,7 +1157,7 @@ Hg Tag: 1.6.1</p>
<li>Updated the URI Protocol code to allow more options so that URLs will work more reliably in different environments.</li>
<li>Updated the <dfn>form_open()</dfn> helper to allow the GET method to be used.</li>
<li>Updated the MySQLi <dfn>execute()</dfn> function with some code to help prevent lost connection errors.</li>
-<li>Updated the SQLite Driver to check for object support before attempting to return results as objects. If unsupported it returns an array.</li>
+<li>Updated the SQLite Driver to check for object support before attempting to return results as objects. If unsupported it returns an array.</li>
<li>Updated the Models loader function to allow multiple loads of the same model.</li>
<li>Updated the MS SQL driver so that single quotes are escaped.</li>
<li>Updated the Postgres and ODBC drivers for better compatibility.</li>
@@ -1078,7 +1165,7 @@ Hg Tag: 1.6.1</p>
<li>Removed some references that were interfering with PHP 4.4.1 compatibility.</li>
<li>Removed backticks from Postgres class since these are not needed.</li>
<li>Renamed <dfn>display()</dfn> to <dfn>_display()</dfn> in the Output class to make it clear that it's a private function.</li>
-<li>Deprecated the hash() function due to a naming conflict with a native PHP function with the same name. Please use <kbd>dohash()</kbd> instead.</li>
+<li>Deprecated the hash() function due to a naming conflict with a native PHP function with the same name. Please use <kbd>dohash()</kbd> instead.</li>
<li>Fixed an bug that was preventing the input class from unsetting GET variables.</li>
<li>Fixed a router bug that was making it too greedy when matching end segments.</li>
<li>Fixed a bug that was preventing multiple discrete database calls.</li>
@@ -1112,11 +1199,11 @@ Hg Tag: 1.6.1</p>
<ul>
<li>Models do <strong>not</strong> connect automatically to the database as of this version. <a href="./general/models.html">More info here</a>.</li>
-<li>Updated the Sessions class to utilize the active record class when running session related queries. Previously the queries assumed MySQL syntax.</li>
+<li>Updated the Sessions class to utilize the active record class when running session related queries. Previously the queries assumed MySQL syntax.</li>
<li>Updated alternator() function to re-initialize when called with no arguments, allowing multiple calls.</li>
<li>Fixed a bug in the active record "having" function.</li>
<li>Fixed a problem in the validation class which was making checkboxes be ignored when required.</li>
-<li>Fixed a bug in the word_limiter() helper function. It was cutting off the fist word.</li>
+<li>Fixed a bug in the word_limiter() helper function. It was cutting off the fist word.</li>
<li>Fixed a bug in the xss_clean function due to a PHP bug that affects some versions of html_entity_decode.</li>
<li>Fixed a validation bug that was preventing rules from being set twice in one controller.</li>
<li>Fixed a calendar bug that was not letting it use dynamically loaded languages.</li>
@@ -1134,7 +1221,7 @@ Hg Tag: 1.6.1</p>
<ul>
<li>Changed the behavior of the validation class such that if a "required" rule is NOT explicitly stated for a field then all other tests get ignored.</li>
<li>Fixed a bug in the Controller class that was causing it to look in the local "init" folder instead of the main system one.</li>
-<li>Fixed a bug in the init_pagination file. The $config item was not being set correctly.</li>
+<li>Fixed a bug in the init_pagination file. The $config item was not being set correctly.</li>
<li>Fixed a bug in the auto typography helper that was causing inconsistent behavior.</li>
<li>Fixed a couple bugs in the Model class.</li>
<li>Fixed some documentation typos and errata.</li>
@@ -1147,8 +1234,8 @@ Hg Tag: 1.6.1</p>
<ul>
<li>Added a <a href="./libraries/unit_testing.html">Unit Testing Library</a>.</li>
-<li>Added the ability to pass objects to the <strong>insert()</strong> and <strong>update()</strong> database functions.
-This feature enables you to (among other things) use your <a href="./general/models.html">Model class</a> variables to run queries with. See the Models page for details.</li>
+<li>Added the ability to pass objects to the <strong>insert()</strong> and <strong>update()</strong> database functions.
+This feature enables you to (among other things) use your <a href="./general/models.html">Model class</a> variables to run queries with. See the Models page for details.</li>
<li>Added the ability to pass objects to the <a href="./general/views.html">view loading function</a>: $this->load->view('my_view', <var>$object</var>);</li>
<li>Added <kbd>getwhere</kbd> function to <a href="./database/active_record.html">Active Record class</a>.</li>
<li>Added <kbd>count_all</kbd> function to <a href="./database/active_record.html">Active Record class</a>.</li>
@@ -1172,10 +1259,10 @@ This feature enables you to (among other things) use your <a href="./general/mo
<li>Redesigned the database libraries to support additional RDBMs (Postgres, MySQLi, etc.).</li>
<li>Redesigned the <a href="./database/active_record.html">Active Record class</a> to enable more varied types of queries with simpler syntax, and advanced features like JOINs.</li>
<li>Added a feature to the database class that lets you run <a href="./database/call_function.html">custom function calls</a>.</li>
-<li>Added support for <a href="controllers.html">private functions</a> in your controllers. Any controller function name that starts with an underscore will not be served by a URI request.</li>
+<li>Added support for <a href="controllers.html">private functions</a> in your controllers. Any controller function name that starts with an underscore will not be served by a URI request.</li>
<li>Added the ability to pass your own initialization parameters to your <a href="creating_libraries.html">custom core libraries</a> when using $this->load->library()</li>
-<li>Added support for running standard <a href="urls.html">query string URLs</a>. These can be optionally enabled in your config file.</li>
-<li>Added the ability to <a href="urls.html">specify a "suffix"</a>, which will be appended to your URLs. For example, you could add .html to your URLs, making them appear static. This feature is enabled in your config file.</li>
+<li>Added support for running standard <a href="urls.html">query string URLs</a>. These can be optionally enabled in your config file.</li>
+<li>Added the ability to <a href="urls.html">specify a "suffix"</a>, which will be appended to your URLs. For example, you could add .html to your URLs, making them appear static. This feature is enabled in your config file.</li>
<li>Added a new error template for use with native PHP errors.</li>
<li>Added "alternator" function in the <a href="./helpers/string_helper.html">string helpers</a>.</li>
<li>Removed slashing from the input class. After much debate we decided to kill this feature.</li>
@@ -1186,7 +1273,7 @@ all controller methods are prefixed with <dfn>_ci</dfn> to avoid controller coll
<li>Deprecated: <var>$this->db->use_table()</var> has been deprecated. Please read the <a href="./database/active_record.html">Active Record</a> page for information.</li>
<li>Deprecated: <var>$this->db->smart_escape_str()</var> has been deprecated. Please use this instead: <var>$this->db->escape()</var></li>
<li>Fixed a bug in the exception handler which was preventing some PHP errors from showing up.</li>
-<li>Fixed a typo in the URI class. $this->total_segment() should be plural: $this->total_segments()</li>
+<li>Fixed a typo in the URI class. $this->total_segment() should be plural: $this->total_segments()</li>
<li>Fixed some typos in the default calendar template</li>
<li>Fixed some typos in the user guide</li>
</ul>
@@ -1204,12 +1291,12 @@ all controller methods are prefixed with <dfn>_ci</dfn> to avoid controller coll
<ul>
<li>Redesigned some internal aspects of the framework to resolve scoping problems that surfaced during the beta tests. The problem was most notable when instantiating classes in your constructors, particularly if those classes in turn did work in their constructors.</li>
<li>Added a global function named <a href="ancillary_classes.html">get_instance()</a> allowing the main CodeIgniter object to be accessible throughout your own classes.</li>
-<li>Added new <a href="./helpers/file_helper.html">File Helper</a>: delete_files()</li>
-<li>Added new <a href="./helpers/url_helper.html">URL Helpers</a>: base_url(), index_page()</li>
+<li>Added new <a href="./helpers/file_helper.html">File Helper</a>: delete_files()</li>
+<li>Added new <a href="./helpers/url_helper.html">URL Helpers</a>: base_url(), index_page()</li>
<li>Added the ability to create your own <a href="creating_libraries.html">core libraries</a> and store them in your local application directory.</li>
<li>Added an <kbd>overwrite</kbd> option to the <a href="./libraries/file_uploading.html">Upload class</a>, enabling files to be overwritten rather than having the file name appended.</li>
<li>Added Javascript Calendar plugin.</li>
-<li>Added search feature to user guide. Note: This is done using Google, which at the time of this writing has not crawled all the pages of the docs.</li>
+<li>Added search feature to user guide. Note: This is done using Google, which at the time of this writing has not crawled all the pages of the docs.</li>
<li>Updated the parser class so that it allows tag pars within other tag pairs.</li>
<li>Fixed a bug in the DB "where" function.</li>
<li>Fixed a bug that was preventing custom config files to be auto-loaded.</li>
diff --git a/user_guide/database/active_record.html b/user_guide/database/active_record.html
index f2f33e212..566b260c9 100644
--- a/user_guide/database/active_record.html
+++ b/user_guide/database/active_record.html
@@ -27,7 +27,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -59,12 +59,12 @@ Active Record
<p>CodeIgniter uses a modified version of the Active Record Database Pattern.
This pattern allows information to be retrieved, inserted, and updated in your database with minimal scripting.
In some cases only one or two lines of code are necessary to perform a database action.
-CodeIgniter does not require that each database table be its own class file. It instead provides a more simplified interface.</p>
+CodeIgniter does not require that each database table be its own class file. It instead provides a more simplified interface.</p>
<p>Beyond simplicity, a major benefit to using the Active Record features is that it allows you to create database independent applications, since the query syntax
-is generated by each database adapter. It also allows for safer queries, since the values are escaped automatically by the system.</p>
+is generated by each database adapter. It also allows for safer queries, since the values are escaped automatically by the system.</p>
-<p class="important"><strong>Note:</strong> If you intend to write your own queries you can disable this class in your database config file, allowing the core database library and adapter to utilize fewer resources.<br /></p>
+<p class="important"><strong>Note:</strong> If you intend to write your own queries you can disable this class in your database config file, allowing the core database library and adapter to utilize fewer resources.<br /></p>
<ul>
<li><a href="#select">Selecting Data</a></li>
@@ -84,7 +84,7 @@ is generated by each database adapter. It also allows for safer queries, since
<h2>$this->db->get();</h2>
-<p>Runs the selection query and returns the result. Can be used by itself to retrieve all records from a table:</p>
+<p>Runs the selection query and returns the result. Can be used by itself to retrieve all records from a table:</p>
<code>$query = $this->db->get('mytable');<br />
<br />
@@ -126,7 +126,7 @@ $this->db->select('title, content, date');<br />
$query = $this->db->get('mytable');<br />
<br />
// Produces: SELECT title, content, date FROM mytable</code></p>
-<p class="important"><strong>Note:</strong> If you are selecting all (*) from a table you do not need to use this function. When omitted, CodeIgniter assumes you wish to SELECT *</p>
+<p class="important"><strong>Note:</strong> If you are selecting all (*) from a table you do not need to use this function. When omitted, CodeIgniter assumes you wish to SELECT *</p>
<p>$this-&gt;db-&gt;select() accepts an optional second parameter. If you set it to FALSE, CodeIgniter will not try to protect your field or table names with backticks. This is useful if you need a compound select statement.</p>
<p><code>$this-&gt;db-&gt;select('(SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4') AS amount_paid', FALSE); <br />
@@ -278,7 +278,7 @@ $this->db->or_where('id >', $id);
<h2>$this->db->where_in();</h2>
-<p>Generates a WHERE field IN ('item', 'item') SQL query joined with AND if appropriate</p>
+<p>Generates a WHERE field IN ('item', 'item') SQL query joined with AND if appropriate</p>
<p><code>
$names = array('Frank', 'Todd', 'James');<br />
$this->db->where_in('username', $names);<br />
@@ -322,7 +322,7 @@ $this->db->or_where('id >', $id);
<code>$this->db->like('title', 'match');<br />
$this->db->like('body', 'match');
<br /><br />
- // WHERE title LIKE '%match%' AND body LIKE '%match%</code>
+ // WHERE title LIKE '%match%' AND body LIKE '%match%</code>
If you want to control where the wildcard (%) is placed, you can use an optional third argument. Your options are 'before', 'after' and 'both' (which is the default).
<code>$this->db->like('title', 'match', 'before');
<br />
@@ -340,7 +340,7 @@ $this->db->or_where('id >', $id);
$array = array('title' => $match, 'page1' => $match, 'page2' => $match);<br /><br />
$this->db->like($array);
- <br /><br />// WHERE title LIKE '%match%' AND page1 LIKE '%match%' AND page2 LIKE '%match%'</code></li>
+ <br /><br />// WHERE title LIKE '%match%' AND page1 LIKE '%match%' AND page2 LIKE '%match%'</code></li>
</ol>
@@ -351,7 +351,7 @@ $this->db->or_where('id >', $id);
$this->db->like('title', 'match');<br />
$this->db->or_like('body', $match);
<br />
-<br />// WHERE title LIKE '%match%' OR body LIKE '%match%'</code>
+<br />// WHERE title LIKE '%match%' OR body LIKE '%match%'</code>
@@ -367,7 +367,7 @@ $this->db->or_like('body', $match);
<code> $this-&gt;db-&gt;like('title', 'match');<br />
$this-&gt;db-&gt;or_not_like('body', 'match'); <br />
<br />
-// WHERE title LIKE '%match% OR body NOT LIKE '%match%'</code>
+// WHERE title LIKE '%match% OR body NOT LIKE '%match%'</code>
<h2>$this->db->group_by();</h2>
<p>Permits you to write the GROUP BY portion of your query:</p>
@@ -385,7 +385,7 @@ $this-&gt;db-&gt;or_not_like('body', 'match'); <br />
<h2> $this-&gt;db-&gt;distinct();<br />
</h2>
-<p>Adds the &quot;DISTINCT&quot; keyword to a query</p>
+<p>Adds the &quot;DISTINCT&quot; keyword to a query</p>
<p><code>$this-&gt;db-&gt;distinct();<br />
$this-&gt;db-&gt;get('table');<br />
<br />
@@ -397,7 +397,7 @@ $this-&gt;db-&gt;or_not_like('body', 'match'); <br />
<br />
// Produces: HAVING user_id = 45<br />
<br />
-$this-&gt;db-&gt;having('user_id', 45); <br />
+$this-&gt;db-&gt;having('user_id', 45); <br />
// Produces: HAVING user_id = 45<br />
<br />
</code>
@@ -409,16 +409,16 @@ $this-&gt;db-&gt;having('user_id', 45); <br />
<br />
// Produces: HAVING title = 'My Title', id < 45</code></p>
<p>If you are using a database that CodeIgniter escapes queries for, you can prevent escaping content by passing an optional third argument, and setting it to FALSE.</p>
-<p><code>$this-&gt;db-&gt;having('user_id', 45); <br />
+<p><code>$this-&gt;db-&gt;having('user_id', 45); <br />
// Produces: HAVING `user_id` = 45 in some databases such as MySQL
<br />
- $this-&gt;db-&gt;having('user_id', 45, FALSE); <br />
+ $this-&gt;db-&gt;having('user_id', 45, FALSE); <br />
// Produces: HAVING user_id = 45</code></p>
<h2>$this-&gt;db-&gt;or_having();</h2>
<p>Identical to having(), only separates multiple clauses with &quot;OR&quot;.</p>
<h2>$this->db->order_by();</h2>
<p>Lets you set an ORDER BY clause. The first parameter contains the name of the column you would like to order by.
-The second parameter lets you set the direction of the result. Options are <kbd>asc</kbd> or <kbd>desc</kbd>, or <kbd>random</kbd>. </p>
+The second parameter lets you set the direction of the result. Options are <kbd>asc</kbd> or <kbd>desc</kbd>, or <kbd>random</kbd>. </p>
<code>$this->db->order_by("title", "desc");
<br />
@@ -455,12 +455,12 @@ $this->db->limit(10);<br />
<code>
$this->db->limit(10, 20);<br />
<br />
-// Produces: LIMIT 20, 10 (in MySQL. Other databases have slightly different syntax)</code>
+// Produces: LIMIT 20, 10 (in MySQL. Other databases have slightly different syntax)</code>
<h2>$this->db->count_all_results();</h2>
-<p>Permits you to determine the number of rows in a particular Active Record query. Queries will accept Active Record restrictors such as where(), or_where(), like(), or_like(), etc. Example:</p>
+<p>Permits you to determine the number of rows in a particular Active Record query. Queries will accept Active Record restrictors such as where(), or_where(), like(), or_like(), etc. Example:</p>
<code>echo $this->db->count_all_results('<var>my_table</var>');<br />
// Produces an integer, like 25<br />
@@ -472,7 +472,7 @@ echo $this-&gt;db-&gt;count_all_results();<br />
<h2>$this->db->count_all();</h2>
-<p>Permits you to determine the number of rows in a particular table. Submit the table name in the first parameter. Example:</p>
+<p>Permits you to determine the number of rows in a particular table. Submit the table name in the first parameter. Example:</p>
<code>echo $this->db->count_all('<var>my_table</var>');<br />
<br />
@@ -485,7 +485,7 @@ echo $this-&gt;db-&gt;count_all_results();<br />
<h2>$this->db->insert();</h2>
<p>Generates an insert string based on the data you supply, and runs the query. You can either pass an
-<strong>array</strong> or an <strong>object</strong> to the function. Here is an example using an array:</p>
+<strong>array</strong> or an <strong>object</strong> to the function. Here is an example using an array:</p>
<code>
$data = array(<br />
@@ -505,9 +505,9 @@ $this->db->insert('mytable', $data);
<code>
/*<br />
&nbsp;&nbsp;&nbsp;&nbsp;class Myclass {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $title = 'My Title';<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $content = 'My Content';<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $date = 'My Date';<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $title = 'My Title';<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $content = 'My Content';<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $date = 'My Date';<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
*/<br />
<br />
@@ -517,13 +517,13 @@ $this->db->insert('mytable', $object);
<br /><br />
// Produces: INSERT INTO mytable (title, content, date) VALUES ('My Title', 'My Content', 'My Date')</code>
-<p>The first parameter will contain the table name, the second is an associative array of values.</p>
+<p>The first parameter will contain the table name, the second is an object.</p>
<p class="important"><strong>Note:</strong> All values are escaped automatically producing safer queries.</p>
<h2>$this->db->insert_batch();</h2>
<p>Generates an insert string based on the data you supply, and runs the query. You can either pass an
-<strong>array</strong> or an <strong>object</strong> to the function. Here is an example using an array:</p>
+<strong>array</strong> or an <strong>object</strong> to the function. Here is an example using an array:</p>
<code>
$data = array(<br/>
@@ -539,9 +539,9 @@ $data = array(<br/>
&nbsp;&nbsp;&nbsp;)<br/>
);<br />
<br />
-$this->db->insert_batch('mytable', $data);
+$this->db->update_batch('mytable', $data);
<br /><br />
-// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'), ('Another title', 'Another name', 'Another date')</code>
+// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'), ('Another title', 'Another name', 'Another date')</code>
<p>The first parameter will contain the table name, the second is an associative array of values.</p>
@@ -588,9 +588,9 @@ $this->db->insert('mytable');
<code>
/*<br />
&nbsp;&nbsp;&nbsp;&nbsp;class Myclass {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $title = 'My Title';<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $content = 'My Content';<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $date = 'My Date';<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $title = 'My Title';<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $content = 'My Content';<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $date = 'My Date';<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
*/<br />
<br />
@@ -606,7 +606,7 @@ $this->db->insert('mytable');
<h1>Updating Data</h1>
<h2>$this->db->update();</h2>
-<p>Generates an update string and runs the query based on the data you supply. You can pass an
+<p>Generates an update string and runs the query based on the data you supply. You can pass an
<strong>array</strong> or an <strong>object</strong> to the function. Here is an example using
an array:</p>
@@ -630,9 +630,9 @@ $this->db->update('mytable', $data);
<code>
/*<br />
&nbsp;&nbsp;&nbsp;&nbsp;class Myclass {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $title = 'My Title';<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $content = 'My Content';<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $date = 'My Date';<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $title = 'My Title';<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $content = 'My Content';<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $date = 'My Date';<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
*/<br />
<br />
@@ -711,7 +711,7 @@ $this-&gt;db-&gt;truncate('mytable'); <br />
<h1><a name="chaining">&nbsp;</a>Method Chaining</h1>
-<p>Method chaining allows you to simplify your syntax by connecting multiple functions. Consider this example:</p>
+<p>Method chaining allows you to simplify your syntax by connecting multiple functions. Consider this example:</p>
<code>
<dfn>$this->db</dfn><kbd>-></kbd><var>select</var>('title')<kbd>-></kbd><var>from</var>('mytable')<kbd>-></kbd><var>where</var>('id', $id)<kbd>-></kbd><var>limit</var>(10, 20);<br />
@@ -752,14 +752,14 @@ $this-&gt;db-&gt;get('tablename');<br />
$this-&gt;db-&gt;select('field2');<br />
$this-&gt;db-&gt;get('tablename');<br />
<br />
-//Generates: SELECT `field1`, `field2` FROM (`tablename`)<br />
+//Generates: SELECT `field1`, `field2` FROM (`tablename`)<br />
<br />
$this-&gt;db-&gt;flush_cache();<br />
<br />
$this-&gt;db-&gt;select('field2');<br />
$this-&gt;db-&gt;get('tablename');<br />
<br />
-//Generates: SELECT `field2` FROM (`tablename`)</code></p>
+//Generates: SELECT `field2` FROM (`tablename`)</code></p>
<p class="important"> <strong>Note:</strong> The following statements can be cached: select, from, join, where, like, group_by, having, order_by, set</p>
<p>&nbsp;</p>
diff --git a/user_guide/database/caching.html b/user_guide/database/caching.html
index ec2e5c40b..76a91216d 100644
--- a/user_guide/database/caching.html
+++ b/user_guide/database/caching.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -62,7 +62,7 @@ Database Caching Class
<p>The Database Caching Class permits you to cache your queries as text files for reduced database load.</p>
<p class="important"><strong>Important:</strong>&nbsp; This class is initialized automatically by the database driver
-when caching is enabled. Do NOT load this class manually.<br /><br />
+when caching is enabled. Do NOT load this class manually.<br /><br />
<strong>Also note:</strong>&nbsp; Not all query result functions are available when you use caching. Please read this page carefully.</p>
@@ -84,12 +84,12 @@ when caching is enabled. Do NOT load this class manually.<br /><br />
<p>CodeIgniter's query caching system happens dynamically when your pages are viewed.
When caching is enabled, the first time a web page is loaded, the query result object will
be serialized and stored in a text file on your server. The next time the page is loaded the cache file will be used instead of
-accessing your database. Your database usage can effectively be reduced to zero for any pages that have been cached.</p>
+accessing your database. Your database usage can effectively be reduced to zero for any pages that have been cached.</p>
<p>Only <dfn>read-type</dfn> (SELECT) queries can be cached, since these are the only type of queries that produce a result.
<dfn>Write-type</dfn> (INSERT, UPDATE, etc.) queries, since they don't generate a result, will not be cached by the system.</p>
-<p>Cache files DO NOT expire. Any queries that have been cached will remain cached until you delete them. The caching system
+<p>Cache files DO NOT expire. Any queries that have been cached will remain cached until you delete them. The caching system
permits you clear caches associated with individual pages, or you can delete the entire collection of cache files.
Typically you'll want to use the housekeeping functions described below to delete cache files after certain
events take place, like when you've added new information to your database.</p>
@@ -99,33 +99,33 @@ events take place, like when you've added new information to your database.</p>
<p>Getting a performance gain as a result of caching depends on many factors.
If you have a highly optimized database under very little load, you probably won't see a performance boost.
If your database is under heavy use you probably will see an improved response, assuming your file-system is not
-overly taxed. Remember that caching simply changes how your information is retrieved, shifting it from being a database
+overly taxed. Remember that caching simply changes how your information is retrieved, shifting it from being a database
operation to a file-system one.</p>
<p>In some clustered server environments, for example, caching may be detrimental since file-system operations are so intense.
On single servers in shared environments, caching will probably be beneficial. Unfortunately there is no
-single answer to the question of whether you should cache your database. It really depends on your situation.</p>
+single answer to the question of whether you should cache your database. It really depends on your situation.</p>
<h2>How are Cache Files Stored?</h2>
-<p>CodeIgniter places the result of EACH query into its own cache file. Sets of cache files are further organized into
-sub-folders corresponding to your controller functions. To be precise, the sub-folders are named identically to the
+<p>CodeIgniter places the result of EACH query into its own cache file. Sets of cache files are further organized into
+sub-folders corresponding to your controller functions. To be precise, the sub-folders are named identically to the
first two segments of your URI (the controller class name and function name).</p>
<p>For example, let's say you have a controller called <dfn>blog</dfn> with a function called <dfn>comments</dfn> that
-contains three queries. The caching system will create a cache folder
+contains three queries. The caching system will create a cache folder
called <kbd>blog+comments</kbd>, into which it will write three cache files.</p>
<p>If you use dynamic queries that change based on information in your URI (when using pagination, for example), each instance of
-the query will produce its own cache file. It's possible, therefore, to end up with many times more cache files than you have
+the query will produce its own cache file. It's possible, therefore, to end up with many times more cache files than you have
queries.</p>
<h2>Managing your Cache Files</h2>
-<p>Since cache files do not expire, you'll need to build deletion routines into your application. For example, let's say you have a blog
-that allows user commenting. Whenever a new comment is submitted you'll want to delete the cache files associated with the
-controller function that serves up your comments. You'll find two delete functions described below that help you
+<p>Since cache files do not expire, you'll need to build deletion routines into your application. For example, let's say you have a blog
+that allows user commenting. Whenever a new comment is submitted you'll want to delete the cache files associated with the
+controller function that serves up your comments. You'll find two delete functions described below that help you
clear data.</p>
@@ -155,8 +155,8 @@ pertain to run-time operations.</p>
<h2>$this->db->cache_on()&nbsp; / &nbsp; $this->db->cache_off()</h2>
-<p>Manually enables/disables caching. This can be useful if you want to
-keep certain queries from being cached. Example:</p>
+<p>Manually enables/disables caching. This can be useful if you want to
+keep certain queries from being cached. Example:</p>
<code>
// Turn caching on<br />
@@ -177,9 +177,9 @@ $query = $this->db->query("SELECT * FROM another_table");
<p>Deletes the cache files associated with a particular page. This is useful if you need to clear caching after you update your database.</p>
-<p>The caching system saves your cache files to folders that correspond to the URI of the page you are viewing. For example, if you are viewing
+<p>The caching system saves your cache files to folders that correspond to the URI of the page you are viewing. For example, if you are viewing
a page at <dfn>example.com/index.php/blog/comments</dfn>, the caching system will put all cache files associated with it in a folder
-called <dfn>blog+comments</dfn>. To delete those particular cache files you will use:</p>
+called <dfn>blog+comments</dfn>. To delete those particular cache files you will use:</p>
<code>$this->db->cache_delete('blog', 'comments');</code>
@@ -188,7 +188,7 @@ called <dfn>blog+comments</dfn>. To delete those particular cache files you wil
<h2>$this->db->cache_delete_all()</h2>
-<p>Clears all existing cache files. Example:</p>
+<p>Clears all existing cache files. Example:</p>
<code>$this->db->cache_delete_all();</code>
diff --git a/user_guide/database/call_function.html b/user_guide/database/call_function.html
index e34369f37..7f294401e 100644
--- a/user_guide/database/call_function.html
+++ b/user_guide/database/call_function.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -63,13 +63,13 @@ Custom Function Calls
<p>This function enables you to call PHP database functions that are not natively included in CodeIgniter, in a platform independent manner.
For example, lets say you want to call the <dfn>mysql_get_client_info()</dfn> function, which is <strong>not</strong> natively supported
-by CodeIgniter. You could do so like this:
+by CodeIgniter. You could do so like this:
</p>
<code>$this->db->call_function('<var>get_client_info</var>');</code>
-<p>You must supply the name of the function, <strong>without</strong> the <var>mysql_</var> prefix, in the first parameter. The prefix is added
-automatically based on which database driver is currently being used. This permits you to run the same function on different database platforms.
+<p>You must supply the name of the function, <strong>without</strong> the <var>mysql_</var> prefix, in the first parameter. The prefix is added
+automatically based on which database driver is currently being used. This permits you to run the same function on different database platforms.
Obviously not all function calls are identical between platforms, so there are limits to how useful this function can be in terms of portability.</p>
<p>Any parameters needed by the function you are calling will be added to the second parameter.</p>
@@ -77,7 +77,7 @@ Obviously not all function calls are identical between platforms, so there are l
<code>$this->db->call_function('<var>some_function</var>', $param1, $param2, etc..);</code>
-<p>Often, you will either need to supply a database connection ID or a database result ID. The connection ID can be accessed using:</p>
+<p>Often, you will either need to supply a database connection ID or a database result ID. The connection ID can be accessed using:</p>
<code>$this->db->conn_id;</code>
diff --git a/user_guide/database/configuration.html b/user_guide/database/configuration.html
index d71cd34db..b34705410 100644
--- a/user_guide/database/configuration.html
+++ b/user_guide/database/configuration.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -74,7 +74,7 @@ $db['default']['dbprefix'] = "";<br />
$db['default']['pconnect'] = TRUE;<br />
$db['default']['db_debug'] = FALSE;<br />
$db['default']['cache_on'] = FALSE;<br />
-$db['default']['cachedir'] = &quot;&quot;;<br />
+$db['default']['cachedir'] = &quot;&quot;;<br />
$db['default']['char_set'] = "utf8";<br />
$db['default']['dbcollat'] = "utf8_general_ci";<br />
$db['default']['swap_pre'] = "";<br />
@@ -82,7 +82,7 @@ $db['default']['autoinit'] = TRUE;<br />
$db['default']['stricton'] = FALSE;</code>
<p>The reason we use a multi-dimensional array rather than a more simple one is to permit you to optionally store
-multiple sets of connection values. If, for example, you run multiple environments (development, production, test, etc.)
+multiple sets of connection values. If, for example, you run multiple environments (development, production, test, etc.)
under a single installation, you can set up a connection group for each, then switch between groups as needed.
For example, to set up a "test" environment you would do this:</p>
@@ -95,7 +95,7 @@ $db['test']['dbprefix'] = "";<br />
$db['test']['pconnect'] = TRUE;<br />
$db['test']['db_debug'] = FALSE;<br />
$db['test']['cache_on'] = FALSE;<br />
-$db['test']['cachedir'] = &quot;&quot;;<br />
+$db['test']['cachedir'] = &quot;&quot;;<br />
$db['test']['char_set'] = "utf8";<br />
$db['test']['dbcollat'] = "utf8_general_ci";<br />
$db['test']['swap_pre'] = "";<br />
@@ -107,7 +107,7 @@ $db['test']['stricton'] = FALSE;</code>
<code>$active_group = "test";</code>
-<p>Note: The name "test" is arbitrary. It can be anything you want. By default we've used the word "default"
+<p>Note: The name "test" is arbitrary. It can be anything you want. By default we've used the word "default"
for the primary connection, but it too can be renamed to something more relevant to your project.</p>
<h3>Active Record</h3>
@@ -126,21 +126,21 @@ for the primary connection, but it too can be renamed to something more relevant
<li><strong>password</strong> - The password used to connect to the database.</li>
<li><strong>database</strong> - The name of the database you want to connect to.</li>
<li><strong>dbdriver</strong> - The database type. ie: mysql, postgres, odbc, etc. Must be specified in lower case.</li>
-<li><strong>dbprefix</strong> - An optional table prefix which will added to the table name when running <a href="active_record.html">Active Record</a> queries. This permits multiple CodeIgniter installations to share one database.</li>
+<li><strong>dbprefix</strong> - An optional table prefix which will added to the table name when running <a href="active_record.html">Active Record</a> queries. This permits multiple CodeIgniter installations to share one database.</li>
<li><strong>pconnect</strong> - TRUE/FALSE (boolean) - Whether to use a persistent connection.</li>
<li><strong>db_debug</strong> - TRUE/FALSE (boolean) - Whether database errors should be displayed.</li>
<li><strong>cache_on</strong> - TRUE/FALSE (boolean) - Whether database query caching is enabled, see also <a href="caching.html">Database Caching Class</a>.</li>
<li><strong>cachedir</strong> - The absolute server path to your database query cache directory.</li>
<li><strong>char_set</strong> - The character set used in communicating with the database.</li>
-<li><strong>dbcollat</strong> - The character collation used in communicating with the database.</li>
-<li><strong>swap_pre</strong> - A default table prefix that should be swapped with <var>dbprefix</var>. This is useful for distributed applications where you might run manually written queries, and need the prefix to still be customizable by the end user.</li>
+<li><strong>dbcollat</strong> - The character collation used in communicating with the database. <p class="important"><strong>Note:</strong> For MySQL and MySQLi databases, this setting is only used as a backup if your server is running PHP &lt; 5.2.3 or MySQL &lt; 5.0.7. There is an incompatibility in PHP with mysql_real_escape_string() which can make your site vulnerable to SQL injection if you are using a multi-byte character set and are running versions lower than these. Sites using Latin-1 or UTF-8 database character set and collation are unaffected.</p></li>
+<li><strong>swap_pre</strong> - A default table prefix that should be swapped with <var>dbprefix</var>. This is useful for distributed applications where you might run manually written queries, and need the prefix to still be customizable by the end user.</li>
<li><strong>autoinit</strong> - Whether or not to automatically connect to the database when the library loads. If set to false, the connection will take place prior to executing the first query.</li>
<li><strong>stricton</strong> - TRUE/FALSE (boolean) - Whether to force "Strict Mode" connections, good for ensuring strict SQL while developing an application.</li>
-<li><strong>port</strong> - The database port number. To use this value you have to add a line to the database config array.<code>$db['default']['port'] = 5432;</code>
+<li><strong>port</strong> - The database port number. To use this value you have to add a line to the database config array.<code>$db['default']['port'] = 5432;</code>
</ul>
<p class="important"><strong>Note:</strong> Depending on what database platform you are using (MySQL, Postgres, etc.)
-not all values will be needed. For example, when using SQLite you will not need to supply a username or password, and
+not all values will be needed. For example, when using SQLite you will not need to supply a username or password, and
the database name will be the path to your database file. The information above assumes you are using MySQL.</p>
diff --git a/user_guide/database/connecting.html b/user_guide/database/connecting.html
index 1e971986e..1a74f5571 100644
--- a/user_guide/database/connecting.html
+++ b/user_guide/database/connecting.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -84,8 +84,8 @@ to the group specified in your database config file. For most people, this is th
<ol>
<li>The database connection values, passed either as an array or a DSN string.</li>
- <li>TRUE/FALSE (boolean). Whether to return the connection ID (see Connecting to Multiple Databases below).</li>
- <li>TRUE/FALSE (boolean). Whether to enable the Active Record class. Set to TRUE by default.</li>
+ <li>TRUE/FALSE (boolean). Whether to return the connection ID (see Connecting to Multiple Databases below).</li>
+ <li>TRUE/FALSE (boolean). Whether to enable the Active Record class. Set to TRUE by default.</li>
</ol>
@@ -148,7 +148,7 @@ you can pass the connection values as indicated above).</p>
<p>By setting the second parameter to TRUE (boolean) the function will return the database object.</p>
<div class="important">
-<p>When you connect this way, you will use your object name to issue commands rather than the syntax used throughout this guide. In other words, rather than issuing commands with:</p>
+<p>When you connect this way, you will use your object name to issue commands rather than the syntax used throughout this guide. In other words, rather than issuing commands with:</p>
<p>$this->db->query();<br />$this->db->result();<br /> etc...</p>
diff --git a/user_guide/database/examples.html b/user_guide/database/examples.html
index c0eabd846..6bb8beb32 100644
--- a/user_guide/database/examples.html
+++ b/user_guide/database/examples.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -61,7 +61,7 @@ Database Example Code
<h1>Database Quick Start: Example Code</h1>
-<p>The following page contains example code showing how the database class is used. For complete details please
+<p>The following page contains example code showing how the database class is used. For complete details please
read the individual pages describing each function.</p>
@@ -73,7 +73,7 @@ read the individual pages describing each function.</p>
<p>Once loaded the class is ready to be used as described below.</p>
-<p>Note: If all your pages require database access you can connect automatically. See the <a href="connecting.html">connecting</a> page for details.</p>
+<p>Note: If all your pages require database access you can connect automatically. See the <a href="connecting.html">connecting</a> page for details.</p>
<h2>Standard Query With Multiple Results (Object Version)</h2>
@@ -90,7 +90,7 @@ foreach ($query->result() as $row)<br />
echo 'Total Results: ' . $query->num_rows();
</code>
-<p>The above <dfn>result()</dfn> function returns an array of <strong>objects</strong>. Example: $row->title</p>
+<p>The above <dfn>result()</dfn> function returns an array of <strong>objects</strong>. Example: $row->title</p>
<h2>Standard Query With Multiple Results (Array Version)</h2>
@@ -104,7 +104,7 @@ foreach ($query->result_array() as $row)<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo $row['email'];<br />
}</code>
-<p>The above <dfn>result_array()</dfn> function returns an array of standard array indexes. Example: $row['title']</p>
+<p>The above <dfn>result_array()</dfn> function returns an array of standard array indexes. Example: $row['title']</p>
<h2>Testing for Results</h2>
@@ -137,7 +137,7 @@ $row = $query->row();<br />
echo $row->name;<br />
</code>
-<p>The above <dfn>row()</dfn> function returns an <strong>object</strong>. Example: $row->name</p>
+<p>The above <dfn>row()</dfn> function returns an <strong>object</strong>. Example: $row->name</p>
<h2>Standard Query With Single Result (Array version)</h2>
@@ -148,7 +148,7 @@ $row = $query->row_array();<br />
echo $row['name'];<br />
</code>
-<p>The above <dfn>row_array()</dfn> function returns an <strong>array</strong>. Example: $row['name']</p>
+<p>The above <dfn>row_array()</dfn> function returns an <strong>array</strong>. Example: $row['name']</p>
<h2>Standard Insert</h2>
diff --git a/user_guide/database/fields.html b/user_guide/database/fields.html
index b1dbd0012..b20436129 100644
--- a/user_guide/database/fields.html
+++ b/user_guide/database/fields.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -92,7 +92,7 @@ foreach ($query->list_fields() as $field)<br />
<h2>$this->db->field_exists()</h2>
<p>Sometimes it's helpful to know whether a particular field exists before performing an action.
-Returns a boolean TRUE/FALSE. Usage example:</p>
+Returns a boolean TRUE/FALSE. Usage example:</p>
<code>
if ($this->db->field_exists('field_name', 'table_name'))<br />
@@ -101,7 +101,7 @@ if ($this->db->field_exists('field_name', 'table_name'))<br />
}
</code>
-<p>Note: Replace <em>field_name</em> with the name of the column you are looking for, and replace
+<p>Note: Replace <em>field_name</em> with the name of the column you are looking for, and replace
<em>table_name</em> with the name of the table you are looking for.</p>
diff --git a/user_guide/database/forge.html b/user_guide/database/forge.html
index d18db5820..bbef053e4 100644
--- a/user_guide/database/forge.html
+++ b/user_guide/database/forge.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -151,7 +151,7 @@ already be running, since the forge class relies on it.</p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />
</code></p>
-<p>After the fields have been defined, they can be added using <dfn>$this-&gt;dbforge-&gt;add_field($fields);</dfn> followed by a call to the <dfn>create_table()</dfn> function.</p>
+<p>After the fields have been defined, they can be added using <dfn>$this-&gt;dbforge-&gt;add_field($fields);</dfn> followed by a call to the <dfn>create_table()</dfn> function.</p>
<h3>$this-&gt;dbforge-&gt;add_field()</h3>
<p>The add fields function will accept the above array.</p>
<h3>Passing strings as fields</h3>
@@ -164,7 +164,7 @@ already be running, since the forge class relies on it.</p>
// gives id INT(9) NOT NULL AUTO_INCREMENT</code></p>
<h2><a name="add_key" id="add_key"></a>Adding Keys</h2>
<p>Generally speaking, you'll want your table to have Keys. This is accomplished with <dfn>$this-&gt;dbforge-&gt;add_key('field')</dfn>. An optional second parameter set to TRUE will make it a primary key. Note that <dfn>add_key()</dfn> must be followed by a call to <dfn>create_table()</dfn>.</p>
-<p>Multiple column non-primary keys must be sent as an array. Sample output below is for MySQL.</p>
+<p>Multiple column non-primary keys must be sent as an array. Sample output below is for MySQL.</p>
<p><code>$this-&gt;dbforge-&gt;add_key('blog_id', TRUE);<br />
// gives PRIMARY KEY `blog_id` (`blog_id`)<br />
<br />
@@ -187,7 +187,7 @@ already be running, since the forge class relies on it.</p>
<h2><a name="drop_table" id="drop_table"></a>Dropping a table</h2>
<p>Executes a DROP TABLE sql</p>
<p><code>$this-&gt;dbforge-&gt;drop_table('table_name');<br />
- // gives DROP TABLE IF EXISTS table_name</code></p>
+ // gives DROP TABLE IF EXISTS table_name</code></p>
<h2><a name="rename_table" id="rename_table"></a>Renaming a table</h2>
<p>Executes a TABLE rename</p>
<p><code>$this-&gt;dbforge-&gt;rename_table('old_table_name', 'new_table_name');<br />
@@ -200,7 +200,7 @@ already be running, since the forge class relies on it.</p>
);<br />
$this-&gt;dbforge-&gt;add_column('table_name', $fields);<br />
<br />
-// gives ALTER TABLE table_name ADD preferences TEXT</code></p>
+// gives ALTER TABLE table_name ADD preferences TEXT</code></p>
<h2>$this-&gt;dbforge-&gt;drop_column()</h2>
<p>Used to remove a column from a table. </p>
<p><code>$this-&gt;dbforge-&gt;drop_column('table_name', 'column_to_drop');</code></p>
@@ -214,7 +214,7 @@ $this-&gt;dbforge-&gt;add_column('table_name', $fields);<br />
);<br />
$this-&gt;dbforge-&gt;modify_column('table_name', $fields);<br />
<br />
- // gives ALTER TABLE table_name CHANGE old_name new_name TEXT </code></p>
+ // gives ALTER TABLE table_name CHANGE old_name new_name TEXT </code></p>
<p>&nbsp;</p>
</div>
<!-- END CONTENT -->
diff --git a/user_guide/database/helpers.html b/user_guide/database/helpers.html
index f4ad8dfe6..650dd7a0b 100644
--- a/user_guide/database/helpers.html
+++ b/user_guide/database/helpers.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -67,12 +67,12 @@ Query Helpers
<h2>$this->db->affected_rows()</h2>
<p>Displays the number of affected rows, when doing "write" type queries (insert, update, etc.).</p>
-<p>Note: In MySQL "DELETE FROM TABLE" returns 0 affected rows. The database class has a small hack that allows it to return the
-correct number of affected rows. By default this hack is enabled but it can be turned off in the database driver file.</p>
+<p>Note: In MySQL "DELETE FROM TABLE" returns 0 affected rows. The database class has a small hack that allows it to return the
+correct number of affected rows. By default this hack is enabled but it can be turned off in the database driver file.</p>
<h2>$this->db->count_all();</h2>
-<p>Permits you to determine the number of rows in a particular table. Submit the table name in the first parameter. Example:</p>
+<p>Permits you to determine the number of rows in a particular table. Submit the table name in the first parameter. Example:</p>
<code>echo $this->db->count_all('<var>my_table</var>');<br />
<br />
// Produces an integer, like 25
@@ -90,11 +90,11 @@ correct number of affected rows. By default this hack is enabled but it can be
<h2>$this->db->last_query();</h2>
-<p>Returns the last query that was run (the query string, not the result). Example:</p>
+<p>Returns the last query that was run (the query string, not the result). Example:</p>
<code>$str = $this->db->last_query();<br />
<br />
-// Produces: SELECT * FROM sometable....
+// Produces: SELECT * FROM sometable....
</code>
@@ -109,7 +109,7 @@ correct number of affected rows. By default this hack is enabled but it can be
$str = $this->db->insert_string('table_name', $data);
</code>
-<p>The first parameter is the table name, the second is an associative array with the data to be inserted. The above example produces:</p>
+<p>The first parameter is the table name, the second is an associative array with the data to be inserted. The above example produces:</p>
<code>INSERT INTO table_name (name, email, url) VALUES ('Rick', 'rick@example.com', 'example.com')</code>
<p class="important">Note: Values are automatically escaped, producing safer queries.</p>
diff --git a/user_guide/database/index.html b/user_guide/database/index.html
index cc2d2166b..1f0a1da7d 100644
--- a/user_guide/database/index.html
+++ b/user_guide/database/index.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -63,7 +63,7 @@ Database Library
structures and Active Record patterns. The database functions offer clear, simple syntax.</p>
<ul>
- <li><a href="examples.html">Quick Start: Usage Examples</a></li>
+ <li><a href="examples.html">Quick Start: Usage Examples</a></li>
<li><a href="configuration.html">Database Configuration</a></li>
<li><a href="connecting.html">Connecting to a Database</a></li>
<li><a href="queries.html">Running Queries</a></li>
@@ -86,7 +86,7 @@ structures and Active Record patterns. The database functions offer clear, simpl
<div id="footer">
<p>
-Previous Topic:&nbsp;&nbsp;<a href="../libraries/config.html">Config Class</a>
+Previous Topic:&nbsp;&nbsp;<a href="../libraries/caching.html">Caching Class</a>
&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
diff --git a/user_guide/database/queries.html b/user_guide/database/queries.html
index e3d6ab186..685da43dc 100644
--- a/user_guide/database/queries.html
+++ b/user_guide/database/queries.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -68,14 +68,14 @@ Queries
<code>$this->db->query('YOUR QUERY HERE');</code>
<p>The <dfn>query()</dfn> function returns a database result <strong>object</strong> when "read" type queries are run,
-which you can use to <a href="results.html">show your results</a>. When "write" type queries are run it simply returns TRUE or FALSE
-depending on success or failure. When retrieving data you will typically assign the query to your own variable, like this:</p>
+which you can use to <a href="results.html">show your results</a>. When "write" type queries are run it simply returns TRUE or FALSE
+depending on success or failure. When retrieving data you will typically assign the query to your own variable, like this:</p>
<code><var>$query</var> = $this->db->query('YOUR QUERY HERE');</code>
<h2>$this->db->simple_query();</h2>
-<p>This is a simplified version of the <dfn>$this->db->query()</dfn> function. It ONLY returns TRUE/FALSE on success or failure.
+<p>This is a simplified version of the <dfn>$this->db->query()</dfn> function. It ONLY returns TRUE/FALSE on success or failure.
It DOES NOT return a database result set, nor does it set the query timer, or compile bind data, or store your query for debugging.
It simply lets you submit a query. Most users will rarely use this function.</p>
@@ -100,16 +100,16 @@ CodeIgniter has three methods that help you do this:</p>
<ol>
<li><strong>$this->db->escape()</strong> This function determines the data type so that it
-can escape only string data. It also automatically adds single quotes around the data so you don't have to:
+can escape only string data. It also automatically adds single quotes around the data so you don't have to:
<code>$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";</code></li>
-<li><strong>$this->db->escape_str()</strong> This function escapes the data passed to it, regardless of type.
+<li><strong>$this->db->escape_str()</strong> This function escapes the data passed to it, regardless of type.
Most of the time you'll use the above function rather than this one. Use the function like this:
<code>$sql = "INSERT INTO table (title) VALUES('".$this->db->escape_str($title)."')";</code></li>
-<li><strong>$this->db->escape_like_str()</strong> This method should be used when strings are to be used in LIKE
+<li><strong>$this->db->escape_like_str()</strong> This method should be used when strings are to be used in LIKE
conditions so that LIKE wildcards ('%', '_') in the string are also properly escaped.
<code>$search = '20% raise';<br />
@@ -130,7 +130,7 @@ $this->db->query($sql, array(3, 'live', 'Rick'));
</code>
<p>The question marks in the query are automatically replaced with the values in the array in the second parameter of the query function.</p>
-<p class="important">The secondary benefit of using binds is that the values are automatically escaped, producing safer queries. You don't have to remember to manually escape data; the engine does it automatically for you.</p>
+<p class="important">The secondary benefit of using binds is that the values are automatically escaped, producing safer queries. You don't have to remember to manually escape data; the engine does it automatically for you.</p>
diff --git a/user_guide/database/results.html b/user_guide/database/results.html
index e9a5cb4cf..0b82752a7 100644
--- a/user_guide/database/results.html
+++ b/user_guide/database/results.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -112,7 +112,7 @@ Query Results
<h2>result_array()</h2>
- <p>This function returns the query result as a pure array, or an empty array when no result is produced. Typically you'll use this in a foreach loop, like this:</p>
+ <p>This function returns the query result as a pure array, or an empty array when no result is produced. Typically you'll use this in a foreach loop, like this:</p>
<code>
$query = $this->db->query("YOUR QUERY");<br />
<br />
@@ -126,8 +126,8 @@ Query Results
<h2>row()</h2>
- <p>This function returns a single result row. If your query has more than one row, it returns only the first row.
- The result is returned as an <strong>object</strong>. Here's a usage example:</p>
+ <p>This function returns a single result row. If your query has more than one row, it returns only the first row.
+ The result is returned as an <strong>object</strong>. Here's a usage example:</p>
<code>
$query = $this->db->query("YOUR QUERY");<br />
<br />
@@ -157,7 +157,7 @@ Query Results
<h2>row_array()</h2>
- <p>Identical to the above <var>row()</var> function, except it returns an array. Example:</p>
+ <p>Identical to the above <var>row()</var> function, except it returns an array. Example:</p>
<code>
$query = $this->db->query("YOUR QUERY");<br />
@@ -209,7 +209,7 @@ echo $query->num_rows();
</code>
<h2>$query->num_fields()</h2>
-<p>The number of FIELDS (columns) returned by the query. Make sure to call the function using your query result object:</p>
+<p>The number of FIELDS (columns) returned by the query. Make sure to call the function using your query result object:</p>
<code>$query = $this->db->query('SELECT * FROM my_table');<br /><br />
echo $query->num_fields();
@@ -218,9 +218,9 @@ echo $query->num_fields();
<h2>$query->free_result()</h2>
-<p>It frees the memory associated with the result and deletes the result resource ID. Normally PHP frees its memory automatically at the end of script
-execution. However, if you are running a lot of queries in a particular script you might want to free the result after each query result has been
-generated in order to cut down on memory consumptions. Example:
+<p>It frees the memory associated with the result and deletes the result resource ID. Normally PHP frees its memory automatically at the end of script
+execution. However, if you are running a lot of queries in a particular script you might want to free the result after each query result has been
+generated in order to cut down on memory consumptions. Example:
</p>
<code>$query = $this->db->query('SELECT title FROM my_table');<br /><br />
@@ -228,12 +228,12 @@ foreach ($query->result() as $row)<br />
{<br />
&nbsp;&nbsp;&nbsp;echo $row->title;<br />
}<br />
-$query->free_result(); // The $query result object will no longer be available<br />
+$query->free_result(); // The $query result object will no longer be available<br />
<br />
$query2 = $this->db->query('SELECT name FROM some_table');<br /><br />
$row = $query2->row();<br />
echo $row->name;<br />
-$query2->free_result(); // The $query2 result object will no longer be available
+$query2->free_result(); // The $query2 result object will no longer be available
</code>
diff --git a/user_guide/database/table_data.html b/user_guide/database/table_data.html
index 90ce478da..631e3b9d1 100644
--- a/user_guide/database/table_data.html
+++ b/user_guide/database/table_data.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -65,7 +65,7 @@ Table Data
<h2>$this->db->list_tables();</h2>
-<p>Returns an array containing the names of all the tables in the database you are currently connected to. Example:</p>
+<p>Returns an array containing the names of all the tables in the database you are currently connected to. Example:</p>
<code>$tables = $this->db->list_tables();<br />
<br />
@@ -79,7 +79,7 @@ foreach ($tables as $table)<br />
<h2>$this->db->table_exists();</h2>
<p>Sometimes it's helpful to know whether a particular table exists before running an operation on it.
-Returns a boolean TRUE/FALSE. Usage example:</p>
+Returns a boolean TRUE/FALSE. Usage example:</p>
<code>
if ($this->db->table_exists('table_name'))<br />
@@ -88,7 +88,7 @@ if ($this->db->table_exists('table_name'))<br />
}
</code>
-<p>Note: Replace <em>table_name</em> with the name of the table you are looking for.</p>
+<p>Note: Replace <em>table_name</em> with the name of the table you are looking for.</p>
diff --git a/user_guide/database/transactions.html b/user_guide/database/transactions.html
index 448e468d9..68d76dff6 100644
--- a/user_guide/database/transactions.html
+++ b/user_guide/database/transactions.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -61,18 +61,18 @@ Transactions
<h1>Transactions</h1>
-<p>CodeIgniter's database abstraction allows you to use <dfn>transactions</dfn> with databases that support transaction-safe table types. In MySQL, you'll need
-to be running InnoDB or BDB table types rather than the more common MyISAM. Most other database platforms support transactions natively.</p>
+<p>CodeIgniter's database abstraction allows you to use <dfn>transactions</dfn> with databases that support transaction-safe table types. In MySQL, you'll need
+to be running InnoDB or BDB table types rather than the more common MyISAM. Most other database platforms support transactions natively.</p>
<p>If you are not familiar with
-transactions we recommend you find a good online resource to learn about them for your particular database. The information below assumes you
+transactions we recommend you find a good online resource to learn about them for your particular database. The information below assumes you
have a basic understanding of transactions.
</p>
<h2>CodeIgniter's Approach to Transactions</h2>
-<p>CodeIgniter utilizes an approach to transactions that is very similar to the process used by the popular database class ADODB. We've chosen that approach
-because it greatly simplifies the process of running transactions. In most cases all that is required are two lines of code.</p>
+<p>CodeIgniter utilizes an approach to transactions that is very similar to the process used by the popular database class ADODB. We've chosen that approach
+because it greatly simplifies the process of running transactions. In most cases all that is required are two lines of code.</p>
<p>Traditionally, transactions have required a fair amount of work to implement since they demand that you to keep track of your queries
and determine whether to <dfn>commit</dfn> or <dfn>rollback</dfn> based on the success or failure of your queries. This is particularly cumbersome with
@@ -98,7 +98,7 @@ of any given query.</p>
<h2>Strict Mode</h2>
-<p>By default CodeIgniter runs all transactions in <dfn>Strict Mode</dfn>. When strict mode is enabled, if you are running multiple groups of
+<p>By default CodeIgniter runs all transactions in <dfn>Strict Mode</dfn>. When strict mode is enabled, if you are running multiple groups of
transactions, if one group fails all groups will be rolled back. If strict mode is disabled, each group is treated independently, meaning
a failure of one group will not affect any others.</p>
@@ -127,7 +127,7 @@ if (<kbd>$this->db->trans_status()</kbd> === FALSE)<br />
<h2>Enabling Transactions</h2>
-<p>Transactions are enabled automatically the moment you use <dfn>$this->db->trans_start()</dfn>. If you would like to disable transactions you
+<p>Transactions are enabled automatically the moment you use <dfn>$this->db->trans_start()</dfn>. If you would like to disable transactions you
can do so using <dfn>$this->db->trans_off()</dfn>:</p>
<code>
diff --git a/user_guide/database/utilities.html b/user_guide/database/utilities.html
index 4a8b6739e..64343cc01 100644
--- a/user_guide/database/utilities.html
+++ b/user_guide/database/utilities.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -105,7 +105,7 @@ foreach ($dbs as $db)<br />
<h2><a name="exists"></a>$this->dbutil->database_exists();</h2>
<p>Sometimes it's helpful to know whether a particular database exists.
-Returns a boolean TRUE/FALSE. Usage example:</p>
+Returns a boolean TRUE/FALSE. Usage example:</p>
<code>
if ($this->dbutil->database_exists('database_name'))<br />
@@ -114,7 +114,7 @@ if ($this->dbutil->database_exists('database_name'))<br />
}
</code>
-<p>Note: Replace <em>database_name</em> with the name of the table you are looking for. This function is case sensitive.</p>
+<p>Note: Replace <em>database_name</em> with the name of the table you are looking for. This function is case sensitive.</p>
@@ -184,7 +184,7 @@ echo $this->dbutil->csv_from_result($query);
</code>
<p>The second and third parameters allows you to
-set the delimiter and newline character. By default tabs are used as the delimiter and "\n" is used as a new line. Example:</p>
+set the delimiter and newline character. By default tabs are used as the delimiter and "\n" is used as a new line. Example:</p>
<code>
$delimiter = ",";<br />
@@ -193,14 +193,14 @@ $newline = "\r\n";<br />
echo $this->dbutil->csv_from_result($query, $delimiter, $newline);
</code>
-<p><strong>Important:</strong>&nbsp; This function will NOT write the CSV file for you. It simply creates the CSV layout.
+<p><strong>Important:</strong>&nbsp; This function will NOT write the CSV file for you. It simply creates the CSV layout.
If you need to write the file use the <a href="../helpers/file_helper.html">File Helper</a>.</p>
<h2><a name="xml"></a>$this->dbutil->xml_from_result($db_result)</h2>
<p>Permits you to generate an XML file from a query result. The first parameter expects a query result object, the second
-may contain an optional array of config parameters. Example:</p>
+may contain an optional array of config parameters. Example:</p>
<code>
$this->load->dbutil();<br />
@@ -217,18 +217,18 @@ $config = array (<br />
echo $this->dbutil->xml_from_result($query, $config);
</code>
-<p><strong>Important:</strong>&nbsp; This function will NOT write the XML file for you. It simply creates the XML layout.
+<p><strong>Important:</strong>&nbsp; This function will NOT write the XML file for you. It simply creates the XML layout.
If you need to write the file use the <a href="../helpers/file_helper.html">File Helper</a>.</p>
<h2><a name="backup"></a>$this->dbutil->backup()</h2>
-<p>Permits you to backup your full database or individual tables. The backup data can be compressed in either Zip or Gzip format.</p>
+<p>Permits you to backup your full database or individual tables. The backup data can be compressed in either Zip or Gzip format.</p>
<p class="important"><strong>Note:</strong>&nbsp; This features is only available for MySQL databases.</p>
<p>Note: Due to the limited execution time and memory available to PHP, backing up very large
-databases may not be possible. If your database is very large you might need to backup directly from your SQL server
+databases may not be possible. If your database is very large you might need to backup directly from your SQL server
via the command line, or have your server admin do it for you if you do not have root privileges.</p>
<h3>Usage Example</h3>
@@ -278,7 +278,7 @@ $this->dbutil->backup($prefs);
<th>Options</th>
<th>Description</th>
</tr><tr>
-<td class="td"><strong>tables</strong></td><td class="td">empty array</td><td class="td">None</td><td class="td">An array of tables you want backed up. If left blank all tables will be exported.</td>
+<td class="td"><strong>tables</strong></td><td class="td">empty array</td><td class="td">None</td><td class="td">An array of tables you want backed up. If left blank all tables will be exported.</td>
</tr><tr>
<td class="td"><strong>ignore</strong></td><td class="td">empty array</td><td class="td">None</td><td class="td">An array of tables you want the backup routine to ignore.</td>
</tr><tr>
@@ -306,7 +306,7 @@ Previous Topic:&nbsp;&nbsp;<a href="forge.html">DB Forge Class</a>
&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
-Next Topic:&nbsp;&nbsp;<a href="../libraries/email.html"> Email Class</a></p>
+Next Topic:&nbsp;&nbsp;<a href="../libraries/javascript.html">Javascript Class</a></p>
<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006 - 2011 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">EllisLab, Inc.</a></p>
</div>
diff --git a/user_guide/doc_style/index.html b/user_guide/doc_style/index.html
index 2d2718d44..f69846f2e 100644
--- a/user_guide/doc_style/index.html
+++ b/user_guide/doc_style/index.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
diff --git a/user_guide/doc_style/template.html b/user_guide/doc_style/template.html
index d59d5e4ed..e25503200 100644
--- a/user_guide/doc_style/template.html
+++ b/user_guide/doc_style/template.html
@@ -51,7 +51,7 @@ Foo Class
<h1>Foo Class</h1>
-<p>Brief description of Foo Class. If it extends a native CodeIgniter class, please link to the class in the CodeIgniter documents here.</p>
+<p>Brief description of Foo Class. If it extends a native CodeIgniter class, please link to the class in the CodeIgniter documents here.</p>
<p class="important"><strong>Important:</strong>&nbsp; This is an important note with <kbd>EMPHASIS</kbd>.</p>
diff --git a/user_guide/general/alternative_php.html b/user_guide/general/alternative_php.html
index c843f2f6e..574ab35d7 100644
--- a/user_guide/general/alternative_php.html
+++ b/user_guide/general/alternative_php.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -58,19 +58,19 @@ Alternate PHP Syntax
<h1>Alternate PHP Syntax for View Files</h1>
<p>If you do not utilize CodeIgniter's <a href="../libraries/parser.html">template engine</a>, you'll be using pure PHP
-in your View files. To minimize the PHP code in these files, and to make it easier to identify the code blocks it is recommended that you use
-PHPs alternative syntax for control structures and short tag echo statements. If you are not familiar with this syntax, it allows you to eliminate the braces from your code,
+in your View files. To minimize the PHP code in these files, and to make it easier to identify the code blocks it is recommended that you use
+PHPs alternative syntax for control structures and short tag echo statements. If you are not familiar with this syntax, it allows you to eliminate the braces from your code,
and eliminate "echo" statements.</p>
<h2>Automatic Short Tag Support</h2>
<p><strong>Note:</strong> If you find that the syntax described in this page does not work on your server it might
be that "short tags" are disabled in your PHP ini file. CodeIgniter will optionally rewrite short tags on-the-fly,
-allowing you to use that syntax even if your server doesn't support it. This feature can be enabled in your
+allowing you to use that syntax even if your server doesn't support it. This feature can be enabled in your
<dfn>config/config.php</dfn> file.</p>
<p class="important">Please note that if you do use this feature, if PHP errors are encountered
-in your <strong>view files</strong>, the error message and line number will not be accurately shown. Instead, all errors
+in your <strong>view files</strong>, the error message and line number will not be accurately shown. Instead, all errors
will be shown as <kbd>eval()</kbd> errors.</p>
@@ -89,7 +89,7 @@ will be shown as <kbd>eval()</kbd> errors.</p>
<h2>Alternative Control Structures</h2>
<p>Controls structures, like <var>if</var>, <var>for</var>, <var>foreach</var>, and <var>while</var> can be
-written in a simplified format as well. Here is an example using foreach:</p>
+written in a simplified format as well. Here is an example using foreach:</p>
<code>
&lt;ul><br />
@@ -102,14 +102,14 @@ written in a simplified format as well. Here is an example using foreach:</p>
<br />
&lt;/ul></code>
-<p>Notice that there are no braces. Instead, the end brace is replaced with <var>endforeach</var>.
+<p>Notice that there are no braces. Instead, the end brace is replaced with <var>endforeach</var>.
Each of the control structures listed above has a similar closing syntax:
<var>endif</var>, <var>endfor</var>, <var>endforeach</var>, and <var>endwhile</var></p>
-<p>Also notice that instead of using a semicolon after each structure (except the last one), there is a colon. This is
+<p>Also notice that instead of using a semicolon after each structure (except the last one), there is a colon. This is
important!</p>
-<p>Here is another example, using if/elseif/else. Notice the colons:</p>
+<p>Here is another example, using if/elseif/else. Notice the colons:</p>
<code><var>&lt;?php if ($username == 'sally'): ?></var><br />
diff --git a/user_guide/general/ancillary_classes.html b/user_guide/general/ancillary_classes.html
index fc5d0bec5..a7365e706 100644
--- a/user_guide/general/ancillary_classes.html
+++ b/user_guide/general/ancillary_classes.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
diff --git a/user_guide/general/autoloader.html b/user_guide/general/autoloader.html
index e05ee03ef..405dda30f 100644
--- a/user_guide/general/autoloader.html
+++ b/user_guide/general/autoloader.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -75,7 +75,7 @@ consider auto-loading them for convenience.</p>
loaded to the <samp>autoload</samp> array. You'll find instructions in that file corresponding to each
type of item.</p>
-<p class="important"><strong>Note:</strong> Do not include the file extension (.php) when adding items to the autoload array.</p>
+<p class="important"><strong>Note:</strong> Do not include the file extension (.php) when adding items to the autoload array.</p>
diff --git a/user_guide/general/caching.html b/user_guide/general/caching.html
index 9f49b95d6..abfe6ded9 100644
--- a/user_guide/general/caching.html
+++ b/user_guide/general/caching.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -68,8 +68,8 @@ By caching your pages, since they are saved in their fully rendered state, you c
<h2>How Does Caching Work?</h2>
<p>Caching can be enabled on a per-page basis, and you can set the length of time that a page should remain cached before being refreshed.
-When a page is loaded for the first time, the cache file will be written to your <dfn>application/cache</dfn> folder. On subsequent page loads the cache file will be retrieved
-and sent to the requesting user's browser. If it has expired, it will be deleted and refreshed before being sent to the browser.</p>
+When a page is loaded for the first time, the cache file will be written to your <dfn>application/cache</dfn> folder. On subsequent page loads the cache file will be retrieved
+and sent to the requesting user's browser. If it has expired, it will be deleted and refreshed before being sent to the browser.</p>
<p>Note: The Benchmark tag is not cached so you can still view your page load speed when caching is enabled.</p>
@@ -90,8 +90,8 @@ most logical to you. Once the tag is in place, your pages will begin being cache
<h2>Deleting Caches</h2>
-<p>If you no longer wish to cache a file you can remove the caching tag and it will no longer be refreshed when it expires. Note:
-Removing the tag will not delete the cache immediately. It will have to expire normally. If you need to remove it earlier you
+<p>If you no longer wish to cache a file you can remove the caching tag and it will no longer be refreshed when it expires. Note:
+Removing the tag will not delete the cache immediately. It will have to expire normally. If you need to remove it earlier you
will need to manually delete it from your cache folder.</p>
diff --git a/user_guide/general/cli.html b/user_guide/general/cli.html
new file mode 100644
index 000000000..962954b15
--- /dev/null
+++ b/user_guide/general/cli.html
@@ -0,0 +1,150 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Running via the CLI : CodeIgniter User Guide</title>
+
+<style type='text/css' media='all'>@import url('../userguide.css');</style>
+<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />
+
+<script type="text/javascript" src="../nav/nav.js"></script>
+<script type="text/javascript" src="../nav/prototype.lite.js"></script>
+<script type="text/javascript" src="../nav/moo.fx.js"></script>
+<script type="text/javascript" src="../nav/user_guide_menu.js"></script>
+
+<meta http-equiv='expires' content='-1' />
+<meta http-equiv= 'pragma' content='no-cache' />
+<meta name='robots' content='all' />
+<meta name='author' content='ExpressionEngine Dev Team' />
+<meta name='description' content='CodeIgniter User Guide' />
+
+</head>
+<body>
+
+<!-- START NAVIGATION -->
+<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
+<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
+<div id="masthead">
+<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
+<tr>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
+<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
+</tr>
+</table>
+</div>
+<!-- END NAVIGATION -->
+
+
+<!-- START BREADCRUMB -->
+<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
+<tr>
+<td id="breadcrumb">
+<a href="http://codeigniter.com/">CodeIgniter Home</a> &nbsp;&#8250;&nbsp;
+<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
+Running via the CLI
+</td>
+<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.com/user_guide/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
+</tr>
+</table>
+<!-- END BREADCRUMB -->
+
+<br clear="all" />
+
+
+<!-- START CONTENT -->
+<div id="content">
+
+<h1>Running via the CLI</h1>
+
+<p>
+ As well as calling an applications <a href="./controllers.html">Controllers</a> via the URL in a browser they can also be loaded via the command-line interface (CLI).
+</p>
+
+
+<ul>
+<li><a href="#what">What is the CLI?</a></li>
+<li><a href="#why">Why use this method?</a></li>
+<li><a href="#how">How does it work?</a></li>
+</ul>
+
+
+<a name="what"></a>
+<h2>What is the CLI?</h2>
+
+<p><dfn>The command-line interface is a text-based method of interacting with computers that looks like what most people remember as DOS.</dfn></p>
+
+<a name="why"></a>
+
+<h2>Why run via the command-line?</h2>
+
+<p>
+ There are many reasons for running CodeIgniter from the command-line, but they are not always obvious.</p>
+
+<ul>
+ <li>Run your cron-jobs without needing to use wget or curl</li>
+ <li>Make your cron-jobs inaccessible from being loaded in the URL by checking for <kbd>IS_CLI</kbd></li>
+ <li>Make interactive "tasks" that can do things like set permissions, prune cache folders, run backups, etc.</li>
+ <li>Integrate with other applications in other languages. For example, a random C++ script could call one command and run code in your models!</li>
+</ul>
+
+<a name="how"></a>
+<h2>Let's try it:&nbsp; Hello World!</h2>
+
+<p>Let's create a simple controller so you can see it in action. Using your text editor, create a file called <dfn>tools.php</dfn>, and put the following code in it:</p>
+
+<textarea class="textarea" style="width:100%" cols="50" rows="10">
+&lt;?php
+class Tools extends CI_Controller {
+
+ public function message($to = 'World')
+ {
+ echo "Hello {$to}!".PHP_EOL;
+ }
+}
+?&gt;
+</textarea>
+
+<p>Then save the file to your <dfn>application/controllers/</dfn> folder.</p>
+
+<p>Now normally you would visit the your site using a URL similar to this:</p>
+
+<code>example.com/index.php/<var>tools</var>/<var>message</var>/<var>to</var></code>
+
+<p>Instead, we are going to open Terminal in Mac/Lunix or go to Run > "cmd" in Windows and navigate to our CodeIgniter project.</p>
+
+<blockquote>
+ $ cd /path/to/project;<br/>
+ $ php index.php tools message
+</blockquote>
+
+<p>If you did it right, you should see <samp>Hello World!</samp>.</p>
+
+<blockquote>
+ $ php index.php tools message "John Smith"
+</blockquote>
+
+<p>Here we are passing it a argument in the same way that URL parameters work. "John Smith" is passed as a argument and output is: <samp>Hello John Smith!</samp>.</p>
+
+<h2>That's it!</h2>
+
+<p>That, in a nutshell, is all there is to know about controllers on the command line. Remember that this is just a normal controller, so routing and _remap works fine.</p>
+
+
+
+</div>
+<!-- END CONTENT -->
+
+
+<div id="footer">
+<p>
+Previous Topic:&nbsp;&nbsp;<a href="urls.html">CodeIgniter URLs</a>
+&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+Next Topic:&nbsp;&nbsp;<a href="reserved_names.html">Reserved Names</a></p>
+<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006 - 2011 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">EllisLab, Inc.</a></p>
+</div>
+
+</body>
+</html> \ No newline at end of file
diff --git a/user_guide/general/common_functions.html b/user_guide/general/common_functions.html
index 03c455346..3c7a5df9e 100644
--- a/user_guide/general/common_functions.html
+++ b/user_guide/general/common_functions.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -68,7 +68,7 @@ Auto-loading Resources
&nbsp;&nbsp;&nbsp;&nbsp;$str = quoted_printable_encode($str);<br />
}</code>
-<p>Returns boolean <kbd>TRUE</kbd> if the installed version of PHP is equal to or greater than the supplied version number. Returns <kbd>FALSE</kbd> if the installed version of PHP is lower than the supplied version number.</p>
+<p>Returns boolean <kbd>TRUE</kbd> if the installed version of PHP is equal to or greater than the supplied version number. Returns <kbd>FALSE</kbd> if the installed version of PHP is lower than the supplied version number.</p>
<h2>is_really_writable('<var>path/to/file</var>')</h2>
@@ -92,10 +92,10 @@ else<br />
<h2>set_status_header(<var>code</var>, '<var>text</var>');</h2>
-<p>Permits you to manually set a server status header. Example:</p>
+<p>Permits you to manually set a server status header. Example:</p>
<code>set_status_header(401);<br />
-// Sets the header as: Unauthorized</code>
+// Sets the header as: Unauthorized</code>
<p><a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html">See here</a> for a full list of headers.</p>
diff --git a/user_guide/general/controllers.html b/user_guide/general/controllers.html
index 91e700aba..01ef3d1ff 100644
--- a/user_guide/general/controllers.html
+++ b/user_guide/general/controllers.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -91,14 +91,14 @@ Controllers
<a name="hello"></a>
<h2>Let's try it:&nbsp; Hello World!</h2>
-<p>Let's create a simple controller so you can see it in action. Using your text editor, create a file called <dfn>blog.php</dfn>, and put the following code in it:</p>
+<p>Let's create a simple controller so you can see it in action. Using your text editor, create a file called <dfn>blog.php</dfn>, and put the following code in it:</p>
<textarea class="textarea" style="width:100%" cols="50" rows="10">
&lt;?php
class Blog extends CI_Controller {
- function index()
+ public function index()
{
echo 'Hello World!';
}
@@ -116,7 +116,7 @@ class Blog extends CI_Controller {
<p>If you did it right, you should see <samp>Hello World!</samp>.</p>
-<p>Note: Class names must start with an uppercase letter. In other words, this is valid:</p>
+<p>Note: Class names must start with an uppercase letter. In other words, this is valid:</p>
<code>&lt;?php<br />
class <var>Blog</var> extends CI_Controller {<br />
@@ -139,26 +139,26 @@ class <var>blog</var> extends CI_Controller {<br />
<a name="functions"></a>
<h2>Functions</h2>
-<p>In the above example the function name is <dfn>index()</dfn>. The "index" function is always loaded by default if the
-<strong>second segment</strong> of the URI is empty. Another way to show your "Hello World" message would be this:</p>
+<p>In the above example the function name is <dfn>index()</dfn>. The "index" function is always loaded by default if the
+<strong>second segment</strong> of the URI is empty. Another way to show your "Hello World" message would be this:</p>
<code>example.com/index.php/<var>blog</var>/<samp>index</samp>/</code>
<p><strong>The second segment of the URI determines which function in the controller gets called.</strong></p>
-<p>Let's try it. Add a new function to your controller:</p>
+<p>Let's try it. Add a new function to your controller:</p>
<textarea class="textarea" style="width:100%" cols="50" rows="15">
&lt;?php
class Blog extends CI_Controller {
- function index()
+ public function index()
{
echo 'Hello World!';
}
- function comments()
+ public function comments()
{
echo 'Look at this!';
}
@@ -187,7 +187,7 @@ class Blog extends CI_Controller {
&lt;?php<br />
class Products extends CI_Controller {<br />
<br />
-&nbsp;&nbsp;&nbsp;&nbsp;function shoes($sandals, $id)<br />
+&nbsp;&nbsp;&nbsp;&nbsp;public function shoes($sandals, $id)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $sandals;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $id;<br />
@@ -204,7 +204,7 @@ passed to your function will be the re-routed ones.</p>
<h2>Defining a Default Controller</h2>
<p>CodeIgniter can be told to load a default controller when a URI is not present,
-as will be the case when only your site root URL is requested. To specify a default controller, open
+as will be the case when only your site root URL is requested. To specify a default controller, open
your <dfn>application/config/routes.php</dfn> file and set this variable:</p>
<code>$route['default_controller'] = '<var>Blog</var>';</code>
@@ -220,18 +220,18 @@ specifying any URI segments you'll see your Hello World message by default.</p>
<p>As noted above, the second segment of the URI typically determines which function in the controller gets called.
CodeIgniter permits you to override this behavior through the use of the <kbd>_remap()</kbd> function:</p>
-<code>function _remap()<br />
+<code>public function _remap()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Some code here...<br />
}</code>
<p class="important"><strong>Important:</strong>&nbsp; If your controller contains a function named <kbd>_remap()</kbd>, it will <strong>always</strong>
-get called regardless of what your URI contains. It overrides the normal behavior in which the URI determines which function is called,
+get called regardless of what your URI contains. It overrides the normal behavior in which the URI determines which function is called,
allowing you to define your own function routing rules.</p>
<p>The overridden function call (typically the second segment of the URI) will be passed as a parameter to the <kbd>_remap()</kbd> function:</p>
-<code>function _remap(<var>$method</var>)<br />
+<code>public function _remap(<var>$method</var>)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ($method == 'some_method')<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
@@ -245,10 +245,10 @@ allowing you to define your own function routing rules.</p>
<p>Any extra segments after the method name are passed into <kbd>_remap()</kbd> as an optional second parameter. This array can be used in combination with PHP's <a href="http://php.net/call_user_func_array">call_user_func_array</a> to emulate CodeIgniter's default behavior.</p>
-<code>function _remap($method, $params = array())<br />
+<code>public function _remap($method, $params = array())<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;$method = 'process_'.$method;<br />
-&nbsp;&nbsp;&nbsp;&nbsp;if (method_exists($this, $method)<br />
+&nbsp;&nbsp;&nbsp;&nbsp;if (method_exists($this, $method))<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return call_user_func_array(array($this, $method), $params);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
@@ -259,9 +259,9 @@ allowing you to define your own function routing rules.</p>
<a name="output"></a>
<h2>Processing Output</h2>
-<p>CodeIgniter has an output class that takes care of sending your final rendered data to the web browser automatically. More information on this can be found in the
-<a href="views.html">Views</a> and <a href="../libraries/output.html">Output class</a> pages. In some cases, however, you might want to
-post-process the finalized data in some way and send it to the browser yourself. CodeIgniter permits you to
+<p>CodeIgniter has an output class that takes care of sending your final rendered data to the web browser automatically. More information on this can be found in the
+<a href="views.html">Views</a> and <a href="../libraries/output.html">Output class</a> pages. In some cases, however, you might want to
+post-process the finalized data in some way and send it to the browser yourself. CodeIgniter permits you to
add a function named <dfn>_output()</dfn> to your controller that will receive the finalized output data.</p>
<p><strong>Important:</strong>&nbsp; If your controller contains a function named <kbd>_output()</kbd>, it will <strong>always</strong>
@@ -270,12 +270,12 @@ be called by the output class instead of echoing the finalized data directly. Th
<p>Here is an example:</p>
<code>
-function _output($output)<br />
+public function _output($output)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo $output;<br />
}</code>
-<p class="important">Please note that your <dfn>_output()</dfn> function will receive the data in its finalized state. Benchmark and memory usage data will be rendered,
+<p class="important">Please note that your <dfn>_output()</dfn> function will receive the data in its finalized state. Benchmark and memory usage data will be rendered,
cache files written (if you have caching enabled), and headers will be sent (if you use that <a href="../libraries/output.html">feature</a>)
before it is handed off to the _output() function.<br />
<br />
@@ -287,18 +287,18 @@ To have your controller's output cached properly, its <dfn>_output()</dfn> metho
}</code>
If you are using this feature the page execution timer and memory usage stats might not be perfectly accurate
-since they will not take into acccount any further processing you do. For an alternate way to control output <em>before</em> any of the final processing is done, please see
+since they will not take into acccount any further processing you do. For an alternate way to control output <em>before</em> any of the final processing is done, please see
the available methods in the <a href="../libraries/output.html">Output Class</a>.</p>
<a name="private"></a>
<h2>Private Functions</h2>
-<p>In some cases you may want certain functions hidden from public access. To make a function private, simply add an
+<p>In some cases you may want certain functions hidden from public access. To make a function private, simply add an
underscore as the name prefix and it will not be served via a URL request. For example, if you were to have a function like this:</p>
<code>
-function _utility()<br />
+private function _utility()<br />
{<br />
&nbsp;&nbsp;// some code<br />
}</code>
@@ -312,11 +312,11 @@ function _utility()<br />
<a name="subfolders"></a>
<h2>Organizing Your Controllers into Sub-folders</h2>
-<p>If you are building a large application you might find it convenient to organize your controllers into sub-folders. CodeIgniter permits you to do this.</p>
+<p>If you are building a large application you might find it convenient to organize your controllers into sub-folders. CodeIgniter permits you to do this.</p>
<p>Simply create folders within your <dfn>application/controllers</dfn> directory and place your controller classes within them.</p>
-<p><strong>Note:</strong>&nbsp; When using this feature the first segment of your URI must specify the folder. For example, lets say you have a controller
+<p><strong>Note:</strong>&nbsp; When using this feature the first segment of your URI must specify the folder. For example, lets say you have a controller
located here:</p>
<code>application/controllers/<kbd>products</kbd>/shoes.php</code>
@@ -326,7 +326,7 @@ located here:</p>
<code>example.com/index.php/products/shoes/show/123</code>
<p>Each of your sub-folders may contain a default controller which will be
-called if the URL contains only the sub-folder. Simply name your default controller as specified in your
+called if the URL contains only the sub-folder. Simply name your default controller as specified in your
<dfn>application/config/routes.php</dfn> file</p>
@@ -346,7 +346,7 @@ called if the URL contains only the sub-folder. Simply name your default contro
&lt;?php<br />
class <kbd>Blog</kbd> extends CI_Controller {<br />
<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function <kbd>__construct()</kbd><br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public function <kbd>__construct()</kbd><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<var>parent::__construct();</var><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Your own constructor code<br />
diff --git a/user_guide/general/core_classes.html b/user_guide/general/core_classes.html
index 11410a31f..e5521b453 100644
--- a/user_guide/general/core_classes.html
+++ b/user_guide/general/core_classes.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -111,12 +111,12 @@ class CI_Input {<br /><br />
<h2>Extending Core Class</h2>
<p>If all you need to do is add some functionality to an existing library - perhaps add a function or two - then
-it's overkill to replace the entire library with your version. In this case it's better to simply extend the class.
+it's overkill to replace the entire library with your version. In this case it's better to simply extend the class.
Extending a class is nearly identical to replacing a class with a couple exceptions:</p>
<ul>
<li>The class declaration must extend the parent class.</li>
-<li>Your new class name and filename must be prefixed with <kbd>MY_</kbd> (this item is configurable. See below.).</li>
+<li>Your new class name and filename must be prefixed with <kbd>MY_</kbd> (this item is configurable. See below.).</li>
</ul>
<p>For example, to extend the native <kbd>Input</kbd> class you'll create a file named <dfn>application/core/</dfn><kbd>MY_Input.php</kbd>, and declare your class with:</p>
diff --git a/user_guide/general/creating_drivers.html b/user_guide/general/creating_drivers.html
index 6208dd5d3..a7594056b 100644
--- a/user_guide/general/creating_drivers.html
+++ b/user_guide/general/creating_drivers.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
diff --git a/user_guide/general/creating_libraries.html b/user_guide/general/creating_libraries.html
index b7b66f0c1..a44ec47b7 100644
--- a/user_guide/general/creating_libraries.html
+++ b/user_guide/general/creating_libraries.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -58,7 +58,7 @@ Creating Libraries
<h1>Creating Libraries</h1>
<p>When we use the term "Libraries" we are normally referring to the classes that are located in the <kbd>libraries</kbd>
-directory and described in the Class Reference of this user guide. In this case, however, we will instead describe how you can create
+directory and described in the Class Reference of this user guide. In this case, however, we will instead describe how you can create
your own libraries within your <dfn>application/libraries</dfn> directory in order to maintain separation between your local resources
and the global framework resources.</p>
@@ -75,7 +75,7 @@ to an existing library. Or you can even replace native libraries just by placing
<p>The page below explains these three concepts in detail.</p>
-<p class="important"><strong>Note:</strong> The Database classes can not be extended or replaced with your own classes. All other classes are able to be replaced/extended.</p>
+<p class="important"><strong>Note:</strong> The Database classes can not be extended or replaced with your own classes. All other classes are able to be replaced/extended.</p>
<h2>Storage</h2>
@@ -88,24 +88,24 @@ they are initialized.</p>
<ul>
<li>File names must be capitalized. For example:&nbsp; <dfn>Myclass.php</dfn></li>
-<li>Class declarations must be capitalized. For example:&nbsp; <kbd>class Myclass</kbd></li>
+<li>Class declarations must be capitalized. For example:&nbsp; <kbd>class Myclass</kbd></li>
<li>Class names and file names must match.</li>
</ul>
<h2>The Class File</h2>
-<p>Classes should have this basic prototype (Note: We are using the name <kbd>Someclass</kbd> purely as an example):</p>
+<p>Classes should have this basic prototype (Note: We are using the name <kbd>Someclass</kbd> purely as an example):</p>
-<code>&lt;?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<code>&lt;?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
<br /><br />
class Someclass {<br />
<br />
-&nbsp;&nbsp;&nbsp;&nbsp;function some_function()<br />
+&nbsp;&nbsp;&nbsp;&nbsp;public function some_function()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br /><br />
-?&gt;</code>
+/* End of file Someclass.php */</code>
<h2>Using Your Class</h2>
@@ -136,19 +136,19 @@ $this->load->library('Someclass', <kbd>$params</kbd>);</code>
<p>If you use this feature you must set up your class constructor to expect data:</p>
-<code>&lt;?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');<br />
+<code>&lt;?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');<br />
<br />
class Someclass {<br />
<br />
-&nbsp;&nbsp;&nbsp;&nbsp;function __construct($params)<br />
+&nbsp;&nbsp;&nbsp;&nbsp;public function __construct($params)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Do something with $params<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br /><br />
?&gt;</code>
-<p class="important">You can also pass parameters stored in a config file. Simply create a config file named identically to the class <kbd>file name</kbd>
-and store it in your <dfn>application/config/</dfn> folder. Note that if you dynamically pass parameters as described above,
+<p class="important">You can also pass parameters stored in a config file. Simply create a config file named identically to the class <kbd>file name</kbd>
+and store it in your <dfn>application/config/</dfn> folder. Note that if you dynamically pass parameters as described above,
the config file option will not be available.</p>
@@ -202,7 +202,7 @@ etc.
<h2>Replacing Native Libraries with Your Versions</h2>
<p>Simply by naming your class files identically to a native library will cause CodeIgniter to use it instead of the native one. To use this
-feature you must name the file and the class declaration exactly the same as the native library. For example, to replace the native <kbd>Email</kbd> library
+feature you must name the file and the class declaration exactly the same as the native library. For example, to replace the native <kbd>Email</kbd> library
you'll create a file named <dfn>application/libraries/Email.php</dfn>, and declare your class with:</p>
<code>
@@ -222,12 +222,12 @@ class CI_Email {<br /><br />
<h2>Extending Native Libraries</h2>
<p>If all you need to do is add some functionality to an existing library - perhaps add a function or two - then
-it's overkill to replace the entire library with your version. In this case it's better to simply extend the class.
+it's overkill to replace the entire library with your version. In this case it's better to simply extend the class.
Extending a class is nearly identical to replacing a class with a couple exceptions:</p>
<ul>
<li>The class declaration must extend the parent class.</li>
-<li>Your new class name and filename must be prefixed with <kbd>MY_</kbd> (this item is configurable. See below.).</li>
+<li>Your new class name and filename must be prefixed with <kbd>MY_</kbd> (this item is configurable. See below.).</li>
</ul>
<p>For example, to extend the native <kbd>Email</kbd> class you'll create a file named <dfn>application/libraries/</dfn><kbd>MY_Email.php</kbd>, and declare your class with:</p>
@@ -243,7 +243,7 @@ class MY_Email extends CI_Email {<br /><br />
<code>
class MY_Email extends CI_Email {<br />
<br />
-&nbsp;&nbsp;&nbsp;&nbsp;function __construct()<br />
+&nbsp;&nbsp;&nbsp;&nbsp;public function __construct()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent::__construct();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
@@ -252,12 +252,12 @@ class MY_Email extends CI_Email {<br />
<h3>Loading Your Sub-class</h3>
-<p>To load your sub-class you'll use the standard syntax normally used. DO NOT include your prefix. For example,
+<p>To load your sub-class you'll use the standard syntax normally used. DO NOT include your prefix. For example,
to load the example above, which extends the Email class, you will use:</p>
<code>$this->load->library('<kbd>email</kbd>');</code>
-<p>Once loaded you will use the class variable as you normally would for the class you are extending. In the case of
+<p>Once loaded you will use the class variable as you normally would for the class you are extending. In the case of
the email class all calls will use:</p>
diff --git a/user_guide/general/credits.html b/user_guide/general/credits.html
index b6915924c..64b72c47d 100644
--- a/user_guide/general/credits.html
+++ b/user_guide/general/credits.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -58,11 +58,12 @@ Credits
<h1>Credits</h1>
<p>CodeIgniter was originally developed by <a href="http://www.ellislab.com/">Rick Ellis</a> (CEO of
-<a href="http://ellislab.com/">EllisLab, Inc.</a>). The framework was written for performance in the real
+<a href="http://ellislab.com/">EllisLab, Inc.</a>). The framework was written for performance in the real
world, with many of the class libraries, helpers, and sub-systems borrowed from the code-base of
<a href="http://www.expressionengine.com/">ExpressionEngine</a>.</p>
-<p>It is currently developed and maintained by the ExpressionEngine Development Team.</p>
+<p>It is currently developed and maintained by the ExpressionEngine Development Team.<br />
+Bleeding edge development is spearheaded by the handpicked contributors of the Reactor Team.</p>
<p>A hat tip goes to Ruby on Rails for inspiring us to create a PHP framework, and for
bringing frameworks into the general consciousness of the web community.</p>
diff --git a/user_guide/general/drivers.html b/user_guide/general/drivers.html
index 83ed9852d..4cdb56880 100644
--- a/user_guide/general/drivers.html
+++ b/user_guide/general/drivers.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -58,15 +58,15 @@ Using CodeIgniter Drivers
<h1>Using CodeIgniter Drivers</h1>
-<p>Drivers are a special type of Library that has a parent class and any number of potential child classes. Child classes have access to the parent class, but not their siblings. Drivers provide an elegant syntax in your <a href="controllers.html">controllers</a> for libraries that benefit from or require being broken down into discrete classes.</p>
+<p>Drivers are a special type of Library that has a parent class and any number of potential child classes. Child classes have access to the parent class, but not their siblings. Drivers provide an elegant syntax in your <a href="controllers.html">controllers</a> for libraries that benefit from or require being broken down into discrete classes.</p>
-<p>Drivers are found in the <dfn>system/libraries</dfn> folder, in their own folder which is identically named to the parent library class. Also inside that folder is a subfolder named <kbd>drivers</kbd>, which contains all of the possible child class files.</p>
+<p>Drivers are found in the <dfn>system/libraries</dfn> folder, in their own folder which is identically named to the parent library class. Also inside that folder is a subfolder named <kbd>drivers</kbd>, which contains all of the possible child class files.</p>
<p>To use a driver you will initialize it within a controller using the following initialization function:</p>
<code>$this->load->driver('<var>class name</var>'); </code>
-<p>Where <var>class name</var> is the name of the driver class you want to invoke. For example, to load a driver named "Some Parent" you would do this:</p>
+<p>Where <var>class name</var> is the name of the driver class you want to invoke. For example, to load a driver named "Some Parent" you would do this:</p>
<code>$this->load->driver('<var>some_parent</var>');</code>
diff --git a/user_guide/general/environments.html b/user_guide/general/environments.html
index 690c14c2c..9aed1d6ff 100644
--- a/user_guide/general/environments.html
+++ b/user_guide/general/environments.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>Creating Libraries : CodeIgniter User Guide</title>
+<title>Handling Multiple Environments : CodeIgniter User Guide</title>
<style type='text/css' media='all'>@import url('../userguide.css');</style>
<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -42,7 +42,7 @@
<td id="breadcrumb">
<a href="http://codeigniter.com/">CodeIgniter Home</a> &nbsp;&#8250;&nbsp;
<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
-Creating Libraries
+Handling Multiple Environments
</td>
<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.com/user_guide/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
</tr>
@@ -58,17 +58,17 @@ Creating Libraries
<h1>Handling Multiple Environments</h1>
<p>
- Developers often desire different system behavior depending on whether
- an application is running in a development or production
- environment. For example, verbose error output is something that would
- be useful while developing an application, but it may also pose a security issue when "live".
+ Developers often desire different system behavior depending on whether
+ an application is running in a development or production
+ environment. For example, verbose error output is something that would
+ be useful while developing an application, but it may also pose a security issue when "live".
</p>
<h2>The ENVIRONMENT Constant</h2>
<p>
- By default, CodeIgniter comes with the environment constant set to
- '<kbd>development</kbd>'. At the top of index.php, you will see:
+ By default, CodeIgniter comes with the environment constant set to
+ '<kbd>development</kbd>'. At the top of index.php, you will see:
</p>
<code>
@@ -76,35 +76,35 @@ define('<var>ENVIRONMENT</var>', '<var>development</var>');
</code>
<p>
- In addition to affecting some basic framework behavior (see the next section),
- you may use this constant in your own development to differentiate
- between which environment you are running in.
+ In addition to affecting some basic framework behavior (see the next section),
+ you may use this constant in your own development to differentiate
+ between which environment you are running in.
</p>
<h2>Effects On Default Framework Behavior</h2>
<p>
- There are some places in the CodeIgniter system where the <kbd>ENVIRONMENT</kbd>
- constant is used. This section describes how default framework behavior is
- affected.
+ There are some places in the CodeIgniter system where the <kbd>ENVIRONMENT</kbd>
+ constant is used. This section describes how default framework behavior is
+ affected.
</p>
<h3>Error Reporting</h3>
<p>
- Setting the <kbd>ENVIRONMENT</kbd> constant to a value of '<kbd>development</kbd>' will
- cause all PHP errors to be rendered to the browser when they occur. Conversely,
- setting the constant to '<kbd>production</kbd>' will disable all error output. Disabling
- error reporting in production is a <a href="security.html">good security practice</a>.
+ Setting the <kbd>ENVIRONMENT</kbd> constant to a value of '<kbd>development</kbd>' will
+ cause all PHP errors to be rendered to the browser when they occur. Conversely,
+ setting the constant to '<kbd>production</kbd>' will disable all error output. Disabling
+ error reporting in production is a <a href="security.html">good security practice</a>.
</p>
<h3>Configuration Files</h3>
<p>
- Optionally, you can have CodeIgniter load environment-specific
- configuration files. This may be useful for managing things like differing API keys
- across multiple environments. This is described in more detail in the
- environment section of the <a href="../libraries/config.html#environments">Config Class</a> documentation.
+ Optionally, you can have CodeIgniter load environment-specific
+ configuration files. This may be useful for managing things like differing API keys
+ across multiple environments. This is described in more detail in the
+ environment section of the <a href="../libraries/config.html#environments">Config Class</a> documentation.
</p>
</div>
@@ -113,11 +113,11 @@ define('<var>ENVIRONMENT</var>', '<var>development</var>');
<div id="footer">
<p>
-Previous Topic:&nbsp;&nbsp;<a href="libraries.html">Using CodeIgniter Libraries</a>
+Previous Topic:&nbsp;&nbsp;<a href="managing_apps.html">Managing Applications</a>
&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
-Next Topic:&nbsp;&nbsp;<a href="drivers.html">Using CodeIgniter Drivers</a>
+Next Topic:&nbsp;&nbsp;<a href="alternative_php.html">Alternative PHP Syntax</a>
</p>
<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006 - 2011 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">EllisLab, Inc.</a></p>
</div>
diff --git a/user_guide/general/errors.html b/user_guide/general/errors.html
index 98af3f0c7..b1664c68d 100644
--- a/user_guide/general/errors.html
+++ b/user_guide/general/errors.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -60,13 +60,13 @@ Error Handling
<p>CodeIgniter lets you build error reporting into your applications using the functions described below.
In addition, it has an error logging class that permits error and debugging messages to be saved as text files.</p>
-<p class="important"><strong>Note:</strong> By default, CodeIgniter displays all PHP errors. You might
-wish to change this behavior once your development is complete. You'll find the <dfn>error_reporting()</dfn>
+<p class="important"><strong>Note:</strong> By default, CodeIgniter displays all PHP errors. You might
+wish to change this behavior once your development is complete. You'll find the <dfn>error_reporting()</dfn>
function located at the top of your main index.php file. Disabling error reporting will NOT prevent log files
from being written if there are errors.</p>
<p>Unlike most systems in CodeIgniter, the error functions are simple procedural interfaces that are available
-globally throughout the application. This approach permits error messages to get triggered without having to worry
+globally throughout the application. This approach permits error messages to get triggered without having to worry
about class/function scoping.</p>
<p>The following functions let you generate errors:</p>
@@ -88,9 +88,9 @@ Note that CodeIgniter automatically shows 404 messages if controllers are not fo
<h2>log_message('<var>level</var>', '<samp>message</samp>')</h2>
-<p>This function lets you write messages to your log files. You must supply one of three "levels"
+<p>This function lets you write messages to your log files. You must supply one of three "levels"
in the first parameter, indicating what type of message it is (debug, error, info), with the message
-itself in the second parameter. Example:</p>
+itself in the second parameter. Example:</p>
<code>
if ($some_var == "")<br />
@@ -108,14 +108,14 @@ log_message('info', 'The purpose of some variable is to provide some value.');<b
<p>There are three message types:</p>
<ol>
-<li>Error Messages. These are actual errors, such as PHP errors or user errors.</li>
-<li>Debug Messages. These are messages that assist in debugging. For example, if a class has been initialized, you could log this as debugging info.</li>
-<li>Informational Messages. These are the lowest priority messages, simply giving information regarding some process. CodeIgniter doesn't natively generate any info messages but you may want to in your application.</li>
+<li>Error Messages. These are actual errors, such as PHP errors or user errors.</li>
+<li>Debug Messages. These are messages that assist in debugging. For example, if a class has been initialized, you could log this as debugging info.</li>
+<li>Informational Messages. These are the lowest priority messages, simply giving information regarding some process. CodeIgniter doesn't natively generate any info messages but you may want to in your application.</li>
</ol>
<p class="important"><strong>Note:</strong> In order for the log file to actually be written, the
- "logs" folder must be writable. In addition, you must set the "threshold" for logging.
+ "logs" folder must be writable. In addition, you must set the "threshold" for logging in <dfn>application/config/config.php</dfn>.
You might, for example, only want error messages to be logged, and not the other two types.
If you set it to zero logging will be disabled.</p>
diff --git a/user_guide/general/helpers.html b/user_guide/general/helpers.html
index cc3e22644..99f47178e 100644
--- a/user_guide/general/helpers.html
+++ b/user_guide/general/helpers.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -57,20 +57,20 @@ Helper Functions
<h1>Helper Functions</h1>
-<p>Helpers, as the name suggests, help you with tasks. Each helper file is simply a collection of functions in a particular
-category. There are <dfn>URL Helpers</dfn>, that assist in creating links, there are <dfn>Form Helpers</dfn>
+<p>Helpers, as the name suggests, help you with tasks. Each helper file is simply a collection of functions in a particular
+category. There are <dfn>URL Helpers</dfn>, that assist in creating links, there are <dfn>Form Helpers</dfn>
that help you create form elements, <dfn>Text Helpers</dfn> perform various text formatting routines,
<dfn>Cookie Helpers</dfn> set and read cookies, <dfn>File Helpers</dfn> help you deal with files, etc.
</p>
-<p>Unlike most other systems in CodeIgniter, Helpers are not written in an Object Oriented format. They are simple, procedural functions.
+<p>Unlike most other systems in CodeIgniter, Helpers are not written in an Object Oriented format. They are simple, procedural functions.
Each helper function performs one specific task, with no dependence on other functions.</p>
<p>CodeIgniter does not load Helper Files by default, so the first step in using
-a Helper is to load it. Once loaded, it becomes globally available in your <a href="../general/controllers.html">controller</a> and <a href="../general/views.html">views</a>.</p>
+a Helper is to load it. Once loaded, it becomes globally available in your <a href="../general/controllers.html">controller</a> and <a href="../general/views.html">views</a>.</p>
<p>Helpers are typically stored in your <dfn>system/helpers</dfn>, or <dfn>application/helpers </dfn>directory. CodeIgniter will look first in your <dfn>application/helpers</dfn>
-directory. If the directory does not exist or the specified helper is not located there CI will instead look in your global
+directory. If the directory does not exist or the specified helper is not located there CI will instead look in your global
<dfn>system/helpers</dfn> folder.</p>
@@ -87,10 +87,10 @@ directory. If the directory does not exist or the specified helper is not locat
<code>$this->load->helper('<var>url</var>');</code>
<p>A helper can be loaded anywhere within your controller functions (or even within your View files, although that's not a good practice),
-as long as you load it before you use it. You can load your helpers in your controller constructor so that they become available
+as long as you load it before you use it. You can load your helpers in your controller constructor so that they become available
automatically in any function, or you can load a helper in a specific function that needs it.</p>
-<p class="important">Note: The Helper loading function above does not return a value, so don't try to assign it to a variable. Just use it as shown.</p>
+<p class="important">Note: The Helper loading function above does not return a value, so don't try to assign it to a variable. Just use it as shown.</p>
<h2>Loading Multiple Helpers</h2>
@@ -117,12 +117,12 @@ This is done by opening the <var>application/config/autoload.php</var> file and
<h2>"Extending" Helpers</h2>
-<p>To "extend" Helpers, create a file in your <dfn>application/helpers/</dfn> folder with an identical name to the existing Helper, but prefixed with <kbd>MY_</kbd> (this item is configurable. See below.).</p>
+<p>To "extend" Helpers, create a file in your <dfn>application/helpers/</dfn> folder with an identical name to the existing Helper, but prefixed with <kbd>MY_</kbd> (this item is configurable. See below.).</p>
<p>If all you need to do is add some functionality to an existing helper - perhaps add a function or two, or change how a particular
- helper function operates - then it's overkill to replace the entire helper with your version. In this case it's better to simply
- "extend" the Helper. The term "extend" is used loosely since Helper functions are procedural and discrete and cannot be extended
- in the traditional programmatic sense. Under the hood, this gives you the ability to add to the functions a Helper provides,
+ helper function operates - then it's overkill to replace the entire helper with your version. In this case it's better to simply
+ "extend" the Helper. The term "extend" is used loosely since Helper functions are procedural and discrete and cannot be extended
+ in the traditional programmatic sense. Under the hood, this gives you the ability to add to the functions a Helper provides,
or to modify how the native Helper functions operate.</p>
<p>For example, to extend the native <kbd>Array Helper</kbd> you'll create a file named <dfn>application/helpers/</dfn><kbd>MY_array_helper.php</kbd>, and add or override functions:</p>
@@ -154,7 +154,7 @@ function random_element($array)<br />
<h3>Setting Your Own Prefix</h3>
-<p>The filename prefix for "extending" Helpers is the same used to extend libraries and Core classes. To set your own prefix, open your <dfn>application/config/config.php</dfn> file and look for this item:</p>
+<p>The filename prefix for "extending" Helpers is the same used to extend libraries and Core classes. To set your own prefix, open your <dfn>application/config/config.php</dfn> file and look for this item:</p>
<code>$config['subclass_prefix'] = 'MY_';</code>
@@ -163,7 +163,7 @@ function random_element($array)<br />
<h2>Now What?</h2>
-<p>In the Table of Contents you'll find a list of all the available Helper Files. Browse each one to see what they do.</p>
+<p>In the Table of Contents you'll find a list of all the available Helper Files. Browse each one to see what they do.</p>
</div>
diff --git a/user_guide/general/hooks.html b/user_guide/general/hooks.html
index 1a77389a9..1293d12eb 100644
--- a/user_guide/general/hooks.html
+++ b/user_guide/general/hooks.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -73,7 +73,7 @@ your own scripts in some other location.
<h2>Defining a Hook</h2>
-<p>Hooks are defined in <dfn>application/config/hooks.php</dfn> file. Each hook is specified as an array with this prototype:</p>
+<p>Hooks are defined in <dfn>application/config/hooks.php</dfn> file. Each hook is specified as an array with this prototype:</p>
<code>
$hook['pre_controller'] = array(<br />
@@ -85,14 +85,14 @@ $hook['pre_controller'] = array(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);</code>
<p><strong>Notes:</strong><br />The array index correlates to the name of the particular hook point you want to
-use. In the above example the hook point is <kbd>pre_controller</kbd>. A list of hook points is found below.
+use. In the above example the hook point is <kbd>pre_controller</kbd>. A list of hook points is found below.
The following items should be defined in your associative hook array:</p>
<ul>
<li><strong>class</strong>&nbsp; The name of the class you wish to invoke. If you prefer to use a procedural function instead of a class, leave this item blank.</li>
<li><strong>function</strong>&nbsp; The function name you wish to call.</li>
<li><strong>filename</strong>&nbsp; The file name containing your class/function.</li>
-<li><strong>filepath</strong>&nbsp; The name of the directory containing your script. Note: Your script must be located in a directory INSIDE your <kbd>application</kbd> folder, so the file path is relative to that folder. For example, if your script is located in <dfn>application/hooks</dfn>, you will simply use <samp>hooks</samp> as your filepath. If your script is located in <dfn>application/hooks/utilities</dfn> you will use <samp>hooks/utilities</samp> as your filepath. No trailing slash.</li>
+<li><strong>filepath</strong>&nbsp; The name of the directory containing your script. Note: Your script must be located in a directory INSIDE your <kbd>application</kbd> folder, so the file path is relative to that folder. For example, if your script is located in <dfn>application/hooks</dfn>, you will simply use <samp>hooks</samp> as your filepath. If your script is located in <dfn>application/hooks/utilities</dfn> you will use <samp>hooks/utilities</samp> as your filepath. No trailing slash.</li>
<li><strong>params</strong>&nbsp; Any parameters you wish to pass to your script. This item is optional.</li>
</ul>
@@ -122,7 +122,7 @@ $hook['pre_controller']<kbd>[]</kbd> = array(<br />
<code>$hook['pre_controller']<kbd>[]</kbd></code>
-<p>This permits you to have the same hook point with multiple scripts. The order you define your array will be the execution order.</p>
+<p>This permits you to have the same hook point with multiple scripts. The order you define your array will be the execution order.</p>
<h2>Hook Points</h2>
@@ -131,7 +131,7 @@ $hook['pre_controller']<kbd>[]</kbd> = array(<br />
<ul>
<li><strong>pre_system</strong><br />
- Called very early during system execution. Only the benchmark and hooks class have been loaded at this point. No routing or other processes have happened.</li>
+ Called very early during system execution. Only the benchmark and hooks class have been loaded at this point. No routing or other processes have happened.</li>
<li><strong>pre_controller</strong><br />
Called immediately prior to any of your controllers being called. All base classes, routing, and security checks have been done.</li>
<li><strong>post_controller_constructor</strong><br />
@@ -139,10 +139,10 @@ $hook['pre_controller']<kbd>[]</kbd> = array(<br />
<li><strong>post_controller</strong><br />
Called immediately after your controller is fully executed.</li>
<li><strong>display_override</strong><br />
- Overrides the <dfn>_display()</dfn> function, used to send the finalized page to the web browser at the end of system execution. This permits you to
- use your own display methodology. Note that you will need to reference the CI superobject with <dfn>$this->CI =&amp; get_instance()</dfn> and then the finalized data will be available by calling <dfn>$this->CI->output->get_output()</dfn></li>
+ Overrides the <dfn>_display()</dfn> function, used to send the finalized page to the web browser at the end of system execution. This permits you to
+ use your own display methodology. Note that you will need to reference the CI superobject with <dfn>$this->CI =&amp; get_instance()</dfn> and then the finalized data will be available by calling <dfn>$this->CI->output->get_output()</dfn></li>
<li><strong>cache_override</strong><br />
- Enables you to call your own function instead of the <dfn>_display_cache()</dfn> function in the output class. This permits you to use your own cache display mechanism.</li>
+ Enables you to call your own function instead of the <dfn>_display_cache()</dfn> function in the output class. This permits you to use your own cache display mechanism.</li>
<li><strong>post_system</strong><br />
Called after the final rendered page is sent to the browser, at the end of system execution after the finalized data is sent to the browser.</li>
</ul>
diff --git a/user_guide/general/libraries.html b/user_guide/general/libraries.html
index 82c409bf0..ff869247f 100644
--- a/user_guide/general/libraries.html
+++ b/user_guide/general/libraries.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -63,7 +63,7 @@ In most cases, to use one of these classes involves initializing it within a <a
<code>$this->load->library('<var>class name</var>'); </code>
-<p>Where <var>class name</var> is the name of the class you want to invoke. For example, to load the form validation class you would do this:</p>
+<p>Where <var>class name</var> is the name of the class you want to invoke. For example, to load the form validation class you would do this:</p>
<code>$this->load->library('<var>form_validation</var>'); </code>
diff --git a/user_guide/general/managing_apps.html b/user_guide/general/managing_apps.html
index 4b4493dce..a6f9b72a0 100644
--- a/user_guide/general/managing_apps.html
+++ b/user_guide/general/managing_apps.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -58,7 +58,7 @@ Managing your Applications
<h1>Managing your Applications</h1>
<p>By default it is assumed that you only intend to use CodeIgniter to manage one application, which you will build in your
-<dfn>application/</dfn> directory. It is possible, however, to have multiple sets of applications that share a single
+<dfn>application/</dfn> directory. It is possible, however, to have multiple sets of applications that share a single
CodeIgniter installation, or even to rename or relocate your <dfn>application</dfn> folder.</p>
<h2>Renaming the Application Folder</h2>
@@ -83,7 +83,7 @@ To do so open your main <kbd>index.php</kbd> and set a <em>full server path</em>
put all of the directories located inside your <kbd>application</kbd> folder into their
own sub-folder.</p>
-<p>For example, let's say you want to create two applications, "foo" and "bar". You could structure your
+<p>For example, let's say you want to create two applications, "foo" and "bar". You could structure your
application folders like this:</p>
<code>applications/<var>foo</var>/<br />
@@ -103,12 +103,12 @@ applications/<samp>bar</samp>/views/</code>
<p>To select a particular application for use requires that you open your main <kbd>index.php</kbd> file and set the <dfn>$application_folder</dfn>
-variable. For example, to select the "foo" application for use you would do this:</p>
+variable. For example, to select the "foo" application for use you would do this:</p>
<code>$application_folder = "applications/foo";</code>
<p class="important"><strong>Note:</strong>&nbsp; Each of your applications will need its own <dfn>index.php</dfn> file which
-calls the desired application. The index.php file can be named anything you want.</p>
+calls the desired application. The index.php file can be named anything you want.</p>
diff --git a/user_guide/general/models.html b/user_guide/general/models.html
index 9afec7ef2..c0e494351 100644
--- a/user_guide/general/models.html
+++ b/user_guide/general/models.html
@@ -27,7 +27,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -72,8 +72,8 @@ Models
<h2><a name="what"></a>What is a Model?</h2>
-<p>Models are PHP classes that are designed to work with information in your database. For example, let's say
-you use CodeIgniter to manage a blog. You might have a model class that contains functions to insert, update, and
+<p>Models are PHP classes that are designed to work with information in your database. For example, let's say
+you use CodeIgniter to manage a blog. You might have a model class that contains functions to insert, update, and
retrieve your blog data. Here is an example of what such a model class might look like:</p>
<code>
@@ -116,10 +116,10 @@ class&nbsp;Blogmodel&nbsp;extends&nbsp;CI_Model&nbsp;{<br />
}</code>
<p>Note: The functions in the above example use the <a href="../database/active_record.html">Active Record</a> database functions.</p>
-<p class="important"><strong>Note:</strong> For the sake of simplicity in this example we're using $_POST directly. This is generally bad practice, and a more common approach would be to use the <a href="../libraries/input.html">Input Class</a> $this-&gt;input-&gt;post('title')</p>
+<p class="important"><strong>Note:</strong> For the sake of simplicity in this example we're using $_POST directly. This is generally bad practice, and a more common approach would be to use the <a href="../libraries/input.html">Input Class</a> $this-&gt;input-&gt;post('title')</p>
<h2><a name="anatomy"></a>Anatomy of a Model</h2>
-<p>Model classes are stored in your <dfn>application/models/</dfn> folder. They can be nested within sub-folders if you
+<p>Model classes are stored in your <dfn>application/models/</dfn> folder. They can be nested within sub-folders if you
want this type of organization.</p>
<p>The basic prototype for a model class is this:</p>
@@ -134,10 +134,10 @@ class&nbsp;<var>Model_name</var>&nbsp;extends&nbsp;CI_Model&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code>
-<p>Where <var>Model_name</var> is the name of your class. Class names <strong>must</strong> have the first letter capitalized with the rest of the name lowercase.
+<p>Where <var>Model_name</var> is the name of your class. Class names <strong>must</strong> have the first letter capitalized with the rest of the name lowercase.
Make sure your class extends the base Model class.</p>
-<p>The file name will be a lower case version of your class name. For example, if your class is this:</p>
+<p>The file name will be a lower case version of your class name. For example, if your class is this:</p>
<code>
class&nbsp;<var>User_model</var>&nbsp;extends&nbsp;CI_Model&nbsp;{<br />
@@ -161,7 +161,7 @@ To load a model you will use the following function:</p>
<code>$this->load->model('<var>Model_name</var>');</code>
-<p>If your model is located in a sub-folder, include the relative path from your models folder. For example, if
+<p>If your model is located in a sub-folder, include the relative path from your models folder. For example, if
you have a model located at <dfn>application/models/blog/queries.php</dfn> you'll load it using:</p>
<code>$this->load->model('<var>blog/queries</var>');</code>
@@ -200,12 +200,12 @@ class&nbsp;Blog_controller&nbsp;extends&nbsp;CI_Controller&nbsp;{<br />
}</code>
<h2><a name="auto_load_model" id="auto_load_model"></a>Auto-loading Models</h2>
-<p>If you find that you need a particular model globally throughout your application, you can tell CodeIgniter to auto-load it during system initialization. This is done by opening the application/config/autoload.php file and adding the model to the autoload array.</p>
+<p>If you find that you need a particular model globally throughout your application, you can tell CodeIgniter to auto-load it during system initialization. This is done by opening the application/config/autoload.php file and adding the model to the autoload array.</p>
<h2><a name="conn"></a>Connecting to your Database</h2>
-<p>When a model is loaded it does <strong>NOT</strong> connect automatically to your database. The following options for connecting are available to you:</p>
+<p>When a model is loaded it does <strong>NOT</strong> connect automatically to your database. The following options for connecting are available to you:</p>
<ul>
<li>You can connect using the standard database methods <a href="../database/connecting.html">described here</a>, either from within your Controller class or your Model class.</li>
diff --git a/user_guide/general/profiling.html b/user_guide/general/profiling.html
index c8d7eb431..fdf8b6c2b 100644
--- a/user_guide/general/profiling.html
+++ b/user_guide/general/profiling.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -87,7 +87,7 @@ This information can be useful during development in order to help with debuggin
<h2>Enabling and Disabling Profiler Sections</h2>
- <p>Each section of Profiler data can be enabled or disabled by setting a corresponding config variable to <var>TRUE</var> or <var>FALSE</var>. This can be done one of two ways. First, you can set application wide defaults with the <dfn>application/config/profiler.php</dfn> config file.</p>
+ <p>Each section of Profiler data can be enabled or disabled by setting a corresponding config variable to <var>TRUE</var> or <var>FALSE</var>. This can be done one of two ways. First, you can set application wide defaults with the <dfn>application/config/profiler.php</dfn> config file.</p>
<code>$config['config']&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= FALSE;<br />
$config['queries']&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= FALSE;<br /></code>
@@ -105,55 +105,60 @@ This information can be useful during development in order to help with debuggin
<table cellpadding="0" cellspacing="1" border="0" style="width:100%" class="tableborder">
<tr>
- <th>Key</th>
- <th>Description</th>
- <th>Default</th>
- </tr><tr>
-
- <td class="td"><strong>benchmarks</strong></td>
- <td class="td">Elapsed time of Benchmark points and total execution time</td>
- <td class="td">TRUE</td>
- </tr><tr>
-
- <td class="td"><strong>config</strong></td>
- <td class="td">CodeIgniter Config variables</td>
- <td class="td">TRUE</td>
- </tr><tr>
-
- <td class="td"><strong>controller_info</strong></td>
- <td class="td">The Controller class and method requested</td>
- <td class="td">TRUE</td>
- </tr><tr>
-
- <td class="td"><strong>get</strong></td>
- <td class="td">Any GET data passed in the request</td>
- <td class="td">TRUE</td>
- </tr><tr>
-
- <td class="td"><strong>http_headers</strong></td>
- <td class="td">The HTTP headers for the current request</td>
- <td class="td">TRUE</td>
- </tr><tr>
-
- <td class="td"><strong>memory_usage</strong></td>
- <td class="td">Amount of memory consumed by the current request, in bytes</td>
- <td class="td">TRUE</td>
- </tr><tr>
-
- <td class="td"><strong>post</strong></td>
- <td class="td">Any POST data passed in the request</td>
- <td class="td">TRUE</td>
- </tr><tr>
-
- <td class="td"><strong>queries</strong></td>
- <td class="td">Listing of all database queries executed, including execution time</td>
- <td class="td">TRUE</td>
- </tr><tr>
-
- <td class="td"><strong>uri_string</strong></td>
- <td class="td">The URI of the current request</td>
- <td class="td">TRUE</td>
- </tr><tr>
+ <th>Key</th>
+ <th>Description</th>
+ <th>Default</th>
+ </tr>
+ <tr>
+ <td class="td"><strong>benchmarks</strong></td>
+ <td class="td">Elapsed time of Benchmark points and total execution time</td>
+ <td class="td">TRUE</td>
+ </tr>
+ <tr>
+ <td class="td"><strong>config</strong></td>
+ <td class="td">CodeIgniter Config variables</td>
+ <td class="td">TRUE</td>
+ </tr>
+ <tr>
+ <td class="td"><strong>controller_info</strong></td>
+ <td class="td">The Controller class and method requested</td>
+ <td class="td">TRUE</td>
+ </tr>
+ <tr>
+ <td class="td"><strong>get</strong></td>
+ <td class="td">Any GET data passed in the request</td>
+ <td class="td">TRUE</td>
+ </tr>
+ <tr>
+ <td class="td"><strong>http_headers</strong></td>
+ <td class="td">The HTTP headers for the current request</td>
+ <td class="td">TRUE</td>
+ </tr>
+ <tr>
+ <td class="td"><strong>memory_usage</strong></td>
+ <td class="td">Amount of memory consumed by the current request, in bytes</td>
+ <td class="td">TRUE</td>
+ </tr>
+ <tr>
+ <td class="td"><strong>post</strong></td>
+ <td class="td">Any POST data passed in the request</td>
+ <td class="td">TRUE</td>
+ </tr>
+ <tr>
+ <td class="td"><strong>queries</strong></td>
+ <td class="td">Listing of all database queries executed, including execution time</td>
+ <td class="td">TRUE</td>
+ </tr>
+ <tr>
+ <td class="td"><strong>uri_string</strong></td>
+ <td class="td">The URI of the current request</td>
+ <td class="td">TRUE</td>
+ </tr>
+ <tr>
+ <td class="td"><strong>query_toggle_count</strong></td>
+ <td class="td">The number of queries after which the query block will default to hidden.</td>
+ <td class="td">25</td>
+ </tr>
</table>
diff --git a/user_guide/general/quick_reference.html b/user_guide/general/quick_reference.html
index 388f25978..9273708f3 100644
--- a/user_guide/general/quick_reference.html
+++ b/user_guide/general/quick_reference.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
diff --git a/user_guide/general/requirements.html b/user_guide/general/requirements.html
index fbe38261d..ab0e28857 100644
--- a/user_guide/general/requirements.html
+++ b/user_guide/general/requirements.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
diff --git a/user_guide/general/reserved_names.html b/user_guide/general/reserved_names.html
index c12ee6e15..48b6b2a5e 100644
--- a/user_guide/general/reserved_names.html
+++ b/user_guide/general/reserved_names.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -61,8 +61,8 @@ Controllers
<h3>Controller names</h3>
<p>Since your controller classes will extend the main application controller you
must be careful not to name your functions identically to the ones used by that class, otherwise your local functions
-will override them. The following
-is a list of reserved names. Do not name your controller any of these:</p>
+will override them. The following
+is a list of reserved names. Do not name your controller any of these:</p>
<ul>
<li>Controller</li>
<li>CI_Base</li>
@@ -90,6 +90,7 @@ is a list of reserved names. Do not name your controller any of these:</p>
</ul>
<h3>Constants</h3>
<ul>
+ <li>ENVIRONMENT</li>
<li>EXT</li>
<li>FCPATH</li>
<li>SELF</li>
diff --git a/user_guide/general/routing.html b/user_guide/general/routing.html
index e973d2351..6f06ad64f 100644
--- a/user_guide/general/routing.html
+++ b/user_guide/general/routing.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -80,7 +80,7 @@ To overcome this, CodeIgniter allows you to remap the URI handler.</p>
<h2>Setting your own routing rules</h2>
-<p>Routing rules are defined in your <var>application/config/routes.php</var> file. In it you'll see an array called <dfn>$route</dfn> that
+<p>Routing rules are defined in your <var>application/config/routes.php</var> file. In it you'll see an array called <dfn>$route</dfn> that
permits you to specify your own routing criteria. Routes can either be specified using <dfn>wildcards</dfn> or <dfn>Regular Expressions</dfn></p>
@@ -90,7 +90,7 @@ permits you to specify your own routing criteria. Routes can either be specified
<code>$route['product/:num'] = "catalog/product_lookup";</code>
-<p>In a route, the array key contains the URI to be matched, while the array value contains the destination it should be re-routed to.
+<p>In a route, the array key contains the URI to be matched, while the array value contains the destination it should be re-routed to.
In the above example, if the literal word "product" is found in the first segment of the URL, and a number is found in the second segment,
the "catalog" class and the "product_lookup" method are instead used.</p>
@@ -111,10 +111,10 @@ Higher routes will always take precedence over lower ones.</p>
<p>A URL containing the word "journals" in the first segment will be remapped to the "blogs" class.</p>
<code>$route['blog/joe'] = "blogs/users/34";</code>
-<p>A URL containing the segments blog/joe will be remapped to the "blogs" class and the "users" method. The ID will be set to "34".</p>
+<p>A URL containing the segments blog/joe will be remapped to the "blogs" class and the "users" method. The ID will be set to "34".</p>
<code>$route['product/(:any)'] = "catalog/product_lookup";</code>
-<p>A URL with "product" as the first segment, and anything in the second will be remapped to the "catalog" class and the "product_lookup" method.</p>
+<p>A URL with "product" as the first segment, and anything in the second will be remapped to the "catalog" class and the "product_lookup" method.</p>
<code>$route['product/(:num)'] = "catalog/product_lookup_by_id/$1";</code>
<p>A URL with "product" as the first segment, and a number in the second will be remapped to the "catalog" class and the "product_lookup_by_id" method passing in the match as a variable to the function.</p>
@@ -123,7 +123,7 @@ Higher routes will always take precedence over lower ones.</p>
<h2>Regular Expressions</h2>
-<p>If you prefer you can use regular expressions to define your routing rules. Any valid regular expression is allowed, as are back-references.</p>
+<p>If you prefer you can use regular expressions to define your routing rules. Any valid regular expression is allowed, as are back-references.</p>
<p class="important"><strong>Note:</strong>&nbsp; If you use back-references you must use the dollar syntax rather than the double backslash syntax.</p>
@@ -142,9 +142,14 @@ Higher routes will always take precedence over lower ones.</p>
<code>$route['default_controller'] = 'welcome';</code>
<p>This route indicates which controller class should be loaded if the URI contains no data, which will be the case
-when people load your root URL. In the above example, the "welcome" class would be loaded. You
+when people load your root URL. In the above example, the "welcome" class would be loaded. You
are encouraged to always have a default route otherwise a 404 page will appear by default.</p>
+<code>$route['404_override'] = '';</code>
+
+<p>This route indicates which controller class should be loaded if the requested controller is not found. It will override the default 404
+error page. It won't affect to the <samp>show_404()</samp> function, which will continue loading the default <dfn>error_404.php</dfn> file at <var>application/errors/error_404.php</var>.</p>
+
<p class="important"><strong>Important:</strong>&nbsp; The reserved routes must come before any wildcard or regular expression routes.</p>
</div>
diff --git a/user_guide/general/security.html b/user_guide/general/security.html
index 5ecfcf18a..31dd7978c 100644
--- a/user_guide/general/security.html
+++ b/user_guide/general/security.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -64,7 +64,7 @@ CodeIgniter's internal security features.</p>
<h2>URI Security</h2>
<p>CodeIgniter is fairly restrictive regarding which characters it allows in your URI strings in order to help
-minimize the possibility that malicious data can be passed to your application. URIs may only contain the following:
+minimize the possibility that malicious data can be passed to your application. URIs may only contain the following:
</p>
<ul>
@@ -76,33 +76,27 @@ minimize the possibility that malicious data can be passed to your application.
<li>Dash: -</li>
</ul>
-<h2>GET, POST, and COOKIE Data</h2>
-
-<p>GET data is simply disallowed by CodeIgniter since the system utilizes URI segments rather than traditional URL query strings (unless
-you have the query string option enabled in your config file). The global GET
-array is <strong>unset</strong> by the Input class during system initialization.</p>
-
<h2>Register_globals</h2>
-<p>During system initialization all global variables are unset, except those found in the $_POST and $_COOKIE arrays. The unsetting
+<p>During system initialization all global variables are unset, except those found in the $_GET, $_POST, and $_COOKIE arrays. The unsetting
routine is effectively the same as register_globals = off.</p>
<a name="error_reporting"></a>
<h2>error_reporting</h2>
<p>
- In production environments, it is typically desirable to disable PHP's
- error reporting by setting the internal error_reporting flag to a value of 0. This disables native PHP
- errors from being rendered as output, which may potentially contain
- sensitive information.
+ In production environments, it is typically desirable to disable PHP's
+ error reporting by setting the internal error_reporting flag to a value of 0. This disables native PHP
+ errors from being rendered as output, which may potentially contain
+ sensitive information.
</p>
<p>
- Setting CodeIgniter's <kbd>ENVIRONMENT</kbd> constant in index.php to a
- value of '<kbd>production</kbd>' will turn off these errors. In development
- mode, it is recommended that a value of '<kbd>development</kbd>' is used.
- More information about differentiating between environments can be found
- on the <a href="environments.html">Handling Environments</a> page.
+ Setting CodeIgniter's <kbd>ENVIRONMENT</kbd> constant in index.php to a
+ value of '<kbd>production</kbd>' will turn off these errors. In development
+ mode, it is recommended that a value of '<kbd>development</kbd>' is used.
+ More information about differentiating between environments can be found
+ on the <a href="environments.html">Handling Environments</a> page.
</p>
<h2>magic_quotes_runtime</h2>
@@ -117,7 +111,7 @@ XML-RPC data, or even data from the SERVER array, you are encouraged to practice
<ol>
<li>Filter the data as if it were tainted.</li>
-<li>Validate the data to ensure it conforms to the correct type, length, size, etc. (sometimes this step can replace step one)</li>
+<li>Validate the data to ensure it conforms to the correct type, length, size, etc. (sometimes this step can replace step one)</li>
<li>Escape the data before submitting it into your database.</li>
</ol>
@@ -127,7 +121,7 @@ XML-RPC data, or even data from the SERVER array, you are encouraged to practice
<li><h2>XSS Filtering</h2>
-<p>CodeIgniter comes with a Cross Site Scripting filter. This filter looks for commonly
+<p>CodeIgniter comes with a Cross Site Scripting filter. This filter looks for commonly
used techniques to embed malicious Javascript into your data, or other types of code that attempt to hijack cookies
or do other malicious things. The XSS Filter is described <a href="../libraries/security.html">here</a>.
</p>
diff --git a/user_guide/general/styleguide.html b/user_guide/general/styleguide.html
index caddddcc4..fc9ceb2e7 100644
--- a/user_guide/general/styleguide.html
+++ b/user_guide/general/styleguide.html
@@ -34,7 +34,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -102,13 +102,13 @@ Style Guide
<h2><a name="file_format"></a>File Format</h2>
<div class="guidelineDetails">
- <p>Files should be saved with Unicode (UTF-8) encoding. The <abbr title="Byte Order Mark">BOM</abbr>
- should <em>not</em> be used. Unlike UTF-16 and UTF-32, there's no byte order to indicate in
+ <p>Files should be saved with Unicode (UTF-8) encoding. The <abbr title="Byte Order Mark">BOM</abbr>
+ should <em>not</em> be used. Unlike UTF-16 and UTF-32, there's no byte order to indicate in
a UTF-8 encoded file, and the <abbr title="Byte Order Mark">BOM</abbr> can have a negative side effect in PHP of sending output,
- preventing the application from being able to set its own headers. Unix line endings should
+ preventing the application from being able to set its own headers. Unix line endings should
be used (LF).</p>
- <p>Here is how to apply these settings in some of the more common text editors. Instructions for your
+ <p>Here is how to apply these settings in some of the more common text editors. Instructions for your
text editor may vary; check your text editor's documentation.</p>
<h5>TextMate</h5>
@@ -137,8 +137,8 @@ Style Guide
<h2><a name="php_closing_tag"></a>PHP Closing Tag</h2>
<div class="guidelineDetails">
- <p>The PHP closing tag on a PHP document <strong>?&gt;</strong> is optional to the PHP parser. However, if used, any whitespace following the closing tag, whether introduced
- by the developer, user, or an FTP application, can cause unwanted output, PHP errors, or if the latter are suppressed, blank pages. For this reason, all PHP files should
+ <p>The PHP closing tag on a PHP document <strong>?&gt;</strong> is optional to the PHP parser. However, if used, any whitespace following the closing tag, whether introduced
+ by the developer, user, or an FTP application, can cause unwanted output, PHP errors, or if the latter are suppressed, blank pages. For this reason, all PHP files should
<strong>OMIT</strong> the closing PHP tag, and instead use a comment block to mark the end of file and it's location relative to the application root.
This allows you to still identify a file as being complete and not truncated.</p>
<code><strong>INCORRECT</strong>:
@@ -161,7 +161,7 @@ echo "Here's my code!";
<h2><a name="class_and_method_naming"></a>Class and Method Naming</h2>
<div class="guidelineDetails">
- <p>Class names should always start with an uppercase letter. Multiple words should be separated with an underscore, and not CamelCased. All other class methods should be entirely lowercased and named to clearly indicate their function, preferably including a verb. Try to avoid overly long and verbose names.</p>
+ <p>Class names should always start with an uppercase letter. Multiple words should be separated with an underscore, and not CamelCased. All other class methods should be entirely lowercased and named to clearly indicate their function, preferably including a verb. Try to avoid overly long and verbose names.</p>
<code><strong>INCORRECT</strong>:
class superclass
@@ -184,7 +184,7 @@ class Super_class</code>
<code><strong>INCORRECT</strong>:
function fileproperties() // not descriptive and needs underscore separator
function fileProperties() // not descriptive and uses CamelCase
-function getfileproperties() // Better! But still missing underscore separator
+function getfileproperties() // Better! But still missing underscore separator
function getFileProperties() // uses CamelCase
function get_the_file_properties_from_the_file() // wordy
@@ -196,7 +196,7 @@ function get_file_properties() // descriptive, underscore separator, and all low
<h2><a name="variable_names"></a>Variable Names</h2>
<div class="guidelineDetails">
- <p>The guidelines for variable naming is very similar to that used for class methods. Namely, variables should contain only lowercase letters, use underscore separators, and be reasonably named to indicate their purpose and contents. Very short, non-word variables should only be used as iterators in for() loops.</p>
+ <p>The guidelines for variable naming is very similar to that used for class methods. Namely, variables should contain only lowercase letters, use underscore separators, and be reasonably named to indicate their purpose and contents. Very short, non-word variables should only be used as iterators in for() loops.</p>
<code><strong>INCORRECT</strong>:
$j = &apos;foo&apos;; // single letter variables should only be used in for() loops
$Str // contains uppercase letters
@@ -216,7 +216,7 @@ $last_city
<h2><a name="commenting"></a>Commenting</h2>
<div class="guidelineDetails">
- <p>In general, code should be commented prolifically. It not only helps describe the flow and intent of the code for less experienced programmers, but can prove invaluable when returning to your own code months down the line. There is not a required format for comments, but the following are recommended.</p>
+ <p>In general, code should be commented prolifically. It not only helps describe the flow and intent of the code for less experienced programmers, but can prove invaluable when returning to your own code months down the line. There is not a required format for comments, but the following are recommended.</p>
<p><a href="http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html#basics.docblock">DocBlock</a> style comments preceding class and method declarations so they can be picked up by IDEs:</p>
@@ -246,9 +246,9 @@ function xml_encode($str)</code>
$parts = explode("\n", $str);
// A longer comment that needs to give greater detail on what is
-// occurring and why can use multiple single-line comments. Try to
+// occurring and why can use multiple single-line comments. Try to
// keep the width reasonable, around 70 characters is the easiest to
-// read. Don't hesitate to link to permanent external resources
+// read. Don't hesitate to link to permanent external resources
// that may provide greater detail:
//
// http://example.com/information_about_something/in_particular/
@@ -260,7 +260,7 @@ $parts = $this->foo($parts);
<h2><a name="constants"></a>Constants</h2>
<div class="guidelineDetails">
- <p>Constants follow the same guidelines as do variables, except constants should always be fully uppercase. <em>Always use CodeIgniter constants when appropriate, i.e. SLASH, LD, RD, PATH_CACHE, etc.</em></p>
+ <p>Constants follow the same guidelines as do variables, except constants should always be fully uppercase. <em>Always use CodeIgniter constants when appropriate, i.e. SLASH, LD, RD, PATH_CACHE, etc.</em></p>
<code><strong>INCORRECT</strong>:
myConstant // missing underscore separator and not fully uppercase
N // no single-letter constants
@@ -298,7 +298,7 @@ function foo($bar = NULL)</code>
<strong>&amp;&amp;</strong> is preferred over <strong>AND</strong> but either are acceptable, and a space should always precede and follow <strong>!</strong>.</p>
<code><strong>INCORRECT</strong>:
if ($foo || $bar)
-if ($foo AND $bar) // okay but not recommended for common syntax highlighting applications
+if ($foo AND $bar) // okay but not recommended for common syntax highlighting applications
if (!$foo)
if (! is_array($foo))
@@ -314,8 +314,8 @@ if ( ! is_array($foo))
<h2><a name="comparing_return_values_and_typecasting"></a>Comparing Return Values and Typecasting</h2>
<div class="guidelineDetails">
- <p>Some PHP functions return FALSE on failure, but may also have a valid return value of "" or 0, which would evaluate to FALSE in loose comparisons. Be explicit by comparing the variable type when using these return values in conditionals to ensure the return value is indeed what you expect, and not a value that has an equivalent loose-type evaluation.</p>
- <p>Use the same stringency in returning and checking your own variables. Use <strong>===</strong> and <strong>!==</strong> as necessary.
+ <p>Some PHP functions return FALSE on failure, but may also have a valid return value of "" or 0, which would evaluate to FALSE in loose comparisons. Be explicit by comparing the variable type when using these return values in conditionals to ensure the return value is indeed what you expect, and not a value that has an equivalent loose-type evaluation.</p>
+ <p>Use the same stringency in returning and checking your own variables. Use <strong>===</strong> and <strong>!==</strong> as necessary.
<code><strong>INCORRECT</strong>:
// If 'foo' is at the beginning of the string, strpos will return a 0,
@@ -329,7 +329,7 @@ if (strpos($str, 'foo') === FALSE)
<code><strong>INCORRECT</strong>:
function build_string($str = "")
{
- if ($str == "") // uh-oh! What if FALSE or the integer 0 is passed as an argument?
+ if ($str == "") // uh-oh! What if FALSE or the integer 0 is passed as an argument?
{
}
@@ -344,7 +344,7 @@ function build_string($str = "")
}
}</code>
- <p>See also information regarding <a href="http://us3.php.net/manual/en/language.types.type-juggling.php#language.types.typecasting">typecasting</a>, which can be quite useful. Typecasting has a slightly different effect which may be desirable. When casting a variable as a string, for instance, NULL and boolean FALSE variables become empty strings, 0 (and other numbers) become strings of digits, and boolean TRUE becomes "1":</p>
+ <p>See also information regarding <a href="http://us3.php.net/manual/en/language.types.type-juggling.php#language.types.typecasting">typecasting</a>, which can be quite useful. Typecasting has a slightly different effect which may be desirable. When casting a variable as a string, for instance, NULL and boolean FALSE variables become empty strings, 0 (and other numbers) become strings of digits, and boolean TRUE becomes "1":</p>
<code>$str = (string) $str; // cast $str as a string</code>
@@ -362,7 +362,7 @@ function build_string($str = "")
<h2><a name="whitespace_in_files"></a>Whitespace in Files</h2>
<div class="guidelineDetails">
- <p>No whitespace can precede the opening PHP tag or follow the closing PHP tag. Output is buffered, so whitespace in your files can cause output to begin before CodeIgniter outputs its content, leading to errors and an inability for CodeIgniter to send proper headers. In the examples below, select the text with your mouse to reveal the incorrect whitespace.</p>
+ <p>No whitespace can precede the opening PHP tag or follow the closing PHP tag. Output is buffered, so whitespace in your files can cause output to begin before CodeIgniter outputs its content, leading to errors and an inability for CodeIgniter to send proper headers. In the examples below, select the text with your mouse to reveal the incorrect whitespace.</p>
<p><strong>INCORRECT</strong>:</p>
<code>
@@ -381,14 +381,14 @@ function build_string($str = "")
<h2><a name="compatibility"></a>Compatibility</h2>
<div class="guidelineDetails">
- <p>Unless specifically mentioned in your add-on's documentation, all code must be compatible with PHP version 4.3+. Additionally, do not use PHP functions that require non-default libraries to be installed unless your code contains an alternative method when the function is not available, or you implicitly document that your add-on requires said PHP libraries.</p>
+ <p>Unless specifically mentioned in your add-on's documentation, all code must be compatible with PHP version 5.1+. Additionally, do not use PHP functions that require non-default libraries to be installed unless your code contains an alternative method when the function is not available, or you implicitly document that your add-on requires said PHP libraries.</p>
</div>
<h2><a name="class_and_file_names_using_common_words"></a>Class and File Names using Common Words</h2>
<div class="guidelineDetails">
- <p>When your class or filename is a common word, or might quite likely be identically named in another PHP script, provide a unique prefix to help prevent collision. Always realize that your end users may be running other add-ons or third party PHP scripts. Choose a prefix that is unique to your identity as a developer or company.</p>
+ <p>When your class or filename is a common word, or might quite likely be identically named in another PHP script, provide a unique prefix to help prevent collision. Always realize that your end users may be running other add-ons or third party PHP scripts. Choose a prefix that is unique to your identity as a developer or company.</p>
<code><strong>INCORRECT</strong>:
class Email pi.email.php
@@ -405,7 +405,7 @@ class Pre_import mod.pre_import.php
<h2><a name="database_table_names"></a>Database Table Names</h2>
<div class="guidelineDetails">
- <p>Any tables that your add-on might use must use the 'exp_' prefix, followed by a prefix uniquely identifying you as the developer or company, and then a short descriptive table name. You do not need to be concerned about the database prefix being used on the user's installation, as CodeIgniter's database class will automatically convert 'exp_' to what is actually being used.</p>
+ <p>Any tables that your add-on might use must use the 'exp_' prefix, followed by a prefix uniquely identifying you as the developer or company, and then a short descriptive table name. You do not need to be concerned about the database prefix being used on the user's installation, as CodeIgniter's database class will automatically convert 'exp_' to what is actually being used.</p>
<code><strong>INCORRECT</strong>:
email_addresses // missing both prefixes
@@ -416,35 +416,35 @@ exp_email_addresses // missing unique prefix
exp_pre_email_addresses
</code>
- <p class="important"><strong>NOTE:</strong> Be mindful that MySQL has a limit of 64 characters for table names. This should not be an issue as table names that would exceed this would likely have unreasonable names. For instance, the following table name exceeds this limitation by one character. Silly, no? <strong>exp_pre_email_addresses_of_registered_users_in_seattle_washington</strong>
+ <p class="important"><strong>NOTE:</strong> Be mindful that MySQL has a limit of 64 characters for table names. This should not be an issue as table names that would exceed this would likely have unreasonable names. For instance, the following table name exceeds this limitation by one character. Silly, no? <strong>exp_pre_email_addresses_of_registered_users_in_seattle_washington</strong>
</div>
<h2><a name="one_file_per_class"></a>One File per Class</h2>
<div class="guidelineDetails">
- <p>Use separate files for each class your add-on uses, unless the classes are <em>closely related</em>. An example of CodeIgniter files that contains multiple classes is the Database class file, which contains both the DB class and the DB_Cache class, and the Magpie plugin, which contains both the Magpie and Snoopy classes.</p>
+ <p>Use separate files for each class your add-on uses, unless the classes are <em>closely related</em>. An example of CodeIgniter files that contains multiple classes is the Database class file, which contains both the DB class and the DB_Cache class, and the Magpie plugin, which contains both the Magpie and Snoopy classes.</p>
</div>
<h2><a name="whitespace"></a>Whitespace</h2>
<div class="guidelineDetails">
- <p>Use tabs for whitespace in your code, not spaces. This may seem like a small thing, but using tabs instead of whitespace allows the developer looking at your code to have indentation at levels that they prefer and customize in whatever application they use. And as a side benefit, it results in (slightly) more compact files, storing one tab character versus, say, four space characters.</p>
+ <p>Use tabs for whitespace in your code, not spaces. This may seem like a small thing, but using tabs instead of whitespace allows the developer looking at your code to have indentation at levels that they prefer and customize in whatever application they use. And as a side benefit, it results in (slightly) more compact files, storing one tab character versus, say, four space characters.</p>
</div>
<h2><a name="line_breaks"></a>Line Breaks</h2>
<div class="guidelineDetails">
- <p>Files must be saved with Unix line breaks. This is more of an issue for developers who work in Windows, but in any case ensure that your text editor is setup to save files with Unix line breaks.</p>
+ <p>Files must be saved with Unix line breaks. This is more of an issue for developers who work in Windows, but in any case ensure that your text editor is setup to save files with Unix line breaks.</p>
</div>
<h2><a name="code_indenting"></a>Code Indenting</h2>
<div class="guidelineDetails">
- <p>Use Allman style indenting. With the exception of Class declarations, braces are always placed on a line by themselves, and indented at the same level as the control statement that "owns" them.</p>
+ <p>Use Allman style indenting. With the exception of Class declarations, braces are always placed on a line by themselves, and indented at the same level as the control statement that "owns" them.</p>
<code><strong>INCORRECT</strong>:
function foo($bar) {
@@ -501,7 +501,7 @@ for ($i = 0; $i &lt; 10; $i++)
<h2><a name="bracket_spacing"></a>Bracket and Parenthetic Spacing</h2>
<div class="guidelineDetails">
- <p>In general, parenthesis and brackets should not use any additional spaces. The exception is that a space should always follow PHP control structures that accept arguments with parenthesis (declare, do-while, elseif, for, foreach, if, switch, while), to help distinguish them from functions and increase readability.</p>
+ <p>In general, parenthesis and brackets should not use any additional spaces. The exception is that a space should always follow PHP control structures that accept arguments with parenthesis (declare, do-while, elseif, for, foreach, if, switch, while), to help distinguish them from functions and increase readability.</p>
<code>INCORRECT:
$arr[ $foo ] = 'foo';
@@ -558,9 +558,9 @@ _convert_text() // private method</code>
<h2><a name="php_errors"></a>PHP Errors</h2>
<div class="guidelineDetails">
- <p>Code must run error free and not rely on warnings and notices to be hidden to meet this requirement. For instance, never access a variable that you did not set yourself (such as $_POST array keys) without first checking to see that it isset().</p>
+ <p>Code must run error free and not rely on warnings and notices to be hidden to meet this requirement. For instance, never access a variable that you did not set yourself (such as $_POST array keys) without first checking to see that it isset().</p>
- <p>Make sure that while developing your add-on, error reporting is enabled for ALL users, and that display_errors is enabled in the PHP environment. You can check this setting with:</p>
+ <p>Make sure that while developing your add-on, error reporting is enabled for ALL users, and that display_errors is enabled in the PHP environment. You can check this setting with:</p>
<code>if (ini_get('display_errors') == 1)
{
@@ -571,7 +571,7 @@ _convert_text() // private method</code>
<code>ini_set('display_errors', 1);</code>
- <p class="important"><strong>NOTE:</strong> Setting the <a href="http://us.php.net/manual/en/ref.errorfunc.php#ini.display-errors">display_errors</a> setting with ini_set() at runtime is not identical to having it enabled in the PHP environment. Namely, it will not have any effect if the script has fatal errors</p>
+ <p class="important"><strong>NOTE:</strong> Setting the <a href="http://us.php.net/manual/en/ref.errorfunc.php#ini.display-errors">display_errors</a> setting with ini_set() at runtime is not identical to having it enabled in the PHP environment. Namely, it will not have any effect if the script has fatal errors</p>
</div>
@@ -609,7 +609,7 @@ $bat = str_replace($foo, $bar, $bag);
<h2><a name="strings"></a>Strings</h2>
<div class="guidelineDetails">
- <p>Always use single quoted strings unless you need variables parsed, and in cases where you do need variables parsed, use braces to prevent greedy token parsing. You may also use double-quoted strings if the string contains single quotes, so you do not have to use escape characters.</p>
+ <p>Always use single quoted strings unless you need variables parsed, and in cases where you do need variables parsed, use braces to prevent greedy token parsing. You may also use double-quoted strings if the string contains single quotes, so you do not have to use escape characters.</p>
<code><strong>INCORRECT</strong>:
"My String" // no variable parsing, so no use for double quotes
diff --git a/user_guide/general/urls.html b/user_guide/general/urls.html
index 4ce6c3995..b975b701f 100644
--- a/user_guide/general/urls.html
+++ b/user_guide/general/urls.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -58,7 +58,7 @@ URLS
<h1>CodeIgniter URLs</h1>
-<p>By default, URLs in CodeIgniter are designed to be search-engine and human friendly. Rather than using the standard "query string"
+<p>By default, URLs in CodeIgniter are designed to be search-engine and human friendly. Rather than using the standard "query string"
approach to URLs that is synonymous with dynamic systems, CodeIgniter uses a <strong>segment-based</strong> approach:</p>
<code>example.com/<var>news</var>/<dfn>article</dfn>/<samp>my_article</samp></code>
@@ -78,7 +78,7 @@ approach to URLs that is synonymous with dynamic systems, CodeIgniter uses a <st
</ol>
<p>The <a href="../libraries/uri.html">URI Class</a> and the <a href="../helpers/url_helper.html">URL Helper</a>
-contain functions that make it easy to work with your URI data. In addition, your URLs can be remapped using the
+contain functions that make it easy to work with your URI data. In addition, your URLs can be remapped using the
<a href="routing.html">URI Routing</a> feature for more flexibility.</p>
@@ -103,7 +103,7 @@ a request for your index.php file.</p>
<h2>Adding a URL Suffix</h2>
<p>In your <dfn>config/config.php</dfn> file you can specify a suffix that will be added to all URLs generated
-by CodeIgniter. For example, if a URL is this:</p>
+by CodeIgniter. For example, if a URL is this:</p>
<code>example.com/index.php/products/view/shoes</code>
@@ -125,7 +125,7 @@ open your config file you'll see these items:</p>
$config['controller_trigger'] = 'c';<br />
$config['function_trigger'] = 'm';</code>
-<p>If you change "enable_query_strings" to TRUE this feature will become active. Your controllers and functions will then
+<p>If you change "enable_query_strings" to TRUE this feature will become active. Your controllers and functions will then
be accessible using the "trigger" words you've set to invoke your controllers and methods:</p>
<code>index.php?c=controller&amp;m=method</code>
diff --git a/user_guide/general/views.html b/user_guide/general/views.html
index 746f7b846..ece746592 100644
--- a/user_guide/general/views.html
+++ b/user_guide/general/views.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -61,7 +61,7 @@ Views
In fact, views can flexibly be embedded within other views (within other views, etc., etc.) if you need this type
of hierarchy.</p>
-<p>Views are never called directly, they must be loaded by a <a href="controllers.html">controller</a>. Remember that in an MVC framework, the Controller acts as the
+<p>Views are never called directly, they must be loaded by a <a href="controllers.html">controller</a>. Remember that in an MVC framework, the Controller acts as the
traffic cop, so it is responsible for fetching a particular view. If you have not read the <a href="controllers.html">Controllers</a> page
you should do so before continuing.</p>
@@ -90,7 +90,7 @@ you should do so before continuing.</p>
<code>$this->load->view('<var>name</var>');</code>
-<p>Where <var>name</var> is the name of your view file. Note: The .php file extension does not need to be specified unless you use something other than <kbd>.php</kbd>.</p>
+<p>Where <var>name</var> is the name of your view file. Note: The .php file extension does not need to be specified unless you use something other than <kbd>.php</kbd>.</p>
<p>Now, open the controller file you made earlier called <dfn>blog.php</dfn>, and replace the echo statement with the view loading function:</p>
@@ -109,19 +109,19 @@ class Blog extends CI_Controller {
</textarea>
-<p>If you visit your site using the URL you did earlier you should see your new view. The URL was similar to this:</p>
+<p>If you visit your site using the URL you did earlier you should see your new view. The URL was similar to this:</p>
<code>example.com/index.php/<var>blog</var>/</code>
<h2>Loading multiple views</h2>
-<p>CodeIgniter will intelligently handle multiple calls to $this-&gt;load-&gt;view from within a controller. If more than one call happens they will be appended together. For example, you may wish to have a header view, a menu view, a content view, and a footer view. That might look something like this:</p>
+<p>CodeIgniter will intelligently handle multiple calls to $this-&gt;load-&gt;view from within a controller. If more than one call happens they will be appended together. For example, you may wish to have a header view, a menu view, a content view, and a footer view. That might look something like this:</p>
<p><code>&lt;?php<br />
<br />
class Page extends CI_Controller {<br /><br />
&nbsp;&nbsp;&nbsp;function index()<br />
&nbsp;&nbsp;&nbsp;{<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data['page_title'] = 'Your title';<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data['page_title'] = 'Your title';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;load-&gt;view('header');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;load-&gt;view('menu');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;load-&gt;view('content', $data);<br />
@@ -132,8 +132,8 @@ class Page extends CI_Controller {<br /><br />
?&gt;</code></p>
<p>In the example above, we are using &quot;dynamically added data&quot;, which you will see below.</p>
<h2>Storing Views within Sub-folders</h2>
-<p>Your view files can also be stored within sub-folders if you prefer that type of organization. When doing so you will need
-to include the folder name loading the view. Example:</p>
+<p>Your view files can also be stored within sub-folders if you prefer that type of organization. When doing so you will need
+to include the folder name loading the view. Example:</p>
<code>$this->load->view('<kbd>folder_name</kbd>/<var>file_name</var>');</code>
@@ -159,7 +159,7 @@ $this->load->view('blogview', <var>$data</var>);</code>
<p>Note: If you use an object, the class variables will be turned into array elements.</p>
-<p>Let's try it with your controller file. Open it add this code:</p>
+<p>Let's try it with your controller file. Open it add this code:</p>
<textarea class="textarea" style="width:100%" cols="50" rows="14">
&lt;?php
@@ -195,8 +195,8 @@ class Blog extends CI_Controller {
<h2>Creating Loops</h2>
-<p>The data array you pass to your view files is not limited to simple variables. You can
-pass multi dimensional arrays, which can be looped to generate multiple rows. For example, if you
+<p>The data array you pass to your view files is not limited to simple variables. You can
+pass multi dimensional arrays, which can be looped to generate multiple rows. For example, if you
pull data from your database it will typically be in the form of a multi-dimensional array.</p>
<p>Here's a simple example. Add this to your controller:</p>
@@ -243,15 +243,15 @@ class Blog extends CI_Controller {
&lt;/body>
&lt;/html>
</textarea>
-<p><strong>Note:</strong> You'll notice that in the example above we are using PHP's alternative syntax. If you
+<p><strong>Note:</strong> You'll notice that in the example above we are using PHP's alternative syntax. If you
are not familiar with it you can read about it <a href="alternative_php.html">here</a>.</p>
<h2>Returning views as data</h2>
<p>There is a third <strong>optional</strong> parameter lets you change the behavior of the function so that it returns data as a string
-rather than sending it to your browser. This can be useful if you want to process the data in some way. If you
-set the parameter to <kbd>true</kbd> (boolean) it will return data. The default behavior is <kbd>false</kbd>, which sends it
-to your browser. Remember to assign it to a variable if you want the data returned:</p>
+rather than sending it to your browser. This can be useful if you want to process the data in some way. If you
+set the parameter to <kbd>true</kbd> (boolean) it will return data. The default behavior is <kbd>false</kbd>, which sends it
+to your browser. Remember to assign it to a variable if you want the data returned:</p>
<code>$string = $this->load->view('<var>myfile</var>', '', <kbd>true</kbd>);</code>
diff --git a/user_guide/helpers/array_helper.html b/user_guide/helpers/array_helper.html
index 2bbf89cad..139bbe2b5 100644
--- a/user_guide/helpers/array_helper.html
+++ b/user_guide/helpers/array_helper.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -70,8 +70,8 @@ Array Helper
<h2>element()</h2>
-<p>Lets you fetch an item from an array. The function tests whether the array index is set and whether it has a value. If
-a value exists it is returned. If a value does not exist it returns FALSE, or whatever you've specified as the default value via the third parameter. Example:</p>
+<p>Lets you fetch an item from an array. The function tests whether the array index is set and whether it has a value. If
+a value exists it is returned. If a value does not exist it returns FALSE, or whatever you've specified as the default value via the third parameter. Example:</p>
<code>
$array = array('color' => 'red', 'shape' => 'round', 'size' => '');<br />
@@ -86,7 +86,7 @@ echo element('size', $array, NULL);
<h2>random_element()</h2>
-<p>Takes an array as input and returns a random element from it. Usage example:</p>
+<p>Takes an array as input and returns a random element from it. Usage example:</p>
<code>$quotes = array(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"I find that the harder I work, the more luck I seem to have. - Thomas Jefferson",<br />
@@ -102,8 +102,8 @@ echo random_element($quotes);</code>
<h2>elements()</h2>
-<p>Lets you fetch a number of items from an array. The function tests whether each of the array indices is set. If an index does not exist
-it is set to FALSE, or whatever you've specified as the default value via the third parameter. Example:</p>
+<p>Lets you fetch a number of items from an array. The function tests whether each of the array indices is set. If an index does not exist
+it is set to FALSE, or whatever you've specified as the default value via the third parameter. Example:</p>
<code>
$array = array(<br />
@@ -142,7 +142,7 @@ array(<br />
);
</code>
-<p>This is useful when sending the <kbd>$_POST</kbd> array to one of your Models. This prevents users from
+<p>This is useful when sending the <kbd>$_POST</kbd> array to one of your Models. This prevents users from
sending additional POST data to be entered into your tables:</p>
<code>
@@ -159,10 +159,10 @@ $this->post_model->update(elements(array('id', 'title', 'content'), $_POST));
<div id="footer">
<p>
-Previous Topic:&nbsp;&nbsp; <a href="../libraries/zip.html">Zip Encoding Class</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+Previous Topic:&nbsp;&nbsp; <a href="../libraries/javascript.html">Javascript Class</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
-Next Topic:&nbsp;&nbsp;<a href="compatibility_helper.html">Compatibility Helper</a></p>
+Next Topic:&nbsp;&nbsp;<a href="captcha_helper.html">CAPTCHA Helper</a></p>
<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006 - 2011 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">EllisLab, Inc.</a></p>
</div>
diff --git a/user_guide/helpers/captcha_helper.html b/user_guide/helpers/captcha_helper.html
index 3a863c995..c80c2fbe5 100644
--- a/user_guide/helpers/captcha_helper.html
+++ b/user_guide/helpers/captcha_helper.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -68,7 +68,7 @@ CAPTCHA Helper
<p>The following functions are available:</p>
-<h2>captcha_create(<var>$data</var>)</h2>
+<h2>create_captcha(<var>$data</var>)</h2>
<p>Takes an array of information to generate the CAPTCHA as input and creates the image to your specifications, returning an array of associative data about the image.</p>
@@ -83,7 +83,7 @@ CAPTCHA Helper
<code>&lt;img src=&quot;http://example.com/captcha/12345.jpg&quot; width=&quot;140&quot; height=&quot;50&quot; /&gt;</code></p>
<p>The "time" is the micro timestamp used as the image name without the file
- extension. It will be a number like this: 1139612155.3422</p>
+ extension. It will be a number like this: 1139612155.3422</p>
<p>The "word" is the word that appears in the captcha image, which if not
supplied to the function, will be a random string.</p>
@@ -109,13 +109,13 @@ echo $cap['image'];</code>
<li>The captcha function requires the GD image library.</li>
<li>Only the img_path and img_url are required.</li>
<li>If a "word" is not supplied, the function will generate a random
- ASCII string. You might put together your own word library that
+ ASCII string. You might put together your own word library that
you can draw randomly from.</li>
<li>If you do not specify a path to a TRUE TYPE font, the native ugly GD
font will be used.</li>
<li>The "captcha" folder must be writable (666, or 777)</li>
<li>The "expiration" (in seconds) signifies how long an image will
- remain in the captcha folder before it will be deleted. The default
+ remain in the captcha folder before it will be deleted. The default
is two hours.</li>
</ul>
@@ -137,7 +137,7 @@ echo $cap['image'];</code>
&nbsp;KEY `word` (`word`)<br />
);</code>
- <p>Here is an example of usage with a database. On the page where the CAPTCHA will be shown you'll have something like this:</p>
+ <p>Here is an example of usage with a database. On the page where the CAPTCHA will be shown you'll have something like this:</p>
<code>$this-&gt;load-&gt;helper(&#x27;captcha&#x27;);<br />
$vals = array(<br />
@@ -167,7 +167,7 @@ $expiration = time()-7200; // Two hour limit<br />
$this-&gt;db-&gt;query(&quot;DELETE FROM captcha WHERE captcha_time &lt; &quot;.$expiration); <br />
<br />
// Then see if a captcha exists:<br />
-$sql = &quot;SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ? AND date &gt; ?&quot;;<br />
+$sql = &quot;SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ? AND captcha_time &gt; ?&quot;;<br />
$binds = array($_POST[&#x27;captcha&#x27;], $this-&gt;input-&gt;ip_address(), $expiration);<br />
$query = $this-&gt;db-&gt;query($sql, $binds);<br />
$row = $query-&gt;row();<br />
@@ -183,11 +183,11 @@ if ($row-&gt;count == 0)<br />
<div id="footer">
<p>
-Previous Topic:&nbsp;&nbsp;<a href="url_helper.html">URL Helper</a>
+Previous Topic:&nbsp;&nbsp;<a href="array_helper.html">Array Helper</a>
&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
-<a href="../index.html">User Guide Home</a>
-</p>
+<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+Next Topic:&nbsp;&nbsp;<a href="cookie_helper.html">Cookie Helper</a></p>
<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006 - 2011 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">EllisLab, Inc.</a></p>
</div>
diff --git a/user_guide/helpers/cookie_helper.html b/user_guide/helpers/cookie_helper.html
index 860979bd8..889c3346e 100644
--- a/user_guide/helpers/cookie_helper.html
+++ b/user_guide/helpers/cookie_helper.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -70,20 +70,20 @@ Cookie Helper
<h2>set_cookie()</h2>
-<p>This helper function gives you view file friendly syntax to set browser cookies. Refer to the <a href="../libraries/input.html">Input class</a> for a description of use, as this function is an alias to $this->input->set_cookie().</p>
+<p>This helper function gives you view file friendly syntax to set browser cookies. Refer to the <a href="../libraries/input.html">Input class</a> for a description of use, as this function is an alias to $this->input->set_cookie().</p>
<h2>get_cookie()</h2>
-<p>This helper function gives you view file friendly syntax to get browser cookies. Refer to the <a href="../libraries/input.html">Input class</a> for a description of use, as this function is an alias to $this->input->cookie().</p>
+<p>This helper function gives you view file friendly syntax to get browser cookies. Refer to the <a href="../libraries/input.html">Input class</a> for a description of use, as this function is an alias to $this->input->cookie().</p>
<h2>delete_cookie()</h2>
-<p>Lets you delete a cookie. Unless you've set a custom path or other values, only the name of the cookie is needed:</p>
+<p>Lets you delete a cookie. Unless you've set a custom path or other values, only the name of the cookie is needed:</p>
<code>delete_cookie("name");</code>
-<p>This function is otherwise identical to <dfn>set_cookie()</dfn>, except that it does not have the value and expiration parameters. You can submit an array
+<p>This function is otherwise identical to <dfn>set_cookie()</dfn>, except that it does not have the value and expiration parameters. You can submit an array
of values in the first parameter or you can set discrete parameters.</p>
<code>delete_cookie($name, $domain, $path, $prefix)</code>
@@ -95,7 +95,7 @@ of values in the first parameter or you can set discrete parameters.</p>
<div id="footer">
<p>
-Previous Topic:&nbsp;&nbsp;<a href="compatibility_helper.html">Compatibility Helper</a>
+Previous Topic:&nbsp;&nbsp;<a href="captcha_helper.html">CAPTCHA Helper</a>
&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
diff --git a/user_guide/helpers/date_helper.html b/user_guide/helpers/date_helper.html
index ba9aa8ef5..a2933420c 100644
--- a/user_guide/helpers/date_helper.html
+++ b/user_guide/helpers/date_helper.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -72,7 +72,7 @@ Date Helper
<h2>now()</h2>
<p>Returns the current time as a Unix timestamp, referenced either to your server's local time or GMT, based on the "time reference"
-setting in your config file. If you do not intend to set your master time reference to GMT (which you'll typically do if you
+setting in your config file. If you do not intend to set your master time reference to GMT (which you'll typically do if you
run a site that lets each user set their own timezone settings) there is no benefit to using this function over PHP's time() function.
</p>
@@ -82,10 +82,10 @@ run a site that lets each user set their own timezone settings) there is no bene
<h2>mdate()</h2>
<p>This function is identical to PHPs <a href="http://www.php.net/date">date()</a> function, except that it lets you
-use MySQL style date codes, where each code letter is preceded with a percent sign: %Y %m %d etc.</p>
+use MySQL style date codes, where each code letter is preceded with a percent sign: %Y %m %d etc.</p>
<p>The benefit of doing dates this way is that you don't have to worry about escaping any characters that
-are not date codes, as you would normally have to do with the date() function. Example:</p>
+are not date codes, as you would normally have to do with the date() function. Example:</p>
<code>$datestring = "Year: %Y Month: %m Day: %d - %h:%i %a";<br />
$time = time();<br />
@@ -149,7 +149,7 @@ echo standard_date($format, $time);
<tr>
<td>DATE_RFC1123</td>
<td>RFC 1123</td>
- <td>Sun, 14 Aug 2005 16:13:03 UTC</td>
+ <td>Sun, 14 Aug 2005 16:13:03 UTC</td>
</tr>
<tr>
<td>DATE_RFC2822</td>
@@ -170,7 +170,7 @@ echo standard_date($format, $time);
<h2>local_to_gmt()</h2>
-<p>Takes a Unix timestamp as input and returns it as GMT. Example:</p>
+<p>Takes a Unix timestamp as input and returns it as GMT. Example:</p>
<code>$now = time();<br />
<br />
@@ -180,11 +180,11 @@ $gmt = local_to_gmt($now);</code>
<h2>gmt_to_local()</h2>
<p>Takes a Unix timestamp (referenced to GMT) as input, and converts it to a localized timestamp based on the
-timezone and Daylight Saving time submitted. Example:</p>
+timezone and Daylight Saving time submitted. Example:</p>
<code>
$timestamp = '1140153693';<br />
-$timezone = 'UM8';<br />
+$timezone = 'UM8';<br />
$daylight_saving = TRUE;<br />
<br />
echo gmt_to_local($timestamp, $timezone, $daylight_saving);</code>
@@ -208,7 +208,7 @@ $unix = mysql_to_unix($mysql);</code>
<p>This can be useful if you need to display a date in a form field for submission.</p>
-<p>The time can be formatted with or without seconds, and it can be set to European or US format. If only
+<p>The time can be formatted with or without seconds, and it can be set to European or US format. If only
the timestamp is submitted it will return the time without seconds formatted for the U.S. Examples:</p>
<code>$now = time();<br />
@@ -222,9 +222,9 @@ echo unix_to_human($now, TRUE, 'eu'); // Euro time with seconds</code>
<h2>human_to_unix()</h2>
-<p>The opposite of the above function. Takes a "human" time as input and returns it as Unix. This function is
-useful if you accept "human" formatted dates submitted via a form. Returns FALSE (boolean) if
-the date string passed to it is not formatted as indicated above. Example:</p>
+<p>The opposite of the above function. Takes a "human" time as input and returns it as Unix. This function is
+useful if you accept "human" formatted dates submitted via a form. Returns FALSE (boolean) if
+the date string passed to it is not formatted as indicated above. Example:</p>
<code>$now = time();<br />
<br />
@@ -242,9 +242,9 @@ $unix = human_to_unix($human);</code>
<code>1 Year, 10 Months, 2 Weeks, 5 Days, 10 Hours, 16 Minutes</code>
-<p>The first parameter must contain a Unix timestamp. The second parameter must contain a
-timestamp that is greater that the first timestamp. If the second parameter empty, the current time will be used. The most common purpose
-for this function is to show how much time has elapsed from some point in time in the past to now. Example:</p>
+<p>The first parameter must contain a Unix timestamp. The second parameter must contain a
+timestamp that is greater that the first timestamp. If the second parameter empty, the current time will be used. The most common purpose
+for this function is to show how much time has elapsed from some point in time in the past to now. Example:</p>
<code>$post_date = '1079621429';<br />
$now = time();<br />
@@ -256,7 +256,7 @@ echo timespan($post_date, $now);</code>
<h2>days_in_month()</h2>
-<p>Returns the number of days in a given month/year. Takes leap years into account. Example:</p>
+<p>Returns the number of days in a given month/year. Takes leap years into account. Example:</p>
<code>echo days_in_month(06, 2005);</code>
<p>If the second parameter is empty, the current year will be used.</p>
@@ -304,7 +304,7 @@ echo timespan($post_date, $now);</code>
<p>This menu is useful if you run a membership site in which your users are allowed to set their local timezone value.</p>
-<p>The first parameter lets you set the "selected" state of the menu. For example, to set Pacific time as the default you will do this:</p>
+<p>The first parameter lets you set the "selected" state of the menu. For example, to set Pacific time as the default you will do this:</p>
<code>echo timezone_menu('UM8');</code>
diff --git a/user_guide/helpers/directory_helper.html b/user_guide/helpers/directory_helper.html
index d9a3d0e99..2086fe1f3 100644
--- a/user_guide/helpers/directory_helper.html
+++ b/user_guide/helpers/directory_helper.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -78,12 +78,12 @@ and builds an array representation of it and all its contained files. Example:</
<p class="important"><strong>Note:</strong> Paths are almost always relative to your main index.php file.</p>
-<p>Sub-folders contained within the directory will be mapped as well. If you wish to control the recursion depth,
+<p>Sub-folders contained within the directory will be mapped as well. If you wish to control the recursion depth,
you can do so using the second parameter (integer). A depth of 1 will only map the top level directory:</p>
<code>$map = directory_map('./mydirectory/', 1);</code>
-<p>By default, hidden files will not be included in the returned array. To override this behavior,
+<p>By default, hidden files will not be included in the returned array. To override this behavior,
you may set a third parameter to <var>true</var> (boolean):</p>
<code>$map = directory_map('./mydirectory/', FALSE, TRUE);</code>
diff --git a/user_guide/helpers/download_helper.html b/user_guide/helpers/download_helper.html
index 7fc9c440e..335e97d3d 100644
--- a/user_guide/helpers/download_helper.html
+++ b/user_guide/helpers/download_helper.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
diff --git a/user_guide/helpers/email_helper.html b/user_guide/helpers/email_helper.html
index 6e11ba0e6..8a3868a73 100644
--- a/user_guide/helpers/email_helper.html
+++ b/user_guide/helpers/email_helper.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
diff --git a/user_guide/helpers/file_helper.html b/user_guide/helpers/file_helper.html
index 85a76e100..2d06fa25b 100644
--- a/user_guide/helpers/file_helper.html
+++ b/user_guide/helpers/file_helper.html
@@ -27,7 +27,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -69,11 +69,11 @@ File Helper
<h2>read_file('<var>path</var>')</h2>
-<p>Returns the data contained in the file specified in the path. Example:</p>
+<p>Returns the data contained in the file specified in the path. Example:</p>
<code>$string = read_file('./path/to/file.php');</code>
-<p>The path can be a relative or full server path. Returns FALSE (boolean) on failure.</p>
+<p>The path can be a relative or full server path. Returns FALSE (boolean) on failure.</p>
<p class="important"><strong>Note:</strong> The path is relative to your main site index.php file, NOT your controller or view files.
CodeIgniter uses a front controller so paths are always relative to the main site index.</p>
@@ -83,7 +83,7 @@ might not work if you are trying to access a file above the calling script.</p>
<h2>write_file('<var>path</var>', <kbd>$data</kbd>)</h2>
-<p>Writes data to the file specified in the path. If the file does not exist the function will create it. Example:</p>
+<p>Writes data to the file specified in the path. If the file does not exist the function will create it. Example:</p>
<code>
$data = 'Some file data';<br />
@@ -101,7 +101,7 @@ else<br />
<code>write_file('./path/to/file.php', $data, <var>'r+'</var>);</code>
-<p>The default mode is <kbd>wb</kbd>. Please see the <a href="http://php.net/fopen">PHP user guide</a> for mode options.</p>
+<p>The default mode is <kbd>wb</kbd>. Please see the <a href="http://php.net/fopen">PHP user guide</a> for mode options.</p>
<p>Note: In order for this function to write data to a file its file permissions must be set such that it is writable (666, 777, etc.).
If the file does not already exist, the directory containing it must be writable.</p>
@@ -111,7 +111,7 @@ CodeIgniter uses a front controller so paths are always relative to the main sit
<h2>delete_files('<var>path</var>')</h2>
-<p>Deletes ALL files contained in the supplied path. Example:</p>
+<p>Deletes ALL files contained in the supplied path. Example:</p>
<code>delete_files('./path/to/directory/');</code>
<p>If the second parameter is set to <kbd>true</kbd>, any directories contained within the supplied root path will be deleted as well. Example:</p>
@@ -127,12 +127,12 @@ can optionally be added to the file names by setting the second parameter to TRU
<h2>get_dir_file_info('<var>path/to/directory/</var>', <kbd>$top_level_only</kbd> = TRUE)</h2>
-<p>Reads the specified directory and builds an array containing the filenames, filesize, dates, and permissions. Sub-folders contained within the specified path are only read if forced
+<p>Reads the specified directory and builds an array containing the filenames, filesize, dates, and permissions. Sub-folders contained within the specified path are only read if forced
by sending the second parameter, <kbd>$top_level_only</kbd> to <samp>FALSE</samp>, as this can be an intensive operation.</p>
<h2>get_file_info('<var>path/to/file</var>', <kbd>$file_information</kbd>)</h2>
-<p>Given a file and path, returns the name, path, size, date modified. Second parameter allows you to explicitly declare what information you want returned; options are: name, server_path, size, date, readable, writable, executable, fileperms. Returns FALSE if the file cannot be found.</p>
+<p>Given a file and path, returns the name, path, size, date modified. Second parameter allows you to explicitly declare what information you want returned; options are: name, server_path, size, date, readable, writable, executable, fileperms. Returns FALSE if the file cannot be found.</p>
<p class="important"><strong>Note:</strong> The &quot;writable&quot; uses the PHP function is_writable() which is known to have issues on the IIS webserver. Consider using fileperms instead, which returns information from PHP's fileperms() function.</p>
<h2>get_mime_by_extension('<var>file</var>')</h2>
@@ -142,7 +142,7 @@ can optionally be added to the file names by setting the second parameter to TRU
<code>$file = &quot;somefile.png&quot;;<br />
echo $file . ' is has a mime type of ' . get_mime_by_extension($file);</code>
</p>
-<p class="critical"><strong>Note:</strong> This is not an accurate way of determining file mime types, and is here strictly as a convenience. It should not be used for security.</p>
+<p class="critical"><strong>Note:</strong> This is not an accurate way of determining file mime types, and is here strictly as a convenience. It should not be used for security.</p>
<h2>symbolic_permissions(<kbd>$perms</kbd>)</h2>
diff --git a/user_guide/helpers/form_helper.html b/user_guide/helpers/form_helper.html
index 62544c459..b4a5730f2 100644
--- a/user_guide/helpers/form_helper.html
+++ b/user_guide/helpers/form_helper.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -72,7 +72,7 @@ Form Helper
<h2>form_open()</h2>
-<p>Creates an opening form tag with a base URL <strong>built from your config preferences</strong>. It will optionally let you
+<p>Creates an opening form tag with a base URL <strong>built from your config preferences</strong>. It will optionally let you
add form attributes and hidden input fields, and will always add the attribute <kbd>accept-charset</kbd> based on the charset value in your config file.</p>
<p>The main benefit of using this tag rather than hard coding your own HTML is that it permits your site to be more portable
@@ -122,7 +122,7 @@ which is necessary if you would like to use the form to upload files with.</p>
<h2>form_hidden()</h2>
-<p>Lets you generate hidden input fields. You can either submit a name/value string to create one field:</p>
+<p>Lets you generate hidden input fields. You can either submit a name/value string to create one field:</p>
<code>form_hidden('username', 'johndoe');<br />
<br />
@@ -149,7 +149,7 @@ echo form_hidden($data);<br />
<h2>form_input()</h2>
-<p>Lets you generate a standard text input field. You can minimally pass the field name and value in the first
+<p>Lets you generate a standard text input field. You can minimally pass the field name and value in the first
and second parameter:</p>
<code>echo form_input('username', 'johndoe');</code>
@@ -196,9 +196,9 @@ example, you will instead specify "rows" and "cols".</p>
<h2>form_dropdown()</h2>
-<p>Lets you create a standard drop-down field. The first parameter will contain the name of the field,
+<p>Lets you create a standard drop-down field. The first parameter will contain the name of the field,
the second parameter will contain an associative array of options, and the third parameter will contain the
-value you wish to be selected. You can also pass an array of multiple items through the third parameter, and CodeIgniter will create a multiple select for you. Example:</p>
+value you wish to be selected. You can also pass an array of multiple items through the third parameter, and CodeIgniter will create a multiple select for you. Example:</p>
<code>$options = array(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'small'&nbsp;&nbsp;=> 'Small Shirt',<br />
@@ -215,7 +215,7 @@ echo form_dropdown('shirts', $options, 'large');<br />
<br />
&lt;select name=&quot;shirts&quot;&gt;<br />
&lt;option value=&quot;small&quot;&gt;Small Shirt&lt;/option&gt;<br />
-&lt;option value=&quot;med&quot;&gt;Medium Shirt&lt;/option&gt;<br />
+&lt;option value=&quot;med&quot;&gt;Medium Shirt&lt;/option&gt;<br />
&lt;option value=&quot;large&quot; selected=&quot;selected&quot;&gt;Large Shirt&lt;/option&gt;<br />
&lt;option value=&quot;xlarge&quot;&gt;Extra Large Shirt&lt;/option&gt;<br />
&lt;/select&gt;<br />
@@ -226,7 +226,7 @@ echo form_dropdown('shirts', $options, $shirts_on_sale);<br />
<br />
&lt;select name=&quot;shirts&quot; multiple=&quot;multiple&quot;&gt;<br />
&lt;option value=&quot;small&quot; selected=&quot;selected&quot;&gt;Small Shirt&lt;/option&gt;<br />
-&lt;option value=&quot;med&quot;&gt;Medium Shirt&lt;/option&gt;<br />
+&lt;option value=&quot;med&quot;&gt;Medium Shirt&lt;/option&gt;<br />
&lt;option value=&quot;large&quot; selected=&quot;selected&quot;&gt;Large Shirt&lt;/option&gt;<br />
&lt;option value=&quot;xlarge&quot;&gt;Extra Large Shirt&lt;/option&gt;<br />
&lt;/select&gt;</code>
@@ -243,9 +243,9 @@ echo form_dropdown('shirts', $options, 'large', $js);</code>
<h2>form_multiselect()</h2>
-<p>Lets you create a standard multiselect field. The first parameter will contain the name of the field,
+<p>Lets you create a standard multiselect field. The first parameter will contain the name of the field,
the second parameter will contain an associative array of options, and the third parameter will contain the
-value or values you wish to be selected. The parameter usage is identical to using <kbd>form_dropdown()</kbd> above,
+value or values you wish to be selected. The parameter usage is identical to using <kbd>form_dropdown()</kbd> above,
except of course that the name of the field will need to use POST array syntax, e.g. <samp>foo[]</samp>.</p>
@@ -267,7 +267,7 @@ echo form_fieldset_close();
&lt;/fieldset&gt;</code>
<p>Similar to other functions, you can submit an associative array in the second parameter if you prefer to set additional attributes. </p>
<p><code>$attributes = array('id' =&gt; 'address_info', 'class' =&gt; 'address_info');<br />
- echo form_fieldset('Address Information', $attributes);<br />
+ echo form_fieldset('Address Information', $attributes);<br />
echo &quot;&lt;p&gt;fieldset content here&lt;/p&gt;\n&quot;;<br />
echo form_fieldset_close(); <br />
<br />
@@ -277,11 +277,11 @@ echo form_fieldset_close(); <br />
&lt;p&gt;form content here&lt;/p&gt; <br />
&lt;/fieldset&gt;</code></p>
<h2>form_fieldset_close()</h2>
-<p>Produces a closing &lt;/fieldset&gt; tag. The only advantage to using this function is it permits you to pass data to it
- which will be added below the tag. For example:</p>
+<p>Produces a closing &lt;/fieldset&gt; tag. The only advantage to using this function is it permits you to pass data to it
+ which will be added below the tag. For example:</p>
<code>$string = &quot;&lt;/div&gt;&lt;/div&gt;&quot;;<br />
<br />
-echo fieldset_close($string);<br />
+echo form_fieldset_close($string);<br />
<br />
// Would produce:<br />
&lt;/fieldset&gt;<br />
@@ -309,7 +309,7 @@ echo form_checkbox($data);<br />
// Would produce:<br /><br />
&lt;input type="checkbox" name="newsletter" id="newsletter" value="accept" checked="checked" style="margin:10px" /></code>
-<p>As with other functions, if you would like the tag to contain additional data, like JavaScript, you can pass it as a string in the
+<p>As with other functions, if you would like the tag to contain additional data, like JavaScript, you can pass it as a string in the
fourth parameter:</p>
<code>$js = 'onClick="some_function()"';<br />
@@ -330,7 +330,7 @@ fourth parameter:</p>
<br />
&lt;input type=&quot;submit&quot; name=&quot;mysubmit&quot; value=&quot;Submit Post!&quot; /&gt;</code>
<p>Similar to other functions, you can submit an associative array in the first parameter if you prefer to set your own attributes.
- The third parameter lets you add extra data to your form, like JavaScript.</p>
+ The third parameter lets you add extra data to your form, like JavaScript.</p>
<h2>form_label()</h2>
<p>Lets you generate a &lt;label&gt;. Simple example:</p>
<code>echo form_label('What is your Name', 'username');<br />
@@ -338,13 +338,13 @@ fourth parameter:</p>
// Would produce:
<br />
&lt;label for=&quot;username&quot;&gt;What is your Name&lt;/label&gt;</code>
-<p>Similar to other functions, you can submit an associative array in the third parameter if you prefer to set additional attributes. </p>
+<p>Similar to other functions, you can submit an associative array in the third parameter if you prefer to set additional attributes. </p>
<p><code>$attributes = array(<br />
&nbsp;&nbsp;&nbsp;&nbsp;'class' =&gt; 'mycustomclass',<br />
&nbsp;&nbsp;&nbsp;&nbsp;'style' =&gt; 'color: #000;',<br />
);<br />
- echo form_label('What is your Name', 'username', $attributes);<br />
- <br />
+ echo form_label('What is your Name', 'username', $attributes);<br />
+ <br />
// Would produce: <br />
&lt;label for=&quot;username&quot; class=&quot;mycustomclass&quot; style=&quot;color: #000;&quot;&gt;What is your Name&lt;/label&gt;</code></p>
<h2>form_reset()</h2>
@@ -386,8 +386,8 @@ echo form_button('mybutton', 'Click Me', $js);
<h2>form_close()</h2>
-<p>Produces a closing &lt;/form> tag. The only advantage to using this function is it permits you to pass data to it
-which will be added below the tag. For example:</p>
+<p>Produces a closing &lt;/form> tag. The only advantage to using this function is it permits you to pass data to it
+which will be added below the tag. For example:</p>
<code>$string = "&lt;/div>&lt;/div>";<br />
<br />
@@ -404,7 +404,7 @@ echo form_close($string);<br />
<h2>form_prep()</h2>
-<p>Allows you to safely use HTML and characters such as quotes within form elements without breaking out of the form. Consider this example:</p>
+<p>Allows you to safely use HTML and characters such as quotes within form elements without breaking out of the form. Consider this example:</p>
<code>$string = 'Here is a string containing <strong>"quoted"</strong> text.';<br />
<br />
@@ -431,7 +431,7 @@ The second (optional) parameter allows you to set a default value for the form.
<h2>set_select()</h2>
-<p>If you use a <dfn>&lt;select></dfn> menu, this function permits you to display the menu item that was selected. The first parameter
+<p>If you use a <dfn>&lt;select></dfn> menu, this function permits you to display the menu item that was selected. The first parameter
must contain the name of the select menu, the second parameter must contain the value of
each item, and the third (optional) parameter lets you set an item as the default (use boolean TRUE/FALSE).</p>
@@ -439,16 +439,16 @@ each item, and the third (optional) parameter lets you set an item as the defaul
<code>
&lt;select name="myselect"><br />
-&lt;option value="one" <dfn>&lt;?php echo set_select('myselect', 'one', TRUE); ?></dfn> >One&lt;/option><br />
-&lt;option value="two" <dfn>&lt;?php echo set_select('myselect', 'two'); ?></dfn> >Two&lt;/option><br />
-&lt;option value="three" <dfn>&lt;?php echo set_select('myselect', 'three'); ?></dfn> >Three&lt;/option><br />
+&lt;option value="one" <dfn>&lt;?php echo set_select('myselect', 'one', TRUE); ?></dfn> >One&lt;/option><br />
+&lt;option value="two" <dfn>&lt;?php echo set_select('myselect', 'two'); ?></dfn> >Two&lt;/option><br />
+&lt;option value="three" <dfn>&lt;?php echo set_select('myselect', 'three'); ?></dfn> >Three&lt;/option><br />
&lt;/select>
</code>
<h2>set_checkbox()</h2>
-<p>Permits you to display a checkbox in the state it was submitted. The first parameter
+<p>Permits you to display a checkbox in the state it was submitted. The first parameter
must contain the name of the checkbox, the second parameter must contain its value, and the third (optional) parameter lets you set an item as the default (use boolean TRUE/FALSE). Example:</p>
<code>&lt;input type="checkbox" name="mycheck" value="1" <dfn>&lt;?php echo set_checkbox('mycheck', '1'); ?></dfn> /><br />
@@ -459,8 +459,8 @@ must contain the name of the checkbox, the second parameter must contain its val
<p>Permits you to display radio buttons in the state they were submitted. This function is identical to the <strong>set_checkbox()</strong> function above.</p>
-<code>&lt;input type="radio" name="myradio" value="1" <dfn>&lt;?php echo set_radio('myradio', '1', TRUE); ?></dfn> /><br />
-&lt;input type="radio" name="myradio" value="2" <dfn>&lt;?php echo set_radio('myradio', '2'); ?></dfn> /></code>
+<code>&lt;input type="radio" name="myradio" value="1" <dfn>&lt;?php echo set_radio('myradio', '1', TRUE); ?></dfn> /><br />
+&lt;input type="radio" name="myradio" value="2" <dfn>&lt;?php echo set_radio('myradio', '2'); ?></dfn> /></code>
diff --git a/user_guide/helpers/html_helper.html b/user_guide/helpers/html_helper.html
index 07fd6d3dc..665081fb6 100644
--- a/user_guide/helpers/html_helper.html
+++ b/user_guide/helpers/html_helper.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -84,13 +84,18 @@ HTML Helper
<p>The above would produce: &lt;br />&lt;br />&lt;br /></p>
<h2><a name="heading"></a>heading()</h2>
-<p>Lets you create HTML &lt;h1> tags. The first parameter will contain the data, the
-second the size of the heading. Example:</p>
+<p>Lets you create HTML &lt;h1> tags. The first parameter will contain the data, the
+second the size of the heading. Example:</p>
<code>echo heading('Welcome!', 3);</code>
-<p>The above would produce: &lt;h3>Welcome!&lt;/h3></p>
+<p>The above would produce: &lt;h3>Welcome!&lt;/h3></p>
+
+<p>Additionally, in order to add attributes to the heading tag such as HTML classes, ids or inline styles, a third parameter is available.</p>
+<code>echo heading('Welcome!', 3, 'class="pink"')</code>
+<p>The above code produces: &lt;h3 class="pink">Welcome!<&lt;h3></p>
+
<h2><a name="img"></a>img()</h2>
-<p>Lets you create HTML &lt;img /&gt; tags. The first parameter contains the image source. Example:</p>
+<p>Lets you create HTML &lt;img /&gt; tags. The first parameter contains the image source. Example:</p>
<code>echo img('images/picture.jpg');<br />
// gives &lt;img src=&quot;http://site.com/images/picture.jpg&quot; /&gt;</code>
<p>There is an optional second parameter that is a TRUE/FALSE value that specifics if the src should have the page specified by $config['index_page'] added to the address it creates. Presumably, this would be if you were using a media controller.</p>
@@ -111,7 +116,7 @@ second the size of the heading. Example:</p>
// &lt;img src=&quot;http://site.com/index.php/images/picture.jpg&quot; alt=&quot;Me, demonstrating how to eat 4 slices of pizza at one time&quot; class=&quot;post_images&quot; width=&quot;200&quot; height=&quot;200&quot; title=&quot;That was quite a night&quot; rel=&quot;lightbox&quot; /&gt;</code></p>
<h2><a name="link_tag"></a>link_tag()</h2>
-<p>Lets you create HTML &lt;link /> tags. This is useful for stylesheet links, as well as other links. The parameters are href, with optional rel, type, title, media and index_page. index_page is a TRUE/FALSE value that specifics if the href should have the page specified by $config['index_page'] added to the address it creates.<code>
+<p>Lets you create HTML &lt;link /> tags. This is useful for stylesheet links, as well as other links. The parameters are href, with optional rel, type, title, media and index_page. index_page is a TRUE/FALSE value that specifics if the href should have the page specified by $config['index_page'] added to the address it creates.<code>
echo link_tag('css/mystyles.css');<br />
// gives &lt;link href=&quot;http://site.com/css/mystyles.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;</code></p>
<p>Further examples:</p>
@@ -266,20 +271,20 @@ echo ul($list, $attributes);</code>
<h2><a name="meta"></a>meta()</h2>
-<p>Helps you generate meta tags. You can pass strings to the function, or simple arrays, or multidimensional ones. Examples:</p>
+<p>Helps you generate meta tags. You can pass strings to the function, or simple arrays, or multidimensional ones. Examples:</p>
<code>
echo meta('description', 'My Great site');<br />
-// Generates: &lt;meta name="description" content="My Great Site" /><br />
+// Generates: &lt;meta name="description" content="My Great Site" /><br />
<br /><br />
-echo meta('Content-type', 'text/html; charset=utf-8', 'equiv'); // Note the third parameter. Can be "equiv" or "name"<br />
-// Generates: &lt;meta http-equiv="Content-type" content="text/html; charset=utf-8" /><br />
+echo meta('Content-type', 'text/html; charset=utf-8', 'equiv'); // Note the third parameter. Can be "equiv" or "name"<br />
+// Generates: &lt;meta http-equiv="Content-type" content="text/html; charset=utf-8" /><br />
<br /><br />
echo meta(array('name' => 'robots', 'content' => 'no-cache'));<br />
-// Generates: &lt;meta name="robots" content="no-cache" /><br />
+// Generates: &lt;meta name="robots" content="no-cache" /><br />
<br /><br />
@@ -293,7 +298,7 @@ $meta = array(<br />
<br />
echo meta($meta);
<br />
-// Generates: <br />
+// Generates: <br />
// &lt;meta name="robots" content="no-cache" /><br />
// &lt;meta name="description" content="My Great Site" /><br />
// &lt;meta name="keywords" content="love, passion, intrigue, deception" /><br />
@@ -314,7 +319,7 @@ echo doctype('html4-trans');<br />
// &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;
</code>
-<p>The following is a list of doctype choices. These are configurable, and pulled from <samp>application/config/doctypes.php</samp></p>
+<p>The following is a list of doctype choices. These are configurable, and pulled from <samp>application/config/doctypes.php</samp></p>
<table cellpadding="0" cellspacing="1" border="0" style="width:100%" class="tableborder">
<tr>
diff --git a/user_guide/helpers/inflector_helper.html b/user_guide/helpers/inflector_helper.html
index bd44fea74..087675454 100644
--- a/user_guide/helpers/inflector_helper.html
+++ b/user_guide/helpers/inflector_helper.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -71,7 +71,7 @@ Inflector Helper
<h2>singular()</h2>
-<p>Changes a plural word to singular. Example:</p>
+<p>Changes a plural word to singular. Example:</p>
<code>
$word = "dogs";<br />
@@ -81,7 +81,7 @@ echo singular($word); // Returns "dog"
<h2>plural()</h2>
-<p>Changes a singular word to plural. Example:</p>
+<p>Changes a singular word to plural. Example:</p>
<code>
$word = "dog";<br />
@@ -94,7 +94,7 @@ echo plural($word); // Returns "dogs"
echo plural($word, TRUE); // Returns &quot;passes&quot; </code>
<h2>camelize()</h2>
-<p>Changes a string of words separated by spaces or underscores to camel case. Example:</p>
+<p>Changes a string of words separated by spaces or underscores to camel case. Example:</p>
<code>
$word = "my_dog_spot";<br />
@@ -104,7 +104,7 @@ echo camelize($word); // Returns "myDogSpot"
<h2>underscore()</h2>
-<p>Takes multiple words separated by spaces and underscores them. Example:</p>
+<p>Takes multiple words separated by spaces and underscores them. Example:</p>
<code>
$word = "my dog spot";<br />
@@ -114,7 +114,7 @@ echo underscore($word); // Returns "my_dog_spot"
<h2>humanize()</h2>
-<p>Takes multiple words separated by underscores and adds spaces between them. Each word is capitalized. Example:</p>
+<p>Takes multiple words separated by underscores and adds spaces between them. Each word is capitalized. Example:</p>
<code>
$word = "my_dog_spot";<br />
diff --git a/user_guide/helpers/language_helper.html b/user_guide/helpers/language_helper.html
index 5c0cb26d5..e10733baf 100644
--- a/user_guide/helpers/language_helper.html
+++ b/user_guide/helpers/language_helper.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -73,7 +73,7 @@ Language Helper
<p>This function returns a line of text from a loaded language file with simplified syntax
that may be more desirable for view files than calling <kbd>$this-&gt;lang-&gt;line()</kbd>.
- The optional second parameter will also output a form label for you. Example:</p>
+ The optional second parameter will also output a form label for you. Example:</p>
<code>echo lang('<samp>language_key</samp>', '<samp>form_item_id</samp>');<br />
// becomes &lt;label for="form_item_id"&gt;language_key&lt;/label&gt;</code>
diff --git a/user_guide/helpers/number_helper.html b/user_guide/helpers/number_helper.html
index afe5bc3fe..a04f37c86 100644
--- a/user_guide/helpers/number_helper.html
+++ b/user_guide/helpers/number_helper.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -71,7 +71,7 @@ Number Helper
<h2>byte_format()</h2>
-<p>Formats a numbers as bytes, based on size, and adds the appropriate suffix. Examples:</p>
+<p>Formats a numbers as bytes, based on size, and adds the appropriate suffix. Examples:</p>
<code>
echo byte_format(456); // Returns 456 Bytes<br />
diff --git a/user_guide/helpers/path_helper.html b/user_guide/helpers/path_helper.html
index 205cce20e..584a127f9 100644
--- a/user_guide/helpers/path_helper.html
+++ b/user_guide/helpers/path_helper.html
@@ -27,7 +27,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
diff --git a/user_guide/helpers/security_helper.html b/user_guide/helpers/security_helper.html
index 2dba7bb8e..49e0365d1 100644
--- a/user_guide/helpers/security_helper.html
+++ b/user_guide/helpers/security_helper.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -71,19 +71,19 @@ Security Helper
<h2>xss_clean()</h2>
-<p>Provides Cross Site Script Hack filtering. This function is an alias to the one in the
-<a href="../libraries/input.html">Input class</a>. More info can be found there.</p>
+<p>Provides Cross Site Script Hack filtering. This function is an alias to the one in the
+<a href="../libraries/input.html">Input class</a>. More info can be found there.</p>
<h2>sanitize_filename()</h2>
-<p>Provides protection against directory traversal. This function is an alias to the one in the
-<a href="../libraries/security.html">Security class</a>. More info can be found there.</p>
+<p>Provides protection against directory traversal. This function is an alias to the one in the
+<a href="../libraries/security.html">Security class</a>. More info can be found there.</p>
<h2>do_hash()</h2>
-<p>Permits you to create SHA1 or MD5 one way hashes suitable for encrypting passwords. Will create SHA1 by default. Examples:</p>
+<p>Permits you to create SHA1 or MD5 one way hashes suitable for encrypting passwords. Will create SHA1 by default. Examples:</p>
<code>
$str = do_hash($str); // SHA1<br />
@@ -91,13 +91,13 @@ $str = do_hash($str); // SHA1<br />
$str = do_hash($str, 'md5'); // MD5
</code>
-<p class="important"><strong>Note:</strong> This function was formerly named <kbd>dohash()</kbd>, which has been deprecated in favour of <kbd>do_hash()</kbd>.</p>
+<p class="important"><strong>Note:</strong> This function was formerly named <kbd>dohash()</kbd>, which has been deprecated in favour of <kbd>do_hash()</kbd>.</p>
<h2>strip_image_tags()</h2>
-<p>This is a security function that will strip image tags from a string. It leaves the image URL as plain text.</p>
+<p>This is a security function that will strip image tags from a string. It leaves the image URL as plain text.</p>
<code>$string = strip_image_tags($string);</code>
diff --git a/user_guide/helpers/smiley_helper.html b/user_guide/helpers/smiley_helper.html
index 18df9876f..4668f106e 100644
--- a/user_guide/helpers/smiley_helper.html
+++ b/user_guide/helpers/smiley_helper.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -83,7 +83,7 @@ Your users can click a desired smiley and with the help of some JavaScript it wi
requires that you first download and install the smiley images, then create a controller and the View as described.</p>
<p class="important"><strong>Important:</strong> Before you begin, please <a href="http://codeigniter.com/download_files/smileys.zip">download the smiley images</a> and put them in
-a publicly accessible place on your server. This helper also assumes you have the smiley replacement array located at
+a publicly accessible place on your server. This helper also assumes you have the smiley replacement array located at
<dfn>application/config/smileys.php</dfn></p>
@@ -166,7 +166,7 @@ you can give your smiley links a generic name that will be tied to a specific id
<h2>get_clickable_smileys()</h2>
-<p>Returns an array containing your smiley images wrapped in a clickable link. You must supply the URL to your smiley folder
+<p>Returns an array containing your smiley images wrapped in a clickable link. You must supply the URL to your smiley folder
and a field id or field alias.</p>
<code>$image_array = get_smiley_links("http://example.com/images/smileys/", "comment");</code>
@@ -187,10 +187,10 @@ This function is designed to be placed into the &lt;head&gt; area of your web pa
<h2>parse_smileys()</h2>
<p>Takes a string of text as input and replaces any contained plain text smileys into the image
-equivalent. The first parameter must contain your string, the second must contain the URL to your smiley folder:</p>
+equivalent. The first parameter must contain your string, the second must contain the URL to your smiley folder:</p>
<code>
-$str = 'Here are some simileys: :-) ;-)';
+$str = 'Here are some simileys: :-) ;-)';
$str = parse_smileys($str, "http://example.com/images/smileys/");
diff --git a/user_guide/helpers/string_helper.html b/user_guide/helpers/string_helper.html
index 11b6b2736..6fc2cf5f7 100644
--- a/user_guide/helpers/string_helper.html
+++ b/user_guide/helpers/string_helper.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -70,9 +70,9 @@ String Helper
<h2>random_string()</h2>
-<p>Generates a random string based on the type and length you specify. Useful for creating passwords or generating random hashes.</p>
+<p>Generates a random string based on the type and length you specify. Useful for creating passwords or generating random hashes.</p>
-<p>The first parameter specifies the type of string, the second parameter specifies the length. The following choices are available:</p>
+<p>The first parameter specifies the type of string, the second parameter specifies the length. The following choices are available:</p>
alpha, alunum, numeric, nozero, unique, md5, encrypt and sha1
<ul>
@@ -92,7 +92,7 @@ String Helper
<h2>alternator()</h2>
-<p>Allows two or more items to be alternated between, when cycling through a loop. Example:</p>
+<p>Allows two or more items to be alternated between, when cycling through a loop. Example:</p>
<code>for ($i = 0; $i < 10; $i++)<br />
{<br />
diff --git a/user_guide/helpers/text_helper.html b/user_guide/helpers/text_helper.html
index a7f0f2b18..3c83f3d42 100644
--- a/user_guide/helpers/text_helper.html
+++ b/user_guide/helpers/text_helper.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -71,22 +71,22 @@ Text Helper
<h2>word_limiter()</h2>
-<p>Truncates a string to the number of <strong>words</strong> specified. Example:</p>
+<p>Truncates a string to the number of <strong>words</strong> specified. Example:</p>
<code>
$string = "Here is a nice text string consisting of eleven words.";<br />
<br />
$string = word_limiter($string, 4);<br /><br />
-// Returns: Here is a nice&#8230;
+// Returns: Here is a nice&#8230;
</code>
-<p>The third parameter is an optional suffix added to the string. By default it adds an ellipsis.</p>
+<p>The third parameter is an optional suffix added to the string. By default it adds an ellipsis.</p>
<h2>character_limiter()</h2>
-<p>Truncates a string to the number of <strong>characters</strong> specified. It maintains the integrity
+<p>Truncates a string to the number of <strong>characters</strong> specified. It maintains the integrity
of words so the character count may be slightly more or less then what you specify. Example:</p>
<code>
@@ -94,7 +94,7 @@ $string = "Here is a nice text string consisting of eleven words.";<br />
<br />
$string = character_limiter($string, 20);<br /><br />
-// Returns: Here is a nice text string&#8230;
+// Returns: Here is a nice text string&#8230;
</code>
<p>The third parameter is an optional suffix added to the string, if undeclared this helper uses an ellipsis.</p>
@@ -125,9 +125,9 @@ part it should correctly identify characters outside the normal range (like acce
<h2>word_censor()</h2>
-<p>Enables you to censor words within a text string. The first parameter will contain the original string. The
-second will contain an array of words which you disallow. The third (optional) parameter can contain a replacement value
-for the words. If not specified they are replaced with pound signs: ####. Example:</p>
+<p>Enables you to censor words within a text string. The first parameter will contain the original string. The
+second will contain an array of words which you disallow. The third (optional) parameter can contain a replacement value
+for the words. If not specified they are replaced with pound signs: ####. Example:</p>
<code>
$disallowed = array('darn', 'shucks', 'golly', 'phooey');<br />
@@ -137,7 +137,7 @@ $string = word_censor($string, $disallowed, 'Beep!');</code>
<h2>highlight_code()</h2>
-<p>Colorizes a string of code (PHP, HTML, etc.). Example:</p>
+<p>Colorizes a string of code (PHP, HTML, etc.). Example:</p>
<code>$string = highlight_code($string);</code>
@@ -146,9 +146,9 @@ $string = word_censor($string, $disallowed, 'Beep!');</code>
<h2>highlight_phrase()</h2>
-<p>Will highlight a phrase within a text string. The first parameter will contain the original string, the second will
-contain the phrase you wish to highlight. The third and fourth parameters will contain the opening/closing HTML tags
-you would like the phrase wrapped in. Example:</p>
+<p>Will highlight a phrase within a text string. The first parameter will contain the original string, the second will
+contain the phrase you wish to highlight. The third and fourth parameters will contain the opening/closing HTML tags
+you would like the phrase wrapped in. Example:</p>
<code>
$string = "Here is a nice text string about nothing in particular.";<br />
@@ -164,7 +164,7 @@ $string = highlight_phrase($string, "nice text", '&lt;span style="color:#990000"
<h2>word_wrap()</h2>
-<p>Wraps text at the specified <strong>character</strong> count while maintaining complete words. Example:</p>
+<p>Wraps text at the specified <strong>character</strong> count while maintaining complete words. Example:</p>
<code>$string = "Here is a simple string of text that will help us demonstrate this function.";<br />
<br />
@@ -180,8 +180,8 @@ function</code>
<h2>ellipsize()</h2>
<p>This function will strip tags from a string, split it at a defined maximum length, and insert an ellipsis.</p>
-<p>The first parameter is the string to ellipsize, the second is the number of characters in the final string. The third parameter is where in the string the ellipsis should appear from 0 - 1, left to right. For example. a value of 1 will place the ellipsis at the right of the string, .5 in the middle, and 0 at the left.</p>
-<p>An optional forth parameter is the kind of ellipsis. By default, <samp>&amp;hellip;</samp> will be inserted.</p>
+<p>The first parameter is the string to ellipsize, the second is the number of characters in the final string. The third parameter is where in the string the ellipsis should appear from 0 - 1, left to right. For example. a value of 1 will place the ellipsis at the right of the string, .5 in the middle, and 0 at the left.</p>
+<p>An optional forth parameter is the kind of ellipsis. By default, <samp>&amp;hellip;</samp> will be inserted.</p>
<code>$str = 'this_string_is_entirely_too_long_and_might_break_my_design.jpg';<br />
<br />
diff --git a/user_guide/helpers/typography_helper.html b/user_guide/helpers/typography_helper.html
index 425c20ec1..e75528fbb 100644
--- a/user_guide/helpers/typography_helper.html
+++ b/user_guide/helpers/typography_helper.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -71,7 +71,7 @@ Typography Helper
<h2>auto_typography()</h2>
-<p>Formats text so that it is semantically and typographically correct HTML. Please see the <a href="../libraries/typography.html">Typography Class</a> for more info.</p>
+<p>Formats text so that it is semantically and typographically correct HTML. Please see the <a href="../libraries/typography.html">Typography Class</a> for more info.</p>
<p>Usage example:</p>
diff --git a/user_guide/helpers/url_helper.html b/user_guide/helpers/url_helper.html
index 6d8bdc240..0bcf1e7ae 100644
--- a/user_guide/helpers/url_helper.html
+++ b/user_guide/helpers/url_helper.html
@@ -27,7 +27,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -69,13 +69,13 @@ URL Helper
<h2>site_url()</h2>
-<p>Returns your site URL, as specified in your config file. The index.php file (or whatever you have set as your
+<p>Returns your site URL, as specified in your config file. The index.php file (or whatever you have set as your
site <dfn>index_page</dfn> in your config file) will be added to the URL, as will any URI segments you pass to the function.</p>
<p>You are encouraged to use this function any time you need to generate a local URL so that your pages become more portable
in the event your URL changes.</p>
-<p>Segments can be optionally passed to the function as a string or an array. Here is a string example:</p>
+<p>Segments can be optionally passed to the function as a string or an array. Here is a string example:</p>
<code>echo site_url("news/local/123");</code>
@@ -90,7 +90,7 @@ echo site_url($segments);</code>
<h2>base_url()</h2>
-<p>Returns your site base URL, as specified in your config file. Example:</p>
+<p>Returns your site base URL, as specified in your config file. Example:</p>
<code>echo base_url();</code>
@@ -99,7 +99,7 @@ echo site_url($segments);</code>
<h2>uri_string()</h2>
-<p>Returns the URI segments of any page that contains this function. For example, if your URL was this:</p>
+<p>Returns the URI segments of any page that contains this function. For example, if your URL was this:</p>
<code>http://some-site.com/blog/comments/123</code>
<p>The function would return:</p>
@@ -107,7 +107,7 @@ echo site_url($segments);</code>
<h2>index_page()</h2>
-<p>Returns your site "index" page, as specified in your config file. Example:</p>
+<p>Returns your site "index" page, as specified in your config file. Example:</p>
<code>echo index_page();</code>
@@ -122,15 +122,15 @@ echo site_url($segments);</code>
<code>anchor(<var>uri segments</var>, <var>text</var>, <var>attributes</var>)</code>
-<p>The first parameter can contain any segments you wish appended to the URL. As with the <dfn>site_url()</dfn> function above,
+<p>The first parameter can contain any segments you wish appended to the URL. As with the <dfn>site_url()</dfn> function above,
segments can be a string or an array.</p>
-<p><strong>Note:</strong>&nbsp; If you are building links that are internal to your application do not include the base URL (http://...). This
+<p><strong>Note:</strong>&nbsp; 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.</p>
-<p>The second segment is the text you would like the link to say. If you leave it blank, the URL will be used.</p>
+<p>The second segment is the text you would like the link to say. If you leave it blank, the URL will be used.</p>
-<p>The third parameter can contain a list of attributes you would like added to the link. The attributes can be a simple string or an associative array.</p>
+<p>The third parameter can contain a list of attributes you would like added to the link. The attributes can be a simple string or an associative array.</p>
<p>Here are some examples:</p>
@@ -148,7 +148,7 @@ will be added automatically from the information specified in your config file.
<p>Nearly identical to the <dfn>anchor()</dfn> function except that it opens the URL in a new window.
You can specify JavaScript window attributes in the third parameter to control how the window is opened. If
-the third parameter is not set it will simply open a new window with your own browser settings. Here is an example
+the third parameter is not set it will simply open a new window with your own browser settings. Here is an example
with attributes:</p>
<code>
@@ -173,7 +173,7 @@ If you want the function to use all of its defaults simply pass an empty array i
<h2>mailto()</h2>
-<p>Creates a standard HTML email link. Usage example:</p>
+<p>Creates a standard HTML email link. Usage example:</p>
<code>echo mailto('me@my-site.com', 'Click Here to Contact Me');</code>
@@ -188,12 +188,12 @@ written with JavaScript to help prevent the email address from being harvested b
<h2>auto_link()</h2>
-<p>Automatically turns URLs and email addresses contained in a string into links. Example:</p>
+<p>Automatically turns URLs and email addresses contained in a string into links. Example:</p>
<code>$string = auto_link($string);</code>
-<p>The second parameter determines whether URLs and emails are converted or just one or the other. Default behavior is both
-if the parameter is not specified. Email links are encoded as safe_mailto() as shown above.</p>
+<p>The second parameter determines whether URLs and emails are converted or just one or the other. Default behavior is both
+if the parameter is not specified. Email links are encoded as safe_mailto() as shown above.</p>
<p>Converts only URLs:</p>
<code>$string = auto_link($string, 'url');</code>
@@ -201,42 +201,42 @@ if the parameter is not specified. Email links are encoded as safe_mailto() as
<p>Converts only Email addresses:</p>
<code>$string = auto_link($string, 'email');</code>
-<p>The third parameter determines whether links are shown in a new window. The value can be TRUE or FALSE (boolean):</p>
+<p>The third parameter determines whether links are shown in a new window. The value can be TRUE or FALSE (boolean):</p>
<code>$string = auto_link($string, 'both', TRUE);</code>
<h2>url_title()</h2>
<p>Takes a string as input and creates a human-friendly URL string. This is useful if, for example, you have a blog
-in which you'd like to use the title of your entries in the URL. Example:</p>
+in which you'd like to use the title of your entries in the URL. Example:</p>
<code>$title = "What's wrong with CSS?";<br />
<br />
$url_title = url_title($title);<br />
<br />
-// Produces: Whats-wrong-with-CSS
+// Produces: Whats-wrong-with-CSS
</code>
-<p>The second parameter determines the word delimiter. By default dashes are used. Options are: <dfn>dash</dfn>, or <dfn>underscore</dfn>:</p>
+<p>The second parameter determines the word delimiter. By default dashes are used. Options are: <dfn>dash</dfn>, or <dfn>underscore</dfn>:</p>
<code>$title = "What's wrong with CSS?";<br />
<br />
$url_title = url_title($title, 'underscore');<br />
<br />
-// Produces: Whats_wrong_with_CSS
+// Produces: Whats_wrong_with_CSS
</code>
-<p>The third parameter determines whether or not lowercase characters are forced. By default they are not. Options are boolean <dfn>TRUE</dfn>/<dfn>FALSE</dfn>:</p>
+<p>The third parameter determines whether or not lowercase characters are forced. By default they are not. Options are boolean <dfn>TRUE</dfn>/<dfn>FALSE</dfn>:</p>
<code>$title = "What's wrong with CSS?";<br />
<br />
$url_title = url_title($title, 'underscore', TRUE);<br />
<br />
-// Produces: whats_wrong_with_css
+// Produces: whats_wrong_with_css
</code>
<h3>prep_url()</h3>
-<p>This function will add <kbd>http://</kbd> in the event that a scheme is missing from a URL. Pass the URL string to the function like this:</p>
+<p>This function will add <kbd>http://</kbd> in the event that a scheme is missing from a URL. Pass the URL string to the function like this:</p>
<code>
$url = "example.com";<br /><br />
$url = prep_url($url);</code>
@@ -250,7 +250,7 @@ $url = prep_url($url);</code>
to the controller you want to direct to will create the link. The function will build the URL based on your config file values.</p>
<p>The optional second parameter allows you to choose between the "location"
-method (default) or the "refresh" method. Location is faster, but on Windows servers it can sometimes be a problem. The optional third parameter allows you to send a specific HTTP Response Code - this could be used for example to create 301 redirects for search engine purposes. The default Response Code is 302. The third parameter is <em>only</em> available with 'location' redirects, and not 'refresh'. Examples:</p>
+method (default) or the "refresh" method. Location is faster, but on Windows servers it can sometimes be a problem. The optional third parameter allows you to send a specific HTTP Response Code - this could be used for example to create 301 redirects for search engine purposes. The default Response Code is 302. The third parameter is <em>only</em> available with 'location' redirects, and not 'refresh'. Examples:</p>
<code>if ($logged_in == FALSE)<br />
{<br />
@@ -262,7 +262,7 @@ redirect('/article/13', 'location', 301);</code>
<p class="important"><strong>Note:</strong> In order for this function to work it must be used before anything is outputted
to the browser since it utilizes server headers.<br />
-<strong>Note:</strong> For very fine grained control over headers, you should use the <a href="../libraries/output.html">Output Library</a>'s set_header() function.</p>
+<strong>Note:</strong> For very fine grained control over headers, you should use the <a href="../libraries/output.html">Output Library</a>'s set_header() function.</p>
diff --git a/user_guide/helpers/xml_helper.html b/user_guide/helpers/xml_helper.html
index 446a01d8c..b3d408c7d 100644
--- a/user_guide/helpers/xml_helper.html
+++ b/user_guide/helpers/xml_helper.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -78,7 +78,7 @@ Less then and greater than characters: &lt; &gt;<br />
Single and double quotes: ' &nbsp;"<br />
Dashes: -</p>
-<p>This function ignores ampersands if they are part of existing character entities. Example:</p>
+<p>This function ignores ampersands if they are part of existing character entities. Example:</p>
<code>$string = xml_convert($string);</code>
diff --git a/user_guide/index.html b/user_guide/index.html
index 882eec0f8..2681004e3 100644
--- a/user_guide/index.html
+++ b/user_guide/index.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="toc.html">Table of Contents Page</a></td>
</tr>
</table>
diff --git a/user_guide/installation/downloads.html b/user_guide/installation/downloads.html
index da93bb678..f452ba471 100644
--- a/user_guide/installation/downloads.html
+++ b/user_guide/installation/downloads.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -58,8 +58,9 @@ Downloading CodeIgniter
<h1>Downloading CodeIgniter</h1>
<ul>
- <li><a href="http://codeigniter.com/downloads/">CodeIgniter V 2.0.1 (Current version)</a></li>
- <li><a href="http://codeigniter.com/download_files/CodeIgniter_2.0.0.zip">CodeIgniter V 2.0.0</a></li>
+ <li><a href="http://codeigniter.com/downloads/">CodeIgniter V 2.0.2 (Current version)</a></li>
+ <li><a href="http://codeigniter.com/download_files/reactor/CodeIgniter_2.0.1.zip">CodeIgniter V 2.0.1</a></li>
+ <li><a href="http://codeigniter.com/download_files/reactor/CodeIgniter_2.0.0.zip">CodeIgniter V 2.0.0</a></li>
<li><a href="http://codeigniter.com/download_files/CodeIgniter_1.7.3.zip">CodeIgniter V 1.7.3</a></li>
<li><a href="http://codeigniter.com/download_files/CodeIgniter_1.7.2.zip">CodeIgniter V 1.7.2</a></li>
<li><a href="http://codeigniter.com/download_files/CodeIgniter_1.7.1.zip">CodeIgniter V 1.7.1</a></li>
diff --git a/user_guide/installation/index.html b/user_guide/installation/index.html
index 8ba41313c..f62aadb5e 100644
--- a/user_guide/installation/index.html
+++ b/user_guide/installation/index.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -61,24 +61,24 @@ Installation Instructions
<ol>
<li>Unzip the package.</li>
-<li>Upload the CodeIgniter folders and files to your server. Normally the index.php file will be at your root.</li>
-<li>Open the <dfn>application/config/config.php</dfn> file with a text editor and set your base URL. If you intend to use encryption or sessions, set your encryption key.</li>
+<li>Upload the CodeIgniter folders and files to your server. Normally the index.php file will be at your root.</li>
+<li>Open the <dfn>application/config/config.php</dfn> file with a text editor and set your base URL. If you intend to use encryption or sessions, set your encryption key.</li>
<li>If you intend to use a database, open the <dfn>application/config/database.php</dfn> file with a text editor and set your database settings.</li>
</ol>
<p>If you wish to increase security by hiding the location of your CodeIgniter files you can rename the <dfn>system</dfn> and <dfn>application</dfn> folders
-to something more private. If you do rename them, you must open your main <kbd>index.php</kbd> file and set the <samp>$system_folder</samp> and <samp>$application_folder</samp>
+to something more private. If you do rename them, you must open your main <kbd>index.php</kbd> file and set the <samp>$system_folder</samp> and <samp>$application_folder</samp>
variables at the top of the file with the new name you've chosen.</p>
-<p>For the best security, both the <dfn>system</dfn> and any <dfn>application</dfn> folders should be placed above web root so that they are not directly accessible via a browser. By default, .htaccess files are included in each folder to help prevent direct access, but it is best to remove them from public access entirely in case the web server configuration changes or doesn't abide by the .htaccess.</p>
+<p>For the best security, both the <dfn>system</dfn> and any <dfn>application</dfn> folders should be placed above web root so that they are not directly accessible via a browser. By default, .htaccess files are included in each folder to help prevent direct access, but it is best to remove them from public access entirely in case the web server configuration changes or doesn't abide by the .htaccess.</p>
<p>After moving them, open your main <kdb>index.php</kbd> file and set the <samp>$system_folder</samp> and <samp>$application_folder</samp> variables, preferably with a full path, e.g. '<dfn>/www/MyUser/system</dfn>'.</p>
<p>
- One additional measure to take in production environments is to disable
- PHP error reporting and any other development-only functionality. In CodeIgniter,
- this can be done by setting the <kbd>ENVIRONMENT</kbd> constant, which is
- more fully described on the <a href="../general/security.html">security page</a>.
+ One additional measure to take in production environments is to disable
+ PHP error reporting and any other development-only functionality. In CodeIgniter,
+ this can be done by setting the <kbd>ENVIRONMENT</kbd> constant, which is
+ more fully described on the <a href="../general/security.html">security page</a>.
</p>
<p>That's it!</p>
diff --git a/user_guide/installation/troubleshooting.html b/user_guide/installation/troubleshooting.html
index c1c423a76..f99fc0a32 100644
--- a/user_guide/installation/troubleshooting.html
+++ b/user_guide/installation/troubleshooting.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -61,8 +61,8 @@ Trouble Shooting
does not support the PATH_INFO variable needed to serve search-engine friendly URLs.
As a first step, open your <dfn>application/config/config.php</dfn> file and look for the <kbd>URI Protocol</kbd>
-information. It will recommend that you try a couple alternate settings. If it still doesn't work after you've tried this you'll need
-to force CodeIgniter to add a question mark to your URLs. To do this open your <kbd>application/config/config.php</kbd> file and change this:</p>
+information. It will recommend that you try a couple alternate settings. If it still doesn't work after you've tried this you'll need
+to force CodeIgniter to add a question mark to your URLs. To do this open your <kbd>application/config/config.php</kbd> file and change this:</p>
<code>$config['index_page'] = "index.php";</code>
diff --git a/user_guide/installation/upgrade_120.html b/user_guide/installation/upgrade_120.html
index da49549a5..563c98c60 100644
--- a/user_guide/installation/upgrade_120.html
+++ b/user_guide/installation/upgrade_120.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
diff --git a/user_guide/installation/upgrade_130.html b/user_guide/installation/upgrade_130.html
index 759177612..e6bb9480e 100644
--- a/user_guide/installation/upgrade_130.html
+++ b/user_guide/installation/upgrade_130.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -57,7 +57,7 @@ Upgrading from 1.2 to 1.3
<h1>Upgrading from 1.2 to 1.3</h1>
-<p class="important"><strong>Note:</strong> The instructions on this page assume you are running version 1.2. If you
+<p class="important"><strong>Note:</strong> The instructions on this page assume you are running version 1.2. If you
have not upgraded to that version please do so first.</p>
@@ -72,8 +72,8 @@ with a static one.</p>
<p class="important"><strong>Note:</strong> If you have any custom developed files in these folders please make copies of them first.</p>
<ul>
-<li>application/<strong>models</strong>/&nbsp;&nbsp; (new for 1.3)</li>
-<li>codeigniter&nbsp;&nbsp; (new for 1.3)</li>
+<li>application/<strong>models</strong>/&nbsp;&nbsp; (new for 1.3)</li>
+<li>codeigniter&nbsp;&nbsp; (new for 1.3)</li>
<li>drivers</li>
<li>helpers</li>
<li>init</li>
@@ -109,7 +109,7 @@ replace this folder:</p>
<h2>Step 3: Update your index.php file</h2>
-<p>Please open your main <dfn>index.php</dfn> file (located at your root). At the very bottom of the file, change this:</p>
+<p>Please open your main <dfn>index.php</dfn> file (located at your root). At the very bottom of the file, change this:</p>
<code>require_once BASEPATH.'libraries/Front_controller'.EXT;</code>
diff --git a/user_guide/installation/upgrade_131.html b/user_guide/installation/upgrade_131.html
index a2f742532..a7025f2a7 100644
--- a/user_guide/installation/upgrade_131.html
+++ b/user_guide/installation/upgrade_131.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -57,7 +57,7 @@ Upgrading from 1.3 to 1.3.1
<h1>Upgrading from 1.3 to 1.3.1</h1>
-<p class="important"><strong>Note:</strong> The instructions on this page assume you are running version 1.3. If you
+<p class="important"><strong>Note:</strong> The instructions on this page assume you are running version 1.3. If you
have not upgraded to that version please do so first.</p>
<p>Before performing an update you should take your site offline by replacing the index.php file with a static one.</p>
diff --git a/user_guide/installation/upgrade_132.html b/user_guide/installation/upgrade_132.html
index e0e562231..3b71594dc 100644
--- a/user_guide/installation/upgrade_132.html
+++ b/user_guide/installation/upgrade_132.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -57,7 +57,7 @@ Upgrading from 1.3.1 to 1.3.2
<h1>Upgrading from 1.3.1 to 1.3.2</h1>
-<p class="important"><strong>Note:</strong> The instructions on this page assume you are running version 1.3.1. If you
+<p class="important"><strong>Note:</strong> The instructions on this page assume you are running version 1.3.1. If you
have not upgraded to that version please do so first.</p>
<p>Before performing an update you should take your site offline by replacing the index.php file with a static one.</p>
diff --git a/user_guide/installation/upgrade_133.html b/user_guide/installation/upgrade_133.html
index 1fb537a76..a81f67bf5 100644
--- a/user_guide/installation/upgrade_133.html
+++ b/user_guide/installation/upgrade_133.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -57,7 +57,7 @@ Upgrading from 1.3.2 to 1.3.3
<h1>Upgrading from 1.3.2 to 1.3.3</h1>
-<p class="important"><strong>Note:</strong> The instructions on this page assume you are running version 1.3.2. If you
+<p class="important"><strong>Note:</strong> The instructions on this page assume you are running version 1.3.2. If you
have not upgraded to that version please do so first.</p>
<p>Before performing an update you should take your site offline by replacing the index.php file with a static one.</p>
@@ -83,9 +83,9 @@ have not upgraded to that version please do so first.</p>
<p>If you are <strong>NOT</strong> using CodeIgniter's <a href="../general/models.html">Models</a> feature disregard this step.</p>
-<p>As of version 1.3.3, CodeIgniter does <strong>not</strong> connect automatically to your database when a model is loaded. This
-allows you greater flexibility in determining which databases you would like used with your models. If your application is not connecting
-to your database prior to a model being loaded you will have to update your code. There are several options for connecting,
+<p>As of version 1.3.3, CodeIgniter does <strong>not</strong> connect automatically to your database when a model is loaded. This
+allows you greater flexibility in determining which databases you would like used with your models. If your application is not connecting
+to your database prior to a model being loaded you will have to update your code. There are several options for connecting,
<a href="../general/models.html">as described here</a>.</p>
diff --git a/user_guide/installation/upgrade_140.html b/user_guide/installation/upgrade_140.html
index 9da635cf1..234e2f5b3 100644
--- a/user_guide/installation/upgrade_140.html
+++ b/user_guide/installation/upgrade_140.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -57,7 +57,7 @@ Upgrading from 1.3.3 to 1.4.0
<h1>Upgrading from 1.3.3 to 1.4.0</h1>
-<p class="important"><strong>Note:</strong> The instructions on this page assume you are running version 1.3.3. If you
+<p class="important"><strong>Note:</strong> The instructions on this page assume you are running version 1.3.3. If you
have not upgraded to that version please do so first.</p>
<p>Before performing an update you should take your site offline by replacing the index.php file with a static one.</p>
@@ -95,7 +95,7 @@ have not upgraded to that version please do so first.</p>
|--------------------------------------------------------------------------
|
| If you would like to use the "hooks" feature you must enable it by
-| setting this variable to TRUE (boolean). See the user guide for details.
+| setting this variable to TRUE (boolean). See the user guide for details.
|
*/
$config['enable_hooks'] = FALSE;
@@ -111,7 +111,7 @@ $config['enable_hooks'] = FALSE;
| get a warning message.
|
| As a security measure you are STRONGLY encouraged to restrict URLs to
-| as few characters as possible. By default only these are allowed: a-z 0-9~%.:_-
+| as few characters as possible. By default only these are allowed: a-z 0-9~%.:_-
|
| Leave blank to allow all characters -- but only if you are insane.
|
diff --git a/user_guide/installation/upgrade_141.html b/user_guide/installation/upgrade_141.html
index f1dad54f4..79e51e4ab 100644
--- a/user_guide/installation/upgrade_141.html
+++ b/user_guide/installation/upgrade_141.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -56,7 +56,7 @@ Upgrading from 1.4.0 to 1.4.1 </td>
<h1>Upgrading from 1.4.0 to 1.4.1</h1>
-<p class="important"><strong>Note:</strong> The instructions on this page assume you are running version 1.4.0. If you
+<p class="important"><strong>Note:</strong> The instructions on this page assume you are running version 1.4.0. If you
have not upgraded to that version please do so first.</p>
<p>Before performing an update you should take your site offline by replacing the index.php file with a static one.</p>
@@ -88,16 +88,16 @@ have not upgraded to that version please do so first.</p>
| Output Compression
|--------------------------------------------------------------------------
|
-| Enables Gzip output compression for faster page loads. When enabled,
+| Enables Gzip output compression for faster page loads. When enabled,
| the output class will test whether your server supports Gzip.
| Even if it does, however, not all browsers support compression
| so enable only if you are reasonably sure your visitors can handle it.
|
-| VERY IMPORTANT: If you are getting a blank page when compression is enabled it
+| VERY IMPORTANT: If you are getting a blank page when compression is enabled it
| means you are prematurely outputting something to your browser. It could
-| even be a line of whitespace at the end of one of your scripts. For
+| even be a line of whitespace at the end of one of your scripts. For
| compression to work, nothing can be sent before the output buffer is called
-| by the output class. Do not "echo" any values with compression enabled.
+| by the output class. Do not "echo" any values with compression enabled.
|
*/
$config['compress_output'] = FALSE;
diff --git a/user_guide/installation/upgrade_150.html b/user_guide/installation/upgrade_150.html
index dd5a90d7a..9cd0089c0 100644
--- a/user_guide/installation/upgrade_150.html
+++ b/user_guide/installation/upgrade_150.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -57,7 +57,7 @@ Upgrading from 1.4.1 to 1.5.0
<h1>Upgrading from 1.4.1 to 1.5.0</h1>
-<p class="important"><strong>Note:</strong> The instructions on this page assume you are running version 1.4.1. If you
+<p class="important"><strong>Note:</strong> The instructions on this page assume you are running version 1.4.1. If you
have not upgraded to that version please do so first.</p>
<p>Before performing an update you should take your site offline by replacing the index.php file with a static one.</p>
@@ -105,7 +105,7 @@ $db['default']['cachedir'] = '';
|--------------------------------------------------------------------------
|
| This item allows you to set the filename/classname prefix when extending
-| native libraries. For more information please see the user guide:
+| native libraries. For more information please see the user guide:
|
| http://codeigniter.com/user_guide/general/core_classes.html
| http://codeigniter.com/user_guide/general/creating_libraries.html
@@ -120,7 +120,7 @@ $config['subclass_prefix'] = 'MY_';
|
| If your PHP installation does not have short tag support enabled CI
| can rewrite the tags on-the-fly, enabling you to utilize that syntax
-| in your view files. Options are TRUE or FALSE (boolean)
+| in your view files. Options are TRUE or FALSE (boolean)
|
*/
$config['rewrite_short_tags'] = FALSE;
@@ -136,7 +136,7 @@ $config['rewrite_short_tags'] = FALSE;
|--------------------------------------------------------------------------
|
| If you would like errors or debug messages logged set this variable to
-| TRUE (boolean). Note: You must set the file permissions on the "logs" folder
+| TRUE (boolean). Note: You must set the file permissions on the "logs" folder
| such that it is writable.
|
*/
diff --git a/user_guide/installation/upgrade_152.html b/user_guide/installation/upgrade_152.html
index f548e259d..136e3090b 100644
--- a/user_guide/installation/upgrade_152.html
+++ b/user_guide/installation/upgrade_152.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -57,7 +57,7 @@ Upgrading from 1.5.0 to 1.5.2
<h1>Upgrading from 1.5.0 to 1.5.2</h1>
-<p class="important"><strong>Note:</strong> The instructions on this page assume you are running version 1.5.0 or 1.5.1. If you
+<p class="important"><strong>Note:</strong> The instructions on this page assume you are running version 1.5.0 or 1.5.1. If you
have not upgraded to that version please do so first.</p>
<p>Before performing an update you should take your site offline by replacing the index.php file with a static one.</p>
diff --git a/user_guide/installation/upgrade_153.html b/user_guide/installation/upgrade_153.html
index d76d8f173..fe6978aac 100644
--- a/user_guide/installation/upgrade_153.html
+++ b/user_guide/installation/upgrade_153.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
diff --git a/user_guide/installation/upgrade_154.html b/user_guide/installation/upgrade_154.html
index 4c534ffcb..e5086813d 100644
--- a/user_guide/installation/upgrade_154.html
+++ b/user_guide/installation/upgrade_154.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
diff --git a/user_guide/installation/upgrade_160.html b/user_guide/installation/upgrade_160.html
index 366826fb8..2adeff379 100644
--- a/user_guide/installation/upgrade_160.html
+++ b/user_guide/installation/upgrade_160.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -84,16 +84,16 @@ Upgrading from 1.5.4 to 1.6.0
<p>Add the following to application/config/autoload.php</p>
<p><code> /*<br />
| -------------------------------------------------------------------<br />
- | Auto-load Model files<br />
+ | Auto-load Model files<br />
| -------------------------------------------------------------------<br />
| Prototype:<br />
|<br />
- | $autoload['model'] = array('my_model');<br />
+ | $autoload['model'] = array('my_model');<br />
|<br />
*/<br />
<br />
$autoload['model'] = array();</code></p>
-<h2>Step 4: Add to your database.php </h2>
+<h2>Step 4: Add to your database.php </h2>
<p>Make the following changes to your application/config/database.php file:</p>
<p>Add the following variable above the database configuration options, with <dfn>$active_group</dfn></p>
<p><code>$active_record = TRUE;</code></p>
diff --git a/user_guide/installation/upgrade_161.html b/user_guide/installation/upgrade_161.html
index c809b63dc..2dc2de59e 100644
--- a/user_guide/installation/upgrade_161.html
+++ b/user_guide/installation/upgrade_161.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
diff --git a/user_guide/installation/upgrade_162.html b/user_guide/installation/upgrade_162.html
index f4792c2f8..0add80f8a 100644
--- a/user_guide/installation/upgrade_162.html
+++ b/user_guide/installation/upgrade_162.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
diff --git a/user_guide/installation/upgrade_163.html b/user_guide/installation/upgrade_163.html
index 915a7231d..73441397e 100644
--- a/user_guide/installation/upgrade_163.html
+++ b/user_guide/installation/upgrade_163.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
diff --git a/user_guide/installation/upgrade_170.html b/user_guide/installation/upgrade_170.html
index d286cf289..6fd92f52a 100644
--- a/user_guide/installation/upgrade_170.html
+++ b/user_guide/installation/upgrade_170.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -88,14 +88,14 @@ Here is an example of what this column might look like for MySQL:</p>
<code>ALTER TABLE `ci_sessions` ADD `user_data` text NOT NULL</code>
-<p>You'll find more information regarding the new Session functionality in the <a href="../libraries/sessions.html">Session class</a> page.</p>
+<p>You'll find more information regarding the new Session functionality in the <a href="../libraries/sessions.html">Session class</a> page.</p>
<h2>Step 3: Update your Validation Syntax</h2>
-<p>This is an <strong>optional</strong>, but recommended step, for people currently using the Validation class. CI 1.7 introduces a new <a href="../libraries/form_validation.html">Form Validation class</a>, which
-deprecates the old Validation library. We have left the old one in place so that existing applications that use it will not break, but you are encouraged to
-migrate to the new version as soon as possible. Please read the user guide carefully as the new library works a little differently, and has several new features.</p>
+<p>This is an <strong>optional</strong>, but recommended step, for people currently using the Validation class. CI 1.7 introduces a new <a href="../libraries/form_validation.html">Form Validation class</a>, which
+deprecates the old Validation library. We have left the old one in place so that existing applications that use it will not break, but you are encouraged to
+migrate to the new version as soon as possible. Please read the user guide carefully as the new library works a little differently, and has several new features.</p>
diff --git a/user_guide/installation/upgrade_171.html b/user_guide/installation/upgrade_171.html
index 6058232b9..baee208a8 100644
--- a/user_guide/installation/upgrade_171.html
+++ b/user_guide/installation/upgrade_171.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
diff --git a/user_guide/installation/upgrade_172.html b/user_guide/installation/upgrade_172.html
index b5c95b169..dbf0fb019 100644
--- a/user_guide/installation/upgrade_172.html
+++ b/user_guide/installation/upgrade_172.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
diff --git a/user_guide/installation/upgrade_200.html b/user_guide/installation/upgrade_200.html
index c4a588772..cd39d924d 100644
--- a/user_guide/installation/upgrade_200.html
+++ b/user_guide/installation/upgrade_200.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -69,8 +69,8 @@ Upgrading from 1.7.2 to 2.0.0
<h2>Step 2: Adjust get_dir_file_info() where necessary</h2>
-<p>Version 2.0.0 brings a non-backwards compatible change to <kbd>get_dir_file_info()</kbd> in the <a href="../helpers/file_helper.html">File Helper</a>. Non-backwards compatible changes are extremely rare
- in CodeIgniter, but this one we feel was warranted due to how easy it was to create serious server performance issues. If you <em>need</em>
+<p>Version 2.0.0 brings a non-backwards compatible change to <kbd>get_dir_file_info()</kbd> in the <a href="../helpers/file_helper.html">File Helper</a>. Non-backwards compatible changes are extremely rare
+ in CodeIgniter, but this one we feel was warranted due to how easy it was to create serious server performance issues. If you <em>need</em>
recursiveness where you are using this helper function, change such instances, setting the second parameter, <kbd>$top_level_only</kbd> to FALSE:</p>
<code>get_dir_file_info('/path/to/directory', <kbd>FALSE</kbd>);</code>
@@ -79,7 +79,7 @@ Upgrading from 1.7.2 to 2.0.0
<h2>Step 3: Convert your Plugins to Helpers</h2>
-<p>2.0.0 gets rid of the "Plugin" system as their functionality was identical to Helpers, but non-extensible. You will need to rename your plugin files from <var>filename_pi.php</var> to <var>filename_helper.php</var>, move them to your <kbd>helpers</kbd> folder, and change all instances of:
+<p>2.0.0 gets rid of the "Plugin" system as their functionality was identical to Helpers, but non-extensible. You will need to rename your plugin files from <var>filename_pi.php</var> to <var>filename_helper.php</var>, move them to your <kbd>helpers</kbd> folder, and change all instances of:
<code>$this->load->plugin('foo');</code>
@@ -94,7 +94,7 @@ to
<p class="important"><strong>Note:</strong> If your application does not use the Encryption library, does not store Encrypted data permanently, or is on an environment that does not support Mcrypt, you may skip this step.</p>
<p>The Encryption library has had a number of improvements, some for encryption strength and some for performance, that has an unavoidable consequence of
- making it no longer possible to decode encrypted data produced by the original version of this library. To help with the transition, a new method has
+ making it no longer possible to decode encrypted data produced by the original version of this library. To help with the transition, a new method has
been added, <kbd>encode_from_legacy()</kbd> that will decode the data with the original algorithm and return a re-encoded string using the improved methods.
This will enable you to easily replace stale encrypted data with fresh in your applications, either on the fly or en masse.</p>
@@ -104,7 +104,7 @@ to
<p>The compatibility helper has been removed from the CodeIgniter core. All methods in it should be natively available in supported PHP versions.</p>
<h2>Step 6: Update Class extension</h2>
-<p>All core classes are now prefixed with <kbd>CI_</kbd>. Update Models and Controllers to extend CI_Model and CI_Controller, respectively.</p>
+<p>All core classes are now prefixed with <kbd>CI_</kbd>. Update Models and Controllers to extend CI_Model and CI_Controller, respectively.</p>
<h2>Step 7: Update Parent Constructor calls</h2>
<p>All native CodeIgniter classes now use the PHP 5 <kbd>__construct()</kbd> convention. Please update extended libraries to call <kbd>parent::__construct()</kbd>.</p>
diff --git a/user_guide/installation/upgrade_201.html b/user_guide/installation/upgrade_201.html
index ec01b9b33..fe99cc0ce 100644
--- a/user_guide/installation/upgrade_201.html
+++ b/user_guide/installation/upgrade_201.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -66,10 +66,26 @@ Upgrading from 2.0.0 to 2.0.1
<p class="important"><strong>Note:</strong> If you have any custom developed files in these folders please make copies of them first.</p>
+
<h2>Step 2: Replace config/mimes.php</h2>
<p>This config file has been updated to contain more mime types, please copy it to <kbd>application/config/mimes.php</kbd>.</p>
+
+<h2>Step 3: Check for forms posting to default controller</h2>
+
+<p>
+ The default behavior for <kbd>form_open()</kbd> when called with no parameters used to be to post to the default controller, but it will now just leave an empty action="" meaning the form will submit to the current URL.
+ If submitting to the default controller was the expected behavior it will need to be changed from:
+</p>
+
+<code>echo form_open(); //&lt;form action="" method="post" accept-charset="utf-8"></code>
+
+<p>to use either a / or <kbd>base_url()</kbd>:</p>
+
+<code>echo form_open('/'); //&lt;form action="http://example.com/index.php/" method="post" accept-charset="utf-8"><br/>
+echo form_open(base_url()); //&lt;form action="http://example.com/" method="post" accept-charset="utf-8"></code>
+
</div>
<!-- END CONTENT -->
diff --git a/user_guide/installation/upgrade_202.html b/user_guide/installation/upgrade_202.html
new file mode 100644
index 000000000..93c537227
--- /dev/null
+++ b/user_guide/installation/upgrade_202.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Upgrading from 2.0.1 to 2.0.2 : CodeIgniter User Guide</title>
+
+<style type='text/css' media='all'>@import url('../userguide.css');</style>
+<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />
+
+<script type="text/javascript" src="../nav/nav.js"></script>
+<script type="text/javascript" src="../nav/prototype.lite.js"></script>
+<script type="text/javascript" src="../nav/moo.fx.js"></script>
+<script type="text/javascript" src="../nav/user_guide_menu.js"></script>
+
+<meta http-equiv='expires' content='-1' />
+<meta http-equiv= 'pragma' content='no-cache' />
+<meta name='robots' content='all' />
+<meta name='author' content='ExpressionEngine Dev Team' />
+<meta name='description' content='CodeIgniter User Guide' />
+
+</head>
+<body>
+
+<!-- START NAVIGATION -->
+<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
+<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
+<div id="masthead">
+<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
+<tr>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
+<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
+</tr>
+</table>
+</div>
+<!-- END NAVIGATION -->
+
+
+<!-- START BREADCRUMB -->
+<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
+<tr>
+<td id="breadcrumb">
+<a href="http://codeigniter.com/">CodeIgniter Home</a> &nbsp;&#8250;&nbsp;
+<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
+Upgrading from 2.0.1 to 2.0.2
+</td>
+<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.com/user_guide/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
+</tr>
+</table>
+<!-- END BREADCRUMB -->
+
+<br clear="all" />
+
+
+<!-- START CONTENT -->
+<div id="content">
+
+<h1>Upgrading from 2.0.1 to 2.0.2</h1>
+
+<p>Before performing an update you should take your site offline by replacing the index.php file with a static one.</p>
+
+
+<h2>Step 1: Update your CodeIgniter files</h2>
+
+<p>Replace all files and directories in your "system" folder and replace your index.php file. If any modifications were made to your index.php they will need to be made fresh in this new one.</p>
+
+<p class="important"><strong>Note:</strong> If you have any custom developed files in these folders please make copies of them first.</p>
+
+
+<h2>Step 2: Remove loading calls for the Security Library</h2>
+
+<p>Security has been moved to the core and is now always loaded automatically. Make sure you remove any loading calls as they will result in PHP errors.</p>
+
+
+<h2>Step 3: Move MY_Security</h2>
+
+<p>If you are overriding or extending the Security library, you will need to move it to <kbd>application/core</kbd>.</p>
+
+<p><samp>csrf_token_name</samp> and <samp>csrf_hash</samp> have changed to protected class properties. Please use <samp>security->get_csrf_hash()</samp> and <samp>security->get_csrf_token_name()</samp> to access those values.</p>
+
+</div>
+<!-- END CONTENT -->
+
+
+<div id="footer">
+<p>
+Previous Topic:&nbsp;&nbsp;<a href="index.html">Installation Instructions</a>
+&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+Next Topic:&nbsp;&nbsp;<a href="troubleshooting.html">Troubleshooting</a>
+</p>
+<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006 - 2011 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">EllisLab, Inc.</a></p>
+</div>
+
+</body>
+</html> \ No newline at end of file
diff --git a/user_guide/installation/upgrade_203.html b/user_guide/installation/upgrade_203.html
new file mode 100644
index 000000000..d1c9a940f
--- /dev/null
+++ b/user_guide/installation/upgrade_203.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Upgrading from 2.0.2 to 2.0.3 : CodeIgniter User Guide</title>
+
+<style type='text/css' media='all'>@import url('../userguide.css');</style>
+<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />
+
+<script type="text/javascript" src="../nav/nav.js"></script>
+<script type="text/javascript" src="../nav/prototype.lite.js"></script>
+<script type="text/javascript" src="../nav/moo.fx.js"></script>
+<script type="text/javascript" src="../nav/user_guide_menu.js"></script>
+
+<meta http-equiv='expires' content='-1' />
+<meta http-equiv= 'pragma' content='no-cache' />
+<meta name='robots' content='all' />
+<meta name='author' content='ExpressionEngine Dev Team' />
+<meta name='description' content='CodeIgniter User Guide' />
+
+</head>
+<body>
+
+<!-- START NAVIGATION -->
+<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
+<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
+<div id="masthead">
+<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
+<tr>
+<td><h1>CodeIgniter User Guide Version 2.0.3</h1></td>
+<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
+</tr>
+</table>
+</div>
+<!-- END NAVIGATION -->
+
+
+<!-- START BREADCRUMB -->
+<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
+<tr>
+<td id="breadcrumb">
+<a href="http://codeigniter.com/">CodeIgniter Home</a> &nbsp;&#8250;&nbsp;
+<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
+Upgrading from 2.0.2 to 2.0.3
+</td>
+<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.com/user_guide/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
+</tr>
+</table>
+<!-- END BREADCRUMB -->
+
+<br clear="all" />
+
+
+<!-- START CONTENT -->
+<div id="content">
+
+<h1>Upgrading from 2.0.2 to 2.0.3</h1>
+
+<p>Before performing an update you should take your site offline by replacing the index.php file with a static one.</p>
+
+
+<h2>Step 1: Update your CodeIgniter files</h2>
+
+<p>Replace all files and directories in your "system" folder and replace your index.php file. If any modifications were made to your index.php they will need to be made fresh in this new one.</p>
+
+<p class="important"><strong>Note:</strong> If you have any custom developed files in these folders please make copies of them first.</p>
+
+<h2>Step 2: Update CodeIgniter files</h2>
+
+<p>Replace the files and directories in your "system" folder with the new versions:</p>
+
+<h2>Step 3: Update your main index.php file</h2>
+
+<p>If you are running a stock <dfn>index.php</dfn> file simply replace your version with the new one.</p>
+
+<p>If your <dfn>index.php</dfn> file has internal modifications, please add your modifications to the new file and use it.</p>
+
+<h2>Step 4: Replace config/user_agents.php</h2>
+
+<p>This config file has been updated to contain more user agent types, please copy it to <kbd>application/config/user_agents.php</kbd>.</p>
+
+<h2>Step 5: Change references of the EXT constant to ".php"</h2>
+<p class="important"><strong>Note:</strong> The EXT Constant has been marked as deprecated, but has not been removed from the application. You are encouraged to make the changes sooner rather than later.</p>
+
+<h2>Step 6: Remove APPPATH.'third_party' from autoload.php</h2>
+
+<p>Open application/autoload.php, and look for the following:</p>
+
+<code>$autoload['packages'] = array(APPPATH.'third_party');</code>
+
+<p>If you have not chosen to load any additional packages, that line can be changed to:</p>
+<code>$autoload['packages'] = array();</code>
+
+<p>Which should provide for nominal performance gains if not autoloading packages.</p>
+
+<h2>Update Sessions Database Tables</h2>
+
+<p>If you are using database sessions with the CI Session Library, please update your <samp>ci_sessions</samp> database table as follows:</p>
+
+<code>
+ CREATE INDEX last_activity_idx ON ci_sessions(last_activity);
+ ALTER TABLE ci_sessions MODIFY user_agent VARCHAR(120);
+</code>
+
+
+
+
+</div>
+<!-- END CONTENT -->
+
+
+<div id="footer">
+<p>
+Previous Topic:&nbsp;&nbsp;<a href="index.html">Installation Instructions</a>
+&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+Next Topic:&nbsp;&nbsp;<a href="troubleshooting.html">Troubleshooting</a>
+</p>
+<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006 - 2011 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">EllisLab, Inc.</a></p>
+</div>
+
+</body>
+</html> \ No newline at end of file
diff --git a/user_guide/installation/upgrade_b11.html b/user_guide/installation/upgrade_b11.html
index dd0a9bcdb..d2fc20d18 100644
--- a/user_guide/installation/upgrade_b11.html
+++ b/user_guide/installation/upgrade_b11.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -61,7 +61,7 @@ Upgrading from Beta 1.0 to Beta 1.1
<h2>Step 1: Replace your index file</h2>
-<p>Replace your main <kbd>index.php</kbd> file with the new index.php file. Note: If you have renamed your "system" folder you will need to edit this info in the new file.</p>
+<p>Replace your main <kbd>index.php</kbd> file with the new index.php file. Note: If you have renamed your "system" folder you will need to edit this info in the new file.</p>
<h2>Step 2: Relocate your config folder</h2>
@@ -91,7 +91,7 @@ the following item to your version: <dfn>language/english/calendar_lang.php</dfn
<h2>Step 5: Edit your config file</h2>
-<p>The original <kbd>application/config/config.php</kbd> file has a typo in it Open the file and look for the items related to cookies:</p>
+<p>The original <kbd>application/config/config.php</kbd> file has a typo in it Open the file and look for the items related to cookies:</p>
<code>$conf['cookie_prefix'] = "";<br />
$conf['cookie_domain'] = "";<br />
@@ -112,7 +112,7 @@ $config['cookie_path'] = "/";</code>
|------------------------------------------------<br />
|<br />
| This item determines which server global <br />
-| should be used to retrieve the URI string. The <br />
+| should be used to retrieve the URI string. The <br />
| default setting of "auto" works for most servers.<br />
| If your links do not seem to work, try one of <br />
| the other delicious flavors:<br />
diff --git a/user_guide/installation/upgrading.html b/user_guide/installation/upgrading.html
index 073e7a7cc..014ffa3f3 100644
--- a/user_guide/installation/upgrading.html
+++ b/user_guide/installation/upgrading.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -60,6 +60,8 @@ Upgrading from a Previous Version
<p>Please read the upgrade notes corresponding to the version you are upgrading from.</p>
<ul>
+ <li><a href="upgrade_203.html">Upgrading from 2.0.2 to 2.0.3</a></li>
+ <li><a href="upgrade_202.html">Upgrading from 2.0.1 to 2.0.2</a></li>
<li><a href="upgrade_201.html">Upgrading from 2.0 to 2.0.1</a></li>
<li><a href="upgrade_200.html">Upgrading from 1.7.2 to 2.0</a></li>
<li><a href="upgrade_172.html">Upgrading from 1.7.1 to 1.7.2</a></li>
diff --git a/user_guide/libraries/benchmark.html b/user_guide/libraries/benchmark.html
index e8182d080..4dadf6b83 100644
--- a/user_guide/libraries/benchmark.html
+++ b/user_guide/libraries/benchmark.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -83,7 +83,7 @@ timing of the entire system execution to be shown.</p>
<a name="using"></a>
<h2>Using the Benchmark Class</h2>
-<p>The Benchmark class can be used within your <a href="../general/controllers.html">controllers</a>, <a href="../general/views.html">views</a>, or your <a href="../general/models.html">models</a>. The process for usage is this:</p>
+<p>The Benchmark class can be used within your <a href="../general/controllers.html">controllers</a>, <a href="../general/views.html">views</a>, or your <a href="../general/models.html">models</a>. The process for usage is this:</p>
<ol>
<li>Mark a start point</li>
@@ -101,7 +101,7 @@ $this->benchmark->mark('code_end');<br />
<br />
echo $this->benchmark->elapsed_time('code_start', 'code_end');</code>
-<p class="important"><strong>Note:</strong> The words "code_start" and "code_end" are arbitrary. They are simply words used to set two markers. You can
+<p class="important"><strong>Note:</strong> The words "code_start" and "code_end" are arbitrary. They are simply words used to set two markers. You can
use any words you want, and you can set multiple sets of markers. Consider this example:</p>
<code>$this->benchmark->mark('dog');<br />
@@ -154,8 +154,8 @@ is sent to the browser, simply place this in one of your view templates:</p>
<code>&lt;?php echo $this->benchmark->elapsed_time();?&gt;</code>
<p>You'll notice that it's the same function used in the examples above to calculate the time between two point, except you are
-<strong>not</strong> using any parameters. When the parameters are absent, CodeIgniter does not stop the benchmark until right before the final
-output is sent to the browser. It doesn't matter where you use the function call, the timer will continue to run until the very end.</p>
+<strong>not</strong> using any parameters. When the parameters are absent, CodeIgniter does not stop the benchmark until right before the final
+output is sent to the browser. It doesn't matter where you use the function call, the timer will continue to run until the very end.</p>
<p>An alternate way to show your elapsed time in your view files is to use this pseudo-variable, if you prefer not to use the pure PHP:</p>
<code>{elapsed_time}</code>
diff --git a/user_guide/libraries/caching.html b/user_guide/libraries/caching.html
index 3d3354436..7e1339217 100644
--- a/user_guide/libraries/caching.html
+++ b/user_guide/libraries/caching.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -58,7 +58,7 @@ Caching Driver
<h1>Caching Driver</h1>
-<p>CodeIgniter features wrappers around some of the most popular forms of fast and dynamic caching. All but file-based caching require specific server requirements, and a Fatal Exception will be thrown if server requirements are not met.</p>
+<p>CodeIgniter features wrappers around some of the most popular forms of fast and dynamic caching. All but file-based caching require specific server requirements, and a Fatal Exception will be thrown if server requirements are not met.</p>
<h2>Table of Contents</h2>
<ul>
@@ -97,7 +97,7 @@ echo $foo;
<h2>is_supported(<var>driver</var>['string'])</h2>
-<p>This function is automatically called when accessing drivers via <samp>$this->cache->get()</samp>. However, if the individual drivers are used, make sure to call this function to ensure the driver is supported in the hosting environment.</p>
+<p>This function is automatically called when accessing drivers via <samp>$this->cache->get()</samp>. However, if the individual drivers are used, make sure to call this function to ensure the driver is supported in the hosting environment.</p>
<code>
if ($this->cache->apc->is_supported())<br />
@@ -111,23 +111,23 @@ if ($this->cache->apc->is_supported())<br />
<h2>get(<var>id</var>['string'])</h2>
-<p>This function will attempt to fetch an item from the cache store. If the item does not exist, the function will return <samp>FALSE</samp>.</p>
+<p>This function will attempt to fetch an item from the cache store. If the item does not exist, the function will return <samp>FALSE</samp>.</p>
<code>$foo = $this->cache->get('my_cached_item');</code>
<h2>save(<var>id</var>['string'], <var>data</var>['mixed'], <var>ttl</var>['int'])</h2>
-<p>This function will save an item to the cache store. If saving fails, the function will return <samp>FALSE</samp>.</p>
+<p>This function will save an item to the cache store. If saving fails, the function will return <samp>FALSE</samp>.</p>
<p>The optional third parameter (Time To Live) defaults to 60 seconds.</p>
<code>$this->cache->save('cache_item_id', 'data_to_cache');</code>
<h2>delete(<var>id</var>['string'])</h2>
-<p>This function will delete a specific item from the cache store. If item deletion fails, the function will return <samp>FALSE</samp>.</p>
+<p>This function will delete a specific item from the cache store. If item deletion fails, the function will return <samp>FALSE</samp>.</p>
<code>$this->cache->delete('cache_item_id');</code>
<h2>clean()</h2>
-<p>This function will 'clean' the entire cache. If the deletion of the cache files fails, the function will return <samp>FALSE</samp>.</p>
+<p>This function will 'clean' the entire cache. If the deletion of the cache files fails, the function will return <samp>FALSE</samp>.</p>
<code>$this->cache->clean();</code>
@@ -154,7 +154,7 @@ if ($this->cache->apc->is_supported())<br />
<h2 id="file">File-based Caching</h2>
-<p>Unlike caching from the Output Class, the driver file-based caching allows for pieces of view files to be cached. Use this with care, and make sure to benchmark your application, as a point can come where disk I/O will negate positive gains by caching.</p>
+<p>Unlike caching from the Output Class, the driver file-based caching allows for pieces of view files to be cached. Use this with care, and make sure to benchmark your application, as a point can come where disk I/O will negate positive gains by caching.</p>
<p>All of the functions listed above can be accessed without passing a specific adapter to the driver loader as follows:</p>
<code>$this->load->driver('cache');<br />
@@ -172,7 +172,7 @@ if ($this->cache->apc->is_supported())<br />
<h2 id="dummy">Dummy Cache</h2>
-<p>This is a caching backend that will always 'miss.' It stores no data, but lets you keep your caching code in place in environments that don't support your chosen cache.</p>
+<p>This is a caching backend that will always 'miss.' It stores no data, but lets you keep your caching code in place in environments that don't support your chosen cache.</p>
</div>
<!-- END CONTENT -->
@@ -180,11 +180,11 @@ if ($this->cache->apc->is_supported())<br />
<div id="footer">
<p>
-Previous Topic:&nbsp;&nbsp;<a href="errors.html">Error Handling</a>
+Previous Topic:&nbsp;&nbsp;<a href="zip.html">Zip Encoding Class</a>
&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
-Next Topic:&nbsp;&nbsp;<a href="profiling.html">Profiling Your Application</a>
+Next Topic:&nbsp;&nbsp;<a href="../database/index.html">Database Class</a>
</p>
<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006 - 2011 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">EllisLab, Inc.</a></p>
</div>
diff --git a/user_guide/libraries/calendar.html b/user_guide/libraries/calendar.html
index 347b3d92b..06dfec71e 100644
--- a/user_guide/libraries/calendar.html
+++ b/user_guide/libraries/calendar.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -86,13 +86,13 @@ To show a calendar for a specific month and year you will pass this information
<br />
echo $this->calendar->generate(<kbd>2006</kbd>, <kbd>6</kbd>);</code>
-<p>The above code will generate a calendar showing the month of June in 2006. The first parameter specifies the year, the second parameter specifies the month.</p>
+<p>The above code will generate a calendar showing the month of June in 2006. The first parameter specifies the year, the second parameter specifies the month.</p>
<h2>Passing Data to your Calendar Cells</h2>
<p>To add data to your calendar cells involves creating an associative array in which the keys correspond to the days
-you wish to populate and the array value contains the data. The array is passed to the third parameter of the calendar
-generating function. Consider this example:</p>
+you wish to populate and the array value contains the data. The array is passed to the third parameter of the calendar
+generating function. Consider this example:</p>
<code>$this->load->library('calendar');<br />
<br />
@@ -114,7 +114,7 @@ how data passed to your cells is handled so you can pass different types of info
<h2>Setting Display Preferences</h2>
-<p>There are seven preferences you can set to control various aspects of the calendar. Preferences are set by passing an
+<p>There are seven preferences you can set to control various aspects of the calendar. Preferences are set by passing an
array of preferences in the second parameter of the loading function. Here is an example:</p>
@@ -129,7 +129,7 @@ $this->load->library('calendar', $prefs);<br />
<br />
echo $this->calendar->generate();</code>
-<p>The above code would start the calendar on saturday, use the "long" month heading, and the "short" day names. More information
+<p>The above code would start the calendar on saturday, use the "long" month heading, and the "short" day names. More information
regarding preferences below.</p>
@@ -180,7 +180,7 @@ echo $this->calendar->generate(<var>$this->uri->segment(3)</var>, <var>$this->ur
<ul>
<li>You must set the "show_next_prev" to TRUE.</li>
<li>You must supply the URL to the controller containing your calendar in the "next_prev_url" preference.</li>
-<li>You must supply the "year" and "month" to the calendar generating function via the URI segments where they appear (Note: The calendar class automatically adds the year/month to the base URL you provide.).</li>
+<li>You must supply the "year" and "month" to the calendar generating function via the URI segments where they appear (Note: The calendar class automatically adds the year/month to the base URL you provide.).</li>
</ul>
diff --git a/user_guide/libraries/cart.html b/user_guide/libraries/cart.html
index fe87a23f2..433bd5089 100644
--- a/user_guide/libraries/cart.html
+++ b/user_guide/libraries/cart.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -61,13 +61,13 @@ Shopping Cart Class
<p>The Cart Class permits items to be added to a session that stays active while a user is browsing your site.
These items can be retrieved and displayed in a standard "shopping cart" format, allowing the user to update the quantity or remove items from the cart.</p>
-<p>Please note that the Cart Class ONLY provides the core "cart" functionality. It does not provide shipping, credit card authorization, or other processing components.</p>
+<p>Please note that the Cart Class ONLY provides the core "cart" functionality. It does not provide shipping, credit card authorization, or other processing components.</p>
<h2>Initializing the Shopping Cart Class</h2>
<p><strong>Important:</strong> The Cart class utilizes CodeIgniter's
-<a href="sessions.html">Session Class</a> to save the cart information to a database, so before using the Cart class you must set up a database table
+<a href="sessions.html">Session Class</a> to save the cart information to a database, so before using the Cart class you must set up a database table
as indicated in the <a href="sessions.html">Session Documentation</a> , and set the session preferences in your <kbd>application/config/config.php</kbd> file to utilize a database.</p>
<p>To initialize the Shopping Cart Class in your controller constructor, use the <dfn>$this->load->library</dfn> function:</p>
@@ -106,19 +106,19 @@ It is intended to be used in cases where your product has options associated wit
<li><strong>qty</strong> - The quantity being purchased.
<li><strong>price</strong> - The price of the item.
<li><strong>name</strong> - The name of the item.
-<li><strong>options</strong> - Any additional attributes that are needed to identify the product. These must be passed via an array.
+<li><strong>options</strong> - Any additional attributes that are needed to identify the product. These must be passed via an array.
</ul>
-<p>In addition to the five indexes above, there are two reserved words: <dfn>rowid</dfn> and <dfn>subtotal</dfn>. These are used internally by the Cart class, so
+<p>In addition to the five indexes above, there are two reserved words: <dfn>rowid</dfn> and <dfn>subtotal</dfn>. These are used internally by the Cart class, so
please do NOT use those words as index names when inserting data into the cart.</p>
-<p>Your array may contain additional data. Anything you include in your array will be stored in the session. However, it is best to standardize your data among
+<p>Your array may contain additional data. Anything you include in your array will be stored in the session. However, it is best to standardize your data among
all your products in order to make displaying the information in a table easier.</p>
<h2>Adding Multiple Items to The Cart</h2>
-<p>By using a multi-dimensional array, as shown below, it is possible to add multiple products to the cart in one action. This is useful in cases where you wish to allow
+<p>By using a multi-dimensional array, as shown below, it is possible to add multiple products to the cart in one action. This is useful in cases where you wish to allow
people to select from among several items on the same page.</p>
@@ -170,10 +170,10 @@ $this->cart->insert($data);
&lt;table cellpadding="6" cellspacing="1" style="width:100%" border="0">
&lt;tr>
- &lt;th>QTY&lt;/th>
- &lt;th>Item Description&lt;/th>
- &lt;th style="text-align:right">Item Price&lt;/th>
- &lt;th style="text-align:right">Sub-Total&lt;/th>
+ &lt;th>QTY&lt;/th>
+ &lt;th>Item Description&lt;/th>
+ &lt;th style="text-align:right">Item Price&lt;/th>
+ &lt;th style="text-align:right">Sub-Total&lt;/th>
&lt;/tr>
&lt;?php $i = 1; ?>
@@ -183,8 +183,8 @@ $this->cart->insert($data);
&lt;?php echo form_hidden($i.'[rowid]', $items['rowid']); ?>
&lt;tr>
- &lt;td>&lt;?php echo form_input(array('name' => $i.'[qty]', 'value' => $items['qty'], 'maxlength' => '3', 'size' => '5')); ?>&lt;/td>
- &lt;td>
+ &lt;td>&lt;?php echo form_input(array('name' => $i.'[qty]', 'value' => $items['qty'], 'maxlength' => '3', 'size' => '5')); ?>&lt;/td>
+ &lt;td>
&lt;?php echo $items['name']; ?>
&lt;?php if ($this->cart->has_options($items['rowid']) == TRUE): ?>
@@ -199,9 +199,9 @@ $this->cart->insert($data);
&lt;?php endif; ?>
- &lt;/td>
- &lt;td style="text-align:right">&lt;?php echo $this->cart->format_number($items['price']); ?>&lt;/td>
- &lt;td style="text-align:right">$&lt;?php echo $this->cart->format_number($items['subtotal']); ?>&lt;/td>
+ &lt;/td>
+ &lt;td style="text-align:right">&lt;?php echo $this->cart->format_number($items['price']); ?>&lt;/td>
+ &lt;td style="text-align:right">$&lt;?php echo $this->cart->format_number($items['subtotal']); ?>&lt;/td>
&lt;/tr>
&lt;?php $i++; ?>
@@ -209,9 +209,9 @@ $this->cart->insert($data);
&lt;?php endforeach; ?>
&lt;tr>
- &lt;td colspan="2">&nbsp;&lt;/td>
- &lt;td class="right">&lt;strong>Total&lt;/strong>&lt;/td>
- &lt;td class="right">$&lt;?php echo $this->cart->format_number($this->cart->total()); ?>&lt;/td>
+ &lt;td colspan="2">&nbsp;&lt;/td>
+ &lt;td class="right">&lt;strong>Total&lt;/strong>&lt;/td>
+ &lt;td class="right">$&lt;?php echo $this->cart->format_number($this->cart->total()); ?>&lt;/td>
&lt;/tr>
&lt;/table>
@@ -265,11 +265,11 @@ $this->cart->update($data);
</code>
-<p><strong>What is a Row ID?</strong>&nbsp; The <kbd>row ID</kbd> is a unique identifier that is generated by the cart code when an item is added to the cart. The reason a
+<p><strong>What is a Row ID?</strong>&nbsp; The <kbd>row ID</kbd> is a unique identifier that is generated by the cart code when an item is added to the cart. The reason a
unique ID is created is so that identical products with different options can be managed by the cart.</p>
-<p>For example, let's say someone buys two identical t-shirts (same product ID), but in different sizes. The product ID (and other attributes) will be
-identical for both sizes because it's the same shirt. The only difference will be the size. The cart must therefore have a means of identifying this
+<p>For example, let's say someone buys two identical t-shirts (same product ID), but in different sizes. The product ID (and other attributes) will be
+identical for both sizes because it's the same shirt. The only difference will be the size. The cart must therefore have a means of identifying this
difference so that the two sizes of shirts can be managed independently. It does so by creating a unique "row ID" based on the product ID and any options associated with it.</p>
<p>In nearly all cases, updating the cart will be something the user does via the "view cart" page, so as a developer, it is unlikely that you will ever have to concern yourself
@@ -311,7 +311,7 @@ function when the update form is submitted. Please examine the construction of t
<h2>$this->cart->has_options(rowid);</h2>
-<p>Returns TRUE (boolean) if a particular row in the cart contains options. This function is designed to be used in a loop with <dfn>$this->cart->contents()</dfn>, since you must pass the <kbd>rowid</kbd> to this function, as shown in the <dfn>Displaying the Cart</dfn> example above.</p>
+<p>Returns TRUE (boolean) if a particular row in the cart contains options. This function is designed to be used in a loop with <dfn>$this->cart->contents()</dfn>, since you must pass the <kbd>rowid</kbd> to this function, as shown in the <dfn>Displaying the Cart</dfn> example above.</p>
<h2>$this->cart->product_options(rowid);</h2>
@@ -322,7 +322,7 @@ function when the update form is submitted. Please examine the construction of t
<h2>$this->cart->destroy();</h2>
-<p>Permits you to destroy the cart. This function will likely be called when you are finished processing the customer's order.</p>
+<p>Permits you to destroy the cart. This function will likely be called when you are finished processing the customer's order.</p>
diff --git a/user_guide/libraries/config.html b/user_guide/libraries/config.html
index af7bcfe61..c0192ca0a 100644
--- a/user_guide/libraries/config.html
+++ b/user_guide/libraries/config.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -58,7 +58,7 @@ Config Class
<h1>Config Class</h1>
-<p>The Config class provides a means to retrieve configuration preferences. These preferences can
+<p>The Config class provides a means to retrieve configuration preferences. These preferences can
come from the default config file (<samp>application/config/config.php</samp>) or from your own custom config files.</p>
<p class="important"><strong>Note:</strong> This class is initialized automatically by the system so there is no need to do it manually.</p>
@@ -66,7 +66,7 @@ come from the default config file (<samp>application/config/config.php</samp>) o
<h2>Anatomy of a Config File</h2>
-<p>By default, CodeIgniter has one primary config file, located at <samp>application/config/config.php</samp>. If you open the file using
+<p>By default, CodeIgniter has one primary config file, located at <samp>application/config/config.php</samp>. If you open the file using
your text editor you'll see that config items are stored in an array called <var>$config</var>.</p>
<p>You can add your own config items to
@@ -74,7 +74,7 @@ this file, or if you prefer to keep your configuration items separate (assuming
simply create your own file and save it in <dfn>config</dfn> folder.</p>
<p><strong>Note:</strong> If you do create your own config files use the same format as the primary one, storing your items in
-an array called <var>$config</var>. CodeIgniter will intelligently manage these files so there will be no conflict even though
+an array called <var>$config</var>. CodeIgniter will intelligently manage these files so there will be no conflict even though
the array has the same name (assuming an array index is not named the same as another).</p>
<h2>Loading a Config File</h2>
@@ -92,12 +92,12 @@ so you will only need to load a config file if you have created your own.</p>
<p>Where <var>filename</var> is the name of your config file, without the .php file extension.</p>
-<p>If you need to load multiple config files normally they will be merged into one master config array. Name collisions can occur, however, if
-you have identically named array indexes in different config files. To avoid collisions you can set the second parameter to <kbd>TRUE</kbd>
+<p>If you need to load multiple config files normally they will be merged into one master config array. Name collisions can occur, however, if
+you have identically named array indexes in different config files. To avoid collisions you can set the second parameter to <kbd>TRUE</kbd>
and each config file will be stored in an array index corresponding to the name of the config file. Example:</p>
<code>
-// Stored in an array with this prototype: $this->config['blog_settings'] = $config<br />
+// Stored in an array with this prototype: $this->config['blog_settings'] = $config<br />
$this->config->load('<var>blog_settings</var>', <kbd>TRUE</kbd>);</code>
<p>Please see the section entitled <dfn>Fetching Config Items</dfn> below to learn how to retrieve config items set this way.</p>
@@ -109,7 +109,7 @@ $this->config->load('<var>blog_settings</var>', <kbd>TRUE</kbd>);</code>
</li>
<li><strong>Auto-loading</strong>
-<p>If you find that you need a particular config file globally, you can have it loaded automatically by the system. To do this,
+<p>If you find that you need a particular config file globally, you can have it loaded automatically by the system. To do this,
open the <strong>autoload.php</strong> file, located at <samp>application/config/autoload.php</samp>, and add your config file as
indicated in the file.</p>
</li>
@@ -129,7 +129,7 @@ indicated in the file.</p>
<p>The function returns FALSE (boolean) if the item you are trying to fetch does not exist.</p>
<p>If you are using the second parameter of the <kbd>$this->config->load</kbd> function in order to assign your config items to a specific index
-you can retrieve it by specifying the index name in the second parameter of the <kbd>$this->config->item()</kbd> function. Example:</p>
+you can retrieve it by specifying the index name in the second parameter of the <kbd>$this->config->item()</kbd> function. Example:</p>
<code>
// Loads a config file named blog_settings.php and assigns it to an index named "blog_settings"<br />
@@ -154,32 +154,32 @@ $site_name = $blog_config['site_name'];</code>
<h2>Environments</h2>
<p>
- You may load different configuration files depending on the current environment.
- The <kbd>ENVIRONMENT</kbd> constant is defined in index.php, and is described
- in detail in the <a href="../general/environments.html">Handling Environments</a>
- section.
+ You may load different configuration files depending on the current environment.
+ The <kbd>ENVIRONMENT</kbd> constant is defined in index.php, and is described
+ in detail in the <a href="../general/environments.html">Handling Environments</a>
+ section.
</p>
<p>
- To create an environment-specific configuration file,
- create or copy a configuration file in application/config/{ENVIRONMENT}/{FILENAME}.php
+ To create an environment-specific configuration file,
+ create or copy a configuration file in application/config/{ENVIRONMENT}/{FILENAME}.php
</p>
<p>For example, to create a production-only config.php, you would:</p>
<ol>
- <li>Create the directory application/config/production/</li>
- <li>Copy your existing config.php into the above directory</li>
- <li>Edit application/config/production/config.php so it contains your production settings</li>
+ <li>Create the directory application/config/production/</li>
+ <li>Copy your existing config.php into the above directory</li>
+ <li>Edit application/config/production/config.php so it contains your production settings</li>
</ol>
<p>
- When you set the <kbd>ENVIRONMENT</kbd> constant to 'production', the settings
- for your new production-only config.php will be loaded.
+ When you set the <kbd>ENVIRONMENT</kbd> constant to 'production', the settings
+ for your new production-only config.php will be loaded.
</p>
<p>You can place the following configuration files in environment-specific folders:</p>
-
+
<ul>
<li>Default CodeIgniter configuration files</li>
<li>Your own custom configuration files</li>
diff --git a/user_guide/libraries/email.html b/user_guide/libraries/email.html
index a02d6587f..61e139187 100644
--- a/user_guide/libraries/email.html
+++ b/user_guide/libraries/email.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -78,7 +78,7 @@ Email Class
<p>Sending email is not only simple, but you can configure it on the fly or set your preferences in a config file.</p>
-<p>Here is a basic example demonstrating how you might send email. Note: This example assumes you are sending the email from one of your
+<p>Here is a basic example demonstrating how you might send email. Note: This example assumes you are sending the email from one of your
<a href="../general/controllers.html">controllers</a>.</p>
<code>$this->load->library('email');<br />
@@ -103,7 +103,7 @@ echo $this->email->print_debugger();</code>
<p>There are 17 different preferences available to tailor how your email messages are sent. You can either set them manually
as described here, or automatically via preferences stored in your config file, described below:</p>
-<p>Preferences are set by passing an array of preference values to the email <dfn>initialize</dfn> function. Here is an example of how you might set some preferences:</p>
+<p>Preferences are set by passing an array of preference values to the email <dfn>initialize</dfn> function. Here is an example of how you might set some preferences:</p>
<code>$config['protocol'] = 'sendmail';<br />
$config['mailpath'] = '/usr/sbin/sendmail';<br />
@@ -117,7 +117,7 @@ $this->email->initialize($config);</code>
><h3>Setting Email Preferences in a Config File</h3>
<p>If you prefer not to set preferences using the above method, you can instead put them into a config file.
-Simply create a new file called the <var>email.php</var>, add the <var>$config</var>
+Simply create a new file called the <var>email.php</var>, add the <var>$config</var>
array in that file. Then save the file at <var>config/email.php</var> and it will be used automatically. You
will NOT need to use the <dfn>$this->email->initialize()</dfn> function if you save your preferences in a config file.</p>
@@ -156,13 +156,13 @@ will NOT need to use the <dfn>$this->email->initialize()</dfn> function if you s
</tr><tr>
<td class="td"><strong>wrapchars</strong></td><td class="td">76</td><td class="td"> </td><td class="td">Character count to wrap at.</td>
</tr><tr>
-<td class="td"><strong>mailtype</strong></td><td class="td">text</td><td class="td">text or html</td><td class="td">Type of mail. If you send HTML email you must send it as a complete web page. Make sure you don't have any relative links or relative image paths otherwise they will not work.</td>
+<td class="td"><strong>mailtype</strong></td><td class="td">text</td><td class="td">text or html</td><td class="td">Type of mail. If you send HTML email you must send it as a complete web page. Make sure you don't have any relative links or relative image paths otherwise they will not work.</td>
</tr><tr>
<td class="td"><strong>charset</strong></td><td class="td">utf-8</td><td class="td"></td><td class="td">Character set (utf-8, iso-8859-1, etc.).</td>
</tr><tr>
-<td class="td"><strong>validate</strong></td><td class="td">FALSE</td><td class="td">TRUE or FALSE (boolean)</td><td class="td">Whether to validate the email address.</td>
+<td class="td"><strong>validate</strong></td><td class="td">FALSE</td><td class="td">TRUE or FALSE (boolean)</td><td class="td">Whether to validate the email address.</td>
</tr><tr>
-<td class="td"><strong>priority</strong></td><td class="td">3</td><td class="td">1, 2, 3, 4, 5</td><td class="td">Email Priority. 1 = highest. 5 = lowest. 3 = normal.</td>
+<td class="td"><strong>priority</strong></td><td class="td">3</td><td class="td">1, 2, 3, 4, 5</td><td class="td">Email Priority. 1 = highest. 5 = lowest. 3 = normal.</td>
</tr>
<tr>
<td class="td"><strong>crlf</strong></td>
@@ -188,12 +188,12 @@ will NOT need to use the <dfn>$this->email->initialize()</dfn> function if you s
<code>$this->email->from('<var>you@example.com</var>', '<var>Your Name</var>');</code>
<h3>$this->email->reply_to()</h3>
-<p>Sets the reply-to address. If the information is not provided the information in the "from" function is used. Example:</p>
+<p>Sets the reply-to address. If the information is not provided the information in the "from" function is used. Example:</p>
<code>$this->email->reply_to('<var>you@example.com</var>', '<var>Your Name</var>');</code>
<h3>$this->email->to()</h3>
-<p>Sets the email address(s) of the recipient(s). Can be a single email, a comma-delimited list or an array:</p>
+<p>Sets the email address(s) of the recipient(s). Can be a single email, a comma-delimited list or an array:</p>
<code>$this->email->to('<var>someone@example.com</var>');</code>
<code>$this->email->to('<var>one@example.com</var>, <var>two@example.com</var>, <var>three@example.com</var>');</code>
@@ -221,14 +221,14 @@ $this->email->to(<var>$list</var>);</code>
<p>Sets the alternative email message body:</p>
<code>$this->email->set_alt_message('<var>This is the alternative message</var>');</code>
-<p>This is an optional message string which can be used if you send HTML formatted email. It lets you specify an alternative
+<p>This is an optional message string which can be used if you send HTML formatted email. It lets you specify an alternative
message with no HTML formatting which is added to the header string for people who do not accept HTML email.
If you do not set your own message CodeIgniter will extract the message from your HTML email and strip the tags.</p>
<h3>$this->email->clear()</h3>
-<p>Initializes all the email variables to an empty state. This function is intended for use if you run the email sending function
+<p>Initializes all the email variables to an empty state. This function is intended for use if you run the email sending function
in a loop, permitting the data to be reset between cycles.</p>
<code>foreach ($list as $name => $address)<br />
{<br />
@@ -268,13 +268,13 @@ $this->email->send();</code>
<h3>$this->email->print_debugger()</h3>
-<p>Returns a string containing any server messages, the email headers, and the email messsage. Useful for debugging.</p>
+<p>Returns a string containing any server messages, the email headers, and the email messsage. Useful for debugging.</p>
<h2>Overriding Word Wrapping</h2>
<p>If you have word wrapping enabled (recommended to comply with RFC 822) and you have a very long link in your email it can
-get wrapped too, causing it to become un-clickable by the person receiving it. CodeIgniter lets you manually override
+get wrapped too, causing it to become un-clickable by the person receiving it. CodeIgniter lets you manually override
word wrapping within part of your message like this:</p>
<code>The text of your email that<br />
diff --git a/user_guide/libraries/encryption.html b/user_guide/libraries/encryption.html
index f6fb2b81d..96ad54bc0 100644
--- a/user_guide/libraries/encryption.html
+++ b/user_guide/libraries/encryption.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -58,9 +58,9 @@ Encryption Class
<h1>Encryption Class</h1>
-<p>The Encryption Class provides two-way data encryption. It uses a scheme that either compiles
+<p>The Encryption Class provides two-way data encryption. It uses a scheme that either compiles
the message using a randomly hashed bitwise XOR encoding scheme, or is encrypted using
-the Mcrypt library. If Mcrypt is not available on your server the encoded message will
+the Mcrypt library. If Mcrypt is not available on your server the encoded message will
still provide a reasonable degree of security for encrypted sessions or other such "light" purposes.
If Mcrypt is available, you'll be provided with a high degree of security appropriate for storage.</p>
@@ -72,7 +72,7 @@ In fact, the key you chose will provide the <strong>only</strong> means to decod
so not only must you choose the key carefully, you must never change it if you intend use it for persistent data.</p>
<p>It goes without saying that you should guard your key carefully.
-Should someone gain access to your key, the data will be easily decoded. If your server is not totally under your control
+Should someone gain access to your key, the data will be easily decoded. If your server is not totally under your control
it's impossible to ensure key security so you may want to think carefully before using it for anything
that requires high security, like storing credit card numbers.</p>
@@ -91,9 +91,9 @@ storage mechanism and pass the key dynamically when encoding/decoding.</p>
<h2>Message Length</h2>
<p>It's important for you to know that the encoded messages the encryption function generates will be approximately 2.6 times longer than the original
-message. For example, if you encrypt the string "my super secret data", which is 21 characters in length, you'll end up
+message. For example, if you encrypt the string "my super secret data", which is 21 characters in length, you'll end up
with an encoded string that is roughly 55 characters (we say "roughly" because the encoded string length increments in
-64 bit clusters, so it's not exactly linear). Keep this information in mind when selecting your data storage mechanism. Cookies,
+64 bit clusters, so it's not exactly linear). Keep this information in mind when selecting your data storage mechanism. Cookies,
for example, can only hold 4K of information.</p>
@@ -124,7 +124,7 @@ $encrypted_string = $this->encrypt->encode($msg, $key);</code>
<h2>$this->encrypt->decode()</h2>
-<p>Decrypts an encoded string. Example:</p>
+<p>Decrypts an encoded string. Example:</p>
<code>
$encrypted_string = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84';<br />
@@ -142,9 +142,9 @@ $encrypted_string = $this->encrypt->decode($msg, $key);</code>
<h2>$this->encrypt->set_cipher();</h2>
-<p>Permits you to set an Mcrypt cipher. By default it uses <samp>MCRYPT_RIJNDAEL_256</samp>. Example:</p>
+<p>Permits you to set an Mcrypt cipher. By default it uses <samp>MCRYPT_RIJNDAEL_256</samp>. Example:</p>
<code>$this->encrypt->set_cipher(MCRYPT_BLOWFISH);</code>
-<p>Please visit php.net for a list of <a href="http://php.net/mcrypt">available ciphers</a>.</p>
+<p>Please visit php.net for a list of <a href="http://php.net/mcrypt">available ciphers</a>.</p>
<p>If you'd like to manually test whether your server supports Mcrypt you can use:</p>
<code>echo ( ! function_exists('mcrypt_encrypt')) ? 'Nope' : 'Yup';</code>
@@ -152,13 +152,13 @@ $encrypted_string = $this->encrypt->decode($msg, $key);</code>
<h2>$this->encrypt->set_mode();</h2>
-<p>Permits you to set an Mcrypt mode. By default it uses <samp>MCRYPT_MODE_CBC</samp>. Example:</p>
+<p>Permits you to set an Mcrypt mode. By default it uses <samp>MCRYPT_MODE_CBC</samp>. Example:</p>
<code>$this->encrypt->set_mode(MCRYPT_MODE_CFB);</code>
-<p>Please visit php.net for a list of <a href="http://php.net/mcrypt">available modes</a>.</p>
+<p>Please visit php.net for a list of <a href="http://php.net/mcrypt">available modes</a>.</p>
<h2>$this->encrypt->sha1();</h2>
-<p>SHA1 encoding function. Provide a string and it will return a 160 bit one way hash. Note: SHA1, just like MD5 is non-decodable. Example:</p>
+<p>SHA1 encoding function. Provide a string and it will return a 160 bit one way hash. Note: SHA1, just like MD5 is non-decodable. Example:</p>
<code>$hash = $this->encrypt->sha1('Some string');</code>
<p>Many PHP installations have SHA1 support by default so if all you need is to encode a hash it's simpler to use the native
@@ -169,12 +169,12 @@ function:</p>
<p>If your server does not support SHA1 you can use the provided function.</p>
<h2 id="legacy">$this->encrypt->encode_from_legacy(<kbd>$orig_data</kbd>, <kbd>$legacy_mode</kbd> = MCRYPT_MODE_ECB, <kbd>$key</kbd> = '');</h2>
-<p>Enables you to re-encode data that was originally encrypted with CodeIgniter 1.x to be compatible with the Encryption library in CodeIgniter 2.x. It is only
- necessary to use this method if you have encrypted data stored permanently such as in a file or database and are on a server that supports Mcrypt. "Light" use encryption
- such as encrypted session data or transitory encrypted flashdata require no intervention on your part. However, existing encrypted Sessions will be
+<p>Enables you to re-encode data that was originally encrypted with CodeIgniter 1.x to be compatible with the Encryption library in CodeIgniter 2.x. It is only
+ necessary to use this method if you have encrypted data stored permanently such as in a file or database and are on a server that supports Mcrypt. "Light" use encryption
+ such as encrypted session data or transitory encrypted flashdata require no intervention on your part. However, existing encrypted Sessions will be
destroyed since data encrypted prior to 2.x will not be decoded.</p>
-<p class="important"><strong>Why only a method to re-encode the data instead of maintaining legacy methods for both encoding and decoding?</strong> The algorithms in
+<p class="important"><strong>Why only a method to re-encode the data instead of maintaining legacy methods for both encoding and decoding?</strong> The algorithms in
the Encryption library have improved in CodeIgniter 2.x both for performance and security, and we do not wish to encourage continued use of the older methods.
You can of course extend the Encryption library if you wish and replace the new methods with the old and retain seamless compatibility with CodeIgniter 1.x
encrypted data, but this a decision that a developer should make cautiously and deliberately, if at all.</p>
@@ -195,13 +195,13 @@ function:</p>
<tr>
<td class="td"><strong>$legacy_mode</strong></td>
<td class="td">MCRYPT_MODE_ECB</td>
- <td class="td">The Mcrypt mode that was used to generate the original encrypted data. CodeIgniter 1.x's default was MCRYPT_MODE_ECB, and it will
+ <td class="td">The Mcrypt mode that was used to generate the original encrypted data. CodeIgniter 1.x's default was MCRYPT_MODE_ECB, and it will
assume that to be the case unless overridden by this parameter.</td>
</tr>
<tr>
<td class="td"><strong>$key</strong></td>
<td class="td">n/a</td>
- <td class="td">The encryption key. This it typically specified in your config file as outlined above.</td>
+ <td class="td">The encryption key. This it typically specified in your config file as outlined above.</td>
</tr>
</table>
diff --git a/user_guide/libraries/file_uploading.html b/user_guide/libraries/file_uploading.html
index 5c3162819..a248267ae 100644
--- a/user_guide/libraries/file_uploading.html
+++ b/user_guide/libraries/file_uploading.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -58,7 +58,7 @@ File Uploading Class
<h1>File Uploading Class</h1>
-<p>CodeIgniter's File Uploading Class permits files to be uploaded. You can set various
+<p>CodeIgniter's File Uploading Class permits files to be uploaded. You can set various
preferences, restricting the type and size of the files.</p>
@@ -80,7 +80,7 @@ preferences, restricting the type and size of the files.</p>
-<p>Using a text editor, create a form called <dfn>upload_form.php</dfn>. In it, place this code and save it to your <samp>applications/views/</samp>
+<p>Using a text editor, create a form called <dfn>upload_form.php</dfn>. In it, place this code and save it to your <samp>applications/views/</samp>
folder:</p>
@@ -106,8 +106,8 @@ folder:</p>
&lt;/body>
&lt;/html></textarea>
-<p>You'll notice we are using a form helper to create the opening form tag. File uploads require a multipart form, so the helper
-creates the proper syntax for you. You'll also notice we have an $error variable. This is so we can show error messages in the event
+<p>You'll notice we are using a form helper to create the opening form tag. File uploads require a multipart form, so the helper
+creates the proper syntax for you. You'll also notice we have an $error variable. This is so we can show error messages in the event
the user does something wrong.</p>
@@ -138,7 +138,7 @@ In it, place this code and save it to your <samp>applications/views/</samp> fold
<h2>The Controller</h2>
-<p>Using a text editor, create a controller called <dfn>upload.php</dfn>. In it, place this code and save it to your <samp>applications/controllers/</samp>
+<p>Using a text editor, create a controller called <dfn>upload.php</dfn>. In it, place this code and save it to your <samp>applications/controllers/</samp>
folder:</p>
@@ -162,8 +162,8 @@ class Upload extends CI_Controller {
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
- $config['max_width'] = '1024';
- $config['max_height'] = '768';
+ $config['max_width'] = '1024';
+ $config['max_height'] = '768';
$this->load->library('upload', $config);
@@ -186,7 +186,7 @@ class Upload extends CI_Controller {
<h2>The Upload Folder</h2>
-<p>You'll need a destination folder for your uploaded images. Create a folder at the root of your CodeIgniter installation called
+<p>You'll need a destination folder for your uploaded images. Create a folder at the root of your CodeIgniter installation called
<dfn>uploads</dfn> and set its file permissions to 777.</p>
@@ -215,26 +215,26 @@ controller is correct it should work.</p>
<h2>Setting Preferences</h2>
-<p>Similar to other libraries, you'll control what is allowed to be upload based on your preferences. In the controller you
+<p>Similar to other libraries, you'll control what is allowed to be upload based on your preferences. In the controller you
built above you set the following preferences:</p>
<code>$config['upload_path'] = './uploads/';<br />
$config['allowed_types'] = 'gif|jpg|png';<br />
$config['max_size'] = '100';<br />
-$config['max_width'] = '1024';<br />
-$config['max_height'] = '768';<br />
+$config['max_width'] = '1024';<br />
+$config['max_height'] = '768';<br />
<br />
$this->load->library('upload', $config);<br /><br />
-// Alternately you can set preferences by calling the initialize function. Useful if you auto-load the class:<br />
+// Alternately you can set preferences by calling the initialize function. Useful if you auto-load the class:<br />
$this->upload->initialize($config);</code>
-<p>The above preferences should be fairly self-explanatory. Below is a table describing all available preferences.</p>
+<p>The above preferences should be fairly self-explanatory. Below is a table describing all available preferences.</p>
<h2>Preferences</h2>
-<p>The following preferences are available. The default value indicates what will be used if you do not specify that preference.</p>
+<p>The following preferences are available. The default value indicates what will be used if you do not specify that preference.</p>
<table cellpadding="0" cellspacing="1" border="0" style="width:100%" class="tableborder">
<tr>
@@ -248,14 +248,14 @@ $this->upload->initialize($config);</code>
<td class="td"><strong>upload_path</strong></td>
<td class="td">None</td>
<td class="td">None</td>
-<td class="td">The path to the folder where the upload should be placed. The folder must be writable and the path can be absolute or relative.</td>
+<td class="td">The path to the folder where the upload should be placed. The folder must be writable and the path can be absolute or relative.</td>
</tr>
<tr>
<td class="td"><strong>allowed_types</strong></td>
<td class="td">None</td>
<td class="td">None</td>
-<td class="td">The mime types corresponding to the types of files you allow to be uploaded. Usually the file extension can be used as the mime type. Separate multiple types with a pipe.</td>
+<td class="td">The mime types corresponding to the types of files you allow to be uploaded. Usually the file extension can be used as the mime type. Separate multiple types with a pipe.</td>
</tr>
@@ -264,7 +264,7 @@ $this->upload->initialize($config);</code>
<td class="td">None</td>
<td class="td">Desired file name</td>
<td class="td">
- <p>If set CodeIgniter will rename the uploaded file to this name. The extension provided in the file name must also be an allowed file type.</p>
+ <p>If set CodeIgniter will rename the uploaded file to this name. The extension provided in the file name must also be an allowed file type.</p>
</td>
</tr>
@@ -280,28 +280,28 @@ $this->upload->initialize($config);</code>
<td class="td"><strong>max_size</strong></td>
<td class="td">0</td>
<td class="td">None</td>
-<td class="td">The maximum size (in kilobytes) that the file can be. Set to zero for no limit. Note: Most PHP installations have their own limit, as specified in the php.ini file. Usually 2 MB (or 2048 KB) by default.</td>
+<td class="td">The maximum size (in kilobytes) that the file can be. Set to zero for no limit. Note: Most PHP installations have their own limit, as specified in the php.ini file. Usually 2 MB (or 2048 KB) by default.</td>
</tr>
<tr>
<td class="td"><strong>max_width</strong></td>
<td class="td">0</td>
<td class="td">None</td>
-<td class="td">The maximum width (in pixels) that the file can be. Set to zero for no limit.</td>
+<td class="td">The maximum width (in pixels) that the file can be. Set to zero for no limit.</td>
</tr>
<tr>
<td class="td"><strong>max_height</strong></td>
<td class="td">0</td>
<td class="td">None</td>
-<td class="td">The maximum height (in pixels) that the file can be. Set to zero for no limit.</td>
+<td class="td">The maximum height (in pixels) that the file can be. Set to zero for no limit.</td>
</tr>
<tr>
<td class="td"><strong>max_filename</strong></td>
<td class="td">0</td>
<td class="td">None</td>
-<td class="td">The maximum length that a file name can be. Set to zero for no limit.</td>
+<td class="td">The maximum length that a file name can be. Set to zero for no limit.</td>
</tr>
<tr>
@@ -323,7 +323,7 @@ $this->upload->initialize($config);</code>
<h2>Setting preferences in a config file</h2>
<p>If you prefer not to set preferences using the above method, you can instead put them into a config file.
-Simply create a new file called the <var>upload.php</var>, add the <var>$config</var>
+Simply create a new file called the <var>upload.php</var>, add the <var>$config</var>
array in that file. Then save the file in: <var>config/upload.php</var> and it will be used automatically. You
will NOT need to use the <dfn>$this->upload->initialize</dfn> function if you save your preferences in a config file.</p>
@@ -335,7 +335,7 @@ will NOT need to use the <dfn>$this->upload->initialize</dfn> function if you sa
<h2>$this->upload->do_upload()</h2>
-<p>Performs the upload based on the preferences you've set. Note: By default the upload routine expects the file to come from a form field
+<p>Performs the upload based on the preferences you've set. Note: By default the upload routine expects the file to come from a form field
called <dfn>userfile</dfn>, and the form must be a "multipart type:</p>
<code>&lt;form method="post" action="some_action" enctype="multipart/form-data" /></code>
@@ -349,11 +349,11 @@ $this->upload->do_upload($field_name)</code>
<h2>$this->upload->display_errors()</h2>
-<p>Retrieves any error messages if the <dfn>do_upload()</dfn> function returned false. The function does not echo automatically, it
+<p>Retrieves any error messages if the <dfn>do_upload()</dfn> function returned false. The function does not echo automatically, it
returns the data so you can assign it however you need.</p>
<h3>Formatting Errors</h3>
-<p>By default the above function wraps any errors within &lt;p> tags. You can set your own delimiters like this:</p>
+<p>By default the above function wraps any errors within &lt;p> tags. You can set your own delimiters like this:</p>
<code>$this->upload->display_errors('<var>&lt;p></var>', '<var>&lt;/p></var>');</code>
@@ -403,7 +403,7 @@ Here is the array prototype:</p>
<td class="td">The file name without the extension</td></tr>
<tr><td class="td"><strong>orig_name</strong></td>
-<td class="td">The original file name. This is only useful if you use the encrypted name option.</td></tr>
+<td class="td">The original file name. This is only useful if you use the encrypted name option.</td></tr>
<tr><td class="td"><strong>client_name</strong></td>
<td class="td">The file name as supplied by the client user agent, prior to any file name preparation or incrementing.</td></tr>
@@ -415,7 +415,7 @@ Here is the array prototype:</p>
<td class="td">The file size in kilobytes</td></tr>
<tr><td class="td"><strong>is_image</strong></td>
-<td class="td">Whether the file is an image or not. 1 = image. 0 = not.</td></tr>
+<td class="td">Whether the file is an image or not. 1 = image. 0 = not.</td></tr>
<tr><td class="td"><strong>image_width</strong></td>
<td class="td">Image width.</td></tr>
@@ -424,10 +424,10 @@ Here is the array prototype:</p>
<td class="td">Image height</td></tr>
<tr><td class="td"><strong>image_type</strong></td>
-<td class="td">Image type. Typically the file extension without the period.</td></tr>
+<td class="td">Image type. Typically the file extension without the period.</td></tr>
<tr><td class="td"><strong>image_size_str</strong></td>
-<td class="td">A string containing the width and height. Useful to put into an image tag.</td></tr>
+<td class="td">A string containing the width and height. Useful to put into an image tag.</td></tr>
</table>
diff --git a/user_guide/libraries/form_validation.html b/user_guide/libraries/form_validation.html
index d6120054b..54908d41d 100644
--- a/user_guide/libraries/form_validation.html
+++ b/user_guide/libraries/form_validation.html
@@ -27,7 +27,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -113,10 +113,10 @@ along with an error message describing the problem.</li>
<ol>
<li>Check for required data.</li>
<li>Verify that the data is of the correct type, and meets the correct criteria. For example, if a username is submitted
-it must be validated to contain only permitted characters. It must be of a minimum length,
+it must be validated to contain only permitted characters. It must be of a minimum length,
and not exceed a maximum length. The username can't be someone else's existing username, or perhaps even a reserved word. Etc.</li>
<li>Sanitize the data for security.</li>
-<li>Pre-format the data if needed (Does the data need to be trimmed? HTML encoded? Etc.)</li>
+<li>Pre-format the data if needed (Does the data need to be trimmed? HTML encoded? Etc.)</li>
<li>Prep the data for insertion in the database.</li>
</ol>
@@ -150,7 +150,7 @@ Form validation, while simple to create, is generally very messy and tedious to
<h2>The Form</h2>
-<p>Using a text editor, create a form called <dfn>myform.php</dfn>. In it, place this code and save it to your <samp>applications/views/</samp>
+<p>Using a text editor, create a form called <dfn>myform.php</dfn>. In it, place this code and save it to your <samp>applications/views/</samp>
folder:</p>
@@ -191,7 +191,7 @@ folder:</p>
<h2>The Success Page</h2>
-<p>Using a text editor, create a form called <dfn>formsuccess.php</dfn>. In it, place this code and save it to your <samp>applications/views/</samp>
+<p>Using a text editor, create a form called <dfn>formsuccess.php</dfn>. In it, place this code and save it to your <samp>applications/views/</samp>
folder:</p>
@@ -215,7 +215,7 @@ folder:</p>
<a name="thecontroller"></a>
<h2>The Controller</h2>
-<p>Using a text editor, create a controller called <dfn>form.php</dfn>. In it, place this code and save it to your <samp>applications/controllers/</samp>
+<p>Using a text editor, create a controller called <dfn>form.php</dfn>. In it, place this code and save it to your <samp>applications/controllers/</samp>
folder:</p>
@@ -248,10 +248,10 @@ class Form extends CI_Controller {
<code>example.com/index.php/<var>form</var>/</code>
-<p><dfn>If you submit the form you should simply see the form reload. That's because you haven't set up any validation
+<p><dfn>If you submit the form you should simply see the form reload. That's because you haven't set up any validation
rules yet.</dfn></p>
-<p><strong>Since you haven't told the Form Validation class to validate anything yet, it returns <kbd>FALSE</kbd> (boolean false) by default. The <samp>run()</samp>
+<p><strong>Since you haven't told the Form Validation class to validate anything yet, it returns <kbd>FALSE</kbd> (boolean false) by default. The <samp>run()</samp>
function only returns <kbd>TRUE</kbd> if it has successfully applied your rules without any of them failing.</strong></p>
@@ -263,8 +263,8 @@ function only returns <kbd>TRUE</kbd> if it has successfully applied your rules
<ol>
<li>It uses a <dfn>form helper</dfn> to create the form opening.
-Technically, this isn't necessary. You could create the form using standard HTML. However, the benefit of using the helper
-is that it generates the action URL for you, based on the URL in your config file. This makes your application more portable in the event your URLs change.</li>
+Technically, this isn't necessary. You could create the form using standard HTML. However, the benefit of using the helper
+is that it generates the action URL for you, based on the URL in your config file. This makes your application more portable in the event your URLs change.</li>
<li>At the top of the form you'll notice the following function call:
<code>&lt;?php echo validation_errors(); ?&gt;</code>
@@ -341,7 +341,7 @@ class Form extends CI_Controller {
If you submit the form with all the fields populated you'll see your success page.</dfn></p>
<p class="important"><strong>Note:</strong> The form fields are not yet being re-populated with the data when
-there is an error. We'll get to that shortly.</p>
+there is an error. We'll get to that shortly.</p>
@@ -387,7 +387,7 @@ $this->form_validation->set_rules($config);
<a name="cascadingrules"></a>
<h2>Cascading Rules</h2>
-<p>CodeIgniter lets you pipe multiple rules together. Let's try it. Change your rules in the third parameter of rule setting function, like this:</p>
+<p>CodeIgniter lets you pipe multiple rules together. Let's try it. Change your rules in the third parameter of rule setting function, like this:</p>
<code>
$this->form_validation->set_rules('username', 'Username', 'required|min_length[5]|max_length[12]');<br />
@@ -427,7 +427,7 @@ $this->form_validation->set_rules('email', 'Email', '<kbd>trim</kbd>|required|va
the "xss_clean" function, which removes malicious data.</p>
<p><strong>Any native PHP function that accepts one parameter can be used as a rule, like <dfn>htmlspecialchars</dfn>,
-<dfn>trim</dfn>, <dfn>MD5</dfn>, etc.</strong></p>
+<dfn>trim</dfn>, <dfn>MD5</dfn>, etc.</strong></p>
<p><strong>Note:</strong> You will generally want to use the prepping functions <strong>after</strong>
the validation rules so if there is an error, the original data will be shown in the form.</p>
@@ -438,7 +438,7 @@ the validation rules so if there is an error, the original data will be shown in
<a name="repopulatingform"></a>
<h2>Re-populating the form</h2>
-<p>Thus far we have only been dealing with errors. It's time to repopulate the form field with the submitted data. CodeIgniter offers several helper functions
+<p>Thus far we have only been dealing with errors. It's time to repopulate the form field with the submitted data. CodeIgniter offers several helper functions
that permit you to do this. The one you will use most commonly is:</p>
<code>set_value('field name')</code>
@@ -481,13 +481,13 @@ that permit you to do this. The one you will use most commonly is:</p>
</textarea>
-<p><dfn>Now reload your page and submit the form so that it triggers an error. Your form fields should now be re-populated</dfn></p>
+<p><dfn>Now reload your page and submit the form so that it triggers an error. Your form fields should now be re-populated</dfn></p>
<p class="important"><strong>Note:</strong> The <a href="#functionreference">Function Reference</a> section below contains functions that
permit you to re-populate &lt;select> menus, radio buttons, and checkboxes.</p>
-<p><strong>Important Note:</strong> If you use an array as the name of a form field, you must supply it as an array to the function. Example:</p>
+<p><strong>Important Note:</strong> If you use an array as the name of a form field, you must supply it as an array to the function. Example:</p>
<code>&lt;input type="text" name="<kbd>colors[]</kbd>" value="&lt;?php echo set_value('<kbd>colors[]</kbd>'); ?>" size="50" /></code>
@@ -500,16 +500,16 @@ permit you to re-populate &lt;select> menus, radio buttons, and checkboxes.</p>
<a name="callbacks"></a>
<h2>Callbacks: Your own Validation Functions</h2>
-<p>The validation system supports callbacks to your own validation functions. This permits you to extend the validation class
-to meet your needs. For example, if you need to run a database query to see if the user is choosing a unique username, you can
-create a callback function that does that. Let's create a example of this.</p>
+<p>The validation system supports callbacks to your own validation functions. This permits you to extend the validation class
+to meet your needs. For example, if you need to run a database query to see if the user is choosing a unique username, you can
+create a callback function that does that. Let's create a example of this.</p>
<p>In your controller, change the "username" rule to this:</p>
<code>$this->form_validation->set_rules('username', 'Username', '<kbd>callback_username_check</kbd>');</code>
-<p>Then add a new function called <dfn>username_check</dfn> to your controller. Here's how your controller should now look:</p>
+<p>Then add a new function called <dfn>username_check</dfn> to your controller. Here's how your controller should now look:</p>
<textarea class="textarea" style="width:100%" cols="50" rows="44">&lt;?php
@@ -553,12 +553,12 @@ class Form extends CI_Controller {
}
?></textarea>
-<p><dfn>Reload your form and submit it with the word "test" as the username. You can see that the form field data was passed to your
+<p><dfn>Reload your form and submit it with the word "test" as the username. You can see that the form field data was passed to your
callback function for you to process.</dfn></p>
<p><strong>To invoke a callback just put the function name in a rule, with "callback_" as the rule prefix.</strong></p>
-<p>You can also process the form data that is passed to your callback and return it. If your callback returns anything other than a boolean TRUE/FALSE
+<p>You can also process the form data that is passed to your callback and return it. If your callback returns anything other than a boolean TRUE/FALSE
it is assumed that the data is your newly processed form data.</p>
@@ -568,7 +568,7 @@ it is assumed that the data is your newly processed form data.</p>
<h2>Setting Error Messages</h2>
-<p>All of the native error messages are located in the following language file: <dfn>language/english/form_validation_lang.php</dfn></p>
+<p>All of the native error messages are located in the following language file: <dfn>language/english/form_validation_lang.php</dfn></p>
<p>To set your own custom message you can either edit that file, or use the following function:</p>
@@ -582,7 +582,7 @@ it is assumed that the data is your newly processed form data.</p>
<code>$this->form_validation->set_message('username_check')</code>
-<p>You can also override any error message found in the language file. For example, to change the message for the "required" rule you will do this:</p>
+<p>You can also override any error message found in the language file. For example, to change the message for the "required" rule you will do this:</p>
<code>$this->form_validation->set_message('required', 'Your custom message here');</code>
@@ -669,9 +669,9 @@ individually.</p>
&lt;input type="text" name="email" value="&lt;?php echo set_value('email'); ?>" size="50" />
</textarea>
-<p>If there are no errors, nothing will be shown. If there is an error, the message will appear.</p>
+<p>If there are no errors, nothing will be shown. If there is an error, the message will appear.</p>
-<p><strong>Important Note:</strong> If you use an array as the name of a form field, you must supply it as an array to the function. Example:</p>
+<p><strong>Important Note:</strong> If you use an array as the name of a form field, you must supply it as an array to the function. Example:</p>
<code>&lt;?php echo form_error('<kbd>options[size]</kbd>'); ?><br />
&lt;input type="text" name="<kbd>options[size]</kbd>" value="&lt;?php echo set_value("<kbd>options[size]</kbd>"); ?>" size="50" />
@@ -688,8 +688,8 @@ individually.</p>
<a name="savingtoconfig"></a>
<h1>Saving Sets of Validation Rules to a Config File</h1>
-<p>A nice feature of the Form Validation class is that it permits you to store all your validation rules for your entire application in a config file. You
-can organize these rules into "groups". These groups can either be loaded automatically when a matching controller/function is called, or
+<p>A nice feature of the Form Validation class is that it permits you to store all your validation rules for your entire application in a config file. You
+can organize these rules into "groups". These groups can either be loaded automatically when a matching controller/function is called, or
you can manually call each set as needed.</p>
<h3>How to save your rules</h3>
@@ -728,8 +728,8 @@ $config = array(<br />
<h3>Creating Sets of Rules</h3>
-<p>In order to organize your rules into "sets" requires that you place them into "sub arrays". Consider the following example, showing two sets of rules.
-We've arbitrarily called these two rules "signup" and "email". You can name your rules anything you want:</p>
+<p>In order to organize your rules into "sets" requires that you place them into "sub arrays". Consider the following example, showing two sets of rules.
+We've arbitrarily called these two rules "signup" and "email". You can name your rules anything you want:</p>
<code>$config = array(<br />
@@ -783,7 +783,7 @@ We've arbitrarily called these two rules "signup" and "email". You can name you
<h3>Calling a Specific Rule Group</h3>
-<p>In order to call a specific group you will pass its name to the <kbd>run()</kbd> function. For example, to call the <kbd>signup</kbd> rule you will do this:</p>
+<p>In order to call a specific group you will pass its name to the <kbd>run()</kbd> function. For example, to call the <kbd>signup</kbd> rule you will do this:</p>
<code>
if ($this->form_validation->run('<kbd>signup</kbd>') == FALSE)<br />
@@ -800,8 +800,8 @@ else<br />
<h3>Associating a Controller Function with a Rule Group</h3>
-<p>An alternate (and more automatic) method of calling a rule group is to name it according to the controller class/function you intend to use it with. For example, let's say you
-have a controller named <kbd>Member</kbd> and a function named <kbd>signup</kbd>. Here's what your class might look like:</p>
+<p>An alternate (and more automatic) method of calling a rule group is to name it according to the controller class/function you intend to use it with. For example, let's say you
+have a controller named <kbd>Member</kbd> and a function named <kbd>signup</kbd>. Here's what your class might look like:</p>
<code>
&lt;?php<br /><br />
@@ -860,7 +860,7 @@ class <kbd>Member</kbd> extends CI_Controller {<br />
<a name="arraysasfields"></a>
<h1>Using Arrays as Field Names</h1>
-<p>The Form Validation class supports the use of arrays as field names. Consider this example:</p>
+<p>The Form Validation class supports the use of arrays as field names. Consider this example:</p>
<code>&lt;input type="text" name="<kbd>options[]</kbd>" value="" size="50" /></code>
@@ -1147,13 +1147,13 @@ like <kbd>trim</kbd>, <kbd>htmlspecialchars</kbd>, <kbd>urldecode</kbd>, etc.</p
<h2>$this->form_validation->run();</h2>
-<p>Runs the validation routines. Returns boolean TRUE on success and FALSE on failure. You can optionally pass the name of the validation
+<p>Runs the validation routines. Returns boolean TRUE on success and FALSE on failure. You can optionally pass the name of the validation
group via the function, as described in: <a href="#savingtoconfig">Saving Groups of Validation Rules to a Config File</a>.</p>
<h2>$this->form_validation->set_message();</h2>
-<p>Permits you to set custom error messages. See <a href="#settingerrors">Setting Error Messages</a> above.</p>
+<p>Permits you to set custom error messages. See <a href="#settingerrors">Setting Error Messages</a> above.</p>
<p>&nbsp;</p>
@@ -1161,25 +1161,25 @@ group via the function, as described in: <a href="#savingtoconfig">Saving Groups
<a name="helperreference"></a>
<h1>Helper Reference</h1>
-<p>The following helper functions are available for use in the view files containing your forms. Note that these are procedural functions, so they
+<p>The following helper functions are available for use in the view files containing your forms. Note that these are procedural functions, so they
<strong>do not</strong> require you to prepend them with $this->form_validation.</p>
<h2>form_error()</h2>
-<p>Shows an individual error message associated with the field name supplied to the function. Example:</p>
+<p>Shows an individual error message associated with the field name supplied to the function. Example:</p>
<code>&lt;?php echo form_error('username'); ?></code>
-<p>The error delimiters can be optionally specified. See the <a href="#errordelimiters">Changing the Error Delimiters</a> section above.</p>
+<p>The error delimiters can be optionally specified. See the <a href="#errordelimiters">Changing the Error Delimiters</a> section above.</p>
<h2>validation_errors()</h2>
-<p>Shows all error messages as a string: Example:</p>
+<p>Shows all error messages as a string: Example:</p>
<code>&lt;?php echo validation_errors(); ?></code>
-<p>The error delimiters can be optionally specified. See the <a href="#errordelimiters">Changing the Error Delimiters</a> section above.</p>
+<p>The error delimiters can be optionally specified. See the <a href="#errordelimiters">Changing the Error Delimiters</a> section above.</p>
@@ -1194,7 +1194,7 @@ The second (optional) parameter allows you to set a default value for the form.
<h2>set_select()</h2>
-<p>If you use a <dfn>&lt;select></dfn> menu, this function permits you to display the menu item that was selected. The first parameter
+<p>If you use a <dfn>&lt;select></dfn> menu, this function permits you to display the menu item that was selected. The first parameter
must contain the name of the select menu, the second parameter must contain the value of
each item, and the third (optional) parameter lets you set an item as the default (use boolean TRUE/FALSE).</p>
@@ -1202,16 +1202,16 @@ each item, and the third (optional) parameter lets you set an item as the defaul
<code>
&lt;select name="myselect"><br />
-&lt;option value="one" <dfn>&lt;?php echo set_select('myselect', 'one', TRUE); ?></dfn> >One&lt;/option><br />
-&lt;option value="two" <dfn>&lt;?php echo set_select('myselect', 'two'); ?></dfn> >Two&lt;/option><br />
-&lt;option value="three" <dfn>&lt;?php echo set_select('myselect', 'three'); ?></dfn> >Three&lt;/option><br />
+&lt;option value="one" <dfn>&lt;?php echo set_select('myselect', 'one', TRUE); ?></dfn> >One&lt;/option><br />
+&lt;option value="two" <dfn>&lt;?php echo set_select('myselect', 'two'); ?></dfn> >Two&lt;/option><br />
+&lt;option value="three" <dfn>&lt;?php echo set_select('myselect', 'three'); ?></dfn> >Three&lt;/option><br />
&lt;/select>
</code>
<h2>set_checkbox()</h2>
-<p>Permits you to display a checkbox in the state it was submitted. The first parameter
+<p>Permits you to display a checkbox in the state it was submitted. The first parameter
must contain the name of the checkbox, the second parameter must contain its value, and the third (optional) parameter lets you set an item as the default (use boolean TRUE/FALSE). Example:</p>
<code>&lt;input type="checkbox" name="mycheck[]" value="1" <dfn>&lt;?php echo set_checkbox('mycheck[]', '1'); ?></dfn> /><br />
@@ -1222,8 +1222,8 @@ must contain the name of the checkbox, the second parameter must contain its val
<p>Permits you to display radio buttons in the state they were submitted. This function is identical to the <strong>set_checkbox()</strong> function above.</p>
-<code>&lt;input type="radio" name="myradio" value="1" <dfn>&lt;?php echo set_radio('myradio', '1', TRUE); ?></dfn> /><br />
-&lt;input type="radio" name="myradio" value="2" <dfn>&lt;?php echo set_radio('myradio', '2'); ?></dfn> /></code>
+<code>&lt;input type="radio" name="myradio" value="1" <dfn>&lt;?php echo set_radio('myradio', '1', TRUE); ?></dfn> /><br />
+&lt;input type="radio" name="myradio" value="2" <dfn>&lt;?php echo set_radio('myradio', '2'); ?></dfn> /></code>
diff --git a/user_guide/libraries/ftp.html b/user_guide/libraries/ftp.html
index e3c06741d..c318bc15a 100644
--- a/user_guide/libraries/ftp.html
+++ b/user_guide/libraries/ftp.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -59,7 +59,7 @@ FTP Class
<h1>FTP Class</h1>
<p>CodeIgniter's FTP Class permits files to be transfered to a remote server. Remote files can also be moved, renamed,
-and deleted. The FTP class also includes a "mirroring" function that permits an entire local directory to be recreated remotely via FTP.</p>
+and deleted. The FTP class also includes a "mirroring" function that permits an entire local directory to be recreated remotely via FTP.</p>
<p class="important"><strong>Note:</strong>&nbsp; SFTP and SSL FTP protocols are not supported, only standard FTP.</p>
@@ -74,7 +74,7 @@ and deleted. The FTP class also includes a "mirroring" function that permits an
<h2>Usage Examples</h2>
<p>In this example a connection is opened to the FTP server, and a local file is read and uploaded in ASCII mode. The
-file permissions are set to 755. Note: Setting permissions requires PHP 5.</p>
+file permissions are set to 755. Note: Setting permissions requires PHP 5.</p>
<code>
$this->load->library('ftp');<br />
@@ -157,26 +157,26 @@ $this->ftp->connect($config);<br />
<h3>Setting FTP Preferences in a Config File</h3>
<p>If you prefer you can store your FTP preferences in a config file.
-Simply create a new file called the <var>ftp.php</var>, add the <var>$config</var>
+Simply create a new file called the <var>ftp.php</var>, add the <var>$config</var>
array in that file. Then save the file at <var>config/ftp.php</var> and it will be used automatically.</p>
<h3>Available connection options:</h3>
<ul>
-<li><strong>hostname</strong> - the FTP hostname. Usually something like:&nbsp; <dfn>ftp.example.com</dfn></li>
+<li><strong>hostname</strong> - the FTP hostname. Usually something like:&nbsp; <dfn>ftp.example.com</dfn></li>
<li><strong>username</strong> - the FTP username.</li>
<li><strong>password</strong> - the FTP password.</li>
<li><strong>port</strong> - The port number. Set to <dfn>21</dfn> by default.</li>
<li><strong>debug</strong> - <kbd>TRUE/FALSE</kbd> (boolean). Whether to enable debugging to display error messages.</li>
-<li><strong>passive</strong> - <kbd>TRUE/FALSE</kbd> (boolean). Whether to use passive mode. Passive is set automatically by default.</li>
+<li><strong>passive</strong> - <kbd>TRUE/FALSE</kbd> (boolean). Whether to use passive mode. Passive is set automatically by default.</li>
</ul>
<h2>$this->ftp->upload()</h2>
-<p>Uploads a file to your server. You must supply the local path and the remote path, and you can optionally set the mode and permissions.
+<p>Uploads a file to your server. You must supply the local path and the remote path, and you can optionally set the mode and permissions.
Example:</p>
@@ -190,7 +190,7 @@ Example:</p>
<h2>$this->ftp->download()</h2>
-<p>Downloads a file from your server. You must supply the remote path and the local path, and you can optionally set the mode.
+<p>Downloads a file from your server. You must supply the remote path and the local path, and you can optionally set the mode.
Example:</p>
<code>$this->ftp->download('/public_html/myfile.html', '/local/path/to/myfile.html', 'ascii');</code>
@@ -202,7 +202,7 @@ Example:</p>
<h2>$this->ftp->rename()</h2>
-<p>Permits you to rename a file. Supply the source file name/path and the new file name/path.</p>
+<p>Permits you to rename a file. Supply the source file name/path and the new file name/path.</p>
<code>
// Renames green.html to blue.html<br />
@@ -210,7 +210,7 @@ $this->ftp->rename('/public_html/foo/green.html', '/public_html/foo/blue.html');
</code>
<h2>$this->ftp->move()</h2>
-<p>Lets you move a file. Supply the source and destination paths:</p>
+<p>Lets you move a file. Supply the source and destination paths:</p>
<code>
// Moves blog.html from "joe" to "fred"<br />
@@ -221,7 +221,7 @@ $this->ftp->move('/public_html/joe/blog.html', '/public_html/fred/blog.html');
<h2>$this->ftp->delete_file()</h2>
-<p>Lets you delete a file. Supply the source path with the file name.</p>
+<p>Lets you delete a file. Supply the source path with the file name.</p>
<code>
$this->ftp->delete_file('/public_html/joe/blog.html');
@@ -229,10 +229,10 @@ $this->ftp->delete_file('/public_html/joe/blog.html');
<h2>$this->ftp->delete_dir()</h2>
-<p>Lets you delete a directory and everything it contains. Supply the source path to the directory with a trailing slash.</p>
+<p>Lets you delete a directory and everything it contains. Supply the source path to the directory with a trailing slash.</p>
-<p class="important"><strong>Important</strong>&nbsp; Be VERY careful with this function. It will recursively delete
-<b>everything</b> within the supplied path, including sub-folders and all files. Make absolutely sure your path is correct.
+<p class="important"><strong>Important</strong>&nbsp; Be VERY careful with this function. It will recursively delete
+<b>everything</b> within the supplied path, including sub-folders and all files. Make absolutely sure your path is correct.
Try using the <kbd>list_files()</kbd> function first to verify that your path is correct.</p>
<code>
@@ -242,7 +242,7 @@ $this->ftp->delete_dir('/public_html/path/to/folder/');
<h2>$this->ftp->list_files()</h2>
-<p>Permits you to retrieve a list of files on your server returned as an <dfn>array</dfn>. You must supply
+<p>Permits you to retrieve a list of files on your server returned as an <dfn>array</dfn>. You must supply
the path to the desired directory.</p>
<code>
@@ -255,7 +255,7 @@ print_r($list);
<h2>$this->ftp->mirror()</h2>
<p>Recursively reads a local folder and everything it contains (including sub-folders) and creates a
-mirror via FTP based on it. Whatever the directory structure of the original file path will be recreated on the server.
+mirror via FTP based on it. Whatever the directory structure of the original file path will be recreated on the server.
You must supply a source path and a destination path:</p>
<code>
@@ -266,7 +266,7 @@ $this->ftp->mirror('/path/to/myfolder/', '/public_html/myfolder/');
<h2>$this->ftp->mkdir()</h2>
-<p>Lets you create a directory on your server. Supply the path ending in the folder name you wish to create, with a trailing slash.
+<p>Lets you create a directory on your server. Supply the path ending in the folder name you wish to create, with a trailing slash.
Permissions can be set by passed an <kbd>octal</kbd> value in the second parameter (if you are running PHP 5).</p>
<code>
@@ -277,7 +277,7 @@ $this->ftp->mkdir('/public_html/foo/bar/', DIR_WRITE_MODE);
<h2>$this->ftp->chmod()</h2>
-<p>Permits you to set file permissions. Supply the path to the file or folder you wish to alter permissions on:</p>
+<p>Permits you to set file permissions. Supply the path to the file or folder you wish to alter permissions on:</p>
<code>
// Chmod "bar" to 777<br />
@@ -288,7 +288,7 @@ $this->ftp->chmod('/public_html/foo/bar/', DIR_WRITE_MODE);
<h2>$this->ftp->close();</h2>
-<p>Closes the connection to your server. It's recommended that you use this when you are finished uploading.</p>
+<p>Closes the connection to your server. It's recommended that you use this when you are finished uploading.</p>
diff --git a/user_guide/libraries/image_lib.html b/user_guide/libraries/image_lib.html
index 0f023cff1..e6d38fc96 100644
--- a/user_guide/libraries/image_lib.html
+++ b/user_guide/libraries/image_lib.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -68,11 +68,11 @@ Image Manipulation Class
<li>Image Watermarking</li>
</ul>
-<p>All three major image libraries are supported: GD/GD2, NetPBM, and ImageMagick</p>
+<p>All three major image libraries are supported: GD/GD2, NetPBM, and ImageMagick</p>
<p class="important"><strong>Note:</strong> Watermarking is only available using the GD/GD2 library.
In addition, even though other libraries are supported, GD is required in
-order for the script to calculate the image properties. The image processing, however, will be performed with the
+order for the script to calculate the image properties. The image processing, however, will be performed with the
library you specify.</p>
@@ -82,14 +82,14 @@ library you specify.</p>
using the <dfn>$this->load-&gt;library</dfn> function:</p>
<code>$this->load->library('image_lib');</code>
-<p>Once the library is loaded it will be ready for use. The image library object you will use to call all functions is: <dfn>$this->image_lib</dfn></p>
+<p>Once the library is loaded it will be ready for use. The image library object you will use to call all functions is: <dfn>$this->image_lib</dfn></p>
<h2>Processing an Image</h2>
<p>Regardless of the type of processing you would like to perform (resizing, cropping, rotation, or watermarking), the general process is
identical. You will set some preferences corresponding to the action you intend to perform, then
-call one of four available processing functions. For example, to create an image thumbnail you'll do this:</p>
+call one of four available processing functions. For example, to create an image thumbnail you'll do this:</p>
<code>$config['image_library'] = 'gd2';<br />
$config['source_image'] = '/path/to/image/mypic.jpg';<br />
@@ -106,7 +106,7 @@ $this->image_lib->resize();</code>
<p>The above code tells the <dfn>image_resize</dfn> function to look for an image called <em>mypic.jpg</em>
located in the <dfn>source_image</dfn> folder, then create a thumbnail that is 75 X 50 pixels using the GD2 <dfn>image_library</dfn>.
Since the <dfn>maintain_ratio</dfn> option is enabled, the thumb will be as close to the target <dfn>width</dfn> and
-<dfn>height</dfn> as possible while preserving the original aspect ratio. The thumbnail will be called <em>mypic_thumb.jpg</em>
+<dfn>height</dfn> as possible while preserving the original aspect ratio. The thumbnail will be called <em>mypic_thumb.jpg</em>
</p>
<p class="important"><strong>Note:</strong> In order for the image class to be allowed to do any processing, the
@@ -126,7 +126,7 @@ folder containing the image files must have write permissions.</p>
<li>$this-&gt;image_lib-&gt;clear()</li>
</ul>
-<p>These functions return boolean TRUE upon success and FALSE for failure. If they fail you can retrieve the
+<p>These functions return boolean TRUE upon success and FALSE for failure. If they fail you can retrieve the
error message using this function:</p>
<code>echo $this->image_lib->display_errors();</code>
@@ -138,7 +138,7 @@ error message using this function:</p>
&nbsp;&nbsp;&nbsp;&nbsp;echo $this->image_lib->display_errors();<br />
}</code>
-<p>Note: You can optionally specify the HTML formatting to be applied to the errors, by submitting the opening/closing
+<p>Note: You can optionally specify the HTML formatting to be applied to the errors, by submitting the opening/closing
tags in the function, like this:</p>
<code>$this->image_lib->display_errors('<var>&lt;p></var>', '<var>&lt;/p></var>');</code>
@@ -146,11 +146,11 @@ tags in the function, like this:</p>
<h2>Preferences</h2>
-<p>The preferences described below allow you to tailor the image processing to suit your needs.</p>
+<p>The preferences described below allow you to tailor the image processing to suit your needs.</p>
<p>Note that not all preferences are available for every
-function. For example, the x/y axis preferences are only available for image cropping. Likewise, the width and height
-preferences have no effect on cropping. The "availability" column indicates which functions support a given preference.</p>
+function. For example, the x/y axis preferences are only available for image cropping. Likewise, the width and height
+preferences have no effect on cropping. The "availability" column indicates which functions support a given preference.</p>
<p>Availability Legend:</p>
@@ -187,7 +187,7 @@ preferences have no effect on cropping. The "availability" column indicates whi
<td class="td"><strong>library_path</strong></td>
<td class="td">None</td>
<td class="td">None</td>
-<td class="td">Sets the server path to your ImageMagick or NetPBM library. If you use either of those libraries you must supply the path.</td>
+<td class="td">Sets the server path to your ImageMagick or NetPBM library. If you use either of those libraries you must supply the path.</td>
<td class="td">R, C, X</td>
</tr>
@@ -195,7 +195,7 @@ preferences have no effect on cropping. The "availability" column indicates whi
<td class="td"><strong>source_image</strong></td>
<td class="td">None</td>
<td class="td">None</td>
-<td class="td">Sets the source image name/path. The path must be a relative or absolute server path, not a URL.</td>
+<td class="td">Sets the source image name/path. The path must be a relative or absolute server path, not a URL.</td>
<td class="td">R, C, S, W</td>
</tr>
@@ -203,7 +203,7 @@ preferences have no effect on cropping. The "availability" column indicates whi
<td class="td"><strong>dynamic_output</strong></td>
<td class="td">FALSE</td>
<td class="td">TRUE/FALSE (boolean)</td>
-<td class="td">Determines whether the new image file should be written to disk or generated dynamically. Note: If you choose the dynamic setting, only one image can be shown at a time, and it can't be positioned on the page. It simply outputs the raw image dynamically to your browser, along with image headers.</td>
+<td class="td">Determines whether the new image file should be written to disk or generated dynamically. Note: If you choose the dynamic setting, only one image can be shown at a time, and it can't be positioned on the page. It simply outputs the raw image dynamically to your browser, along with image headers.</td>
<td class="td">R, C, X, W</td>
</tr>
@@ -221,7 +221,7 @@ preferences have no effect on cropping. The "availability" column indicates whi
<td class="td"><strong>new_image</strong></td>
<td class="td">None</td>
<td class="td">None</td>
-<td class="td">Sets the destination image name/path. You'll use this preference when creating an image copy. The path must be a relative or absolute server path, not a URL.</td>
+<td class="td">Sets the destination image name/path. You'll use this preference when creating an image copy. The path must be a relative or absolute server path, not a URL.</td>
<td class="td">R, C, X, W</td>
</tr>
@@ -253,7 +253,7 @@ preferences have no effect on cropping. The "availability" column indicates whi
<td class="td"><strong>thumb_marker</strong></td>
<td class="td">_thumb</td>
<td class="td">None</td>
-<td class="td">Specifies the thumbnail indicator. It will be inserted just before the file extension, so mypic.jpg would become mypic_thumb.jpg</td>
+<td class="td">Specifies the thumbnail indicator. It will be inserted just before the file extension, so mypic.jpg would become mypic_thumb.jpg</td>
<td class="td">R</td>
</tr>
@@ -281,7 +281,7 @@ preferences have no effect on cropping. The "availability" column indicates whi
<td class="td"><strong>rotation_angle</strong></td>
<td class="td">None</td>
<td class="td">90, 180, 270, vrt, hor</td>
-<td class="td">Specifies the angle of rotation when rotating images. Note that PHP rotates counter-clockwise, so a 90 degree rotation to the right must be specified as 270.</td>
+<td class="td">Specifies the angle of rotation when rotating images. Note that PHP rotates counter-clockwise, so a 90 degree rotation to the right must be specified as 270.</td>
<td class="td">X</td>
</tr>
@@ -306,7 +306,7 @@ preferences have no effect on cropping. The "availability" column indicates whi
<h2>Setting preferences in a config file</h2>
<p>If you prefer not to set preferences using the above method, you can instead put them into a config file.
-Simply create a new file called <var>image_lib.php</var>, add the <var>$config</var>
+Simply create a new file called <var>image_lib.php</var>, add the <var>$config</var>
array in that file. Then save the file in: <var>config/image_lib.php</var> and it will be used automatically. You
will NOT need to use the <dfn>$this->image_lib->initialize</dfn> function if you save your preferences in a config file.</p>
@@ -319,7 +319,7 @@ or create a thumbnail image.</p>
<p>For practical purposes there is no difference between creating a copy and creating
a thumbnail except a thumb will have the thumbnail marker as part of the name (ie, mypic_thumb.jpg).</p>
-<p>All preferences listed in the table above are available for this function except these three: rotation_angle, x_axis, and y_axis.</p>
+<p>All preferences listed in the table above are available for this function except these three: rotation_angle, x_axis, and y_axis.</p>
<h3>Creating a Thumbnail</h3>
@@ -358,7 +358,7 @@ preferences for the X and Y axis (in pixels) specifying where to crop, like this
<code>$config['x_axis'] = '100';<br />
$config['y_axis'] = '40';</code>
-<p>All preferences listed in the table above are available for this function except these: rotation_angle, width, height, create_thumb, new_image.</p>
+<p>All preferences listed in the table above are available for this function except these: rotation_angle, width, height, create_thumb, new_image.</p>
<p>Here's an example showing how you might crop an image:</p>
@@ -378,8 +378,8 @@ if ( ! $this->image_lib->crop())<br />
<p>Note: Without a visual interface it is difficult to crop images, so this function is not very useful
-unless you intend to build such an interface. That's exactly what we did using for the photo
-gallery module in ExpressionEngine, the CMS we develop. We added a JavaScript UI that lets the cropping
+unless you intend to build such an interface. That's exactly what we did using for the photo
+gallery module in ExpressionEngine, the CMS we develop. We added a JavaScript UI that lets the cropping
area be selected.</p>
<h2>$this->image_lib->rotate()</h2>
@@ -443,7 +443,7 @@ containing your watermark over the source image.</li>
<p>Just as with the other functions (resizing, cropping, and rotating) the general process for watermarking
involves setting the preferences corresponding to the action you intend to perform, then
-calling the watermark function. Here is an example:</p>
+calling the watermark function. Here is an example:</p>
<code>
$config['source_image'] = '/path/to/image/mypic.jpg';<br />
@@ -452,9 +452,9 @@ $config['wm_type'] = 'text';<br />
$config['wm_font_path'] = './system/fonts/texb.ttf';<br />
$config['wm_font_size'] = '16';<br />
$config['wm_font_color'] = 'ffffff';<br />
-$config['wm_vrt_alignment'] = 'bottom';<br />
-$config['wm_hor_alignment'] = 'center';<br />
-$config['wm_padding'] = '20';<br />
+$config['wm_vrt_alignment'] = 'bottom';<br />
+$config['wm_hor_alignment'] = 'center';<br />
+$config['wm_padding'] = '20';<br />
<br />
$this->image_lib->initialize($config);
<br />
@@ -462,7 +462,7 @@ $this->image_lib->initialize($config);
$this->image_lib->watermark();</code>
-<p>The above example will use a 16 pixel True Type font to create the text "Copyright 2006 - John Doe". The watermark
+<p>The above example will use a 16 pixel True Type font to create the text "Copyright 2006 - John Doe". The watermark
will be positioned at the bottom/center of the image, 20 pixels from the bottom of the image.</p>
<p class="important"><strong>Note:</strong> In order for the image class to be allowed to do any processing, the image file must have &quot;write&quot; file permissions. For example, 777.</p>
@@ -491,14 +491,14 @@ will be positioned at the bottom/center of the image, 20 pixels from the bottom
<td class="td"><strong>source_image</strong></td>
<td class="td">None</td>
<td class="td">None</td>
-<td class="td">Sets the source image name/path. The path must be a relative or absolute server path, not a URL.</td>
+<td class="td">Sets the source image name/path. The path must be a relative or absolute server path, not a URL.</td>
</tr>
<tr>
<td class="td"><strong>dynamic_output</strong></td>
<td class="td">FALSE</td>
<td class="td">TRUE/FALSE (boolean)</td>
-<td class="td">Determines whether the new image file should be written to disk or generated dynamically. Note: If you choose the dynamic setting, only one image can be shown at a time, and it can't be positioned on the page. It simply outputs the raw image dynamically to your browser, along with image headers.</td>
+<td class="td">Determines whether the new image file should be written to disk or generated dynamically. Note: If you choose the dynamic setting, only one image can be shown at a time, and it can't be positioned on the page. It simply outputs the raw image dynamically to your browser, along with image headers.</td>
</tr>
<tr>
@@ -563,28 +563,28 @@ will be positioned at the bottom/center of the image, 20 pixels from the bottom
<td class="td"><strong>wm_text</strong></td>
<td class="td">None</td>
<td class="td">None</td>
-<td class="td">The text you would like shown as the watermark. Typically this will be a copyright notice.</td>
+<td class="td">The text you would like shown as the watermark. Typically this will be a copyright notice.</td>
</tr>
<tr>
<td class="td"><strong>wm_font_path</strong></td>
<td class="td">None</td>
<td class="td">None</td>
-<td class="td">The server path to the True Type Font you would like to use. If you do not use this option, the native GD font will be used.</td>
+<td class="td">The server path to the True Type Font you would like to use. If you do not use this option, the native GD font will be used.</td>
</tr>
<tr>
<td class="td"><strong>wm_font_size</strong></td>
<td class="td">16</td>
<td class="td">None</td>
-<td class="td">The size of the text. Note: If you are not using the True Type option above, the number is set using a range of 1 - 5. Otherwise, you can use any valid pixel size for the font you're using.</td>
+<td class="td">The size of the text. Note: If you are not using the True Type option above, the number is set using a range of 1 - 5. Otherwise, you can use any valid pixel size for the font you're using.</td>
</tr>
<tr>
<td class="td"><strong>wm_font_color</strong></td>
<td class="td">ffffff</td>
<td class="td">None</td>
-<td class="td">The font color, specified in hex. Note, you must use the full 6 character hex value (ie, 993300), rather than the three character abbreviated version (ie fff).</td>
+<td class="td">The font color, specified in hex. Note, you must use the full 6 character hex value (ie, 993300), rather than the three character abbreviated version (ie fff).</td>
</tr>
diff --git a/user_guide/libraries/input.html b/user_guide/libraries/input.html
index 2bc9b3b8c..6070b6c48 100644
--- a/user_guide/libraries/input.html
+++ b/user_guide/libraries/input.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -70,20 +70,20 @@ Input Class
<h2>Security Filtering</h2>
-<p>The security filtering function is called automatically when a new <a href="../general/controllers.html">controller</a> is invoked. It does the following:</p>
+<p>The security filtering function is called automatically when a new <a href="../general/controllers.html">controller</a> is invoked. It does the following:</p>
<ul>
-<li>Destroys the global GET array. Since CodeIgniter does not utilize GET strings, there is no reason to allow it.</li>
+<li>Destroys the global GET array. Since CodeIgniter does not utilize GET strings, there is no reason to allow it.</li>
<li>Destroys all global variables in the event register_globals is turned on.</li>
<li>Filters the POST/COOKIE array keys, permitting only alpha-numeric (and a few other) characters.</li>
-<li>Provides XSS (Cross-site Scripting Hacks) filtering. This can be enabled globally, or upon request.</li>
+<li>Provides XSS (Cross-site Scripting Hacks) filtering. This can be enabled globally, or upon request.</li>
<li>Standardizes newline characters to \n</li>
</ul>
<h2>XSS Filtering</h2>
-<p>The Input class has the ability to filter input automatically to prevent cross-site scripting attacks. If you want the filter to run automatically every time it encounters POST or COOKIE data you can enable it by opening your
+<p>The Input class has the ability to filter input automatically to prevent cross-site scripting attacks. If you want the filter to run automatically every time it encounters POST or COOKIE data you can enable it by opening your
<kbd>application/config/config.php</kbd> file and setting this:</p>
<code>$config['global_xss_filtering'] = TRUE;</code>
@@ -93,9 +93,9 @@ Input Class
<h2>Using POST, COOKIE, or SERVER Data</h2>
-<p>CodeIgniter comes with three helper functions that let you fetch POST, COOKIE or SERVER items. The main advantage of using the provided
+<p>CodeIgniter comes with three helper functions that let you fetch POST, COOKIE or SERVER items. The main advantage of using the provided
functions rather than fetching an item directly ($_POST['something']) is that the functions will check to see if the item is set and
-return false (boolean) if not. This lets you conveniently use data without having to test whether an item exists first.
+return false (boolean) if not. This lets you conveniently use data without having to test whether an item exists first.
In other words, normally you might do something like this:</p>
<code>
@@ -128,7 +128,7 @@ else<br />
<p>The function returns FALSE (boolean) if the item you are attempting to retrieve does not exist.</p>
-<p>The second optional parameter lets you run the data through the XSS filter. It's enabled by setting the second parameter to boolean TRUE;</p>
+<p>The second optional parameter lets you run the data through the XSS filter. It's enabled by setting the second parameter to boolean TRUE;</p>
<code>$this->input->post('some_data', TRUE);</code>
@@ -179,7 +179,7 @@ else<br />
<h2>$this->input->set_cookie()</h2>
-<p>Sets a cookie containing the values you specify. There are two ways to pass information to this function so that a cookie can be set:
+<p>Sets a cookie containing the values you specify. There are two ways to pass information to this function so that a cookie can be set:
Array Method, and Discrete Parameters:</p>
<h4>Array Method</h4>
@@ -203,10 +203,10 @@ $this->input->set_cookie($cookie);
<p>Only the name and value are required. To delete a cookie set it with the expiration blank.</p>
-<p>The expiration is set in <strong>seconds</strong>, which will be added to the current time. Do not include the time, but rather only the
-number of seconds from <em>now</em> that you wish the cookie to be valid. If the expiration is set to
+<p>The expiration is set in <strong>seconds</strong>, which will be added to the current time. Do not include the time, but rather only the
+number of seconds from <em>now</em> that you wish the cookie to be valid. If the expiration is set to
zero the cookie will only last as long as the browser is open.</p>
-<p>For site-wide cookies regardless of how your site is requested, add your URL to the <strong>domain</strong> starting with a period, like this: .your-domain.com</p>
+<p>For site-wide cookies regardless of how your site is requested, add your URL to the <strong>domain</strong> starting with a period, like this: .your-domain.com</p>
<p>The path is usually not needed since the function sets a root path.</p>
<p>The prefix is only needed if you need to avoid name collisions with other identically named cookies for your server.</p>
<p>The secure boolean is only needed if you want to make it a secure cookie by setting it to TRUE.</p>
@@ -217,27 +217,27 @@ zero the cookie will only last as long as the browser is open.</p>
<code>$this->input->set_cookie($name, $value, $expire, $domain, $path, $prefix, $secure);</code>
-<h2>$this->input->get_cookie()</h2>
+<h2>$this->input->cookie()</h2>
-<p>Lets you fetch a cookie. The first parameter will contain the name of the cookie you are looking for (including any prefixes):</p>
+<p>Lets you fetch a cookie. The first parameter will contain the name of the cookie you are looking for (including any prefixes):</p>
-<code>get_cookie('some_cookie');</code>
+<code>cookie('some_cookie');</code>
<p>The function returns FALSE (boolean) if the item you are attempting to retrieve does not exist.</p>
-<p>The second optional parameter lets you run the data through the XSS filter. It's enabled by setting the second parameter to boolean TRUE;</p>
+<p>The second optional parameter lets you run the data through the XSS filter. It's enabled by setting the second parameter to boolean TRUE;</p>
-<p><code>get_cookie('some_cookie', TRUE);</code></p>
+<p><code>cookie('some_cookie', TRUE);</code></p>
<h2>$this->input->ip_address()</h2>
-<p>Returns the IP address for the current user. If the IP address is not valid, the function will return an IP of: 0.0.0.0</p>
+<p>Returns the IP address for the current user. If the IP address is not valid, the function will return an IP of: 0.0.0.0</p>
<code>echo $this->input->ip_address();</code>
<h2>$this->input->valid_ip(<var>$ip</var>)</h2>
-<p>Takes an IP address as input and returns TRUE or FALSE (boolean) if it is valid or not. Note: The $this->input->ip_address() function above
+<p>Takes an IP address as input and returns TRUE or FALSE (boolean) if it is valid or not. Note: The $this->input->ip_address() function above
validates the IP automatically.</p>
<code>if ( ! $this-&gt;input-&gt;valid_ip($ip))<br />
@@ -256,7 +256,7 @@ else<br />
<p>See the <a href="user_agent.html">User Agent Class</a> for methods which extract information from the user agent string.</p>
<h2>$this->input->request_headers()</h2>
-<p>Useful if running in a non-Apache environment where <a href="http://php.net/apache_request_headers">apache_request_headers()</a> will not be supported. Returns an array of headers.</p>
+<p>Useful if running in a non-Apache environment where <a href="http://php.net/apache_request_headers">apache_request_headers()</a> will not be supported. Returns an array of headers.</p>
<code>$headers = $this->input->request_headers();</code>
@@ -269,7 +269,11 @@ else<br />
<h2>$this->input->is_ajax_request()</h2>
<p>Checks to see if the <var>HTTP_X_REQUESTED_WITH</var> server header has been set, and returns a boolean response.</p>
-<code>$this->input->is_ajax_request()</code>
+
+<h2>$this->input->is_cli_request()</h2>
+<p>Checks to see if the <var>STDIN</var> constant is set, which is a failsafe way to see if PHP is being run on the command line.</p>
+
+<code>$this->input->is_cli_request()</code>
</div>
diff --git a/user_guide/libraries/javascript.html b/user_guide/libraries/javascript.html
index 4cd751f09..5929cbec9 100644
--- a/user_guide/libraries/javascript.html
+++ b/user_guide/libraries/javascript.html
@@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
-<title>CodeIgniter User Guide : JavaScript Class</title>
+<title>JavaScript Class : CodeIgniter User Guide</title>
<style type='text/css' media='all'>@import url('../userguide.css');</style>
<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -65,11 +65,11 @@ JavaScript Driver
<code>$this-&gt;load-&gt;library('javascript');</code>
-<p>The Javascript class also accepts parameters, <dfn>js_library_driver (string) default 'jquery'</dfn> and <dfn>autoload (bool) default TRUE</dfn>. You may override the defaults if you wish by sending an associative array:</p>
+<p>The Javascript class also accepts parameters, <dfn>js_library_driver (string) default 'jquery'</dfn> and <dfn>autoload (bool) default TRUE</dfn>. You may override the defaults if you wish by sending an associative array:</p>
<code>$this-&gt;load-&gt;library('javascript', array('js_library_driver' =&gt; 'scripto', 'autoload' =&gt; FALSE));</code>
-<p>Again, presently only 'jquery' is available. You may wish to set <dfn>autoload</dfn> to FALSE, though, if you do not want the jQuery library to automatically include a script tag for the main jQuery script file. This is useful if you are loading it from a location outside of CodeIgniter, or already have the script tag in your markup.</p>
+<p>Again, presently only 'jquery' is available. You may wish to set <dfn>autoload</dfn> to FALSE, though, if you do not want the jQuery library to automatically include a script tag for the main jQuery script file. This is useful if you are loading it from a location outside of CodeIgniter, or already have the script tag in your markup.</p>
<p>Once loaded, the jQuery library object will be available using: <dfn>$this-&gt;javascript</dfn></p>
<h2>Setup and Configuration</h2>
@@ -93,7 +93,7 @@ JavaScript Driver
<code>$this-&gt;load-&gt;library('jquery');</code>
-<p>You may send an optional parameter to determine whether or not a script tag for the main jQuery file will be automatically included when loading the library. It will be created by default. To prevent this, load the library as follows:</p>
+<p>You may send an optional parameter to determine whether or not a script tag for the main jQuery file will be automatically included when loading the library. It will be created by default. To prevent this, load the library as follows:</p>
<code>$this-&gt;load-&gt;library('jquery', FALSE);</code>
@@ -115,7 +115,7 @@ JavaScript Driver
<h2>Effects</h2>
-<p>The query library supports a powerful <a href="http://docs.jquery.com/Effects">Effects</a> repertoire. Before an effect can be used, it must be loaded:</p>
+<p>The query library supports a powerful <a href="http://docs.jquery.com/Effects">Effects</a> repertoire. Before an effect can be used, it must be loaded:</p>
<p><code>$this->jquery->effect([optional path] plugin name);
// for example
@@ -125,8 +125,8 @@ $this->jquery->effect('bounce');
<h3>hide() / show()</h3>
<p>Each of this functions will affect the visibility of an item on your page. hide() will set an item invisible, show() will reveal it.</p>
-<p><code>$this-&gt;jquery-&gt;hide(target, optional speed, optional extra information);<br />
- $this-&gt;jquery-&gt;show(target, optional speed, optional extra information);</code></p>
+<p><code>$this-&gt;jquery-&gt;hide(target, optional speed, optional extra information);<br />
+ $this-&gt;jquery-&gt;show(target, optional speed, optional extra information);</code></p>
<ul>
<li>&quot;target&quot; will be any valid jQuery selector or selectors.</li>
@@ -147,7 +147,7 @@ $this->jquery->effect('bounce');
<p><code> $this-&gt;jquery-&gt;animate(target, parameters, optional speed, optional extra information);</code></p>
<ul>
<li>&quot;target&quot; will be any valid jQuery selector or selectors.</li>
- <li>&quot;paramters&quot; in jQuery would generally include a series of CSS properties that you wish to change.</li>
+ <li>&quot;parameters&quot; in jQuery would generally include a series of CSS properties that you wish to change.</li>
<li>&quot;speed&quot; is optional, and is set to either slow, normal, fast, or alternatively a number of milliseconds.</li>
<li>&quot;extra information&quot; is optional, and could include a callback, or other additional information.</li>
</ul>
@@ -162,8 +162,8 @@ $this-&gt;jquery-&gt;click('#trigger', $this-&gt;jquery-&gt;animate('#note', $pa
<h3>fadeIn() / fadeOut()</h3>
-<p><code>$this-&gt;jquery-&gt;fadeIn(target, optional speed, optional extra information);<br />
- $this-&gt;jquery-&gt;fadeOut(target, optional speed, optional extra information);</code></p>
+<p><code>$this-&gt;jquery-&gt;fadeIn(target, optional speed, optional extra information);<br />
+ $this-&gt;jquery-&gt;fadeOut(target, optional speed, optional extra information);</code></p>
<ul>
<li>&quot;target&quot; will be any valid jQuery selector or selectors.</li>
<li>&quot;speed&quot; is optional, and is set to either slow, normal, fast, or alternatively a number of milliseconds.</li>
@@ -182,8 +182,8 @@ $this-&gt;jquery-&gt;click('#trigger', $this-&gt;jquery-&gt;animate('#note', $pa
<h3>fadeIn() / fadeOut()</h3>
<p>These effects cause an element(s) to disappear or reappear over time.</p>
-<p><code>$this-&gt;jquery-&gt;fadeIn(target, optional speed, optional extra information);<br />
- $this-&gt;jquery-&gt;fadeOut(target, optional speed, optional extra information);</code></p>
+<p><code>$this-&gt;jquery-&gt;fadeIn(target, optional speed, optional extra information);<br />
+ $this-&gt;jquery-&gt;fadeOut(target, optional speed, optional extra information);</code></p>
<ul>
<li>&quot;target&quot; will be any valid jQuery selector or selectors.</li>
<li>&quot;speed&quot; is optional, and is set to either slow, normal, fast, or alternatively a number of milliseconds.</li>
@@ -193,9 +193,9 @@ $this-&gt;jquery-&gt;click('#trigger', $this-&gt;jquery-&gt;animate('#note', $pa
<h3>slideUp() / slideDown() / slideToggle()</h3>
<p>These effects cause an element(s) to slide.</p>
-<p><code>$this-&gt;jquery-&gt;slideUp(target, optional speed, optional extra information);<br />
- $this-&gt;jquery-&gt;slideDown(target, optional speed, optional extra information);<br />
-$this-&gt;jquery-&gt;slideToggle(target, optional speed, optional extra information);</code></p>
+<p><code>$this-&gt;jquery-&gt;slideUp(target, optional speed, optional extra information);<br />
+ $this-&gt;jquery-&gt;slideDown(target, optional speed, optional extra information);<br />
+$this-&gt;jquery-&gt;slideToggle(target, optional speed, optional extra information);</code></p>
<ul>
<li>&quot;target&quot; will be any valid jQuery selector or selectors.</li>
<li>&quot;speed&quot; is optional, and is set to either slow, normal, fast, or alternatively a number of milliseconds.</li>
@@ -235,11 +235,11 @@ $this-&gt;jquery-&gt;slideToggle(target, optional speed, optional extra informa
<div id="footer">
<p>
-Previous Topic:&nbsp;&nbsp;<a href="input.html">Input Class</a>
+Previous Topic:&nbsp;&nbsp;<a href="../database/index.html">Database Class</a>
&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
-Next Topic:&nbsp;&nbsp;<a href="language.html">Language Class</a></p>
+Next Topic:&nbsp;&nbsp;<a href="../helpers/array_helper.html">Array Helper</a></p>
<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006 - 2011 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">EllisLab, Inc.</a></p>
</div>
diff --git a/user_guide/libraries/language.html b/user_guide/libraries/language.html
index dfdccad04..1b253fa00 100644
--- a/user_guide/libraries/language.html
+++ b/user_guide/libraries/language.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -60,30 +60,30 @@ Language Class
<p>The Language Class provides functions to retrieve language files and lines of text for purposes of internationalization.</p>
-<p>In your CodeIgniter system folder you'll find one called <dfn>language</dfn> containing sets of language files. You can create
+<p>In your CodeIgniter system folder you'll find one called <dfn>language</dfn> containing sets of language files. You can create
your own language files as needed in order to display error and other messages in other languages.</p>
-<p>Language files are typically stored in your <dfn>system/language</dfn> directory. Alternately you can create a folder called <kbd>language</kbd> inside
-your <kbd>application</kbd> folder and store them there. CodeIgniter will look first in your <dfn>application/language</dfn>
-directory. If the directory does not exist or the specified language is not located there CI will instead look in your global
+<p>Language files are typically stored in your <dfn>system/language</dfn> directory. Alternately you can create a folder called <kbd>language</kbd> inside
+your <kbd>application</kbd> folder and store them there. CodeIgniter will look first in your <dfn>application/language</dfn>
+directory. If the directory does not exist or the specified language is not located there CI will instead look in your global
<dfn>system/language</dfn> folder.</p>
-<p class="important"><strong>Note:</strong>&nbsp; Each language should be stored in its own folder. For example, the English files are located at:
+<p class="important"><strong>Note:</strong>&nbsp; Each language should be stored in its own folder. For example, the English files are located at:
<dfn>system/language/english</dfn></p>
<h2>Creating Language Files</h2>
-<p>Language files must be named with <kbd>_lang.php</kbd> as the file extension. For example, let's say you want to create a file
-containing error messages. You might name it: <kbd>error_lang.php</kbd></p>
+<p>Language files must be named with <kbd>_lang.php</kbd> as the file extension. For example, let's say you want to create a file
+containing error messages. You might name it: <kbd>error_lang.php</kbd></p>
<p>Within the file you will assign each line of text to an array called <var>$lang</var> with this prototype:</p>
<code>$lang['language_key'] = "The actual message to be shown";</code>
<p><strong>Note:</strong> It's a good practice to use a common prefix for all messages in a given file to avoid collisions with
-similarly named items in other files. For example, if you are creating error messages you might prefix them with <var>error_</var></p>
+similarly named items in other files. For example, if you are creating error messages you might prefix them with <var>error_</var></p>
<code>$lang['<var>error</var>_email_missing'] = "You must submit an email address";<br />
$lang['<var>error</var>_url_missing'] = "You must submit a URL";<br />
@@ -92,12 +92,12 @@ $lang['<var>error</var>_username_missing'] = "You must submit a username";</code
<h2>Loading A Language File</h2>
-<p>In order to fetch a line from a particular file you must load the file first. Loading a language file is done with the following code:</p>
+<p>In order to fetch a line from a particular file you must load the file first. Loading a language file is done with the following code:</p>
<code>$this->lang->load('<samp>filename</samp>', '<dfn>language</dfn>');</code>
<p>Where <samp>filename</samp> is the name of the file you wish to load (without the file extension), and <dfn>language</dfn>
-is the language set containing it (ie, english). If the second parameter is missing, the default language set in your
+is the language set containing it (ie, english). If the second parameter is missing, the default language set in your
<kbd>application/config/config.php</kbd> file will be used.</p>
@@ -109,7 +109,7 @@ is the language set containing it (ie, english). If the second parameter is mis
<p>Where <samp>language_key</samp> is the array key corresponding to the line you wish to show.</p>
-<p>Note: This function simply returns the line. It does not echo it for you.</p>
+<p>Note: This function simply returns the line. It does not echo it for you.</p>
<h3>Using language lines as form labels</h3>
diff --git a/user_guide/libraries/loader.html b/user_guide/libraries/loader.html
index af312f4aa..50ec60c1f 100644
--- a/user_guide/libraries/loader.html
+++ b/user_guide/libraries/loader.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -58,7 +58,7 @@ Loader Class
<h1>Loader Class</h1>
-<p>Loader, as the name suggests, is used to load elements. These elements can be libraries (classes) <a href="../general/views.html">View files</a>,
+<p>Loader, as the name suggests, is used to load elements. These elements can be libraries (classes) <a href="../general/views.html">View files</a>,
<a href="../general/helpers.html">Helpers</a>, <a href="../general/models.html">Models</a>, or your own files.</p>
<p class="important"><strong>Note:</strong> This class is initialized automatically by the system so there is no need to do it manually.</p>
@@ -69,7 +69,7 @@ Loader Class
<h2>$this->load->library('<var>class_name</var>', <samp>$config</samp>, <kbd>'object name'</kbd>)</h2>
-<p>This function is used to load core classes. Where <var>class_name</var> is the name of the class you want to load.
+<p>This function is used to load core classes. Where <var>class_name</var> is the name of the class you want to load.
Note: We use the terms "class" and "library" interchangeably.</p>
<p>For example, if you would like to send email with CodeIgniter, the first step is to load the email class within your controller:</p>
@@ -90,9 +90,13 @@ For example, if you have file located at:</p>
<p>You may nest the file in as many subdirectories as you want.</p>
+<p>Additionally, multiple libraries can be loaded at the same time by passing an array of libraries to the load function.</p>
+
+<code>$this->load->library(array('<var>email</var>', '<var>table</var>'));</code>
+
<h3>Setting options</h3>
-<p>The second (optional) parameter allows you to optionally pass configuration setting. You will typically pass these as an array:</p>
+<p>The second (optional) parameter allows you to optionally pass configuration setting. You will typically pass these as an array:</p>
<code>
$config = array (<br />
@@ -105,9 +109,11 @@ $this->load->library('email', $config);</code>
<p>Config options can usually also be set via a config file. Each library is explained in detail in its own page, so please read the information regarding each one you would like to use.</p>
+<p>Please take note, when multiple libraries are supplied in an array for the first parameter, each will receive the same parameter information.</p>
+
<h3>Assigning a Library to a different object name</h3>
-<p>If the third (optional) parameter is blank, the library will usually be assigned to an object with the same name as the library. For example, if the library is named <dfn>Session</dfn>, it
+<p>If the third (optional) parameter is blank, the library will usually be assigned to an object with the same name as the library. For example, if the library is named <dfn>Session</dfn>, it
will be assigned to a variable named <dfn>$this->session</dfn>.</p>
<p>If you prefer to set your own class names you can pass its value to the third parameter:</p>
@@ -120,24 +126,25 @@ $this->my_session
</code>
+<p>Please take note, when multiple libraries are supplied in an array for the first parameter, this parameter is discarded.</p>
<h2>$this->load->view('<var>file_name</var>', <samp>$data</samp>, <kbd>true/false</kbd>)</h2>
-<p>This function is used to load your View files. If you haven't read the <a href="../general/views.html">Views</a> section of the
+<p>This function is used to load your View files. If you haven't read the <a href="../general/views.html">Views</a> section of the
user guide it is recommended that you do since it shows you how this function is typically used.</p>
-<p>The first parameter is required. It is the name of the view file you would like to load. &nbsp;Note: The .php file extension does not need to be specified unless you use something other than <kbd>.php</kbd>.</p>
+<p>The first parameter is required. It is the name of the view file you would like to load. &nbsp;Note: The .php file extension does not need to be specified unless you use something other than <kbd>.php</kbd>.</p>
<p>The second <strong>optional</strong> parameter can take
an associative array or an object as input, which it runs through the PHP <a href="http://www.php.net/extract">extract</a> function to
-convert to variables that can be used in your view files. Again, read the <a href="../general/views.html">Views</a> page to learn
+convert to variables that can be used in your view files. Again, read the <a href="../general/views.html">Views</a> page to learn
how this might be useful.</p>
<p>The third <strong>optional</strong> parameter lets you change the behavior of the function so that it returns data as a string
-rather than sending it to your browser. This can be useful if you want to process the data in some way. If you
-set the parameter to <kbd>true</kbd> (boolean) it will return data. The default behavior is <kbd>false</kbd>, which sends it
-to your browser. Remember to assign it to a variable if you want the data returned:</p>
+rather than sending it to your browser. This can be useful if you want to process the data in some way. If you
+set the parameter to <kbd>true</kbd> (boolean) it will return data. The default behavior is <kbd>false</kbd>, which sends it
+to your browser. Remember to assign it to a variable if you want the data returned:</p>
<code>$string = $this->load->view('<var>myfile</var>', '', <kbd>true</kbd>);</code>
@@ -152,7 +159,7 @@ to your browser. Remember to assign it to a variable if you want the data retur
<br />
$this-&gt;<kbd>fubar</kbd>-&gt;function();</code>
<h2>$this->load->database('<var>options</var>', <kbd>true/false</kbd>)</h2>
-<p>This function lets you load the database class. The two parameters are <strong>optional</strong>. Please see the
+<p>This function lets you load the database class. The two parameters are <strong>optional</strong>. Please see the
<a href="../database/index.html">database</a> section for more info.</p>
@@ -161,9 +168,9 @@ $this-&gt;<kbd>fubar</kbd>-&gt;function();</code>
<h2>$this->load->vars(<samp>$array</samp>)</h2>
<p>This function takes an associative array as input and generates variables using the PHP <a href="http://www.php.net/extract">extract</a> function.
-This function produces the same result as using the second parameter of the <dfn>$this->load->view()</dfn> function above. The reason you might
+This function produces the same result as using the second parameter of the <dfn>$this->load->view()</dfn> function above. The reason you might
want to use this function independently is if you would like to set some global variables in the constructor of your controller
-and have them become available in any view file loaded from any function. You can have multiple calls to this function. The data get cached
+and have them become available in any view file loaded from any function. You can have multiple calls to this function. The data get cached
and merged into one array for conversion to variables.
</p>
@@ -173,7 +180,7 @@ and merged into one array for conversion to variables.
<h2>$this->load->file('<var>filepath/filename</var>', <kbd>true/false</kbd>)</h2>
-<p>This is a generic file loading function. Supply the filepath and name in the first parameter and it will open and read the file.
+<p>This is a generic file loading function. Supply the filepath and name in the first parameter and it will open and read the file.
By default the data is sent to your browser, just like a View file, but if you set the second parameter to <kbd>true</kbd> (boolean)
it will instead return the data as a string.</p>
@@ -187,7 +194,7 @@ it will instead return the data as a string.</p>
<h2>Application "Packages"</h2>
-<p>An application package allows for the easy distribution of complete sets of resources in a single directory, complete with its own libraries, models, helpers, config, and language files. It is recommended that these packages be placed in the <dfn>application/third_party</dfn> folder. Below is a sample map of an package directory</p>
+<p>An application package allows for the easy distribution of complete sets of resources in a single directory, complete with its own libraries, models, helpers, config, and language files. It is recommended that these packages be placed in the <dfn>application/third_party</dfn> folder. Below is a sample map of an package directory</p>
<h2>Sample Package "Foo Bar" Directory Map</h2>
@@ -203,18 +210,18 @@ libraries/<br />
models/<br />
</code>
-<p>Whatever the purpose of the "Foo Bar" application package, it has its own config files, helpers, language files, libraries, and models. To use these resources in your controllers, you first need to tell the Loader that you are going to be loading resources from a package, by adding the package path.</p>
+<p>Whatever the purpose of the "Foo Bar" application package, it has its own config files, helpers, language files, libraries, and models. To use these resources in your controllers, you first need to tell the Loader that you are going to be loading resources from a package, by adding the package path.</p>
<h3>$this->load->add_package_path()</h3>
-<p>Adding a package path instructs the Loader class to prepend a given path for subsequent requests for resources. As an example, the "Foo Bar" application package above has a library named <dfn>Foo_bar.php</dfn>. In our controller, we'd do the following:</p>
+<p>Adding a package path instructs the Loader class to prepend a given path for subsequent requests for resources. As an example, the "Foo Bar" application package above has a library named <dfn>Foo_bar.php</dfn>. In our controller, we'd do the following:</p>
<code>$this->load->add_package_path(<var>APPPATH</var>.'third_party/<var>foo_bar</var>/');<br />
$this->load->library('foo_bar');</code>
<h3>$this->load->remove_package_path()</h3>
-<p>When your controller is finished using resources from an application package, and particularly if you have other application packages you want to work with, you may wish to remove the package path so the Loader no longer looks in that folder for resources. To remove the last path added, simply call the method with no parameters.</p>
+<p>When your controller is finished using resources from an application package, and particularly if you have other application packages you want to work with, you may wish to remove the package path so the Loader no longer looks in that folder for resources. To remove the last path added, simply call the method with no parameters.</p>
<h3>$this->load->remove_package_path()</h3>
@@ -224,17 +231,22 @@ $this->load->library('foo_bar');</code>
<h3>Package view files</h3>
-<p>@todo - package view file interface is not complete. It can be experimentally used by first saving the Loader's original view path, setting the view path to the package's view path, and when finished, setting back to the original view path.</p>
-
-<code>// ... save the original view path, and set to our Foo Bar package view folder<br />
-$orig_view_path = $this->load->_ci_view_path;<br />
-$this->load->_ci_view_path = <var>APPPATH</var>.'third_party/<var>foo_bar</var>/views/';<br />
-<br />
-// ... code using the package's view files<br />
-<br />
-// ... then return the view path to the application's original view path<br />
-$this->load->_ci_view_path = $orig_view_path;</code>
+<p>By Default, package view files paths are set when <samp>add_package_path()</samp> is called. View paths are looped through, and once a match is encountered that view is loaded.</p>
+<p>In this instance, it is possible for view naming collisions within packages to occur, and possibly the incorrect package being loaded. To ensure against this, set an optional second parameter of <var>FALSE</var> when calling <samp>add_package_path()</samp>.</p>
+<code>
+$this->load->add_package_path(APPPATH.'my_app', TRUE);<br>
+$this->load->view('my_app_index'); // Loads<br>
+$this->load->view('welcome_message'); // Will not load the default welcome_message b/c the second param to add_package_path is TRUE<br>
+<br>
+// Reset things<br>
+$this->load->remove_package_path(APPPATH.'my_app');<br>
+<br>
+// Again without the second parameter:<br>
+$this->load->add_package_path(APPPATH.'my_app', TRUE);<br>
+$this->load->view('my_app_index'); // Loads<br>
+$this->load->view('welcome_message'); // Loads<br>
+</code>
</div>
<!-- END CONTENT -->
diff --git a/user_guide/libraries/output.html b/user_guide/libraries/output.html
index 25ec521b1..8846e15ff 100644
--- a/user_guide/libraries/output.html
+++ b/user_guide/libraries/output.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -58,7 +58,7 @@ Output Class
<h1>Output Class</h1>
-<p>The Output class is a small class with one main function: To send the finalized web page to the requesting browser. It is
+<p>The Output class is a small class with one main function: To send the finalized web page to the requesting browser. It is
also responsible for <a href="../general/caching.html">caching</a> your web pages, if you use that feature.</p>
<p class="important"><strong>Note:</strong> This class is initialized automatically by the system so there is no need to do it manually.</p>
@@ -70,7 +70,7 @@ It is possible, however, for you to manually intervene with the output if you ne
<h2>$this->output->set_output();</h2>
-<p>Permits you to manually set the final output string. Usage example:</p>
+<p>Permits you to manually set the final output string. Usage example:</p>
<code>$this->output->set_output($data);</code>
@@ -95,7 +95,7 @@ $this->output<br/>
<h2>$this->output->get_output();</h2>
-<p>Permits you to manually retrieve any output that has been sent for storage in the output class. Usage example:</p>
+<p>Permits you to manually retrieve any output that has been sent for storage in the output class. Usage example:</p>
<code>$string = $this->output->get_output();</code>
<p>Note that data will only be retrievable from this function if it has been previously sent to the output class by one of the
@@ -104,7 +104,7 @@ CodeIgniter functions like <var>$this->load->view()</var>.</p>
<h2>$this->output->append_output();</h2>
-<p>Appends data onto the output string. Usage example:</p>
+<p>Appends data onto the output string. Usage example:</p>
<code>$this->output->append_output($data);</code>
@@ -112,7 +112,7 @@ CodeIgniter functions like <var>$this->load->view()</var>.</p>
<h2>$this->output->set_header();</h2>
-<p>Permits you to manually set server headers, which the output class will send for you when outputting the final rendered display. Example:</p>
+<p>Permits you to manually set server headers, which the output class will send for you when outputting the final rendered display. Example:</p>
<code>
$this->output->set_header("HTTP/1.0 200 OK");<br />
@@ -125,10 +125,10 @@ $this->output->set_header("Pragma: no-cache"); </code>
<h2>$this->output->set_status_header(<var>code</var>, '<var>text</var>');</h2>
-<p>Permits you to manually set a server status header. Example:</p>
+<p>Permits you to manually set a server status header. Example:</p>
<code>$this->output->set_status_header('401');<br />
-// Sets the header as: Unauthorized</code>
+// Sets the header as: Unauthorized</code>
<p><a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html">See here</a> for a full list of headers.</p>
@@ -147,14 +147,14 @@ at the bottom of your pages for debugging and optimization purposes.</p>
<h2>$this->output->set_profiler_sections();</h2>
-<p>Permits you to enable/disable specific sections of the Profiler when enabled. Please refer to the <a href="../general/profiling.html">Profiler</a> documentation for further information.</p>
+<p>Permits you to enable/disable specific sections of the Profiler when enabled. Please refer to the <a href="../general/profiling.html">Profiler</a> documentation for further information.</p>
<h2>$this->output->cache();</h2>
-<p>The CodeIgniter output library also controls caching. For more information, please see the <a href="../general/caching.html">caching documentation</a>.</p>
+<p>The CodeIgniter output library also controls caching. For more information, please see the <a href="../general/caching.html">caching documentation</a>.</p>
<h2>Parsing Execution Variables</h2>
- <p>CodeIgniter will parse the pseudo-variables <var>{elapsed_time}</var> and <var>{memory_usage}</var> in your output by default. To disable this, set the <var>$parse_exec_vars</var> class property to <var>FALSE</var> in your controller.
+ <p>CodeIgniter will parse the pseudo-variables <var>{elapsed_time}</var> and <var>{memory_usage}</var> in your output by default. To disable this, set the <var>$parse_exec_vars</var> class property to <var>FALSE</var> in your controller.
<code>$this->output->parse_exec_vars = FALSE;</code>
diff --git a/user_guide/libraries/pagination.html b/user_guide/libraries/pagination.html
index da07c79be..a6b9287a3 100644
--- a/user_guide/libraries/pagination.html
+++ b/user_guide/libraries/pagination.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -71,27 +71,27 @@ Pagination Class
<code>
$this->load->library('pagination');<br /><br />
$config['base_url'] = 'http://example.com/index.php/test/page/';<br />
-$config['total_rows'] = '200';<br />
-$config['per_page'] = '20';
+$config['total_rows'] = 200;<br />
+$config['per_page'] = 20;
<br /><br />
$this->pagination->initialize($config);
<br /><br />
-echo $this->pagination->create_links();</code>
+echo $this->pagination->create_links();</code>
<h3>Notes:</h3>
-<p>The <var>$config</var> array contains your configuration variables. It is passed to the <dfn>$this->pagination->initialize</dfn> function as shown above. Although there are some twenty items you can configure, at
-minimum you need the three shown. Here is a description of what those items represent:</p>
+<p>The <var>$config</var> array contains your configuration variables. It is passed to the <dfn>$this->pagination->initialize</dfn> function as shown above. Although there are some twenty items you can configure, at
+minimum you need the three shown. Here is a description of what those items represent:</p>
<ul>
- <li><strong>base_url</strong> This is the full URL to the controller class/function containing your pagination. In the example
- above, it is pointing to a controller called "Test" and a function called "page". Keep in mind that you can
+ <li><strong>base_url</strong> This is the full URL to the controller class/function containing your pagination. In the example
+ above, it is pointing to a controller called "Test" and a function called "page". Keep in mind that you can
<a href="../general/routing.html">re-route your URI</a> if you need a different structure.</li>
<li><strong>total_rows</strong> This number represents the total rows in the result set you are creating pagination for.
Typically this number will be the total rows that your database query returned.
</li>
- <li><strong>per_page</strong> The number of items you intend to show per page. In the above example, you would be showing 20 items per page.</li>
+ <li><strong>per_page</strong> The number of items you intend to show per page. In the above example, you would be showing 20 items per page.</li>
</ul>
<p>The <var>create_links()</var> function returns an empty string when there is no pagination to show.</p>
@@ -100,7 +100,7 @@ minimum you need the three shown. Here is a description of what those items rep
<h3>Setting preferences in a config file</h3>
<p>If you prefer not to set preferences using the above method, you can instead put them into a config file.
-Simply create a new file called <var>pagination.php</var>, add the <var>$config</var>
+Simply create a new file called <var>pagination.php</var>, add the <var>$config</var>
array in that file. Then save the file in: <var>config/pagination.php</var> and it will be used automatically. You
will NOT need to use the <dfn>$this->pagination->initialize</dfn> function if you save your preferences in a config file.</p>
@@ -122,9 +122,9 @@ something different you can specify it.</p>
<h4>$config['page_query_string'] = TRUE</h4>
<p>By default, the pagination library assume you are using <a href="../general/urls.html">URI Segments</a>, and constructs your links something like</p>
<p><code>http://example.com/index.php/test/page/20</code></p>
-<p>If you have $config['enable_query_strings'] set to TRUE your links will automatically be re-written using Query Strings. This option can also be explictly set. Using $config['page_query_string'] set to TRUE, the pagination link will become.</p>
+<p>If you have $config['enable_query_strings'] set to TRUE your links will automatically be re-written using Query Strings. This option can also be explictly set. Using $config['page_query_string'] set to TRUE, the pagination link will become.</p>
<p><code>http://example.com/index.php?c=test&amp;m=page&amp;per_page=20</code></p>
-<p>Note that &quot;per_page&quot; is the default query string passed, however can be configured using $config['query_string_segment'] = 'your_string'</p>
+<p>Note that &quot;per_page&quot; is the default query string passed, however can be configured using $config['query_string_segment'] = 'your_string'</p>
<h2>Adding Enclosing Markup</h2>
<p>If you would like to surround the entire pagination with some markup you can do it with these two prefs:</p>
diff --git a/user_guide/libraries/parser.html b/user_guide/libraries/parser.html
index 5bb403a7f..4f04aaf48 100644
--- a/user_guide/libraries/parser.html
+++ b/user_guide/libraries/parser.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -83,10 +83,10 @@ variables or variable tag pairs. If you've never used a template engine, pseudo-
PHP from your templates (view files).</p>
<p class="important"><strong>Note:</strong> CodeIgniter does <strong>not</strong> require you to use this class
-since using pure PHP in your view pages lets them run a little faster. However, some developers prefer to use a template engine if
+since using pure PHP in your view pages lets them run a little faster. However, some developers prefer to use a template engine if
they work with designers who they feel would find some confusion working with PHP.</p>
-<p><strong>Also Note:</strong> The Template Parser Class is <strong>not</strong> a
+<p><strong>Also Note:</strong> The Template Parser Class is <strong>not</strong> a
full-blown template parsing solution. We've kept it very lean on purpose in order to maintain maximum performance.</p>
@@ -102,7 +102,7 @@ full-blown template parsing solution. We've kept it very lean on purpose in orde
<h2>$this->parser->parse()</h2>
-<p>This method accepts a template name and data array as input, and it generates a parsed version. Example:</p>
+<p>This method accepts a template name and data array as input, and it generates a parsed version. Example:</p>
<code>$this->load->library('parser');<br />
<br />
@@ -114,11 +114,11 @@ $data = array(<br />
$this->parser->parse('blog_template', $data);</code>
<p>The first parameter contains the name of the <a href="../general/views.html">view file</a> (in this example the file would be called blog_template.php),
-and the second parameter contains an associative array of data to be replaced in the template. In the above example, the
+and the second parameter contains an associative array of data to be replaced in the template. In the above example, the
template would contain two variables: {blog_title} and {blog_heading}</p>
-<p>There is no need to "echo" or do something with the data returned by <dfn>$this->parser->parse()</dfn>. It is automatically
-passed to the output class to be sent to the browser. However, if you do want the data returned instead of sent to the output class you can
+<p>There is no need to "echo" or do something with the data returned by <dfn>$this->parser->parse()</dfn>. It is automatically
+passed to the output class to be sent to the browser. However, if you do want the data returned instead of sent to the output class you can
pass TRUE (boolean) to the third parameter:</p>
<code>$string = $this->parser->parse('blog_template', $data, TRUE);</code>
@@ -130,8 +130,8 @@ pass TRUE (boolean) to the third parameter:</p>
<h2>Variable Pairs</h2>
-<p>The above example code allows simple variables to be replaced. What if you would like an entire block of variables to be
-repeated, with each iteration containing new values? Consider the template example we showed at the top of the page:</p>
+<p>The above example code allows simple variables to be replaced. What if you would like an entire block of variables to be
+repeated, with each iteration containing new values? Consider the template example we showed at the top of the page:</p>
<code>&lt;html&gt;<br />
&lt;head&gt;<br />
diff --git a/user_guide/libraries/security.html b/user_guide/libraries/security.html
index 943f72a0f..0cb1d0cb1 100644
--- a/user_guide/libraries/security.html
+++ b/user_guide/libraries/security.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -63,11 +63,11 @@ Security Class
<h2>XSS Filtering</h2>
<p>CodeIgniter comes with a Cross Site Scripting Hack prevention filter which can either run automatically to filter
-all POST and COOKIE data that is encountered, or you can run it on a per item basis. By default it does <strong>not</strong>
+all POST and COOKIE data that is encountered, or you can run it on a per item basis. By default it does <strong>not</strong>
run globally since it requires a bit of processing overhead, and since you may not need it in all cases.</p>
<p>The XSS filter looks for commonly used techniques to trigger Javascript or other types of code that attempt to hijack cookies
-or do other malicious things. If anything disallowed is encountered it is rendered safe by converting the data to character entities.</p>
+or do other malicious things. If anything disallowed is encountered it is rendered safe by converting the data to character entities.</p>
<p>
Note: This function should only be used to deal with data upon submission. It's not something that should be used for general runtime processing since it requires a fair amount of processing overhead.</p>
@@ -88,7 +88,7 @@ Note: This function should only be used to deal with data upon submission. It's
<p>Note: If you use the form validation class, it gives you the option of XSS filtering as well.</p>
-<p>An optional second parameter, <dfn>is_image</dfn>, allows this function to be used to test images for potential XSS attacks, useful for file upload security. When this second parameter is set to <dfn>TRUE</dfn>, instead of returning an altered string, the function returns TRUE if the image is safe, and FALSE if it contained potentially malicious information that a browser may attempt to execute.</p>
+<p>An optional second parameter, <dfn>is_image</dfn>, allows this function to be used to test images for potential XSS attacks, useful for file upload security. When this second parameter is set to <dfn>TRUE</dfn>, instead of returning an altered string, the function returns TRUE if the image is safe, and FALSE if it contained potentially malicious information that a browser may attempt to execute.</p>
<code>if ($this->security->xss_clean($file, TRUE) === FALSE)<br />
{<br />
@@ -98,7 +98,7 @@ Note: This function should only be used to deal with data upon submission. It's
<h2>$this->security->sanitize_filename()</h2>
-<p>When accepting filenames from user input, it is best to sanitize them to prevent directory traversal and other security related issues. To do so, use the <dfn>sanitize_filename()</dfn> method of the Security class. Here is an example:</p>
+<p>When accepting filenames from user input, it is best to sanitize them to prevent directory traversal and other security related issues. To do so, use the <dfn>sanitize_filename()</dfn> method of the Security class. Here is an example:</p>
<code>$filename = $this->security->sanitize_filename($this->input->post('filename'));</code>
diff --git a/user_guide/libraries/sessions.html b/user_guide/libraries/sessions.html
index c8757995c..bb8f1fc9b 100644
--- a/user_guide/libraries/sessions.html
+++ b/user_guide/libraries/sessions.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -61,7 +61,7 @@ Session Class
<p>The Session class permits you maintain a user's "state" and track their activity while they browse your site.
The Session class stores session information for each user as serialized (and optionally encrypted) data in a cookie.
It can also store the session data in a database table for added security, as this permits the session ID in the
-user's cookie to be matched against the stored session ID. By default only the cookie is saved. If you choose to
+user's cookie to be matched against the stored session ID. By default only the cookie is saved. If you choose to
use the database option you'll need to create the session table as indicated below.
</p>
@@ -93,8 +93,8 @@ will cause it to read, create, and update sessions.</p>
If sessions data does <strong>not</strong> exist (or if it has expired) a new session will be created and saved in the cookie.
If a session does exist, its information will be updated and the cookie will be updated. With each update, the session_id will be regenerated.</p>
-<p>It's important for you to understand that once initialized, the Session class runs automatically. There is nothing
-you need to do to cause the above behavior to happen. You can, as you'll see below, work with session data or
+<p>It's important for you to understand that once initialized, the Session class runs automatically. There is nothing
+you need to do to cause the above behavior to happen. You can, as you'll see below, work with session data or
even add your own data to a user's session, but the process of reading, writing, and updating a session is automatic.</p>
@@ -106,7 +106,7 @@ even add your own data to a user's session, but the process of reading, writing,
<li>The user's unique Session ID (this is a statistically random string with very strong entropy, hashed with MD5 for portability, and regenerated (by default) every five minutes)</li>
<li>The user's IP Address</li>
<li>The user's User Agent data (the first 50 characters of the browser data string)</li>
-<li>The "last activity" time stamp.</li>
+<li>The "last activity" time stamp.</li>
</ul>
<p>The above data is stored in a cookie as a serialized array with this prototype:</p>
@@ -124,7 +124,7 @@ making the data highly secure and impervious to being read or altered by someone
can be <a href="encryption.html">found here</a>, although the Session class will take care of initializing
and encrypting the data automatically.</p>
-<p>Note: Session cookies are only updated every five minutes by default to reduce processor load. If you repeatedly reload a page
+<p>Note: Session cookies are only updated every five minutes by default to reduce processor load. If you repeatedly reload a page
you'll notice that the "last activity" time only updates if five minutes or more has passed since the last time
the cookie was written. This time is configurable by changing the $config['sess_time_to_update'] line in your system/config/config.php file.</p>
@@ -134,7 +134,7 @@ the cookie was written. This time is configurable by changing the $config['sess_
<code>$this->session->userdata('<samp>item</samp>');</code>
-<p>Where <samp>item</samp> is the array index corresponding to the item you wish to fetch. For example, to fetch the session ID you
+<p>Where <samp>item</samp> is the array index corresponding to the item you wish to fetch. For example, to fetch the session ID you
will do this:</p>
<code>$session_id = $this->session->userdata('<samp>session_id</samp>');</code>
@@ -145,7 +145,7 @@ will do this:</p>
<h2>Adding Custom Session Data</h2>
<p>A useful aspect of the session array is that you can add your own data to it and it will be stored in the user's cookie.
-Why would you want to do this? Here's one example:</p>
+Why would you want to do this? Here's one example:</p>
<p>Let's say a particular user logs into your site. Once authenticated,
you could add their username and email address to the session cookie, making that data globally available to you without
@@ -155,7 +155,7 @@ having to run a database query when you need it.</p>
<code>$this->session->set_userdata(<samp>$array</samp>);</code>
-<p>Where <samp>$array</samp> is an associative array containing your new data. Here's an example:</p>
+<p>Where <samp>$array</samp> is an associative array containing your new data. Here's an example:</p>
<p><code>$newdata = array(<br />
@@ -167,9 +167,26 @@ having to run a database query when you need it.</p>
$this->session->set_userdata(<samp>$newdata</samp>);</code></p>
<p>If you want to add userdata one value at a time, set_userdata() also supports this syntax. </p>
<p><code>$this-&gt;session-&gt;set_userdata('some_name', 'some_value');</code></p>
-<p class="important"><strong>Note:</strong> Cookies can only hold 4KB of data, so be careful not to exceed the capacity. The
+<p class="important"><strong>Note:</strong> Cookies can only hold 4KB of data, so be careful not to exceed the capacity. The
encryption process in particular produces a longer data string than the original so keep careful track of how much data you are storing.</p>
+<h2>Retrieving All Session Data</h2>
+<p>An array of all userdata can be retrieved as follows:</p>
+<code>$this-&gt;session-&gt;all_userdata()</code>
+
+<p>And returns an associative array like the following:</p>
+
+<pre>
+Array
+(
+ [session_id] => 4a5a5dca22728fb0a84364eeb405b601
+ [ip_address] => 127.0.0.1
+ [user_agent] => Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7;
+ [last_activity] => 1303142623
+)
+</pre>
+
+
<h2>Removing Session Data</h2>
<p>Just as set_userdata() can be used to add information into a session, unset_userdata() can be used to remove it, by passing the session key. For example, if you wanted to remove 'some_name' from your session information: </p>
<p><code>$this-&gt;session-&gt;unset_userdata('some_name');</code></p>
@@ -189,27 +206,29 @@ $this-&gt;session-&gt;unset_userdata(<samp>$array_items</samp>);</code></p>
<p><code>$this-&gt;session-&gt;keep_flashdata('item');</code></p>
<h2>Saving Session Data to a Database</h2>
<p>While the session data array stored in the user's cookie contains a Session ID,
-unless you store session data in a database there is no way to validate it. For some applications that require little or no
-security, session ID validation may not be needed, but if your application requires security, validation is mandatory. Otherwise, an old session
+unless you store session data in a database there is no way to validate it. For some applications that require little or no
+security, session ID validation may not be needed, but if your application requires security, validation is mandatory. Otherwise, an old session
could be restored by a user modifying their cookies.</p>
<p>When session data is available in a database, every time a valid session is found in the user's cookie, a database
-query is performed to match it. If the session ID does not match, the session is destroyed. Session IDs can never
+query is performed to match it. If the session ID does not match, the session is destroyed. Session IDs can never
be updated, they can only be generated when a new session is created.</p>
-<p>In order to store sessions, you must first create a database table for this purpose. Here is the basic
+<p>In order to store sessions, you must first create a database table for this purpose. Here is the basic
prototype (for MySQL) required by the session class:</p>
-<textarea class="textarea" style="width:100%" cols="50" rows="8">
-CREATE TABLE IF NOT EXISTS `ci_sessions` (
-session_id varchar(40) DEFAULT '0' NOT NULL,
-ip_address varchar(16) DEFAULT '0' NOT NULL,
-user_agent varchar(50) NOT NULL,
-last_activity int(10) unsigned DEFAULT 0 NOT NULL,
-user_data text DEFAULT '' NOT NULL,
-PRIMARY KEY (session_id)
-);</textarea>
+<textarea class="textarea" style="width:100%" cols="50" rows="10">
+CREATE TABLE IF NOT EXISTS `ci_sessions` (
+ session_id varchar(40) DEFAULT '0' NOT NULL,
+ ip_address varchar(16) DEFAULT '0' NOT NULL,
+ user_agent varchar(120) NOT NULL,
+ last_activity int(10) unsigned DEFAULT 0 NOT NULL,
+ user_data text NOT NULL,
+ PRIMARY KEY (session_id),
+ KEY `last_activity_idx` (`last_activity`)
+);
+</textarea>
<p><strong>Note:</strong> By default the table is called <dfn>ci_sessions</dfn>, but you can name it anything you want
as long as you update the <kbd>application/config/config.php</kbd> file so that it contains the name you have chosen.
@@ -230,7 +249,7 @@ do not need to write your own routine to do it.</p>
<h2>Destroying a Session </h2>
<p>To clear the current session: </p>
<code>$this-&gt;session-&gt;sess_destroy();</code>
-<p class="important"><strong>Note:</strong> This function should be the last one called, and even flash variables will no longer be available. If you only want some items destroyed and not all, use <dfn>unset_userdata()</dfn>.</p>
+<p class="important"><strong>Note:</strong> This function should be the last one called, and even flash variables will no longer be available. If you only want some items destroyed and not all, use <dfn>unset_userdata()</dfn>.</p>
@@ -273,7 +292,7 @@ do not need to write your own routine to do it.</p>
<td class="td"><strong>sess_use_database</strong></td>
<td class="td">FALSE</td>
<td class="td">TRUE/FALSE (boolean)</td>
- <td class="td">Whether to save the session data to a database. You must create the table before enabling this option.</td>
+ <td class="td">Whether to save the session data to a database. You must create the table before enabling this option.</td>
</tr>
<tr>
<td class="td"><strong>sess_table_name</strong></td>
@@ -291,7 +310,7 @@ do not need to write your own routine to do it.</p>
<td class="td"><strong>sess_match_ip</strong></td>
<td class="td">FALSE</td>
<td class="td">TRUE/FALSE (boolean)</td>
- <td class="td">Whether to match the user's IP address when reading the session data. Note that some ISPs dynamically
+ <td class="td">Whether to match the user's IP address when reading the session data. Note that some ISPs dynamically
changes the IP, so if you want a non-expiring session you will likely set this to FALSE.</td>
</tr>
<tr>
diff --git a/user_guide/libraries/table.html b/user_guide/libraries/table.html
index 9de70775a..a08f95032 100644
--- a/user_guide/libraries/table.html
+++ b/user_guide/libraries/table.html
@@ -27,7 +27,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -130,11 +130,11 @@ echo $this->table->generate();
<h2>Changing the Look of Your Table</h2>
-<p>The Table Class permits you to set a table template with which you can specify the design of your layout. Here is the template
+<p>The Table Class permits you to set a table template with which you can specify the design of your layout. Here is the template
prototype:</p>
<code>
-$tmpl = array (<br />
+$tmpl = array (<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'table_open'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> '&lt;table border="0" cellpadding="4" cellspacing="0">',<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'heading_row_start'&nbsp;&nbsp;&nbsp;=> '&lt;tr>',<br />
@@ -159,14 +159,14 @@ $tmpl = array (<br />
$this->table->set_template($tmpl);
</code>
-<p class="important"><strong>Note:</strong>&nbsp; You'll notice there are two sets of "row" blocks in the template. These permit you to create alternating row colors or design elements that alternate with each
+<p class="important"><strong>Note:</strong>&nbsp; You'll notice there are two sets of "row" blocks in the template. These permit you to create alternating row colors or design elements that alternate with each
iteration of the row data.</p>
-<p>You are NOT required to submit a complete template. If you only need to change parts of the layout you can simply submit those elements.
+<p>You are NOT required to submit a complete template. If you only need to change parts of the layout you can simply submit those elements.
In this example, only the table opening tag is being changed:</p>
<code>
-$tmpl = array ( 'table_open'&nbsp;&nbsp;=> '&lt;table border="1" cellpadding="2" cellspacing="1" class="mytable">' );<br />
+$tmpl = array ( 'table_open'&nbsp;&nbsp;=> '&lt;table border="1" cellpadding="2" cellspacing="1" class="mytable">' );<br />
<br />
$this->table->set_template($tmpl);
@@ -176,7 +176,7 @@ $this->table->set_template($tmpl);
<h1>Function Reference</h1>
<h2>$this->table->generate()</h2>
-<p>Returns a string containing the generated table. Accepts an optional parameter which can be an array or a database result object.</p>
+<p>Returns a string containing the generated table. Accepts an optional parameter which can be an array or a database result object.</p>
<h2>$this->table->set_caption()</h2>
@@ -186,19 +186,19 @@ $this->table->set_template($tmpl);
<h2>$this->table->set_heading()</h2>
-<p>Permits you to set the table heading. You can submit an array or discrete params:</p>
+<p>Permits you to set the table heading. You can submit an array or discrete params:</p>
<code>$this->table->set_heading('Name', 'Color', 'Size');</code>
<code>$this->table->set_heading(array('Name', 'Color', 'Size'));</code>
<h2>$this->table->add_row()</h2>
-<p>Permits you to add a row to your table. You can submit an array or discrete params:</p>
+<p>Permits you to add a row to your table. You can submit an array or discrete params:</p>
<code>$this->table->add_row('Blue', 'Red', 'Green');</code>
<code>$this->table->add_row(array('Blue', 'Red', 'Green'));</code>
-<p>If you would like to set an individual cell's tag attributes, you can use an associative array for that cell. The associative key <dfn>'data'</dfn> defines the cell's data. Any other key =&gt; val pairs are added as <dfn>key='val'</dfn> attributes to the tag:</p>
+<p>If you would like to set an individual cell's tag attributes, you can use an associative array for that cell. The associative key <dfn>'data'</dfn> defines the cell's data. Any other key =&gt; val pairs are added as <dfn>key='val'</dfn> attributes to the tag:</p>
<code>$cell = array('data' => 'Blue', 'class' => 'highlight', 'colspan' => 2);<br />
$this->table->add_row($cell, 'Red', 'Green');<br />
@@ -211,8 +211,8 @@ $this->table->add_row($cell, 'Red', 'Green');<br />
<p>This function takes a one-dimensional array as input and creates
a multi-dimensional array with a depth equal to the number of
-columns desired. This allows a single array with many elements to be
-displayed in a table that has a fixed column count. Consider this example:</p>
+columns desired. This allows a single array with many elements to be
+displayed in a table that has a fixed column count. Consider this example:</p>
<code>
$list = array('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve');<br />
@@ -241,7 +241,7 @@ $this->table->generate($new_list);<br />
<p>Permits you to set your template. You can submit a full or partial template.</p>
<code>
-$tmpl = array ( 'table_open'&nbsp;&nbsp;=> '&lt;table border="1" cellpadding="2" cellspacing="1" class="mytable">' );<br />
+$tmpl = array ( 'table_open'&nbsp;&nbsp;=> '&lt;table border="1" cellpadding="2" cellspacing="1" class="mytable">' );<br />
<br />
$this->table->set_template($tmpl);
@@ -250,7 +250,7 @@ $this->table->set_template($tmpl);
<h2>$this->table->set_empty()</h2>
-<p>Let's you set a default value for use in any table cells that are empty. You might, for example, set a non-breaking space:</p>
+<p>Let's you set a default value for use in any table cells that are empty. You might, for example, set a non-breaking space:</p>
<code>
$this->table->set_empty("&amp;nbsp;");
@@ -258,7 +258,7 @@ $this->table->set_empty("&amp;nbsp;");
<h2>$this->table->clear()</h2>
-<p>Lets you clear the table heading and row data. If you need to show multiple tables with different data you should
+<p>Lets you clear the table heading and row data. If you need to show multiple tables with different data you should
to call this function after each table has been generated to empty the previous table information. Example:</p>
<code>
diff --git a/user_guide/libraries/trackback.html b/user_guide/libraries/trackback.html
index 32b1ee258..4f5ca6ce1 100644
--- a/user_guide/libraries/trackback.html
+++ b/user_guide/libraries/trackback.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -101,29 +101,29 @@ else<br />
<li><strong>ping_url</strong> - The URL of the site you are sending the Trackback to. You can send Trackbacks to multiple URLs by separating each URL with a comma.</li>
<li><strong>url</strong> - The URL to YOUR site where the weblog entry can be seen.</li>
<li><strong>title</strong> - The title of your weblog entry.</li>
-<li><strong>excerpt</strong> - The content of your weblog entry. Note: the Trackback class will automatically send only the first 500 characters of your entry. It will also strip all HTML.</li>
+<li><strong>excerpt</strong> - The content of your weblog entry. Note: the Trackback class will automatically send only the first 500 characters of your entry. It will also strip all HTML.</li>
<li><strong>blog_name</strong> - The name of your weblog.</li>
-<li><strong>charset</strong> - The character encoding your weblog is written in. If omitted, UTF-8 will be used.</li>
+<li><strong>charset</strong> - The character encoding your weblog is written in. If omitted, UTF-8 will be used.</li>
</ul>
-<p>The Trackback sending function returns TRUE/FALSE (boolean) on success or failure. If it fails, you can retrieve the error message using:</p>
+<p>The Trackback sending function returns TRUE/FALSE (boolean) on success or failure. If it fails, you can retrieve the error message using:</p>
<code>$this->trackback->display_errors();</code>
<h2>Receiving Trackbacks</h2>
-<p>Before you can receive Trackbacks you must create a weblog. If you don't have a blog yet there's no point in continuing.</p>
+<p>Before you can receive Trackbacks you must create a weblog. If you don't have a blog yet there's no point in continuing.</p>
<p>Receiving Trackbacks is a little more complex than sending them, only because you will need a database table in which to store them,
-and you will need to validate the incoming trackback data. You are encouraged to implement a thorough validation process to
-guard against spam and duplicate data. You may also want to limit the number of Trackbacks you allow from a particular IP within
-a given span of time to further curtail spam. The process of receiving a Trackback is quite simple;
+and you will need to validate the incoming trackback data. You are encouraged to implement a thorough validation process to
+guard against spam and duplicate data. You may also want to limit the number of Trackbacks you allow from a particular IP within
+a given span of time to further curtail spam. The process of receiving a Trackback is quite simple;
the validation is what takes most of the effort.</p>
<h2>Your Ping URL</h2>
-<p>In order to accept Trackbacks you must display a Trackback URL next to each one of your weblog entries. This will be the URL
+<p>In order to accept Trackbacks you must display a Trackback URL next to each one of your weblog entries. This will be the URL
that people will use to send you Trackbacks (we will refer to this as your "Ping URL").</p>
<p>Your Ping URL must point to a controller function where your Trackback receiving code is located, and the URL
@@ -140,7 +140,7 @@ Ping URLs will look something like this:</p>
<h2>Creating a Trackback Table</h2>
-<p>Before you can receive Trackbacks you must create a table in which to store them. Here is a basic prototype for such a table:</p>
+<p>Before you can receive Trackbacks you must create a table in which to store them. Here is a basic prototype for such a table:</p>
<textarea class="textarea" style="width:100%" cols="50" rows="13">
CREATE TABLE trackbacks (
@@ -162,7 +162,7 @@ but to make the data more useful we've added a few more fields in the above tabl
<h2>Processing a Trackback</h2>
-<p>Here is an example showing how you will receive and process a Trackback. The following
+<p>Here is an example showing how you will receive and process a Trackback. The following
code is intended for use within the controller function where you expect to receive Trackbacks.</p>
<code>$this->load->library('trackback');<br />
@@ -196,7 +196,7 @@ $this->trackback->send_success();</code>
<h4>Notes:</h4>
-<p>The entry ID number is expected in the third segment of your URL. This is based on the URI example we gave earlier:</p>
+<p>The entry ID number is expected in the third segment of your URL. This is based on the URI example we gave earlier:</p>
<code>http://example.com/index.php/trackback/receive/<samp>entry_id</samp></code>
@@ -204,12 +204,12 @@ $this->trackback->send_success();</code>
<code>$this->uri->segment(3);</code>
-<p>In our Trackback receiving code above, if the third segment is missing, we will issue an error. Without a valid entry ID, there's no
+<p>In our Trackback receiving code above, if the third segment is missing, we will issue an error. Without a valid entry ID, there's no
reason to continue.</p>
<p>The <dfn>$this->trackback->receive()</dfn> function is simply a validation function that looks at the incoming data
and makes sure it contains the four pieces of data that are required (url, title, excerpt, blog_name).
-It returns TRUE on success and FALSE on failure. If it fails you will issue an error message.</p>
+It returns TRUE on success and FALSE on failure. If it fails you will issue an error message.</p>
<p>The incoming Trackback data can be retrieved using this function:</p>
diff --git a/user_guide/libraries/typography.html b/user_guide/libraries/typography.html
index 9c4272b37..333f77a7d 100644
--- a/user_guide/libraries/typography.html
+++ b/user_guide/libraries/typography.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -71,7 +71,7 @@ Typography Class
<h2>auto_typography()</h2>
-<p>Formats text so that it is semantically and typographically correct HTML. Takes a string as input and returns it with
+<p>Formats text so that it is semantically and typographically correct HTML. Takes a string as input and returns it with
the following formatting:</p>
<ul>
@@ -133,7 +133,7 @@ This function is identical to the native PHP <dfn>nl2br()</dfn> function, except
<h2>protect_braced_quotes</h2>
<p>When using the Typography library in conjunction with the Template Parser library it can often be desirable to protect single
- and double quotes within curly braces. To enable this, set the <kbd>protect_braced_quotes</kbd> class property to <samp>TRUE</samp>.</p>
+ and double quotes within curly braces. To enable this, set the <kbd>protect_braced_quotes</kbd> class property to <samp>TRUE</samp>.</p>
<p>Usage example:</p>
diff --git a/user_guide/libraries/unit_testing.html b/user_guide/libraries/unit_testing.html
index 49c5881e1..a4305129f 100644
--- a/user_guide/libraries/unit_testing.html
+++ b/user_guide/libraries/unit_testing.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -92,7 +92,7 @@ $test_name = 'Adds one plus one';<br />
<br />
$this->unit->run($test, $expected_result, $test_name);</code>
-<p>The expected result you supply can either be a literal match, or a data type match. Here's an example of a literal:</p>
+<p>The expected result you supply can either be a literal match, or a data type match. Here's an example of a literal:</p>
<code>$this->unit->run('Foo', 'Foo');</code>
@@ -100,8 +100,8 @@ $this->unit->run($test, $expected_result, $test_name);</code>
<code>$this->unit->run('Foo', 'is_string');</code>
-<p>Notice the use of "is_string" in the second parameter? This tells the function to evaluate whether your test is producing a string
-as the result. Here is a list of allowed comparison types:</p>
+<p>Notice the use of "is_string" in the second parameter? This tells the function to evaluate whether your test is producing a string
+as the result. Here is a list of allowed comparison types:</p>
<ul>
<li>is_object</li>
@@ -129,18 +129,18 @@ To show a report directly simply echo or return the <var>run</var> function:</p>
<code>echo $this->unit->report();</code>
-<p>The report will be formatted in an HTML table for viewing. If you prefer the raw data you can retrieve an array using:</p>
+<p>The report will be formatted in an HTML table for viewing. If you prefer the raw data you can retrieve an array using:</p>
<code>echo $this->unit->result();</code>
<h2>Strict Mode</h2>
-<p>By default the unit test class evaluates literal matches loosely. Consider this example:</p>
+<p>By default the unit test class evaluates literal matches loosely. Consider this example:</p>
<code>$this->unit->run(1, TRUE);</code>
-<p>The test is evaluating an integer, but the expected result is a boolean. PHP, however, due to it's loose data-typing
+<p>The test is evaluating an integer, but the expected result is a boolean. PHP, however, due to it's loose data-typing
will evaluate the above code as TRUE using a normal equality test:</p>
<code>if (1 == TRUE) echo 'This evaluates as true';</code>
@@ -184,8 +184,8 @@ You can customize which of these items get displayed by using <kbd>$this->unit->
<h3>Creating a Template</h3>
-<p>If you would like your test results formatted differently then the default you can set your own template. Here is an
-example of a simple template. Note the required pseudo-variables:</p>
+<p>If you would like your test results formatted differently then the default you can set your own template. Here is an
+example of a simple template. Note the required pseudo-variables:</p>
<code>
$str = '<br />
diff --git a/user_guide/libraries/uri.html b/user_guide/libraries/uri.html
index 0dbaffa49..884f4b955 100644
--- a/user_guide/libraries/uri.html
+++ b/user_guide/libraries/uri.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -106,7 +106,7 @@ re-routed URI in the event you are using CodeIgniter's <a href="../general/routi
<h2>$this->uri->slash_segment(<var>n</var>)</h2>
<p>This function is almost identical to <dfn>$this->uri->segment()</dfn>, except it adds a trailing and/or leading slash based on the second
-parameter. If the parameter is not used, a trailing slash added. Examples:</p>
+parameter. If the parameter is not used, a trailing slash added. Examples:</p>
<code>$this->uri->slash_segment(<var>3</var>);<br />
$this->uri->slash_segment(<var>3</var>, 'leading');<br />
@@ -130,7 +130,7 @@ re-routed URI in the event you are using CodeIgniter's <a href="../general/routi
<h2>$this->uri->uri_to_assoc(<var>n</var>)</h2>
-<p>This function lets you turn URI segments into and associative array of key/value pairs. Consider this URI:</p>
+<p>This function lets you turn URI segments into and associative array of key/value pairs. Consider this URI:</p>
<code>index.php/user/search/name/joe/location/UK/gender/male</code>
@@ -143,7 +143,7 @@ re-routed URI in the event you are using CodeIgniter's <a href="../general/routi
&nbsp;&nbsp;&nbsp;&nbsp;'gender' => 'male'<br />
)</code>
-<p>The first parameter of the function lets you set an offset. By default it is set to <kbd>3</kbd> since your
+<p>The first parameter of the function lets you set an offset. By default it is set to <kbd>3</kbd> since your
URI will normally contain a controller/function in the first and second segments. Example:</p>
<code>
@@ -173,19 +173,19 @@ re-routed URI in the event you are using CodeIgniter's <a href="../general/routi
<h2>$this->uri->assoc_to_uri()</h2>
-<p>Takes an associative array as input and generates a URI string from it. The array keys will be included in the string. Example:</p>
+<p>Takes an associative array as input and generates a URI string from it. The array keys will be included in the string. Example:</p>
<code>$array = array('product' => 'shoes', 'size' => 'large', 'color' => 'red');<br />
<br />
$str = $this->uri->assoc_to_uri($array);<br />
<br />
-// Produces: product/shoes/size/large/color/red
+// Produces: product/shoes/size/large/color/red
</code>
<h2>$this->uri->uri_string()</h2>
-<p>Returns a string with the complete URI. For example, if this is your full URL:</p>
+<p>Returns a string with the complete URI. For example, if this is your full URL:</p>
<code>http://example.com/index.php/news/local/345</code>
@@ -215,7 +215,7 @@ re-routed URI in the event you are using CodeIgniter's <a href="../general/routi
<h2>$this->uri->segment_array()</h2>
-<p>Returns an array containing the URI segments. For example:</p>
+<p>Returns an array containing the URI segments. For example:</p>
<code>
$segs = $this->uri->segment_array();<br />
diff --git a/user_guide/libraries/user_agent.html b/user_guide/libraries/user_agent.html
index 8989fb2e1..6b23102b1 100644
--- a/user_guide/libraries/user_agent.html
+++ b/user_guide/libraries/user_agent.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -70,13 +70,13 @@ In addition you can get referrer information as well as language and supported c
<h2>User Agent Definitions</h2>
-<p>The user agent name definitions are located in a config file located at: <dfn>application/config/user_agents.php</dfn>. You may add items to the
+<p>The user agent name definitions are located in a config file located at: <dfn>application/config/user_agents.php</dfn>. You may add items to the
various user agent arrays if needed.</p>
<h2>Example</h2>
<p>When the User Agent class is initialized it will attempt to determine whether the user agent browsing your site is
-a web browser, a mobile device, or a robot. It will also gather the platform information if it is available.</p>
+a web browser, a mobile device, or a robot. It will also gather the platform information if it is available.</p>
<code>
@@ -84,7 +84,7 @@ $this->load->library('user_agent');<br />
<br />
if ($this->agent->is_browser())<br />
{<br />
-&nbsp;&nbsp;&nbsp;&nbsp;$agent = $this->agent->browser().' '.$this->agent->version();<br />
+&nbsp;&nbsp;&nbsp;&nbsp;$agent = $this->agent->browser().' '.$this->agent->version();<br />
}<br />
elseif ($this->agent->is_robot())<br />
{<br />
@@ -143,7 +143,7 @@ else<br />
<p>Returns TRUE/FALSE (boolean) if the user agent is a known robot.</p>
<p class="important"><strong>Note:</strong>&nbsp; The user agent library only contains the most common robot
-definitions. It is not a complete list of bots. There are hundreds of them so searching for each one would not be
+definitions. It is not a complete list of bots. There are hundreds of them so searching for each one would not be
very efficient. If you find that some bots that commonly visit your site are missing from the list you can add them to your
<dfn>application/config/user_agents.php</dfn> file.</p>
@@ -176,7 +176,7 @@ very efficient. If you find that some bots that commonly visit your site are mis
<h2>$this->agent->agent_string()</h2>
-<p>Returns a string containing the full user agent string. Typically it will be something like this:</p>
+<p>Returns a string containing the full user agent string. Typically it will be something like this:</p>
<code>Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2</code>
diff --git a/user_guide/libraries/xmlrpc.html b/user_guide/libraries/xmlrpc.html
index 7a8934d39..f7aa6fe42 100644
--- a/user_guide/libraries/xmlrpc.html
+++ b/user_guide/libraries/xmlrpc.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -67,11 +67,11 @@ your own XML-RPC server to receive requests.</p>
<p>Quite simply it is a way for two computers to communicate over the internet using XML.
One computer, which we will call the <dfn>client</dfn>, sends an XML-RPC <strong>request</strong> to
-another computer, which we will call the <dfn>server</dfn>. Once the server receives and processes the request it
+another computer, which we will call the <dfn>server</dfn>. Once the server receives and processes the request it
will send back a <strong>response</strong> to the client.</p>
<p>For example, using the MetaWeblog API, an XML-RPC Client (usually a desktop publishing tool) will
-send a request to an XML-RPC Server running on your site. This request might be a new weblog entry
+send a request to an XML-RPC Server running on your site. This request might be a new weblog entry
being sent for publication, or it could be a request for an existing entry for editing.
When the XML-RPC Server receives this request it will examine it to determine which class/method should be called to process the request.
@@ -127,16 +127,16 @@ if ( ! $this->xmlrpc->send_request())<br />
<h3>Explanation</h3>
-<p>The above code initializes the XML-RPC class, sets the server URL and method to be called (weblogUpdates.ping). The
+<p>The above code initializes the XML-RPC class, sets the server URL and method to be called (weblogUpdates.ping). The
request (in this case, the title and URL of your site) is placed into an array for transportation, and
compiled using the request() function.
-Lastly, the full request is sent. If the <dfn>send_request()</dfn> method returns false we will display the error message
+Lastly, the full request is sent. If the <dfn>send_request()</dfn> method returns false we will display the error message
sent back from the XML-RPC Server.</p>
<h2>Anatomy of a Request</h2>
-<p>An XML-RPC <dfn>request</dfn> is simply the data you are sending to the XML-RPC server. Each piece of data in a request
-is referred to as a <dfn>request parameter</dfn>. The above example has two parameters:
+<p>An XML-RPC <dfn>request</dfn> is simply the data you are sending to the XML-RPC server. Each piece of data in a request
+is referred to as a <dfn>request parameter</dfn>. The above example has two parameters:
The URL and title of your site. When the XML-RPC server receives your request, it will look for parameters it requires.</p>
<p>Request parameters must be placed into an array for transportation, and each parameter can be one
@@ -161,7 +161,7 @@ $request = array (<br />
<br />
$this->xmlrpc->request($request);</code>
-The <a href="#datatypes">Data Types</a> section below has a full list of data types.
+The <a href="#datatypes">Data Types</a> section below has a full list of data types.
@@ -198,7 +198,7 @@ server will load the <dfn>My_blog</dfn> class and call the <dfn>new_entry</dfn>
If the request is for the <var>update_post</var> method, your
server will load the <dfn>My_blog</dfn> class and call the <dfn>update_entry</dfn> function.</p>
-<p>The function names in the above example are arbitrary. You'll decide what they should be called on your server,
+<p>The function names in the above example are arbitrary. You'll decide what they should be called on your server,
or if you are using standardized APIs, like the Blogger or MetaWeblog API, you'll use their function names.</p>
<p>There are two additional configuration keys you may make use of when initializing the server class: <var>debug</var> can be set to TRUE in order to enable debugging, and <var>xss_clean</var> may be set to FALSE to prevent sending data through the Security library's xss_clean function.
@@ -221,12 +221,12 @@ to exist with this prototype:</p>
</code>
<p>The <var>$request</var> variable is an object compiled by the Server, which contains the data sent by the XML-RPC Client.
-Using this object you will have access to the <em>request parameters</em> enabling you to process the request. When
+Using this object you will have access to the <em>request parameters</em> enabling you to process the request. When
you are done you will send a <dfn>Response</dfn> back to the Client.</p>
-<p>Below is a real-world example, using the Blogger API. One of the methods in the Blogger API is <dfn>getUserInfo()</dfn>.
+<p>Below is a real-world example, using the Blogger API. One of the methods in the Blogger API is <dfn>getUserInfo()</dfn>.
Using this method, an XML-RPC Client can send the Server a username and password, in return the Server sends
-back information about that particular user (nickname, user ID, email address, etc.). Here is how the processing
+back information about that particular user (nickname, user ID, email address, etc.). Here is how the processing
function might look:</p>
@@ -272,14 +272,14 @@ In the above example, the output parameters will be the username and password.</
<h2>Formatting a Response</h2>
-<p>Similar to <em>Requests</em>, <em>Responses</em> must be formatted as an array. However, unlike requests, a response is an array
-<strong>that contains a single item</strong>. This item can be an array with several additional arrays, but there
-can be only one primary array index. In other words, the basic prototype is this:</p>
+<p>Similar to <em>Requests</em>, <em>Responses</em> must be formatted as an array. However, unlike requests, a response is an array
+<strong>that contains a single item</strong>. This item can be an array with several additional arrays, but there
+can be only one primary array index. In other words, the basic prototype is this:</p>
-<code>$response = array('Response data', 'array');</code>
+<code>$response = array('Response data', 'array');</code>
<p>Responses, however, usually contain multiple pieces of information. In order to accomplish this we must put the response into its own
-array so that the primary array continues to contain a single piece of data. Here's an example showing how this might be accomplished:</p>
+array so that the primary array continues to contain a single piece of data. Here's an example showing how this might be accomplished:</p>
<code>
$response = array (<br />
@@ -293,9 +293,9 @@ $response = array (<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);
</code>
-<p class="important">Notice that the above array is formatted as a <dfn>struct</dfn>. This is the most common data type for responses.</p>
+<p class="important">Notice that the above array is formatted as a <dfn>struct</dfn>. This is the most common data type for responses.</p>
-<p>As with Requests, a response can be one of the seven data types listed in the <a href="#datatypes">Data Types</a> section.</p>
+<p>As with Requests, a response can be one of the seven data types listed in the <a href="#datatypes">Data Types</a> section.</p>
<h2>Sending an Error Response</h2>
@@ -314,7 +314,7 @@ $response = array (<br />
<h2>Creating Your Own Client and Server</h2>
<p>To help you understand everything we've covered thus far, let's create a couple controllers that act as
-XML-RPC Client and Server. You'll use the Client to send a request to the Server and receive a response.</p>
+XML-RPC Client and Server. You'll use the Client to send a request to the Server and receive a response.</p>
<h3>The Client</h3>
@@ -352,7 +352,7 @@ class Xmlrpc_client extends CI_Controller {
}
?></textarea>
-<p>Note: In the above code we are using a "url helper". You can find more information in the <a href="../general/helpers.html">Helpers Functions</a> page.</p>
+<p>Note: In the above code we are using a "url helper". You can find more information in the <a href="../general/helpers.html">Helpers Functions</a> page.</p>
<h3>The Server</h3>
@@ -381,7 +381,7 @@ class Xmlrpc_server extends CI_Controller {
$response = array(
array(
- 'you_said' => $parameters['0'],
+ 'you_said' => $parameters['0'],
'i_respond' => 'Not bad at all.'),
'struct');
@@ -452,7 +452,7 @@ The Server receives the request and maps it to the "process" function, where a r
$this->xmlrpc->request($request);</code>
<h2>$this->xmlrpc->send_request()</h2>
-<p>The request sending function. Returns boolean TRUE or FALSE based on success for failure, enabling it to be used conditionally.</p>
+<p>The request sending function. Returns boolean TRUE or FALSE based on success for failure, enabling it to be used conditionally.</p>
<h2>$this->xmlrpc->set_debug(TRUE);</h2>
<p>Enables debugging, which will display a variety of information and error data helpful during development.</p>
@@ -463,7 +463,7 @@ $this->xmlrpc->request($request);</code>
<code>echo $this->xmlrpc->display_error();</code>
<h2>$this->xmlrpc->display_response()</h2>
-<p>Returns the response from the remote server once request is received. The response will typically be an associative array.</p>
+<p>Returns the response from the remote server once request is received. The response will typically be an associative array.</p>
<code>$this->xmlrpc->display_response();</code>
<h2>$this->xmlrpc->send_error_message()</h2>
diff --git a/user_guide/libraries/zip.html b/user_guide/libraries/zip.html
index 48e2562be..e6405cc8f 100644
--- a/user_guide/libraries/zip.html
+++ b/user_guide/libraries/zip.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -81,7 +81,7 @@ $this->zip->add_data($name, $data);<br />
// Write the zip file to a folder on your server. Name it "my_backup.zip"<br />
$this->zip->archive('/path/to/directory/my_backup.zip');
<br /><br />
- // Download the file to your desktop. Name it "my_backup.zip"<br />
+ // Download the file to your desktop. Name it "my_backup.zip"<br />
$this->zip->download('my_backup.zip');
</code>
@@ -100,7 +100,7 @@ $this->zip->add_data($name, $data);
</code>
<p>You are allowed multiple calls to this function in order to
-add several files to your archive. Example:</p>
+add several files to your archive. Example:</p>
<code>
$name = 'mydata1.txt';<br />
@@ -139,8 +139,8 @@ $this->zip->add_data($name, $data);
<h2>$this->zip->add_dir()</h2>
-<p>Permits you to add a directory. Usually this function is unnecessary since you can place your data into folders when
-using <dfn>$this->zip->add_data()</dfn>, but if you would like to create an empty folder you can do so. Example:</p>
+<p>Permits you to add a directory. Usually this function is unnecessary since you can place your data into folders when
+using <dfn>$this->zip->add_data()</dfn>, but if you would like to create an empty folder you can do so. Example:</p>
<code>$this->zip->add_dir('myfolder'); // Creates a folder called "myfolder"</code>
@@ -148,49 +148,49 @@ using <dfn>$this->zip->add_data()</dfn>, but if you would like to create an empt
<h2>$this->zip->read_file()</h2>
-<p>Permits you to compress a file that already exists somewhere on your server. Supply a file path and the zip class will
+<p>Permits you to compress a file that already exists somewhere on your server. Supply a file path and the zip class will
read it and add it to the archive:</p>
<code>
$path = '/path/to/photo.jpg';<br /><br />
$this->zip->read_file($path);
<br /><br />
- // Download the file to your desktop. Name it "my_backup.zip"<br />
+ // Download the file to your desktop. Name it "my_backup.zip"<br />
$this->zip->download('my_backup.zip');
</code>
<p>If you would like the Zip archive to maintain the directory structure of the file in it, pass <kbd>TRUE</kbd> (boolean) in the
-second parameter. Example:</p>
+second parameter. Example:</p>
<code>
$path = '/path/to/photo.jpg';<br /><br />
$this->zip->read_file($path, <kbd>TRUE</kbd>);
<br /><br />
- // Download the file to your desktop. Name it "my_backup.zip"<br />
+ // Download the file to your desktop. Name it "my_backup.zip"<br />
$this->zip->download('my_backup.zip');
</code>
-<p>In the above example, <dfn>photo.jpg</dfn> will be placed inside two folders: <kbd>path/to/</kbd></p>
+<p>In the above example, <dfn>photo.jpg</dfn> will be placed inside two folders: <kbd>path/to/</kbd></p>
<h2>$this->zip->read_dir()</h2>
-<p>Permits you to compress a folder (and its contents) that already exists somewhere on your server. Supply a file path to the
-directory and the zip class will recursively read it and recreate it as a Zip archive. All files contained within the
-supplied path will be encoded, as will any sub-folders contained within it. Example:</p>
+<p>Permits you to compress a folder (and its contents) that already exists somewhere on your server. Supply a file path to the
+directory and the zip class will recursively read it and recreate it as a Zip archive. All files contained within the
+supplied path will be encoded, as will any sub-folders contained within it. Example:</p>
<code>
$path = '/path/to/your/directory/';<br /><br />
$this->zip->read_dir($path);
<br /><br />
- // Download the file to your desktop. Name it "my_backup.zip"<br />
+ // Download the file to your desktop. Name it "my_backup.zip"<br />
$this->zip->download('my_backup.zip');
</code>
<p>By default the Zip archive will place all directories listed in the first parameter inside the zip. If you want the tree preceding the target folder to be ignored
-you can pass <kbd>FALSE</kbd> (boolean) in the second parameter. Example:</p>
+you can pass <kbd>FALSE</kbd> (boolean) in the second parameter. Example:</p>
<code>
$path = '/path/to/your/directory/';<br /><br />
@@ -204,7 +204,7 @@ $this->zip->read_dir($path, FALSE);
<h2>$this->zip->archive()</h2>
-<p>Writes the Zip-encoded file to a directory on your server. Submit a valid server path ending in the file name. Make sure the
+<p>Writes the Zip-encoded file to a directory on your server. Submit a valid server path ending in the file name. Make sure the
directory is writable (666 or 777 is usually OK). Example:</p>
<code>$this->zip->archive('/path/to/folder/myarchive.zip'); // Creates a file named myarchive.zip</code>
@@ -223,7 +223,7 @@ that cause the download to happen and the file to be treated as binary.</p>
<h2>$this->zip->get_zip()</h2>
-<p>Returns the Zip-compressed file data. Generally you will not need this function unless you want to do something unique with the data.
+<p>Returns the Zip-compressed file data. Generally you will not need this function unless you want to do something unique with the data.
Example:</p>
<code>
@@ -279,7 +279,7 @@ Previous Topic:&nbsp;&nbsp;<a href="xmlrpc.html"> XML-RPC Class</a>
&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
-Next Topic:&nbsp;&nbsp;<a href="../helpers/array_helper.html">Array Helper</a>
+Next Topic:&nbsp;&nbsp;<a href="caching.html">Caching Class</a>
</p>
<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006 - 2011 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">EllisLab, Inc.</a></p>
</div>
diff --git a/user_guide/license.html b/user_guide/license.html
index bb01a7e8d..ecc5b500d 100644
--- a/user_guide/license.html
+++ b/user_guide/license.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -63,7 +63,7 @@ License Agreement
<p>Copyright (c) 2008 - 2011, EllisLab, Inc.<br />
All rights reserved.</p>
-<p>This license is a legal agreement between you and EllisLab Inc. for the use of CodeIgniter Software (the "Software"). By obtaining the Software you agree to comply with the terms and conditions of this license.</p>
+<p>This license is a legal agreement between you and EllisLab Inc. for the use of CodeIgniter Software (the "Software"). By obtaining the Software you agree to comply with the terms and conditions of this license.</p>
<h2>Permitted Use</h2>
<p>You are permitted to use, copy, modify, and distribute the Software and its documentation, with or without modification, for any purpose, provided that the following conditions are met:</p>
diff --git a/user_guide/nav/hacks.txt b/user_guide/nav/hacks.txt
index 8c17f008a..183481b78 100644
--- a/user_guide/nav/hacks.txt
+++ b/user_guide/nav/hacks.txt
@@ -1,6 +1,6 @@
I did the following hack in moo.fx.js:
-At line 79 in the toggle: function() function, I added:
+At line 79 in the toggle: function() function, I added:
document.getElementById('nav').style.display = 'block';
diff --git a/user_guide/nav/moo.fx.js b/user_guide/nav/moo.fx.js
index 256371d19..b21ee20e0 100755
--- a/user_guide/nav/moo.fx.js
+++ b/user_guide/nav/moo.fx.js
@@ -25,8 +25,8 @@ fx.Base.prototype = {
},
step: function() {
- var time = (new Date).getTime();
- var Tpos = (time - this.startTime) / (this.duration);
+ var time = (new Date).getTime();
+ var Tpos = (time - this.startTime) / (this.duration);
if (time >= this.duration+this.startTime) {
this.now = this.to;
clearInterval (this.timer);
diff --git a/user_guide/nav/nav.js b/user_guide/nav/nav.js
index eaa5f6237..b44994d4d 100644
--- a/user_guide/nav/nav.js
+++ b/user_guide/nav/nav.js
@@ -50,6 +50,8 @@ function create_menu(basepath)
'<li><a href="'+base+'general/helpers.html">Helpers</a></li>' +
'<li><a href="'+base+'general/libraries.html">Using CodeIgniter Libraries</a></li>' +
'<li><a href="'+base+'general/creating_libraries.html">Creating Your Own Libraries</a></li>' +
+ '<li><a href="'+base+'general/drivers.html">Using CodeIgniter Drivers</a></li>' +
+ '<li><a href="'+base+'general/creating_drivers.html">Creating Your Own Drivers</a></li>' +
'<li><a href="'+base+'general/core_classes.html">Creating Core Classes</a></li>' +
'<li><a href="'+base+'general/hooks.html">Hooks - Extending the Core</a></li>' +
'<li><a href="'+base+'general/autoloader.html">Auto-loading Resources</a></li>' +
@@ -58,6 +60,7 @@ function create_menu(basepath)
'<li><a href="'+base+'general/errors.html">Error Handling</a></li>' +
'<li><a href="'+base+'general/caching.html">Caching</a></li>' +
'<li><a href="'+base+'general/profiling.html">Profiling Your Application</a></li>' +
+ '<li><a href="'+base+'general/cli.html">Running via the CLI</a></li>' +
'<li><a href="'+base+'general/managing_apps.html">Managing Applications</a></li>' +
'<li><a href="'+base+'general/environments.html">Handling Multiple Environments</a></li>' +
'<li><a href="'+base+'general/alternative_php.html">Alternative PHP Syntax</a></li>' +
diff --git a/user_guide/nav/prototype.lite.js b/user_guide/nav/prototype.lite.js
index e6c362279..857faae4d 100755
--- a/user_guide/nav/prototype.lite.js
+++ b/user_guide/nav/prototype.lite.js
@@ -1,9 +1,9 @@
-/* Prototype JavaScript framework
- * (c) 2005 Sam Stephenson <sam@conio.net>
+/* Prototype JavaScript framework
+ * (c) 2005 Sam Stephenson <sam@conio.net>
*
- * Prototype is freely distributable under the terms of an MIT-style license.
+ * Prototype is freely distributable under the terms of an MIT-style license.
*
- * For details, see the Prototype web site: http://prototype.conio.net/
+ * For details, see the Prototype web site: http://prototype.conio.net/
*
/*--------------------------------------------------------------------------*/
@@ -11,117 +11,117 @@
//note: this is a stripped down version of prototype, to be used with moo.fx by mad4milk (http://moofx.mad4milk.net).
var Class = {
- create: function() {
+ create: function() {
return function() {
- this.initialize.apply(this, arguments);
+ this.initialize.apply(this, arguments);
}
- }
+ }
}
Object.extend = function(destination, source) {
- for (property in source) {
+ for (property in source) {
destination[property] = source[property];
- }
- return destination;
+ }
+ return destination;
}
Function.prototype.bind = function(object) {
- var __method = this;
- return function() {
+ var __method = this;
+ return function() {
return __method.apply(object, arguments);
- }
+ }
}
function $() {
- var elements = new Array();
+ var elements = new Array();
- for (var i = 0; i < arguments.length; i++) {
+ for (var i = 0; i < arguments.length; i++) {
var element = arguments[i];
if (typeof element == 'string')
- element = document.getElementById(element);
+ element = document.getElementById(element);
if (arguments.length == 1)
- return element;
+ return element;
elements.push(element);
- }
+ }
- return elements;
+ return elements;
}
//-------------------------
document.getElementsByClassName = function(className) {
- var children = document.getElementsByTagName('*') || document.all;
- var elements = new Array();
+ var children = document.getElementsByTagName('*') || document.all;
+ var elements = new Array();
- for (var i = 0; i < children.length; i++) {
+ for (var i = 0; i < children.length; i++) {
var child = children[i];
var classNames = child.className.split(' ');
for (var j = 0; j < classNames.length; j++) {
- if (classNames[j] == className) {
+ if (classNames[j] == className) {
elements.push(child);
break;
- }
+ }
}
- }
+ }
- return elements;
+ return elements;
}
//-------------------------
if (!window.Element) {
- var Element = new Object();
+ var Element = new Object();
}
Object.extend(Element, {
- remove: function(element) {
+ remove: function(element) {
element = $(element);
element.parentNode.removeChild(element);
- },
+ },
- hasClassName: function(element, className) {
+ hasClassName: function(element, className) {
element = $(element);
if (!element)
- return;
+ return;
var a = element.className.split(' ');
for (var i = 0; i < a.length; i++) {
- if (a[i] == className)
+ if (a[i] == className)
return true;
}
return false;
- },
+ },
- addClassName: function(element, className) {
+ addClassName: function(element, className) {
element = $(element);
Element.removeClassName(element, className);
element.className += ' ' + className;
- },
+ },
- removeClassName: function(element, className) {
+ removeClassName: function(element, className) {
element = $(element);
if (!element)
- return;
+ return;
var newClassName = '';
var a = element.className.split(' ');
for (var i = 0; i < a.length; i++) {
- if (a[i] != className) {
+ if (a[i] != className) {
if (i > 0)
- newClassName += ' ';
+ newClassName += ' ';
newClassName += a[i];
- }
+ }
}
element.className = newClassName;
- },
+ },
- // removes whitespace-only text node children
- cleanWhitespace: function(element) {
+ // removes whitespace-only text node children
+ cleanWhitespace: function(element) {
element = $(element);
for (var i = 0; i < element.childNodes.length; i++) {
- var node = element.childNodes[i];
- if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
+ var node = element.childNodes[i];
+ if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
Element.remove(node);
}
- }
+ }
}); \ No newline at end of file
diff --git a/user_guide/overview/appflow.html b/user_guide/overview/appflow.html
index c5af8bc15..3b1c42e4c 100644
--- a/user_guide/overview/appflow.html
+++ b/user_guide/overview/appflow.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -67,7 +67,7 @@ Appflow
<li>The index.php serves as the front controller, initializing the base resources needed to run CodeIgniter.</li>
<li>The Router examines the HTTP request to determine what should be done with it.</li>
<li>If a cache file exists, it is sent directly to the browser, bypassing the normal system execution.</li>
-<li>Security. Before the application controller is loaded, the HTTP request and any user submitted data is filtered for security.</li>
+<li>Security. Before the application controller is loaded, the HTTP request and any user submitted data is filtered for security.</li>
<li>The Controller loads the model, core libraries, helpers, and any other resources needed to process the specific request.</li>
<li>The finalized View is rendered then sent to the web browser to be seen. If caching is enabled, the view is cached first so
that on subsequent requests it can be served.</li>
diff --git a/user_guide/overview/at_a_glance.html b/user_guide/overview/at_a_glance.html
index 9cbc8afb7..1175e7f42 100644
--- a/user_guide/overview/at_a_glance.html
+++ b/user_guide/overview/at_a_glance.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -60,7 +60,7 @@ What is CodeIgniter?
<h2>CodeIgniter is an Application Framework</h2>
-<p>CodeIgniter is a toolkit for people who build web applications using PHP. Its goal is to enable you to develop projects much faster than you could if you were writing code
+<p>CodeIgniter is a toolkit for people who build web applications using PHP. Its goal is to enable you to develop projects much faster than you could if you were writing code
from scratch, by providing a rich set of libraries for commonly needed tasks, as well as a simple interface and
logical structure to access these libraries. CodeIgniter lets you creatively focus on your project by
minimizing the amount of code needed for a given task.</p>
@@ -70,7 +70,7 @@ minimizing the amount of code needed for a given task.</p>
For more information please read the <a href="../license.html">license agreement</a>.</p>
<h2>CodeIgniter is Light Weight</h2>
-<p>Truly light weight. The core system requires only a few very small libraries. This is in stark contrast to many frameworks that require significantly more resources.
+<p>Truly light weight. The core system requires only a few very small libraries. This is in stark contrast to many frameworks that require significantly more resources.
Additional libraries are loaded dynamically upon request, based on your needs for a given process, so the base system
is very lean and quite fast.
</p>
@@ -84,7 +84,7 @@ is very lean and quite fast.
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 detail on its own page.</p>
<h2>CodeIgniter Generates Clean URLs</h2>
-<p>The URLs generated by CodeIgniter are clean and search-engine friendly. Rather than using the standard "query string"
+<p>The URLs generated by CodeIgniter are clean and search-engine friendly. Rather than using the standard "query string"
approach to URLs that is synonymous with dynamic systems, CodeIgniter uses a segment-based approach:</p>
<code>example.com/<var>news</var>/<dfn>article</dfn>/<samp>345</samp></code>
@@ -92,7 +92,7 @@ approach to URLs that is synonymous with dynamic systems, CodeIgniter uses a seg
<p>Note: By default the index.php file is included in the URL but it can be removed using a simple .htaccess file.</p>
<h2>CodeIgniter Packs a Punch</h2>
-<p>CodeIgniter comes with full-range of libraries that enable the most commonly needed web development tasks,
+<p>CodeIgniter comes with full-range of libraries that enable the most commonly needed web development tasks,
like accessing a database, sending email, validating form data, maintaining sessions, manipulating images, working with XML-RPC data and
much more.</p>
@@ -104,7 +104,7 @@ much more.</p>
<p>Although CodeIgniter <em>does</em> come with a simple template parser that can be optionally used, it does not force you to use one.
Template engines simply can not match the performance of native PHP, and the syntax that must be learned to use a template
-engine is usually only marginally easier than learning the basics of PHP. Consider this block of PHP code:</p>
+engine is usually only marginally easier than learning the basics of PHP. Consider this block of PHP code:</p>
<code>&lt;ul><br />
<br />
@@ -133,7 +133,7 @@ back into PHP to run. Since one of our goals is <em>maximum performance</em>, we
<h2>CodeIgniter is Thoroughly Documented</h2>
-<p>Programmers love to code and hate to write documentation. We're no different, of course, but
+<p>Programmers love to code and hate to write documentation. We're no different, of course, but
since documentation is <strong>as important</strong> as the code itself,
we are committed to doing it. Our source code is extremely clean and well commented as well.</p>
diff --git a/user_guide/overview/cheatsheets.html b/user_guide/overview/cheatsheets.html
index 764d6d9e1..1c58c584f 100644
--- a/user_guide/overview/cheatsheets.html
+++ b/user_guide/overview/cheatsheets.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
diff --git a/user_guide/overview/features.html b/user_guide/overview/features.html
index 6dfd15d90..4209463b1 100644
--- a/user_guide/overview/features.html
+++ b/user_guide/overview/features.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -59,10 +59,10 @@ Features
<h1>CodeIgniter Features</h1>
<p>Features in and of themselves are a very poor way to judge an application since they tell you nothing
-about the user experience, or how intuitively or intelligently it is designed. Features
+about the user experience, or how intuitively or intelligently it is designed. Features
don't reveal anything about the quality of the code, or the performance, or the attention to detail, or security practices.
The only way to really judge an app is to try it and get to know the code. <a href="../installation/">Installing</a>
-CodeIgniter is child's play so we encourage you to do just that. In the mean time here's a list of CodeIgniter's main features.</p>
+CodeIgniter is child's play so we encourage you to do just that. In the mean time here's a list of CodeIgniter's main features.</p>
<ul>
<li>Model-View-Controller Based System</li>
@@ -73,7 +73,7 @@ CodeIgniter is child's play so we encourage you to do just that. In the mean ti
<li>Security and XSS Filtering</li>
<li>Session Management</li>
<li>Email Sending Class. Supports Attachments, HTML/Text email, multiple protocols (sendmail, SMTP, and Mail) and more.</li>
-<li>Image Manipulation Library (cropping, resizing, rotating, etc.). Supports GD, ImageMagick, and NetPBM</li>
+<li>Image Manipulation Library (cropping, resizing, rotating, etc.). Supports GD, ImageMagick, and NetPBM</li>
<li>File Uploading Class</li>
<li>FTP Class</li>
<li>Localization</li>
diff --git a/user_guide/overview/getting_started.html b/user_guide/overview/getting_started.html
index 5c00aba3d..168332644 100644
--- a/user_guide/overview/getting_started.html
+++ b/user_guide/overview/getting_started.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -57,7 +57,7 @@ Getting Started
<h1>Getting Started With CodeIgniter</h1>
-<p>Any software application requires some effort to learn. We've done our best to minimize the learning
+<p>Any software application requires some effort to learn. We've done our best to minimize the learning
curve while making the process as enjoyable as possible.
</p>
diff --git a/user_guide/overview/goals.html b/user_guide/overview/goals.html
index bf7bc8fa2..7f1f7678e 100644
--- a/user_guide/overview/goals.html
+++ b/user_guide/overview/goals.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -67,9 +67,9 @@ rejecting anything that doesn't further the stated objective.</p>
<p>From a technical and architectural standpoint, CodeIgniter was created with the following objectives:</p>
<ul>
-<li><strong>Dynamic Instantiation.</strong> In CodeIgniter, components are loaded and routines executed only when requested, rather than globally. No assumptions are made by the system regarding what may be needed beyond the minimal core resources, so the system is very light-weight by default. The events, as triggered by the HTTP request, and the controllers and views you design will determine what is invoked.</li>
-<li><strong>Loose Coupling.</strong> Coupling is the degree to which components of a system rely on each other. The less components depend on each other the more reusable and flexible the system becomes. Our goal was a very loosely coupled system.</li>
-<li><strong>Component Singularity.</strong> Singularity is the degree to which components have a narrowly focused purpose. In CodeIgniter, each class and its functions are highly autonomous in order to allow maximum usefulness.</li>
+<li><strong>Dynamic Instantiation.</strong> In CodeIgniter, components are loaded and routines executed only when requested, rather than globally. No assumptions are made by the system regarding what may be needed beyond the minimal core resources, so the system is very light-weight by default. The events, as triggered by the HTTP request, and the controllers and views you design will determine what is invoked.</li>
+<li><strong>Loose Coupling.</strong> Coupling is the degree to which components of a system rely on each other. The less components depend on each other the more reusable and flexible the system becomes. Our goal was a very loosely coupled system.</li>
+<li><strong>Component Singularity.</strong> Singularity is the degree to which components have a narrowly focused purpose. In CodeIgniter, each class and its functions are highly autonomous in order to allow maximum usefulness.</li>
</ul>
<p>CodeIgniter is a dynamically instantiated, loosely coupled system with high component singularity. It strives for simplicity, flexibility, and high performance in a small footprint package.</p>
diff --git a/user_guide/overview/index.html b/user_guide/overview/index.html
index 63eb5e930..bbe3e36f3 100644
--- a/user_guide/overview/index.html
+++ b/user_guide/overview/index.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
diff --git a/user_guide/overview/mvc.html b/user_guide/overview/mvc.html
index 0b0fb25ee..9eb327a95 100644
--- a/user_guide/overview/mvc.html
+++ b/user_guide/overview/mvc.html
@@ -28,7 +28,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
@@ -60,12 +60,12 @@ MVC
<p>CodeIgniter is based on the Model-View-Controller development pattern.
-MVC is a software approach that separates application logic from presentation. In practice, it permits your web pages to contain minimal scripting since the presentation is separate from the PHP scripting.</p>
+MVC is a software approach that separates application logic from presentation. In practice, it permits your web pages to contain minimal scripting since the presentation is separate from the PHP scripting.</p>
<ul>
<li>The <strong>Model</strong> represents your data structures. Typically your model classes will contain functions that help you
-retrieve, insert, and update information in your database.</li>
-<li>The <strong>View</strong> is the information that is being presented to a user. A View will normally be a web page, but
+retrieve, insert, and update information in your database.</li>
+<li>The <strong>View</strong> is the information that is being presented to a user. A View will normally be a web page, but
in CodeIgniter, a view can also be a page fragment like a header or footer. It can also be an RSS page, or any other type of "page".</li>
<li>The <strong>Controller</strong> serves as an <em>intermediary</em> between the Model, the View,
and any other resources needed to process the HTTP request and generate a web page.</li>
diff --git a/user_guide/toc.html b/user_guide/toc.html
index 9f51b1e91..f6a5fe0ec 100644
--- a/user_guide/toc.html
+++ b/user_guide/toc.html
@@ -29,7 +29,7 @@
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
-<td><h1>CodeIgniter User Guide Version 2.0.0</h1></td>
+<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
</tr>
</table>
</div>
@@ -103,6 +103,8 @@ Table of Contents
<li><a href="./general/helpers.html">Helpers</a></li>
<li><a href="./general/libraries.html">Using CodeIgniter Libraries</a></li>
<li><a href="./general/creating_libraries.html">Creating Your Own Libraries</a></li>
+ <li><a href="./general/drivers.html">Using CodeIgniter Drivers</a></li>
+ <li><a href="./general/creating_drivers.html">Creating Your Own Drivers</a></li>
<li><a href="./general/core_classes.html">Creating Core Classes</a></li>
<li><a href="./general/hooks.html">Hooks - Extending the Core</a></li>
<li><a href="./general/autoloader.html">Auto-loading Resources</a></li>
@@ -111,7 +113,9 @@ Table of Contents
<li><a href="./general/errors.html">Error Handling</a></li>
<li><a href="./general/caching.html">Caching</a></li>
<li><a href="./general/profiling.html">Profiling Your Application</a></li>
+ <li><a href="./general/cli.html">Running via the CLI</a></li>
<li><a href="./general/managing_apps.html">Managing Applications</a></li>
+ <li><a href="./general/environments.html">Handling Multiple Environments</a></li>
<li><a href="./general/alternative_php.html">Alternative PHP Syntax</a></li>
<li><a href="./general/security.html">Security</a></li>
<li><a href="./general/styleguide.html">PHP Style Guide</a></li>
diff --git a/user_guide/userguide.css b/user_guide/userguide.css
index f93ff0d75..b08f4fb00 100644
--- a/user_guide/userguide.css
+++ b/user_guide/userguide.css
@@ -391,7 +391,7 @@ form {
.select {
background-color: #fff;
- font-size: 11px;
+ font-size: 11px;
font-weight: normal;
color: #333;
padding: 0;