Skip to content

Commit 2054845

Browse files
Session: Add configuration setting 'scheduled_announcements_use_base_progress' for scheduled session announcement - by progress (#6013)
Author: juancpbinario <juan.cortizas@almabinaria.com>
1 parent e630ede commit 2054845

File tree

3 files changed

+113
-2
lines changed

3 files changed

+113
-2
lines changed

main/inc/lib/ScheduledAnnouncement.php

Lines changed: 97 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,26 @@ public function returnSimpleForm($id, $url, $action, $sessionInfo = [])
112112

113113
$form->addHidden('session_id', $sessionInfo['id']);
114114
$form->addDateTimePicker('date', get_lang('Date'));
115+
116+
$useBaseProgress = api_get_configuration_value('scheduled_announcements_use_base_progress');
117+
if ($useBaseProgress) {
118+
$extraFieldValue = new ExtraFieldValue('scheduled_announcement');
119+
$baseProgress = $extraFieldValue->get_values_by_handler_and_field_variable(
120+
$id,
121+
'use_base_progress'
122+
);
123+
$form->addNumeric ('progress',
124+
get_lang('Progress'),
125+
[
126+
'step' => 1,
127+
'min' => 1,
128+
'max' => 100,
129+
'value' => $baseProgress['value'],
130+
],
131+
true
132+
);
133+
}
134+
115135
$form->addText('subject', get_lang('Subject'));
116136
$form->addHtmlEditor('message', get_lang('Message'));
117137

@@ -185,6 +205,11 @@ public function returnForm($url, $action, $sessionInfo = [])
185205
$typeOptions['base_date'] = get_lang('BaseDate');
186206
}
187207

208+
$useBaseProgress = api_get_configuration_value('scheduled_announcements_use_base_progress');
209+
if ($useBaseProgress) {
210+
$typeOptions['base_progress'] = get_lang('BaseProgress');
211+
}
212+
188213
$form->addSelect(
189214
'type',
190215
get_lang('Type'),
@@ -194,16 +219,36 @@ public function returnForm($url, $action, $sessionInfo = [])
194219
if (this.options[this.selectedIndex].value == 'base_date') {
195220
document.getElementById('options').style.display = 'block';
196221
document.getElementById('specific_date').style.display = 'none';
197-
} else {
222+
document.getElementById('base_progress').style.display = 'none';
223+
} else if (this.options[this.selectedIndex].value == 'specific_date') {
198224
document.getElementById('options').style.display = 'none';
199225
document.getElementById('specific_date').style.display = 'block';
226+
document.getElementById('base_progress').style.display = 'none';
227+
} else {
228+
document.getElementById('options').style.display = 'block';
229+
document.getElementById('specific_date').style.display = 'none';
230+
document.getElementById('base_progress').style.display = 'block';
200231
}
201232
", ]
202233
);
203234

204235
$form->addHtml('<div id="specific_date">');
205236
$form->addDateTimePicker('date', get_lang('Date'));
206237
$form->addHtml('</div>');
238+
239+
$form->addHtml('<div id="base_progress" style="display:none">');
240+
$form->addNumeric ('progress',
241+
get_lang('Progress'),
242+
[
243+
'step' => 1,
244+
'min' => 1,
245+
'max' => 100,
246+
'value' => 100,
247+
],
248+
true
249+
);
250+
$form->addHtml('</div>');
251+
207252
$form->addHtml('<div id="options" style="display:none">');
208253

209254
$startDate = $sessionInfo['access_start_date'];
@@ -344,7 +389,19 @@ public function sendPendingMessages($urlId = 0)
344389
$coachList = array_unique($coachList);
345390
}
346391

347-
$this->update(['id' => $result['id'], 'sent' => 1]);
392+
$useBaseProgress = api_get_configuration_value('scheduled_announcements_use_base_progress');
393+
if ($useBaseProgress) {
394+
$baseProgress = $extraFieldValue->get_values_by_handler_and_field_variable(
395+
$result['id'],
396+
'use_base_progress'
397+
);
398+
if (empty($baseProgress) || empty($baseProgress['value']) || $baseProgress['value'] < 1) {
399+
$this->update(['id' => $result['id'], 'sent' => 1]);
400+
}
401+
} else {
402+
$this->update(['id' => $result['id'], 'sent' => 1]);
403+
}
404+
348405
$attachments = $this->getAttachmentToString($result['id']);
349406
$subject = $result['subject'];
350407

@@ -371,6 +428,44 @@ public function sendPendingMessages($urlId = 0)
371428
);
372429
}
373430

431+
if ($useBaseProgress) {
432+
$baseProgress = $extraFieldValue->get_values_by_handler_and_field_variable(
433+
$result['id'],
434+
'use_base_progress'
435+
);
436+
if (!empty($baseProgress) && !empty($baseProgress['value']) && $baseProgress['value'] >= 1) {
437+
if ((is_numeric($progress) && $progress > $baseProgress['value']) || !is_numeric($progress)) {
438+
continue;
439+
} else {
440+
$comment = json_decode($baseProgress['comment'], true);
441+
if ($comment !== null && is_array($comment)) {
442+
if (isset($comment['sended']) && is_array($comment['sended'])) {
443+
$userFound = false;
444+
foreach ($comment['sended'] as $item) {
445+
if (isset($item['user']) && $item['user'] === $user['user_id']) {
446+
$userFound = true;
447+
break;
448+
}
449+
}
450+
if ($userFound) {
451+
continue;
452+
} else {
453+
$comment['sended'][] = ['user' => $user['user_id'], 'send_date' => time(), 'progress_user' => $progress, 'progress_mark' => $baseProgress['value']];
454+
$newExtraFieldParams = $baseProgress;
455+
$newExtraFieldParams['comment'] = json_encode($comment);
456+
$extraFieldValue->save($newExtraFieldParams);
457+
}
458+
}
459+
} else {
460+
$comment['sended'][] = ['user' => $user['user_id'], 'send_date' => time(), 'progress_user' => $progress, 'progress_mark' => $baseProgress['value']];
461+
$newExtraFieldParams = $baseProgress;
462+
$newExtraFieldParams['comment'] = json_encode($comment);
463+
$extraFieldValue->save($newExtraFieldParams);
464+
}
465+
}
466+
}
467+
}
468+
374469
if (is_numeric($progress)) {
375470
$progress = $progress.'%';
376471
} else {

main/install/configuration.dist.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -711,6 +711,9 @@
711711
'admin2@example.com',
712712
]
713713
];*/
714+
// Add a new type of scheduled announcement, based on user course session progress
715+
// Requires a "use_base_progress" extra field in: main/admin/extra_fields.php?type=scheduled_announcement&action=add
716+
//$_configuration['scheduled_announcements_use_base_progress'] = false;
714717
// Allow ticket projects to be access by specific chamilo roles
715718
/*$_configuration['ticket_project_user_roles'] = [
716719
'permissions' => [

main/session/scheduled_announcement.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
$values = $form->getSubmitValues();
6363
switch ($values['type']) {
6464
case 'base_date':
65+
case 'base_progress':
6566
$numberDays = (int) $values['days'];
6667
switch ($values['base_date']) {
6768
case 'start_date':
@@ -81,6 +82,11 @@
8182
break;
8283
}
8384
$values['date'] = $newDate->format('Y-m-d h:i:s');
85+
86+
if ($values['type'] == 'base_progress') {
87+
$values['extra_use_base_progress'] = $values['progress'];
88+
}
89+
8490
break;
8591
case 'specific_date':
8692
$values['date'] = api_get_utc_datetime($values['date']);
@@ -131,7 +137,14 @@
131137
$values['date'] = api_get_utc_datetime($values['date']);
132138
$res = $object->update($values);
133139

140+
$values['extra_use_base_progress'] = $values['progress'];
134141
$extraFieldValue = new ExtraFieldValue('scheduled_announcement');
142+
$baseProgress = $extraFieldValue->get_values_by_handler_and_field_variable(
143+
$id,
144+
'use_base_progress'
145+
);
146+
$values['extra_use_base_progress_comment'] = $baseProgress["comment"];
147+
135148
$values['item_id'] = $id;
136149
$extraFieldValue->saveFieldValues($values);
137150

0 commit comments

Comments
 (0)