Heads up! These docs are for Portofino 3, which is a legacy product. Check out Portofino 4!

March 18th, 2010

Introduction by Paolo Predonzani

We're very happy to release Portofino 3.1 as the new stable open-source release. It has some simplifications, several improvements/fixes but no new features. No new features? While this may sound strange, the "simplifications" are an important milestone to a strategic goal we're currently pursuing: connecting to existing databases. I'll briefly explain the rationale.

We've often been asked if Portofino can connect to existing databases, for instance databases used by legacy applications, or in any case created outside Portofino. The answer has traditionally been: it depends on the database schema.
Since it's beginning, Portofino has tried to handle database schemas (at the downstairs level) as plainly as possible: plain tables, plain columns, plain relationships, etc. This rule, though, has a few notable exceptions/constraints:

  1. Each table has a numeric primary key called "id". Non-numeric keys, composite keys, or keys with different names are not allowed.
  2. Each table XYZ has a corresponding view called XYZ_view, which reconstructs the full inheritance hierarchy. This view is handy for queries, but not strictly necessary for db operations.
  3. Each recursive relationship (e.g., "component made of components") is implemented using nested sets. This is handy but forces on the database three additional columns (_left/_right/_depth) and two additional views (_up/_down).

As you can imagine these constraints are useful features in some cases, but annoying limitations when connecting to existing databases. For instance, existing databases cannot be assumed to have all numeric primary keys or any of the special views.

With this 3.1 release we've removed constraints 2 and 3, so there are no longer any _view/_up/_downviews or _left/_right/_depth columns: this is a great simplification. In a future release we're going to remove constraint 1, thus allowing Portofino to connect and handle practically any existing database: this will open a huge range of new usage scenarios.

I hope this explains where we are and where we're going. Let us know, in the public forums, what you think about it.

And now it is time for the more technical release notes.

Simplifications:

- All CLASSNAME_view views removed from the database.
- All _left/_right/_depth fields and _up/_down views removed from the database.

Improvements and fixes:

- More consistent use of returnUrl, successReturnUrl and cancelReturnUrl as web parameters in all pages that support a redirect to a return-url after the operation is completed or canceled.
- Fixed bug: self-registered user were not associated to the "Users" group, as they should.
- Non-ASCII characters were escaped using xhtml-style escaping in all cases, which caused problems for AJAX requests. Now, for AJAX requests only, xml-style escaping is used.
- Support for multi-column forms in Elements. Still not used by Portofino, but available for future releases.
- Fixed bug: automatic association of new users to the "Users" group didn't work if locale was different from English. Now fixed for all localizations.
- The "change password" form did not redirect to the correct url. Fixed.
- The automatic upgrade procedure was not working on MySQL. Fixed.

Upgrade from previous versions:

Important notice: always back up you database and files before upgrading.
Version 3.1 includes an automatic upgrade procedure. For more details read the installation guide's chapter on upgrading from an older version.