Upgrading Instructions for PRADO Framework v3.1.4
         =================================================

!!!IMPORTANT!!!

The following upgrading instructions are cumulative. That is,
if you want to upgrade from version A to version C and there is
version B between A and C, you need to following the instructions
for both A and B.

Upgrading from v3.1.3
---------------------
- The prado-cli and prado-cli.bat scripts have been moved into
  the framework folder of the distribution. 


Upgrading from v3.1.2
---------------------
- The Translation configuration now also accepts type 'Database' to
  ease the setup of DB base translation. A valid ConnectionID has to
  be supplied in the source parameter:
  <translation type="Database" source="db1" autosave="true" cache="false" />
  Type 'MySQL' can still be used but is deprecated and might be removed
  in a later release.
- TinyMCE (used by THtmlArea component) has been upgraded to version 3.1.0.1.
  Since the 3.X branch of TinyMCE has a different API than 2.X, you should
  upgrade your Customs Plugins if you use any.
  See http://wiki.moxiecode.com/index.php/TinyMCE:Migration_guide for more information.
- If you use EnableStateEncryption, the PageState of your current user sessions
  will no longer be valid, since we optimized the encryption/compression logic.
- You can now use # and $ characters in your SQL statements with SQLMap by
  escaping them as ## and $$. That induces that you can't have consecutive
  parameters like #param1##param2# or $param1$$param2$ in your statements anymore.


Upgrading from v3.1.1
---------------------
- The RELATIONS type declaration in Active Record classes for Many-to-Many using
  an association table was change from "self::HAS_MANY" to "self::MANY_TO_MANY".
  E.g. change
     'albums' => array(self::HAS_MANY, 'Artist', 'album_artists')
  to
     'albums' => array(self::MANY_TO_MANY, 'Artist', 'album_artists')
- Active Record no longer automatically adds/removes/updates related objects.
- 'Raw' mode for TCheckboxList and TRadioButtonList (and their active counter parts) now render
  a surrounding <span> tag to allow client scripts to identify them with the ClientId. You may
  have to check your CSS.


Upgrading from v3.1.0
---------------------
- The RELATIONS declaration in Acive Record classes is changed from
  "protected static $RELATIONS" to "public static $RELATIONS".
- IFeedContentProvider adds a new method: getContentType(). This affects any
  class implementing this interface.
- TUrlMapping now only uses the PATH_INFO part of URL for matching, and the matching
  is for the whole PATH_INFO.
- IUserManager adds two new methods: getUserFromCookie() and saveUserToCookie().
  This affects classes that implements this interface and does not extend from
  TUserManager.
- The order of application lifecycles is changed. The loadState and loadStateComplete
  are moved to right after onBeginRequest.
- TDropDownList will be in an unselected state if no initial selection is specified.
  That is, its SelectedIndex will be -1. Previously, the first item will be considered as selected.

Upgrading from v3.1b
--------------------
- Comment tag <!-- ... ---> (introduced in v3.1a) is changed to <!--- ... --->
- When TDataList.RepeatLayout is Raw, the items will render <div> instead of <span>
- TActiveRecord finder methods will always return a new object instance (identity mapping was removed).
- TActiveRecord::findBySql() will return an object rather than an array
- TActiveRecord::findAllBySql() will return an array of objects.

Upgrading from v3.1a
---------------------
- The signature of TActiveRecord::finder() is changed. This affects
  all TActiveRecord-descendant classes that override this method.
  Please use the following code to override the method:
	public static function finder($className=__CLASS__)
	{
		return parent::finder($className);
	}

- The way to specify the table name for an active record class is changed.
  Previously, it used the static class member '_tablename'.
  Now it uses class constant as follows:
    class UserRecord extends TActiveRecord
    {
        const TABLE='users_table';
    }

- Changed TActiveRatingList's javascript control class
  name from "Prado.WebUI.TRatingList" to "Prado.WebUI.TActiveRatingList".

- PRADO's javascript library locations moved from Web/Javascripts/xxx to Web/Javascripts/source/xxx

- IPostBackDataHandler added a new method getDataChanged(). Any control
  implementing this interface will be required to implement this new method.

Upgrading from v3.0.x
---------------------
- Validators ClientSide.OnSuccess becomes ClientSide.OnValidationSuccess,
- Validators ClientSide.OnError becomes ClientSide.OnValidationError,
- Validator OnSuccess event becomes OnValidationSuccess.
- Validator OnError event becomes OnValidationError.
- Content enclosed in <!-- --> is now parsed as normal template content.
  Previously, it was not parsed and was rendered as is.

Upgrading from v3.0.7
---------------------

Upgrading from v3.0.6
---------------------

Upgrading from v3.0.5
---------------------
- TRepeater does not render <span> anymore for empty item template.
- constructUrl() now encodes ampersand by default. This should have minimal
  impact on any existing PRADO applications, though.
- TDataGrid does not generate default table styles. This may affect
  the appearance of existing PRADO applications that use TDataGrid.
- If TUrlMapping is used, you need to set the UrlManager property of
  THttpRequest to the module ID of TUrlMapping.
- TJavascriptLogger toggle key is changed from ALT-D to ALT-J.
   Use the ToggleKey property chanage to a different key.
- Javascript Library rico was REMOVED.

Upgrading from v3.0.4
---------------------
- TFileUpload::saveAs() will return false instead of raising an exception
  if it encounters any error.
- TDropDownListColumn.DataField is renamed to DataTextField and
  DataFormatString is renamed to DataTextFormatString.
  A new property named DataValueField is added.

Upgrading from v3.0.3
---------------------
- The 'Static' value is changed to 'Fixed' for the Display property of
  all validators as well as TValidationSummary, due to conflict with PHP keywords.
- The 'List' value is changed to 'SimpleList' for TValidationSummary.DisplayMode.
- The 'List' value is changed to 'DropDownList' for TPager.Mode
- This change affects existing client-side javascript handlers such as
  <com:TRequiredFieldValidator ClientSide.OnSuccess="xxx" />
  All ClientSide javascript event handlers (such as ClientSide.OnSuccess)
  are by default wrapped within the function block.
       function(sender, parameter){ // handler code }
  You may override this behaviour by providing your own javascript statement block
  as "javascript:MyHandlerFunction", e.g. ClientSide.OnSuccess="javascript:MyHandlerFunction"
  or ClientSide.OnSuccess="javascript:function(validator,sender){ ... }"


Upgrading from v3.0.2
---------------------
- The minimum PHP version required is raised to 5.1.0 and above.
  If your server is installed with a lower version of PHP, you will
  have to upgrade it in order to run PRADO applications.
- The signature of TControl::broadcastEvent() is changed from
  broadcastEvent($sender,TBroadCastEventParameter $param) to
  broadcastEvent($name,$sender,$param).
  This makes the call to broadcastEvent() to be consistent with raiseEvent().

Upgrading from v3.0.1
---------------------
- Postback enabled control will always disable default client-side browser action.
  This is due to google toolbar's interference of event stopping scheme.
  This modification should only affect user-derived postback javascripts.

Upgrading from v3.0.0
---------------------
- URL format is modified when THttpRequest.UrlFormat=='Path'.
  This modification affects both the URLs generated by calling constructUrl()
  and the URLs understood by PRADO. In particular, PRADO now understands
  the following URL format:
  /index.php/ServiceID,ServiceParam/Name1,Value1/Name2,Value2/...
  In v3.0.0, the above URL is written as:
  /index.php/ServiceID/ServiceParam/Name1/Value1/Name2/Value2/...
- TControl::onBubbleEvent() has been changed to TControl::bubbleEvent().
  This change only affects user controls that override this method.

Upgrading from v2.x and v1.x
----------------------------
PRADO v3.x is not backward compatible with v2.x and v1.x.