Skip to content

Commit abd0b21

Browse files
authored
Merge pull request #2955 from gocodebox/dev
Release 9.0
2 parents 513a48b + 9d7f73a commit abd0b21

File tree

86 files changed

+4444
-5872
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

86 files changed

+4444
-5872
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
* @ideadude
1+
* @brianhogg
22

33
# Full Site Editing.
44
includes/class-llms-block-templates.php @ideadude

.github/workflows/packages-test-and-lint.yml

Lines changed: 0 additions & 72 deletions
This file was deleted.

.github/workflows/test-js-unit.yml

Lines changed: 0 additions & 35 deletions
This file was deleted.

.llmsconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
"!assets/js/llms-admin-addons.js",
3939
"!assets/js/llms-admin-award-certificate.js",
4040
"!assets/js/llms-admin-certificate-editor.js",
41+
"!assets/js/llms-admin-media-protection-block-protect.js",
4142

4243
"!assets/js/**/*.min.js",
4344
"!assets/js/llms-builder*.js",

CHANGELOG.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,59 @@
11
LifterLMS Changelog
22
===================
33

4+
v9.0.0 - 2025-08-18
5+
-------------------
6+
7+
##### New Features
8+
9+
+ Adding Mailhawk back to the email provider services.
10+
+ Ability to protect media files for those enrolled in a specified Course or Membership.
11+
+ Adding banner notifications.
12+
+ Option for automatically blocking checkout spam.
13+
+ Support for Turnstile, reCAPTCHA v3 and Akismet with checkout and registration forms.
14+
+ Link to detach a Lesson from the course and section in the Lessons listing. [#2944](https://github.com/gocodebox/lifterlms/issues/2944)
15+
+ Featured video and audio options for Memberships.
16+
+ Mobile navigation for the Student Dashboard. [#2907](https://github.com/gocodebox/lifterlms/issues/2907)
17+
18+
##### Updates and Enhancements
19+
20+
+ Avoid showing hidden courses or memberships in a theme's next/previous links. [#2910](https://github.com/gocodebox/lifterlms/issues/2910)
21+
+ Additional payment gateway information notices.
22+
+ Avoid rendering LifterLMS blocks hidden in Text Editor blocks when using Elementor. [#2886](https://github.com/gocodebox/lifterlms/issues/2886)
23+
+ Filter to change the method used to fetch environment variables on certain hosting configurations. [#2383](https://github.com/gocodebox/lifterlms/issues/2383)
24+
+ Improved formatting of the individual order page.
25+
+ Moving instructors and Estimated Length from the sidebar to the main metabox options area in Courses and Memberships.
26+
+ Changes button text when updating a payment method,depending on whether it's a payment gateway with an external payment page. [#2957](https://github.com/gocodebox/lifterlms/issues/2957)
27+
+ Updating countries and states/countries/provinces. [#2151](https://github.com/gocodebox/lifterlms/issues/2151)
28+
29+
##### Bug Fixes
30+
31+
+ Can select an access plan with the Access Plan Button block when more than 10 access plans exist on the site. [#2526](https://github.com/gocodebox/lifterlms/issues/2526)
32+
+ Schedule course data recalculation throttles in the future, with new tool to clear incorrectly locked courses. [#2916](https://github.com/gocodebox/lifterlms/issues/2916)
33+
+ Now able to clear the value from date fields. [#2977](https://github.com/gocodebox/lifterlms/issues/2977)
34+
+ Avoid fatal error if a user who enrolled a student has been deleted, when viewing the course edit page. [#2979](https://github.com/gocodebox/lifterlms/issues/2979)
35+
+ Avoid breaking the layout on student dashboard pages with a form (ie. Edit Account, Redeem a Voucher). [#2946](https://github.com/gocodebox/lifterlms/issues/2946)
36+
+ Avoid console error when saving access plans when a free plan is included. [#2925](https://github.com/gocodebox/lifterlms/issues/2925)
37+
+ Avoid duplicated buttons when changing the Engagement Type when editing an engagement. [#2962](https://github.com/gocodebox/lifterlms/issues/2962)
38+
+ Fix link beside selected engagement when editing an engagement. [#2961](https://github.com/gocodebox/lifterlms/issues/2961)
39+
+ Resolves warning when first visiting the Logs tab. [#2947](https://github.com/gocodebox/lifterlms/issues/2947)
40+
+ Improved styling for course catalog and other grid layouts, including fix for course/membership featured video display.
41+
+ Allow clearing membership restrictions without switching plan availability. [#2931](https://github.com/gocodebox/lifterlms/issues/2931)
42+
43+
##### Developer Notes
44+
45+
+ Adding hookable filter for notification sending.
46+
47+
##### Updated Templates
48+
49+
+ [templates/checkout/form-switch-source.php](https://github.com/gocodebox/lifterlms/blob/9.0.0/templates/checkout/form-switch-source.php)
50+
+ [templates/loop/featured-image.php](https://github.com/gocodebox/lifterlms/blob/9.0.0/templates/loop/featured-image.php)
51+
+ [templates/membership/audio.php](https://github.com/gocodebox/lifterlms/blob/9.0.0/templates/membership/audio.php)
52+
+ [templates/membership/video.php](https://github.com/gocodebox/lifterlms/blob/9.0.0/templates/membership/video.php)
53+
+ [templates/myaccount/my-orders.php](https://github.com/gocodebox/lifterlms/blob/9.0.0/templates/myaccount/my-orders.php)
54+
+ [templates/myaccount/navigation.php](https://github.com/gocodebox/lifterlms/blob/9.0.0/templates/myaccount/navigation.php)
55+
56+
457
v8.0.7 - 2025-06-11
558
-------------------
659

assets/js/app/llms-loops.js

Lines changed: 0 additions & 48 deletions
This file was deleted.
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
( function() {
2+
if ( 'undefined' === typeof wp || 'undefined' === typeof wp.media || 'undefined' === typeof wp.media.view || 'undefined' === typeof wp.media.view.Attachment || 'undefined' === typeof wp.media.view.Attachment.Details ) {
3+
return;
4+
}
5+
6+
var originalCompat = wp.media.view.AttachmentCompat;
7+
wp.media.view.AttachmentCompat = originalCompat.extend( {
8+
initialize: function() {
9+
// Call the parent initialize.
10+
originalCompat.prototype.initialize.apply( this, arguments );
11+
12+
// Bind to the render event.
13+
this.on( 'compatRendered', this.initializeLifterlmsSelect2 );
14+
15+
// Listen for changes to the protection dropdown.
16+
this.listenTo( this.model, 'change', this.refreshAttachmentUrl );
17+
},
18+
19+
render: function() {
20+
// Call the parent render
21+
originalCompat.prototype.render.apply(this, arguments);
22+
23+
// Trigger our custom event after render.
24+
// TODO: Check if we need the defer.
25+
_.defer(() => {
26+
this.trigger( 'compatRendered' );
27+
});
28+
29+
return this;
30+
},
31+
32+
initializeLifterlmsSelect2: function() {
33+
const $select = jQuery( '.media-modal .llms-posts-select2' );
34+
if ( $select.length && ! $select.data( 'select2' )) {
35+
$select.llmsPostsSelect2();
36+
}
37+
},
38+
39+
refreshAttachmentUrl: function() {
40+
// When the protection setting changes, we need to refresh the URL
41+
if ( this.model.hasChanged( 'url' ) ) {
42+
// Update the URL in the UI.
43+
jQuery( '#attachment-details-copy-link' ).val( this.model.get( 'url' ) );
44+
}
45+
}
46+
} );
47+
} )();

assets/js/llms-admin-settings.js

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -80,21 +80,38 @@
8080

8181
$( '.llms-conditional-controller' ).each( function() {
8282

83-
var $controls = $( $( this ).attr( 'data-controls' ) ).closest( 'tr' );
84-
8583
$( this ).on( 'change', function() {
8684

87-
var val;
8885

8986
if ( 'checkbox' === $( this ).attr( 'type' ) ) {
90-
val = $( this ).is( ':checked' );
91-
}
87+
var $controls = $( $( this ).attr( 'data-controls' ) ).closest( 'tr' );
9288

93-
if ( val ) {
94-
$controls.show();
95-
} else {
96-
$controls.hide();
89+
if ( $( this ).is( ':checked' ) ) {
90+
$controls.show();
91+
} else {
92+
$controls.hide();
93+
}
94+
95+
return;
96+
}
97+
if ( 'select' !== $( this ).prop( 'tagName' ).toLowerCase() ) {
98+
return;
9799
}
100+
$( this ).find( 'option' ).each( function() {
101+
var val = $( this ).val();
102+
if ( ! val ) {
103+
return true;
104+
}
105+
106+
var $controls_for_option = $( $( this ).parent().attr( 'data-controls-' + $.escapeSelector( val ) ) ).closest( 'tr' );
107+
108+
if ( $( this ).is( ':selected' ) ) {
109+
$controls_for_option.show();
110+
} else {
111+
$controls_for_option.hide();
112+
}
113+
} );
114+
98115

99116
} ).trigger( 'change' );
100117

assets/js/llms-admin.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,35 @@
3838

3939
var llms_widgets = new window.llms.widgets();
4040

41+
var $headerEnd = $( '.wp-header-end' );
42+
if ( ! $headerEnd.length ) {
43+
$headerEnd = $( '.wrap h1, .wrap h2' ).first();
44+
}
45+
$( '#lifterlms-notifications' ).insertAfter( $headerEnd );
46+
47+
$( document ).ready(function () {
48+
$( document ).on('click', '.lifterlms-notice-button.notice-dismiss', function () {
49+
var notification_id = $( this ).val();
50+
var nonce = $( this ).data( 'nonce' );
51+
52+
var postData = {
53+
action: 'lifterlms_hide_notice',
54+
notification_id: notification_id,
55+
nonce: nonce
56+
}
57+
58+
$.ajax( {
59+
type: "POST",
60+
data: postData,
61+
url: ajaxurl,
62+
success: function (response) {
63+
$( '#' + notification_id ).hide();
64+
}
65+
} );
66+
});
67+
});
68+
69+
4170
/**
4271
* Simple jQuery plugin to transform select elements into Select2-powered elements to query for Courses/Memberships via AJAX.
4372
*

0 commit comments

Comments
 (0)