A (late) Introduction to the LifterLMS Working Group

Saurabh had an idea

He approached the team sometime in the fall. He wanted us to start a LifterLMS Working Group.

In software development working groups are common. The W3C has several dozen groups which regularly gather to discuss and work on various internet specifications. Without these groups and specifications, we would not have many of the tools and utilities we use daily to power our websites.

WordPress itself doesn’t call them working groups, but if you point your browser to make.wordpress.org you can see another dozen or so teams working on various areas of the WordPress project.

A free and open-source project with a growing community should have it’s own working group, but we don’t.

We’ve always planned features with the interest of the user in the forefront of our minds. We gather feedback and diligently record issues and feature requests. We pivot our focus and goals based on these comments and questions we hear in support conversations and social media posts.

But the issue Saurabh’s idea attempts to resolve is that we did not have an official forum or platform to facilitate the co-creation of LifterLMS. We, the core team, have always remained solely responsible for the actions taken following or as a result of these conversations.

Saurabh’s idea was to gather a new group of stakeholders and meet to organize our collective thoughts about the successes and shortcomings of the project. His idea was to create the platform the project has been lacking.

The First Meeting

In January we organized the first meeting of this working group. We hand-selected a small group of users and contributors. We decided to start with quizzes as our first discussion topic. We checked our issue and request trackers and found when organized by category, quizzes, by far, had the highest number of feature requests.

I had intentions to distill the learnings of this first working group into some ground-breaking document and publish it here on the blog.

I had intentions that something so powerful would be said that it would result somehow instantly in a reconstructed and superior quiz system.

We discussed these things, and we (the core team) recorded more notes and more feedback. A lot of what we talked about has been written down and recorded by us multiple times over. New points were brought to our attention, and some of the issues we’re aware of were given new context.

There’s more work for our team to do on quizzes, and as we approach the second meeting of the working group we have new things to consider.

Improving the Working Group

As we look forward to the next session of the group, we hope to work together to find ways to encourage greater participation from members of the group.

Talk and discussion is not unimportant, but it’s only a small part of what we’ve learned we need from this group. We not only need members with great ideas and strong opinions, we need members who are willing to do work.

The most obvious work is code, but we don’t need to write more code*, we need to draft and create documentation, architectural models, feature concepts, roadmaps, and design specifications.

In simple terms: we need to determine, concretely, the things that LifterLMS needs to do. We need to write these things down and commit to them.

After these concepts and ideas are solidified, then I will work with our core team and contributors to turn these into deployable and useable features.

If we look to the work of the working groups of the W3C, we’ll see that these groups do not write code. They write specifications. These groups may have developers in them but the primary purpose of these groups is to create and design these specifications. The browser vendors and developers working on Chromium or Blink or Mozilla will then interpret these specifications and create the browsers we use.

Moving forward, the LifterLMS Working Group will be creating these specifications, and you’re invited to participate.

* If you’re a developer, we do need to write more code, please join us, please contribute.

Session 2, March 2019: Certificates

On March, 20, 2019 at 9:00am PST we’ll gather for the second session of the LifterLMS Working Group, and we’ll be discussing certificates.

Our choice for this session comes after realizing that our first topic, quizzes, was perhaps too broad a topic. Certificates, while arguably as important as quizzes, we’re hoping will prove to be a topic that’s more digestible in a short period of time.

Bring your ideas, and be prepared to start creating LifterLMS with us.

See the events calendar for meeting details.

LifterLMS Version 3.29.4

  • Fixed an issue preventing users with email addresses containing an apostrophe from being able to login.

v3.29.3 – 2019-03-01

Bug Fixes
  • Removed attempts to validate & save access plan data when the Classic Editor “post” form is submitted.
  • Fix issue causing 1-click free-enrollment for logged in users to refresh the screen without actually performing an enrollment.
Template Updates

LifterLMS WooCommerce Version 2.0.8

  • WooCommerce Order Review (on the account page) and Thank You Page tables will now output the expiration date for a courses and memberships attached to items in the order.
  • Fixes a bug preventing access expiration settings from being applied on order completion when two access plans (on different courses or memberships) are both attached to the same WC product.

LifterLMS Version 3.29.0

Improved Access Plan Management
  • Added a set of methods for creating access plans programmatically.
  • Updated the Access Plan metabox on courses and lessons with improved data validation.
  • When using the block editor, the “Pricing Table” block will automatically update when access plan changes are saved to the database (from LifterLMS Blocks 1.3.5).
  • Access plans are now created and updated via AJAX requests, resolves a 5.0 editor issue causing duplicated access plans to be created.
Student Management Improvements
  • Added the ability for instructors and admins to mark lessons complete and incomplete for students via the student course reporting table.
Admin Panel Settings and Reporting Design Changes
  • Replaced LifterLMS logos and icons on the admin panel with our new logo LifterLMS Logo and Icons.
  • Revamped the design and layout of settings and reporting screens.
Checkout Improvements
  • Updated checkout javascript to expose an error addition functions
  • Abstracted the checkout form submission functionality into a callable function not directly tied to $_POST data
  • Removed display order field from payment gateway settings in favor of using the gateway table sortable list
Other Updates
  • Removed code related to an incompatibility between Yoast SEO Premium and LifterLMS resulting from former access plan save methods.
  • Reduced application logic in the course/complete-lesson-link.php template file by refactoring button display filters into functions.
  • Added function for checking if request is a REST request
  • Updated LifterLMS Blocks to version 1.3.7
Bug Fixes
  • Fixed an issue preventing “Pricing Table” blocks from displaying on the admin panel when the current user was enrolled in the course or no payment gateways were enabled on the site.
  • Fixed the checkout nonce to have a unique ID & name
  • Fixed an issue with deleted quizzes causing quiz notification’s to throw fatal errors.
  • Fixed an issue preventing notification timestamps from displaying on the notifications dashboard page.
  • Fix an issue causing GET requests with no query string variables from causing issues via incorrect JSON encoding via the API Handler abstract.
  • Fix an issue causing access plan sale end dates from using the default WordPress date format settings.
  • LLMS_Lesson::has_quiz() will now properly return a boolean instead of the ID of the associated quiz (or 0 when none found)
Template Updates
Templates Removed

Admin panel templates replaced with view files which cannot be overridden from a theme or custom plugin.

  • admin/post-types/product-access-plan.php
  • admin/post-types/product.php