forked from gocodebox/lifterlms
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreadme.txt
1837 lines (1347 loc) · 109 KB
/
readme.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
=== LifterLMS ===
Contributors: thomasplevy, chrisbadgett, tpkemme, kathy11, lifterlms, codeboxllc
Donate link: https://lifterlms.com
Tags: learning management system, LMS, membership, elearning, online courses, quizzes, sell courses, badges, gamification, learning, Lifter, LifterLMS
Requires at least: 4.0
Tested up to: 4.7.1
Stable tag: 3.3.0
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
LifterLMS, the #1 WordPress LMS solution, makes it easy to create, sell, and protect engaging online courses.
== Description ==
LifterLMS is a powerful WordPress LMS plugin that makes it easy to create, sell, and protect engaging online courses. The mission of LifterLMS is to democratize education in the digital classroom.
>**Universe Bundle, LifterLMS Pro, LaunchPad theme, Boost and More**
>
>Users looking for more timely/in-depth support are encouraged to check out LifterLMS Pro. One-on-one LifterLMS Pro support is responded to within 12 business hours.
>
>6 achievement badge packs and 6 premium certificate backgrounds graphic assets also come with [LifterLMS Pro](https://lifterlms.com/product/lifterlms-pro/).
>
>If you are looking for the best WordPress theme to pair with LifterLMS, check out the [LifterLMS LaunchPad Theme](https://lifterlms.com/product/launchpad/).
>
>You should also check out the [LifterLMS Stripe](https://lifterlms.com/product/stripe-extension/), [LifterLMS PayPal](https://lifterlms.com/product/paypal-extension/), [LifterLMS WooCommerce](https://lifterlms.com/product/woocommerce-extension/), [LifterLMS ConvertKit](https://lifterlms.com/product/lifterlms-convertkit/), and [LifterLMS MailChimp](https://lifterlms.com/product/mailchimp-extension/) extensions to LifterLMS.
>
>You can save big and get all the products made by LifterLMS with the [Universe Bundle](https://lifterlms.com/product/universe-bundle/)
>
>If you'd like to be up and running with a beautiful and professional WordPress LMS website in just 5 days, you can also explore our signature "done for you" white glove service called [Boost](https://lifterlms.com/boost/).
Take a look at the explanation videos of LifterLMS. These 17 tutorial videos are included in the [free LifterLMS demo course](http://demo.lifterlms.com).
https://www.youtube.com/watch?v=CY1u-elqudg
More information at [LifterLMS.com](https://lifterlms.com).
#### Features
Whether you're an entrepreneur delivering your own courses, a school with lots of users, a player in the business-to-business corporate training space, or using online courses for marketing purposes, LifterLMS has your back.
LifterLMS works great for health and fitness courses, music courses, real estate courses, language learning courses, and much, much more.
**Learning Management System Features**
+ Intuitive course builder
+ Use text, video, audio, images, or any combination in your lessons
+ Quizzing
+ Prerequisites
+ Student dashboards
+ Student analytics
+ Student management
**Ecommerce Features**
+ Accept one-time and/or recurring payments for your courses and memberships
+ Coupon system
+ A voucher code system so you can grant access to large groups of people
+ Accept credit cards directly on your site with the LifterLMS Stripe Extension
+ Ecommerce analytics
+ Create degree programs or course tracks by grouping courses together that can be taken in any order
**Membership Site Features**
+ Group courses together inside a membership level so you can sell many courses at once
+ Protect non-LMS content, like regular WordPress pages, posts, bbPress forums, and more
**Engagement and Gamification Features**
+ Personalized email system triggered on user events in the system that you define
+ Personalized achievement and badge system triggered on user events in the system that you define
+ Personalized certificate system
**Further Reading**
+ The [LifterLMS plugin](https://lifterlms.com/) official homepage
+ The [LifterLMS knowledgebase](https://lifterlms.com/docs)
+ The [LifterLMS blog](http://blog.lifterlms.com/)
+ The [LifterLMS podcast](http://podcast.lifterlms.com/)
#### Join Our Growing Community
When you download LifterLMS, you join a thriving community of education entrepreneurs, developers, and WordPress enthusiasts. We’re one of the fastest growing open source eLearning communities online, and you are welcome here.
If you’re interested in contributing to LifterLMS, head over to the [LifterLMS GitHub Repository](https://github.com/gocodebox/lifterlms/) to find out how you can pitch in.
Want to add a new language to LifterLMS? Swell! You can contribute via [translate.wordpress.org](https://translate.wordpress.org/projects/wp-plugins/lifterlms).
== Installation ==
Installing the plugin is easy. Just follow these steps:
1. From the dashboard of your site, navigate to Plugins > Add New.
2. Select the Upload option and hit "Choose File."
3. When the popup appears, select the lifterlms-x.x.zip file from your desktop. (The 'x.x' will change depending on the current version number).
4. Follow the on-screen instructions and wait as the upload completes.
5. When it's finished, activate the plugin via the prompt. A message will show confirming activation was successful.
6. Click on Courses > Add Course, and you’re ready to build your first course!
That's it! Just configure your settings as you see fit, and you're on your way to creating online courses in style. Need help getting things started? Check out our [Getting Started Guide and Documentation](https://lifterlms.readme.io/docs/getting-started).
== Frequently Asked Questions ==
#### Are there any troubleshooting steps you'd suggest I try that might resolve my issue before I post a new thread?
First, make sure that you're running the latest version of LifterLMS. And if you've got any other LifterLMS extensions or themes, make sure those are running the most current version as well.
The most common issues we see are either plugin conflicts, theme conflicts, or outdated servers. You can test if a plugin or theme is conflicting by manually deactivating other plugins until just LifterLMS is running on your site. If the issue persists from there, revert to the default Twenty Fifteen theme. If the issue is resolved after deactivating a specific plugin or your theme, you'll know that is the source of the conflict. If it is a hosting issue, contact your web host and make sure they’re running the most current version of PHP.
Also be sure to check out the official LifterLMS [documentation](https://lifterlms.readme.io/) and [knowledgebase](https://lifterlms.com/docs/).
#### I'm still stuck. Where do I go to file a bug or ask a question?
Users of the free LifterLMS should post their questions in the plugin's WordPress.org forum. If you find you're not getting support in as timely a fashion as you wish, you might want to consider purchasing a [LifterLMS Pro license](https://lifterlms.com/product/lifterlms-pro).
If you're already a LifterLMS Pro user or you have purchased one of the LifterLMS themes or extensions, you're entitled to log into your account and contact the support team directly on the [LifterLMS website](https://lifterlms.com/my-account/). We can provide a deeper level of support here and address your needs on a daily basis during the work week. Generally, except in times of increased support loads, we reply to all comments within 12 business hours.
#### LifterLMS is awesome! Can you set it all up for me?
Yes. You can get an instant quote for the team at LifterLMS to set everything up for you through our signature Boost service. Get an instant quote through our automated quote generation tool on the [LifterLMS website services page](https://lifterlms.com/done-for-you-lms/).
#### I'm interested in LifterLMS Pro, another LifterLMS extension, or a LifterLMS theme, but there are a few questions I've got before making the purchase. Can you help me get those addressed?
Absolutely. If you're not finding your questions answered on the product pages, you can ask your presales questions through this [contact form](https://lifterlms.com/contact/). You can also connect live with a member of our team [here](https://lifterlms.com/contact/).
#### What add-ons are available for LifterLMS, and where can I read more about them?
Currently, the following add-ons are available for LifterLMS:
+ [LifterLMS Stripe Payment Gateway](https://lifterlms.com/product/stripe-extension/), for accepting credit card payments directly on your website and passing the money through Stripe to your bank account.
+ [LifterLMS MailChimp](https://lifterlms.com/product/mailchimp-extension/), for adding your users to a MailChimp email list and organizing them into groups or adding to separate email lists based on the courses they’ve enrolled in.
#### I have a feature idea. What's the best way to tell you about it?
We care about your feature ideas and what you have to say. You can request a feature [here](https://lifterlms.com/contact/). Also be sure to checkout the [LifterLMS product roadmap and changelog](https://lifterlms.com/roadmap/) to see how far we’ve come.
#### I still have questions. Where can I find answers?
Be sure you’ve taken the free tutorial training video course: [How to Create an Online Course with LifterLMS](http://demo.lifterlms.com/course/how-to-build-a-learning-management-system-with-lifterlms/).
== Screenshots ==
1. LifterLMS Course Settings
2. LifterLMS Course Builder
3. LifterLMS Course
4. LifterLMS Achievements
5. LifterLMS Sidebar Widgets
6. LifterLMS Course Tiles
7. LifterLMS Sales Analytics
8. LifterLMS Lesson Completion Analytics
9. LifterLMS Membership Settings
10. LifterLMS Lesson
11. LifterLMS Certificate
12. LifterLMS Student Analytics
13. LifterLMS Creating and Engagement
14. LifterLMS Student Dashboard
15. LifterLMS Course Analytics
== Changelog ==
= v3.3.0 - 2017/01/23 =
-----------------------
+ New course option allows displaying the video embed in place of the featured image on course tiles displayed on the course catalog screen
+ Courses can now be exported individually or in bulk. Export of a course includes all course content, sections, lessons, and quizzes.
+ Courses can now be duplicated. Duplication duplicates all course content, sections, lessons, and quizzes.
+ Upon completion of the Setup Wizard a sample course can be automatically installed.
+ Postmeta keys for Lessons and Sections which denote their relationship to their parents have been renamed for consistency, database upgrade 330 included in this release will rename the keys automatically. [Read more here](https://lifterlms.com/docs/lifterlms-database-updates/#330)
+ Update to `LLMS_Post_Model` to allow easier programmatic definition and handling of extending class properties
+ classes extending `LLMS_Post_Model` can now be serialized to json and converted to arrays programatically
+ new function `llms_get_post()` allows easier instantiation of an `LLMS_Post_Model` instance
+ Added LifterLMS Database Version to the system report
= v3.2.7 - 2017/01/16 =
-----------------------
+ Fix float conversion of large numbers with relation to coupon price adjustments
= v3.2.6 - 2017/01/16 =
-----------------------
+ Tested up to WordPress Core 4.7.1
+ Fix the display of track-related engagements on the engagement admin screen
+ Fix float conversion of large numbers with relation to prices
= v3.2.5 - 2017/01/10 =
-----------------------
+ New shortcode: `[lifterlms_pricing_table]` allows pricing table display outside of a course or membership. See [https://lifterlms.com/docs/shortcodes/#lifterlms_pricing_table](https://lifterlms.com/docs/shortcodes/#lifterlms_pricing_table) for usage information.
+ New shortcode: `[lifterlms_access_plan_button]` allows custom buttons for individual access plans to be created outside of a pricing table. See [https://lifterlms.com/docs/shortcodes/#lifterlms_access_plan_button](https://lifterlms.com/docs/shortcodes/#lifterlms_access_plan_button) for usage information.
+ ensure every return from `llms_page_restricted` is filtered. Thanks to @matthalliday
+ Ensure purchase page can only load for valid access plans
+ Course / Membership taxonomy archives now obey orders defined by their respective catalog settings
+ Fix language of automatic validation error message for numeric field types
+ Fix translation function error causing course syllabus to display incorrect "x of x" text
+ Added correct text domain to an i18n string displayed on the checkout confirmation screen, thanks @ymashev
+ Ensure search result pages are viewable by members and non members regardless of result membership restrictions (unless site is restricted to sitewide membership)
= v3.2.4 - 2017/01/03 =
-----------------------
+ Fixed tooltips on lesson preview tiles (in course syllabus and on next/prev tiles inside lessons) to show the actual reason the lesson is inaccessible rather than always showing a generic enrollment message
+ Removed the language "You must enroll in this course to unlock this lesson" in favor of "You do not have permission to access to this content" as a restriction message fallback when no better message is available
+ "Quiz Results" title is now translateable
+ Removed deprecated JS file "llms-metabox-data.js" which controlled UI/X for 2.x subscription data on courses and memberships
+ Non LMS Content (pages, posts, forums, etc...) restricted to multiple memberships will now correctly allow users access to the content as long as they have access to at least one of the memberships
+ Fixed a redirect loop encountered if direct access to a lesson with an incomplete prerequisite was attempted
= v3.2.3 - 2016/12/29 =
-----------------------
+ Progress and Grade are now sortable columns on the student reporting table
+ Make enrollment statuses translateable for courses and memberships on the Student Dashboard
+ "Sign Out" text on student dashboard is now translateable, thanks @yumashev
+ Fixed prerequisite lesson display on lesson post tables
+ Ensure post archive (blog) is visible regardless of post membership restrictions
+ Moved lesson post table managment functions to their own class
+ Unused section post table management functions removed
= v3.2.2 - 2016/12/21 =
-----------------------
+ Adds filter `llms_student_dashboard_login_redirect` allowing customization of the redirect upon login via the Student Dashboard
+ Adds a shortcode parameter, `login_redirect` to `[lifterlms_my_account]` allowing customization of the redirect upon login via the Student Dashboard
+ Adds a new tool under "Tools and Utilities" on the LifterLMS Settings screen which allows users to clear the cached student overall progress and overall grade data
+ Fixes a compatibility issue with the OptimizePress live editor
+ Adds a text domain to a translation function where none was present, rendering the string untranslateable
= v3.2.1 - 2016/12/14 =
-----------------------
+ Fix operator position on `is_complete` check
= v3.2.0 - 2016/12/13 =
-----------------------
##### LifterLMS Reporting Beta
+ Students overview displays broad information about your students in a searchable and sortable table
+ Review data about individual students including:
+ Membership enrollments and statuses
+ Course enrollments, status, and progress
+ Quiz attemtpts and and their submitted answers
+ Earned achievements and certificates
+ Sales and Enrollments analytics are now found under the "Reporting" screen
+ Feedback on the beta? Let us know at [https://lifterlms.com/docs/lifterlms-reporting-beta/](https://lifterlms.com/docs/lifterlms-reporting-beta/)
##### Other Updates & Fixes
+ Lesson completion checks now look for at least one record of the completed lesson as opposed to looking for exactly one
+ Fix positioning of teacher avatar on course/membership tiles
+ Remove explicit color definition from Student Dashboard navigation links for greater theme compatibility
= v3.1.7 - 2016/12/06 =
-----------------------
+ Added support for WordPress Twenty Seventeen theme
+ Improved the messaging and functions related to LifterLMS Sidebar support
+ Add alternate language for a quiz requiring 100% grade to pass
+ Added CSS class `.llms-button-primaray` to lessom "Mark as Complete" buttons
+ Add box-sizing css rule to LifterLMS form field elements. Fixes layout issues on themes that don't border-box everything.
+ Fix an issue that prevented the admin notice to enable/disable recurring payments from clearing when a button was pressed from screens other than the LLMS Settings screen
+ Fix next payment date error when viewing a cancelled recurring order on the student dashboard
+ Recurring payments now scheduled based on UTC time in accordance with the action scheduler which executes based on UTC rather than site timezone
+ Add existing lesson to course modal now relies on async search. Improves performance and prevents timeouts on sites with a 500+ lessons
+ Removed 2.x -> 3.x update notification message
+ Fix an issue with comment counting on PHP7
+ Updated action scheduler library to latest version
= v3.1.6 - 2016/11/11 =
-----------------------
+ Handle empty responses on analytics more responsibly
+ Fix typo preventing completed orders from displaying in analytics when using course / membership filters
+ Quiz builder now leverages llmsSelect2 rather than select2 directly. Resolves a number of theme and plugin compatiblity issues.
+ Prevent bullets and weird margins on LifterLMS notices with slightly more specific CSS
+ Login error messages will now display regardless of whether or not open registration is enabled
+ Attempts to access quizzes are redirected or error messages are output when student is not enrolled.
= v3.1.5 - 2016/11/10 =
-----------------------
+ Fix Month display on Analytics Screen
= v3.1.4 - 2016/11/10 =
-----------------------
+ Progress bars are sligthly more intelligent to prevent a widowed "%" on themes with larger base font sizes
+ LifterLMS Merge code button only displays where it's supposed to now
+ Fix issue where users removed from a membership were not properly removed from courses they were auto-enrolled into because of that membership
+ Fix analytics screen JS parsing error
= v3.1.3 - 2016/11/04 =
-----------------------
+ Added new action hooks to the course syllabus widget/shortcode template
+ Added a small text link on the student dashboard which links to the full courses list of the dashboard
+ Display order revenue for legacy orders instead of 0
+ Make the Order History table on the Student Dashboard responsive
+ Only display _published_ courses on the student dashboard
+ Fixes a conflict with WP Seo Premium's redirect manager which was creating access plan redirects
+ Reenable course review options on the admin panel
+ Updates review output method so reviews are now output via a removeable action
= v3.1.2 - 2016/10/31 =
-----------------------
+ Update all course and lesson templates to rely only on `global $post` rather than on `$course` and `$lesson` globals which are working inconsistenly across environments
+ Fix typo related to the line-height of LifterLMS order notes on the admin panel. Thanks [@edent](https://github.com/edent)!
= v3.1.1 - 2016/10/28 =
-----------------------
+ Shortcode `[lifterlms_hide_content]` has some new functionality. See [documentaition](https://lifterlms.com/docs/shortcodes/#lifterlms_hide_content) for usage and more information!
+ Fix logic when determining if terms and condition checkboxes should be displayed on checkout & open registration.
+ Define a placeholder on the Terms & Conditions page selection so it can be removed
+ Explicitly declare `LLMS_Lesson` on lesson audio/video embed templates instead of relying the global `$lesson`. Some environments appear to be losing the global.
+ Removed unused lesson template "full-descritpion"
= v3.1.0 - 2016/10/27 =
-----------------------
+ New engagement triggers available to allow engagements to be fired when a student enrolls into a course or membership!
+ Add custom email addresses for to, cc, and bcc when sending email engagements
+ New Merge Code button for easy merging of custom merge codes when creating emails
+ Added post table data for LifterLMS Engagements
+ Added new filter `llms_email_engagement_date_format` which allows customization of the format of the `{current_date}` merge code availabe in LifterLMS Emails
+ Added explicit max width declaration to images within LLMS Catalogs to prevent image overflow. Fixes some theme compatibility issues.
+ Optimize course and lesson audio video templates for faster loads
+ Fix course & lesson video to load videos instead of duplicating audio embeds
+ Fix coupon usage query so that coupons cannot be used more than the maximum number of times. Also now displays the correct number of coupons used on the coupons post table.
+ Fix LLMS Engagement Email merge codes to work in subject line
= v3.0.4 - 2016/10/20 =
-----------------------
+ Added shortcode `[lifterlms_login]` so the login form can be displayed. Information usage at [https://lifterlms.com/docs/shortcodes/#lifterlms_login](https://lifterlms.com/docs/shortcodes/#lifterlms_login)
+ Added internal function `LLMS_Student->get_name()`
+ Three basic course difficulties will be automatically created on installation and upgrades
+ Updated course difficulty save methods to rely only on the taxonomy rather than the taxonomy and postmeta table
+ Updated admin settings screens to only flush rewrite rules on screens where it is necessary to update rewrites
+ Fix issue with customization of LifterLMS account endpoint URLs
+ Fix a conflict with [Redirection](https://wordpress.org/plugins/redirection/) url monitoring that was causing redirects to be created from Courses and Memberships to the site home page automatically whenever updating the post
+ Fix an undefined index warning on courses / memberships when updating post data
+ Remove confusing and invalid warning message from Membership post screen on admin panel
= v3.0.3 - 2016/10/17 =
-----------------------
+ Added filter `llms_show_preview_excerpt` which can be used to hide the excerpt on course syllabus or next/back preview tiles in lesson navigation
+ Fix logic so that only free lessons are marked as free lessons post 3.0 upgrade
+ Fix incorrect display of the "restricted" and "non-restricetd" content areas for memberships
+ Fix undefinded index warning output by membership metaboxes
+ Fix dead like under "Force SSL" checkout setting
+ Course & Membership tiles output by course or membership shortcodes now automatically match column heights like the default catalogs do.
+ Correctly register students as the "Student" Role
+ Database Upgrade script converts users with the role "studnet" to "student"
= v3.0.2 - 2016/10/14 =
-----------------------
+ Added action `lifterlms_before_student_dashboard_tab`
+ Added action `lifterlms_after_student_dashboard_greeting`
+ Added action `lifterlms_after_student_dashboard_tab`
+ Added action `lifterlms_sd_before_membership`
+ Added action `lifterlms_sd_after_membership`
+ Fix membership shortcode
+ Fix issue that prevented "Student Dashboard" from rendering if the page was set as the child of another page
+ Fix undefined function error in admin notices
+ Fix nonce errors resulting from admin notice html being served from the database rather than being dynamically generated
+ Fix db ugrade script which was enabling course time period for restrictions for all courses regardless of their pre 3.0 restriction settings
+ Fix db uprgade script that was causing empty sale dates to show start of unix epoch b/c they were empty strings
+ Fix Javascript parse error prevnting section & lesson editing from within the course outling on the admin panel
+ Fix lesson icons from highlighting lesson settings like drip delay & quiz association
+ Updated course outline color scheme to match the 3.0 admin color scheme overhaul
+ `LLMS_Lesson::get_assigned_quiz()` will output depecation warnings for those using debug mode. LLMS core no longer uses this function and will be deprecated in the next major release.
+ Handle enrollment status of legacy orders based on enrollment rather than enrollment AND order status
= v3.0.1 - 2016/10/13 =
-----------------------
+ Properly prefix `llms_is_ajax()` to prevent 500 errors when leaving HTTPS forced checkout screen
+ Fix student unenrollment from memberships which was leaving a trace of enrollment in the user_meta table
+ Update student dashboard nav list items to have more specific no styles to prevent "double discs" on various themes
+ Return course progress bar and "continue" button which was accidentally removed
+ Added core support for "Divi" theme sidebars
= v3.0.0 - 2016/10/10 =
-----------------------
**This is a massive update which _breaks_ backwards compatibility for many LifterLMS features. A database migration is also necessary for upgrading users to reformat certain pieces of information which are being accessed differently in 3.0.0**
**We strongly recommend that you backup your website before upgrading and, if possible, test LifterLMS 3.0.0 in a non-public-facing testing environment to ensure compatibility with your theme and other plugins and to ensure that 3.0.0 changes do not adversely affect your existing website.**
**Please thoroughly read the following changelog and, if necessary, submit support tickets or post in the forums with any questions _prior_ to upgrading. LifterLMS Support _cannot_ and _will not_ manually resolve migration issues which may arise from upgrading to 3.0.0.**
+ New shortcodes to be documented later, checkout "includes/class.llms.shortcodes.php" if you're feeling anxious
+ All kinds of CSS changes to make LifterLMS, in general, be a little less old looking
+ Added a number of CSS classes to various areas in the Checkout template at "templates/checkout/form-checkout.php"
+ Added a "Cancel" button that allows you to hide the coupon form if the user decides not to add a coupon
+ Removed jQuery animations from the coupon form toggle in favor of a CSS class toggle. If you decide you want some animations on the form add some CSS transitions to the `.llms-coupon-entry` element (and children) to change when the class `.active` is added or removed from the element.
+ Refactored JavaScript related to LifterLMS Checkout. Improvements are minimal (if any) but the file is now smaller and more readable! Yay code stuff.
+ Fixed some redundant text on single payment confirmation screen. ("Single payment of single payment of")
+ Added a link to memberships listed under "My Memberships" on the LifterLMS Account Screen
+ LifterLMS Order posts have been renamed in the database from "order" to "llms_order" to prevent any potential conflicts with other plugins. Automated database migration will handle the renaming of old orders.
+ Fixed undefined variable notice generated by Sections without any lessons inside of them
+ renamed function `add_query_var_product_id()` to `llms_add_query_var_product_id()`
+ added a class for interacting with a course TRACK, instatiated by a track term or term_id (`LLMS_Track`)
+ password strength meter and related settings / options via utilizing WordPress password strength functions available
+ cleaned up the lesson locked tooltips to be a bit more sane and also utilized in course navigation on individual lessons.
+ Updated admin menus for LifterLMS content to be more sane and organized and intuitive and so on and so forth
##### Payment Gateways
**NOTE: at this release, LifterLMS PayPal is the only payment gateway that will work with this release. We haven't started working on Stripe 4.0.0 which will work with LifterLMS 3.0.0**
+ Payment gateways powered by a new abstract gateway class
+ PayPal has been removed from LifterLMS and is available as premium extension
##### Frontend Notices
+ LifterLMS "Notices" have been rewritten, slightly.
+ Most templates have been updated
+ associated CSS has been updated
+ Some sanity has been added to the related functions
##### Post "Model" Concept / Overhaul
Updated classes for programmatically accessing all sorts of data related to custom post types registered by LifterLMS.
These post types currently include:
+ Access Plans -- a non-public post type associated with courses and memberships which store payment related information
+ Coupons (replaces includes/class.llms.coupon.php)
+ Courses (replaces includes/class.llms.course.php)
+ Lessons (replaces includes/class.llms.lesson.php)
+ Memberships
+ Orders (replaces includes/class.llms.order.php
+ Products -- can be instantiated from courses or memberships (replaces includes/class.llms.product.php)
+ Transaction -- a non-public post type associated with orders which store completed/attempted transaction data
##### Improved admin metabox methods (and related)
+ Updated custom LifterLMS Admin Metaboxes to have a more sane programmatic interface. This affects nearly all admin metabox classes in the plugin.
+ A set of methods and classes have been added to improve the programmatic interface around custom post type post tables. These can be found in "includes/admin/post-types/post-tables"
##### Coupons
+ New class `LLMS_Coupon` allows for easy getting & setting of coupon data.
+ Updated coupon post table to include relevant coupon information for all coupons at a glance
+ Refactored admin panel coupon metabox generation to utilize new model for saving data
+ Added translation functions to all strings in coupon settings screen
+ Added new coupon settings
+ _Expiration Date_ -- coupons cannot be applied to a purchase after the expiration date
+ _Payment Type_ -- coupons can only be applied to either single or recurring payment plans. Existing coupons will be treated as single payment coupons until updated by the Admin.
+ _First Payment Discount_ -- Applies only to recurring payment coupons. Determines the discount applied to the first payment of a recurring payment transaction.
+ _Recurring Payments Discount_ -- Applies only to recurring payment coupons. Determines the discount applied all payments (other than the first) of a recurring payment transaction.
+ _Description_ -- Record internal notes for a coupon visible only by admins on the admin panel
+ The "Coupon Code" field has been removed in favor of the WordPress Coupon Post Title being utilized as the code. After upgrading, an automated database migration will move all coupon code fields to the title. The title previously functioned as the coupon description. During the migration the existing title will be moved to the new description field.
##### Orders
+ Added Order Statuses
+ Completed - Single payment only. Denotes a sucessful transaction
+ Active - Recurring only. Denotes the subscription is active with no issues
+ Expired - Recurring only. Denotes the subscription has ended and is no longer active
+ Refunded - Denotes the order has been refunded.
+ Cancelled - Denotes the order has been cancelled manually by an admin.
+ Failed - Denotes payment has failed. For subscriptions a failed payment will switch from "active" to "failed"
+ Pending - Denotes that the order has been created but payment has not been completed yet
+ Admin panel order table new features:
+ The following columns are now sortable in ascending and descending orders: Order, Product, and Date
+ Added totals based on order type (single or recurring) to the "Total" column
+ Added an order status column for quick status review
+ Order notes available for internal and system notes. powered by WP comments. lots of inspiration (and code) from WooCommerce, thank you <3
+ Added a bunch of currency settings (as well as right-side currency and decimal-less currency support!)
##### New Templates
+ __Pricing Table__ at "templates/product/pricing-table.php" utilized by courses and memberships for displaying access plan information. Replaces "templates/membership/purchase-link.php" and "templates/course/purchase-link.php"
+ __Course Taxonomy Templates__ at "templates/course/categories.php", "templates/course/tags.php", and "templates/course/tracks.php" display comma separated lists for course custom taxonomy terms
+ __Course Prerequisite Template__ at "templates/course/prerequisites.php" displays prerequisite information (course and tracks) for a given course.
+ __Meta Wrapper__ templates at "templates/course/meta-wrapper-end.php" and "templates/course/meta-wrapper-start.php" wrap some HTML around various meta data output about a course
+ Significantly updated checkout process with all kinds of new templates including:
+ templates/checkout/form-gateways.php
+ templates/checkout/form-summary.php
+ __Unified "Lesson Preview"__ at "templates/course/lesson-preview.php" displays "buttons" in course syllabus (on course page) and in course navigation (on lesson pages)
+ Various template hook priority changes in order to make adding content between default LifterLMS areas easier
##### Deleted Templates
+ templates/checkout/form-checkout-cc.php
+ templates/checkout/form-pricing.php
##### New & Updated Admin Interfaces & Templates
+ Significantly improved, changed, or brand new templates for metaboxes for various post types:
+ templates/admin/post-types/order-details.php
+ templates/admin/post-types/order-transactions.php
+ templates/admin/post-types/product-access-plan.php
+ templates/admin/post-types/product.php
##### New Functions
+ `llms_confirm_payment_url()` - Retreive the URL used for confirming LifterLMS Payments
+ `llms_cancel_payment_url()` - Retreive the URL users are directed to when cancelling a payment
##### Install Script
+ Removed some legacy default options that were being created and are no longer required for new installations.
+ Removed unused `update_courses_archive()` function & related hook
##### Select2
Now utilizing a forked version of Select2 to prevent 3.5.x conflicts we've been plagued with
##### Deprecated
+ Removed filter `lifterlms_get_price_html`, use `lifterlms_get_single_price_html` instead
+ Removed unused `LLMS_Product->get_price_suffix_html()` function
+ Removed `LLMS_Product->set_price_html_as_value()` because we didn't like it anymore, don't use anything instead.
+ Removed `add_query_var_course_id()` function
+ Removed `displaying_sidebar_in_post_types()` function with the `LLMS_Sidebars::replace_default_sidebars()` function
+ Filter `lifterlms_order_process_pending_redirect` has been replaced with `lifterlms_order_process_payment_redirect`
+ Action `lifterlms_order_process_begin` has been deprecated
+ Removed `lifterlms_order_process_complete` action
+ Replaced `LLMS_Course::check_enrollment()` with various new utilities. See `llms_is_user_enrolled()` for fastest use.
+ Officially removed the `LLMS_Language` class
+ Officially removed the `PluginUpdateChecker` class stubs we created to prevent updating issues with LifterLMS extensions during our transition to 2.0.0. This library has caused nothing but pain for everyone on our team and many of our users. It's gone now, forever.
+ Removed function `lifterlms_template_single_price()` and replacted with `lifterlms_template_pricing_table()`
+ Removed templates at "includes/course/price.php" and "includes/membership/price.php" in favor of "includes/product/pricing-table.php"
+ Removed `LLMS_Person::create_new_person()` in favor of `LLMS_Person_Handler::register()` or `llms_create_new_person()`
+ Removed `LLMS_Person->set_user_login_timestamp_on_register()` and are simply adding the metadata during registration
+ Removed `lifterlms_register_post` action hook which fired after new user registration validation, this has been replaced with `lifterlms_user_registration_after_validation`
+ Removed `lifterlms_new_person_data` and `lifterlms_new_person_address` filters, replaced with `lifterlms_user_registration_data`
+ Removed `LLMS_Person::login_user()` in favor of `LLMS_Person_Handler::login()`
+ background updater
+ system report facelift + inclusion of all new settings via `LLMS_Data` class
+ Fix setup wizard styles to follow update admin panel styles
+ add links to last step of setup wizard for documentation and demo
+ removed a bunch of deprecated coupon-related functions
+ added a "force ssl" option to ensure checkout is secured
+ added settings and options around recurring payments and staging sites to prevent duplicate charges when testing on a cloned site
+ Check course restrictions automatically when checking lesson
+ Added user_id to all access function checks to allow for checks for non current user
+ course restriction messages display regardless of enrollment status
+ check memberships and lock purchase of members only access plans
+ Fixed titles of course closed and open messages on the course restrictions options
+ record a start date for access plans based off when order mobes to complete or active for the first time
+ automatically expire limited access plans
+ gave a quick facelift & unification to a lot of admin panel elements
+ Color consistency updated according to LLMS brand guide
+ Unified frint and backend button classes
+ Updated all frontend buttons to have consistent classes
+ Removed the "FREE" lesson SVG in favor of simple text which allows translating
+ Install & activation overhauls. Resolves [#179](https://github.com/gocodebox/lifterlms/issues/179)
+ jQuery MatchHeight lib unignored
+ A bunch of settings pages updated and a bunch of settings deprecated
+ Gateways setting page removed
+ Memberships & Courses page combined into "Catalogs" settings
+ Added a data getting class used by the tracker class
+ added a new page creation function witn better intelligence that (hopefully) prevents duplicate pages from being created during core page installation
+ new default country setting
+ all order status changes recorded as order notes
+ pending orders can be completed after failed payments
+ better handling for gateways with fields
+ JS spinners support multiples via start & stop!
+ Updated (and semi-finished) analytics
+ achievemnt metabox converted
+ minor updates to voucher class
+ Added a "post state" visible on the Pages posts table identifying if the page is saved as a LifterLMS page (EG: Checkout Page)
+ Fixed copy/paste error of duplicate enrollment closed message on course restrictions tab
+ Removed WC integration in favor of WC
+ Upgade "back to course" template to new lesson API
+ Renamed `course/parent_course.php` to `course/parent-course.php` for template naming consistency
+ use `strict` when auto generating usernames when creating from email addresses, resolves [#182](https://github.com/gocodebox/lifterlms/issues/182)
##### 3.0.0 Auto Upgrader
+ lots of postmeta data rekeyed
+ intelligently generated defaults for various peices of new meta data on courses, lessons, and memberships
+ automatically generate access plans from existing course and membership data
+ update existing orders to pull semi-accurate data into analytics based on new database structure
+ cleans database of a ton of deprecated options and postmeta data
##### Deprecated
+ function `llms_is_user_member()`, use `llms_is_user_enrolled()` instead
+ function `llms_check_course_date_restrictions()`
+ function `quiz_restricted()`
+ function `membership_page_restricted()`
+ function `is_topic_restricted()`
+ function `llms_get_post_memberships()`
+ function `llms_get_parent_post_memberships()`
+ function `parent_page_restricted_by_membership()`
+ function `outstanding_prerequisite_exists()`
+ function `find_prerequisite()`
+ function `llms_get_course_enrolled_date()`
+ function `llms_get_lesson_start_date()`
+ function `lesson_start_date_in_future()`
+ function `page_restricted_by_membership_alert()`
+ function `llms_does_user_memberships_contain_course()`
+ class `LLMS_Checkout`
+ function `LLMS()->checkout()`
##### Auto Enrollment
+ Course auto enrollment for Memberships has been restored
+ Works exactly the same as previously except auto-enrollment is not dependent on a course "belonging to" the membership via membership restrictions. This is because membership restrictions no longer apply to courses
##### Analytcis
+ Charts! I'm really excited about this. I know we still need more data but please say nice things to me, I worked really hard on these little charts.
+ Updated styles & interface
##### bbPress
+ Restrict individual forums (and their topics) to LifterLMS Membership levels
##### BuddyPress
+ Fixes broken course display on bp profile
+ Adds memberships subpage to bp profile
##### notices
+ Admin notices class for managing admin notices, it's pretty neat!
##### Student Management on Courses and Memberships
+ All new and improved student management interface for managing student enrollments from courses and memberhips
##### Deprecated
+ filter: `llms_meta_fields_course_main`, replace with `llms_metabox_fields_lifterlms_course_options`
##### Manual Payments
+ Manual Payment Gateway can now be enabled on the frontend!
+ When a manual payment is recorded the user will be redirected to a view order page where they will be prompted to make a manual payment
+ Define the payment instructions on the admin panel "Checkout Settings"
+ Once you verify payment, head to the pending order and hit the "Record a Manual Payment" button to record the transaction
+ Upon recording the order status will be upgraded to "Complete" and the user will be enrolled automatically
##### Student Dashboard Upgrades
+ More sane template hooks and functions
+ Pagination on Courses endpoint (view only a preview on the mian dashboard)
+ Orders history & view orders screens!
Deprecated options (and related functons where applicaple) for the following course & membership options:
+ `lifterlms_button_purchase_membership_custom_text`
+ `lifterlms_course_display_outline_lesson_thumbnails`
+ `lifterlms_course_display_author`
+ `lifterlms_course_display_banner`
+ `lifterlms_course_display_difficulty`
+ `lifterlms_course_display_length`
+ `lifterlms_course_display_categories`
+ `lifterlms_course_display_tags`
+ `lifterlms_course_display_tracks`
+ `lifterlms_lesson_nav_display_excerpt`
+ `lifterlms_course_display_outline`
+ `lifterlms_course_display_outline_titles`
+ `lifterlms_course_display_outline_lesson_thumbnails`
+ `lifterlms_display_lesson_complete_placeholders`
+ `redirect_to_checkout`
In all scenarions either a `add_filter` (returning false) or a `remove_action()` can be used to replicate the option.
v3.0.0-beta.4 - 2016/09/01
------------------------------
+ fix issue with course prereq checks
+ next payment due date visible on order admin view
+ trial end date visible on order admin view
##### Free Access Plans
+ "Free" access plans now defined as such based on a checkbox rather than by entering 0 into the price
+ Only single payment access plans can be free (a free recurring payment makes no sense but we can certainly discuss this if you disagree with me)
+ trials are disabled with free plans (because trials only apply to recurring plans)
+ sales are disabled for free access plans
##### Checkout Form JS API
+ unified JS checkout handler
+ allows extensions to enqueue validation or pre-submission JS functions that should run prior to checkout form submission
##### Manual Payment Gateway
+ handles purchase of access plans marked ar FREE & orders that are discounted to 100% via coupons
##### Open Enrollment
+ Open Enrollment allows users to register on the account dashboard without purchasing a course
+ Voucher settings are available to customize whether vouchers should be optional or required during open registration
+ Better error reporting around voucher usage during enrollment
##### Deprecated Functions
+ `llms_get_coupon()`
+ `get_section_id()`
+ `check_course_capacity()`
##### Quizzes
+ Updated admin metaboxes to use new metabox abstract class
+ display 0 instead of negative attempts on quiz summary
+ updated logic in start button template
##### Emails (for engagements)
+ Admin metabox updated to new API
+ Postmeta data migration:
+ `_email_subject` renamed to `_llms_email_subject`
+ `_email_heading` renamed to `_llms_email_heading`
= v2.7.12 - 2016/09/22 =
------------------------
+ Added a new filter on content returned after port permission checks
+ Added additional information to plugin update message in preparation for major 3.0 release
+ Updated plugin contributor metadata
= v2.7.11 - 2016/07/22 =
------------------------
+ Removed a duplicate action hook on course archive loop.
+ Switched registration template include to use a more sane function
+ Added updated banner adds with prettier ones. Wooooooo.
= v2.7.10 - 2016/07/19 =
------------------------
+ Fix undefined noticed related to LifterLMS custom post type archive filtering
+ Fix filter which was supposed to allow custom engagment types to be queried & triggered by engagements automatically but was passing data incorrectly
= v2.7.9 - 2016/07/11 =
-----------------------
+ We are now properly storing delayed engagment trigger data.
+ Fixed an issue with our engagment query functions that caused, in very rare circumstances, the extra engagements to be triggered during an engagment trigger due to a lack of specificity in our query
+ Fixed an undefined property notice related to email engagments when the email had no subject or header
+ Fixed a typo in the description of a translation function.
+ Added an engagment debug logging function. You can log all sorts of data related to engagements by adding `define( 'LLMS_ENGAGEMENT_DEBUG', true );` to your `wp-config.php` file.
+ Allow course title shortcode to be used on course pages (and quizzes too). Documentation incorrectly said it was available on courses so we've fixed the function to allow for use on courses.
= v2.7.8 - 2016/07/05 =
-----------------------
+ Bugfix: Restore access to quiz results on quiz completion
= v2.7.7 - 2016/07/01 =
-----------------------
##### Russian
+ LifterLMS is now 100% Translated into Russian thanks to our new Russian Translation Editor [@kellerpt](https://profiles.wordpress.org/kellerpt/)
##### l18n
+ All transition messages between questions during a Quiz are now translatable.
+ LifterLMS subpages below the LifterLMS icon on the admin panel will now always display regardless of how you've chosen to translate the menu items. Hopefully puts to rest a long-standing i18n issue.
###### Bug fixes
+ Attempting to access a quiz when not enrolled in the associated course and having not properly started the quiz now results in a useful error message rather than a PHP warning.
+ We've adjusted the way we're adding a admin panel "seperator" to reduce conflicts with other plugins that have menu items with the same position as our seperator (51).
+ Added new logic to display an error message (instead of nothing) if there's an error during question loading.
+ Resolve issue with course progress bar when added to a quiz sidebar (assuming your theme has sidebar support on your quizzes).
+ Updated version number in the changelog for last version (it was supposed to be 2.7.6)
= v2.7.6 - 2016/06/28 =
-----------------------
+ Students manually removed by Memberships by using the "Students" tab of a LifterLMS Membership will now be fully removed from the membership.
+ Updated a few time-related strings to be l18n friendly. These items were all around Quiz time reporting and quiz time limits.
+ Updated testing information, tested up to WP 4.5.3
+ Fixed date of last release on changelog. It had the wrong date. Does that really matter?
+ Updated readme.txt description area, we have a new youtube video! Yassss.
= v2.7.5 - 2016/06/13 =
-----------------------
##### New features
+ Added an "id" parameter to both LifterLMS Courses and LifterLMS Memberships shortcodes
##### i18n
+ Allow date translation on quiz results screen by using `date_i18n()` instead of `date()`
+ Allow date translation on my courses screen by using `date_i18n()` instead of `date()`
+ Ensure course status "Enrolled" is translatable on my courses screen
##### Fixes
+ Thanks to [@kjohnson](https://github.com/kjohnson) who fixed undefined index warnings & errors which occurred when viewing the last lesson in a section when the next section contained no lessons.
+ Resolved an issue where formatting for "Restricted Access Description" course content would not display proper formatting.
+ Fixed an issue with the "FREE" stamp for a free lesson caused layout issues.
+ Removed the "is-complete" css class from incorrectly being added to lesson preview tiles for free lessons
+ Fix an escaping issue when rendering Course titles inside LifterLMS notices. Prevents "\'s" from displaying when "'s" should be displaying (and similar issues).
= v2.7.4 - 2016/05/26 =
-----------------------
+ Fixed a bug with the new localization methods from 2.7.3
+ Removed bundled it_IT translation files in favor of official language pack available at [https://translate.wordpress.org/projects/wp-plugins/lifterlms/language-packs](https://translate.wordpress.org/projects/wp-plugins/lifterlms/language-packs).
+ Removed bundled en_US translation files because LifterLMS is in English so the files are unnecessary.
+ Fixed a few mis-labled filters applied when registering LifterLMS Custom Post Types
+ Adjusted the default supported features of LifterLMS Quizzes and Questions
+ Quizzes now support custom fields as per user request
+ Commenting, thumbnails, and excerpts are no longer "supported" as they were never intended to be and were never correctly implemented.
+ If you are relying on any of these features for your quizzes or questions please use the following filters to re-implement these features: `lifterlms_register_post_type_quiz` or `lifterlms_register_post_type_question`. These will allow you filter the default arguments LifterLMS passes to the WordPress function `register_post_type()`
= v2.7.3 - 2016/05/23 =
-----------------------
+ Added a separate filter for login redirects `lifterlms_login_redirect` and added the user_id as a second parameter available to the filter
+ Added second parameter to `lifterlms_registration_redirect` to allow access to the registered users's user_id
+ Fixed a timestamp conversion issue on Course sale price checks that caused indefinite sales (those with no date restrictions) to appear not on sale during certain periods of time. The period would differe depending on the server's timezone settings and the time of visit.
+ Added a "Pointer" when hovering quiz summary accordion to allow for a slightly more obvious user experience that the elements are expandable.
+ Added some new localization methods to ensure strings that only appear in Javascript files will be translator friendly. This initially fixes a few issues on the Quiz Summary page and during quiz taking where strings only appeared in Javascript and were, therefore, completely inaccessible to translators.
= v2.7.2 - 2016/05/19 =
-----------------------
+ In course syllabus widget & shortcodes free lessons will now be clickable links.
+ Record `llms_last_login` timestamp in usermeta when a user registers.
= v2.7.1 - 2016/05/09 =
-----------------------
##### Enrollment & Voucher Checks
+ Enrollment functions will now automatically check to ensure that users are not already enrolled in a course or membership before enrolling. This addresses an issue which would create double enrollment for user redeeming a voucher for a product they were already enrolled in.
+ Vouchers will now automatically check to see if the user has already redeemed this voucher before allowing the user to redeem it. This would have caused multiple enrollments and would allow one user to eat up an entire voucher by using it over and over again for funsies. A voucher can now *only* be redeemed once by a user as intended.
+ `llms_is_user_enrolled()` now allows developers to check membership enrollment. Previously this function would only check enrollemnt of Courses despite what the documentation stated.
##### Translation
+ 3 strings have had translation functions added to them. This makes LifterLMS voucher reemptions translatable!
##### Bugs & Fixes
+ Fix javascript dependency & enqueueing issue on admin panel which prevented LifterLMS settings from saving correctly in various places
+ Removed inline CSS from "next lesson button" on quiz completion / summary screen. This was overriding some default styles and making the button very thin and gross.
= v2.7.0 - 2016/05/05 =
-----------------------
##### LifterLMS Custom User Fields Exposed
+ Custom fields added during registration via LifterLMS account settings are now exposed on the admin panel via the student's WordPress user profile
+ All custom fields that are available (billing and phone) are editable on the WordPress user profile by anyone with profile edit access regardless of LifterLMS settings. If the settings are disabled (eg not required for registration) you can still add this information manually to a user's profile. This is useful if you require the information and then disable it later, you would still be able to access the information on the admin panel but would no longer be required for user's during registration.
+ A few new filters added to help developers customize the experience here. Check out the documentation at [https://lifterlms.com/docs/lifterlms-filters/#admin-user-custom-fields](https://lifterlms.com/docs/lifterlms-filters/#admin-user-custom-fields)
##### Membership Manual Add & Remove Student Functions
+ Duplicated "Students" tab from the Course admin screen to Memberships
+ Students can be manually added to a membership by an admin
+ Students can be removed manually from a membership by an admin
##### Updates
+ Added the ability for students to edit their phone number via their account settings page if the phone number registration option is enabled on the site.
##### Fixes
+ Fixed a few spelling errors on LifterLMS admin panel order screens
+ Fixed a typo on meta data for LifterLMS admin created (manual) orders
= v2.6.3 - 2016/05/02 =
-----------------------
+ Removed redirecting action from WooCommerce integration that was causing issues on mutliple product purchase checkouts with larger databases.
+ Added a new payment action `lifterlms_order_complete` which runs at the same time as some previous actions during payment processing but servers a different purpose. This is mostly in preparation for a forthcoming AffiliateWP integration.
+ Fixed an issue with LifterLMS certificate background image that caused the wrong dimensions to be returned when outputing a LifterLMS certificate background image
= v2.6.2 - 2016/04/27 =
-----------------------
+ Fix class conflict in collapsible course outline widget template which caused some UX issues.
+ Added new filters run during course & lesson sidebar registration to allow customization of LifterLMS sidebars
+ `lifterlms_register_course_sidebar`
+ `lifterlms_register_lesson_sidebar`
+ Removed a stray logging function.
+ Cleaned up some undefined variable warnings & notices on the quiz summary template
+ Fixed an issue appearing when registering users did not submit the optional phone number which caused a PHP notice
+ LifterLMS Orders generated by WooCommerce will now have a payment method of "WooCommerce". This also addresses an undefined notice produced during WooCommerce order completion because a LifterLMS Payment Method wasn't being defined.
= v2.6.1 - 2016/04/26 =
-----------------------
+ Fix class conflict in collapsible course outline widget template which caused some UX issues.
= v2.6.0 - 2016/04/25 =
-----------------------
##### Collapsible Course Outline Widget
+ By request we've added an option to make your course outline widgets collapsible!
+ View feature [Documentation](https://lifterlms.com/docs/course-syllabus-widget/)
+ New translations available related to feature. I think it's 4 strings.
##### Bug Fixes
+ Removed an unused CSS selector that caused some issues on the admin panel. This resolves an issue identified with the Page Builder by SiteOrigin plugin. The selector was very generic (`.title`) and may have caused issues with other themes or plugins using that class.
+ Resolved an issue that prevented post update, save, and publishing messages for core post types (posts, pages) from displaying properly.
= v2.5.1 - 2016/04/22 =
-----------------------
+ Fixed session handler initilization as it was being initialized prior to user data availability.
+ Staged `LLMS_Language` class for deprecation in favor of WordPress translation functions `__()`, `_e()`, etc... **If you're a developer you'll start seeing warning's on screen or in your logs if you're using this function, it will be completely removed in the next MAJOR release (3.0.0)**
+ Added a new function to handle the deprecation warning above (`llms_deprecated_function`) and now that we have this function we'll start deprecating all the things. Just kidding, or am I?
+ This gives translators access to 69 new strings that were previously untranslatable! However, this number might be innacurate +/- 5 strings. I only counted it once and I don't feel like the exact number is important enough for a recount to ensure accuracy. /shrug
= v2.5.0 - 2016/04/15 =
-----------------------
**Admin Panel Order Table Updates**
+ Several visual improvements to the table
+ Exposed the following fields on the table
+ Order number
+ Customer name (with a link to their WP profile)
+ Customer email (mailto link)
+ Payment gateway used (this is filterable per gateway as well so gateways can improve the functionality here in the future)
+ Added a link to the product edit page from the product column
+ Free orders will now display as "Free" as opposed to {currency}0.00
+ Removed the not-so-useful "Order" column which was a long ugly string of data that was displayed in other columns already
+ Removed the "Password Protected" flag since *all* orders are always automatically password protected for added security. This flag distracts from the interface so we've removed it. Orders _are_ still password protected though.
+ Numerous strings that were previously not translatable have been made translatable on this screen
+ A few new strings that previously didn't exist are now available for translation
**Fixes and other small changes**
+ Fixed a translation issue on the LifterLMS menu that we thought we fixed in the last release but have now really fixed (probably).
+ Fixed a few small issues with engagements as they related to external engagements triggered by other plugins and LifterLMS extensions.
+ Tired of seeing a banner for a plugin you've already installed? We have your back! The general settings area will now only display banners for plugins that aren't installed.
+ Fixed various javascript issues, mostly removed `console.log()` statements.
+ Fixed a spelling error on the membership admin panel settings screen
= v2.4.1 - 2016/04/07 =
-----------------------