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

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


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.