Class: Effective::LearndashEnrollment

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/effective/learndash_enrollment.rb

Constant Summary collapse

PROGRESS_STATUSES =

Only admin can mark finished Finished is treated as an admin override for completed?

['not-started', 'in-progress', 'completed', 'finished']

Instance Method Summary collapse

Instance Method Details

#assign_api_attributes(data = nil) ⇒ Object



106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'app/models/effective/learndash_enrollment.rb', line 106

def assign_api_attributes(data = nil)
  data ||= EffectiveLearndash.api.find_enrollment(self) || EffectiveLearndash.api.create_enrollment(self)

  assign_attributes(
    last_synced_at: Time.zone.now,
    last_step: data[:last_step],
    steps_completed: data[:steps_completed],
    steps_total: data[:steps_total],
    date_started: Time.use_zone('UTC') { Time.zone.parse(data[:date_started]) },
    date_completed: (Time.use_zone('UTC') { Time.zone.parse(data[:date_completed]) } if data[:date_completed].present?)
  )

  assign_attributes(progress_status: data[:progress_status]) unless finished?

  true
end

#completed?Boolean

Checked to see if the course is done throughout

Returns:

  • (Boolean)


72
73
74
# File 'app/models/effective/learndash_enrollment.rb', line 72

def completed?
  progress_status == 'completed' || finished?
end

#completed_onObject



76
77
78
# File 'app/models/effective/learndash_enrollment.rb', line 76

def completed_on
  date_completed || (created_at if finished?)
end

#finished?Boolean

Admin override to completed

Returns:

  • (Boolean)


67
68
69
# File 'app/models/effective/learndash_enrollment.rb', line 67

def finished?
  progress_status == 'finished'
end

#in_progress?Boolean

Returns:

  • (Boolean)


62
63
64
# File 'app/models/effective/learndash_enrollment.rb', line 62

def in_progress?
  progress_status == 'in-progress'
end

#mark_as_finished!Object



80
81
82
# File 'app/models/effective/learndash_enrollment.rb', line 80

def mark_as_finished!
  update!(progress_status: 'finished')
end

#not_started?Boolean

Returns:

  • (Boolean)


58
59
60
# File 'app/models/effective/learndash_enrollment.rb', line 58

def not_started?
  progress_status == 'not-started'
end

#refresh!(force: false) ⇒ Object



97
98
99
100
101
102
103
104
# File 'app/models/effective/learndash_enrollment.rb', line 97

def refresh!(force: false)
  unless force
    return if last_synced_at.present? && (Time.zone.now - last_synced_at) < 5
  end

  assign_api_attributes
  save!
end

#reportable_scopesObject

effective_reports



39
40
41
# File 'app/models/effective/learndash_enrollment.rb', line 39

def reportable_scopes
  { completed: nil, in_progress: nil, not_started: nil }
end

#to_sObject



54
55
56
# File 'app/models/effective/learndash_enrollment.rb', line 54

def to_s
  persisted? ? "#{learndash_user} #{learndash_course}" : 'learndash enrollment'
end

#unfinish!Object

Guess old status



85
86
87
88
89
90
91
92
93
94
95
# File 'app/models/effective/learndash_enrollment.rb', line 85

def unfinish!
  if date_completed.present?
    assign_attributes(progress_status: 'completed')
  elsif date_started.present?
    assign_attributes(progress_status: 'in-progress')
  else
    assign_attributes(progress_status: 'not-started')
  end

  save!
end