@@ -341,44 +341,48 @@ function mci_issue_get_notes( $p_issue_id ) {
341
341
* @param array $p_monitors An array of arrays with the <em>id</em> field set to the id
342
342
* of the users which should monitor this issue.
343
343
*/
344
- function mci_issue_set_monitors ( $ p_issue_id , $ p_user_id , $ p_monitors ) {
344
+ function mci_issue_set_monitors ( $ p_issue_id , $ p_requesting_user_id , $ p_monitors ) {
345
345
if ( bug_is_readonly ( $ p_issue_id ) ) {
346
- return mci_soap_fault_access_denied ( $ p_user_id , "Issue ' $ p_issue_id' is readonly " );
346
+ return mci_soap_fault_access_denied ( $ p_requesting_user_id , "Issue ' $ p_issue_id' is readonly " );
347
347
}
348
348
349
- $ t_existing_monitors = bug_get_monitors ( $ p_issue_id );
349
+ // 1. get existing monitor ids
350
+ $ t_existing_monitor_ids = bug_get_monitors ( $ p_issue_id );
350
351
351
- $ t_monitors = array ();
352
+ // 2. build new monitors ids
353
+ $ t_new_monitor_ids = array ();
352
354
foreach ( $ p_monitors as $ t_monitor )
353
- $ t_monitors [] = $ t_monitor ['id ' ];
355
+ $ t_new_monitor_ids [] = $ t_monitor ['id ' ];
354
356
355
- foreach ( $ t_monitors as $ t_user_id ) {
357
+ // 3. for each of the new monitor ids, add it if it does not already exist
358
+ foreach ( $ t_new_monitor_ids as $ t_user_id ) {
356
359
357
- if ( $ p_user_id == $ t_user_id ) {
360
+ if ( $ p_requesting_user_id == $ t_user_id ) {
358
361
if ( ! access_has_bug_level ( config_get ( 'monitor_bug_threshold ' ), $ p_issue_id ) )
359
362
continue ;
360
363
} else {
361
364
if ( !access_has_bug_level ( config_get ( 'monitor_add_others_bug_threshold ' ), $ p_issue_id ) )
362
365
continue ;
363
366
}
364
367
365
- if ( in_array ( $ p_user_id , $ t_existing_monitors ) )
368
+ if ( in_array ( $ t_user_id , $ t_existing_monitor_ids ) )
366
369
continue ;
367
370
368
371
bug_monitor ( $ p_issue_id , $ t_user_id );
369
372
}
370
373
371
- foreach ( $ t_existing_monitors as $ t_user_id ) {
374
+ // 4. for each of the existing monitor ids, remove it if it is not found in the new monitor ids
375
+ foreach ( $ t_existing_monitor_ids as $ t_user_id ) {
372
376
373
- if ( $ p_user_id == $ t_user_id ) {
377
+ if ( $ p_requesting_user_id == $ t_user_id ) {
374
378
if ( ! access_has_bug_level ( config_get ( 'monitor_bug_threshold ' ), $ p_issue_id ) )
375
379
continue ;
376
380
} else {
377
381
if ( !access_has_bug_level ( config_get ( 'monitor_delete_others_bug_threshold ' ), $ p_issue_id ) )
378
382
continue ;
379
383
}
380
384
381
- if ( in_array ( $ p_user_id , $ t_monitors ) )
385
+ if ( in_array ( $ t_user_id , $ t_new_monitor_ids ) )
382
386
continue ;
383
387
384
388
bug_unmonitor ( $ p_issue_id , $ t_user_id );
0 commit comments