Bricolage 1.10.0 Changes

2006.01.23

Major New Features

  • Added support for PHP templates. It is now possible to write Bricolate templates in Mason, Template Toolkit, HTML::Template, and PHP. The addition of PHP supports was made possible by the creation of a new Perl module, PHP::Interpreter, that loads a PHP 5 interpreter into Perl. PHP templates in Bricolage are thus pure PHP, with access to all the features that PHP has to offer, while allowing transparent access to the Perl- based Bricolage API for for retreiving and outputting content. PHP::Interpreter was implemented by George Schlossnagle of Omni TI consulting, and the whole PHP/Perl project, including PHP::Interpreter and support for Bricolage PHP templating, was sponsored by SAPO--Portugal Online.

  • Added support for authentication to Bricolage against an LDAP server. The new LDAP_* bricolage.conf directives make it simple to configure Bricolage to authenticate against any LDAP server. Includes support for authenticating users only if they are members of a specific user group in the LDAP directory. Users must still exist in Bricolage, however. The LDAP authentication support was made possible thanks to the addition of a pluggable authentication system. Contributed by Kineticode.

  • Converted Bulk Edit in the UI to use a new format based on Plain Old Documentation (POD), and eliminated the old Super Bulk Edit interface since it became redundant. The POD syntax enables a the complete hierarchy of a story to be edited, including links to related stories and media, in a single text field. Contributed by Kineticode.

  • Added the RELATED_MEDIA_UPLOAD bricolage.conf directive, which allows editors to upload media files directly into a related media element profile if they have permission to create media and to access a media workflow. This makes it a much simpler process for editors to quickly associate media with story documents. The uploaded media files will be created based on the media type element selected from a select list, and given the same category, cover date, and priority as the current document. Users then have the opportunity to adjust these attributes before continuing to edit their stories. Contributed by SAPO--Portugal Online and Kineticode.

  • Added support for sub-second precision to date and time management in Bricolage. This means that dates can be stored in the database with microsecond precision. Sponsored by Alinghi.

  • Added new Precision option to DateTime fields added to elements and contributor types. The supported precisions are Year, Month, Day, Hour, Minute, Second, Millisecond, and Microsecond. Sponsored by Alinghi.

  • Category and story URIs now all end in a slash. This is so that they all behave consistently with root categories and home page URIs, and so that they properly indicate directories. Note that this does not apply if the STORY_URI_WITH_FILENAME bricolage.conf directive has been enabled. B You may need to modify your templates to take into account that story and category URIS now end in a slash, if you were appending a slash in your templates or searching on category URIs for related stories. Contributed by Kineticode.

  • The URI formats are now more flexible. You can now use many more parts of the cover date in the URI, and in whatever format you like. So you could have a format of /%{categories}/%Y-%m-%d/ and end up with the URI /foo/bar/2004-09-22/ if you wanted. Or even /%{categories}/%Y/%V/ to get the week number as part of the URI. You can also include document UUIDs, and even your own text, (e.g. foobar in /%{categories}/%Y/%m/foobar/%{uuid}/. Contributed by Marshall Roch.

  • Added the MEDIA_UNIQUE_FILENAME bricolage.conf directive to allow the file name of media documents to be set to a unique, automatically generated file name on upload. Also added the MEDIA_FILENAME_PREFIX directive for setting a prefix word, such as media, to be prepended to the file name if desired. Contributed by Digital Craftsmen.

  • Added the AUTO_PREVIEW_MEDIA bricolage.conf directive toe allow media files uploaded to a media document to be distributed to all relevant preview servers as soon as the media document is saved, thus preventing 404s on the preview servers when users forget to preview their media documents before previewing stories that references them. Sponsored by Alinghi.

  • Added the new Code Select custom field, which allows users to add arbitrary Perl code to generate the items in a select list. This is great for dynamically pulling in choices from another database, LDAP directory, or anything else you can get at from Perl code. Contributed by Scott Lanning.

  • Added support for typical Windows character encodings. This means that users can select Windows Western (CP1252) as their encoding in order to fix gremlin characters pasted from Microsoft Word. Contributed by Kineticode.

  • New categories now inherit from their parent categories all group memberships and permissions granted to access assets with which they are associated. This makes it far easier for users with CREATE permission to categories to create new categories without having to then edit group memberships and user group permissions to make them the same as the parent's permission, which is what is usually wanted. Contributed by Kineticode.

  • Output channels are now associated with burners and can only include other output channels associated with the same burners. Element types are no longer associated with burners at all. Contributed by Kineticode.

  • Added diff support to the UI to see changes between versions of templates, stories, and media documents. Contributed by Kineticode.

  • Added JavaScript-powered Find/Replace dialog box to Bulk Edit in the element profile and to the template profile. Contributed by Kineticode.

Naming Normalization

In an attempt to eliminate the overloading of terminology in Bricolage, Kineticode contributed a major refactoring of the code that renames a number of classes and attributes--as well as database tables and columns. The result is that in Bricolage 1.10, virtually every class is known by the same name, from the UI to SOAP to the class package name to the database. The details of what was removed and or renamed follows:

  • Renamed Element to Element Type and Element Type to Element Type Set. This change overcomes the confusion between of element types, which define the structure of elements, and elements, which are the objects associated with documents that contain content and which are based on element types. The old get_element() method and the accessors that get and set element_id or element__id have also been renamed to get_element_type() and to access element_type_id.

  • Deprecated Element Type Sets. All of their attributes have been moved to Element Types. Management of Element Type Sets (known as Element Type in previous releases of Bricolage) has been removed from the UI, but the SOAP interface and the class itself remain for now. They will be completely removed in a future version of Bricolage.

  • Renamed Element Data to Field Type. [David]

  • Renamed the Element and Element Type classes as follows:

    They now properly reflect what they're called in the UI, in SOAP, and in the database. The old classes have been changed to simply inherit from the new classes, so as to maintain backwards compatibility.

  • Renamed Bric::SOAP::ElementType to Bric::SOAP::ATType (deprecated), Bric::SOAP::Element to Bric:SOAP::ElementType, and Bric::App::Callback::Profile::ElementData to Bric::App::Callback::Profile::FieldType.

  • Renamed Bric::Biz::Asset::Formatting to Bric::Biz::Asset::Template. The old class now inherits from the new in order to maintain backwards compatibility.

  • Renamed the related_instance_id attribute of elements to related_story_id, for parity with related_media_id--not to mention the get_related_story() method. The get_related_instance_id() and set_related_instance_id() accessor methods remain in place for purposes of backwards compatibility.

  • Changed the attributes and objects that refer to the Bric::Biz::ElementType::Parts::FieldType object in Bric::Biz::Element::Field from element_data_id and get_element_data() to field_type_id() and get_field_type(), respectively.

  • Renamed a number of database tables and appropriate foreign key columns, indexes, constraints, and the like, to better reflect the names used for these things in general. The tables renamed are:

    • element to element_type

    • at_type to field_type

    • story_container_tile to story_element

    • story_data_tile to story_field

    • media_container_tile to media_element

    • media_data_tile to media_field

    • formatting to template

  • Changed the names of the attributes in Bric::Biz::ElementType and Bric::Biz::Elementype::Parts::FieldType that have double underscores to have only single underscores. The double underscores are still supported for the sake of backwards compatibility, but are no longer required.

Database and Performance Optimizations

  • Added the ENABLE_GZIP bricolage.conf directive to turn on compression of the UI pages through mod_gzip. This results in pages as much as fifteen times smaller, with minimal extra server load. If mod_gzip is found during installation, the appropriate LoadModule/AddModule lines will be added to httpd.conf. Contributed by Marshall Roch.

  • All of the old NUMERIC columns have been removed from the database and replaced with the more appropriate (and faster) INTEGER, SMALLINT, and BOOLEAN data types. Contributed by Neil Conway & David Wheeler.

  • Added the MASON_STATIC_SOURCE bricolage.conf directive to enable static sources in the Mason-powered UI. Enabling this directive can eliminate many file system stats on every request, thus increasing performance. It's disabled by default, but you should turn it on now! Contributed by Kineticode.

  • Moved story, media, and template notes into a column in the appropriate instance table, instead using attributes, and then removed the story, media, and template attribute objects. This is a much more efficient use of the database and eliminates a lot of cruft. Contributed by Kineticode.

  • Normalized story and media elements and fields so that they no longer store copies of their names, key names, and descriptions--and, in the case of fields, the autopopulated and sql_type attributes--since these are actually element type and field type attributes easily referenced in the element type and field type tables. This change significantly reduces the size of the database and has the potential to increase performance when getting and setting field values, especially during publishes. Contributed by Kineticode.

User Interface Improvements

  • Major interface clean-up. The UI is finally mostly valid XHTML and uses CSS for all styles. The USE_XHTM directive, added in 1.7.0, is no longer used. The file sizes of some pages have been reduced by as much as 70%, offering improved page load times. Also, it will now be much easier to customize the look and feel of Bricolage simply by modifying the CSS files. Contributed by Marshall Roch.

  • Added Show Alpha Search preference that determines whether the alpha search ((A | B | C | ... [All]) directive, added in 1.7.0, is no longer used.

  • Added support for associating secondary categories and output channels when cloning a story. Sponsored by Alinghi.

  • Added support for adding secondary output channels to a new clone by selecting a group of output channels. All output channels in that group that are allowed by the story element will be associated with the clone. This is an easy and accurate way to add a bunch of output channels to a clone at once. Users must have READ access to each listed output channel group. Sponsored by Alinghi.

  • Added a frame on top of the preview window with a Repreview link. This is useful for previewing changes when you're developing templates. Rather than having to save the template, go back to the workspace, repreview, and then go back to the template profile, you can preview the story, then edit the template and click Repreview as necessary after each save. Contributed by Marshall Roch.

  • Added MEDIA_UPLOAD_LIMIT bricolage.conf directive for setting a size limit on uploaded media files. Contributed by Scott Lanning.

  • Added support for multiple WYSIWYG editors. You can now choose between htmlArea 3 and the new Xinha, a more active fork of htmlArea (recommended). Contributed by Marshall Roch.

  • The User Override screen has been integrated into the Users screen since the two pages are mostly redundant except for a few links. Contributed by Marshall Roch.

  • User overrides are now recorded in the event log. Contributed by Marshall Roch.

  • The UI now shows which user is logged in and includes a link to the user's profile at the top of each page. Contributed by Marshall Roch.

  • Users now must have at least READ permission to sources to add them to stories. Contributed by Kineticode.

  • Added an Include deleted checkbox to Advanced Search in Find Stories, Find Media, and Find Templates intefaces; this allows for easy searching and reactivation of deleted stories, media, and templates. Contributed by Scott Lanning.

  • Added the Subelement select list to the Find Stories interface, to allow searching for stories by the types of subelements they contain. Contributed by Scott Lanning.

  • Added a Cheat Sheet dialog box to Bulk Edit that displays the entire hierarchy of available subelements and fields as the pseudo-pod tags available for use in bulk editing content. Contributed by Kineticode.

  • The select list of fields and subelements that can be added to an element now lists all of the fields and subelements in alphabetical order. Contributed by Kineticode.

  • Improved JavaScript word and character counts in Bulk Edit so that they're actually accurate, including when POD tags are present, and are kept up-to-date as you type. Contributed by Kineticode.

  • Made the scroll bar sticky in the Story Profile, so that when you save a story, the reload will gently scroll back to the same spot in the story profile where you left off. Contributed by Scott Lanning.

  • Added fuller management of field types in the Element Type Manager, such as allowing the display widget to be changed (from, for example, text to textarea), and supporting the setting of a default value in a checkbox field in the. Contributed by Kineticode.

  • The Element Type profile no longer displays the Sites section if there is only one site, and no longer displays the output channel section if there is only one output channel. Contributed by Kineticode.

  • The User and Contributor managers in the UI now use the List Name Format preference to display the whole names for users and contributors. This allows users to easily see whatever name parts they need by simply changing their List Name Format preferences. Contributed by Kineticode.

  • The admin tools in the side navigation of the UI are now listed in alphabetical order according to the locale. Contributed by Kineticode.

  • The UI now remembers searches for each manager in the UI for as long as a session lasts. So if you perform a search for element types, and then do a search for stories or output channels, the last results you saw in the element type manager will be there again when you return to it. Contributed by Kineticode.

  • Media files can now be uploaded at the same time a new media document is created, rather than only after it has been created. Contributed by Kineticode.

Templating Enhancements

  • Added the MASON_INTERP_ARGS bricolage.conf directive to allow arguments to be passed to the Mason template interpreter. Contributed by Scott Lanning.

  • Added the preview_another_all_ocs() and blaze_another() methods to Bric::Util::Burner. The former executes a preview for all of the output channels a document is associated with. The latter takes a document for its argument and calls publish_another() in publish mode and preview_another_all_ocs() in preview mode. Contributed by Alinghi.

  • Creating a template that already exists but is inactive now reactivates it instead of just giving an error message. Contributed by Scott Lanning.

  • The HTML::Template burner now sets parameters for all attributes of a story as returned by the my_meths() method of the story class, rather than just the story title. So, for example, you can now use or without creating a .pl template to set them up. Contributed by Kineticode.

  • Category templates in the HTML::Template burner now cascade just like in all the other burners, rather than stopping at the first category template found in the category URI. Contributed by Kineticode.

  • The HTML::Template burner now has access to both the related story and the related media URIs via the rel_story_uri and rel_media_uri variables. The old link variable has been deprecated, since it cannot handle an element that has both a related media and a related story. Contributed by Kineticode.

  • Added the current element object to the burn error exception object and, by extension, the burner throw_error() method. Now a kind of breadcrumb trail will illustrate where in the element hierarchy of a story a burn error was thrown. Contributed by Scott Lanning.

  • Arguments can now be passed to the display_element() method of the Template Toolkit burner and they will be set up as variables in the stash of the execution context of the element template. Contributed by Kineticode.

  • Added the TT_OPTIONS bricolage.conf directive to allow Bricolage administrators to pass Template Toolkit options to the Template object when it is instantiated by the Template Toolkit burner. Contributed by Kineticode.

  • Added the COMPILE_EXT option to the instantiation of the Template Toolkit object in the Template Toolkit burner. This will cache compiled versions of the templates so that they do not have to be parsed and compiled every time a story is published. This should make the TT burner substantially faster. Contributed by Kineticode.

  • Any symbols exported by PERL_LOADER code, plus those exported by Bric::Util::DBI qw(:junction), are now imported into the Template Toolkit stash for direct use in Template Toolkit templates, and into the PHP global context for direct use in PHP templates. For example, the ANY function can now be used directly in TT templates and as $ANY() in PHP templates. Contributed by Kineticode.

  • Completely updated Bric::Templates and Bric::AdvTemplates, with expanded API documentation and examples in Mason, Template Toolkit, and PHP. Contributed by Kineticode.

API Improvements

  • Added support for the ANY() function to pass multiple possible values for a given parameter to the list(), list_ids(), and, where pertinent, href() methods of all Bricolage business classes. Formerly, it was supported only by the story, media, and template classes. Contributed by Kineticode.

  • Added UUIDs to story and media documents. A UUID is a universally unique identifier. The format for UUIDs has been described in RFC 4122, ITU-T Rec. X.667 and ISO/IEC 11578:1996. In Bricolage, they are generated by Data::UUID. Contributed by Kineticode.

  • Added the exclude_id parameter to the list() methods of the story, media, and template classes. This parameter can be used to exclude one or more asset IDs from the list of objects returned by the call to list() and friends. Contributed by Kineticode.

  • Added serialize_to_pod() and update_from_pod() methods to the container element class. These support a modification of the Plain Old Documentation (POD) syntax that enables a complete hierarchy of elements to be edited, including links to related stories and media, in a single stream of text. Used by the improved Bulk Edit interface. Contributed by Kineticode.

  • The Order and OrderDirection parameters to the list() methods of the story, media, and template classes can now be specified as array references so as to sort on more than one attribute. Contributed by Kineticode.

  • Added the reset() method to Bric::Util::Job and a Reset checkbox in the job profile in the UI so that failed jobs can easily be re-attempted. Contributed by Kineticode.

  • Added related_story_id and related_media_id parameters to the list() method of the story and media classes to search for stories and media that have a given related story or media ID. Contributed by Rod Taylor.

  • Added support for searching on URIs in the story class and modified the same parameter in the media class to search I possible URIs for media, not just the URI associated with the primary output channel. Contributed by Kineticode.

  • Major refactoring of the field types class, Bric::Biz::ElementType::Parts::FieldType. Attributes that describe how fields should be displayed are no longer stored in a separate attribute object, but as true attributes of field type objects. This makes them much more efficient in terms of database access. Contributed by Kineticode.

  • Changed various get_data(), set_data() del_data() and such methods to get_field_types(), get_value(), set_value(), add_field_types(), etc., to disambiguate fields from field types more consistently. Contributed by Kineticode.

  • Added get_values() and set_values() methods to the field class (Bric::Biz::Element::Field) to make getting and setting multivalue fields easier and more centralized. Contributed by Kineticode.

  • The pre_path and post_path attributes of output channels have been eliminated, since arbitrary strings can now be used directly in the URI formats, making these attributes obsolete. Contributed by Kineticode.

  • Added get_primary_category() alias for get_category() in the media document class so as to make it more like the story class, thus making dispatch simpler. Contributed by Kineticode.

  • Fixed the get_value() and get_container() element methods so that, in list context, they return undef instead of an empty list when there is no corresponding field or element. This will be especially useful in templates, where it will prevent errors such as Mason's, Odd number of parameters passed to component expecting name/value pairs. Contributed by Kineticode.

Other Enhancements

  • Added the element type set and output channel modules to the SOAP interface. Contributed by Scott Lanning.

  • Added much more fine-grained field type management to the Element Type SOAP interface. More field attributes can now be updated via SOAP. For example, one can now change the widget type from text to textarea. These improvements are thanks to the normalization of the element type and field type classes. Note that there are a number of new XML elements, and some of the existing ones have changed names, but we have tried to preserve backwards compatibility as much as possible. Contributed by Kineticode.

  • Now require Perl 5.8.0 or newer. Realistically it should only be 5.8.3 or newer. Contributed by Kineticode.

  • bric_republish now uses the published_version Bric::SOAP::Workflow parameter to always republish the last published version of a story. This means that even if a story is checked out, it can be republished without interfering with the checkout. Contributed by Kineticode.

  • Added $INSTALL_VERBOSITY makefile environment variable that, when set to QUIET, eliminates many of the questions asked during installation and cloning, falling back on the default values. Contributed by Rod Taylor & Andrea Rota.

  • Added $USE_DEFAULTS makefile environment variable that, when used with $INSTALL_VERBOSITY, will use platform-specific answers to all of the installation questions. This allows for completely silent, customizable installations, which are necessary for packagers. Contributed by Marshall Roch.

  • When using the command line tools, you can now opt to be prompted for your password rather than entering it on the command line, which would store your plain text password in the shell history. Contributed by Marshall Roch.

  • Alert emails now use an email address, if one can be found, for the user who triggered the alert event for the From header in the alert email. The ALERT_FROM bricolage.conf directive is still used as the fallback. Contributed by Kineticode.

  • Story and media cover dates are now versioned. Contributed by Kineticode.

  • Publish and distribution jobs are now tied to a specific version of a story or media document, rather than the media document itself. This will allow a whole series of publishes for versions of a document to be scheduled for execution over time, as well as help to protect currently checked-out documents from being mysteriously removed from workflow by scheduled publishes being executed. Sponsored by Freerun Technologies.

blog comments powered by Disqus