29elode is the leading video educational platform in Italy. The courses are delivered as high quality HD videos. All presenters are real teachers and are hand picked by the 29elode editors.

AGILEDROP was approached by the client to migrate the platform from Drupal 6 to Drupal 7, to freshen up the design and to change the pricing model. Team has already had experience in delivering video content inside Drupal and was familiar with the Drupal Commerce modules stack.

Why Drupal was chosen: 

Previous site was built on top of Drupal 6 and the commerce part was done with Ubercart module and its extensions. Drupal 7 was the logical choice, not only because of the easier migration, but also because the website needed a powerful platform that would support the data structure and business logic behind the product.

Describe the project (goals, requirements and outcome): 

The plan was not only to execute the migration from Drupal 6 to Drupal 7, but also to change the business model and redesign the website to be responsive. During the development we also added multilingual support and enabled the English version of the user interface.

Data migration

From the old platform we only needed to import users and the information about their subscriptions. We built a module for the old D6 site that behaved like an API. When we went live we just changed the DNS records.

Camtasia import

The requirement was that we use the HTML generated from Camtasia as our main interface for courses. This would mean that the chapters and videos would be stored without Drupal knowledge. We developed a module that imports the files generated by Camtasia. This is how we kept the uploading simple and the data structure still inside of Drupal.

Subscriptions as relations

We store the relation between the customer and the course as an entity with the Relation module. Each successful order creates or updates the relation used to determine if the user has access to video. In comparison with Commerce licence, the Relation module enables us to do faster queries without loading the full entity.

Custom video widget

When in “full browser mode” students can access chapter menu and switch between videos. This mimics the Camtasia output that students already liked. When the video finishes playing it also flags the video as done, providing a visual reminder for students as to where they stopped watching the course.

Nginx + Xsend

The platform is hosted on Cloud.it cloud. Since all videos are stored as private files we would need to serve them with PHP, which uses a lot of resources. Our solution was to move from Apache to Nginx where we used Xsend and pseudo streaming to speed up the videos.


We were not only able to deliver the requirements set up by the client, but also to over delivered. Some of the architectural decisions are enabling us to build new features on top of the data we have. 29elode’s long term goal is to turn into an e-learning platform is now possible without having to be rebuilt.

Organizations involved: 
Key modules/theme/distribution used: 
Why these modules/theme/distribution were chosen: 

Commerce is the heart of the platform. With all its extension we were able to built the commerce functionality. We store the relation between the customer and the course as an entity with the Relation module. We manage video uploads and storage with video module. Views Aggregator Plus was a discovery on this project that we use at the backend to calculate revenue and fees.

Community contributions: 

Our system strongly relies on Entity reference module, so we ended up building the ER Selector module. The module is still in the sandbox since it still needs some work to be generally useful.

Project team: 

Three people worked on the projects. We used ticket tracking system Teamwork to handle the tasks among the developers. We were working closely with 29elode’s team, so we were able to get feedback as soon as possible.

Team members: 
Search page
Product page


sansar’s picture

print "Excellent Project!";