In August 2010 Appnovation Technologies was chosen by Rainforest Alliance to re-create their website in the Drupal platform CMS while keeping all existing content. Appnovation was chosen to develop the new site due to their successful development experience with other large NGOs like the World Wildlife Fund. The Rainforest Alliance works to conserve biodiversity and ensure sustainable livelihoods by transforming land-use practices, business practices and consumer behavior. Based in New York City, with offices throughout the United States and worldwide, the Rainforest Alliance works with people whose livelihoods depend on the land, helping them transform the way they grow food, harvest wood and host travelers. From large multinational corporations to small, community-based cooperatives, we involve businesses and consumers worldwide in our efforts to bring responsibly produced goods and services to a global marketplace where the demand for sustainability is growing steadily. Project Information Project Management and Hosting Active Collab and Google Docs were used for the project management tasks on the project. Rainforest Alliance is hosted on a dedicated IP on Rackspace. Server specifications: PHP 5.2 Apache Server MySQL database 5.1.4.1 Drupal Version 6. 19
Site Functionalities As mentioned, the new site mimics the old but with added features such as the Multimedia and Publications database extending the original functionality. Features including: - Customizable slideshows on homepage and within varies sections - Twitter feeds integration - RSS feeds integration - Multilingual support on menus and contents for French, Spanish, German, and Japanese - Dynamic placement of content widgets (Highlight Boxes) for both Single and Tabbed version - Searchable listing of all multimedia contents Interactive contents (Flash), Videos (Vimeo and Youtube), and Images slideshows - Searchable listing of all publications including newsletters and PDFs There were a total of 90 modules used for the site including 27 custom modules. Contrbuted Modules Context (6.x-3.0) - The site has been divided into sections. Each section has its own sub-navigation menu. Context was used to display menu blocks in each section. Features (6.x-1.0) - Used for exporting site roles and permission settings. It is also used to export sections created using Context. Internalization (6.x-1.7) - This package provides a tool in which nodes, menus blocks and code strings can be translated into different languages Feeds (6.x-1.0-beta 10) - Used to consume blog feeds from a Wordpress powered blog site and converts them to nodes Apache Solr Framework (6.x-1.2) & Apache Solr Search (6.x-1.2) - used to power the Publications, Multimedia and Site search pages RFA Apache Sol - extending the Apache Solr functionality and provide site search. The site search is powered by Apache Solr. An customization done, such as overriding the search results theme is done in this module. RFA Custom Blocks: provide a set of blocks tailored to the content Custom blocks that do not fall within other custom modules scope are declared here. An example of a custom block is the Forestry block on login page RFA Custom Pages: provide a set of custom pages Custom pages do not fall within other custom modules scope are declared here. An example of a custom page would be about/careers
RFA Data Migrator: used to govern the migration process and formatting of data Contents from the old site where stored in a MSSQL database. The process of retrieving the those contents and converting them into Drupal nodes is this modules main responsibility. RFA Featured Highlights: provide a Highlight Box node and block to be placed on varies pages This module is responsible for handling highlight boxes that appear on a lot of pages such as the ones that you see on the English home page. The contents of those highlight boxes can be edit without code modification since the the highlight boxes are implemented as content types. RFA Featured Slideshows: provide a Slideshow on homepage and varies section This module is responsible for displaying slideshow on the home page and other sections of the site. Modifying slideshow contents are done using Drupal UI as these slideshows are actually content type RFA Multimedia: provide the backbone and UI of the Multimedia database The multimedia search page (/multimedia) is powered by Apache Solr, Views and CCK. Any functionality that the multimedia page provides is handled in this module RFA Path Redirect: repurposed version of the Path Redirect module to handle site redirections RFA Publication: provide the backbone and UI of the Publication database The multimedia search page (/publication) is powered by Apache Solr, Views and CCK. Any functionality that the publication page provides is handled in this module. RFA Storybook: generate a storybook layout All functionality that the kids/stories page provides is managed in this module. The storybook functionality is powered by CCK and Views. The page uses Views to display each storybook node. RFA Tabbed Content: provide blocks of tabbed panels for contents to be placed varies pages This module is responsible for providing tabbed panel feature on the site. An example of this tabbed panel can be found on curriculum/second/lesson1 page. This tabbed panel is implemented as a content type. This ensures that tabs can be dynamically added and modified without code changes. RFA Users: extends the core Users module and provide functionality to SmartWood logins Provides extended user functionality. RFA Business Login Blocks Feature: generated by Features; sets block into right place This module is generated by Features. This is a settings module which displays blocks on login page. Settings in Drupal are modified using update scripts to ensure that databases among developers that worked on this site remain consistent. But instead of using a script, we decided to use Features to export block placement configurations. The Context module is used for displaying blocks on specified pages RFA Homepage Blocks ES Feature: generated by Features; sets homepage blocks position (Spanish) This module is generated by Features. This is a settings module which displays blocks on the Spanish home page. Settings in Drupal are modified using update scripts to ensure that databases among developers that worked on this site remain consistent. But instead of using a script, we decided to use Features to export block placement configurations. The Context module is used for displaying blocks on specified pages
Rainforest Case Study RFA Homepage Blocks Feature: generated by Features; sets homepage blocks position This module is generated by Features. This is a settings module which displays blocks on the English home page. Settings in Drupal are modified using update scripts to ensure that databases among developers that worked on this site remain consistent. But instead of using a script, we decided to use Features to export block placement configurations. The Context module is used for displaying blocks on specified pages. RFA Menu Context Feature: generated by Features; sets menu into correct placements This module is generated by Features. This is a settings module which displays menu blocks on pages. Settings in Drupal are modified using update scripts to ensure that databases among developers that worked on this site remain consistent. But instead of using a script, we decided to use Features to export block placement configurations. The Context module is used for displaying blocks on specified pages RFA Users Feature: generated by Features; sets user role permissions This module is generated by Features. This is a settings module which deals with user roles and permissions. Settings in Drupal are modified using update scripts to ensure that databases among developers that worked on this site remain consistent. But instead of using a script, we decided to use Features to export user roles and permissions RFA Rightside Block Feature: generated by Features; sets block into correct place This module is generated by Features. This is a settings module for displaying right side blocks. Settings in Drupal are modified using update scripts to ensure that databases among developers that worked on this site remain consistent. But instead of using a script, we decided to use Features to export user roles and permissions. The Context module is used for displaying blocks on specified pages. Custom Technologies About 60% of the site is based on specialized technologies to provide the requested functionality as well as look and feel: - Migration process was driven by a custom designed engine that governs the data transport from MSSQL to MySQL. Converts ColdFusion pages into Drupal nodes, parses content to fit the new format, and associates pages with their translation correspondence. - Slideshows are powered by third-party jquery scripts with additional customizations done during development - All pages are built using nodes even for custom pages, where it is traditionally built using callback functions, are based on node constructs callback functions are mimicked. - Apache Solr is used for all search related operations. - Contents of PDF files are made searchable as a result of PDF scan done during file upload. - UI functionality mostly given by jquery UI for Modal Popup and Tabs - ChartBeat used to monitor real-time site traffic
Goals and Chalenges The Rainforest Alliance website was running on both a ColdFusion based setup and static ColdFusion pages on two MSSQL 2005 databases. They found the backend of this system to not be as user friendly as they wanted it to be and that content management was not as efficient or simplistic as they liked. They made the decision to go with Drupal as it would unify their site management under one content management system making the site and content easier to update. The client was satisfied with the way their site functioned on the front end so the main challenge for Appnovation was to re-create the existing site in Drupal while maintaining all the same functionality and migrating over 10,000 files of existing content (see Content Migration from a Mysql Database to Drupal Using Batch Operations in the Appnovation blog for more information). The entire process was lengthy as Appnovation s developers needed to understand completely how the original site worked and find a way to translate that into the Drupal equivalent. The most complex part of the site that needed to be mimicked was the multilingual functionality. The Rainforest site features Spanish, Japanese, German and French. It uses a non-conventional setup for with variable sections ie a section menu can appear in German, but not Japanese. Appnovation needed to provide a flexible way to switch between different languages at any time on any page while providing the client with the ability to create additional translated menu items and pages at any time. To achieve this the developers used a two step process: 1) Using the translation module, Internationalization, to power all the translations for menu items and nodes, making the Language Drop-down module able to switch languages. The module, Context, then made it possible to dynamically place the correct menu onto the page with the chosen language. 2) To ensure that multilingual works properly, every page MUST be a node. This means that callback cannot be used. Instead, the developers simulated page callbacks by sitting a custom page on top of a placeholder node. The desired result was achieved through a large combination of contributed and custom modules.