Code

DrupalTutor Live

DrupalTutor Live is a weekly live stream where you can watch Wayne Eaker make a new version of DrupalTutor.com live with Drupal 9. (eventually upgrading to Drupal 10)

The entire website build will be done in public, on the live stream. So, if you follow along, you'll learn everything necessary to build a complex site like DrupalTutor, from content types to custom code, and you'll have a backstage pass to the ups and downs of Drupal development.

We stream every Wednesday at 3:00 PM EST and go for about 90 minutes. Sign up for below to get an email each week telling you what we'll be working on.

Previous Episodes

Episode 1: Setting Up The Project

In this episode we set up the new project with Composer, install some common development modules, and start building some content types.

Episode 2: Creating the Content, Media, and Taxonomy Types

In this episode, we create the content types, media types, and taxonomy vocabularies we will used on this project.

Episode 3: Creating Migrations for Content From the Old Site and Default Content

In this episode, we set up migrations for content from the existing site to the new site and some default content from CSV files, using the Drupal core migration system.

Episode 4: Continuing Migrations and Creating Custom Migration Plugins

In this episode, we continued setting up migrations for content from the existing site to the new site, and I introduced a process plugin I wrote for easily migrating paragraphs.

Episode 5: Importing Metadata from the Vimeo API for Media Entities

In this episode, I wrote custom code to import the video metadata for remote video media entities from Vimeo, including downloading high-quality thumbnails, closed caption VTT files, and video duration.

Episode 6: Creating the Webinar Content Type and Integrating with Zoom Meetings

In this episode, I started the webinar migration and wrote custom code to create and synchronize Zoom meetings when webinar nodes are updated.

Episode 7: Finishing the Webinar Content Type and Creating a Custom Administration Area

In this week's episode, we’re going to finish up the webinar content type. Then, we'll create a custom form that will allow me to create multiple webinar nodes at once, and we’ll make a new admin area on the toolbar for all the LMS-related tools like this. Finally, if there’s time, we’ll start on migrating the lesson content to the new site

Episode 8: Creating Custom Entity Types

In this week's episode, we're going to create custom entity types for storing information about the courses, sessions, and registrations on the site.

Episode 9: Finishing the Course, Subscription, and Registration Entity Types

In this week's episode, we're going to finish creating the custom entity types for courses, subscriptions, and registrations.

Episode 10: Creating a Drip Email System

In this week's episode, I will be building a custom module for Drupal that will dynamically trigger events for course registrations, based on the provided start date of the registration. This will be used for sending drip emails at specified intervals to students taking each class.

Episode 11: Continuing the Drip Email System

In this week's episode, I will continue building the drip email system for the website by creating a plugin-based system for determining the time to trigger emails based on a relative date from the start of a student's registration.

Episode 12: Continuing the Drip Email System

In this week's episode, I will continue building the drip email system for the website by finishing up the relative date calculation to determine when to trigger emails based on a student's registration.

Episode 13: Making the Drip Email System Easier to Use

In this week's episode, I will make the drip email system easier to use, by embedding the configuration for drip emails in the session and class edit forms. This will allow them to be edited along with the session information in one place.

Episode 14: Making the Drip Email System Work at the Course Level

In this week's episode, I will extend the drip/scheduled email system to work for all sessions of a course, without having to re-create the rules and templates for each session.