Just a Theory

Trans rights are human rights

Posts about use Perl

Bricolage 1.8.6 Released

The Bricolage development team is pleased to announce the release of Bricolage 1.8.6. This maintenance release addresses numerous minor issues in Bricolage 1.8.5 and adds a number of improvements, including SOAP, document expiration, and bric_queued fixes. The most important changes include:

Improvements

  • Added JavaScript code to validate that the username in the user profile does not have leading or trailing spaces. [David]

  • Events in the event log are now returned (and displayed) in reverse chronological order. [David]

  • The SOAP server now uses a user’s template sandbox when executing previews (such as with bric_soap --to-preview workflow publish). Reported by Marshall. [David]

  • Bric::Biz::Workflow now caches calls to allowed_desks(). This will allow desks to render much Faster, since most assets on a desk will list the same desks in the “Move to” select lists. [David]

  • When the PUBLISH_RELATED_ASSETS bricolage.conf directive is enabled, aliases are now also republished. Only aliases that have previously been published will be republished, and only the last published version will be republished, rather than any versions created since the last publish. Suggested by Serge Sozonoff. [David]

  • A story or media document published with an expire date earlier than the scheduled publish time no longer bothers with the publish but just expires the story or media document. [David]

  • Media documents without an associated media file will no longer be displayed in the search results when attempting to relate a media document to an element. Reported by Adam Rinehart. [David]

Bug Fixes

  • Form validation and group management now properly work in the user profile. [David]

  • The SFTP mover now works with bric_queued. [David]

  • Cloned stories now properly set the published_version attribute to undef rather than the value of the original story, thus preventing the clone from having a published version number greater than its current version number. Reported by Nate Perry-Thistle and Joshua Edelstein. [David and Nate Perry-Thistle]

  • When a category is added to a story that creates a URI conflict, the new category does not remain associated with the story in the story profile after the conflict error has been thrown. Reported by Paul Orrock. [David]

  • Contributor groups created in the contributor profile are no longer missing from the contributor manager search interface. Reported by Rachel Murray and Scott. [David]

  • The favicon.ico works again. [David]

  • Stories are now properly expired when the BRIC_QUEUED bricolage.conf directive is enabled. Reported by Scott. [David]

  • When a template is checked out of the library and then the checkout is canceled, it is no longer left on the desk it was moved into upon the checkout, but properly re-shelved. Reported by Marshall. [David]

  • Super Bulk Edit now works for media as well as stories. Reported by Scott. [David]

  • When a template is moved to a new category, the old version of the template is un-deployed when the new version is deployed to the new category. The versions in the sandbox are properly synced, as well.

For a complete list of the changes, see the changes. For the complete history of ongoing changes in Bricolage, see Bric::Changes.

Download Bricolage 1.8.6 now from the Bricolage Web site Downloads page, from the SourceForge download page, and from the Kineticode download page.

About Bricolage

Bricolage is a full-featured, enterprise-class content management and publishing system. It offers a browser-based interface for ease-of use, a full-fledged templating system with complete HTML::Mason, HTML::Template, and Template Toolkit support for flexibility, and many other features. It operates in an Apache/mod_perl environment and uses the PostgreSQL RDBMS for its repository. A comprehensive, actively-developed open source CMS, Bricolage has been hailed as “quite possibly the most capable enterprise-class open-source application available” by eWEEK.

Originally published on use Perl;

JavaScript TestSimple 0.03 Released

“I’m pleased to announce the third alpha release of TestSimple, the port of Test::Builder, Test::Simple, and Test::More to JavaScript. You can download it here. This release has the following changes:

  • Removed trailing commas from 3 arrays, since IE6/Win doesn’t like them. And now everything works in IE. Thanks to Marshall Roch for tracking down and nailing this problem.

  • isNum() and isntNum() in TestBuilder.js now properly convert values to numbers using the global Number() function.

  • CurrentTest is now properly initialized to 0 when creating a new TestBuilder object.

  • Values passed to like() and unlike() that are not strings now always fail to match the regular expression.

  • plan() now outputs better error messages.

  • isDeeply() now works better with circular and repeating references.

  • diag() is now smarter about converting objects to strings before outputting them.

  • Changed isEq() and isntEq() to use simple equivalence checks (== and !=, respectively) instead of stringified comparisons, as the equivalence checks are more generally useful. Use cmpOk(got, "eq", expect) to explicitly compare stringified versions of values.

  • TestBuilder.create() now properly returns a new TestBuilder object instead of the singleton.

  • The useNumbers(), noHeader(), and noEnding() accessors will now properly assign a non-null value passed to them.

  • The arrays returned from summary() and details() now have the appropriate structures.

  • diag() now always properly adds a “#” character after newlines.

  • Added output(), failureOutput(), todoOutput(), warnOutput(), and endOutput() to TestBuilder to set up function reference to which to send output for various purposes. The first three each default to document.write, while warnOutput() defaults to window.alert and endOutout() defaults to the appendData function of a text element inside an element with the ID “test” or, failing that, window.write.

  • todo() and todoSkip() now properly add “#” after all newlines in their messages.

  • Fixed line ending escapes in diagnostics to be platform-independent. Bug reported by Marshall Roch.

  • Ported about a third of the tests from Test::Simple (which is how I caught most of the above issues). The remaining test from Test::Simple will be ported for the next release.

Many thanks to Marshall Roch for help debugging issues in IE.

Now, there is one outstanding issue I’d like to address before I would consider this production ready (aside from porting all the remaining tests from Test::Simple): how to harness the output. Harnessing breaks down into a number of issues:

How to run all tests in a single window. I might be able to write a build script that builds a single HTML file that includes all the other HTML files in iframes or some such. But then will each run in its own space without stomping on the others? And how would the harness pull in the results of each? It might be able to go into each of its children and grab the results from the TestBuilder objects…

More Feedback/advice/insults welcome!

Originally published on use Perl;

JavaScript TestSimple 0.02 Released

I’m pleased to announce the second alpha release of TestSimple, the port of Test::Builder, Test::Simple, and Test::More to JavaScript. You can download it here. This release has the following changes:

  • Removed eqArray() and eqAssoc() functions from TestMore per suggestion from Michael Schwern. The problem is that these are not test functions, and so are inconsistent with the way the rest of the functions work. isDeeply() is the function that users really want.

  • Changed eqSet() to isSet() and made it into a real test function.

  • Implemented skip(), todoSkip(), and todo(). These are a bit different than the Perl originals originals so read the docs!

  • Implemented skipAll() and BAILOUT() using exceptions and an exception handler installed in window.onerror.

  • The final message of a test file now properly outputs in the proper place. Tests must be run inside an element its “id” attribute set to “test”, such as <pre id="test">. The window.onload handler will find it and append the final test information.

  • Implemented skipRest() in TestBuilder and TestMore. This method is stubbed out the Perl original, but not yet implemented there!

The only truly outstanding issues I see before I would consider these “modules” ready for production use are:

  • Figure out how to get at file names and line numbers for better diagnostic messages. Is this even possible in JavaScript?

  • Decide where to send test output, and where to allow other output to be sent. Test::Builder clones STDERR and STDOUT for this purpose. We’ll probably have to do it by overriding document.write()>, but it’d be good to allow users to define alternate outputs (tests may not always run in a browser, eh?). Maybe we can use an output object? Currently, a browser and its DOM are expected to be present. I could really use some advice from real JavaScript gurus on this one.

  • Write tests!

Feedback/advice/insults welcome!

Originally published on use Perl;

New JavaScript Testing Method: TestSimple

I’m pleased to announce the first alpha release of my port of [Test::Simple/Test::Builder/Test::More] to JavaScript. Download it now and let me know what you think!

You can see what the tests look like by loading the files in the tests/ directory into your Web browser. This is my first stab at what I hope becomes a complete port. I could use some feedback/ideas on a number of outstanding issues:

  • I have made no decisions as to where to output test results, diagnostics, etc. Currently, they’re simply output to document.write(). This may well be the best place in the long run, though it might be nice to allow users to configure where output goes. It will also be easy to control the output, since the output functions can easily be replaced in JavaScript. Suggestions welcome.

  • I have no idea how to exit execution of tests other than by throwing an exception, which is only supported by JavaScript 1.5, anyway, AFAIK. As a result, skipAll(), BAILOUT(), and skipRest() do not work.

  • Skip and Todo tests currently don’t work because named blocks (e.g., SKIP: and TODO:) are lexical in JavaScript. Therefore I cannot get at them from within a function called from within a block (at least not that I can tell). It might be that I need to just pass function references to skip() and todo(), instead. This is a rather different interface than that supported by Test::More, but it might work. Thoughts?

  • Currently, one must call Test._ending() to finish running tests. This is because there is no END block to grab on to in JavaScript. Suggestions for how to capture output and append the output of _ending() are welcome. It might work to have the onload event execute it, but then it will have to look for the proper context in which to append it (a <pre> tag, at this point).

  • Anyone have any idea how to get at the line number and file name in a JavaScript? Failures currently aren’t too descriptive. As a result, I’m not sure if level() will have any part to play.

  • Is there threading in JavaScript?

  • I haven’t written TestHarness yet. It may not make sense to even have such a thing in JavaScript; I’m not sure.

  • I’m using a Module::Build script to build a distribution. I don’t think there’s a standard for distributing JavaScript libraries, but I think that this works reasonably well. I have all of the documentation in POD, and the script generates HTML and text versions before creating the tarball. The Build.PL script of course is not included in the distribution. I started out trying to write the documentation in JSDoc, but abandoned it for all of the reasons I recounted last week.

  • Is there a way to dynamically load a JavaScript file? I’d like to use an approach to have TestMore.js and TestSimple.js load TestBuilder.js. I’d also like to use it to implement loadOk() (equivalent to Test::More’s use_ok() and require_ok() subroutines).

More details are in the ToDo section of the TestBuilder docs.

Let me know what you think!

Originally published on use Perl;

Bricolage 1.8.5 Released

The Bricolage development team is pleased to announce the release of Bricolage 1.8.5. This maintenance release addresses a number of issues in Bricolage 1.8.3 and adds a number of improvements (there was no announcement for the short-lived 1.8.4 release). The SOAP server in particular sees improvements in this release, with improved character set support; better support for related stories and media using URIs in addition to IDs; and as support for top-level element relations. Issues with the ordering of story elements have also been corrected, as well as errors when attempting to revert a story or media document or template. Here are the other highlights of this release:

Improvements

  • Added Linux startup script contrib/start_scripts/linux. [David]

  • Related story and media elements managed through the SOAP server can now use a combination of URI and site ID to identify related assets in addition to the existing approach of using story and media IDs. [David]

  • A list of subelements is now less likely to mysteriously become out of order and thus lead to strange action-at-a-distance errors. And even if they do become out of order, the error message will be more appropriate (“Warning! State inconsistent” instead of “Can’t call method “get_name” on an undefined value”). Reported by Curtis Poe. [David]

  • The SOAP media interface now supports creating relationships between the media documents elements and other story and media documents, just like the SOAP story interface does. [David]

  • The SOAP interface now supports Related stories and media on story type and media type elements just as in the UI. This involved the somewhat hackish necessity for including the “related_story_id” and “related_media_id” (or “related_story_uri” and “related_media_uri”) attributes in the “elements” XML element, but it does the trick. [David]

Bug Fixes

  • Calls to publish documents via SOAP will no longer fail if the published_version attribute is not specified and the document to be published has never been published before. [David]

  • The Bricolage virtual FTP server will no longer fail to start if Template Toolkit is installed but its version number is less than 2.14. Reported by Adam Rinehart. [David]

  • Stories and Media created or updated via the SOAP interface will now associate contributors of the appropriate type, instead of “All Contributors”. [Scott & David]

  • Deleting an element that has a template no longer causes an error. Thanks to Susan for the spot! [David]

  • Eliminated encoding errors when using the SOAP interface to output stories, media, or templates with wide characters. Reported by Scott Lanning. [David]

  • Reverting (stories, media, templates) no longer gives an error. Reported by Simon Wilcox, Rachel Murray, and others. [David]

  • Publishing a published version of a document that has a later version in workflow will no longer cause that later version to be mysteriously removed from workflow. This could be caused by passing a document looked up using the published_version to list() to $burner->publish_another in a template. [David]

  • The SOAP server story and media interfaces now support elements that contain both related stories and media, rather than one or the other. [David]

  • Attempting to preview a story or media document currently checked out to another user no longer causes an error. Reported by Paul Orrock. [David]

  • Custom fields with default values now have their values included when they are added to stories and media. Thanks to Clare Parkinson for the spot! [David]

  • The bric_queued script now requires a username and password and will authenticate the user. This user will then be used for logging events. All events logged when a job is run via the UI are now also logged by bric_queued. [Mark and David]

  • Preview redirections now use the protocol setting of the preview output channel if it’s available, and falls back on using “http://” when it’s not, instead of using the hard-coded “http://”. Thanks to Martin Bacovsky for the spot! [David]

  • The has_keyword() method in the Business class (from which the story and media classes inherit) now works. Thanks to Clare Parkinson for the spot! [David]

  • Clicking a link in the left-side navigation after the session has expired now causes the whole window to show the login form, rather than it showing inside the nav frame, which was useless. [Marshall]

  • The JavaScript that validates form contents once again works with htmlArea, provided htmlArea itself is patched. See the relevant htmlArea bug report for the patch. As of this writing, you must run the version of htmlArea in CVS. [David & Marshall]

  • The JavaScript that handles the double list manager has been vastly optimized. It should now be able to better handle large lists, such as a list of thousands of categories. Reported by Scott. [Marshall]

  • Uploading a new image to a media document with a different media type than the previous image no longer causes an Imager error. [David]

For a complete list of the changes, see the changes. For the complete history of ongoing changes in Bricolage, see Bric::Changes.

Download Bricolage 1.8.5 now from the Bricolage Web site Downloads page, from the SourceForge download page, and from the Kineticode download page.

About Bricolage

Bricolage is a full-featured, enterprise-class content management and publishing system. It offers a browser-based interface for ease-of use, a full-fledged templating system with complete HTML::Mason, HTML::Template, and Template Toolkit support for flexibility, and many other features. It operates in an Apache/mod_perl environment and uses the PostgreSQL RDBMS for its repository. A comprehensive, actively-developed open source CMS, Bricolage was hailed as “quite possibly the most capable enterprise-class open-source application available” by eWEEK.

Originally published on use Perl;

Bricolage 1.8.3 Released

The Bricolage development team is pleased to announce the release of Bricolage 1.8.3. This maintenance release addresses a number of issues in Bricolage 1.8.2. The most important changes eliminate or greatly reduce the number of deadlocks caused during bulk publishes of many documents. Other changes include new contributed scripts for importing contributors and for generating thumbnail images, Russian localization, and various fixes for database transaction, template formatting, and various user interface fixes. Here are the other highlights of this release:

Improvements

  • Added contrib/thumbnails/precreate-thumbs.pl script to pre-create thumbnails from images. Useful for upgraders. [Scott]

  • Added contrib/bric_import_contribs to import contributors from a tab-delimited file. Development by Kineticode, sponsored by the RAND Corporation. [David]

  • Added the published_version parameter to the list() methods of the story, media, and template classes. This parameter forces the search to return the versions of the assets as they were last published, rather than the most recent version. This will be most useful to those looking up other documents in templates and publishing them, as a way of avoiding pulling documents out from other anyone who might have them checked out! [David]

  • All publishing and distribution jobs are now executed in their own transactions when they are triggered by the user interface. This is to reduce the chances of a deadlock between long-running publishing transactions. [David]

  • Optimized SQL queries for key names or that order by string values to use indexes in the list() and list_ids() methods of the story, media, and template classes. [David]

  • Added Russian localization. [Sergey Samoilenko].

  • Changed the foreign keys in the story, media, and formatting (template) tables so that DELETEs do not cascade, but are restricted. This means that before deleting any source, element, site, workflow, or other related object that has a foreign key reference in an asset table, those rows must be deleted. Otherwise, PostgreSQL will throw an exception. Hopefully, this will put a stop to the mysterious but very rare disappearance of stories from Bricolage. [David]

  • A call to $burner->burn_another in a template that passes in a date/time string in the future now causes a publish job to be scheduled for that time, rather than immediate burning the document and then scheduling the distribution to take place in the future. Reported by Ashlee Caul. [David]

  • Changing the sort order of a list of items in a search interface now properly reverses the entire collection of object over the pages, rather than just the objects for the current page. Thanks to Marshall for the spot! [David]

Bug Fixes

  • Publishing stories not in workflow via the SOAP server works again. [David]

  • The Burner object’s encoding attribute is now settable as well as readable. [David]

  • The category browser works again. [David]

  • Fixed Media Upload bug where the full local path was being used, by adding a “winxp” key to Bric::Util::Trans::FS to account for an update to HTTP::BrowserDetect. [Mark Kennedy]

  • Instances of a required custom field in story elements is no longer required once it has been deleted from the element definition in the element manager. Reported by Rod Taylor. [David]

  • A false value passed to the checked_out parameter of the list() and list_ids() methods of the story, media, and template (formatting) classes now properly returns only objects or IDs for assets that are not checked out. [David]

  • The cover date select widget now works properly in the clone interface when a non-ISO style date preference is selected. Thanks to Susan G. for the spot! [David]

  • Sorting templates based on Asset Type (Element) no longer causes an error. [David]

  • Fixed a number of the callbacks in the story, media, and template profiles so that they didn’t clear out the session before other callbacks were done with it. Most often seen as the error “Can’t call method “get_tiles” on an undefined value” in the media profile, especially with IE/Windows (for some unknown reason). Reported by Ed Stevenson. [David]

  • Fixed typo in clone page that caused all output channels to be listed rather than only those associated with the element itself. [Scott]

  • Fixed double listing of the “All” group in the group membership double list manager. [Christian Hauser]

  • Image buttons now correctly execute the onsubmit() method for forms that define an onsubmit attribute. This means that, among other things, changes to a group profile will persist when you click the “Permissions” button. [David]

  • Simple search now works when it is selected when the “Default Search” preference is set to “Advanced”. Reported by Marshall Roch. [David]

  • Multiple alert types set up to trigger alerts for the same event will now all properly execute. Thanks to Christian Hauser for the spot! [David]

  • Publishing stories or media via SOAP with the published_only parameter (--published-only for bric_republish) now correctly republishes the published versions of documents even if the current version is in workflow. Reported by Adam Rinehart. [David]

  • Users granted a permission greater than READ to the members of the “All Users” group no longer get such permission to any members of the “Global Admins” group unless they have specifically been granted such permission to the members of the “Global Admins” group. Thanks to Marshall Roch for the spot! [David]

For a complete list of the changes, see the changes. For the complete history of ongoing changes in Bricolage, see Bric::Changes.

Download Bricolage 1.8.3 now from the Bricolage Website Downloads page, from the SourceForge download page, and from the Kineticode download page.

About Bricolage

Bricolage is a full-featured, enterprise-class content management and publishing system. It offers a browser-based interface for ease-of use, a full-fledged templating system with complete HTML::Mason, HTML::Template, and Template Toolkit support for flexibility, and many other features. It operates in an Apache/mod_perl environment and uses the PostgreSQL RDBMS for its repository. A comprehensive, actively-developed open source CMS, Bricolage was hailed as “quite possibly the most capable enterprise-class open-source application available by eWEEK.”

Enjoy!

–The Bricolage Team

Originally published on use Perl;

SVN::Notify 2.00 Hits CPAN

I’ve released SVN::Notify, a port of my widely-used activitymail script from CVS to Subversion and from a script to a genuine class.

Enjoy!

Originally published on use Perl;

Bricolage 1.8.2 Released

This maintenance release addresses quite a large number of issues in Bricolage 1.8.1. The most important changes were to enhance Unicode support in Bricolage. Bricolage now internally handles all text content as UTF-8 strings, thus enabling templates to better control the manipulation of multibyte characters. Other changes include better performance for searches using the ANY() operators and more intelligent transaction handling for distribution jobs. Here are the other highlights of this release:

Improvements

  • Bricolage now runs under a DSO mod_perl as long as it uses a Perl compiled with -Uusemymalloc or -Ubincompat5005. See The mod_perl FAQ for details.

  • Alerts triggered to be sent to users who don’t have the appropriate contact information will now be logged for those users so that they can see them and acknowledge them under “My Alerts”.

  • Added bric_media_dump script to contrib/.

  • The category association interface used in the story profile when the ENABLE_CATEGORY_BROWSER bricolage.conf directive is enabled now uses radio buttons instead of a link to select the primary category. Suggested by Scott Lanning.

  • Existing jobs are now executed within their own transactions, as opposed to no transaction specification. This means that each job must succeed or fail independent of any other jobs. New jobs are executed before being inserted into the database so as to keep them atomic within their surrounding transaction (generally a UI request). All this means that transactionality is much more intelligent for jobs and will hopefully eliminate job table deadlocks.

  • All templates now execute with UTF-8 character strings enabled. This means that any templates that convert content to other character sets might need to change the way they do so. For example, templates that had used <%filter> blocks to convert content to another encoding using something like Encode::from_to($_, 'utf-8', $encoding) must now use something like $_ = Encode::encode($encoding, $_), instead. Bric::Util::CharTrans should continue to do the right thing.

  • Added encoding attribute to Bric::Util::Burner so that, if templates are outputting something other than Perl utf8 decoded data, they can specify what they’re outputting, and the file opened for output from the templates will be set to the proper mode. Applies to Perl 5.8.0 and later only.

  • Added SFTP_HOME bricolage.conf directive to specify the home directory and location of SSH keys when SSH is enabled.

Bug Fixes

  • make clone once again properly copies the lib/Makefile.PL and bin/Makefile.PL files from the source directory.

  • Added missing language-specifying HTML attributes so as to properly localize story titles and the like.

  • The list of output channels to add to an element in the element profile now contains the name of the site that each is associated with, since different sites can have output channels with the same names.

  • The “Advanced Search” interface once again works for searching for related story and media documents.

  • Bricolage no longer attempts to email alerts to an empty list of recipients. This will make your SMTP server happier.

  • The version numbering issues of Bricolage modules have all been worked out after the confusion in 1.8.1. This incidentally allows the HTML::Template and Template Toolkit burners to be available again.

  • Misspelling the name of a key name tag or including a non-repeatable field more than once in Super Bulk Edit no longer causes all of the changes in that screen to be lost.

  • When a user overrides the global “Date/Time Format” and “Time Zone” preferences, the affects of the overrides are now properly reflected in the UI.

  • Publishing a story or media document along with its related story or media documents from a publish desk again correctly publishes the original asset as well as the relateds.

  • Deleted output channels no longer show up in the select list for story type and media type elements.

  • Deleting a workflow from the workflow manager now properly updates the workflow cache so that the deleted workflow is removed from the left navigation without a restart.

  • When Bricolage notices that a document or template is not in workflow or on a desk when it should be, it is now more intelligent in trying to select the correct workflow and/or desk to put it on, based on current workflow context and user permissions.

  • Content submitted to Bricolage in the UTF-8 character set is now always has the utf8 flag set on the Perl strings that store it. This allows fields that have a maximum length to be truncated to that length in characters instead of bytes.

  • Elements with autopopulated fields (e.g., for image documents) can now be created via the SOAP interface.

  • Fixed a number of the parameters to the list() method of the Story, Media, and Template classes to properly handle an argument using the ANY operator. These include the keyword and category_uri parameters. Passing an ANY argument to these parameters before this release could cause a well-populated database to lock up with an impossible query for hours at a time.

  • Template sandboxes now work for the Template Toolkit burner.

For a complete list of the changes, see the changes. For the complete history of ongoing changes in Bricolage, see Bric::Changes.

Download Bricolage 1.8.2 now from the Bricolage Website Downloads page, from the SourceForge download page, and from the Kineticode download page.

About Bricolage

Bricolage is a full-featured, enterprise-class content management and publishing system. It offers a browser-based interface for ease-of use, a full-fledged templating system with complete HTML::Mason, HTML::Template, and Template Toolkit support for flexibility, and many other features. It operates in an Apache/mod_perl environment and uses the PostgreSQL RDBMS for its repository. A comprehensive, actively-developed open source CMS, Bricolage was hailed as “quite possibly the most capable enterprise-class open-source application available by eWEEK.”

Enjoy!

–The Bricolage Team

Originally published on use Perl;

Bricolage 1.8.1 Released

This maintenance release address a number of issues in Bricolage 1.8.0. Here are the highlights:

Improvements

  • More complete Traditional Chinese and Simplified Chinese localizations. Also, the Mandarin localization now simply inherits from the Traditional Chinese localization.

  • make clone now copies the lib directory and all of the bin scripts from the target to the clone, rather than from the sources. This allows any changes that have been made to scripts and classes to be properly cloned.

  • When installing Bricolage, it will now allow you to proceed if the database already exists by asking if you want to create the Bricolage tables in the existing database. Suggested by Mark Fournier and Marshall Roch.

  • The installer is now a bit smarter in how it handles loading the log_config (or config_log, as the case may be) module.

  • Added language-specific style sheets. This is especially useful for right-to-left languages or for languages that require special fonts.

  • The “New Alias” search interface now displays thumbnails when searching for media documents to alias and the USE_THUMBNAILS bricolage.conf directive is enabled.

  • Aliases can now be made to documents within the same site.

  • The SOAP interface for importing and exporting elements now properly has “key_name” XML elements instead of “name” XML elements. The changes are backwards compatible with XML exported from Bricolage 1.8.0 servers, however.

  • Added move() method to the virtual FTP interface. This means that to deploy a template, rather than having to rename it locally to append “.deploy” one can simply move in FTP to its new name with “.deploy” on appended to the new name.

  • Document expirations are now somewhat more intelligent. Rather than just scheduling an expiration job only if there is an expiration date the first time a document is published, Bricolage will now always schedule an expiration job for a document provided that one does not already exist (scheduled or completed) for the same time and for one of the file resources for the document. This should allow people to more easily and arbitrarily expire content whenever necessary.

  • Burner notes now persist for all sub burns (triggered by publish_another() and preview_another() in a single burn.

  • Added ability to create and manage groups of objects for several different types of objects. Also added the ability manage group membership within the administrative profiles for those objects. This change makes it possible to give users permission to administer subsets of objects. The new groupable objects are:

    • Preferences
    • Groups
    • Alert Types
    • Element Types
    • Keywords
    • Contributors
  • Alert rules are now evaluated within a safe compartment (using Safe.pm) to prevent security exploits.

  • The Bulk Publish admin tool is no longer limited to use only by members of the Global Admins group. Now anyone can use it. All one needs is READ permission to the categories of stories, and PUBLISH permission to the stories and media documents to be published.

Bug Fixes

  • Eliminated “Bareword “ENABLE_HTMLAREA” not allowed while “strict subs” in use” warning that prevented startup for some installations.

  • Changes made to user or contributor contacts without changing any other part of the user or contributor object are now properly saved.

  • The upgrade to 1.8.0 now correctly updates story URIs that use the URI Suffix of an output channel instead of using the URI Prefix twice.

  • Aliases of Image, Audio, or Video media documents no longer remain stuck on desks.

  • Related media and story subelements of media documents now work properly.

  • Calls to preview_another() in Bric::Util::Burner will now use any templates in the current user’s sandbox and properly burn them to the preview root rather than to the staging root used for publishing.

  • Contributor fields for roles other than the default role now properly store and retain their values.

  • The virtual FTP server now properly checks out templates when a template is uploaded and is already in workflow.

  • Uploading a non-existent template via the virtual FTP server now correctly creates a new template. The type of template depends on the name of the template being uploaded, and for element templates, on whether there is an element with the appropriate key name. The user must have CREATE permission to All Templates or to the start desk in the first template workflow in the relevant site.

  • Reverting a document or template to the current version number now properly reverts all changes to the time the user checked out the document or template. Reversion is also a bit more efficient in how it looks up the previous version in the database.

  • The SOAP server now rolls back any changes whenever an error is thrown. This prevents problems when a few objects are created or updated before an exception is thrown. Now any error will cause the entire SOAP request to fail. Thanks to Neal Sofge for the spot!

For a complete list of the changes, see the release notes and changes list. For the complete history of ongoing changes in Bricolage, see Bric::Changes.

Download Bricolage 1.8.1 now from the SourceForge download page or from the Kineticode download page

About Bricolage

Bricolage is a full-featured, enterprise-class content management and publishing system. It offers a browser-based interface for ease-of use, a full-fledged templating system with complete HTML::Mason, HTML::Template, and Template Toolkit support for flexibility, and many other features. It operates in an Apache/mod_perl environment and uses the PostgreSQL RDBMS for its repository. A comprehensive, actively-developed open source CMS, Bricolage was hailed as “Most Impressive” in 2002 by eWeek.

Enjoy!

–The Bricolage Team

Originally published on use Perl;

New Blog

This space intentionally left blank.

Originally published on use Perl;

Internationalizing Numbers in Address Book

Anyone got a recipe to go through all of the phone numbers in the Panther Address Book and add “+1 " to any numbers that don’t have a + International code? Mac::Carbon, AppleScript, XML::Parser, or any approach would be welcome.

Thanks!

David

Originally published on use Perl;

In Search of a Server

The Bricolage community is currently working on the design for a new Bricolage site. The site will of course be managed in Bricolage. But we need a server!

If you or someone you know would be willing to donate and host a server for us, with the ability to install Bricolage and manage the Bricolage site, please contact me forthwith!

David

Originally published on use Perl;

Bricolage 1.8.0 Arrives!

It is with great pleasure that the Bricolage development team announces the release of Bricolage 1.8.0. The culmination of over 15 months in development, with contributions from over 20 independent developers, and new features sponsored by numerous organizations world-wide, version 1.8.0 represents a significant new pinnacle for the much-lauded open-source content management and publishing system. This release offers more new features, improvements, and performance gains than any previous release. There are so many, in fact (over 120), that they can’t effectively be included in this announcement. Here are some of the highlights:

  • Support for managing multiple sites from a single Bricolage installation. Each site has its own categories, templates, document types, and workflows, and collaboration across sites is supported by document aliasing and shared workflow desks.

  • Significant performance boosts to search queries and URI uniqueness validation.

  • Email document distribution, which can be used to email the files generated by an output channel to one or more email addresses.

  • A greatly simplified and flexible templating and element API.

  • Template sandboxes to enable template development without interfering with production templates.

  • Support for Template Toolkit templates (http://www.template-toolkit.org).

  • New “Publish” and “Recall” permissions, for improved workflow management.

  • Per-user preferences.

  • Document formatting at publish time, rather than publish scheduling time.

  • New German and Mandarin localizations.

  • Image thumbnails and icons for all media documents.

  • Support for HTMLArea WYSIWYG editing with HTMLArea. See http://www.interactivetools.com/products/htmlarea/.

For a complete list of the changes, see the release notes and changes list on SourceForge. For the complete history of ongoing changes in Bricolage, see Bric::Changes.

Download Bricolage 1.8.0 now from the Kineticode download page or from the SourceForge download page.

ABOUT BRICOLAGE

Bricolage is a full-featured, enterprise-class content management and publishing system. It offers a browser-based interface for ease-of use, a full-fledged templating system with complete HTML::Mason, HTML::Template, and Template Toolkit support for flexibility, and many other features. It operates in an Apache/mod_perl environment and uses the PostgreSQL RDBMS for its repository. A comprehensive, actively-developed open source CMS, Bricolage was hailed as “Most Impressive” in 2002 by eWeek.

Enjoy!

–The Bricolage Team

Originally published on use Perl;

Bricolage 1.7.5 “Ashland” (1.8.0 RC2)

I’m thrilled to announce the release of Bricolage-Devel 1.7.5 “Ashland”, the second release candidate for Bricolage 1.8.0. This version of the open-source content management system addresses all of the bugs discovered since the release of the first release candidate, 1.7.4, and adds several new features and numerous improvements. The changes since 1.7.4 include:

  • New Features

    • Added bric_template_dump to contrib. This script uses the Bricolage SOAP server to export all of the templates in a single output channel. [David]

    • 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]

  • Improvements

    • Added site and output channel support to bric_template_diff and bric_template_patch in contrib. [David]

    • When cloning a story, you can now select a new primary output channel, in addition to category, slug, cover date, etc. Suggested by Serge Sozonoff. [David]

    • Spell checking now works in HTMLArea. [Eric Sellers]

    • When creating a new story without a slug, Bricolage will now autogenerate a slug based on the title. [João Pedro]

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

    • Made SOAP modules more tolerant of lack of sites in 1.6. [Scott]

    • The collection API now checks newly added members when deleting members. This ensures that newly added objects won’t be saved to the database if they are deleted, first. [David]

    • Turned off browser autocompletion in the Server and User profiles. This prevents some browsers (e.g., Camino) from filling in your username and password where it doesn’t belong. [David]

    • When the “Filter by Site Context” preference is enabled, it no longer filters documents when searching for documents to alias. Reported by Patrick Walsh. [David]

    • 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 workfow 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. Requested by Sara Wood, Rachel Murray, and others. [David]

    make clone now provides the current date and time for the default name for the cloned package. Suggested by Marshall Roch. [David]

  • Bug Fixes

    • Bricolage no longer tries to display thumbnails for related stories, since stories don’t have thumbnails and would therefore create an error. [Eric Sellers]

    • Text::Levenshtein is again correctly loaded as an optional module, not a required module. Reported by Marshall Roch. [David]

    • Bric::Util::Burner’s preview_another() method now actually works. Thanks to Serge Sozonoff for the spot. [David]

    • Fixed clone interface for IE users. Spotted by Serge Sozonoff. [Scott]

    • Some of the supported values for the Order parameter to the Story, Media, and Template classes, such as category_uri, did not work before. Now they do. [David]

    • Changing categories on a template no longer creates Frankensteinian template paths. [David]

    • Added constant HAS_MULTISITE to the Bric base class so that all classes properly declare themselves for UI search results. [João Pedro]

    • Story and Media SOAP calls now correctly use the element’s key name to identify the element. [João Pedro]

    • Story, Media, and Template creation via SOAP now correctly look up the Category by URI and site ID. [João Pedro & David]

    • The Template SOAP interface now suports the site parameter to list_ids(). [David]

    • The Story, Template, and Media SOAP list_ids() interfaces now properly look up categories, output channels, and workflows with the site parameter, if there is one. [David]

    • The LOAD_LANGUGES and LOAD_CHAR_SETS directives are now space delimited, to better match other bricolage.conf options. [David]

    • Aliased media documents now correctly point to the file name for the aliased media document. Reported by Patrick Walsh. [David]

    • Thanks to the improvements to the collection class, cloning stories and putting them into new output channels to ensure that they have unique URIs now works properly. Reported by Serge Sozonoff. [David]

    • The publish status and version is once again properly set for media when they are published. Reported by Serge Sozonoff. [David]

    • The group manager now properly displays the names of the sites that member objects are associated with if the class of the objects being managed knows that its objects are associated with sites. Reported by Ho Yin Au. [David]

    • The list of output channels to add to a media or story document in the media and story profiles now includes only those output channels associated with the site that the story or media document is in. [David]

    • Thanks to the fix to 1.6.13 that prevents deleted groups from affecting permissions, there is no longer any need to provide a checkbox to get access to deleted groups in the permissions interface. So it has been removed. [David]

For a complete list of the changes, see the changes file.

ABOUT BRICOLAGE

Bricolage is a full-featured, enterprise-class content management and publishing system. It offers a browser-based interface for ease-of use, a full-fledged templating system with complete HTML::Mason, HTML::Template, and Template Toolkit support for flexibility, and many other features. It operates in an Apache/mod_perl environment, and uses the PostgreSQL RDBMS for its repository. A comprehensive, actively-developed open source CMS, Bricolage has been hailed as “Most Impressive” in 2002 by eWeek.

Learn more about Bricolage and download it from the Bricolage home page.

Enjoy!

Originally published on use Perl;

“use.perl.org journal of Theory: “Bricolage 1.7.5 “Ashland” (1.8.0 RC2)””

Cross-Platform Conferencing Software?

Suddenly I’m getting a number of requests to do Bricolage demos via conferencing software. I tried to join a WebEx meeting yesterday, but it didn’t like any of my Mac OS X browsers or the versions of Java they had installed (browser sniffing == bad!).

I’d like to use Mac OS X software to conference with folks using Windows and other platforms. I can use my old Windows 98 SE box if necessary, but I’d rather not. Anyone know what the options are for good cross-platform conferencing, and what works and what doesn’t?

Thanks,

David

Originally published on use Perl;

Bricolage-Devel 1.7.4

I’m thrilled to announce the release of Bricolage-Devel 1.7.4 “Sacramento”, the first release candidate for Bricolage 1.8.0. This version of the open-source content management system addresses all of the bugs discovered since the release of the fourth development release, 1.7.4, and adds several new features and numerous improvements. The most significant changes since 1.7.3 include:

  • New Features

    • A “Bulk Publish” link in ADMIN->PUBLISHING that lets members of the Global Admins group publish story and media documents by category. [Scott]

    • Added notes() method to Bric::Util::Burner, along with the accompanying clear_notes(). The notes() method provides a place to store burn data data, giving template developers a way to share data among multiple burns over the course of publishing a single story in a single category to a single output channel. Any data stored here persists for the duration of a call to burn_one(). [David]

    • 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. See contrib/button_gen/README for details. [Florian Rossol]

    • 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 icons is distributed with Bricolage, comp/media/mime/none.png (borrowed from the KDE project under a free license), which is the default icon when the MIME type of a media file is unknown or when no icon file exists for the MIME type of the media file. Administrators are free to add their own icons, and the copy_gnome_icons script in contrib makes it easy to use GNOME icons. [David]

    • Added bric_template_diff and bric_template_patch scripts in contrib/bric_template_diff. These scripts can be used to sync templates between two Bricolage servers. [Sam]

    • added bric_media_load to contrib/. This script copies media into Bricolage while accounting for the new to update existing media. [Sam]

    • Added HTMLArea support. This 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 emphasis added or links. It is not currently available in Bulk Edit or Super Bulk edit. See Bric::Admin for installation and configuration details. [Eric Sellers]

  • Improvements

    • The list of categories for which permissions can be granted to user groups to access the documents and templates in the category now displays the categories for each site separately, so that categories with same URIs (such as for the root category in each site) can be easily told apart. Reported by Ho Yin Au. [David]

    • The list of workflows for which permissions can be granted in the permissions page now includes the parenthesized name of the site each workflow is associated with. [David]

    • Modified the indexes on the workflow__id and desk__id columns of the story, media, and formatting (template) 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]

    • Added a method is_fixed to story and media objects, to determine whether a business asset has a fixed URL (for example, a Cover page). Refer to Bric::Biz::Asset::Business. [Scott]

    • Added the ENABLE_OC_ASSET_ASSOCIATION bricolage.conf directive to remove the ability to associate output channels from the story and media profiles. [Scott]

    • The element admin profile now automatically adds the currently selected site context to new elements, thus generally saving a step when creating new elements. [João Pedro]

    • Added an interface to ‘Clone’ for stories so that you can change the category, slug, and cover date, because otherwise an identical story is created, which would cause errors for some stories. Clones are no longer allowed to have URIs that are identical to the stories they were cloned from. [Scott & David]

    • Added the ability to Delete from desks (same as My Workspace). Note however, that you can’t delete from a publish desk. [Scott]

    • Completely documented the document element classes: Bric::Biz::Asset::Business::Parts::Tile, Bric::Biz::Asset::Business::Parts::Tile::Data, and Bric::Biz::Asset::Business::Parts::Tile::Container. This should make it a bit easier on templators learning their way around the Bricolage API. [David]

    • Refactored quite a bit of the code in the element classes. Renamed the methods with “tile” in their names to use “element” instead (but kept the old ones around as aliases, since they’re used throughout the UI). Added a few methods to make the interface more complete. [David]

    • Modified the get_containers() method of Bric::Biz::Asset::Business::Parts::Tile::Container 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. It neatly replaces code such as this:

      for ( my $x = 1; my $quote = $element->get_container('quote', $x); $x++ ) {
          $burner->display_element($quote);
      }
      

      With this:

      for my $quote ($element->get_containers('quote')) {
          $burner->display_element($quote);
      }
      

      And is more efficient, too. [David]

    • Modified the get_elements() method of Bric::Biz::Asset::Business::Parts::Tile::Container to take an optional list of key name arguments, and to return only the subelements with those key names. [David]

    • Added the get_data_elements() method to Bric::Biz::Asset::Business::Parts::Tile::Container. This method functions exactly like get_containers() except that it returns data element objects that are subelements of the container element. It also takes an optional list of key name arguments, and, if passed, will return only the subelements with those key names. [David]

    • The ANY() subroutine will now throw an exception if no arguments are passed to it. Suggested by Dave Rolsky. [David]

    • 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]

    • The “User Override” admin tool is now available to all users. But 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]

    • Eliminated another SQL performance bottleneck with simple searches of media assets. [João Pedro]

    • Images with no dimension greater than the THUMBNAIL_SIZE bricolage.conf directive are no longer expanded to have one side at least THUMBNAIL_SIZE pixels, but are left alone. [David]

    • Thumbnails are now displayed when searching media to related to an element. [David]

    • Thumbnails are now displayed in related media subelements. [David]

    • Added preview_another() method to Bric::Util::Burner. This method is designed to be the complement of publish_another(), to be used in templates during previews to burn and distribute related documents so that they’ll be readily available on the preview server within the context of previewing another document. [Serge Sozonoff]

    • 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]

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

    • 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. The downside is that it requires PostgreSQL 7.2 instead of our traditional minimum requirement of 7.1. So any PostgreSQL 7.1 users will need to upgrade before upgrading to this version of Bricolage. Suggested by Josh Berkus. [David]

  • Bug Fixes

    • make clone will now properly clone a database on a different database server, provided the host name (and port, if necessary) have been provided. Thanks to Ho Yin Au for the spot! [David]

    • Admin tool lists that include the number “9” in the corner of a table of items is now properly orange instead of green. Reported by Ho Yin Au. [David]

    • Bricolage works with Perl 5.6.x again, although it’s pretty strongly deprecated. Perl 5.8.0 or later is required for character set conversion and if any content uses characters outside of US ASCII. Thanks to John Greene for the spot! [David]

    • Image files uploaded in formats not recognized by Image::Info no longer trigger an error. Reported by Alexander Ling. [David]

    • Changing the cover date of a media document once again correctly updates the primary URI of the media document. Reported by Serge Sozonoff. [David]

    • Fixed API that was causing no elements to be returned on “Add sub-elements” page, when “Filter by site context” was turned on. [João Pedro]

    • When the SOAP server serializes and deserializes element templates, it now correctly identifies the element by its key name, rather than its name. Thanks to João Pedro for the spot! [David]

    • The template profile’s “cheat sheet” of the subelements of an element now correctly display subelement key names instead of munging element names, as was required before version 1.7.0. [João Pedro]

    • Bric::SOAP::Category->list_ids now converts site names to site IDs. [João Pedro]

    • Bric::Util::Burner->preview once again defaults to previewing in an asset’s primary output channel instead of using the element’s primary output channel. [João Pedro]

    • Added first_publish_date attribute to the SOAP input and output for stories and media. [David]

    • The category SOAP class now correctly calls lookup() with the site ID to prevent multiple categories with the same names but in different sites from being looked up. [João Pedro]

    • User overrideable preferences are now properly checked for permissions to allow users with READ permission to a user to see the permissions. [David]

    • Users can now edit their own user-overrideable preferences. [David]

    • Group management now works more correctly in user profiles where users have on READ access to the user object. [David]

    • Removed queries added in 1.7.2 that were running at Bricolage startup time. They could cause DBI to cache a database handle and return it after Apache forks, leading to strange errors such as “message type 0x49 arrived from server while idle”, and occasionally a frozen server. [David]

For a complete list of the changes, see the changes file.

ABOUT BRICOLAGE

Bricolage is a full-featured, enterprise-class content management and publishing system. It offers a browser-based interface for ease-of use, a full-fledged templating system with complete HTML::Mason, HTML::Template, and Template Toolkit support for flexibility, and many other features. It operates in an Apache/mod_perl environment, and uses the PostgreSQL RDBMS for its repository. A comprehensive, actively-developed open source CMS, Bricolage has been hailed as “Most Impressive” in 2002 by eWeek.

Learn more about Bricolage and download it from the Bricolage home page.

Enjoy!

David

Originally published on use Perl;