Bricolage 1.9.1 Peeves Changes


New Features

  • 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 in the following classes:


  • Added serialize_to_pod() and update_from_pod() methods to the container element class. These support a pseudo-pod syntax that enable a complete hierarchy of elements to be edited, including links to related stories and media, in a single stream of text. [David]

  • Converted Bulk Edit in the UI to use the new POD syntax supported by the element classes and eliminated the old Super Bulk Edit interface since it became redundant. [David]

  • Added the Include deleted checkbox to Advanced Search in Find Stories, Find Media, and Find Templates intefaces; this allows searching for and reactivating deleted stories, media, and templates. [Scott]

  • Added the Subelement select list to the Find Stories interface, to allow searching on stories by the types of subelements they contain. [Scott]

  • 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. [David]

  • Added Order, OrderDirection, Limit, and Offset parameters to the list() method of Bric::Util::Event. [David]

  • Added diff support to the UI to see changes between versions of templates, stories, and media documents. [David]

  • Added JavaScript-powered Find/Replace dialog box to Bulk Edit in the element profile and to the template profile. The Replace All function should work very well everywhere, while the Find function relies on IE- and Mozilla-specific features to properly highlight found text in the textarea box searched. Other browsers will get an alert indicating at what character the match was found. [David]

  • Added new Code Select custom field allows you 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. [Scott]

  • Added ability to shelve a story from a desk or My Workspace. [David]

  • Added 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. [David]

  • Added 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. [David]


  • 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 story or media ID or list of IDs as relateds. Based on a patch from Rod Taylor. [David]

  • 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. [David]

  • Added has_notes() method to Bric::Biz::Asset (and therefore its story, media, and template subclasses) as a more efficient way of determining whether an asset has notes for any of its versions than calling the get_notes() method. [David]

  • Added note parameter to the list() method of the story, media, and template classes. Unlike most of the parameters, this one will return assets with any of their versions having a note matching the note parameter. [David]

  • Updated search documentation and wrote tests for:


  • The new Repreview iframe now works for the links in subelements, too. [David]

  • 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. Note to Templaters: 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. [David]

  • Now require Perl 5.8.0 or newer. Realistically it should only be 5.8.3 or newer. [David]

  • Added support for searching on UUIDs to the story and media classes. [David]

  • Added support for searching on URIs in the story class and modified the same parameter in the media class to search all possible URIs for media, not just the URI associated with the primary output channel. [David]

  • 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. [David]

  • Improved JavaScript word and character counts in Bulk Edit so that they’re actually accurate, including when POD tags are present. [David]

  • The word and character counts in Bulk Edit are now kept up-to-date as you type. [David]

  • Added the current element object to exception object in throw_burn_error 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. (Note: this only works for exceptions thrown by throw_burn_error.) [Scott]

  • Fixed the get_data() 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. [David]

  • Renamed the related_instance_id attribute of elements to related_story_id, for parity with related_media_id#&x2014;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. [David]

  • Renamed Element to Element Type and Element Type to Element Type Set. This is to avoid confusing element types, which define the structure of elements, and elements, which are contain content and are based on element types. These are not ideal names, but at least we now have something different to call them. 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. [David]

  • Changed the attributes and objects that refer to the Bric::Biz::ElementType::Parts::FieldType object in Bric::Biz::Asset::Parts::Tile::Data from element_data_id and get_element_data() to field_type_id and get_field_type(). [David]

  • Made the scroll bar sticky in the Story Profile, so that when you save a story, the reload will scroll back to the same spot in the story profile where you left odff. [Scott]

  • Added a dialog box widget for generating JavaScript-driven dialog boxes. The buttons are nicely styled to match the Bricolage UI, and can be configured to trigger JavaScript functions. Dialog boxes can also be dragged around the browser window by grabbing their title bars. Used by the new Find/Replace and Bulk Edit Cheat Sheet features, but will likely be used in other contexts in the future. [David]

  • 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. [David]

  • 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. [David]

  • Added fuller management of field types in the Element Type Manager, such as supporting the setting of a default value in a checkbox field in the field profile. [David]

  • 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. [David]

  • Added many new tests for the element type, field type, and element classes. [David]

  • Renamed Element Data to Field Type. [David]

  • Renamed a number of 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:


  • Fixed a bunch of inconsistently named foreign key indexes. [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. [David]

  • 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. These changes are to the interfaces of Bric::Biz::ElementType, Bric::Biz::ElementType::Parts::FieldType, and Bric::Biz::Element::Container. The old methods are of course left in place for purposes of backwards compatibility. [David]

  • 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. [David]

  • Removed the unused and meaningless referenced attribute from Bric::Biz::ElementType. [David]

  • Removed the unused and meaningless publishable and map_type_id attributes from Bric::Biz::ElementType::Parts::FieldType. [David]

  • Turned Bric::Biz::ATType into an appendix: something that’s there, and may have served a purpose in the past, but isn’t needed now. All of its attributes have been moved to Bric::Biz::ElementType, and you should still be able to get the ATType object from existing elements, but new elements won’t need it anymore. It has been removed from the UI, but the SOAP interface and the class itself remain for now. Bric::Biz::ATType will be completely removed in a future version of Bricolage. [David]

  • 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. [David]

  • Renamed Bric::SOAP::ElementType to Bric::SOAP::ATType, Bric::SOAP::Element to Bric:SOAP::ElementType|Bric:SOAP::ElementType, and Bric::App::Callback::Profile::ElementData to Bric::App::Callback::Profile::FieldType. [David]

  • 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. [David]

  • It is now fatal to submit characters in an invalid encoding. For example, if a user is using UTF-8 (the default) but pastes the contents of a Word document with an m-dash (a CP1252 character), Bricolage will now throw an exception. It probably threw an exception from the database in the past, but now we’re throwing one earlier. The solution for such a user is to of course select the proper encoding in their Character Set preference. [David]

  • New categories now inherit all group memberships and permissions granted to access assets in the category from their parent categories. 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. Of course, existing categories are unaffected, and if user needs different group memberships or permissions than the parent, she will still have to edit them. [David]

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

  • 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. [David]

  • 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. [David]

  • The pre_path and post_path attributes of output channels have been eliminated, since they can now be used directly in the URI formats. [David]

  • The admin tools are now listed in alphabetical order in the side navigation of the UI. [David]

  • 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. [David]

  • Users creating media documents from within a related media element (because the RELATED_MEDIA_UPLOAD bricolage.conf directive has been enabled and they have the proper permissions) are now redirected to the New Media profile when the new file has been uploaded, so that the element type, category, cover date, priority, etc. can be changed. [David]

  • Story and media cover dates are now versioned. [David]

  • 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. [David]

  • Renamed Bric::Biz::Asset::Template to Bric::Biz::Asset::Formatting. [David]

  • Added the TT_OPTIONS bricolage.conf directive to allow Bricolage administrators to pass template toolkit directive options to the Template object when it is instantiated by the Template Toolkit burner. [David]

  • 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. [David]

  • 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. [David]

  • Searches now are remembered 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. [David]

  • Eliminated need for HTTP::BrowserDetect, since the UI is now completely browser-neutral. [David]

  • Media files can now be uploaded in the New Media profile. [David]

  • Added events for adding subelement element types to element types. [David]

  • 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. The burner constants PUBLISH_MODE and PREVIEW_MODE can also be used $PUBLISH_MODE() and $PREVIEW_MODE() in PHP) if the default PERL_LOADER in bricolage.conf is left in place. But TT can’t have multiple symbols with the same names, so for each symbol exported, it adds to the stash the first one it finds in this order: CODE, HASH, ARRAY, IO, GLOB, FORMAT, and SCALAR. Use of imported functions in PHP templates requires PHP::Interpreter 1.1.0 or later. [David]

  • The story, burner, element, and content variables are now globals in PHP templates, rather than each being stored in a global $BRIC associative array, which is now gone. This brings the style of PHP templates more in line with that of Mason and Template Toolkit templates. [David]

  • Bric::SOAP::Workflow’s publish method now schedules a publish job instead of immediately publishing, thus allowing the publish_date parameter to actually work, and ensuring that the proper version is published. [David]

blog comments powered by Disqus