When I started my tenure as marketing lead for the Haiku project in 2006, my highest priority was to renovate the project's Web site. Haiku had been using a custom-coded site which was showing its shortcomings as the project and the community grew in size. The admins wanted a new site that was easy to add content to and maintain, preferably based on an open source content management system (CMS) with a proven track record. The Web team chose Drupal 4.7 for the task. After working with the web team and a few other contributors for a few months, I built Haiku a new Web site that included not only more content, but most importantly more participation from the community. A few months months ago, when I helped start a Haiku user group in the San Francisco Bay Area started, I set up the NORCAL-HUG Web site using Drupal 5.0. In both cases, I learned how to use Drupal as a tool to empower communities, so that they become more participative and engaged in your project.
Everything that you publish with Drupal is a node. Each node belongs to a content type, and each content type has associated with it a set of fields (e.g., title, body, author, etc.), settings (e.g., menu, path, comments on/off, etc.), and workflow (published, promoted to front page, etc.). The default content types are blog entry, page (for static pages), and story (for articles). You can enable more content types via modules that are installed by default, such as the Forum module for forum topics, or by installing and enabling additional modules (such as the Event module). You can also create your own content types, with custom fields, default settings, and workflow. For instance, you could create a FAQ content type with a Question, Answer field and Category fields to provide a Frequently Asked Questions page in your Web site (there is actually a FAQ module that facilitates this).
Drupal is a powerful system with strong core features, but what makes it a particularly attractive choice for community-driven Web sites is the availability of many modules that extend its functionality and its flexibility; according to a recent Drupal Tech Talk at Google (watch video), there are more than 1,200 contributed modules.
Facilitating contributed content
For a community-oriented site, Drupal can provide documented means for community members to contribute content, and allowing the site to securely expand its pool of content gatekeepers by means of custom user profiles.
Besides forum posts and comments, registered users can also contribute news posts, documents for developers, documents for users, and RFCs. Each of these represents a custom content type, with its own categories (used to tag the content), help text, and workflow. To submit, say, a news post, a registered user simply fills in a form with the title, tags, and body text. You can allow basic formating in HTML, as well as uploading and inserting graphics into the text, compliments of the Image Assist module.
Contributed content submitted by a registered user is not published right away, though. Drupal offers great user access control, allowing you to manage who can do what based on user roles that the site administrator defines. A registered user may be able to submit a news post, and even edit his own content, but not publish it. The submitted news post can go into a moderation queue, where trusted users with the role of editor can review the content and make changes before publishing it. Web site administrators to focus on maintaining the system (as opposed to the content).
The default roles are Anonymous and Authenticated user, but you can create custom roles for just any combination of functionality that has access control in the core or the modules, so the possibilities are endless. In our case, in addition to the default roles, we have: SuperAdmin (full rights), Admin (same as SuperAdmin, minus certain system notifications), Dev (full rights to create/edit all content types), Editor (full rights to create and edit document content types), and Blogger.
You can employ user access control in other ways too. For example, the Haiku Web site has a Blog-O-Sphere where Haiku developers and some trusted community members blog about Haiku. Whether a user can post to the Blog-O-Sphere is controlled by user roles: the dev role gives full access to the blog by default, and there is an additional blogger role for non-devs who have gained the trust of the project leadership. Originally intended only for the core Haiku developers, the Blog-O-Sphere has grown to include other active community members, including the Google Summer of Code students that worked for Haiku last summer.
The Access control screen in the Administer area of Drupal gives you control over what every role can and cannot do, including right to access and administer content types and modules. You could achieve even finer-grained access control through the use of modules such as the Content Access module (custom view, edit, and delete permissions for each content type by role and author), the Forum Access module (creates private forums), and the Image Gallery Access module (creates private galleries).
From a passive audience to an active community
Nowadays Web site users can play an active role in spreading information over Web-based services targeted at online communities. The Haiku Web site, for example, uses the Service links module to add links to a number of social bookmarking, blog search, and news sites, including but not limited to Slashdot.org, del.icio.us, Digg, and Technorati; I also hacked the module so that we could submit news to OSNews.com, a news site of particular interest to our project. The Haiku Web site also uses the Forward module to allow users to spread information by emailing Web site posts to their friends. It also has a notification system based on the Subscription module, so that users can follow any new posts or comments made to their areas of interest.
For the most part, online communities flourish regardless of the physical locations of their members. However, there are situations where knowing where members are located can be desirable. Take an open source software community, for example: making it easy to see where members are located can lead to local initiatives such as national or regional user groups.
The GMap module for Drupal allows you to assign a geographic location -- either visually or by entering an address or coordinates -- to both users and content nodes. Once you've enabled it, users can enter their locations in their personal profiles, and each location is reflected as in a User's Map like this one. The GMap module can also be enabled on a content type basis; so you could, for instance, allow event nodes to have a location field, so that your members could see at a glance where events take place. A good example of this application would be the Conference Map in the Haiku Web site. This map is actually created using the GMap module in combination with Drupal Views, a module that allows you to create highly customizable views of your content using a query-like method.
This article barely scratches the surface of what you can do with Drupal, both in general and to facilitate community interaction. If you want to start a new online community or energize an existing one, using Drupal can have very positive results.