think_feel_do_engine 3.19.6 → 3.19.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/think_feel_do_engine/bit_maker/content_providers_controller.rb +9 -9
- data/app/controllers/think_feel_do_engine/manage/tasks_controller.rb +3 -3
- data/app/helpers/think_feel_do_engine/coach/patient_dashboard_helper.rb +3 -3
- data/app/helpers/think_feel_do_engine/tasks_helper.rb +1 -1
- data/app/mailers/think_feel_do_engine/message_notifications.rb +2 -2
- data/app/models/arm.rb +2 -2
- data/app/models/concerns/accessibility.rb +1 -1
- data/app/models/concerns/copier.rb +2 -1
- data/app/models/content_providers/awake_period_form.rb +8 -4
- data/app/models/content_providers/module_index_provider.rb +2 -2
- data/app/models/content_providers/show_message_provider.rb +2 -2
- data/app/models/content_providers/your_activities_provider.rb +5 -3
- data/app/models/group_metrics/weekly_count.rb +1 -1
- data/app/models/media_access_event.rb +2 -2
- data/app/models/membership.rb +13 -13
- data/app/models/message.rb +1 -1
- data/app/models/participant.rb +3 -3
- data/app/models/participant_metrics/weekly_count.rb +1 -1
- data/app/models/phq_stepping.rb +1 -1
- data/app/models/phq_stepping_assessment.rb +2 -2
- data/app/models/task_status.rb +1 -1
- data/app/models/think_feel_do_engine/reports/reporter.rb +2 -0
- data/app/models/think_feel_do_engine/reports/video_session.rb +1 -2
- data/app/models/tool_nav_item.rb +3 -3
- data/app/presenters/think_feel_do_engine/media_access_event_presenter.rb +2 -1
- data/app/views/think_feel_do_engine/activities/past_activity_form.html.erb +1 -1
- data/lib/think_feel_do_engine/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae2ac67360cf4936becc3201ca3116aa5a2746a6
|
4
|
+
data.tar.gz: 6014a2de830f98bd3a06736f46b528184bd8e185
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab49783f7ad4d0feaa1693cd618dcd4157eca182b13f51e2569a37f881f3e3f28fe8ea6917b61d1d5abab8928de922f2c35cbe9554625dd3aa1bec29adc45da1
|
7
|
+
data.tar.gz: 64611db3bd1672d9607c30d6fd26ecbe41647af500c1837ea23fa8ccae031b43e2aff6bc7523200b89cd0ef6ca299c1c1f60fd86961e80fd85b3cd44cb7c6610
|
@@ -9,7 +9,7 @@ module ThinkFeelDoEngine
|
|
9
9
|
before_action :authenticate_user!, :set_arm,
|
10
10
|
:set_content_modules, :set_slideshows
|
11
11
|
|
12
|
-
PROVIDER_NOT_FOUND = "
|
12
|
+
PROVIDER_NOT_FOUND = "Unable to find Content Provider"
|
13
13
|
|
14
14
|
def index
|
15
15
|
authorize! :index, BitCore::ContentProvider
|
@@ -18,14 +18,11 @@ module ThinkFeelDoEngine
|
|
18
18
|
|
19
19
|
def show
|
20
20
|
authorize! :show, BitCore::ContentProvider
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
27
|
-
rescue ActiveRecord::RecordNotFound
|
28
|
-
redirect_to main_app.root_path, alert: PROVIDER_NOT_FOUND
|
21
|
+
|
22
|
+
@content_provider = find_content_provider
|
23
|
+
if @content_provider.is_a?(BitCore::ContentProvider) &&
|
24
|
+
@content_provider.source_content_id
|
25
|
+
@slideshow = @content_provider.source_content
|
29
26
|
end
|
30
27
|
end
|
31
28
|
|
@@ -92,6 +89,9 @@ module ThinkFeelDoEngine
|
|
92
89
|
|
93
90
|
def find_content_provider
|
94
91
|
ContentProviderDecorator.fetch(params[:id])
|
92
|
+
rescue ActiveRecord::RecordNotFound
|
93
|
+
redirect_to arm_bit_maker_content_providers_url(@arm),
|
94
|
+
alert: PROVIDER_NOT_FOUND
|
95
95
|
end
|
96
96
|
|
97
97
|
def content_provider_params
|
@@ -30,13 +30,13 @@ module ThinkFeelDoEngine
|
|
30
30
|
authorize! :destroy, @task
|
31
31
|
group = @task.group
|
32
32
|
if @task.complete_participant_list.present?
|
33
|
-
flash
|
33
|
+
flash[:alert] = "Unable to delete task from group, "\
|
34
34
|
"at least one related task status is complete."
|
35
35
|
elsif @task.destroy
|
36
|
-
flash
|
36
|
+
flash[:success] = "Task unassigned from group."
|
37
37
|
else
|
38
38
|
errors = @task.errors.full_messages.join(", ")
|
39
|
-
flash[:
|
39
|
+
flash[:alert] = "Unable to delete task from group: #{ errors }"
|
40
40
|
end
|
41
41
|
redirect_to arm_manage_tasks_group_path(group.arm, group)
|
42
42
|
end
|
@@ -30,13 +30,13 @@ module ThinkFeelDoEngine
|
|
30
30
|
|
31
31
|
def activities_planned_today(participant)
|
32
32
|
participant
|
33
|
-
.activities.planned.created_for_day(
|
33
|
+
.activities.planned.created_for_day(Time.zone.today).count +
|
34
34
|
participant
|
35
35
|
.activities
|
36
|
-
.reviewed_and_complete.created_for_day(
|
36
|
+
.reviewed_and_complete.created_for_day(Time.zone.today).count +
|
37
37
|
participant
|
38
38
|
.activities
|
39
|
-
.reviewed_and_incomplete.created_for_day(
|
39
|
+
.reviewed_and_incomplete.created_for_day(Time.zone.today).count
|
40
40
|
end
|
41
41
|
|
42
42
|
def activities_planned_7_day(participant)
|
@@ -5,7 +5,7 @@ module ThinkFeelDoEngine
|
|
5
5
|
application_name = I18n.t(:application_name, default: "ThinkFeelDo")
|
6
6
|
@group = group
|
7
7
|
mail to: coach.email,
|
8
|
-
subject: "#{application_name}:
|
8
|
+
subject: "#{application_name}: You have a new message"
|
9
9
|
end
|
10
10
|
|
11
11
|
def new_for_participant(participant)
|
@@ -17,7 +17,7 @@ module ThinkFeelDoEngine
|
|
17
17
|
.find_by_type("Tools::Messages")
|
18
18
|
.title
|
19
19
|
mail to: participant.email,
|
20
|
-
subject: "#{application_name}:
|
20
|
+
subject: "#{application_name}: You have a new message"
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
data/app/models/arm.rb
CHANGED
@@ -22,7 +22,7 @@ class Arm < ActiveRecord::Base
|
|
22
22
|
intervention utilizes social features or the \
|
23
23
|
participant is currently enrolled in an arm that \
|
24
24
|
requires a display name."
|
25
|
-
|
25
|
+
)
|
26
26
|
false
|
27
27
|
else
|
28
28
|
true
|
@@ -42,6 +42,6 @@ class Arm < ActiveRecord::Base
|
|
42
42
|
bit_core_tools
|
43
43
|
.where(tools[:type].eq(nil)
|
44
44
|
.or(tools[:type].not_eq("Tools::Home"))
|
45
|
-
|
45
|
+
)
|
46
46
|
end
|
47
47
|
end
|
@@ -55,7 +55,8 @@ module Concerns
|
|
55
55
|
|
56
56
|
def copy_content_modules_to(new_tool:)
|
57
57
|
ContentModule.transaction do
|
58
|
-
content_modules.where(type: LESSON_MODULE)
|
58
|
+
content_modules.where(type: LESSON_MODULE)
|
59
|
+
.find_each do |content_module|
|
59
60
|
content_module.copy_content_providers_to(
|
60
61
|
new_tool: new_tool)
|
61
62
|
end
|
@@ -43,13 +43,15 @@ module ContentProviders
|
|
43
43
|
def wake_up_range(last_awake_time)
|
44
44
|
start_time = [
|
45
45
|
# 1 hour after last going to sleep
|
46
|
-
last_awake_time ? (last_awake_time.end_time + 1.hour) : Time.at(0),
|
46
|
+
last_awake_time ? (last_awake_time.end_time + 1.hour) : Time.zone.at(0),
|
47
47
|
# 12am yesterday
|
48
48
|
(Time.current - 1.day).at_beginning_of_day
|
49
49
|
].max
|
50
50
|
end_time = Time.current - 2.hours
|
51
51
|
|
52
|
-
(start_time.to_i..end_time.to_i).step(1.hour).to_a.map
|
52
|
+
(start_time.to_i..end_time.to_i).step(1.hour).to_a.map do |t|
|
53
|
+
Time.zone.at(t)
|
54
|
+
end
|
53
55
|
end
|
54
56
|
|
55
57
|
def go_to_sleep_range(last_awake_time)
|
@@ -57,11 +59,13 @@ module ContentProviders
|
|
57
59
|
# 1am yesterday
|
58
60
|
(Time.current - 1.day).at_beginning_of_day + 1.hour,
|
59
61
|
# 2 hours after last going to sleep
|
60
|
-
last_awake_time ? (last_awake_time.end_time + 2.hours) : Time.at(0)
|
62
|
+
last_awake_time ? (last_awake_time.end_time + 2.hours) : Time.zone.at(0)
|
61
63
|
].max
|
62
64
|
end_time = Time.current - 1.hour
|
63
65
|
|
64
|
-
(start_time.to_i..end_time.to_i).step(1.hour).to_a.map
|
66
|
+
(start_time.to_i..end_time.to_i).step(1.hour).to_a.map do |t|
|
67
|
+
Time.zone.at(t)
|
68
|
+
end
|
65
69
|
end
|
66
70
|
end
|
67
71
|
end
|
@@ -32,9 +32,9 @@ module ContentProviders
|
|
32
32
|
AvailableContentModule
|
33
33
|
.for_participant(options.participant)
|
34
34
|
.for_tool(tool)
|
35
|
-
.available_by(
|
35
|
+
.available_by(Time.zone.today)
|
36
36
|
.excludes_module(bit_core_content_module_id)
|
37
|
-
.is_not_terminated_on(
|
37
|
+
.is_not_terminated_on(Time.zone.today)
|
38
38
|
.latest_duplicate
|
39
39
|
end
|
40
40
|
end
|
@@ -51,10 +51,10 @@ module ContentProviders
|
|
51
51
|
|
52
52
|
received_message =
|
53
53
|
participant.received_messages
|
54
|
-
.
|
54
|
+
.find_by(message_id: view_context.params[:message_id])
|
55
55
|
sent_message =
|
56
56
|
participant.messages
|
57
|
-
.
|
57
|
+
.find_by(id: view_context.params[:message_id])
|
58
58
|
|
59
59
|
received_message || sent_message
|
60
60
|
end
|
@@ -78,14 +78,16 @@ module ContentProviders
|
|
78
78
|
|
79
79
|
# dates with scheduled activities formatted for jquery datepicker
|
80
80
|
def collect_dates_with_activities(options)
|
81
|
-
past_activities(options).where("start_time <= ?", Time.now)
|
81
|
+
past_activities(options).where("start_time <= ?", Time.zone.now)
|
82
82
|
.uniq
|
83
83
|
.map { |activity| activity.start_time.to_date.strftime("%Y-%m-%d") }
|
84
84
|
end
|
85
85
|
|
86
86
|
def local_time(options)
|
87
|
-
|
88
|
-
|
87
|
+
date = options.view_context.params[:date]
|
88
|
+
|
89
|
+
if date
|
90
|
+
Time.zone.parse(date)
|
89
91
|
else
|
90
92
|
Time.zone.now
|
91
93
|
end
|
@@ -16,9 +16,9 @@ class MediaAccessEvent < ActiveRecord::Base
|
|
16
16
|
def task_release_day(group)
|
17
17
|
module_id = slide.slideshow.content_provider.bit_core_content_module_id
|
18
18
|
|
19
|
-
Task.
|
19
|
+
Task.find_by(
|
20
20
|
bit_core_content_module_id: module_id,
|
21
21
|
group_id: group.id
|
22
|
-
).
|
22
|
+
).release_day
|
23
23
|
end
|
24
24
|
end
|
data/app/models/membership.rb
CHANGED
@@ -33,16 +33,16 @@ class Membership < ActiveRecord::Base
|
|
33
33
|
|
34
34
|
scope :active, lambda {
|
35
35
|
where(
|
36
|
-
arel_table[:start_date].lteq(
|
37
|
-
.and(arel_table[:end_date].gteq(
|
36
|
+
arel_table[:start_date].lteq(Time.zone.today)
|
37
|
+
.and(arel_table[:end_date].gteq(Time.zone.today))
|
38
38
|
.or(arel_table[:is_complete].eq(true))
|
39
39
|
)
|
40
40
|
}
|
41
41
|
|
42
42
|
scope :inactive, lambda {
|
43
43
|
where(
|
44
|
-
arel_table[:start_date].gt(
|
45
|
-
.or(arel_table[:end_date].lt(
|
44
|
+
arel_table[:start_date].gt(Time.zone.today)
|
45
|
+
.or(arel_table[:end_date].lt(Time.zone.today))
|
46
46
|
)
|
47
47
|
}
|
48
48
|
|
@@ -80,7 +80,7 @@ class Membership < ActiveRecord::Base
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def day_in_study(date = nil)
|
83
|
-
((date ||
|
83
|
+
((date || Time.zone.today) - start_date).to_i + 1
|
84
84
|
end
|
85
85
|
|
86
86
|
def length_of_study
|
@@ -101,7 +101,7 @@ class Membership < ActiveRecord::Base
|
|
101
101
|
|
102
102
|
def flag_complete
|
103
103
|
self.is_complete = true
|
104
|
-
self.end_date =
|
104
|
+
self.end_date = 1.day.ago
|
105
105
|
|
106
106
|
save validate: false
|
107
107
|
end
|
@@ -122,9 +122,9 @@ class Membership < ActiveRecord::Base
|
|
122
122
|
participant
|
123
123
|
.participant_login_events
|
124
124
|
.where(participant_login_events[:created_at]
|
125
|
-
.gteq(
|
125
|
+
.gteq(Time.zone.today.beginning_of_day))
|
126
126
|
.where(participant_login_events[:created_at]
|
127
|
-
.lt(
|
127
|
+
.lt(Time.zone.today.end_of_day))
|
128
128
|
end
|
129
129
|
|
130
130
|
def lessons_read
|
@@ -151,13 +151,13 @@ class Membership < ActiveRecord::Base
|
|
151
151
|
def withdraw
|
152
152
|
return false unless valid?
|
153
153
|
|
154
|
-
update_column(:end_date,
|
154
|
+
update_column(:end_date, Time.zone.today - 1.day)
|
155
155
|
end
|
156
156
|
|
157
157
|
def discontinue
|
158
158
|
return false unless valid?
|
159
159
|
|
160
|
-
update_columns(end_date:
|
160
|
+
update_columns(end_date: Time.zone.today - 1.day, is_complete: true)
|
161
161
|
end
|
162
162
|
|
163
163
|
def week_start_day(week_number)
|
@@ -192,18 +192,18 @@ class Membership < ActiveRecord::Base
|
|
192
192
|
end
|
193
193
|
|
194
194
|
def not_complete_in_the_future
|
195
|
-
return unless end_date && end_date >
|
195
|
+
return unless end_date && end_date > Time.zone.today && is_complete == true
|
196
196
|
|
197
197
|
errors.add :is_complete, "cannot be set to true for end dates in the future"
|
198
198
|
end
|
199
199
|
|
200
200
|
def not_ending_in_the_past
|
201
|
-
return unless end_date && end_date_changed? && end_date <
|
201
|
+
return unless end_date && end_date_changed? && end_date < Time.zone.today
|
202
202
|
|
203
203
|
errors.add :end_date, "must not be in the past"
|
204
204
|
end
|
205
205
|
|
206
206
|
def start_date_with_zone
|
207
|
-
start_date.
|
207
|
+
Time.zone.local(start_date.year, start_date.month, start_date.day)
|
208
208
|
end
|
209
209
|
end
|
data/app/models/message.rb
CHANGED
data/app/models/participant.rb
CHANGED
@@ -276,8 +276,8 @@ class Participant < ActiveRecord::Base
|
|
276
276
|
end
|
277
277
|
|
278
278
|
def in_study?
|
279
|
-
if active_membership.start_date <=
|
280
|
-
active_membership.end_date >=
|
279
|
+
if active_membership.start_date <= Time.zone.today &&
|
280
|
+
active_membership.end_date >= Time.zone.today
|
281
281
|
true
|
282
282
|
else
|
283
283
|
false
|
@@ -293,7 +293,7 @@ class Participant < ActiveRecord::Base
|
|
293
293
|
def recent_period
|
294
294
|
@recent_period ||= (
|
295
295
|
# when no awake period return an empty set to allow chaining
|
296
|
-
now = Time.
|
296
|
+
now = Time.zone.now
|
297
297
|
start_time = recent_awake_period.try(:start_time) || now
|
298
298
|
end_time = recent_awake_period.try(:end_time) || now
|
299
299
|
|
@@ -18,7 +18,7 @@ module ParticipantMetrics
|
|
18
18
|
- memberships.start_date ) ) / 604800 ) + 1
|
19
19
|
)::int AS week, memberships.participant_id, COUNT(1)
|
20
20
|
SQL
|
21
|
-
|
21
|
+
)
|
22
22
|
.merge(Participant.not_moderator)
|
23
23
|
.merge(Membership.where(group_id: group_id))
|
24
24
|
.group("week, memberships.participant_id")
|
data/app/models/phq_stepping.rb
CHANGED
@@ -69,7 +69,7 @@ class PhqStepping
|
|
69
69
|
@skip_flag = [false]
|
70
70
|
@assessments = assessments
|
71
71
|
@study_start_date = study_start_date
|
72
|
-
@week = ((
|
72
|
+
@week = ((Time.zone.today + 1 - study_start_date).days / 1.week).ceil
|
73
73
|
@upper_limit = FIRST_PERIOD_STEPPING_CUTOFF
|
74
74
|
@upper_prev_limit = FIRST_PERIOD_STEPPING_CUTOFF
|
75
75
|
@lower_limit = DEFAULT_PERIOD_DISCONTINUE_CUTOFF
|
data/app/models/task_status.rb
CHANGED
@@ -30,9 +30,11 @@ module ThinkFeelDoEngine
|
|
30
30
|
|
31
31
|
def to_csv(csv = [])
|
32
32
|
csv << @collector.columns
|
33
|
+
# rubocop:disable Rails/FindEach
|
33
34
|
@collector.all.each do |s|
|
34
35
|
csv << @collector.columns.map { |c| s[c.to_sym] }
|
35
36
|
end
|
37
|
+
# rubocop:enable Rails/FindEach
|
36
38
|
end
|
37
39
|
|
38
40
|
private
|
@@ -14,8 +14,7 @@ module ThinkFeelDoEngine
|
|
14
14
|
provider_id = m ? m[1] : -1
|
15
15
|
position = m ? m[2] : -1
|
16
16
|
video = BitCore::ContentProvider
|
17
|
-
.
|
18
|
-
.first
|
17
|
+
.find_by(id: provider_id)
|
19
18
|
.try(:source_content)
|
20
19
|
.try(:slides)
|
21
20
|
.try(:find_by_position, position)
|
data/app/models/tool_nav_item.rb
CHANGED
@@ -41,7 +41,7 @@ class ToolNavItem
|
|
41
41
|
available_content_modules
|
42
42
|
.position_greater_than(1)
|
43
43
|
.is_not_viz
|
44
|
-
.available_by(
|
44
|
+
.available_by(Time.zone.today)
|
45
45
|
.order_by_position
|
46
46
|
.latest_duplicate
|
47
47
|
end
|
@@ -50,7 +50,7 @@ class ToolNavItem
|
|
50
50
|
available_content_modules
|
51
51
|
.is_not_viz
|
52
52
|
.is_not_completed
|
53
|
-
.available_on(
|
53
|
+
.available_on(Time.zone.today)
|
54
54
|
.exists?
|
55
55
|
end
|
56
56
|
|
@@ -60,6 +60,6 @@ class ToolNavItem
|
|
60
60
|
AvailableContentModule
|
61
61
|
.for_tool(@tool)
|
62
62
|
.for_participant(@participant)
|
63
|
-
.is_not_terminated_on(
|
63
|
+
.is_not_terminated_on(Time.zone.today)
|
64
64
|
end
|
65
65
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
<div id="past_activities_container">
|
4
4
|
<% timestamps.each_with_index do |timestamp, index| %>
|
5
|
-
<% start_time = Time.at(timestamp); end_time = start_time + 1.hour %>
|
5
|
+
<% start_time = Time.zone.at(timestamp); end_time = start_time + 1.hour %>
|
6
6
|
<%= form_for(
|
7
7
|
activity,
|
8
8
|
url: create_path,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: think_feel_do_engine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.19.
|
4
|
+
version: 3.19.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Carty-Fickes
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|