Bricolage 1.8.0 Changes

2004.05.03

Major New Features

  • Added multisite support. Now all stories, media, output channels, templates, categories, and workflows may be associated with different sites, and even have the same names in different sites. This simplifies the management of multiple Web sites with Bricolage. Story type and media type elements may be shared between sites. Funded by Portugal Telecom Multimedia.

  • Added document aliasing. Stories and media in one site may now be aliased and published in another site, as long as the document type element on which they are based is shared between sites. Control over the content of aliased documents remains in the original site, thus ensuring the editorial integrity of the document for that site. Funded by Portugal Telecom.

  • Added Email distribution action, which can be used to email the files output from an output channel to one or more email addresses. Funded by ETonline.

  • Bricolage now has a much more robust security policy. Users with permission to edit various objects and groups in the administrative interface can no longer increase their permissions. Nor can they manage the membership of groups of which they are not members or do not have EDIT access to the members. All this is to prevent users from giving themselves higher permissions. David Wheeler/Kineticode.

  • Added new permissions RECALL and PUBLISH. These permissions apply only to asset groups, including desks, categories, and workflows. Now users must have RECALL permission to recall documents and templates from the library and bring them into workflow, and PUBLISH permission to publish documents or deploy templates. These new permissions make it much easier to create more flexible permissions to manage approval processes. Funded by Radio Free Asia.

  • Bricolage now supports per-user preferences. Administrators can mark individual preferences as overrideable, and then users can set those preferences to their preferred values. Funded by Radio Free Asia.

  • Added publication jobs in addition to burn jobs. Instead of burning documents on command and distributing them later later, Bricolage will now burn and distribute documents at the scheduled publish time. Mark Jaroski/World Health Organization.

  • Added the bric_queued daemon to take advantage of the new publication scheduling. Together with the use of a carefully tuned instance of Bricolage, these new features allow the Bricolage administrator to control the amount of system resources given over to publishing. Mark Jaroski/World Health Organization.

  • The virtual FTP server, which eases the management of templates, now moves templates into a workflow when they're uploaded and puts them into the user's sandbox. This behavior allows the user to test the template changes without imposing possible bugs upon other Bricolage users. This approach is much safer than the previous behavior, which simply checked in and deployed a template upon upload. Templates can still be deployed via the virtual FTP server by appending .deploy to their names. The original behavior of always deploying templates upon upload can be restored by enabling the FTP_DEPLOY_ON_UPLOAD bricolage.conf directive. David Wheeler/Kineticode.

  • Added first_publish_date attribute to stories and media. This date is set once, the first time a story or media document is published. This date is useful for template developers to search for and display stories and media published at a given time, rather than relying on the arbitrarily-set cover_date attribute. David Wheeler/Kineticode.

  • Added Bulk Publish feature to ADMIN->PUBLISHING. This new interface allows members of the Global Admins group to publish story and media documents by category. Scott Lanning/World Health Organization.

  • Added HTMLArea support. This feature, enabled via the ENABLE_HTMLAREA bricolage.conf directive, adds a new type of field to be added to elements and contributor types, WYSIWYG. Such fields are then displayed in the UI using HTMLArea, a WYSIWYG HTML editor. This can be useful in particular for simple fields that often need added emphasis or inline links. Eric Sellers/Pectopah.

Performance Increases

  • Callbacks were moved from Mason components to Perl modules loaded at Apache startup time. This change improves the responsiveness of the UI layer and enhances maintainability. Scott Lanning/World Health Organization.

  • Optimized performance of URI uniqueness checks by adding database tables to do the job, rather than constructing the URIs for all other documents in the same categories as the document being checked. This was the last major bottleneck affecting SOAP performance, as well as document editing in general. David Wheeler/Kineticode.

  • Queries for stories, media, and templates, using the list() methods of their respective classes, have been greatly optimized. Thanks to a large database from I and query optimization from Josh Berkus/Aglio Database Solutions (under sponsorship from The World Health Organization) and Simon Myers of GBDirect, searches for stories in the UI are now 10-40 times faster than they were before (depending on the version of PostgreSQL). David Wheeler/Kineticode.

  • The story, media, and template queries now use aggregates to create arrays of group IDs, instead of returning a separate row for each individual group ID. Since all story, media, and template objects are now returned in single rows instead of potentially many rows, this greatly cuts down on the overhead of fetching data from the database. Suggested by Josh Berkus/Aglio Database Solutions; implementation help from David Fetter. David Wheeler/Kineticode.

  • Thanks to the aggregation of group IDs into a single row for each story, media and template object, the Offset and Limit parameters to the list() methods of the story, media, and template classes are now handled by the database back end, instead of in application space. This makes using these parameters much more efficient. David Wheeler/Kineticode.

  • Modified the indices on the workflow__id and desk__id columns of the story, media, and template database tables to be more efficient, being indexed only when their IDs are greater than 0 (that is, when a story, media document, or template is actually on a desk and in a workflow). David Wheeler/Kineticode.

  • Eliminated login_avail() PostgreSQL function, replacing it with a partial constraint. This not only makes things simpler code-wise, but it also eliminates backup and restore problems where the usr table is missing. Suggested by Josh Berkus/Aglio Database Solutions. David Wheeler/Kineticode.

User Interface Improvements

  • Added the YEAR_SPAN_BEFORE and YEAR_SPAN_AFTER bricolage.conf directives. These directives control how many years before and after the current year to display in the list of years in the date and time select widget. The default values are 10 for each, meaning that if the current year is 2003, then the date span will be from 1993 to 2013.

  • Many of notification and status message localization fixes. Radu Greab.

  • Added search by element type to Advanced Search of the Find Stories and Find Media interfaces. This feature allows users to find all of the story or media documents based on a particular document type element. Scott Lanning/World Health Organization.

  • Added a preference to select Simple or Advanced search in Find Stories/Media/Templates as the default search when you go to those screens. Scott Lanning/World Health Organization.

  • Added Select all button to select all the checkboxes on publish desks or My Workspace. Scott Lanning/World Health Organization.

  • Added Keyword Management interface to centrally manage keywords. Keywords can be corrected or deleted in the Keyword Manager, and the changes will be reflected in the stories they're associated with. Scott Lanning/World Health Organization.

  • Added Group Membership sections to most of the profiles. This enhancement makes it easier to assign objects to groups, and therefore ensures that the appropriate permissions apply to them. João Pedro Gonçalves/Portugal Telecom.

  • Added Text to search option in the Advanced search of Media and Stories to search for documents based on the contents of their field. João Pedro Gonçalves/Portugal Telecom.

  • All preview links are now generated by a single widget. This widget adds the story or media URI to the title attribute of the anchor tag (which in modern browsers will automatically work as a roll-over tooltip), makes the story or media URI copyable (by relying on JavaScript to actually open a new window for the preview), and manages selecting an output channel in which to preview a story. David Wheeler/Kineticode.

  • User group permissions are now more easily managed by the addition of a select list to choose which type of permissions to edit. This enhancement eliminates the sometimes overwhelmingly long list of permissions to manage for a given user group. Scott Lanning/World Health Organization.

  • The Find Stories, Find Media, and Find Templates interfaces now disallow an empty search. This improvement prevents thousands or tens of thousands of assets from being displayed in the UI and locking up all of the resources on the server. David Wheeler/Kineticode.

  • Moved category selection from Media and Story Profiles into their own separate components so that organizations with hundreds or thousands of categories don't have to load them into a dropdown list every time a document is edited. The category browser uses an interface to search for and associate categories, rather than to look through a long list of all categories. This feature can be enabled via the new ENABLE_CATEGORY_BROWSER bricolage.conf directive. Scott Lanning/World Health Organization.

  • Added list paging to Desks and My Workspace, so that when those desks have many documents or templates on them, they can be viewed on successive pages, rather than all in a single long screen. Scott Lanning/World Health Organization.

  • Converted desk items to display with strict XHTML and CSS. This approach is the future of the Bricolage interface: purely structural XHTML, with CSS to create the presentation. Eventually, we'll be able to have UI preferences to change font sizes or the entire look and feel just by switching style sheets. But for now, this change eases the display of desks with many items on them, and speeds the display. David Wheeler/Kineticode.

  • Added a preference to set the default Story/Media sorting on desks. This will make it easier for users who in the past had to select an alternative sort method every time they visited a desk. Scott Lannning/World Health Organization.

  • Added context-sensitive help for pages that were missing it. Scott Lannning/World Health Organization.

  • The character set and language preferences have been moved into the database, so that they can be overridden by individual users. This enhancement allows a single Bricolage installation to serve its UI in multiple languages and character sets. Funded by Radio Free Asia.

  • Added a complete German localization. Gerfried Fuchs, Thorsten Biel, and Florian Rossol.

  • Added Mandarin localization, with translation based on traditional Chinese. Kang-min Liu/OurInternet.

  • An element field that is both required and repeatable now allows instances of that field, after the first instance, to be deleted. Setting a field to required essentially means that one instance of that field must always be present in the UI. David Wheeler/Kineticode.

  • Added Filter by Site Context preference. When active, search results only return assets relative to the site context instead of all the sites the user has access to. João Pedro Gonçalves/Portugal Telecom.

  • The special All groups, which contain all of the objects in a given class, can now be accessed via the Group Manager. Their names and memberships cannot be edited, but their permissions can. David Wheeler/Kineticode.

  • Select lists now correctly save their states so that, for example, dropdown menus in New Story remember the element and category that was previously selected. Scott Lanning/World Health Organization.

  • Added a feature that counts characters used in a textarea subelement on the fly. It displays this figure, as well as the number of characters left, immediately above the textarea. This feature is enabled when the Max size attribute for the textarea is given a non-zero value. The JavaScript will also prevent more than the maximum number of characters in the textarea by truncating the data to that number of characters every time a character beyond the maximum is added. Paul Orrock/Digital Craftsmen.

  • Added a feature to display image thumbnails or icons in the search results, active view, and related media interfaces for media objects. This feature can be enabled via the USE_THUMBNAILS bricolage.conf directive. Paul Orrock/Digital Craftsmen.

  • Added support for icons for all media documents when the USE_THUMBNAILS bricolage.conf directive is enabled. These rely on the presence of PNG icon files for each MIME type in comp/media/mime. Only one such icon is distributed with Bricolage, but Administrators are free to add their own icons, and the contributed copy_gnome_icons script makes it easy to use GNOME icons. David Wheeler/Kineticode.

  • When publishing from a publish desk, you can now uncheck related assets in order to not publish them. You can also disable the PUBLISH_RELATED_ASSETS bricolage.conf directive to never publish related assets. Scott Lanning/World Health Organization.

  • Added the ENABLE_OC_ASSET_ASSOCIATION bricolage.conf directive to optionally remove the ability to associate output channels in the story and media profiles for those organizations that don't want their editors to make such changes. Scott Lanning/World Health Organization.

  • Added an interface to Clone stories so that the category, slug, cover date, and output channel can be selected before the clone is created. This enhancement prevents an identical story from being created, which can cause errors for some stories. Clones are no longer allowed to have URIs that are identical to the stories they were cloned from. Scott Lanning/World Health Organization and David Wheeler/Kineticode.

  • Added the ability to Delete stories, media, and templates from non-publish desks (same as My Workspace). Scott Lanning/World Health Organization.

  • The User Override admin tool is now available to all users. A user can only override another user if she has EDIT permission to that other user. This makes it easier for user administrators to masquerade as other users without having to change passwords. David Wheeler/Kineticode.

  • The new AUTOGENERATE_SLUG bricolage.conf directive can be enabled to autogenerate a slug based on the title of a new story created without a slug. João Pedro Gonçalves/Portugal Telecom and Scott Lanning/World Health Organization.

  • The Cancel Checkout button in the Story, Media, and Template profiles now tries to do the right thing instead of just leaving the asset on a desk in workflow every time. If the asset was just created by the user, it will be deleted. If it was just recalled from the library by the user, it will be removed from workflow and shelved in the library. Otherwise, clicking the Cancel Checkout button will leave the asset in workflow. David Wheeler/Kineticode.

  • For checked-out media, stories, and documents listed in the Active and Find interfaces, added the name of the user who has them checked out to the empty column that would otherwise contain a Checkout checkbox. David Wheeler/Kineticode.

  • Added UI for managing organizations, which provide the base data for sources. David Wheeler/Kineticode.

  • Bricolage now works with many more browsers, notably Safari, Konqueror, IE 5.2/Mac, and Opera 7. Marshall Roch.

Templating and API Enhancements

  • Added $burner->sdisplay_element method to the Mason burner. This is a sprintf-style version of $burner->display_element. Scott Lanning/World Health Organization

  • Added get_data_element() method to the $element object in templates. This allows template writers to more easily find a single data (field) element object, rather than just the value of a single data element (as get_data() does). David Wheeler/Kineticode.

  • Added output_channel_id parameter to the list() methods of the Story and Media classes to enable querying for documents in output channels other than the primary output channel. David Wheeler/Kineticode.

  • Added the custom tags <%publish>, <%preview>, and <%chk_syntax> to Mason templates. These tags allow Mason template developers to write code blocks that execute only during publish, preview, or template syntax checking. João Pedro Gonçalves/Portugal Telecom.

  • Added new page extension support to the burner. This feature allows template developers to set string extensions to use for successive file names, rather than the traditional use of numeric file name extensions for successive file names. Clive Jones.

  • Added contrib_id parameter to the list() methods of the Story and Media classes to enable querying for documents associated with a given contributor. Funded by The RAND Corporation.

  • Added element attribute to Bric::Util::Burner so that $burner->get_element always returns the element currently being burned. David Wheeler/Kineticode.

  • Added burner-specific exceptions with context information, including current output channel, current category, and current element. This feature will make it easier for template developers to determine the context of errors they run into during template development. David Wheeler/Kineticode.

  • Added a throw_error() method to the $burner object in templates. Template developers can use this method to easily throw an exception that their users will see in the UI. David Wheeler/Kineticode.

  • Added best_uri() method to the $burner object in templates. This method will return the most appropriate URI (in Bricolage's opinion) for a document object. Mainly useful when multiple sites and document aliases are used. Funded by Portugal Telecom.

  • Greatly simplified burner subclassing by adding a new registration method to the burner base class. This cuts down on the number of files that need to be edited to add a new templating architecture to Bricolage. David Wheeler/Kineticode.

  • Added Template Toolkit templating. Template Toolkit is a robust, mature templating architecture that nicely complements the existing Mason and HTML::Template templating support. More information on Template Toolkit can be found at L. Arthur Bergman/Fotango.

  • Added template sandboxes. Now template editors can test their template changes as they make them without effecting production templates. Templates are stored in a sandbox for each developer as they work on them, and are put into production only when they are deployed. João Pedro Gonçalves/Portugal Telecom.

  • Added publish_another() and preview_another() methods to the $burner object in templates. These methods publish or preview a document other than the one currently being published. This is useful when a template for one document type needs to trigger the publish or preview of another document. David Wheeler/Kineticode and Serge Soznoff/Alinghi.

  • Added get_parent() method to all element objects accessed in templates. This method simplifies getting access to a parent element in an element template. David Wheeler/Kineticode.

  • Added burn_again attribute to the Mason template burner. This method can be called from within a template to force the burner to burn the current story page again, creating a new file. This can be useful for creating multi-file output without extra paginated subelements, such as in archive or index pages. Funded by Radio Free Asia.

  • Added element_key_name parameter to the list() method of the story, media, and template classes. This makes it easier to use the name of a story type element, media type element, or template element to search for documents and templates. David Wheeler/Kineticode.

  • The Mason burner now uses document templates as true Mason dhandlers (default handlers), enabling full Mason-style inheritance from autohandlers to work properly. David Wheeler/Kineticode and Dave Rolsky/House Absolute Consulting.

  • Added the story.category parameter to the list() method of the Story class. Pass in a story ID via this parameter, and a list of stories in the same categories as the story with that ID will be returned, minus the story with that ID. This parameter can be very useful in templates that want to create a list of stories in all of the categories the current story is in. David Wheeler/Kineticode with implementation assistance from Josh Berkus/Aglio Database Solutions.

  • Added ANY function to be used with certain parameters to the list() method of the story, media, and template classes. Pass a list of values to this function to have any of of them match for a given parameter. This is especially useful for matching on a list of URIs or category IDs, for example. This function is automatically available in templates. David Wheeler/Kineticode.

  • Added get_element() method to story and media classes and deprecated the get_tile() method. This will make things a bit more consistent for template developers. David Wheeler/Kineticode.

  • Added primary_category_id parameter to the story class' list() method. This will make it easier to search for stories by their primary category associations. David Wheeler/Kineticode.

  • Added notes() method to the $burner object in templates, along with the accompanying clear_notes() method. The notes() method provides a place to store burn data, giving template developers a way to share data among multiple burns over the course of publishing a single story to a single category trough a single output channel. David Wheeler/Kineticode.

  • Added a method is_fixed to story and media objects, to determine whether a document has a fixed URL (for example, a Cover page). Scott Lanning/World Health Organization.

  • Completely documented the document element classes. This should make it a bit easier on templators learning their way around the Bricolage API. David Wheeler/Kineticode.

  • Refactored much of the code in the element classes. Renamed the methods with tile in their names to use element instead (but kept the names around as aliases, since they're used throughout the UI). Added a few methods to make the interface more complete. David Wheeler/Kineticode.

  • Modified the get_containers() and get_elements() methods of the element classes to take an optional list of key name arguments, and to return only the container subelements with those key names. This is most useful in templates, where it's fairly common to get a list of container subelements of only one or two particular types out all at once. David Wheeler/Kineticode.

  • Added the get_data_elements() method to the element class.This method functions exactly like get_containers() except that it returns data element (field) subelements. It also takes an optional list of key name arguments, and, if passed, will return only the subelements with those key names. David Wheeler/Kineticode.

  • Added the unexpired parameter to the list() method of the story and media classes. It selects for stories without an expire date, or with an expire date set in the future. David Wheeler/Kineticode.

  • Added the subelement_key_name parameter to the list() method of the story and media classes. This parameter allows searches on the key name for a container element that's a subelement of a story or media document. David Wheeler/Kineticode.

  • Added single underscore parameters to the list() methods of the Story, Media, and Template classes to complement those that have double underscores. David Wheeler/Kineticode.

SOAP Server Improvements

  • Added --workflow and --desk options to create and update commands of the bric_soap command-line client. These options allow documents and templates to be moved to a specific desk when they're created or updated. Scott Lanning/World Health Organization.

  • The Story, Media, and Template SOAP classes were refactored for improved performance. Scott Lanning/World Health Organization.

  • Added MediaType, Site, Keyword, User, and Desk SOAP modules. Scott Lanning/World Health Organization.

  • Added --published-only option to the bric_soap and bric_republish command-line clients so that when documents are being republished, the last-published version of a document will be republished, rather than the current version. Scott Lanning/World Health Organization.

  • Added more asset commands to the Workflow SOAP module and made corresponding changes to bric_soap. Scott Lanning/World Health Organization.

  • Added support for all of the parameters to the list_ids() method of the Story, Media, and Template classes to the list_ids() method of the corresponding SOAP classes. This allows for much more robust searches via the SOAP interface. Scott Lanning/World Health Organization.

Installer Improvements

  • The installer now supports installing and upgrading Bricolage with the PostgreSQL database server on a separate host. Thorsten Biel.

  • make upgrade no longer simply overwrites the contents of the UI component root ($BRICOLAGE_ROOT/comp), but renames it $BRICOLAGE_ROOT/comp.old and writes out a new one. This is both so that deleted UI component files don't remain behind after an upgrade, and so that users can access any files that they've changed in the old component root. David Wheeler/Kineticode.

  • Upgrade scripts are now more intelligent in their handling of transactions. They no longer allow SQL errors without failing the upgrade. The upgrade scripts have also been updated to ensure successful upgrades to Bricolage installations as far back as 1.4.0. David Wheeler/Kineticode.

  • make upgrade now suggests that the user run make clone on the existing installation, and asks whether or not to continue. This is to encourage system administrators to have a good backup before upgrading, in case the upgrade fails. David Wheeler/Kineticode.

  • make clone now provides the current date and time for the default name for the cloned package. David Wheeler/Kineticode.

Contributed Program Updates

  • A number of fixes for the bric_media_upload contributed script:

    • Now works with the 1.8.0 XML Schema.

    • Fixed a bug in its use of File::Find.

    • Fixed problem in calculating category names when given a directory to upload.

    • Added --bric_soap and --site options.

    • Creates intermediate categories if needed.

    • Added a --skip-existing directive.

    • Added a --media-info directive.

    • Made it output a more meaningful error message when it can't find bric_soap.

    Dave Rolsky/House Absolute Consulting and Simon Wilcox/Digital Craftsmen.

  • Added new contributed scripts for Bricolage button generation. These scripts use the Gimp to generate localized buttons for the Bricolage UI based on the contents of an input file. Florian Rossol.

  • Added bric_template_diff and bric_template_patch scripts, which can be used to sync templates between two Bricolage servers. Sam Tregar/Primedia.

  • Added bric_media_load script, which copies media exported from one Bricolage installation to another Bricolage installation. Sam Tregar/Primedia.

  • The new bric_template_dump script uses the Bricolage SOAP server to export all of the templates in a single output channel. David Wheeler/Kineticode.

Other Enhancements

  • Changed element attribute name to key name to emphasize its uniqueness within an element. Also changed the Display Name to Label. Funded by Portugal Telecom.

  • Added a key_name attribute to elements as the system-wide unique key for each element, rather than the name. The name is now used as a label. Note that the key name only allows certain characters, as it is used to name the template files that format the element. This makes the has_name() method a bit simpler -- and it can in fact be ignored in favor of $element->get_key_name eq $key_name. Thus there may be some warnings if older name values are passed to has_name(). Funded by Portugal Telecom.

  • Refactored Bric::Biz::Keyword. It is now more compliant with the standard API as defined in other classes. Also added support for keyword groups so that we can create a keyword manager. David Wheeler/Kineticode.

  • Added the ENABLE_SFTP_V2 bricolage.conf directive to make SSH protocol 2 be tried first. Scott Lanning/World Health Organization.

  • Switched Bric::Util::CharTrans from using Text::Iconv to Encode, thus removing the dependency on a C library (libiconv). Note that this has changed the API of Bric::Util::CharTrans. Its to_utf8() and from_utf8() methods now always convert the argument passed in in place. They did this before for references, but now they do it for plain strings, as well. Also note that use of character translation also now requires Perl 5.8.0 or later. Scott Lanning/World Health Organization and David Wheeler/Kineticode.

  • Added a bricolage.conf directive, ALLOW_SLUGLESS_NONFIXED, to prevent slugless non-fixed (non-Cover) stories. Scott Lanning/World Health Organization.

  • The bric_dist_mon -U option no longer requires that /dist/ be at the end of the URL. If /dist/ is missing, bric_dist_mon will append it. David Wheeler/Kineticode.

  • Added -k option to bric_ftpd to kill a currently running virtual FTP server. This is made possible by the addition of the new FTP_PID_FILE bricolage.conf directive. David Wheeler/Kineticode.

  • Added FTP_UNLINK_BEFORE_MOVE bricolage.conf directive. This forces the FTP mover to unlink an older version of a file before renaming the new version to that name. This is necessary for some FTP servers that disallow renaming a file to replace an existing file. Andrea Rota.

  • Relabeled the Pre and Post attributes of output channels as URI Prefix and URI Suffix, respectively. Serge Sozonoff/Alinghi.

  • Changed the vertical alignment of the labels for textarea fields in the story profile to be consistent with the labels on the element profile. i.e. top aligned. Paul Orrock/Digital Craftsmen.

  • Eliminated the term Asset Type from the UI, replacing it with Element, Story Type Element, or Media Type Element, as context demands. David Wheeler/Kineticode.

  • In the formBuilder interface used by the Element and Contributor Type profiles, the default maximum length of text and textarea fields is now 0, or unlimited. David Wheeler/Kineticode.

  • Added SFTP_MOVER_CIPHER bricolage.conf directive to tune the SFTP mover (if enabled) to the best cipher for good performance on the wire. David Wheeler/Kineticode.

blog comments powered by Disqus