LifterLMS Version 6.11.0

Updates and Enhancements
  • Since version 6.0.0, the Certificate Title Block provided the option to use four Google-hosted fonts. These fonts will now be served from the site’s server in favor of serving them from the Google Fonts CDN. For more information about this change, please refer to https://make.wordpress.org/themes/2022/06/18/complying-with-gdpr-when-using-google-fonts/. If you wish to continue loading fonts from Google’s CDN, add the following code to your functions.php file: add_filter( 'llms_use_google_webfonts', '__return_true' );. #2189
  • Upgraded included library, @woocommerce/action-scheduler, to version 3.5.2.
Bug Fixes
  • Fixed a division by zero error encountered on quiz reporting screens for quizzes with 0 total available points. #2270
Hacktoberfest 2022

Hacktoberfest 2022: 5th Annual LifterLMS Contributor Month

During the month of October, LifterLMS will be celebrating open source with our fifth annual Hacktoberfest event: LifterLMS Contributor Month.

Hacktoberfest is a month-long open source community event organized by DigitalOcean.

LifterLMS will be participating in Hacktoberfest as a project maintainer. We encourage anyone to submit pull requests to any of the LifterLMS codebases found on GitHub.

Why Contribute

Contributing to open source projects is a great way to learn, practice your skills, meet new people, have your voice heard within a community, and build a public reputation you can take with you outside the project.

Who can Contribute

Anyone with a GitHub account can submit a pull request. If you don’t have one, you can sign up for free.

You don’t have to be a developer or coder to contribute. LifterLMS will accept contributions from QA testers, user experience and interface designers, documenters, and more! If you’re interested in participating but you don’t know how, get in touch with us and we’ll be happy to get you pointed in the right direction based on your unique set of skills and talents.

How to Contribute

Whether you’re a designer, developer, want to help with documentation, or something else entirely we have a task for you!

If you’re looking to write or improve new code, tests, or documentation, head over to our the LifterLMS GitHub repo and start looking through our existing issues. We’re using the special hacktoberfest tag for issues we feel would be ideal for first-time or new contributors to tackle during this event. You can view all these issues here. You could also check out our good first time contributor issues here.

If you plan to work on an issue please comment and let us know. This will help prevent collisions or duplicate efforts with other contributors.

Please review our contributor’s guidelines and ensure you’re adhering to our coding and documentation standards before submitting a PR!

You may also want to familiarize yourself with how to write and submit pull requests, and DigitalOcean has a great guide you can review here.

Finally, make sure you sign up for the official Hacktoberfest event so your eligible to win an official event prizes!

Rewards for Contributions

In addition to the satisfaction inherent in contributing to an open source project, we’ll be awarding prizes to anyone who contributes to LifterLMS during the month of October.

Every accepted pull request will provide you with an entry into a drawing for a free LifterLMS add-on license of your choice valued up to $360.

Anyone who submits three or more accepted pull requests will receive a LifterLMS t-shirt, hat, or mug (your choice).

All pull requests will be reviewed by the LifterLMS team by October 31, 2022. Only accepted pull requests count towards your contribution count.

Resources for Contributors

During the month of October we have several events to help support anyone looking to contribute:

Office Hours

In addition to our weekly Monday Developer Office Hours held in Slack in the #general channel, we’ll also be hosting short dev chats throughout the month. If you can’t make a scheduled dev chat just pop your question and one of our team members will get back to you when we’re available.

These informal chats are a great opportunity to interact with LifterLMS core developers and other contributors.

If you have any questions about any contributions you want to make, if you’re just getting started, or if you want to just say hello and keep us company, these dev chats are for you (and you don’t have to be a developer to join).

LifterLMS Version 7.0.0-rc.1

New Features
  • Added handling for admin settings options that store their option values in a nested array.
  • Added new AJAX checkout and payment source switching endpoints for payment gateways to utilize instead of the preexisting synchronous form submission methods.
  • On purchase completed retrieve the redirection URL from the INPUTPOST ‘redirect’ variable, if no ‘redirect’ variable is passed via INPUTGET. The INPUTPOST ‘redirect’ variable comes from the new checkout form’s hidden field ‘redirect’ populated with LLMSAccessPlan::getredirection_url(). #2229
Updates and Enhancements
  • When an order post is restored from the trash its post status will now be “llms-pending” in favor of the default “draft” status.
Bug Fixes
  • Don’t attempt to lookup the default payment gateway from user meta data.
  • Fixed an issue that prevented disabling the access plan’s option, Override Membership Redirects, once enabled. #2234
  • Disabled scroll-behavior: smooth on checkout screen to address form element validity checking issues on Chromium-based browsers. #2206
Deprecations
  • Deprecated LLMS_Controller_Orders::switch_payment_source() in favor of LLMS_Controller_Checkout::switch_payment_source().
  • Deprecated the lifterlms_update_option_{$type} action in favor of the llms_update_option_{$type} filter.
  • Method LLMS_Controller_Orders::confirm_pending_order() is deprecated in favor of LLMS_Controller_Checkout::confirm_pending_order().
  • Method LLMS_Controller_Orders::create_pending_order() is deprecated in favor of LLMS_Controller_Checkout::create_pending_order().
  • Method LLMS_Controller_Orders::switch_payment_source() is deprecated in favor of LLMS_Controller_Checkout::switch_payment_source().
  • Passing jQuery selections into the window.LLMS.Spinner functions is deprecated. Use JS Elements or selection strings parseable by document.querySelector() instead.
  • Deprecated hook llms_{$method}_title in favor of llms_{$method}_refund_title.
Developer Notes
  • Added admin settings helper function, llms_get_dashicon_link(), intended to enable the addition of external resource helper links to settings field descriptions.
  • The LLMS_Student object can be instantiated as an empty object and bypass current user autoloading. In the future this may affect integrations using the lifterlms_new_pending_order action hook which will receive an “empty” student object during order setup by gateways utilizing new AJAX-powered checkout endpoints.
  • Added a filter, llms_gateway_{$this->id}_logging_enabled, which will allow force enabling/disabling of gateway logging functions.
  • Improved payment gateway secure string logging by adding a method, add_secure_string() allowing developers to add secure strings during runtime without the necessity of registering the strings using filters.
  • Introduces new function llms_is_option_secure() for determining if an “secured” option is defined in a “secure” manner.
  • Implemented new gateway feature: modify_recurring_payments. #2176
  • Added two new parameters to LLMSAccessPlan::getredirectionurl() – $encode to optionally get a raw (not encoded) URL. – $querystring_only to optionally get only the redirect URL if set via NPUT_GET variable.
  • Added new parameter $querystring_only to the filter hook llms_plan_get_checkout_redirection.
  • Admin settings fields now display after_html for additional field types which support desc.
  • The CSS for .llms-spinning and .llms-spinner elements is no longer loaded as part of the lifterlms.css and admin.css files, instead it is loaded dynamically when window.LLMS.Spinner functions are called. In some cases CSS overrides to these elements which relied on CSS rule load order may no longer successfully override the default CSS rules. These overrides may need to be updated to have more specific selectors in order to ensure the overrides are retained.
  • The Javascript object, window.LLMS.Spinner, has been converted to a module accessible from the same variable.
  • The window.LLMS.Spinner methods now accept JS Elements and selector strings parseable by document.querySelector() in addition to jQuery selections.
  • Added new filter llms_transaction_can_be_refunded enabling custom refund restrictions to be applied to a transaction.
Updated Templates

LifterLMS Twilio Version 2.0.0

Minimum Requirement Updates
  • [BREAKING} Raised the minimum required LifterLMS core version to version 4.0.
  • [BREAKING} Raised the minimum requires WordPress core version to 5.6.
New Features
  • Added a new integration setting, “SMS Opt-in Checkbox Label” which enables customization of the label displayed alongside the opt-in consent checkbox field on user information forms.
Bug Fixes
  • Fixed an issue preventing the SMS opt-in consent field from displaying.
Breaking Changes
  • Removed previously deprecated class, LLMS_TwiML.
  • Removed previously deprecated function, LLMS_Twilio().

LifterLMS Assignments Version 2.0.0

Updates and Enhancements
  • Replaced use of the deprecated FILTER_SANITIZE_STRING constant.
Bug Fixes
  • Fixed issue encountered on admin assignment submission review resulting in visual “flickering” of the Remarks textarea and / or a visual obscuring of the Grade percentage input.
  • Fixed an issue where deleting an assignment submission would not change the student’s lesson status to “incomplete”.
  • Automatically sync lesson author to child assignments when a lesson’s post_author value changes.
  • Fixed a caching issue with the Firefox browser when canceling a review.
Developer Notes
  • [BREAKING] This plugin no longer includes source map .map files for Javascript and CSS files.
  • [BREAKING] This plugin no longer includes unminified Javascript or CSS files.

LifterLMS Version 7.0.0-beta.1

New Features
  • Added handling for admin settings options that store their option values in a nested array.
  • Added new AJAX checkout and payment source switching endpoints for payment gateways to utilize instead of the preexisting synchronous form submission methods.
  • On purchase completed retrieve the redirection URL from the INPUTPOST ‘redirect’ variable, if no ‘redirect’ variable is passed via INPUTGET. The INPUTPOST ‘redirect’ variable comes from the new checkout form’s hidden field ‘redirect’ populated with LLMSAccessPlan::getredirection_url(). #2229
Updates and Enhancements
  • When an order post is restored from the trash its post status will now be “llms-pending” in favor of the default “draft” status.
Bug Fixes
  • Don’t attempt to lookup the default payment gateway from user meta data.
  • Fixed an issue that prevented disabling the access plan’s option, Override Membership Redirects, once enabled. #2234
  • Disabled scroll-behavior: smooth on checkout screen to address form element validity checking issues on Chromium-based browsers. #2206
Deprecations
  • Deprecated LLMS_Controller_Orders::switch_payment_source() in favor of LLMS_Controller_Checkout::switch_payment_source().
  • Deprecated the lifterlms_update_option_{$type} action in favor of the llms_update_option_{$type} filter.
  • Method LLMS_Controller_Orders::confirm_pending_order() is deprecated in favor of LLMS_Controller_Checkout::confirm_pending_order().
  • Method LLMS_Controller_Orders::create_pending_order() is deprecated in favor of LLMS_Controller_Checkout::create_pending_order().
  • Method LLMS_Controller_Orders::switch_payment_source() is deprecated in favor of LLMS_Controller_Checkout::switch_payment_source().
  • Passing jQuery selections into the window.LLMS.Spinner functions is deprecated. Use JS Elements or selection strings parseable by document.querySelector() instead.
  • Deprecated hook llms_{$method}_title in favor of llms_{$method}_refund_title.
Developer Notes
  • Added admin settings helper function, llms_get_dashicon_link(), intended to enable the addition of external resource helper links to settings field descriptions.
  • The LLMS_Student object can be instantiated as an empty object and bypass current user autoloading. In the future this may affect integrations using the lifterlms_new_pending_order action hook which will receive an “empty” student object during order setup by gateways utilizing new AJAX-powered checkout endpoints.
  • Added a filter, llms_gateway_{$this->id}_logging_enabled, which will allow force enabling/disabling of gateway logging functions.
  • Improved payment gateway secure string logging by adding a method, add_secure_string() allowing developers to add secure strings during runtime without the necessity of registering the strings using filters.
  • Introduces new function llms_is_option_secure() for determining if an “secured” option is defined in a “secure” manner.
  • Implemented new gateway feature: modify_recurring_payments. #2176
  • Added two new parameters to LLMSAccessPlan::getredirectionurl() – $encode to optionally get a raw (not encoded) URL. – $querystring_only to optionally get only the redirect URL if set via NPUT_GET variable.
  • Added new parameter $querystring_only to the filter hook llms_plan_get_checkout_redirection.
  • Admin settings fields now display after_html for additional field types which support desc.
  • The CSS for .llms-spinning and .llms-spinner elements is no longer loaded as part of the lifterlms.css and admin.css files, instead it is loaded dynamically when window.LLMS.Spinner functions are called. In some cases CSS overrides to these elements which relied on CSS rule load order may no longer successfully override the default CSS rules. These overrides may need to be updated to have more specific selectors in order to ensure the overrides are retained.
  • The Javascript object, window.LLMS.Spinner, has been converted to a module accessible from the same variable.
  • The window.LLMS.Spinner methods now accept JS Elements and selector strings parseable by document.querySelector() in addition to jQuery selections.
  • Added new filter llms_transaction_can_be_refunded enabling custom refund restrictions to be applied to a transaction.
Updated Templates

LifterLMS Version 6.10.0

Updates and Enhancements
  • Updtaed woocommerce/action-scheduler to version 3.5.0.
  • Upgrades the bundled quill-wordcount module to version 2.0, addressing an issue encountered when counting words with non-Latin character languages.
Bug Fixes
  • Make <pre> elements in quiz attempt results scrollable.
  • Make sure the current user can edit the lesson, when changing its completion status from the admin reporting.
  • Added missing textodmain for the string ‘Move {post_title} to the Trash’. #2224
  • Fixed PHP fatal error when quick editing an award. #2231
  • Updated Spain’s provinces list. #2243
Deprecations
  • The files assets/vendor/quill/quill.module.wordcount.js and assets/vendor/quill/quill.module.wordcount.min.js are to be removed in the next major release. Instead of loading these files directly, use wp_enqueue_script( 'llms-quill-wordcount' ).

LifterLMS Advanced Quizzes Version 3.0.0

Updates and Enhancements
  • [BREAKING] Raised the minimum supported PHP version to 7.4.
  • [BREAKING] Raised the minimum supported WordPress core version to 5.6.
Bug Fixes
  • Fixed PHP 8.1 deprecation warning resulting from usage of FILTER_SANITIZE_STRING.
  • Fixed an issue with the code question type answer rendering.
Developer Notes
  • Fix issue encountered when passing an extension string with a leading dot to the llms_aq_mime_ensure_dot().
Security Fixes
  • Fixed issue allowing upload question types to associate an upload answer with an invalid or non-existent quiz attempt.