Developing an events calendar

This started as an outline for a quick presentation at the local Drupal users’ group. Turns out I had more to say.

The Current Situation

Our current campus events calendar is a set of half a dozen Google Calendars. Each calendar has a manager; some of the calendars are “open”, which means that people can submit information using a web-based form and then the manager either adds the item to the Google Calendar or asks one of our students to. Sometimes events are duplicated with conflicting information.

Featured events on our home page are managed entirely separately from the rest of the calendars. Sometimes the events have been in the campus calendar. Sometimes they haven’t!

The Academic Calendar at a glance is managed separately from both of those. This information is core to student life, but isn’t handled in a consistent way across all of the calendaring systems.

Campus holidays are listed not just in those three locations, all managed separately, but also as a separate list on the Human Resources site.

What we built was a single Drupal-based calendar to integrate all of these systems.

The Content Type

The fields are organized into tabs with Field Group.

The description has a very lightweight WYSIWYG with CKEditor: just bold, italic, lists, and links. We’re using Media to manage the image and flier fields; at the outset I’m being very simple with those, since it’s a new feature for the campus calendar. All of the images will be displayed using a single simple image style.

The Date field includes a repeat option, which can be tricky to use in Views but works pretty well most of the time. I ended up adding an “Academic Quarter” field for some specific events; it’s a kludge, in my opinion, but academic calendars really don’t match anything else out there.


This isn’t really a Drupal thing so much as it is a user research thing. I discovered pretty quickly that the Google Calendars weren’t going to work as categories. In particular, I wanted to generate the Academic Calendar at a glance automatically, but the Academic Google Calendar had too many superfluous events. In fact, we discovered that there were literally two different definitions of “Academic Calendar”!

After looking at all of the calendars and their descriptions, we decided instead to run a card sort. We printed out cards with about 75 randomly selected events and had groups of students organize them into sets. After looking at the results and trying a few things, I ended up creating a two-dimensional Taxonomy system: categories and formats.

The Academic Calendar at a glance is then a View built on an intersection of those: “Deadlines” that are either Holidays or Academic events. We’ve also given users filtering tools so they can drill down to find what interests them.

To make sure we’re using consistent descriptions, the page describing the categories and formats is actually built with Views and Insert View, displaying the taxonomy term descriptions. For my own ease of use, I added edit links, too.

Importing Events

The Date iCal module in combination with Feeds made it really easy to import all of our Google Calendars, which was great for testing out ideas. I also built a sort of rough bulk editing view for adding information to the imported items, which was mostly used by me and by our student workers.

I also create a CSV import format specifically for bringing in a bunch of dates related to academic quarters, so that we can import them all at once instead of creating them one at a time. On this one I used Feeds Tamper to set the category and published state.

Roles & Rules

By using the CAS module with the Workbench Moderation module, anyone on campus can now submit an event directly, but calendar managers will approve them before they go live.

So we have three roles: authenticated, which is anyone who can log in through CAS, calendar approval, which more or less matches the old set of calendar managers, and administrator, which is a few people in our office.

We’re using Rules to handle notifications for the calendar managers. Any time someone who isn’t a calendar manager or admin submits an event, an email will go out to all of the calendar managers.

That same Rule also shows a message when an event is submitted, explaining the moderation process.

The Calendar Module & Styling Dates

We’re using the Calendar module to handle the daily and monthly pages. I like how it builds a calendar, but I have some frustrations: I have not yet figured out whether it’s possible to make the days clickable on the monthly calendars, which made the mini-calendar pretty much useless. Also, styling the calendars can be pretty tough: there’s a lot of awkward specificity to overrule if you want it to look different from the defaults.

Similarly, the built-in markup in Date fields is odd at best and we’ve had to work around it quite a bit. I’m hoping to look at overriding the markup with template functions, but I’m not super-happy about that.

Views, Views, and More Views

As I mentioned, the daily and monthly pages are Calendar views. The holidays are a pretty simple table view, restricted by category and grouped by year.

If you haven’t done much work with dates in Views, this is a place where creating date formats comes in really handy. The date is added twice: one time to display it in the format we want, in the other formatted as just a year for grouping.

The academic calendar at a glance does something similar, but with a more complicated category selection criteria and no grouping. But I created a contextual filter so that there’s pages for each quarter. A weird thing about academic quarters is that they sort of overlap: people start registering for the next quarter while the current one is still happening. So sometimes you want to see the flow of dates, and sometimes you want to see just a single quarter’s information. This hits both options.

The events by category page is a simple listing grouped by month with an exposed filter. I’m using Better Exposed Filters to get checkboxes. There’s a bug in the most recent versions of Views for Drupal 7, by the way, that exposes some Views editing text to visitors. The way around it for now is a template function.

We also have a pretty simple View for highlighted events. On the calendar site, it’s a list, but we also have an XML feed using Views data export that will be used in our current CMS to display those events on the home page and on the current students page. The highlighted events are those marked “Promoted to front page”, since that’s pretty easy and built in.

There isn’t a good way to separate out the ability to moderate from the ability to promote without adding another module, so for now we’re going to manage socially. There’s only a few calendar managers: we can tell them not to touch the button, and we can check on it pretty easily.

Features, Git, and Continuous Integration

This is our first project working with our colleagues in Application Support on having a development to production workflow. We’ve got a Feature built for the calendar’s structure, including all the things you can set with Strongarm.

In the test site, I’m making changes and trying new ideas, then recreating the feature with a new version number.

Then I commit it and push to our internal Gitlab site – which is also where we have all of the theme changes, both the CSS that the designer has been working on, and the template changes I’ve been working on. All of the commits happen on the dev branch.

Dave set up a deploy script to make all of those changes live on the test server, so once the commit is pushed, it fires off the script.

Then I go to Gitlab and make a merge request when I’m ready for all those changes to go into the production site. I approve my request J and then it’s in production. It’s been pretty smooth so far and I’m pleased with the process.

Next Steps

Next week we’ll be doing training with the calendar managers and a separate training and meeting related to the Academic Calendar(s). We’ve actually decided not to do a final iCal import for the last couple of weeks of entries specifically so that the calendar managers can get some practice and familiarity.

I’m working on a short write-up for calendar visitors to help them understand the changes. I’m also prepping some redirects and changes to our existing CMS to go live on the day of the switchover.

The week after next, we should be able to go live. After that we’ll be keeping an eye on things and listening for both problems and ideas. I imagine we’ll have a few weeks of tweaking and updating; there’s always things you don’t find until something is in front of people!

Modules Mentioned

  • Better Exposed Filters
  • Calendar
  • CAS
  • CKEditor
  • Date
  • Date iCal
  • Features
  • Feeds
  • Feeds Tamper
  • Field Group
  • Insert View
  • Media
  • Rules
  • Strongarm
  • Taxonomy
  • Views
  • Views data export
  • Workbench Moderation

strategy for smart content decisions

(watch it online. I may have to do that myself, because reasons.)

these notes may be extra-terrible, because I’m still coming down from my talk.

we (still) need a core content strategy statement. the Origin meals example is really handy.

OMG We could use the audience and goals worksheet to establish a core strategy statement for their site.

Oh hey it’s content strategy bear. “Don’t be this guy.”

“start asking smart questions”

(just start doing the thing seems to be a core theme of ConfabEDU)

talk to the people you don’t want to talk to. if you don’t bring them along for the ride, they might derail you later.

some tools that she’ll try to link to later

the content strategy madlib.

content work sessions

MY PRESENTATION, Y’ALL. (slides on slideshare)

Didn’t faint. [check]

Mic on correctly. [check]

Drank water. [check]

Didn’t lose my place in presentation. [check]

Stayed enthusiastic. [check]

Stayed in time, but not too short [check]


Notes [added later]

Something I forgot to talk about that I only remembered later, spurred by Amanda Costello’s “silo” keynote: often we’ve found as we work through the topics that we need to bring in people from other areas. Sometimes sessions have to be devoted to who “owns” which pieces, who’s willing to keep them up-to-date, etc. It’s even happened a few times that people working on overlapping subjects have MET each other at our work sessions.

CRUX of the matter

“content repository user experience”

their team is in IT

@esses moved from architecture to web

“we’re all drowning in content”

“improving communication in the middle layers”

building something that will be remodel-able

designed for sharing

phased approach to a shared content repository

they’re on Drupal

during the migration, they worked with editors to at least break existing content into chunks with subheaders and lists. getting the mindset of chunking into people’s heads. (I wonder if that’s an option for the “speed-dating” version)

overlap! allowing people to curate content from a “single source of truth”

started with event calendar & faculty directory (YO THIS IS US)

didn’t need every possible functionality up front, better to go with “minimal viable”

“aiming for gymnist (vs contortionist)” in using Drupal’s flexibility

web averse vs web comfy vs web savvy

I like this slide describing someone who is “web comfy”

before, their training focused on technical

teaches users how to do their

“writing & editing for the web” is part of their training curriculum for editors

now must complete 2-part training: part 1 is writing, editing, taxonomy, editorial strategy, content types; part 2 is technical training.

(totes wanna steal their curriculum)

interesting idea: training on Portfolio?

octopus vs candalabra: I think we’re going to have to split the difference, because of how the information is actually managed. (but I need to figure out WTAF is going on with entry in the staff directory)

need to talk to JM, also, about some of the in-theme author experience issues (tabs, draft pages)

be realistic about bumps in the road

options for personalizing links on audience landing pages, options for submitting events & announcements. as an early phase towards crowdsourcing content.

can filter in events on your page that belong to other groups. (how intriguing)

most of the “sites” that they’re talking about are academic department sites, which is mostly not relevant for us. (and for which I’m often grateful)

“things that are maybe less than optimal”

playing well with others

most of our team agreements are implicit, rare to make it explicit

(I think is something we’ve been working towards in our work sessions)

happy teams: communicate well, share a common vision

unhappy teams have broken contracts (probably implicit)

“what’s their expectation of what I’m bringing to the meeting?”

“curating” the skills of a team — tell people at the outset what you expect

“what if…we put everyone in the room at the beginning!” poor communication, treating people differently, realize who is actually ON the team.

“one of the more insidious problems is failing pretty” – we let it go on too long. people don’t go to the meetings or respond to emails, but somehow there’s no consequences?! but if you’re not talking about what’s going wrong and why, it’s still failing

a really great team where they invented a person to blame everything for. “Tony forgot the coffee. Tony broke the printer. Tony put that bug in the code.”

getting teams to flow: if you’re building a team (hi Susan!) you have a lot of flexibility.

how do we build a team that communicates well?

slide will have book (etc) recommendations

“the invisible, non-work-oriented work of being on a team” – the social part of that, knowing each other as people.

“the fluffy things aren’t fluffy”

(so some of this is actually connecting with things that I’ve been talking about with my therapist, altho in re: social anxiety. weird.)

happy teams are balancing their workloads.


make your contracts explicit

write down the things that you’re going to do as a team.

what is the goal of our team? might have to a meeting, may discover that not all agree.

the question of tools. “I don’t know anyone who’s email isn’t the bane of their existence”

the process work of putting things together (categorizing, etc) seems like a lot of time, but is really, really, really important. it has to be intentional.

“most people were perfectly happy bitching about their email”

giving people a REASON to use the tool(s)

having a cadance (a pattern of working, agile, weekly meetings, whatever) is important, something the whole team buys into.

conversation with Jared Spool about skills vs roles — what happens when you have more than one person with the same skillset? And in our area, our intentions of what to do may overlap! (UX, Content strategy, etc, etc) you can cross-train with your skills, but who will make the decisions?

not team leader, but process leader; the person who builds a framework to help uphold the contract. to help you answer “are you getting what you need to reach the goal?” and say YES. in Agile the person who “removes the blockers” — neutral faciliation role

what if you’re not the person building or running the team?

sometimes it’s enough to just ask for those things; go in assuming the best until otherwise.

otherwise: be subversive. not talking behind people’s backs, but creating the environment in which you want to work. (which is pretty much what I used to do with Dale)

just start communicating well. be in charge of getting the team to know each other. start asking what the goals are. going out for coffee. being the bridge (my words, not hers).

an introvert who has practiced the craft of networking. her story is sort of the opposite of mine, only in so much as what I’m learning about meeting people I’m learning from someone who is AMAZING vs the cautionary example.

LOL. (I’m starting to think that there’s a lot of introverts who are really into making connections between people who “ought to” know each other.)

[minor personal revelation about previous job and small talk. talk to Oakwright.]

“reset” is probably the best idea for teams that have been working poorly for a while. can you bend the team leader’s ear? “Can we have a check-in on how the *team* is doing?” Every team has something working well, start with that!

forcing ourselves to be intentional (I think that’s one of the overall lessons of this) — “what’s important for us to agree to?” (I wonder if the Social Contract is a good model for this?) you don’t call people out for failing it, but build a culture where that’s just how it is.

Berkun keynote

we should all be poked at when we get into specialized language

“whoever uses the most jargon (probably) has the least confidence in their ideas”

precise language has value, but use the simplest language you can

“innovative” – used sloppily.

“narrative bias” – instinctively prefer simple satisfying stories even if they’re false

what happened before and after the “flash of insight”?

(this slide reminds me of the underpants gnomes)

where do good ideas die on your team?

talking about Star Trek — and I’m reminded that it was really based on Westerns (and that’s based on a myth of the Old West), so.

“we like to believe the best ideas win” (why I dislike when C sez “good design sells itself”)

“who’s a good scout on your team? are they doing scouting tasks?” (which we are here)

good stuff all around.

lightning talks

  1. M & Sh & student should watch the 1st one.
  2. oh interesting, theological school for UU. (2nd one) identify your MacGyver tools.
  3. “an email newsletter for students that they actually read” (cute logo) and it’s really nice looking (simple) short, funny blurbs. listicles! RESPONSIVE. (M should definitely check this out) doubled the click-through rate, didn’t see the usual drop off over the quarter.
  4. this bit on NYU Stern’s “street team” might be of interest to the admissions folks; they’re integrated with social media & other marketing, it looks like.
  5. this is about saying no, but what I’m finding interesting — and side-chatting about on twitter about — is the role of student workers in our work.
  6. card sorting: still the bomb.

(watch ’em online.)


user-centered content strategy

“we were basically emailing them direct links to pages on our website”

card sorts!

students’: mental model, priorities, language

(wow, I think we’re actually doing really well with this!)

4 steps to make the shift

  1. get management support & sponsorship

overcoming challenges — “show, don’t tell”: she mentions running a usability test

producing tangible results, involving stakeholders throughout.

card sorts!

need to read The Content Strategy Toolkit, which we already have at work.

2. building the right team

she’s really into student workers as part of the team.

“our users are all around us”

key skills: visual design, ux, content, analyst

foster their skills

she takes them to local conferences, have them present with her at events. (oh, maybe at the user group meeting, or even have them lead speed-dating content workshops)

3. involve users early in the design process

[what about getting the students involved in user research?]

“simplify people’s lives” (as our ultimate goal)

check rough prototypes early, so you can have your failures early.

nice clip of usability testing

use social media & email to create pool of participants (I wonder if that would work for prospective students) — for us, with students, the internal web message board works strikingly well.

“aim to make things better, not perfect”


4. measure & communicate results

nice report that they created to share improvement. (or is that a thing on tumblr? yeah, it’s a site that they update periodically: maybe once a month?)

“when fixing problems, try to do the least you can do” – Steve Krug

TBH, the MOST interesting thing about this session is how she uses and trains student works.

Q&A with Halvorson

(this was supposed to be something else, but that presenter had a family emergency)

some really nuanced thoughts on PDFs and context.

dealing with distributed authorship – if it’s a box that they check off instead of something that they really care about. these are still professionals! have to have compassion, relationship-building, trust. “my job is to make you look good” then identifying the areas that CAN’T suck and paying extra attention. if you can, work with HR & admin to get it [web authoring etc] into their job descriptions.

#1 way to build trust is page load time.

“they’re really not there for the slideshow”slack channels by project.

Cleaning up after a messy migration

“there’s too much to do it efficiently”

useful to see how the mess got that way, not to repeat past mistakes, but to remember that (most) people are trying to do their best with what they have.

migrate it all or nuke it & start over? (FWIW, usability testing is what gave us the whatever that the housing folks — our first really in-depth content session people — told US to “burn it all down and start over”)

[oh! talk to Susan about adding CMS access as part of employee leaving check-off]

“we had dead people in our CMS. who still owned content.”

policy for regular purging after a year. (oh, is that a thing I can do with Rules? removing Site Editor roles.)

[idea from talking about duplicate content — can I use that module that’s in the LC directory to alert to duplicate titles?]

I really need to do a test rollout as soon as I can get in an initial Migration.

good reminder to make sure it’s clear if something isn’t published (they’re coming from a similar setup where the CMS is very separate from the website, and people tried to email draft pages after the migration to Drupal.)

I feel like there’s maybe too much of the presentation about the terrible things they were going from, vs what I was hoping to learn about the post-migration cleanup. yes, yes, the old CMS was pretty awful.

“people’s behavior is shaped by their tools”

starting to wonder if there’s a way to do a speed-dating version of content worksessions. maybe a weekly open hours time at least for the next few months? what’s a good time for that sort of thing?

are there things that don’t actually belong on the website at all?

when they migrated, everything got moved over in a draft state. then after a year, if it hadn’t been touched, it was deleted: about 70% of all the pages!

communicating what the web IS for.

they wrote a manifesto. what would OUR manifesto be, based on our core values?

you don’t “win” by having the most pages 🙂

[thinking about having a section of things I would like to in the future with our content work sessions: the speed-dating version, the regular review]

minimum viable content – a lot like our “is it better than what we have now?” thing.

[got derailed for a bit looking at something about the committees site]

chart of mini-projects: looking for “click here”, regularizing pronouns, reviewing duplicate page titles (great for students!)

huh, they went directly to Drupal 8?

need to schedule another user group meeting!