Tag Archive for drupal

One Year Old

The Catlin Gabel website recently turned one! After a gestation period of six months, the website launched on July 1, 2009.

The Drupal-based website held up well last year. Dedicated hardware helped ensure that performance would remain high. The site received high ratings for usability. We improved the site throughout the year in response to user feedback and continue to develop it now.

Drupal 6 itself matured over the course of the year. Code and SQL errors resolved themselves as the community released patches and we installed the updated versions.

The year validated our decision to integrate password-protected, community content throughout the site. When logged in, users access protected content and tools based on their group membership. Users get to these tools in their expected locations on the site, rather than having to enter a separate community portal.

This year, we plan to build a complete online admission application, improve the design of section landing pages, and make a lot of small features more usable.

Drupal 6.17 and session cookies

I have had no problems with Drupal core updates for years. I finally got burned when I installed Drupal 6.17. This update no longer removes “www.” from admin-set cookie domains, which was preventing admins from using different cookie domains for www.example.com and example.com websites. The change broke login for many of our users until I solved the problem.

How did this seemingly esoteric issue affect us? In addition to www.catlin.edu, we also run live development and test copies of our website, so that we may build new features and try changes without affecting users. Some time ago, we manually set $cookie_domain in settings.php so that sites could have separate cookies, allowing a developer to log into the different sites as different users. However, users had saved cookies that used the old method, which introduced a cookie mismatch when they visited www.catlin.edu and had a saved cookie for catlin.edu. I still don’t understand why the browser didn’t just save a new cookie when they logged in instead of silently failing.

Clearing cookies resolved the problem for individual users, but I needed a solution that would work for off-campus users with saved cookies. Ultimately, I followed the release announcement and set $cookie_domain to “.catlin.edu” so that it would work whether the user’s saved cookie was for www.catlin.edu or .catlin.edu. It also means that developers are automatically logged into our development and test sites, but we can always use a separate browser when needed.

The site log showed no errors, but one could see a series of “new session for user …” entries when a user was having problems logging in. The normal behavior is that the user successfully opens a new session then either ends the session soon thereafter or leaves it open.

More student work online

Classes, global travel groups, and individuals are publishing on the Catlin Gabel website to share their work with the Catlin Gabel community or other specific audiences. Learning objectives vary on these blogs from building community awareness to communicating directly to specific stakeholders.

Any student, teacher, or staff member can maintain an individual blog or contribute to a group blog on the Catlin Gabel website. Some blogs are open to everyone visiting our website. Most blog posts require login.

You can always find blogs from the Quick Links menu on the Catlin Gabel website. Happy reading!

» Link to all blogs

Links to specific blogs

Nepal 2010
Japan 2010
Cuba 2010
Senior Projects

Urban Studies

Honors Art Seminar
Science Projects
Spanish V Honors
French 2

External blogs
Paul Monheimer in Israel
The Catlin Coverslip

Classroom pages
Middle and Lower School teachers use classroom pages more often than student blogs. The function is similar.
Second grade
Fourth grade

Fifth grade

Sixth grade
Lower School French

Seventh grade

Summer Programs Registration

Last year, I built a site to allow parents to register their children for Catlin Gabel’s summer camps. This helped our small staff more easily handle hundreds of registrations each spring and provides our parents with immediate feedback for their summer plans. This year, I incorporated this into our new website by rebuilding the features using the same technique. The site had to include courses from a print catalog, accept credit card transactions, enforce enrollment limits, record student information, and new this year, require a complete medical release form as part of registration

This technique relies on just four modules: Ubercart, CCK, Views, and Webform, three of which I was already using widely throughout the site. Although I was worried about the increased load of installing Ubercart on our site, I found through testing that RAM use and page load time did not differ significantly between a copy of site that included Ubercart and a copy that did not.

Summer Course is a custom Ubercart product type, which creates a new custom content type to which one may add fields. I added select lists for grade and session (week). I chose not to use taxonomy for this, because I would have more control over the display of CCK fields in the node editing form, and because these value lists only apply to this one content type.

One view presents users with the main list of summer course offerings, offering both a link directly to the detailed course description and a button to purchase immediately if you know already the courses you want to choose. Exposed filters allow one to limit the list to certain grades or weeks. I display the Ubercart-supplied shopping cart block on this page.

The cart and checkout processes are very standard. Users review their cart and then move to complete checkout. I bought a monthly subscription to PayPal Website Payments Pro, so that our website could send purchase information directly to PayPal and receive an immediately reply, without the user leaving our site. We use PayPal’s admin interface to transfer funds to the school’s bank account and issue refunds. As an added benefit, we do not store any credit card information on our servers. In order to make another feature possible (see below), I require the user to log in to access checkout.

I combined student information and medical release into one form. I could have built the form in a custom module, but I chose to use Webform in order to save time and make it easier for others to modify the form in the future. I route parents from the Ubercart screen to the webform and then route them back to checkout by setting the webform’s “thank you” page to /cart/checkout.

I wrote a custom Ubercart module to add a “student information and medical release” panel to the checkout screen. This is done by invoking hook_checkout_pane in my module. To require the completion of this form, my custom pane creates a select list showing all of the medical release webforms that the user has created on the site. Since the medical form also contains the student information, the user has to complete one for each student she wishes to register. Completing the form makes student names appear in the required select field.

The custom module saves the submitted webform id in a custom database table, linking each course registration to a specified student. A couple more custom functions hook into the checkout review and invoice panes, displaying the student’s information through the rest of the checkout and confirmation process.

A second custom module allows our staff to export orders from the system for reconciliation with any paper orders received and the billing process. I prefer not to have the website handle too many of the back-office functions of the program, since it would take so much additional effort to include accounting reconciliation and other administrative features that only a few school staff members will use. The website is primarily for the many end-users who will sign up for courses.

The Ubercart “stock” feature allows us to limit online enrollment for popular classes, so that the website does not unwittingly facilitate over-subscription.

A little CSS and theme work lines up the Grades field values in a row and arranges some webform sections side-by-side.

Ubercart offers just about everything we need out of the box, provides a framework for adding some features, and keeps this important tool within our main website.

New Drupal School Developments

Last week, I noted some interesting developments involving Drupal and secondary schools.

New Schoolyard

NewSchoolyard launched at NAIS, promising inexpensive school Drupal sites built on a template. This fills a hole in the school website market between buying an expensive product, hiring an expensive developer, and doing it completely yourself. In addition, New Schoolyard offers products and services at different price points, allowing schools to decide how much of the work they want to take on themselves or hand over to this company.

If successful, New Schoolyard may open the door even wider for more schools to adopt open-source websites and learn how to modify them. I greatly anticipate the first sites they will create and the code that they promise to contribute to the Drupal community. I have found in my own work with Drupal that it is a challenge to create a customized site that others can then truly make their own. I wonder what strategies New Schoolyard will employ to make full ownership possible for their clients.


Around for a while but flying under the radar, DrupalSchools.net is readying for a relaunch. Go check out their list of Drupal sites, tips and tricks, and thoughts on the potential role of Drupal in changing how schools work. This site promises to serve the secondary school community and put the thoughtful use of technology before techie talk. Also check out my list of school “front door” Drupal sites that I started in 2007 and have added to a bit over time.

More interest in our work

The frequency of inquiries into our work at Catlin Gabel continues to increase. Some of these schools are tinkering with demo Drupal sites, others are launching a community intranet, and others are moving toward a new, public-facing website. More schools are discovering the benefits of working with a piece of open-source software before committing to it and sharing their knowledge and perspectives gained.

Sustaining capacity during hard times

Like many schools, we  cut the school’s IT operating budget by 25% this year. To minimize adverse effects on technology use at school, we employed the following strategies.

Adopt open source

We have benefited tremendously from building expert, internal capacity for open source website development and web server software management. In past years, we launched and then grew a sophisticated intranet website at no cash cost to the school. This year, we built our new, public-facing website on Drupal, with existing personnel, for a total cash cost of $6,000.

I believe that every school should work toward mastery in one type of open source software that meets a current need. Our users and constituents demand increasingly sophisticated applications of technology, yet our budget will not keep pace with these expectations. We have taken care not to rush, building up internal capacity to master these tools over time. Were we to rely on external contractors to implement open source solutions, then it could have become at least as expensive as commercial products.

Other schools specialize in different money-saving applications of open source: desktop software, learning management systems, operating system software, office suites, and more.

Cut back on expensive, specialized solutions

Each Smart Board we purchase improves just one classroom. Each laptop computer we purchase is available to everyone. They cost about the same amount of money.

Also about the same price, an entire class may use a set of 10 Flip video cameras to collect footage for a great variety of different productive learning objectives.

Introduce some limits, while extending a helping hand

The cost of network file backup and tape storage has increased for us each year. We are now implementing 10GB primary file server quota while still storing and backing up all of the important school data we can identify. When a teacher or staff member hits the limit on the primary file server, we work with them to identify any duplicate, personal, or unnecessary files and separate changing, newer files from older, unchanging files. We move the older files to a second, archive file server that we copy to tape less frequently. In this manner, we consume far fewer backup tapes than before while still protecting the school from data loss and saving important files for the long-term.

Preserve or expand core network services

This is no time to cut back on servers, server software, and network infrastructure. We have cut end-user technologies before compromising on the core. Server and network functions affect every user every minute that they are connected to the network. Maintaining quality sustains everyone’s experience. We have kept servers on their regular replacement cycle and are just now considering virtualization for lightly used network services. Our next generation of wireless network and network access system will do more than the previous systems, with less management required, at a lower cost than before.

Strategically manage computer lifespan

This one has been tricky. We pinpointed very specific batches of computers to operate for a year longer than planned. We noticed that some users were pretty light on their machines and provided them with used computers instead of new. We stretched our lower school computer lab for an additional year, because they had had their motherboards replaced under warranty just three years ago. Otherwise, we have stuck to our normal replacement cycle, out of respect for the fragility of laptop computers in their fourth and fifth years.

Consider some new technologies

This is no time to broadly adopt new kinds of devices, but some new devices may replace the old, at a lower cost that before. We will consider wall-mounted projectors in locations where we would normally mount from the ceiling. We will pilot netbooks to replace one of our middle school mobile laptop carts, taking great care that we select a model that performs reasonably well compared to our current MacBooks. Otherwise, we find netbooks to be cramped and difficult to use, not a straight replacement for traditional laptop computers.

Break some old habits

Once-essential resources and services may have lost their value over time. We reduced the size of our upper school PC lab in half, redistributed responsibilities for our annual laptop technology fair, and removed Drupal from our intranet website. We continue to streamline purchase options for the upper school laptop program, now recommending the two laptop computer models that match the program, as opposed to offering every model available from each manufacturer.

Continue to plan well

Each year that we devote more attention to winter planning, spring and summer projects go more smoothly. This year, we started earlier than before and formalized biweekly planning meetings, and already we are purchasing and implementing network devices that will allow workstation deployment to start earlier. We have also lined up our best cadre of summer workers yet. This group of current students and recent graduates is key to our ability to touch all machines and improve our deployment strategies each summer.

Build one’s personal learning network

This year, I have formed new collaborative relationships with tech staff at other schools, without ever leaving campus. This has allowed me to gain feedback on my ideas and profit from the good work of others. As it is a slow year for conferences in Portland, I have so far avoided traveling afar for an expensive conference experience.

What, no Google Apps?

I appreciate that Google Apps has helped many schools provide the latest communication and collaboration tools at low cost. We decided to stick with Exchange Server because we had concerns about losing control of the school’s data, the inability to do anything during periods of downtime, and the hidden costs of migration, archiving mail, and supporting users.

Your turn

What are you doing to maintain quality and capacity during lean times? Please comment below.

Trying CiviCRM


Taking on treasurer duties for a small nonprofit, I needed to migrate our constituent data out of Excel and into a proper constituent management system. Taking on a mailing list of 500 active constituents and 20 years of gift history, the system needed to be inexpensive, easy to manage, handle both contacts and gift history, and offer some potential for customization. Having evaluated several CMS’s, I chose CiviCRM.

I did not necessarily require a web-based system, but the feature set and user reviews of online solutions far surpassed those of desktop-based solutions. By going online, I also gain the benefits of being able to access the data from any location (useful because I squeeze in nonprofit work whenever I can) and share it with fellow fundraisers (we are spread out between the two coasts). One day, we may use CiviCRM’s feature of online giving pages that automatically create contact and gift entries in the CMS.

Choosing CiviCRM felt more comfortable than selecting a free, proprietary solution, because I would host the data myself, could add CiviCRM to an existing website, and already understand the basic architecture it would use to integrate with Drupal. I am also comfortable with the community-based model for software development and support that they use. CiviCRM offered the option to store its data in a separate database from Drupal, which I really appreciate in case I need to separately migrate or manage them in the future — nice and clean.

For the past several years, we have run a separate broadcast email list through Yahoo! Groups. This has not been integrated with our constituent management system, leading to problems when we discuss communication vehicles for each fundraising appeal. CiviCRM should be able to integrate mailing list function into its contact database, so that the two functions are finally merged and we understand which constituents we contact through postal mail, email, or both. This could improve the reach of our fundraising appeals.

So far, the system has run really smoothly, and I think I have mastered the basics pretty quickly. I am using individual contacts for half our constituents and household contacts for the other half, as we don’t have all of the necessary information for both individuals in a household. Hopefully, we will gain this over time. It appears that CiviCRM will be able to track gift history for either contact type without a problem, which allows us to proceed for now.

I was able to add 500 contacts to the database using the import feature, but I had to split the import files into batches of 70 records at a time to overcome some import limit. It didn’t present like a timeout error but rather redirected me to a /contact page that didn’t exist in the site and only imported 70 records.

Next, I will try to organize 20 years of gift history for import, so that I may start running reports to mine our history for giving patterns that might help us better form fundraising strategy. I will need to somehow match hand-entered donor identification information with CiviCRM contact records and better structure the information in Excel before merging.

I am interested in your feedback on this approach.

Maru-a-Pula Website To Drupal

Just two months ago, I wrote how I was still using Website Baker successfully for two sites. Well, it’s down to one now! I have migrated the Maru-a-Pula website from Website Baker to Drupal. Maru-a-Pula is an amazing school in Botswana that I have worked from the U.S. to assist since teaching there from 1994-96.

Nothing went wrong with Website Baker. The school had just outgrown the basic CMS for its needs. The principal had started to write a news column, and while Website Baker does support news, the Drupal module is much easier to use. We now have several new features the school or I had wanted: RSS feeds sitewide, a blog for any author, actual calendar functionality, and all sorts of future possibilities using modules from the Drupal community.

For the sake of a smooth user transition, I built a new Drupal theme (sub-theme of Zen) to copy almost exactly the old Website Baker theme. The two sites look nearly identical. I have to re-theme the Search form. I have done enough theme work in the last year that I felt very comfortable manipulating template and CSS files to create the desired look.

The site is designed so that local tech staff in Botswana may take over as much administration as they wish. The site has no custom module code whatsoever, and all dynamic content is presented through content types, views and blocks (e.g., main home page photo and three feature columns).

New site
new site

Old site
old site

Contributed Modules
Menu breadcrumb
Site map

Lightweight electronic portfolio

Fundamentally, an electronic portfolio allows students to publish their exemplary work, reflect on their learning, and invite comment. Some schools (1, 2) roll out full-blown electronic portfolio software that can access files from their learning management system. This may be a great approach if a school has adopted electronic portfolios as a major initiative for the year.

In our school, we have not yet explored the topic of whether we should all move to electronic portfolios. We have paper, in-person based portfolio exhibitions in third through eighth grades, but the high school does not, and faculty meeting time is fully consumed with other discussions about teaching and learning. At the same time, we have groups of students and teachers who want to publish exemplary work either to the Catlin Gabel community, project mentors from outside the school, or college admission offices.

In response to this level of interest, I decided to provide a very lightweight electronic portfolio tool. I used an existing feature in our Drupal website (rather than a new tool) to allow students and teachers to publish exemplary work in multiple media forms, reflect on their learning, and invite comment. Students simply create a blog post but then mark the item for inclusion in their portfolio. They can also make the item publicly viewable if they choose. The “portfolio” home page is really just the student’s blog, filtered by one or both of these flags. The way Drupal works, if a user is not logged in, they only see the items marked public.

blog checkboxes

So far, art seminar students have created public portfolios of their work, principally for the college admission process. Here is a portion of one. In May, all seniors will blog about their individual senior projects. Some may choose to make these posts public for their on-site mentor and others to see.

<%image(20091203-portfolio example.png|450|318|portfolio example%>

Techies out there may find the following Drupal module code useful.

function cgs_blog_form_alter(&$form, $form_state, $form_id) {
  if (isset($form['#node']) && ($form['#node']->type == 'blog')) { // apply only to "create blog entry" form
    // add a submit function
    $form['#submit'][] = 'cgs_blog_form_submit';


function cgs_blog_form_submit($form, &$form_state) {
  // load content access functions
  require_once(drupal_get_path('module', 'content_access') .'/content_access.rules.inc');
  // load node object
  $node = node_load($form_state['values']['nid']);
  // set anonymous user grant array
  $settings['view'][0] = 1;
  // change node access permissions for this node
  if ($form_state['values']['field_blog_public'][0]['value'] == 'Make this post public') {
    // add view grant for anonymous users to this node
    content_access_action_grant_node_permissions($node, $settings);
  } else {
    // remove view grant for anonymous users to this node
    content_access_action_revoke_node_permissions($node, $settings);


Does anyone read our emails?

Our school switched from paper to electronic newsletters some years ago in order to reduce paper consumption. Since that time, the question has lingered. “Does anyone read the newsletters?” As teachers struggle to keep up with a rapidly growing inbox during free periods, and parents sometimes appear unaware of information distributed to them, it’s easy to reach this conclusion.

Thankfully, we have found a way to collect some data to allay this concern. We installed the Drupal module Simplenews Statistics on our site, and now our main newsletters include an invisible image that sends a request back to the website each time the email is opened. Our kindergarten email newsletter, sent to 40 families, was opened 108 times within 24 hours! Although opening an email does not guarantee that a person reads it or digests its contents, it at least it suggests that email is effective at putting the news in front of our readers.

If you store email addresses for newsletter subscriptions in your website, this module will even tell you which individuals opened the newsletter, which didn’t, and whether they clicked on embedded links. We don’t seek that level of resolution of data, since just the total is a relief to see, and we subscribe a Mailman listserv address to each newsletter instead of individual addresses.

We learned another lesson from this investigation. Data can really help soothe anxiety over changes that involve technology. Looking at our website statistics helps in a similar way. Data won’t answer all of one’s questions, but it helps challenge some deeply held assumptions about the perceived ineffectiveness of some forms of electronic communication.

Your website or listserv platform may include a tracking feature like this.