effective_learndash 0.3.3 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/MIT-LICENSE +1 -1
- data/app/datatables/admin/effective_learndash_enrollments_datatable.rb +2 -2
- data/app/datatables/{effective_learndash_courses_datatable.rb → effective_learndash_available_courses_datatable.rb} +6 -9
- data/app/models/concerns/effective_learndash_owner.rb +57 -4
- data/app/models/effective/learndash_enrollment.rb +36 -4
- data/app/views/admin/learndash_courses/_form.html.haml +1 -0
- data/app/views/admin/learndash_users/_learndash_user.html.haml +4 -1
- data/app/views/effective/learndash/_dashboard.html.haml +10 -2
- data/config/routes.rb +2 -0
- data/db/migrate/{01_create_effective_learndash.rb.erb → 101_create_effective_learndash.rb} +1 -1
- data/lib/effective_learndash/version.rb +1 -1
- data/lib/generators/effective_learndash/install_generator.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6eb2371d420ae282aecca6fe59883224b3102dd09d202f56be75180765b65ff3
|
4
|
+
data.tar.gz: 9e95e8974c3756bc92b844c8545e8ab10b68dd3e2bc7e8c08755b28c99db886f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a3b8229756fc75a69b03f0934a4eb7f8da253fc17cf37b6cf19d126d1999f3e145f2a10a74d3db4eb16f5752d8b324c18a9031827fb273b3249f0dc146236945
|
7
|
+
data.tar.gz: 101dd24f148d4356471482ac13ec54dab698e2690c368a10bf98e0672a6c3899623f2eff7ea6a5d026143c17f62d5ad5aea667eb94284c40bdf43c2aabf00769
|
data/MIT-LICENSE
CHANGED
@@ -14,9 +14,9 @@ module Admin
|
|
14
14
|
time_ago_in_words(enrollment.last_synced_at) + ' ago'
|
15
15
|
end
|
16
16
|
|
17
|
-
col :owner
|
18
|
-
col :learndash_course
|
17
|
+
col :owner, visible: attributes[:learndash_user_id].blank?
|
19
18
|
col :learndash_user
|
19
|
+
col :learndash_course
|
20
20
|
|
21
21
|
col :progress_status
|
22
22
|
|
@@ -1,11 +1,5 @@
|
|
1
|
-
# Dashboard Courses
|
2
|
-
class
|
3
|
-
filters do
|
4
|
-
# Registerable should be first here, so when displayed as a simple datatable on the dashboard they only see registerable courses
|
5
|
-
scope :registerable
|
6
|
-
scope :all
|
7
|
-
end
|
8
|
-
|
1
|
+
# Dashboard Available Courses
|
2
|
+
class EffectiveLearndashAvailableCoursesDatatable < Effective::Datatable
|
9
3
|
datatable do
|
10
4
|
order :title
|
11
5
|
col :id, visible: false
|
@@ -24,7 +18,10 @@ class EffectiveLearndashCoursesDatatable < Effective::Datatable
|
|
24
18
|
end
|
25
19
|
|
26
20
|
collection do
|
27
|
-
Effective::
|
21
|
+
enrolled = Effective::LearndashEnrollment.where(learndash_user: current_user.learndash_user).select(:learndash_course_id)
|
22
|
+
courses = Effective::LearndashCourse.deep.registerable.learndash_courses(user: current_user)
|
23
|
+
|
24
|
+
courses.where.not(id: enrolled)
|
28
25
|
end
|
29
26
|
|
30
27
|
end
|
@@ -43,6 +43,22 @@ module EffectiveLearndashOwner
|
|
43
43
|
learndash_users.first
|
44
44
|
end
|
45
45
|
|
46
|
+
def in_progress_learndash_enrollments
|
47
|
+
learndash_enrollments.reject(&:completed?).sort_by(&:created_at)
|
48
|
+
end
|
49
|
+
|
50
|
+
def completed_learndash_enrollments
|
51
|
+
learndash_enrollments.select(&:completed?).sort_by(&:date_completed)
|
52
|
+
end
|
53
|
+
|
54
|
+
def completed_learndash_courses
|
55
|
+
learndash_enrollments.select(&:completed?).map(&:course).sort_by(&:id)
|
56
|
+
end
|
57
|
+
|
58
|
+
def learndash_enrolled_courses
|
59
|
+
learndash_enrollments.map { |enrollment| enrollment.learndash_course }
|
60
|
+
end
|
61
|
+
|
46
62
|
# Find or create
|
47
63
|
def create_learndash_user
|
48
64
|
learndash_user || learndash_users.create!(owner: self)
|
@@ -67,11 +83,48 @@ module EffectiveLearndashOwner
|
|
67
83
|
return false if enrollment.blank?
|
68
84
|
|
69
85
|
# Return completed right away if previously marked completed
|
70
|
-
return true if enrollment.completed?
|
71
|
-
|
72
|
-
# Check the API
|
73
|
-
enrollment.refresh!
|
74
86
|
enrollment.completed?
|
87
|
+
|
88
|
+
# DO NOT check API
|
89
|
+
end
|
90
|
+
|
91
|
+
def learndash_enroll!(courses:)
|
92
|
+
courses = Array(courses)
|
93
|
+
|
94
|
+
# Find or create the user
|
95
|
+
create_learndash_user
|
96
|
+
raise('expected a persisted learndash user') unless learndash_user&.persisted?
|
97
|
+
|
98
|
+
courses.each do |course|
|
99
|
+
# Find or Enroll in the course
|
100
|
+
create_learndash_enrollment(course: course)
|
101
|
+
raise('expected a persisted learndash enrollment') unless learndash_enrollment(course: course)&.persisted?
|
102
|
+
end
|
103
|
+
|
104
|
+
# This syncs the learndash enrollment locally
|
105
|
+
learndash_enrollments.select { |enrollment| courses.include?(enrollment.learndash_course) }.each do |enrollment|
|
106
|
+
enrollment.refresh! unless enrollment.completed?
|
107
|
+
end
|
108
|
+
|
109
|
+
save!
|
110
|
+
|
111
|
+
after_learndash_enroll() if respond_to?(:after_learndash_enroll)
|
112
|
+
|
113
|
+
true
|
114
|
+
end
|
115
|
+
|
116
|
+
def learndash_refresh!(force: false)
|
117
|
+
raise('expected a previously persisted learndash user') if learndash_user.blank?
|
118
|
+
|
119
|
+
learndash_enrollments.each do |enrollment|
|
120
|
+
enrollment.refresh!(force: force) unless (force || enrollment.completed?)
|
121
|
+
end
|
122
|
+
|
123
|
+
save!
|
124
|
+
|
125
|
+
after_learndash_refresh() if respond_to?(:after_learndash_refresh)
|
126
|
+
|
127
|
+
true
|
75
128
|
end
|
76
129
|
|
77
130
|
end
|
@@ -8,7 +8,9 @@ module Effective
|
|
8
8
|
|
9
9
|
log_changes(to: :learndash_course, except: [:last_synced_at]) if respond_to?(:log_changes)
|
10
10
|
|
11
|
-
|
11
|
+
# Only admin can mark finished
|
12
|
+
# Finished is treated as an admin override for completed?
|
13
|
+
PROGRESS_STATUSES = ['not-started', 'in-progress', 'completed', 'finished']
|
12
14
|
|
13
15
|
effective_resource do
|
14
16
|
last_synced_at :string
|
@@ -26,7 +28,7 @@ module Effective
|
|
26
28
|
timestamps
|
27
29
|
end
|
28
30
|
|
29
|
-
scope :completed, -> { where(progress_status: 'completed') }
|
31
|
+
scope :completed, -> { where(progress_status: ['completed', 'finished']) }
|
30
32
|
scope :in_progress, -> { where(progress_status: 'in-progress') }
|
31
33
|
scope :not_started, -> { where(progress_status: 'not-started') }
|
32
34
|
|
@@ -61,8 +63,35 @@ module Effective
|
|
61
63
|
progress_status == 'in-progress'
|
62
64
|
end
|
63
65
|
|
66
|
+
# Admin override to completed
|
67
|
+
def finished?
|
68
|
+
progress_status == 'finished'
|
69
|
+
end
|
70
|
+
|
71
|
+
# Checked to see if the course is done throughout
|
64
72
|
def completed?
|
65
|
-
progress_status == 'completed'
|
73
|
+
progress_status == 'completed' || finished?
|
74
|
+
end
|
75
|
+
|
76
|
+
def completed_on
|
77
|
+
date_completed || (created_at if finished?)
|
78
|
+
end
|
79
|
+
|
80
|
+
def mark_as_finished!
|
81
|
+
update!(progress_status: 'finished')
|
82
|
+
end
|
83
|
+
|
84
|
+
# Guess old status
|
85
|
+
def unfinish!
|
86
|
+
if date_completed.present?
|
87
|
+
assign_attributes(progress_status: 'completed')
|
88
|
+
elsif date_started.present?
|
89
|
+
assign_attributes(progress_status: 'in-progress')
|
90
|
+
else
|
91
|
+
assign_attributes(progress_status: 'not-started')
|
92
|
+
end
|
93
|
+
|
94
|
+
save!
|
66
95
|
end
|
67
96
|
|
68
97
|
def refresh!(force: false)
|
@@ -79,13 +108,16 @@ module Effective
|
|
79
108
|
|
80
109
|
assign_attributes(
|
81
110
|
last_synced_at: Time.zone.now,
|
82
|
-
progress_status: data[:progress_status],
|
83
111
|
last_step: data[:last_step],
|
84
112
|
steps_completed: data[:steps_completed],
|
85
113
|
steps_total: data[:steps_total],
|
86
114
|
date_started: Time.use_zone('UTC') { Time.zone.parse(data[:date_started]) },
|
87
115
|
date_completed: (Time.use_zone('UTC') { Time.zone.parse(data[:date_completed]) } if data[:date_completed].present?)
|
88
116
|
)
|
117
|
+
|
118
|
+
assign_attributes(progress_status: data[:progress_status]) unless finished?
|
119
|
+
|
120
|
+
true
|
89
121
|
end
|
90
122
|
|
91
123
|
end
|
@@ -8,6 +8,7 @@
|
|
8
8
|
%p Click the New button from the below table to enroll a user into this course.
|
9
9
|
%p Enrolling a user here will enroll them on the LearnDash site.
|
10
10
|
%p Alternately, if this course is available for registration, the enrollment will be created upon registration purchase.
|
11
|
+
%p Marking the course finished will allow them to proceed without completing the course on the Learndash LMS.
|
11
12
|
|
12
13
|
- datatable = Admin::EffectiveLearndashEnrollmentsDatatable.new(learndash_course: learndash_course)
|
13
14
|
= render_datatable(datatable, inline: true)
|
@@ -21,7 +21,10 @@
|
|
21
21
|
|
22
22
|
%h3 LearnDash Course Enrollments
|
23
23
|
|
24
|
-
%p
|
24
|
+
%p
|
25
|
+
Click the New button from the below table to manually enroll this user into a new course.
|
26
|
+
%br
|
27
|
+
%small.text-muted Marking the course finished will allow them to proceed without completing the course on the Learndash LMS.
|
25
28
|
|
26
29
|
- datatable = Admin::EffectiveLearndashEnrollmentsDatatable.new(learndash_user: learndash_user)
|
27
30
|
= render_datatable(datatable, inline: true)
|
@@ -1,12 +1,13 @@
|
|
1
1
|
- learndash_user = current_user.try(:learndash_user)
|
2
|
-
-
|
2
|
+
- authorized_user = learndash_user && EffectiveResources.authorized?(self, :show, learndash_user)
|
3
|
+
- authorized_registration = EffectiveResources.authorized?(self, :new, EffectiveLearndash.CourseRegistration)
|
3
4
|
|
4
5
|
%h2 Courses
|
5
6
|
|
6
7
|
- if learndash_user.blank?
|
7
8
|
%p You do not have an account to access courses. When you are enrolled in a course, your account credentials will be displayed here.
|
8
9
|
|
9
|
-
- if learndash_user.present? &&
|
10
|
+
- if learndash_user.present? && authorized_user
|
10
11
|
- learndash_user.refresh!
|
11
12
|
|
12
13
|
%p Your course account credentials are:
|
@@ -22,8 +23,15 @@
|
|
22
23
|
%p= link_to('Sign in to your course account', EffectiveLearndash.learndash_url, target: '_blank', class: 'btn btn-primary')
|
23
24
|
|
24
25
|
- if learndash_user.learndash_enrollments.present?
|
26
|
+
%p You are enrolled in the following courses:
|
25
27
|
- datatable = EffectiveResources.best('EffectiveLearndashEnrollmentsDatatable').new(self)
|
26
28
|
= render_datatable(datatable, simple: true)
|
27
29
|
|
28
30
|
- else
|
29
31
|
%p You are not enrolled in any courses.
|
32
|
+
|
33
|
+
- available = EffectiveResources.best('EffectiveLearndashAvailableCoursesDatatable').new(self)
|
34
|
+
|
35
|
+
- if available.present? && authorized_registration
|
36
|
+
%p The following courses are available for registration:
|
37
|
+
= render_datatable(available, simple: true)
|
data/config/routes.rb
CHANGED
@@ -23,6 +23,8 @@ EffectiveLearndash::Engine.routes.draw do
|
|
23
23
|
|
24
24
|
resources :learndash_enrollments, only: [:index, :new, :create, :update] do
|
25
25
|
post :refresh, on: :member
|
26
|
+
post :mark_as_finished, on: :member
|
27
|
+
post :unfinish, on: :member
|
26
28
|
end
|
27
29
|
|
28
30
|
resources :learndash_courses, only: [:index, :edit, :update] do
|
@@ -20,7 +20,7 @@ module EffectiveLearndash
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def create_migration_file
|
23
|
-
migration_template ('../' * 3) + 'db/migrate/
|
23
|
+
migration_template ('../' * 3) + 'db/migrate/101_create_effective_learndash.rb', 'db/migrate/create_effective_learndash.rb'
|
24
24
|
end
|
25
25
|
|
26
26
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: effective_learndash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Code and Effect
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -191,7 +191,7 @@ files:
|
|
191
191
|
- app/datatables/admin/effective_learndash_users_datatable.rb
|
192
192
|
- app/datatables/effective_course_registrants_datatable.rb
|
193
193
|
- app/datatables/effective_course_registrations_datatable.rb
|
194
|
-
- app/datatables/
|
194
|
+
- app/datatables/effective_learndash_available_courses_datatable.rb
|
195
195
|
- app/datatables/effective_learndash_enrollments_datatable.rb
|
196
196
|
- app/helpers/effective_learndash_helper.rb
|
197
197
|
- app/models/concerns/effective_learndash_course_registration.rb
|
@@ -229,7 +229,7 @@ files:
|
|
229
229
|
- app/views/effective/learndash_courses/show.html.haml
|
230
230
|
- config/effective_learndash.rb
|
231
231
|
- config/routes.rb
|
232
|
-
- db/migrate/
|
232
|
+
- db/migrate/101_create_effective_learndash.rb
|
233
233
|
- db/seeds.rb
|
234
234
|
- lib/effective_learndash.rb
|
235
235
|
- lib/effective_learndash/engine.rb
|
@@ -256,7 +256,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
256
256
|
- !ruby/object:Gem::Version
|
257
257
|
version: '0'
|
258
258
|
requirements: []
|
259
|
-
rubygems_version: 3.
|
259
|
+
rubygems_version: 3.3.7
|
260
260
|
signing_key:
|
261
261
|
specification_version: 4
|
262
262
|
summary: Create Wordpress users and read LearnDash course progress
|