PRADO 3.1.2 is released

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

We are proud to announce the formal release of PRADO 3.1.2.
This is a feature enhancement and bug fix release over the previous
In this release, we enhanced the functionality of Active Record about
relational object support; we added a few more components and Web
in addition to many minor enhancements, we also fixed about thirty
bugs that
were found in the previous releases.

You can download PRADO from its project website at


BUG: Ticket#595 - ControlCssClass not applied correctly if using
multiple validators on same control (Christophe)
BUG: Ticket#622 - Changing Display-attribute of a TActiveCheckBox
dynamically isn't possible (Michael)
BUG: Ticket#636 - I18N catalogue problem (Christophe)
BUG: Ticket#669 - Strange rendering behaviour with TActivePanel
BUG: Ticket#671 - TActiveCustomValidator Callback Problem (Christophe)
BUG: Ticket#679 - TActiveLabel can't be shown from inside TRepeater.
TActiveRadioButton cant be unchecked (Christophe)
BUG: Ticket#695 - ActiveTextBox filled in IE blocks other elements
BUG: Ticket#707 - TPropertyAccess sets property twice on object when
using setters (Qiang)
BUG: Ticket#718 - prop:ClientSide OnLoading don't work in Opera
BUG: Ticket#719 - TAutoCompleter should not trigger Validation if
CausesValidation=False (Christophe)
BUG: Ticket#721 - TActiveCustomValidator + TValidationSummary problem
BUG: Ticket#736 - Files never created in clientscript.php (Qiang)
BUG: Ticket#744 - Callback error handling is improved (Qiang)
BUG: Ticket#747 - TRangeValidator accept letters when type Integer is
specified (Christophe)
BUG: Ticket#750 - The "expire" parameter is used inconsistently in
cache modules (Qiang)
BUG: Ticket#753 - Themes not allways being set (Qiang)
BUG: Ticket#754 - CultureInfo constructor errors (Qiang)
BUG: Ticket#759 - TSlider wrong layout with horizontal with center
horizontal align (Christophe)
BUG: Ticket#769 - Problem with Validator inside TActivePanel
BUG: Ticket#776 - Logout button should not cause validation in blog
tutorial (Qiang)
BUG: Ticket#785 - TDatePicker OnDateChanged event problem (Christophe)
BUG: Ticket#787 - Typo in validation3.js (Christophe)
BUG: Ticket#766, #786 - TDbCache does not work with MySQL and
PostgreSQL (Qiang)
BUG: Ticket#799 - Fixed several link errors in documentation about PDO
BUG: Ticket#803 - TActiveRecord cannot be serialized/unserialized
correctly. (Qiang)
BUG: Ticket#808 - Client side validation should work for file upload.
BUG: Ticket#828 - Validators not working when
RepeatLayout="Raw" (Qiang)
BUG: Fixed a bug in TPropertyValue::ensureArray() (Qiang)
CHG: Ticket#819 - TLogRoute now displays GM time instead of local time
CHG: Changed TConditional so that the controls in its template behave
like they are in its parent (Qiang)
CHG: Active Record many-to-many relationship change from
self::HAS_MANY to self::MANY_TO_MANY (Wei)
CHG: Active Record no longer automatically performs adding/removing/
updating related objects (Qiang)
CHG: TJavaScript::encode() will encode data as a list if integer
indices are detected (Qiang)
CHG: Ticket#755 - Upgraded to Prototype 1.6 and Scriptaculous 1.8 (j,
ENH: Ticket#660 - Using Globalization.Charset in JSON for AJAX
Callbacks (Michael)
ENH: Ticket#722 - Added Read Only capabilities to TInPlaceTextBox
ENH: Ticket#741 - Added CDbConnection.currentTransaction property
ENH: Ticket#743 - Added status code header in HTTP response when in
error (Qiang)
ENH: Ticket#745 - TWizard action MoveTo - allow specify step ID's
ENH: Ticket#757 - TDateFormat and TNumberFormat now implement
IDataRenderer (Qiang)
EHH: Ticket#770 - THttpResponse send HTTP 1.1 Status code to the
client (Christophe)
ENH: Ticket#783 - Added date/time type support to soap implementation
ENH: Ticket#800,#833 - Added database connection charset for MySql and
PgSql (donkee)
ENH: Active Record supports multiple foreign references of the same
table (Wei)
ENH: Added TDbCommand.queryColumn() (Qiang)
ENH: Active Record now supports implicitly declared related properties
ENH: Active Record now supports query criteria for implicitly declared
related properties (Qiang)
ENH: TDataFieldAccessor now supports chained property access without
getters. (Qiang)
ENH: TParameterModule added caching support (Qiang)
ENH: Added TAuthManager.switchUser() (Qiang)
NEW: Added TDbLogRoute (Qiang)
NEW: Added TDataRenderer and TItemDataRenderer (Qiang)
NEW: Added THtmlElement (Qiang)
NEW: Ticket#544 - Added TXCache (Wei)
NEW: Ticket#729 - Added TActivePager (Christophe)
NEW: Ticket#791 - Added TFirebugLogRoute (Christophe)


Please see the upgrade instructions included in the release.
The following changes introduced in this release need particular

- The RELATIONS type declaration in Active Record classes for Many-to-
Many using
  an association table was change from "self::HAS_MANY" to
  E.g. change
     'albums' => array(self::HAS_MANY, 'Artist', 'album_artists')
     'albums' => array(self::MANY_TO_MANY, 'Artist', 'album_artists')
- Active Record no longer automatically adds/removes/updates related
- '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.


PHP 5.1 or above is required. All functionalities have been tested on
Windows and Linux using Internet Explorer 6/7, FireFox and Safari.


For those who have never heard of PRADO before, PRADO is a
component-based and event-driven programming framework for developing
Web applications in PHP. PRADO stands for Php Rapid Application
Development Object-oriented. PRADO was initially released in August
2004 as the grand prizer winner of the Zend coding contest and has
since been adopted by thousands of developers.

PRADO is best suitable for creating Web applications that are highly
user-interactive. It can be used to develop systems as simple as a
blog system to those as complex as a content management system (CMS)
or a complete e-commerce solution. Because PRADO promotes
object-oriented programming through its component-based methodology,
it fits extremely well for team work and enterprise development.

Site Timeline