Library module: eXtensible Catalog Drupal Toolkit

The Drupal Toolkit is a modular system that handles the creation and manipulation of metadata in accordance to the XC schema format within the Drupal content management system by:

  • Defining metadata
  • Importing and exporting metadata
  • Storing and retrieving metadata
  • Searching metadata
  • Extending and modifying metadata
  • Controlling user access to metadata
  • Generating fully customizable XHTML and CSS output

Some modules are part of the Toolkit however can be used independently from it. These are:

  • OAI harvester
  • NCIP integration
  • Integration of Syndetics Solution services
  • URL rewriting to EZProxy server

All of these core functionalities will be handled by XC defined hooks for Drupal that will allow XC modules, and perhaps any future contributed modules, to plug into and extend the features of the XC Drupal Toolkit.

Library site: Simon Fraser University Library Thesis Submission and Management Application

The Library is responsible for auditing non-academic aspects of theses, dissertations, and graduate-level projects submitted at Simon Fraser University. For over four years, we have required that students 'submit' their theses (i.e., register with the Library) using a simple web form that populated an Excel spreadsheet, which in turn was used by our Theses Office to process the semester's batch. Even though we still require that students submit a printed thesis, we have found that most students (over 90%) provide a PDF version for submission to our Institutional Repository.

This January we launched our second-generation thesis submission and management system. It is a Drupal 'application' in the sense that it focuses on narrowly defined user tasks, triggers, and back-room workflows to a much greater extent than most general CMS-based websites do:

  1. Students log into the site using their library credentials, and their student ID, SFU email address, and full name are prepopulated in the submission form (a CCK node edit form) from their library record.
  2. After they log in, they enter their thesis title, abstract, supervisor's name, pagination details, keywords, and call number, and they can upload one or more files.
  3. Students can log in at a later date, but if they do, they cannot edit any of the fields they have populated the first time they logged in; they can only upload and replace files.
  4. A series of receipt emails are generated when the student registers a thesis, including one to the student and one to the departmental graduate secretary. Other triggers that generate emails include when the Theses Office enters a date in the "Submission complete" field and when the Theses Office completes its audit.
  5. The Theses Office audits the submission for requirements such as approval from the academic department, ethics review and copyright documentation, and technical requirements such as title page and document formatting.
  6. Theses Office staff can send emails from within the application detailing specific problems with the submission. Responses from the student are not recorded in the app, however.
  7. The app can generate various PDF forms containing submission-specific values, using a custom module that incorporates the TCPDF library. These forms include copyright licenses the student must sign and slips attached to each thesis containing details to be used by the bindery service.
  8. Uploaded files are automatically renamed to incorporate the "ETD ID" for a thesis, a unique identifier based on the node ID generated by Drupal. Also, on upload, the application generates JHOVE output for each file, and records basic preservation metadata on all files in a database table.
  9. The app provides comma-delimited files to Grad Records staff listing all students who have completed their submission requirements. Grad Records logs in, clicks on a link to a view, refines their query, and clicks on a CSV icon to generate the file. Thanks Views and View Bonus Pack!
  10. We generate DSpace import packages for theses after they have been audited, and corresponding MARC records for loading into our ILS. One interesting (i.e., nerdy) feature we've built into the app is for an XML-RPC client in the script that creates that MARC records to automatically update each thesis record in the Drupal app with the URL in our DSpace IR.
  11. The site runs on https, since students are entering personal information and Grad Records is downloading lists that contain the same information. Apart from buying the certificate and configuring Apache to use it, we had to do nothing to configure Drupal to use https.

Lessons learned: Manipulating CCK fields via form_alter() can be a real pain in the behind (example threads on d.o.); it's very important to think about system-level CCK field naming conventions before you touch a keyboard, since you cannot change them; the core upload module, and the way Drupal 6.x handles files in general, pales in comparison with the rich APIs available for manipulating nodes.

We are working with Grad Studies and other units on campus to remove the requirement for the student to submit a printed version of their thesis, and this new submission and management application will prepare us very well to go paperless.

tuning drupal's search index with hook_nodeapi and $node->build_mode

I've been working on getting our search index to exclude certain fields from custom content types so that hidden information isn't available by searching for it.

Modules can affect what content a node displays through their hook_nodeapi function by modifying the $node object's 'content' parameter.

For example, to add a simple phrase near the bottom of every node when it is viewed:


function my_module_nodeapi(&$node,$op) {
if ($op =='view') {
$node->content['extra_info'] = array(
'#value' => 'The moon is made of cheese.',
'#weight' => 100,
);
}

restoring a single node from backup

Now and then I have to restore a MySQL drupal table from backup, and I've been using the instructions at Mike's *NIX notes to do it. It works great.

Except when the table in question is {node_revisions}, which contains the default body field for most Drupal content, and your site has changed enough that you really just want to restore one entry, not the entire site.

ALA issues CMS RFP

(Posted on behalf of Louise Gruenberg, Information Technology & Telecommunications Services, ALA)

The American Library Association (ALA) is seeking a vendor to handle the migration of http://www.ala.org, which includes 11 division subsites, a number of online publications, and their site for the public (I Love Libraries http://www.ilovelibraries.org) to a new content management system. Proposals are due February 15, 2010.

Drupal Done Right

Karen Coombs has published a great article in the November 15 Library Journal profiling several Drupal library projects. Disclosure statement: one of the projects in Karen's article is my own library's thesis submission app.

The New York Public Library launches public beta of new Drupal powered site

We're proud to announce the public beta of our new site, available at http://new.nypl.org. Please use the feedback mechanism available on the site if you would like to give us your input.

LITA Drupal Interest Group at ALA Midwinter in Boston

The meeting of the LITA Drupal Interest Group at ALA Midwinter in Boston is scheduled for Saturday, January 16, 2010 from 4:00-5:30, Boston Convention & Exhibition Center-Room 157B.

Library DrupalCamp 2010 (Pre ALA Annual)

Momentum is building for a Library DrupalCamp to be held in Washington (or close by) immediately preceding ALA Annual. I would like to consolidate discussion of this to the groups.drupal.org library group. There is also a thread about this on the drupal4lib mailing list.

Should there be a ALA affiliation?

My thought is that this should be a free or very inexpensive event, so affiliation might be impossible.

Thanks!

Library module: Question/Answer module for e-mail reference service

We've been using Drupal 5.x to manage the e-mail component of our statewide virtual reference service, including followup for chat. I finally got it together to upgrade to 6.x and am trying to make the package as configurable, themable and extensible as possible so that other libraries (or anyone) can use it.

I expect to eventually be able to use this module for Text/SMS reference as well.

There are a bunch of dependencies, a heck of a README.txt, and certainly work to be done, but it's definitely at a sharable point.

Syndicate content