Plone 3.0 (Aug 21, 2007)


This is an historical page intended for people who can't upgrade. Current versions of Plone can be found on the overview page

Aims to make Plone more efficient to work with. This release adds versioning, locking, inline editing and validation, link integrity, intranet/extranet workflows, wiki support, OpenID support, and full-text indexing of Word/PDF. (If you're not using the installers, please note that this release requires Zope 2.10.4 and Python 2.4.4 — earlier versions will not work)

For additional information about this project, please visit the overview page .

For installation instructions go to:

There may be hotfixes applicable to this release. Always check the Plone Hotfix Page before production deployment.

Available downloads

Release Notes

State Final release
License GPL
Release Manager Wichert Akkerman
Released 2007/08/21 00:00:00 Universal

For a list of the features in this release, have a look at the Features in Plone 3.0 document.

Feature enhancements in this release

The following features are associated with this release:

Plone needs to have a consistent, core solution for simple versioning tasks. This is expected of modern CMS packages. This PLIP outlines the needs and a proposed solution for versioning. Another PLIP will cover staging and multisite usage.
Ship Plone with additional workflows and a workflow control panel
Plone currently ships with one workflow, we propose to ship it with four pre-defined workflows and a control panel that cover most of the use cases people normally have: Community, Intranet, Web Publishing and Extranets.
Portlets engine based on PlonePortlets and Viewlets
Currently, the portlet mechanism in Plone is very crude. A proper structure to handle third-party portlets, individual caching policies and even asynchronous portlet updates is desirable.
Edit-in-place mode for all basic field types
A lot of the time you just want to change a single attribute on an existing item. We want to enable an "advanced users" feature to make this quicker and more efficient.
Ensuring link/reference integrity (removing 404 links)
One of Plone's weaknesses at the moment is the lack of resource tracking. If you delete a picture, and another document references this picture, you won't know before you look at the other document.
Move properties to Edit screen using pre-loaded fieldsets
Clean up the UI a bit by moving the Properties to a grouped schemata on the edit screen.
Reader and Editor roles
It is too difficult to share a private or restricted document with another person or group. By introducing Reader and Editor roles, the Sharing tab can be used to let any given user or group the right to read or edit any object.
Componentise the global content menu
The global content menu, the green one with 'actions', 'add item' and 'state' drop-downs, is one beastly monolithic page template with a lot of logic. Worse, whilst it is possible to use actions to add new items to the 'actions' menu, if you want to add a new menu (e.g. for versioning or staging) you have to override the template wholesale. This proposal aims to change that by using views, adapters and utilities.
Generalized Next / Previous navigation
There is a need for a feature that allows a user to navigate easily between content items stored in a container such as a folder.
Prevent concurrent through-the-web editing in Plone. Trigger WebDAV locking on edit. Make it possible to borrow locks easily.
Improve sharing page
The sharing page has to be simplified significantly.
Move to CMF 2.1
Require CMF 2.1.
Improved Markup Support
Creating a mechanism for adding support for additional markup languages such as Markdown and Textile for TextField fields and a site-wide policy for defining available and default formats.
We want to create a page where the user can add portlets/widgets showing summaries with content of the portal. The idea is to provide an overview/summery over the content. The criteria which content and wich portlettype can be set/chosen by the user. The personal google page is a very good example.
Portal type configlet in plone setup
Proposal for a configlet in Plone ui to control various settings related to portal types.
Content rules engine
With the introduction of Zope 3 events, it becomes possible to react to events such as "object added" or "object modified". Plone should enable site administrators to set up rules that are invoked when these events occur under certain conditions. For example, it could be possible to move all Events added to a particular folder to the /events folder automatically.
Remove migration code for old releases
Don't support migrating to Plone 3 from versions earlier then Plone 2.1.0-final.
Minimize page weight
Plone as it is per Plone 2.5 is unnecessarily heavy when it comes to downloaded CSS, JS etc.
integrate iterate for checkin/checkout/staging
builds on top of cmfeditions, to allow for explicit checkin/checkout and staging, without the overhead of site stages.
Include KSS in Plone
KSS is an AJAX framework with Zope and Plone support. We propose inclusion of the framework core as part of Plone, together with the implementation of some UI improvements with Ajax.
Wiki syntax support for all content
"wicked" provides usable wiki-like linking and content creation within AT based content. This proposal recommend the inclusion of this behavior as an option for Plone's content.
OpenID support
Add support for the OpenID decentralized identify system to Plone
More configurable and reusable i18n features
Move code for normalizing of ids out of CMFPlone and make it optionally configurable per language. Also consolidate all the three files currently found in AT, CMFPlone and PloneLanguageTool into an external package and hook these up using utilities instead.
Expose more settings in the Control Panel
There are a lot of common settings that you still have to reach for the ZMI to adjust.
New visual design for Plone
The existing Plone look is getting a bit long in the tooth — seeing as it essentially is the same as when it was conceived 5 years ago, it's time for an update.
Return to using getIcon for content type icons
Aka. as "the un-PLIP", this proposal advocates changing back to the earlier approach used for content type icons in Plone.
Add a RichText field to Smart Folders
Smart Folders would be much more flexible in real-world deployments if there was a RichText field before the results listing.

Change log

Plone 3.0 - released August 17, 2007

  • Remove usage of login.js and Deprecate it. [ree, wichert]
  • Update migration code for final release. [wichert]
  • Remove keywords/category listing from document byline and instead render it as a viewlet right below that. [maurits]
  • Make workflow history visible again, as viewlet just below the body of the content. Fixes [maurits]
  • Let the "manage portlets" fallback link (for when no columns are shown) use the canonical object (i.e. object without default view), in the same way that the column would have done. Fixes [optilude]
  • Sort the configlets in the control panel by their translated title instead of their English title. [hannosch]
  • Fixed erroneous message when publishing multiple items and a subfolder with no items was present. Also synced status message with the content_status_modify script, so only one message is shown. This closes [hannosch]
  • Fixed a few status messages to work with content item titles with non-ascii characters in them. [hannosch]
  • Plone 3.0 has an ID "content" that only includes the actual content, not everything in the content well. Adjusted the getContentArea() method in register_function.js to prefer this if it's present. This fixes [limi]
  • Fixed incorrect redirect when pressing the cancel button on the sharing tab. For Files it would cause you to download the file. This fixes Fixed in [maurits]
  • Fix incorrect use of getActionById that caused an error when sending someone a link to an item in the site. This fixes [maurits]
  • The wiki syntax support now supports both the [[link]] and ((link)) syntax variations by default. Removed the preference for selecting between them, since it no longer does anything. [limi]
  • Adding a mini-login form to the login failure screen. This fixes [limi]
  • Since the CSS isn't recalculated if you switch to https mid-flight, we need to add https version of portal_url to the blacklist to avoid getting the lock icon on local links. This fixes: [limi]
  • Fixed permissions for iterate check-in/check-out so that non-manager users can use it. Fixes [optilude]
  • Corrected broken Javascript regular expression that caused almost arbitrary stuff in the query string to cause 'searchterm'-highlighting. Thanks to Claytron for patch. Fixes [elvix]
  • Reformatted the workflow descriptions in order to prevent insane amount of whitespace to show up in the translations. [hannosch]
  • Added i18n markup to the workflow descriptions in GenericSetup profiles. [hannosch]
  • Remapping the "(Default)" workflow to No Workflow didn't work. Fixes [optilude]
  • Remapping to "No Workflow" resulted in an error, fixed. Thanks to rsantos for the patch. Fixes [limi]
  • Author profile template was showing left/right portlets, removed these. [limi]
  • Removed httpresponse patch, which is obsolete with Zope 2.10.4 which we do require now. [hannosch]

Plone 3.0-rc2 - released July 27, 2007

  • Added a description to the no-workflow information in the types control panel. This fixes [wichert]
  • Added in markup for the IDs #contentTopLeft, #contentTopRight, #contentBottomLeft, #contentBottomRight to allow rounded corners on the content well using the same technique as the portlets. [limi]
  • Updated componentregisty.xml to new style. As the object handler only supports registering objects in the site itself now, we can remove all the slashes. [hannosch]
  • Updated the migration tool to use the "upgrade" terminology, to be consistent with the recent documentation. Also removed useless tab, all information is on one screen now. [limi]
  • Move login and logout-handling code into the membership tool and add sending of events when a user logs in or logs out. For Plone 3.5 we can move most of the code into event handlers. [wichert]
  • Harmonized the link classes for wiki links with the Plone standard, made pages that haven't been created yet red, made the entire link clickable, made the "+" superscript. [limi]
  • The protocol-specific links should only be applied inside the content area. [limi]
  • Fixed inline editing for dates in event_view [spliter]
  • Fullscreen view for images has a title of it's parent now [spliter]

Plone 3.0-rc1 - released July 13, 2007

  • CMF has renamed getToolByInterfaceName to getUtilityByInterfaceName. Update our scripts accordingly. [wichert]
  • validate_email is stored on the portal root, not in site_properties. Make all scripts and templates aware of that. [wichert]
  • No longer do portlet and action calculations on error pages. This will make them less resource intensive, and less likely to throw their own errors (which resulted in an XSS issue). Additionally, this means that there is now a means for any template to avoid portlet and action processing as needed. [alecm]
  • Remove hard-to-cache recent portlet from the default front page. It's on the default dashboard. [optilude]
  • Changed the behaviour of the "Allow comments" to be a checkbox instead of having three settings. It now respects the global setting unless you made a manual change on that particular document. This closes [hannosch, limi]
  • Moved the login.js script to only trigger on the login_form page, since that's where the login portlet posts to anyway. Carrying it around on every page doesn't make sense. [limi]
  • The mark_special_links javascript is no longer hooked up, since we use CSS to do the various protocol-specific markers now. It's not removed from existing sites that use it, but new sites will not have it enabled. The CSS approach works in all modern browsers, but not Internet Explorer 6. It works fine in IE7, however. If you are upgrading from an earlier Plone release, you might want to remove the script manually to reduce page weight. [limi]
  • Moved several javascripts to be rendered for logged-in users only to reduce the weight of the anonymous page load. [limi]
  • If we failed to send the user registration email but the user selected his own password to not remove the newly created user but just warn him that the email failed. [wichert]
  • Do not allow user registration if the site is configured to emai password but no mail configuration has been set. [wichert]
  • Escape userids and groupnames in all templates so we can handle ids with unfriendly characters. [wichert]
  • Cleanup handling of userids and loginnames: consistently use userids to key all user information. [wichert]
  • Disable the mobile style sheet by default, since very few people use it, and we're planning to re-work this in 3.5 anyway. If you need it, simply turn it back on in portal_css. [limi]
  • Deprecated presentation.css since the presentation code uses the dedicated S5 CSS files now. This closes [limi]
  • Images and Files no longer have a workflow in the new default setup, making them always visible. This closes [limi]
  • Workflow states now have a description. This closes [limi, hannosch]
  • Remove the community workflow and re-title the Plone workflow to "Community workflow". [wichert]
  • In the simple publication workflow, the author can now edit a published item. He cannot edit it while it is pending, though. [limi]
  • Blacklist the layout id to prevent conflicts with the layout property on dynamic view capable content. This fixes [wichert]
  • Allow form tabbing using other elements than forms. This allows tabbing between multiple forms, which is needed by the content rules config panel. [wichert]
  • Factored most of the "add menu" functionality out of into This contains a view which powers the folder_factories view. The old template-based version is moved to plone_deprecated and is renamed old_folder_factories. Closes [optilude]
  • Made the home link on the login success page link to the navigation root rather than always linking to the site root. Fixes [optilude]
  • Made all portlet management functions use explicit referer URLs, rather than relying on HTTP_REFERER. Hopefully this fixes problems with IE7 not passing this value properly. Should fix and [optilude]
  • Added an event handler to create a default dashboard when a new user is created. This can be overridden using an adapter from IBasicUser to IDefaultDashboard from Closes most of [optilude]
  • Added a message to the dashboard when it is empty, instructing users to add some portlets. Refers to [optilude]
  • Made the cut and delete items in the actions menu fail with a status message explaining the error, rather than an exception, when the context is locked. [optilude]
  • Ensured that the rules tab is not displayed if content rules are disabled globally. Fixes [optilude]
  • Show the locked icon to any user (including the one who holds the lock) so long as they would normally have the "Modify portal content" permission. This makes it easier to realise when you inadvertently locked an object. [optilude]
  • Fixed _at_creation_flag on initial content. This closes [hannosch]
  • Remove the properties action from all FTIs. [wichert]
  • Corrected status messages emitted by the join form and personalize validators. This closes [hannosch, wichert]
  • Unregister tools which are no longer action providers. This fixes [wichert]
  • Added tests for sending mails via the contact form with Unicode input. The actual bug was fixed in SecureMailHost. This closes [hannosch]
  • Added migration to the new five.localsitemanager lookup class. [hannosch]
  • Added proper byline on search results, optimized layout. [limi]
  • Adding support for the rel="tag" microformat. This closes [limi]
  • Separate the kss resources to a development and production version, and change portal_javascript entries to switch to the new resources. Modes can be switched by setting portal_javascript to debug mode, or by visiting the view @@kss_devel_mode/ui (this works with client side cookies, and thus enables changing the development mode of kss without touching the server). [ree]
  • Use the PlonePAS way of setting member properties [wichert]
  • Removed utility registrations for tools that are not utilities anymore. [hannosch, wichert]
  • Updated the factory and migration_util code to use the new GenericSetup methods for directly loading profiles, without setting the context. [hannosch]
  • Small i18n markup fix in the control panel overview. Dynamic content inside a message has to be quoted by using i18n:name. [hannosch]
  • The persistent type information of the Topic type was not updated to its new name Collection. This closes [hannosch]
  • Reformatted the migration registrations for less excessive whitespace use. [hannosch]
  • Added migration registrations for the 2.5.3 rc1 and final releases. Corrected the history. This closes [hannosch]
  • Added the selected year to the options in the calendar date picker box if it was not in the available range, so you can always keep the year. This closes [hannosch]
  • No longer migrate the deprecated related and language portlets to classic portlet assignments in the portal root. This closes [hannosch]
  • Made the user preference for which editor to use translatable. This closes [hannosch]
  • Consistently bicapitalized JavaScript. This closes [hannosch]
  • Fixed explanation on the navigation control panel. This closes [hannosch]
  • Updated the language control panel to a new formlib-based version which shows all the language names localized to your language. This refs [hannosch]
  • Added migration to move the kupu (core) and CMFPlacefulWorkflow (add-on) control panels to the right categories. This closes [hannosch]
  • In GenericSetup handler: Added support for based-on and make-default parameters in <order /> and <hidden /> nodes, value for skinname can be "*" (means all). Added support for insert-before, insert-after (value can be "*") and remove parameters in <viewlet /> node. Viewlets ordering and hiding are now additive. This closes [davconvent]
  • Made prefs_user_details pull its form from personalize_form to minimize duplicated code. If you have customized any of these templates, you should probably revisit them and update your templates accordingly. [limi]
  • Moved, and to viewlets, found in The original templates are now in the plone_deprecated layer. [optilude]
  • Users aren't invited to contact the site admin anymore if mail settings are not set. This closes [hannosch]
  • Changed the global section (tab) navigation so that it shows non- folderish items as well as folderis ones by default (for migrated the sites, the default is not to display them). Also changed the navigation tree so that it start at level 1, not the site root by default (again does not affect migrated sites). This makes it easier to have a separate front page, and lets the tabs act as first-order navigation with the navtree acting as second-order-and-below. [optilude, limi]
  • Added a persistent based RAMCache, which is used for caching the portlets by default. Configuration is available via http://portal/@@ramcache-controlpanel. [hannosch]
  • Allow user ids that are substrings of existing user ids. This fixes [nouri]
  • Fix `RegistrationTool.mailPassword` by passing the results of `reset_tool.requestReset` to it, instead of having the template call the tool's function. Also take care about encoding, since the template returns unicode now. This makes e-mailing forgotten passwords work again, and fixes [nouri]
  • Added an opt-out for multi-submit protection. Add a class to the input tag called "allowMultiSubmit". [optilude, ree, fschulze]
  • Adjusted our RegistrationTool's mailPassword method not to use the method from the base tool anymore, as that has changed in incompatible ways. Reverted the method to use the same logic as in CMF 1.6. This refs [hannosch]
  • Corrected inconsistent slashing of URLs in folder listings, fixes
  • Fixed migration from Plone < 2.5. The portal_setup tool needs to be installed before installing CMFPlacefulWorkflow now. This closes [hannosch]
  • Added ZPT-like i18n markup to GenericSetup profiles, which is used for automatic message extraction by i18ndude. [hannosch]
  • Cleaned and speed up ulocalized_time functions. Added request to the method signature which was implicitly acquired so far. Now you can optionally provide it directly. [hannosch]
  • Corrected spelling error in validate_folder_constraintypes.vpy. This closes [hannosch]
  • Fixed duplicate class definitions in some templates. [hannosch]
  • Fixed lots of small i18n markup errors. Mostly using different message ids for messages whose text has changed significantly. [hannosch]
  • Link to the users dashboard from password_form and personalize_form, instead of to the plone_memberprefs_panel. [hannosch]

Plone 3.0-beta3 - released May 5, 2007

  • Allowed any non-structural folders and non-folderish items be eligible as default view types. Structural folders can still be listed if they are added to the default_page_types property. This closes [optilude]
  • Gave the Editor role a few additional permissions: "Modify view template", "Request review" and "Modify properties". This closes [optilude]
  • Moved sharing action to a global action and removed from standard types. This closes [optilude]
  • Fixed migration code for CMFEditions. This closes [hannosch]
  • Fixed member_search_results to work for users without a fullname. [hannosch]
  • Added This allows you to hide and order the viewlets per skin via a GenericSetup profile.

Plone 3.0-beta2 - released May 2, 2007

  • Extended support for creation of translated initial content to include all titles and descriptions of all initial content. [hannosch]
  • Add getChainFor method in WorkflowTool from CMFPlacefulWorkflow monkey-patch and disable this one. [encolpe]
  • Hide CMFPlone on the add-on product installation control panel. This fixes [hannosch]
  • Fix bad links between templates prefs_users_overview, prefs_user_details and prefs_user_membership (remove starting space and force portal_url) [encolpe]
  • Separated the Editor role into Editor and Contributor, the latter with responsibility for adding content. This is necessary in order to support the (most common?) use case of wanting to have a folder in which people can add content, but not edit the folder itself! [optilude]
  • Moved global_logo, global_pathbar, global_personalbar, global_searchbox, global_sections and global_siteactions to viewlets in [fschulze]
  • Add POST-only protections to security critical methods (see [mj, bloodbare, alecm]
  • Switched to the simple_publication_workflow as the default workflow. Note that the tests still assume plone_workflow is the default (see the previous change message below). [optilude]
  • Made an extension profile for the default Plone test fixture in profiles/testfixture. For now, this explicitly sets the test fixture workflow. This profile should be used with care - deviate too far from the base profile and tests become meaningless! However, some deviation may be inevitable in order to have sane and predictable tests. [optilude]
  • Deprecate Products.CMFPlone.utils.BrowserView. Its users should use Products.Five.BrowserView directly. [wichert]
  • Removed presentation.css, as the presentation mode has moved to use the S5 presentation mode. [limi]
  • Cleaned up the ID mess around which ID/class that wraps the actual content (without the UI elements in the content well). The official approach is now to use #content for the actual content, and to use #portal-column-content for the entire content region. Also made it possible to get rid of some !important statements. If you have CSS that depends on either of these two selectors, you might want to make sure that the output is still as expected. It should work the same way in most cases, but since the scope is narrower for #content now, you might need to update your styles (and main_template needs to be updated too, if you have customized that). Fixes [limi]
  • Let users with the Editor local role add content in folders. Note that this will only work for third party content types and custom workflows if they either use one of the standard "add content" permissions or explicitly give Editor the Add portal content role. Fixes [optilude]
  • Deprecated and moved the functionality to the @@plone view. As part of this, removed the use_folder_tabs property. All structural folders now use folder tabs; this property pre-dates the concept of non-structural folders. [optilude]
  • Reindex security recursively after group name update in stripGRUFLocalRolePrefix. Fixes [alecm]
  • Add back user skin cookie deletion on logout. Fixes [alecm]
  • Added visual styles and updated markup for the new "Info", "Warning" and "Error" status message levels. [limi]
  • Made the error page much friendlier, it essentially just prints a log entry number now and explains that the error has been logged. If you are logged in as an administrator, you have access to the full error log. This fixes [limi]
  • Ensured that templates missing the initial h1 class "documentFirstHeading" got it applied, since it makes a difference with the header styling. If you see additional space above your headlines in your own products or add-on products, please insert this class. It would have been nice if IE supported :first-child selectors, but since it doesn't, this is the workaround. [limi]
  • Add a migration utility function to load (parts of) GenericSetup profiles during migration. This allows us to write configuration changes in the form of GenericSetup extension profiles instead of python code. Use this to load a new 3.0b1-3.0b2 migration profile. [wichert]
  • News and Events are no longer "Smart Folders" (or "Collections") in new created portals. Instead, they are now "Large Folders" with a "Collection" default page named aggregator. This closes [davconvent, nouri, optilude]
  • Remove the default_charset property on the portal object during migration if it is set to an empty string. This makes sure we do not try to use an invalid (ie empty) encoding when exporting GenericSetup profiles. [wichert]
  • Register the tool inteface for the membership and workflow tools using the CMFCore interface, overriding the CMFDefault registration. [wichert]
  • Enabled search-current-folder-only option for the quicksearch box. [optilude]
  • Make the navigation root affect searches (including live searches). By default, you will not get search results from outside the navigation root. [optilude]
  • Merged patch from olivluca to properly support the uniqueItemIndex iterator. [optilude]
  • Set the current instance version on site creation so we can migrate properly. [wichert]
  • Added new arguments to the action tools API which allow querying for a specific action category or exclude certain action categories or action providers from the results in an efficient way. [hannosch]

    We exclude all actions from the workflow tool and those in the folder_buttons and object_buttons categories by default from the dictionary available from the ploneview. [hannosch]

  • Removed lots of unused actions and the entire object_tabs and global action categories. This closes [hannosch]
  • Cleaned up code in so we don't have a performance penality for mixed unicode/non-unicode pages. [hannosch]
  • Micro optimization: Use a truly local variable for language lookup, which is faster than getting the value from the globals. [hannosch]
  • Stop calculating the body text of a document twice in document_view. [hannosch]
  • Changed order of action providers to fit the way we want to see content tabs. [davconvent, nouri]

Plone 3.0-beta1 - released March 26, 2007

  • Use plone.session for authentication. [wichert]
  • Replaced getToolByName calls with getUtility/queryUtility for placeful workflow tool. [encolpe]
  • Changed all mail related templates and methods to use the email_charset property. This closes [hannosch]
  • Added email_charset property, which should be used as the charset to send mail, so you are not restricted to the default_charset which has to be utf-8 right now. This refs [hannosch]
  • Opera 9 is now a supported browser for the rich text editor. [duncan]
  • Removed, as it can't be deprecated in a safe manner. If your product depended on this, you need to update it. [limi]
  • id="relatedItems" is now a class="relatedItems". This closes [limi]
  • Removed references to specific workflow states from the publishing process explanation in content_status_history.cpt. This closes [hannosch]
  • Increased the calendar_starting_year property to 2001, so the available calendar range doesn't end in 2010, which is quite soon ;) [hannosch]
  • Made the content menu (in only show up on the main view of an object; on other tabs, it makes less sense, especially on the edit tab where it may cause confusion and lead users to accidentally cancel their edit operation by clicking a content menu link. [optilude]
  • Removed all mail templates which are part of PasswordResetTool and weren't used anymore. [hannosch]
  • Replaced a few last occurrences of the term member with user. This closes [hannosch]
  • Added temporary monkey-patch for GenericSetup's components handler. We need to ensure we store Acquisition free tools as utilities. [hannosch]
  • Properly install PloneLanguageTool during site setup and migrations. [hannosch]
  • Updated setup code. Archetypes and all its dependencies are installed based on GenericSetup extension profiles now. [hannosch]
  • Add migration code to remove the PlonePAS PloneTool from the site and replace it with a standard PloneTool. [wichert]
  • Improve the test for GRUF presence; it also considered a PlonePAS monkeyed PAS as GRUF. [wichert]
  • Remove GRUF usage for local role handling in PloneTool [wichert]
  • Updated language dependend portal creation step. We set the default language of the portal, the allowed languages and if necessary the combined languages support option. If we get a territory code in the locale we also set the visible_ids setting to true for non-latin-scripts, for which we don't have a IURLNormalizer registered. This closes [hannosch]
  • Removed tests/ and tests/ as they have outlived their usefulness. To run tests use Zope's testrunner: ./bin/zopectl test --nowarn -s Products.CMFPlone [stefan]
  • Added missing migration step addPortletManagers, to add the new portlet manager adapters. [hannosch]
  • Fixed various bugs in the migration code. We need to register additional GenericSetup import steps manually or the componentregistry step is not available, which new products like CMFEditions depend on. When add-ons use this step we need to make sure they are allowed to run all the dependent steps, so we needed to make the plone-site step available for all extension profiles, by not requiring a flag file anymore. We also need to call the enableZope3Site and registerToolsAsUtilities migration steps as the first step in every possible version migration, as the migration code itself depends on these to be present. Otherwise migrating from older versions would fail with ComponentLookupErrors. [hannosch]
  • Location is now a standard metadata field available for categorizing content. This means that you can geotag images, display content with location data on a map, etc. [limi, nouri]
  • Extended the timeout on password resets from 1 day to 1 week by default. [limi]
  • Fix bug #6227 : Batch-workflowing objects would erroneously give them the effective date of the portal object or their container. [elvix]
  • Registered all standard CMF and Plone tools as local utilities and replaced most getToolByName calls with getUtility/queryUtility. [hannosch]
  • Registered the portal itself as a utility providing IPloneSiteRoot and as one providing CMF's ISiteRoot. [hannosch]
  • Replaced our local component registry with one from five.localsitemanager. There is no migration path for existing Plone 3.0 alpha sites, so make sure to throw them away and recreate new ones. Migration from Plone < 3.0 is of course supported. [hannosch]
  • Optimized the calendar_macros template. Trying to translate integers like years or hours wasn't very helpful. [hannosch]
  • Optimized code in the translation service tool for the calendar_macros use case, so we can get rid of the explicit call of the deprecated utranslate script. [hannosch]
  • Added new user/group settings control panel. [hannosch]
  • Moved version overview and server debug mode to the maintenance control panel. Added warning message about missing mail host or email from adress to the main control panel view. [hannosch]
  • Added external_links_open_new_window to site properties which controls the behavior of mark_special_links.js. [hannosch]
  • Only show the user friendly types on the navigation control panel. [hannosch]
  • Excluded x-web-intelligenttext from the list of activated mimetypes. [hannosch]
  • Remove the folder user action, and re-point the author profile user action to point to the users dashboard instead. [wichert]
  • Add an object_provides index to the catalog. This indexes all interfaces provided by an object with their dotted names. [wichert]
  • Made it possible to look up the ExtensibleIndexableObjectWrapper using a multi-adapter on (context, portal). The wrapper now has an additional method update() which can update with workflow variables and the like. This allows a particular wrapper to be registered for a particular type of object, allowing more careful control over the indexing process. [optilude]
  • Removed ids from portlet templates and turned into classes. This makes sure we do not get duplicate ids in our html when multiple instances of the same portlet type are created, while still allowing different styling of different portlet types [wichert]
  • Undeprecated the toLocalizedTime script. We are probably going to change the approach to be based on Zope3 locales in the next release, so it doesn't make sense to force everybody to change their products now. [hannosch]
  • Renamed Keywords to Categories, and included tags/labels/keywords explanation in the help text. User research showed that people understand this term better than the other alternatives. [limi]
  • Make it easy to include javascript for trackers like Google Analytics via a new control panel-manageable webstats.js file. [mrtopf]
  • Added an RSS portlet. [mrtopf]
  • Removed the unsupported Plone Tableless skin. [wichert]
  • Added class to the navtree: "navTreeItemInPath", which exists on all nodes that are in the current path. [limi]
  • Added Google/MSN/Yahoo site map support as described on It is disabled by default and can be retrieved via http://<portalroot>/sitemap.xml.gz [mrtopf]
  • Add migration code for the enable_sitemap site property [wichert]
  • Removed the Undo action (since we have versioning now) - it's too complex to be useful for normal users, and admin users have the ZMI. Also renamed "Join" action to "Register" and removed the dedicated link to the personal Preferences pending addition of the Dashboard link. We do not migrate existing sites to these values on purpose - if you want these changes, it's easy to fix them in portal_actions on your site. [limi]
  • Set text-transform property to none, it's not 2001 anymore, and the mix of uppercase and lowercase was hurting me. Also fixed font size for the unreadably small text in Firefox on certain platforms. [limi]
  • Install kupu via its GenericSetup profile. [wichert]
  • Renamed the statusmessage of type stop to error and the CSS class from portalStopMessage to portalErrorMessage accordingly. [hannosch]
  • Removed the forms.txt and rendering.txt functional test - there are covered by AddMoveAndDeleteDocument.txt, which is more sane. Also update the latter to reflect a label change from [optilude]
  • Deprectated viewThreadsAtBottom and getReplyReplies in favour of a viewlet for IBelowContent, defined in [optilude]
  • Added all currently used translation domains as PTSTranslationDomains. This makes them available as Zope3 translation domain as well, so they can be used in pure Zope3 page templates for example. [hannosch, philiKON]
  • Changed plone_control_panel overview to use a three column layout. [hannosch]
  • Added migration steps for new security and html filter control panels. [hannosch]
  • Sanitized control panel names. Removed the redundant settings in titles. [hannosch]
  • Converted site and skins control panels to be formlib based. Moved the Google sitemap option to the site control panel. Fixed migration code for maintenance control panel. This closes [hannosch]
  • Hide the PAS folder and its plugins from the breadcrumbs. [wichert]
  • Fixed cropping of utf8 encoded text. cropText script is marked as deprecated now. This fixes [naro]
  • Remove the default language setting from the site control panel. This setting doesn't work anyways right now. [hannosch]
  • Split the dashboard into four columns. If you have run an earlier version of the alpha, you need to re-run the portlets.xml importhandler or re-create your portal to be able to use the dashboard. [optilude]
  • Change the default time and date format. This closes [hannosch]
  • On site setup the mail host and email address are left empty. This references [hannosch]
  • Renamed "Smart Folder" to "Collection" since it better describes the new functionality, made other things more consistent: "Comments" everywhere instead of "Discussion", "Publishing Date" instead of "Effective Date", better help text on these. [limi]
  • Ignore a bunch of more required products in the install/uninstall control panel form. [hannosch]
  • Removed last occurrences of portal_status_messages and removed the inclusion code in global_statusmessage. This closes [hannosch]
  • Removed the old CMF types from the GenericSetup profiles. This closes [hannosch]
  • Removed the news_listing template that hasn't been in use since Plone 2.0 (it wasn't working anyway). It was replaced by the summary view in Plone 2.1, and deprecated then, which means it should be safe to remove. [limi]
  • Fixed encoding problem when sending out registration emails [jvloothuis, ender]
  • Deprecated relaxed mode of the normalizeString methods in favour of direct usage of the normalizers in plone.i18n. [hannosch]
  • Merged plip174-reusable-i18n branch. Normalization logic and language handling are based on plone.i18n / now. [hannosch]

Plone 3.0-alpha2 - released February 13, 2007

  • Deprecated the isRightToLeft method on the ploneview in favour of the is_rtl method on the plone_portal_state view. [hannosch]
  • Added Google-specific extensions to the robots.txt file to deny it from indexing a gazillion sendo_forms. The standard doesnt allow for wildcards boot Google does. [elvix]
  • Added robots.txt file. This should remove some unwanted not-found-errors and give fresh Plone-admins something to customise for robots if they want it. more info about robots.txt here: [elvix]
  • Commented out the IE-specific styling of textarea scrollbars from IEFixes.css. Plone uses standard scrollbars from 3.0 onwards, but if you want them back, they can easily be uncommented. [limi]
  • Added some classes to for more flexibility when styling this template. This closes [spliter]
  • Deprecated skin related methods of the Plone tool. The functionality is provided by the skins tool itself for some time now. [hannosch]
  • Updated the various mixed Unicode/UTF-8 support patches to be compatible with Zope 2.10.2, which is required now as a minimum Zope version. [hannosch]
  • Did some minor import locations cleanup. Deprecated i18n related methods in and importing IndexIterator from [hannosch]
  • Added simply optimization to the getReplyReplies script, avoiding some calculations when there are no replies and removed the custom getDiscussionFor method from CMFPlone's DiscussionTool, as it wasn't needed anymore. [hannosch]
  • Fixed an unsafe usage of hasattr in computeRelatedItems with base_hasattr. [hannosch]
  • Removed obsolete factory type information for the Plone folder classes. [hannosch]
  • Deprecated the getOrderedUserActions script. It was only used in the global_personalbar to enforce a certain logical order of the actions, but action categories support ordering themselves now, so the script was obsolete. [hannosch]
  • Deleted folder_localrole_form and its scripts, since this is now provided in the @@sharing view. That felt good. Added an alias with a deprecation warning in so that old links still work. The alias will be gone in 3.5. [optilude]
  • Moved accessibility elements from base.css to invisibles.css, since they should remain even if you do a total customization. [limi]
  • Removed Five from the core versions overview in the plone control panel. Five will probably evolve as a set of independent packages rather than one monolithic package so its version isn't of any particular interest anymore. [hannosch]
  • Added Reader and Editor local roles, and merged in support for the new sharing page, at the @@sharing view. [optilude]
  • Add support for OpenID authentication. [wichert]
  • Make it possible to use the plone.session PAS plugin. This provides a scalable method to use session authentication in Plone sites. [wichert]
  • Converted PlonePAS installation to be GenericSetup based and moved all user/group related setup functions there as well. Also removed explicit GroupUserFolder installation as it isn't needed anymore. [hannosch]
  • Added new SiteManagerCreatedEvent that is called right after the portal is enabled as a site. We can use this to call the setHooks and setSite functions which are mandatory during test runs, before any other GenericSetup import step tries to call any local component. [hannosch]
  • Decoupled some more of the GenericSetup import steps. The plone-site step only creates the local component registry and enables the portal object as a site manager. This is needed as steps using local components depend on this step while not much else in the site may have been configured yet. The plone-content step adjusts the initial content and is run last as it depends on everything else in the portal having been already set up. [hannosch]
  • Added an alias view login (aka @@login) to let people use /login to get to login_form (it perform a redirect). This is also now a reserved id. [optilude]
  • Merged, your friendly content rules engine [wayworn, optilude]
  • Moved deprecated zcml declarations to its own file deprecated.zcml in order to make it easy to spot those or turn them off. [hannosch]
  • Add a new interface INonInstallable for which you can register named utilites that provide a list of profiles that should not be available as installable during site creation. We exclude certain products that are installed anyways by Plone from the config screen this way. [hannosch]
  • Use the INonInstallable interface in CMFQuickInstallerTool to exclude some products from the list of installable products in the ZMI and install/uninstall control panel screen. Otherwise CMFDefault, CMFUid, etc. would show up in the list. [hannosch]
  • Added support for to the 404 template. This enables automatic redirects when an objet has been moved or renamed, and offers suggested search results on the 404 page otherwise. [optilude]
  • Merged changes necessary to support PLIP125 Link Integrity, mostly found in the package. [witsch, optilude]
  • Removed the setup tab from the migration tool. It wasn't working anymore and the functionality can be found on the controlpanel tool anyways. [hannosch]
  • Fixed a bug in the require_login script calling a non-existent method on the migration tool. [hannosch]
  • The controlpanel and migration tools are registered as local utilities now as well. [hannosch]
  • Merged in kss. [ree]
  • Finished multilingual front-page support code. The front page which is created at portal creation time is now localized to the browser language used while creating the portal, as long as there is a complete translation of the page. [hannosch]
  • Merged generalised next/previous navigation into (interfaces, viewlet), CMFPlone (rel links in, tests) and ATContentTypes (adapter for IATFolder). [henri, pelle_, trollfot, optilude]
  • The interface and translation service tools are registered as local utilities now. [hannosch]
  • Exposed the member preference panels in the prefs portlet. This closes [hannosch]
  • Added javascript and css to switch between schemas in edit page. [fschulze]
  • Removed properties tab for all ATCT types. [fschulze]
  • Moved Products.CMFPlone.browser.contentmenu to Note that the tests remain in CMFPlone for now (so that they get run more often, and to avoid having to replicate dummies etc in the new location). [optilude]
  • Moved date/time formatting related messages to it's own domain called plonelocales. Message files in this domain are translated directly by the Zope 3 translations service, which results in a major speed increase for date/time formatting. [hannosch]
  • Moved new controlpanels to its own package ( [hannosch]
  • Moved various interfaces and utilities - IDefaultPage, INvigationRoot, INavtreeStrategy, INavigationQueryBuilder and the buildFolderTree() and getNavigationRoot() helper functions - to This reduces the dumping-ground feeling of CMFPlone.browser, leaving it free to focus on actual views that implement CMFPlone look-and-feel and policy, and provide a saner dependency/import location for third party components needing these tools. [optilude]
  • Gave IContentIcon a html_tag() helper method to make rendering the icon one line (<img tal:replace="structure item_icon/html_tag" />) rather than ten or so. Also made the properties properties rather than functions. [optilude]
  • Removed outdated version of listFilteredActionsFor from the actions tool. [hannosch]
  • Deprecated cache_decorator in browser/ (formerly, in favour of plone.memoize's instance.memoize decorator. Replaced all uses of cache_decorator in CMFPlone with plone.memoize. [optilude]
  • Renamed Products.CMFPlone.browser.plone ( to Products.CMFPlone.browser.ploneview ( The naming was causing conflicts with the plone namespace package. A module alias remains during the deprecation period (i.e. it will be removed in Plone 4.0). [optilude]
  • Use img tags instead of css classes for icons (PLIP 178). [fschulze]
  • Added missing ATRelativePathCriterion to the default profile. [stefan]
  • Some minor code modernizations in the FactoryTool. [hannosch]
  • Added formlib based mail and search control panels. [hannosch]
  • Removed the view alias of index.html for all standard content types. This makes it possible to create and upload files called index.html to the site, which is quite common when batch importing old sites into the site. As someone might rely on the former behaviour, we do not migrate any existing type information. This closes [hannosch]

Plone 3.0-alpha1 - released November 24, 2006

  • Update installation instructions for the new Plone release. [wichert]
  • Added calendar control panel based on formlib. This is related to [hannosch]
  • Moved global_contentmenu to plone_deprecated [optilude]
  • Injected Plone 2.1.4 into the migration chain. [stefan]
  • Removed bogus scripts from workflow actions, and introduced some BBB code to ensure that if people are using those scripts and they don't exist, the old fallback (content_status_modify) is still used. [optilude]
  • Plone 3.5 will introduce the role "Power User" to make it possible to hide advanced functionality from casual users. It you have any deployments that use this role name, now would be a good time to rename that role and stop using it in product code.
  • Update migrations for portlets, and kick the meta.zcml in [optilude]
  • First day of week in the calendar is Monday now in Plone by default. This closes [hannosch]
  • Added option to choose different base profile while creating a new Plone site. This closes [hannosch]
  • Deal with CMFDefault renaming _checkEmail to checkEmailAddress. [wichert]
  • Removed unused scripts from the extensions folder. [hannosch]
  • Added some notes about CMFEditions and CMFDiffTool installation. [hannosch]
  • Added first part of multilingual front-page support code. [hannosch]
  • wrote quotes (") in the title-attribute. misformed XML was generated. replaced quotes by ". [jensens]
  • Merged plip142-componentised-content-menu [optilude, hannosch]
  • Merged plip148-cmf21 bundle. This implements and [hannosch]
  • Merged PLIP 8 versioning bundle [wichert]
  • Converted some tests to inline doctests and some others to real unit tests as opposed to integration tests. [hannosch]
  • Changed the logo template global_logo to not use the image replacement approach, but use a straightforward link/image approach instead. Sometimes Plone tries to be too smart for its own good. ;) This also fixes the horizontal scrollbar problem in IE6 for RTL layouts. [limi]
  • Silenced the utf-8 / Unicode DeprecationWarning. We should only emit warnings once we fixed this in all standard cases ourselves. [hannosch]
  • Added migration for the css files added by limi in the previous entry. [jladage]
  • Split up the CSS into a couple of new modules to ease customization. [limi]
  • Added an optional keyword argument to the date_components_support script that allows to specify the minute steps. It still defaults to five. This closes [hannosch]
  • Deprecated some more unused skins scripts: extract_date_components, getPersonalFolderFor, navigationCurrent, navigationLocalRelated and rejectAnonymous. [hannosch]
  • Deprecated the never used nor functional prefs_workflow* control panels, we are better of with a fresh start on these anyways. [hannosch]
  • Do not set initial descriptions for the member folders, as these often ended up in a translation the user did not want or understand. We only use the simply username as a title now, which is language independent. This fixes [hannosch]
  • Updated the text on the member search form to be more user friendly. This closes [hannosch]
  • Deprecated our unmaintainable how-to enable cookie instructions. This closes [hannosch]
  • Added error tolerant version of FasterStringIO to unicodeFallbackPatch. This is monkey patched into the Zope3 tal and pagetemplate modules and replaces the monkey patch found in PlacelessTranslationService so far. [ree, hannosch]
  • Deprecated PloneContent. Use (marker) interfaces instead to get a way to check for a functionality that is common to some types. [hannosch]
  • Deprecated the CMFPlone implementation of LargePloneFolder. Use ATBTreeFolder from ATContentTypes instead. [hannosch]
  • Added unicodeFallbackPatch that allows to use utf-8 encoded strings to be used inside the Zope3 TAL engine. [ree, hannosch]
  • Fixed the 'Unauthorized: You are not allowed to access Creator in this context' error that was raised in the testCookieAuth tests. [hannosch]
  • Using new visualIcon css class to allow much smaller generated.css and RTL.css. When new content types are installed, then generated.css will grow much less then before and RTL.css will not grow at all anymore. The footprint of action icons is also smaller now. [fschulze]
  • The portal object is set up as a Zope3 site with a local site manager. [hannosch]
  • Removed CMFPlone.MemberData. This class is never used, and the future is with PAS-based objects instead of membership/memberdata tools. [wichert]
  • Fixed deprecation warnings for the ZCML content directive. [hannosch]
  • Removed deprecated createTopLevelTabs from PloneTool and utils. Use the topLevelTabs method of the INavigationTabs view instead. [hannosch]
  • Removed deprecated CustomizationPolicy and old site creation machinery. [hannosch]
  • Removed deprecated CSS styles from deprecated.css. [hannosch]
  • Removed deprecated scripts from the plone_deprecated skins layer. [hannosch]
  • Removed lots of deprecated values from the PloneView. [hannosch]
  • Removed deprecated FolderWorkflow, PloneWorkflow and PloneUtilities classes. Removed aliases for base_hasattr and transaction_note from CMFPlone. Import these from CMFPlone.utils. Removed security declarations for zLOG levels. zLOG usage was replaced by Python's logging module. [hannosch]
  • Removed five:traversable from configure.zcml as it is not needed anymore for Zope 2.10. [hannosch]
  • Removed bbb code for MessageIDFactory, queryMultiAdapter, transaction and CatalogTool._initIndexes. [hannosch]