<!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>

<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' />

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Change Log : CodeIgniter User Guide</title>

</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.0</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;
Change Log
</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>Change Log</h1>

<h2>Version 2.0.0</h2>
<p>Release Date: not yet released<br />
Hg Tag: </p>

<ul>
	<li>General changes
		<ul>
			<li>PHP 4 support is deprecated.  Features new to 2.0.0 may not support PHP 4, and all legacy features will no longer support PHP 4 as of 2.1.0.</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>Added new special Library type: <a href="./general/drivers.html">Drivers</a>.</li>
			<li>Moved the application folder outside of the system folder.</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 <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>In-development code is now hosted at <a href="http://bitbucket.org/ellislab/codeigniter/">BitBucket</a>.</li>
		</ul>
	<li>Libraries
		<ul>
			<li>Added <a href="./libraries/security.html">Security library</a>, which now contains the <dfn>xss_clean</dfn> function, <dfn>filename_security</dfn> function and other security related functions.</li>
			<li>Added CSRF (Cross-site Reference Forgery) protection to the <a href="./libraries/security.html">Security library</a>.</li>
			<li>Added <var>$parse_exec_vars</var> property to Output library.</li>
			<li>Added ability to enable / disable individual sections of the <a href="general/profiling.html">Profiler</a></li>
			<li>Added a wildcard option <kbd>$config['allowed_types'] = '*'</kbd> to the <a href="./libraries/file_uploading.html">File Uploading Class</a>.</li>
			<li>Added an 'object' config variable to the XML-RPC Server library so that one can specify the object to look for requested methods, instead of assuming it is in the $CI superobject.</li>
			<li>Added "is_object" into the list of unit tests capable of being run.</li>
			<li>Table library will generate an empty cell with a blank string, or NULL value.</li>
			<li>Added ability to set tag attributes for individual cells in the Table library</li>
			<li>Added a <kbd>parse_string()</kbd> method to the <a href="libraries/parser.html">Parser Class</a>.</li>
			<li>Added HTTP headers and Config information to the <a href="general/profiling.html">Profiler</a> output.</li>
			<li>Added Chrome and Flock to the list of detectable browsers by <kbd>browser()</kbd> in the <a href="libraries/user_agent.html">User Agent Class</a>.</li>
			<li>The <a href="libraries/unit_testing.html">Unit Test Class</a> now has an optional "notes" field available to it, and allows for discrete display of test result items using <kbd>$this->unit->set_test_items()</kbd>.</li>
			<li>Added a <kbd>$xss_clean</kbd> class variable to the XMLRPC library, enabling control over the use of the Security library's <kbd>xss_clean()</kbd> method.</li>
			<li>Added a <kbd>download()</kbd> method to the <a href="libraries/ftp.html">FTP library</a></li>
		</ul>
	</li>
	<li>Database
		<ul>
			<li>Added <kbd>swap_pre</kbd> value to <a href="./database/configuration.html">database configuration</a>.</li>
			<li>Added <kbd>autoinit</kbd> value to <a href="./database/configuration.html">database configuration</a>.</li>
			<li>Added <kbd>stricton</kbd> value to <a href="./database/configuration.html">database configuration</a>.</li>
			<li>Added <kbd>database_exists()</kbd> to the <a href="database/utilities.html">Database Utilities Class</a>.</li>
			<li>Semantic change to db->version() function to allow a list of exceptions for databases with functions to return version string instead of specially formed SQL queries. Currently this list only includes Oracle and SQLite.</li>
			<li>Fixed a bug where driver specific table identifier protection could lead to malformed queries in the <kbd>field_data()</kbd> functions.</li>
			<li>Fixed a bug where an undefined class variable was referenced in database drivers.</li>
		</ul>
	</li>
	<li>Helpers
		<ul>
			<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
				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> 
			<li>Added an optional second parameter to <kbd>byte_format()</kbd> in the <a href="helpers/number_helper.html">Number Helper</a> to allow for decimal precision.</li>
			<li>Added alpha, and sha1 string types to <kbd>random_string()</kbd> in the <a href="helpers/string_helper.html">String Helper</a>.</li>
			<li>Modified <kbd>prep_url()</kbd> so as to not prepend http:// if the supplied string already has a scheme.</li>
		</ul>
	</li>
	<li>Other Changes
		<ul>
			<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>
			<li>Added "default" to the list <a href="general/reserved_names.html">Reserved Names</a>.</li>
			<li>Added 'application/x-msdownload' for .exe files and ''application/x-gzip-compressed' for .tgz files to config/mimes.php.</li>
			<li>Eliminated a call to is_really_writable() on each request unless it is really needed (Output caching)</li>
			<li>Documented <kbd>append_output()</kbd> in the <a href="libraries/output.html">Output Class</a>.</li>
			<li>Documented a second argument in the <kbd>decode()</kbd> function for the <a href="libraries/encryption.html">Encryption Class</a>.</li>
			<li>Documentd db->close().</li>
		</ul>
	</li>
</ul>

<h3>Bug fixes for 2.0.0</h3>
<ul>
	<li>Fixed a bug where a failed query would not have a saved query execution time causing errors in the Profiler</li>
	<li>Fixed a bug that was writing log entries when multiple identical helpers and plugins were loaded.</li>
	<li>Fixed assorted user guide typos or examples (#10693, #8951, #7825, #8660, #7883, #6771, #10656).</li>
	<li>Fixed a language key in the profiler: "profiler_no_memory_usage" to "profiler_no_memory".</li>
	<li>Fixed an error in the Zip library that didn't allow downloading on PHP 4 servers.</li>
	<li>Fixed a bug in the Form Validation library where fields passed as rule parameters were not being translated (#9132)</li>
	<li>Modified inflector helper to properly pluralize words that end in 'ch' or 'sh'</li>
	<li>Fixed a bug in xss_clean() that was not allowing hyphens in query strings of submitted URLs.</li>
	<li>Fixed bugs in get_dir_file_info() and get_file_info() in the File Helper with recursion, and file paths on Windows.</li>
	<li>Fixed a bug where Active Record override parameter would not let you disable Active Record if it was enabled in your database config file.</li>
	<li>Fixed a bug in reduce_double_slashes() in the String Helper to properly remove duplicate leading slashes (#7585)</li>
	<li>Fixed a bug in values_parsing() of the XML-RPC library which prevented NULL variables typed as 'string' from being handled properly.</li>
	<li>Fixed a bug were form_open_multipart() didn't accept string attribute arguments (#10930).</li>
	<li>Fixed a bug (#10470) where <kdb>get_mime_by_extension()</kbd> was case sensitive.</li>
	<li>Fixed a bug where some error messages for the SQLite and Oracle drivers would not display.</li>
	<li>Fixed a bug where files created with the Zip Library would result in file creation dates of 1980.</li>
	<li>Fixed a bug where extending the Controller class would result in a fatal PHP error.</li>
</ul>

<h2>Version 1.7.2</h2>
<p>Release Date: September 11, 2009<br />
Hg Tag: v1.7.2</p>

<ul>
	<li>Libraries
		<ul>
			<li>Added a new <a href="libraries/cart.html">Cart Class</a>.</li>
			<li>Added the ability to pass $config['file_name'] for the <a href="libraries/file_uploading.html">File Uploading Class</a> and rename the uploaded file.</li>
			<li>Changed order of listed user-agents so Safari would more accurately report itself. (#6844)</li>
		</ul>
	</li>
	<li>Database
		<ul>
			<li>Switched from using gettype() in escape() to is_* methods, since future PHP versions might change its output.</li>
			<li>Updated all database drivers to handle arrays in escape_str()</li>
			<li>Added escape_like_str() method for escaping strings to be used in LIKE conditions</li>
			<li>Updated Active Record to utilize the new LIKE escaping mechanism.</li>
			<li>Added reconnect() method to DB drivers to try to keep alive / reestablish a connection after a long idle.</li>
			<li>Modified MSSQL driver to use mssql_get_last_message() for error messages.</li>
		</ul>
	</li>
	<li>Helpers
		<ul>
			<li>Added <kbd>form_multiselect()</kbd> to the <a href="helpers/form_helper.html">Form helper</a>.</li>
			<li>Modified <kbd>form_hidden()</kbd> in the <a href="helpers/form_helper.html">Form helper</a> to accept multi-dimensional arrays.</li>
			<li>Modified <kbd>form_prep()</kbd> in the <a href="helpers/form_helper.html">Form helper</a> to keep track of prepped fields to avoid multiple prep/mutation from subsequent calls which can occur when using Form Validation
				and form helper functions to output form fields.</li>
			<li>Modified <kbd>directory_map()</kbd> in the <a href="helpers/directory_helper.html">Directory helper</a> to allow the inclusion of hidden files, and to return FALSE on failure to read directory.</li>
			<li>Modified the <a href="helpers/smiley_helper.html">Smiley helper</a> to work with multiple fields and insert the smiley at the last known cursor position.</li>
		</ul>
	</li>
	<li>General
		<ul>
			<li>Compatible with PHP 5.3.0</li>
			<li>Modified <a href="general/errors.html">show_error()</a> to allow sending of HTTP server response codes.</li>
			<li>Modified <a href="general/errors.html">show_404()</a> to send 404 status code, removing non-CGI compatible header() statement from error_404.php template.</li>
			<li>Added set_status_header() to the <a href="general/common_functions.html">Common functions<a> to allow use when the Output class is unavailable.</li>
			<li>Added is_php() to <a href="general/common_functions.html">Common functions</a> to facilitate PHP version comparisons.</p> 
			<li>Added 2 CodeIgniter "cheatsheets" (thanks to DesignFellow.com for this contribution).</li>
		</ul>
	</li>
</ul>

<h3>Bug fixes for 1.7.2</h3>
<ul>
	<li>Fixed assorted user guide typos or examples (#6743, #7214, #7516, #7287, #7852, #8224, #8324, #8349).</li>
	<li>Fixed a bug in the Form Validation library where multiple callbacks weren't working (#6110)</li>
	<li>doctype helper default value was missing a "1".</li>
	<li>Fixed a bug in the language class when outputting an error for an unfound file.</li>
	<li>Fixed a bug in the Calendar library where the shortname was output for "May".</li>
	<li>Fixed a bug with ORIG_PATH_INFO that was allowing URIs of just a slash through.</li>
	<li>Fixed a fatal error in the Oracle and ODBC drivers (#6752)</li>
	<li>Fixed a bug where xml_from_result() was checking for a nonexistent method.</li>
	<li>Fixed a bug where Database Forge's add_column and modify_column were not looping through when sent multiple fields.</li>
	<li>Fixed a bug where the File Helper was using '/' instead of the DIRECTORY_SEPARATOR constant.</li>
	<li>Fixed a bug to prevent PHP errors when attempting to use sendmail on servers that have manually disabled the PHP popen() function.</li>
	<li>Fixed a bug that would cause PHP errors in XML-RPC data if the PHP data type did not match the specified XML-RPC type.</li>
	<li>Fixed a bug in the XML-RPC class with parsing dateTime.iso8601 data types.</li>
	<li>Fixed a case sensitive string replacement in xss_clean()</li>
	<li>Fixed a bug in form_textarea() where form data was not prepped correctly.</li>
	<li>Fixed a bug in form_prep() causing it to not preserve entities in the user's original input when called back into a form element</li>
	<li>Fixed a bug in _protect_identifiers() where the swap prefix ($swap_pre) was not being observed.</li>
	<li>Fixed a bug where the 400 status header sent with the 'disallowed URI characters' was not compatible with CGI environments.</li> 
	<li>Fixed a bug in the typography class where heading tags could have paragraph tags inserted when using auto_typography().</li>
</ul>

<h2>Version 1.7.1</h2>
<p>Release Date: February 10, 2009<br />
Hg Tag: 1.7.1</p>

<ul>
	<li>Libraries
		<ul>
			<li>Fixed an arbitrary script execution security flaw (#6068) in the Form Validation library (thanks to hkk)</li>
			<li>Changed default current page indicator in the Pagination library to use &lt;strong&gt; instead of &lt;b&gt;</li>
			<li>A "HTTP/1.1 400 Bad Request" header is now sent when disallowed characters are encountered.</li>
			<li>Added &lt;big&gt;, &lt;small&gt;, &lt;q&gt;, and &lt;tt&gt; to the Typography parser's inline elements.</li>
			<li>Added more accurate error reporting for the Email library when using sendmail.</li>
			<li>Removed a strict type check from the <kbd>rotate()</kbd> function of the <a href="libraries/image_lib.html">Image Manipulation Class</a>.</li>
			<li>Added enhanced error checking in file saving in the Image library when using the GD lib.</li>
			<li>Added an additional newline between multipart email headers and the MIME message text for better compatibility with a variety of MUAs.</li>
			<li>Made modest improvements to efficiency and accuracy of explode_name() in the Image lib.</li>
		</ul>
	</li>
	<li>Database
		<ul>
			<li>Added where_in to the list of expected arguments received by <kbd>delete()</kbd>.</li>
		</ul>
	</li>
	<li>Helpers
		<ul>
			<li>Added the ability to have optgroups in <kbd>form_dropdown()</kbd> within the <a href="helpers/form_helper.html">form helper</a>.</li>
			<li>Added a doctype() function to the <a href="helpers/html_helper.html">HTML helper</a>.</li>
			<li>Added ability to force lowercase for <kbd>url_title()</kbd> in the <a href="helpers/url_helper.html">URL helper</a>.</li>
			<li>Changed the default "type" of <kbd>form_button()</kbd> to "button" from "submit" in the <a href="helpers/form_helper.html">form helper</a>.</li>
			<li>Changed redirect() in the URL helper to allow redirections to URLs outside of the CI site.</li>
			<li>Updated get_cookie() to try to fetch the cookie using the global cookie prefix if the requested cookie name doesn't exist.</li>
		</ul>
	</li>
	<li>Other Changes
		<ul>
			<li>Improved security in <kbd>xss_clean()</kbd> to help prevent attacks targeting Internet Explorer.</li>
			<li>Added 'application/msexcel' to config/mimes.php for .xls files.</li>
			<li>Added 'proxy_ips' config item to whitelist reverse proxy servers from which to trust the HTTP_X_FORWARDED_FOR header to
				to determine the visitor's IP address.</li>
			<li>Improved accuracy of Upload::is_allowed_filetype() for images (#6715)</li>
		</ul>
	</li>
</ul>

<h3>Bug fixes for 1.7.1</h3>
<ul>
	<li>Database
		<ul>
			<li>Fixed a bug when doing 'random' on order_by() (#5706).</li>
			<li>Fixed a bug where adding a primary key through Forge could fail (#5731).</li>
			<li>Fixed a bug when using DB cache on multiple databases (#5737).</li>
			<li>Fixed a bug where TRUNCATE was not considered a "write" query (#6619).</li>
			<li>Fixed a bug where csv_from_result() was checking for a nonexistent method.</li>
			<li>Fixed a bug _protect_identifiers() where it was improperly removing all pipe symbols from items</li>
		</ul>
	</li>
	<li>Fixed assorted user guide typos or examples (#5998, #6093, #6259, #6339, #6432, #6521).</li>
	<li>Fixed a bug in the MySQLi driver when no port is specified</li>
	<li>Fixed a bug (#5702), in which the field label was not being fetched properly, when "matching" one field to another.</li>
	<li>Fixed a bug in which identifers were not being escaped properly when reserved characters were used.</li>
	<li>Fixed a bug with the regular expression used to protect submitted paragraph tags in auto typography.</li>
	<li>Fixed a bug where double dashes within tag attributes were being converted to em dash entities.</li>
	<li>Fixed a bug where double spaces within tag attributes were being converted to non-breaking space entities.</li>
	<li>Fixed some accuracy issues with curly quotes in Typography::format_characters()</li>
	<li>Changed a few docblock comments to reflect actual return values.</li>
	<li>Fixed a bug with high ascii characters in subject and from email headers.</li>
	<li>Fixed a bug in xss_clean() where whitespace following a validated character entity would not be preserved.</li>
	<li>Fixed a bug where HTML comments and &lt;pre&gt; tags were being parsed in Typography::auto_typography().</li>
	<li>Fixed a bug with non-breaking space cleanup in Typography::auto_typography().</li>
	<li>Fixed a bug in database escaping where a compound statement (ie: SUM()) wasn't handled correctly with database prefixes.</li>
	<li>Fixed a bug when an opening quote is preceded by a paragraph tag and immediately followed by another tag.</li>
	<li>Fixed a bug in the Text Helper affecting some locales where word_censor() would not work on words beginning or ending with an accented character.</li>
	<li>Fixed a bug in the Text Helper character limiter where the provided limit intersects the last word of the string.</li>
	<li>Fixed a bug (#6342) with plural() in the Inflection helper with words ending in "y".</li>
	<li>Fixed bug (#6517) where Routed URI segments returned by URI::rsegment() method were incorrect for the default controller.</li>
	<li>Fixed a bug (#6706) in the Security Helper where xss_clean() was using a deprecated second argument.</li>
	<li>Fixed a bug in the URL helper url_title() function where trailing periods were allowed at the end of a URL.</li>
	<li>Fixed a bug (#6669) in the Email class when CRLF's are used for the newline character with headers when used with the "mail" protocol.</li>
	<li>Fixed a bug (#6500) where URI::A_filter_uri() was exit()ing an error instead of using show_error().</li>
	<li>Fixed a bug (#6592) in the File Helper where get_dir_file_info() where recursion was not occurring properly.</li>
	<li>Tweaked Typography::auto_typography() for some edge-cases.</li>
</ul>


<h2>Version 1.7</h2>
<p>Release Date: October 23, 2008<br />
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>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>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>
		</ul>
	</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>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>
			<li>Added driver name variable in each DB driver, based on bug report #4436.</li>
		</ul>
	</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>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>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>
			<li>Updated <a href="helpers/date_helper.html">Date helper</a> to match the world's current time zones and offsets.</li>
			<li>Modified url_title() in the <a href="helpers/url_helper.html">URL helper</a> to remove characters and digits that are part of
				character entities, to allow dashes, underscores, and periods regardless of the $separator, and to allow uppercase characters.</li>
			<li>Added support for arbitrary attributes in anchor_popup() of the <a href="helpers/url_helper.html">URL helper</a>.</li>
		</ul>
	</li>
	<li>Other Changes
		<ul>
			<li>Added <a href="./general/styleguide.html">PHP Style Guide</a> to docs.</li>
			<li>Added sanitization in <kbd>xss_clean()</kbd> for a deprecated HTML tag that could be abused in user input in Internet Explorer.</li>
			<li>Added a few openxml document mime types, and an additional mobile agent to mimes.php and user_agents.php respectively.</li>
			<li>Added a file lock check during caching, before trying to write to the file.</li>
			<li>Modified Cookie key cleaning to unset a few troublesome key names that can be present in certain environments, preventing CI from halting execution.</li>
			<li>Changed the output of the profiler to use style attribute rather than clear, and added the id "codeigniter_profiler" to the container div.</li>
		</ul>
	</li>
</ul>

<h3>Bug fixes for 1.7.0</h3>
<ul>
	<li>Fixed bug in <kbd>xss_clean()</kbd> that could remove some desirable tag attributes.</li>
	<li>Fixed assorted user guide typos or examples (#4807, #4812, #4840, #4862, #4864, #4899, #4930, #5006, #5071, #5158, #5229, #5254, #5351).</li>
	<li>Fixed an edit from 1.6.3 that made the $robots array in user_agents.php go poof.</li>
	<li>Fixed a bug in the <a href="libraries/email.html">Email library</a> with quoted-printable encoding improperly encoding space and tab characters.</li>
	<li>Modified XSS sanitization to no longer add semicolons after &amp;[single letter], such as in M&amp;M's, B&amp;B, etc.</li>
	<li>Modified XSS sanitization to no longer strip XHTML image tags of closing slashes.</li>
	<li>Fixed a bug in the Session class when database sessions are used where upon session update all userdata would be errantly written to the session cookie.</li>
	<li>Fixed a bug (#4536) in backups with the MySQL driver where some legacy code was causing certain characters to be double escaped.</li>
	<li>Fixed a routing bug (#4661) that occurred when the default route pointed to a subfolder.</li>
	<li>Fixed the spelling of "Dhaka" in the <kbd>timezone_menu()</kbd> function of the <a href="helpers/date_helper.html">Date helper.</a></li>
	<li>Fixed the spelling of "raspberry" in config/smileys.php.</li>
	<li>Fixed incorrect parenthesis in <kbd>form_open()</kbd> function (#5135).</li>
	<li>Fixed a bug that was ignoring case when comparing controller methods (#4560).</li>
	<li>Fixed a bug (#4615) that was not setting SMTP authorization settings when using the initialize function.</li>
	<li>Fixed a bug in <kbd>highlight_code()</kbd> in the <a href="helpers/text_helper.html">Text helper</a> that would leave a stray &lt;/span&gt; in certain cases.</li>
	<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 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 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>
	<li>Fixed a bug in the Session class that was disallowing slashes in the serialized array.</li>
	<li>Fixed a Form Validation bug in which the "isset" error message was being trigged by the "required" rule.</li>
	<li>Fixed a spelling error in a Loader error message.</li>
	<li>Fixed a bug (5050) with IP validation with empty segments.</li>
	<li>Fixed a bug in which the parser was being greedy if multiple identical sets of tags were encountered.</li>
</ul>

<h2>Version 1.6.3</h2>
<p>Release Date: June 26, 2008<br />
Hg Tag: v1.6.3</p>

<p>Version 1.6.3 is a security and maintenance release and is recommended for all users.</p>
<ul>
	<li>Database
		<ul>
			<li>Modified MySQL/MySQLi Forge class to give explicit names to keys</li>
			<li>Added ability to set multiple column non-primary keys to the <a href="database/forge.html">Forge class</a></li>
			<li>Added ability to set additional database config values in <a href="database/connecting.html">DSN connections</a> via the query string.</li>
			</ul>
	</li>
	<li>Libraries
		<ul>
			<li>Set the mime type check in the <a href="libraries/file_uploading.html">Upload class</a> to reference the global mimes variable.</li>
			<li>Added support for query strings to the <a href="libraries/pagination.html">Pagination class</a>, automatically detected or explicitly declared.</li>
			<li>Added <kbd>get_post()</kbd> to the <a href="libraries/input.html">Input class</a>.</li>
			<li>Documented <kbd>get()</kbd> in the <a href="libraries/input.html">Input class</a>.</li>
			<li>Added the ability to automatically output language items as form labels in the <a href="libraries/language.html">Language class</a>.</li>
		</ul>
	</li>
	<li>Helpers
		<ul>
			<li>Added a <a href="helpers/language_helper.html">Language helper</a>.</li>
			<li>Added a <a href="helpers/number_helper.html">Number helper</a>.</li>
			<li><a href="helpers/form_helper.html">Form helper</a> refactored to allow <kbd>form_open()</kbd> and <kbd>form_fieldset()</kbd> to accept arrays or strings as arguments.</li>
		</ul>
	</li>
	<li>Other changes
		<ul>
			<li>Improved security in <kbd>xss_clean()</kbd>.</li>
			<li>Removed an unused Router reference in <kbd>_display_cache()</kbd>.</li>
			<li>Added ability to <a href="libraries/input.html">use xss_clean() to test images</a> for XSS, useful for upload security.</li>
			<li>Considerably expanded list of mobile user-agents in config/user_agents.php.</li>
			<li>Charset information in the userguide has been moved above title for internationalization purposes (#4614).</li>
			<li>Added &quot;Using Associative Arrays In a Request Parameter&quot; example to the <a href="libraries/xmlrpc.html">XMLRPC userguide page</a>.</li>
			<li>Removed maxlength and size as automatically added attributes of form_input() in the <a href="helpers/form_helper.html">form helper</a>.</li>
			<li>Documented the language file use of <kbd>byte_format()</kbd> in the <a href="helpers/number_helper.html">number helper</a>.</li>
		</ul>
	</li>
</ul>


<h3>Bug fixes for 1.6.3</h3>

<ul>
	<li>Added a language key for valid_emails in validation_lang.php.</li>
	<li>Amended fixes for bug (#3419) with parsing DSN database connections.</li>
	<li>Moved the <kbd>_has_operators()</kbd> function (#4535) into DB_driver from DB_active_rec.</li>
	<li>Fixed a syntax error in upload_lang.php.</li>
	<li>Fixed a bug (#4542) with a regular expression in the Image library.</li>
	<li>Fixed a bug (#4561) where <kbd>orhaving()</kbd> wasn't properly passing values.</li>
	<li>Removed some unused variables from the code (#4563).</li>
	<li>Fixed a bug where <kbd>having()</kbd> was not adding an = into the statement (#4568).</li>
	<li>Fixed assorted user guide typos or examples (#4574, #4706).</li>
	<li>Added quoted-printable headers to Email class when the multi-part override is used.</li>
	<li>Fixed a double opening &lt;p&gt; tag in the index pages of each system directory.</li>
</ul>

<h2>Version 1.6.2</h2>
<p>Release Date: May 13, 2008<br />
Hg Tag: 1.6.2</p>
<ul>
	<li>Active Record
		<ul>
			<li>Added the ability to prevent escaping in <kbd>having()</kbd> clauses.</li>
			<li>Added <kbd>rename_table()</kbd> into <a href="./database/forge.html">DBForge</a>.</li>
			<li>Fixed a bug that wasn't allowing escaping to be turned off if the value of a query was NULL.</li>
			<li>DB Forge is now assigned to any models that exist after loading (#3457).</li>
			</ul>
	</li>
	<li>Database
		<ul>
			<li>Added <a href="./database/transactions.html">Strict Mode</a> to database transactions.</li>
			<li>Escape behaviour in where() clauses has changed; values in those with the &quot;FALSE&quot; argument are no longer escaped (ie: quoted).</li>
		</ul>
	</li>
	<li>Config
		<ul>
			<li>Added 'application/vnd.ms-powerpoint' to list of mime types.</li>
			<li>Added 'audio/mpg' to list of mime types.</li>
			<li>Added new user-modifiable file constants.php containing file mode and fopen constants.</li>
			<li>Added the ability to set CRLF settings via config in the <a href="libraries/email.html">Email</a> class.</li>
		</ul>
	</li>
	<li>Libraries
		<ul>
			<li>Added increased security for filename handling in the Upload library.</li>
			<li>Added increased security for sessions for client-side data tampering.</li>
			<li>The MySQLi forge class is now in sync with MySQL forge. </li>
			<li>Added the ability to set CRLF settings via config in the <a href="libraries/email.html">Email</a> class.</li>
			<li><a href="libraries/unit_testing.html">Unit Testing</a> results are now colour coded, and a change was made to the default template of results.</li>
			<li>Added a valid_emails rule to the <a href="libraries/validation.html">Validation</a> class.</li>
			<li>The <a href="libraries/zip.html">Zip class</a> now exits within <kbd>download()</kbd>.</li>
			<li>The <a href="libraries/zip.html">Zip class</a> has undergone a substantial re-write for speed and clarity (thanks stanleyxu for the hard work and code contribution in bug report #3425!)</li>
		</ul>
	</li>
	<li>Helpers
		<ul>
			<li>Added a <a href="helpers/compatibility_helper.html">Compatibility Helper</a> for using some common PHP 5 functions safely in applications that might run on PHP 4 servers (thanks Seppo for the hard work and code contribution!)</li>
			<li>Added <kbd>form_button()</kbd> in the <a href="helpers/form_helper.html">Form helper</a>.</li>
			<li>Changed the <kbd>radio()</kbd> and <kbd>checkbox()</kbd> functions to default to not checked by default.</li>
			<li>Added the ability to include an optional HTTP Response Code in the <kbd>redirect()</kbd> function of the <a href="helpers/url_helper.html">URL Helper</a>.</li>
			<li>Modified <kbd>img()</kbd> in the <a href="helpers/html_helper.html">HTML Helper</a> to remove an unneeded space (#4208).</li>
			<li>Modified <kbd>anchor()</kbd> in the <a href="helpers/url_helper.html">URL helper</a> to no longer add a default title= attribute (#4209).</li>
			<li>The <a href="helpers/download_helper.html">Download helper</a> now exits within <kbd>force_download()</kbd>.</li>
			<li>Added <kbd>get_dir_file_info()</kbd>, <kbd>get_file_info()</kbd>, and <kbd>get_mime_by_extension()</kbd> to the <a href="helpers/file_helper.html">File Helper</a>.</li>
			<li>Added <kbd>symbolic_permissions()</kbd> and <kbd>octal_permissions()</kbd> to the <a href='helpers/file_helper.html'>File helper</a>.</li>
		</ul>
	</li>
	<li>Plugins
		<ul>
			<li>Modified captcha generation to first look for the function imagecreatetruecolor, and fallback to imagecreate if it isn't available (#4226).</li>
		</ul>
	</li>
	<li>Other
		Changes
		<ul>
			<li>Added ability for <a href="libraries/input.html">xss_clean()</a> to accept arrays.</li>
			<li>Removed closing PHP tags from all PHP files to avoid accidental output and potential 'cannot modify headers' errors.</li>
			<li>Removed &quot;scripts&quot; from the auto-load search path. Scripts were deprecated 
				in Version 1.4.1 (September 21, 2006). If you still need to use them for legacy reasons, they must now be manually loaded in each Controller.</li>
			<li>Added a <a href="general/reserved_names.html">Reserved Names</a> page to the userguide, and migrated reserved controller names into it.</li>
			<li>Added a <a href="general/common_functions.html">Common Functions</a> page to the userguide for globally available functions.</li>
			<li>Improved security and performance of xss_clean().</li>
		</ul>
	</li>
	</ul>

<h3>Bugfixes for 1.6.2</h3>
<ul>
	<li>Fixed a bug where SET queries were not being handled as "write" queries.</li>
	<li>Fixed a bug (#3191) with ORIG_PATH_INFO URI parsing.</li>
	<li>Fixed a bug in DB Forge, when inserting an id field (#3456).</li>
	<li>Fixed a bug in the table library that could cause identically constructed rows to be dropped (#3459).</li>
	<li>Fixed DB Driver and MySQLi result driver checking for resources instead of objects (#3461).</li>
	<li>Fixed an AR_caching error where it wasn't tracking table aliases (#3463).</li>
	<li>Fixed a bug in AR compiling, where select statements with arguments got incorrectly escaped (#3478).</li>
	<li>Fixed an incorrect documentation of $this-&gt;load-&gt;language (#3520).</li>
	<li>Fixed bugs (#3523, #4350) in get_filenames() with recursion and problems with Windows when $include_path is used.</li>
	<li>Fixed a bug (#4153) in the XML-RPC class preventing dateTime.iso8601 from being used.</li>
	<li>Fixed an AR bug with or_where_not_in() (#4171).</li>
	<li>Fixed a bug with <a href="libraries/input.html">xss_clean()</a> that would add semicolons to GET URI variable strings.</li>
	<li>Fixed a bug (#4206) in the Directory Helper where the directory resource was not being closed, and minor improvements.</li>
	<li>Fixed a bug in the FTP library where delete_dir() was not working recursively (#4215).</li>
	<li>Fixed a Validation bug when set_rules() is used with a non-array field name and rule (#4220).</li>
	<li>Fixed a bug (#4223) where DB caching would not work for returned DB objects or multiple DB connections.</li>
	<li>Fixed a bug in the Upload library that might output the same error twice (#4390).</li>
	<li>Fixed an AR bug when joining with a table alias and table prefix (#4400).</li>
	<li>Fixed a bug in the DB class testing the $params argument.</li>
	<li>Fixed a bug in the Table library where the integer 0 in cell data would be displayed as a blank cell.</li>
	<li>Fixed a bug in <kbd>link_tag()</kbd> of the <a href="helpers/url_helper.html">URL helper</a> where a key was passed instead of a value.</li>
	<li>Fixed a bug in DB_result::row() that prevented it from returning individual fields with MySQL NULL values.</li>
	<li>Fixed a bug where SMTP emails were not having dot transformation performed on lines that begin with a dot.</li>
	<li>Fixed a bug in display_error() in the DB driver that was instantiating new Language and Exception objects, and not using the error heading.</li>
	<li>Fixed a bug (#4413) where a URI containing slashes only e.g. 'http://example.com/index.php?//' would result in PHP errors</li>
	<li>Fixed an array to string conversion error in the Validation library (#4425)</li>
	<li>Fixed bug (#4451, #4299, #4339) where failed transactions will not rollback when debug mode is enabled.</li>
	<li>Fixed a bug (#4506) with overlay_watermark() in the Image library preventing support for PNG-24s with alpha transparency</li>
	<li>Fixed assorted user guide typos (#3453, #4364, #4379, #4399, #4408, #4412, #4448, #4488).</li>
	</ul>

<h2>Version 1.6.1</h2>
<p>Release Date: February 12, 2008<br />
Hg Tag: 1.6.1</p>
<ul>
	<li>Active Record 
		<ul>
			<li>Added <a href="./database/active_record.html#caching">Active Record Caching</a>.</li>
			<li>Made Active Record fully database-prefix aware.</li>
		</ul>
	</li>
	<li>Database drivers
		<ul>
			<li>Added support for setting client character set and collation for MySQLi.</li>
		</ul>
	</li>
	<li>Core Changes
		<ul>
			<li>Modified <kbd>xss_clean()</kbd> to be more intelligent with its handling of URL encoded strings.</li>
			<li>Added $_SERVER, $_FILES, $_ENV, and $_SESSION to sanitization of globals.</li>
			<li>Added a <a href="./helpers/path_helper.html">Path Helper</a>.</li>
			<li>Simplified <kbd>_reindex_segments()</kbd> in the URI class.</li>
			<li>Escaped the '-' in the default 'permitted_uri_chars' config item, to prevent errors if developers just try to add additional characters to the end of the default expression.</li>
			<li>Modified method calling to controllers to show a 404 when a private or protected method is accessed via a URL.</li>
			<li>Modified framework initiated 404s to log the controller and method for invalid requests.</li>
		</ul>
	</li>
	<li>Helpers
		<ul>
			<li>Modified <kbd>get_filenames()</kbd> in the File Helper to return FALSE if the $source_dir is not readable.</li>
		</ul>
	</li>
</ul>


<h3>Bugfixes for 1.6.1</h3>
<ul>
	<li>Deprecated is_numeric as a validation rule. Use of numeric and integer are preferred.</li>
	<li>Fixed bug (#3379) in DBForge with SQLite for table creation.</li>
	<li>Made Active Record fully database prefix aware (#3384).</li>
	<li>Fixed a bug where DBForge was outputting invalid SQL in Postgres by adding brackets around the tables in FROM.</li>
	<li>Changed the behaviour of Active Record's update() to make the WHERE clause optional (#3395).</li>
	<li>Fixed a bug (#3396) where certain POST variables would cause a PHP warning.</li>
	<li>Fixed a bug in query binding (#3402).</li>
	<li>Changed order of SQL keywords in the Profiler $highlight array so OR would not be highlighted before ORDER BY.</li>
	<li>Fixed a bug (#3404) where the MySQLi driver was testing if $this->conn_id was a resource instead of an object.</li>
	<li>Fixed a bug (#3419) connecting to a database via a DSN string.</li>
	<li>Fixed a bug (#3445) where the routed segment array was not re-indexed to begin with 1 when the default controller is used.</li>
	<li>Fixed assorted user guide typos.</li>
</ul>



<h2>Version 1.6.0</h2>
<p>Release Date: January 30, 2008 </p>
<ul>
	<li>DBForge
		<ul>
			<li>Added <a href="./database/forge.html">DBForge</a> to the database tools.</li>
			<li>Moved <kbd>create_database()</kbd> and <kbd>drop_database()</kbd> into <a href="./database/forge.html">DBForge</a>.</li>
			<li>Added <kbd>add_field()</kbd>, <kbd>add_key()</kbd>, <kbd>create_table()</kbd>, <kbd>drop_table()</kbd>, <kbd>add_column()</kbd>, <kbd>drop_column()</kbd>, <kbd>modify_column()</kbd> into <a href="./database/forge.html">DBForge</a>.</li>
		</ul>
	</li>

	<li>Active Record
		<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>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>
			<li>Added <kbd>select_max()</kbd>, <kbd>select_min()</kbd>, <kbd>select_avg()</kbd> and <kbd>select_sum()</kbd> to <a href="./database/active_record.html">Active Record</a>.</li>
			<li>Added the ability to use aliases with joins in <a href="./database/active_record.html">Active Record</a>.</li>
			<li>Added a third parameter to Active Record's <kbd>like()</kbd> clause to control where the wildcard goes. </li>
			<li>Added a third parameter to <kbd>set()</kbd> in <a href="./database/active_record.html">Active Record</a> that withholds escaping data.</li>
			<li>Changed the behaviour of variables submitted to the where() clause with no values to auto set &quot;IS NULL&quot;</li>
		</ul>
	</li>
	
	<li>Other Database Related
		<ul>
			<li>MySQL driver now requires MySQL 4.1+</li>
			<li>Added $this->DB->save_queries variable to DB driver, enabling queries to get saved or not. Previously they were always saved.</li>
			<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>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>
			<li>Removed 'active_r' configuration setting and replaced with a global $active_record setting, which is more
				in harmony with the global nature of the behavior (#1834).</li>
		</ul>
	</li>
	
	<li>Core changes
		<ul>
			<li>Added ability to load multiple views, whose content will be appended to the output in the order loaded.</li>
			<li>Added the ability to <a href="./general/autoloader.html">auto-load</a> <a href="./general/models.html">Models</a>.</li>
			<li>Reorganized the URI and Routes classes for better clarity.</li>
			<li>Added Compat.php to allow function overrides for older versions of PHP or PHP environments missing certain extensions / libraries</li>   
			<li>Added memory usage, GET, URI string data, and individual query execution time to Profiler output.</li>
			<li>Deprecated Scaffolding.</li>
			<li>Added is_really_writable() to Common.php to provide a cross-platform reliable method of testing file/folder writability.</li>
		</ul>
	</li>
	
	<li>Libraries
		<ul>
			<li>Changed the load protocol of Models to allow for extension.</li>
			<li>Strengthened the Encryption library to help protect against man in the middle attacks when MCRYPT_MODE_CBC mode is used.</li>
			<li>Added Flashdata variables, session_id regeneration and configurable session update times to the <a href="./libraries/sessions.html">Session class.</a></li>
			<li>Removed 'last_visit' from the Session class.</li>
			<li>Added a language entry for valid_ip validation error.</li>
			<li>Modified prep_for_form() in the Validation class to accept arrays, adding support for POST array validation (via callbacks only)</li>
			<li>Added an &quot;integer&quot; rule into the <a href="./libraries/validation.html">Validation</a> library.</li>
			<li>Added valid_base64() to the <a href="./libraries/validation.html">Validation</a> library.</li>
			<li>Documented clear() in the <a href="../libraries/image_lib.html">Image Processing</a> library.</li>
			<li>Changed the behaviour of custom callbacks so that they no longer trigger the &quot;required&quot; rule. </li>
			<li>Modified Upload class $_FILES error messages to be more precise.</li>
			<li>Moved the safe mode and auth checks for the Email library into the constructor. </li>
			<li>Modified variable names in _ci_load() method of Loader class to avoid conflicts with view variables.</li>
			<li>Added a few additional mime type variations for CSV.</li>
			<li>Enabled the 'system' methods for the XML-RPC Server library, except for 'system.multicall' which is still disabled.</li>
		</ul>
	</li>
	
	<li>Helpers &amp; Plugins
		<ul>
			<li>Added link_tag() to the <a href="./helpers/html_helper.html">HTML helper.</a></li>
			<li>Added img() to the <a href="./helpers/html_helper.html">HTML helper.</a></li>
			<li>Added ability to <a href="./general/helpers.html">"extend" Helpers</a>.</li>
			<li>Added an <a href="./helpers/email_helper.html">email helper</a> into core helpers.</li>
			<li>Added <kbd>strip_quotes()</kbd> function to <a href="./helpers/string_helper.html">string helper</a>.</li>
			<li>Added <kbd>reduce_multiples()</kbd> function to <a href="./helpers/string_helper.html">string helper</a>.</li>
			<li>Added <kbd>quotes_to_entities()</kbd> function to <a href="./helpers/string_helper.html">string helper</a>.</li>
			<li>Added <kbd>form_fieldset()</kbd>, <kbd>form_fieldset_close()</kbd>, <kbd>form_label()</kbd>, and <kbd>form_reset()</kbd> function to <a href="./helpers/form_helper.html">form helper</a>.</li>
			<li>Added support for external urls in <kbd>form_open()</kbd>.</li>
			<li>Removed support for db_backup in MySQLi due to incompatible functions.</li>
			<li>Javascript Calendar plugin now uses the months and days from the calendar language file, instead of hard-coded values, internationalizing it.</li>
		</ul>
	</li>
	
	  
	<li>Documentation Changes
		<ul>
			<li>Added <a href="./doc_style/index.html">Writing Documentation</a> section for the community to use in writing their own documentation.</li>
			<li>Added titles to all user manual pages.</li>
			<li>Added attributes into &lt;html&gt; of userguide for valid html.</li>
			<li>Added <a href="http://codeigniter.com/user_guide/libraries/zip.html">Zip Encoding Class</a> to the table of contents of the userguide.</li>
			<li>Moved part of the userguide menu javascript to an external file.</li>
			<li>Documented <kbd>distinct()</kbd> in <a href="./database/active_record.html">Active Record</a>. </li>
			<li>Documented the <kbd>timezones()</kbd> function in the <a href="./helpers/date_helper.html">Date Helper</a>.</li>
			<li>Documented unset_userdata in the <a href="./libraries/sessions.html">Session class</a>.</li>
			<li>Documented 2 config options to the <a href="./database/configuration.html">Database configuration</a> page.</li>
		</ul>
	</li>
</ul>

<h3>Bug fixes for Version 1.6.0</h3>
	
<ul>
	<li>Fixed a bug (#1813) preventing using $CI->db in the same application with returned database objects.</li>
	<li>Fixed a bug (#1842) where the $this->uri->rsegments array would not include the 'index' method if routed to the controller without an implicit method.</li>
	<li>Fixed a bug (#1872) where word_limiter() was not retaining whitespace.</li>
	<li>Fixed a bug (#1890) in csv_from_result() where content that included the delimiter would break the file.</li>
	<li>Fixed a bug (#2542)in the clean_email() method of the Email class to allow for non-numeric / non-sequential array keys.</li>
	<li>Fixed a bug (#2545) in <kbd>_html_entity_decode_callback()</kbd> when 'global_xss_filtering' is enabled.</li>
	<li>Fixed a bug (#2668) in the <a href="./libraries/parser.html">parser class</a> where numeric data was ignored.</li>
	<li>Fixed a bug (#2679) where the &quot;previous&quot; pagination link would get drawn on the first page.</li>
	<li>Fixed a bug (#2702) in _object_to_array that broke some types of inserts and updates.</li>
	<li>Fixed a bug (#2732) in the SQLite driver for PHP 4.</li>
	<li>Fixed a bug (#2754) in Pagination to scan for non-positive num_links.</li>
	<li>Fixed a bug (#2762) in the <a href="./libraries/sessions.html">Session library</a> where user agent matching would fail on user agents ending with a space. </li>
	<li>Fixed a bug (#2784) $field_names[] vs $Ffield_names[] in postgres and sqlite drivers.</li>
	<li>Fixed a bug (#2810) in the typography helper causing extraneous paragraph tags when string contains tags.</li>
	<li>Fixed a bug (#2849) where arguments passed to a subfolder controller method would be incorrectly shifted, dropping the 3rd segment value.</li>
	<li>Fixed a bug (#2858) which referenced a wrong variable in the Image class.</li>
	<li>Fixed a bug (#2875)when loading plugin files as _plugin. and not _pi.</li>
	<li>Fixed a bug (#2912) in <kbd>get_filenames()</kbd> in the <a href="./helpers/file_helper.html">File Helper </a>where the array wasn't cleared after each call.</li>
	<li>Fixed a bug (#2974) in <kbd>highlight_phrase()</kbd> that caused an error with slashes.</li>
	<li>Fixed a bug (#3003) in the Encryption Library to support modes other than MCRYPT_MODE_ECB</li>
	<li>Fixed a bug (#3015) in the <a href="./libraries/user_agent.html">User Agent library</a> where more then 2 languages where not reported with languages().</li>
	<li>Fixed a bug (#3017) in the <a href="./libraries/email.html">Email</a> library where some timezones were calculated incorrectly. </li>
	<li>Fixed a bug (#3024) in which master_dim wasn't getting reset by clear() in the Image library.</li>
	<li>Fixed a bug (#3156) in Text Helper highlight_code() causing PHP tags to be handled incorrectly.</li>
	<li>Fixed a bug (#3166) that prevented num_rows from working in Oracle.</li>
	<li>Fixed a bug (#3175) preventing certain libraries from working properly when autoloaded in PHP 4.</li>
	<li>Fixed a bug (#3267) in the Typography Helper where unordered list was listed &quot;un.</li>
	<li>Fixed a bug (#3268) where the Router could leave '/' as the path.</li>
	<li>Fixed a bug (#3279) where the Email class was sending the wrong Content-Transfer-Encoding for some character sets.</li>
	<li>Fixed a bug (#3284) where the rsegment array would not be set properly if the requested URI contained more segments than the routed URI.</li>
	<li>Removed extraneous load of $CFG in _display_cache() of the Output class (#3285).</li>
	<li>Removed an extraneous call to loading models (#3286).</li>
	<li>Fixed a bug (#3310) with sanitization of globals in the Input class that could unset CI's global variables.</li>
	<li>Fixed a bug (#3314) which would cause the top level path to be deleted in delete_files() of the File helper.</li>
	<li>Fixed a bug (#3328) where the smiley helper might return an undefined variable.</li>
	<li>Fixed a bug (#3330) in the FTP class where a comparison wasn't getting made.</li>
	<li>Removed an unused parameter from Profiler (#3332).</li>
	<li>Fixed a bug in database driver where num_rows property wasn't getting updated.</li>
	<li>Fixed a bug in the <a href="./libraries/file_uploading.html">upload library</a> when allowed_files wasn't defined.</li>
	<li>Fixed a bug in <kbd>word_wrap()</kbd> of the Text Helper that incorrectly referenced an object. </li>
	<li>Fixed a bug in <a href="./libraries/validation.html">Validation</a> where <kbd>valid_ip()</kbd> wasn't called properly.</li>
	<li>Fixed a bug in <a href="./libraries/validation.html">Validation</a> 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 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>
	<li>Fixed an example in the Calendar library for Showing Next/Previous Month Links.</li>
	<li>Fixed a typo in the database language file.</li>
	<li>Fixed a typo in the image language file &quot;suppor&quot; to &quot;support&quot;.</li>
	<li>Fixed an example for XML RPC.</li>
	<li>Fixed an example of <kbd>accept_charset()</kbd> in the <a href="./libraries/user_agent.html">User Agent Library</a>.</li>
	<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>Fixed a series of grammatical and spelling errors in the language files.</li>
	<li>Fixed assorted user guide typos.</li>
</ul>
<h2>Version 1.5.4</h2>
<p>Release Date: July 12, 2007 </p>
<ul>
	<li>Added <a href="./libraries/language.html">custom Language files</a> to the <a href="./general/autoloader.html">autoload</a> options. </li>
	<li>Added stripslashes() to the _clean_input_data() function in the <a href="./libraries/input.html">Input class</a> when magic quotes is on so that data will always be un-slashed within the framework.</li>
	<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>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 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>
	<li>Fixed a typo in the <a href="./libraries/calendar.html">Calendar library </a> </li>
	<li>Fixed a typo in rpcs.php library</li>
	<li>Fixed a bug in the <a href="./libraries/zip.html">Zip library</a>, providing PC Zip file compatibility with Mac OS X</li>
	<li>Fixed a bug in router that was ignoring the scaffolding route for optimization </li>
	<li>Fixed an IP validation bug.</li>
	<li>Fixed a bug in display of POST keys in the <a href="./general/profiling.html">Profiler</a> output</li>
	<li>Fixed a bug in display of queries with characters that would be interpreted as HTML in the <a href="./general/profiling.html">Profiler</a> output</li>
	<li>Fixed a bug in display of Email class print debugger with characters that would be interpreted as HTML in the debugging output</li>
	<li>Fixed a bug in the Content-Transfer-Encoding of HTML emails with the quoted-printable MIME type</li>
	<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>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>
	<li>Modified the is_image() method in the Upload library to take into account Windows IE 6/7 eccentricities when dealing with MIMEs</li>
	<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: APPVER has been deprecated and replaced with CI_VERSION for clarity. </li>
</ul>
<h2>Version 1.5.3</h2>
<p>Release Date: April 15, 2007 </p>
<ul>
	<li>Added array to string into the profiler </li>
	<li>Code Igniter references updated to CodeIgniter </li>
	<li>pMachine references updated to EllisLab </li>
	<li>Fixed a bug in the repeater function of <a href="./helpers/string_helper.html">string helper</a>. </li>
	<li>Fixed a bug in ODBC driver </li>
	<li>Fixed a bug in result_array() that was returning an empty array when no result is produced.</li>
	<li>Fixed a bug in the redirect function of the <a href="./helpers/url_helper.html">url helper</a>. </li>
	<li>Fixed an undefined variable in Loader </li>
	<li>Fixed a version bug in the Postgres driver </li>
	<li>Fixed a bug in the textarea function of the form helper for use with strings</li>
	<li>Fixed doc typos. </li>
</ul>
<h2>Version 1.5.2</h2>
<p>Release Date: February 13, 2007 </p>
<ul>
	<li>Added <a href="./installation/downloads.html#svn">subversion information</a> to the <a href="./installation/downloads.html">downloads</a> page. </li>
	<li>Added support for captions in the <a href="./libraries/table.html">Table Library</a> </li>
	<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 <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>
</ul>


<h2>Version 1.5.1</h2>
<p>Release Date: November 23, 2006</p>
<ul>
	<li>Added support for submitting arrays of libraries in the $this-&gt;load-&gt;library function.</li>
	<li>Added support for naming custom library files in lower or uppercase.</li>
	<li>Fixed a bug related to output buffering.</li>
	<li>Fixed a bug in the active record class that was not resetting query data after a completed query.</li>
	<li>Fixed a bug that was suppressing errors in controllers.</li>
	<li>Fixed a problem that can cause a loop to occur when the config file is missing.</li>
	<li>Fixed a bug that occurred when multiple models were loaded with the third parameter set to TRUE.</li>
	<li>Fixed an oversight that was not unsetting globals properly in the input sanitize function.</li>
	<li>Fixed some bugs in the Oracle DB driver.</li>
	<li>Fixed an incorrectly named variable in the MySQLi result driver.</li>
	<li>Fixed some doc typos.</li>
</ul>
<h2>Version 1.5.0.1</h2>
<p>Release Date: October 31, 2006</p>
<ul>
<li>Fixed a problem in which duplicate attempts to load helpers and classes were not being stopped.</li>
<li>Fixed a bug in the word_wrap() helper function.</li>
<li>Fixed an invalid color Hex number in the Profiler class.</li>
<li>Fixed a corrupted image in the user guide.</li>
</ul>



<h2>Version 1.5.0</h2>
<p>Release Date: October 30, 2006</p>

<ul>
<li>Added <a href="./database/utilities.html">DB utility class</a>, permitting DB backups, CVS or XML files from DB results, and various other functions.</li>
<li>Added <a href="./database/caching.html">Database Caching Class</a>.</li>
<li>Added <a href="./database/transactions.html">transaction support</a> to the database classes.</li>
<li>Added <a href="./general/profiling.html">Profiler Class</a> which generates a report of Benchmark execution times, queries, and POST data at the bottom of your pages.</li>
<li>Added <a href="./libraries/user_agent.html">User Agent Library</a> which allows browsers, robots, and mobile devises to be identified.</li>
<li>Added <a href="./libraries/table.html">HTML Table Class</a> , enabling tables to be generated from arrays or database results.</li>
<li>Added <a href="./libraries/zip.html">Zip Encoding Library</a>.</li>
<li>Added <a href="./libraries/ftp.html">FTP Library</a>.</li>
<li>Added the ability to <a href="./general/creating_libraries.html">extend libraries</a> and <a href="./general/core_classes.html">extend core classes</a>, in addition to being able to replace them.</li>
<li>Added support for storing <a href="./general/models.html">models within sub-folders</a>.</li>
<li>Added <a href="./helpers/download_helper.html">Download Helper</a>.</li>
<li>Added <a href="./database/queries.html">simple_query()</a> function to the database classes</li>
<li>Added <a href="./helpers/date_helper.html">standard_date()</a> function to the Date Helper.</li>
<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 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>
<li>Improved the URI handler to make it more reliable when the $config['uri_protocol'] item is set to AUTO.</li>
<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>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>
<li>Fixed a bug in the typography helper that was incorrectly wrapping block level elements in paragraph tags.</li>
<li>Fixed a problem in the form_prep() function that was double encoding entities.</li>
<li>Fixed a bug that affects some versions of PHP when output buffering is nested.</li>
<li>Fixed a bug that caused CI to stop working when the PHP magic __get() or __set() functions were used within models or controllers.</li>
<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>
</ul>




<h2>Version 1.4.1</h2>
<p>Release Date: September 21, 2006</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 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>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>
<li>Added <dfn>delete_cookie()</dfn> and <dfn>get_cookie()</dfn> to <a href="./helpers/cookie_helper.html">Cookie helper</a>, even though the input class has a cookie fetching function.</li>
<li>Added Oracle database driver (still undergoing testing so it might have some bugs).</li>
<li>Added the ability to combine pseudo-variables and php variables in the template parser class.</li>
<li>Added output compression option to the config file.</li>
<li>Removed the is_numeric test from the db->escape() function.</li>
<li>Fixed a MySQLi bug that was causing error messages not to contain proper error data.</li>
<li>Fixed a bug in the email class which was causing it to ignore explicitly set alternative headers.</li>
<li>Fixed a bug that was causing a PHP error when the Exceptions class was called within the get_config() function since it was causing problems.</li>
<li>Fixed an oversight in the cookie helper in which the config file cookie settings were not being honored.</li>
<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>
<li>Deprecated the following database functions: $this->db->smart_escape_str() and $this->db->fields().</li>
</ul>



<h2>Version 1.4.0</h2>
<p>Release Date: September 17, 2006</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 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>
<li>Added support for % character in URL.</li>
<li>Added the ability to supply full URLs using the <a href="./helpers/url_helper.html">anchor()</a> helper function.</li>
<li>Added mode parameter to <a href="./helpers/file_helper.html">file_write()</a> helper.</li>
<li>Added support for changing the port number in the <a href="./database/configuration.html">Postgres driver</a>.</li>
<li>Moved the list of "allowed URI characters" out of the Router class and into the config file.</li>
<li>Moved the MIME type array out of the Upload class and into its own file in the applications/config/ folder.</li>
<li>Updated the Upload class to allow the upload field name to be set when calling <a href="./libraries/file_uploading.html">do_upload()</a>.</li>
<li>Updated the <a href="./libraries/config.html">Config Library</a> to be able to load config files silently, and to be able to assign config files to their own index (to avoid collisions if you use multiple config files).</li>
<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 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>
<li>Removed a strtolower() call that was changing URL segments to lower case.</li>
<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>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>
<li>Fixed a bug in which loading a language file was producing a "file contains no data" message.</li>
<li>Fixed a session bug caused by the XSS Filtering feature inadvertently changing the case of certain words.</li>
<li>Fixed some missing prefixes when using the database prefix feature.</li>
<li>Fixed a typo in the Calendar class (cal_november).</li>
<li>Fixed a bug in the <dfn>form_checkbox()</dfn> helper.</li>
<li>Fixed a bug that was allowing the second segment of the URI to be identical to the class name.</li>
<li>Fixed an evaluation bug in the database initialization function.</li>
<li>Fixed a minor bug in one of the error messages in the language class.</li>
<li>Fixed a bug in the date helper <dfn>timespan</dfn> function.</li>
<li>Fixed an undefined variable in the DB Driver class.</li>
<li>Fixed a bug in which dollar signs used as binding replacement values in the DB class would be treated as RegEx back-references.</li>
<li>Fixed a bug in the <dfn>set_hash()</dfn> function which was preventing MD5 from being used.</li>
<li>Fixed a couple bugs in the Unit Testing class.</li>
<li>Fixed an incorrectly named variable in the Validation class.</li>
<li>Fixed an incorrectly named variable in the URI class.</li>
<li>Fixed a bug in the config class that was preventing the base URL from being called properly.</li>
<li>Fixed a bug in the validation class that was not permitting callbacks if the form field was empty.</li>
<li>Fixed a problem that was preventing scaffolding from working properly with MySQLi.</li>
<li>Fixed some MS SQL bugs.</li>
<li>Fixed some doc typos.</li>
</ul>



<h2>Version 1.3.3</h2>
<p>Release Date: June 1, 2006</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 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 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>
<li>Fixed a bug in the active record class when using WHERE clauses with LIKE</li>
<li>Fixed a bug in the hash() security helper.</li>
<li>Fixed some typos.</li>
</ul>




<h2>Version 1.3.2</h2>
<p>Release Date: April 17, 2006</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 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>
</ul>



<h2>Version 1.3.1</h2>
<p>Release Date: April 11, 2006</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 <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>
<li>Added language file for scaffolding and fixed a scaffolding bug that occurs when there are no rows in the specified table.</li>
<li>Added <a href="./database/queries.html">$this->db->last_query()</a>, which allows you to view your last query that was run.</li>
<li>Added a new mime type to the upload class for better compatibility.</li>
<li>Changed how cache files are read to prevent PHP errors if the cache file contains an XML tag, which PHP wants to interpret as a short tag.</li>
<li>Fixed a bug in a couple of the active record functions (where and orderby).</li>
<li>Fixed a bug in the image library when realpath() returns false.</li>
<li>Fixed a bug in the Models that was preventing libraries from being used within them.</li>
<li>Fixed a bug in the "exact_length" function of the validation class.</li>
<li>Fixed some typos in the user guide</li>
</ul>


<h2>Version 1.3</h2>
<p>Release Date: April 3, 2006</p>

<ul>
<li>Added support for <a href="models.html">Models</a>.</li>
<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 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 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>
<li>Change the commenting style in the scripts to the PEAR standard so that IDEs and tools like phpDocumenter can harvest the comments.</li>
<li>Added better class and function name-spacing to avoid collisions with user developed classes. All CodeIgniter classes are now prefixed with <dfn>CI_</dfn> and
all controller methods are prefixed with <dfn>_ci</dfn> to avoid controller collisions. A list of reserved function names can be <a href="controllers.html">found here</a>.</li>
<li>Redesigned how the "CI" super object is referenced, depending on whether PHP 4 or 5 is being run, since PHP 5 allows a more graceful way to manage objects that utilizes a bit less resources.</li>
<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 some typos in the default calendar template</li>
<li>Fixed some typos in the user guide</li>
</ul>








<h2>Version 1.2</h2>
<p>Release Date: March 21, 2006</p>

<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 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>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>
<li>Fixed a bug in the mysql class bind feature that prevented question marks in the replacement data.</li>
<li>Fixed some bugs in the xss_clean function</li>
</ul>





<h2>Version Beta 1.1</h2>
<p>Release Date: March 10, 2006</p>

<ul>
<li>Added a <a href="./libraries/calendar.html">Calendaring class</a>.</li>
<li>Added support for running <a href="managing_apps.html">multiple applications</a> that share a common CodeIgniter backend.</li>
<li>Moved the "uri protocol" variable from the index.php file into the config.php file</li>
<li>Fixed a problem that was preventing certain function calls from working within constructors.</li>
<li>Fixed a problem that was preventing the $this->load->library function from working in constructors.</li>
<li>Fixed a bug that occurred when the session class was loaded using the auto-load routine.</li>
<li>Fixed a bug that can happen with PHP versions that do not support the E_STRICT constant</li>
<li>Fixed a data type error in the form_radio function (form helper)</li>
<li>Fixed a bug that was preventing the xss_clean function from being called from the validation class.</li>
<li>Fixed the cookie related config names, which were incorrectly specified as $conf rather than $config</li>
<li>Fixed a pagination problem in the scaffolding.</li>
<li>Fixed a bug in the mysql class "where" function.</li>
<li>Fixed a regex problem in some code that trimmed duplicate slashes.</li>
<li>Fixed a bug in the br() function in the HTML helper</li>
<li>Fixed a syntax mistake in the form_dropdown function in the Form Helper.</li>
<li>Removed the "style" attributes form the form helpers.</li>
<li>Updated the documentation. Added "next/previous" links to each page and fixed various typos.</li>
</ul>

<h2>Version Beta 1.0 </h2>
<p>Release Date: February 28, 2006</p>
<p>First publicly released version.</p>

</div>
<!-- END CONTENT -->


<div id="footer">
<p>
Previous Topic:&nbsp;&nbsp;<a href="license.html">License Agreement</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="./general/credits.html">Credits</a>
</p>
<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006-2010 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">Ellislab, Inc.</a></p>
</div>

</body>
</html>
