@@ -112,6 +112,26 @@ public function returnSimpleForm($id, $url, $action, $sessionInfo = [])
112
112
113
113
$ form ->addHidden ('session_id ' , $ sessionInfo ['id ' ]);
114
114
$ 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
+
115
135
$ form ->addText ('subject ' , get_lang ('Subject ' ));
116
136
$ form ->addHtmlEditor ('message ' , get_lang ('Message ' ));
117
137
@@ -185,6 +205,11 @@ public function returnForm($url, $action, $sessionInfo = [])
185
205
$ typeOptions ['base_date ' ] = get_lang ('BaseDate ' );
186
206
}
187
207
208
+ $ useBaseProgress = api_get_configuration_value ('scheduled_announcements_use_base_progress ' );
209
+ if ($ useBaseProgress ) {
210
+ $ typeOptions ['base_progress ' ] = get_lang ('BaseProgress ' );
211
+ }
212
+
188
213
$ form ->addSelect (
189
214
'type ' ,
190
215
get_lang ('Type ' ),
@@ -194,16 +219,36 @@ public function returnForm($url, $action, $sessionInfo = [])
194
219
if (this.options[this.selectedIndex].value == 'base_date') {
195
220
document.getElementById('options').style.display = 'block';
196
221
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') {
198
224
document.getElementById('options').style.display = 'none';
199
225
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';
200
231
}
201
232
" , ]
202
233
);
203
234
204
235
$ form ->addHtml ('<div id="specific_date"> ' );
205
236
$ form ->addDateTimePicker ('date ' , get_lang ('Date ' ));
206
237
$ 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
+
207
252
$ form ->addHtml ('<div id="options" style="display:none"> ' );
208
253
209
254
$ startDate = $ sessionInfo ['access_start_date ' ];
@@ -344,7 +389,19 @@ public function sendPendingMessages($urlId = 0)
344
389
$ coachList = array_unique ($ coachList );
345
390
}
346
391
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
+
348
405
$ attachments = $ this ->getAttachmentToString ($ result ['id ' ]);
349
406
$ subject = $ result ['subject ' ];
350
407
@@ -371,6 +428,44 @@ public function sendPendingMessages($urlId = 0)
371
428
);
372
429
}
373
430
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
+
374
469
if (is_numeric ($ progress )) {
375
470
$ progress = $ progress .'% ' ;
376
471
} else {
0 commit comments