From 34627c08c23651305a94e9e533249cc1d3472685 Mon Sep 17 00:00:00 2001 From: Nik Okuntseff Date: Sun, 9 Sep 2018 17:09:19 +0000 Subject: [PATCH] Added adjustOptions function to ttFavRepportHelper class and started to use it in cron.php. --- WEB-INF/lib/ttFavReportHelper.class.php | 46 +++++++++++++++++++++++++ WEB-INF/templates/footer.tpl | 2 +- cron.php | 26 ++------------ 3 files changed, 49 insertions(+), 25 deletions(-) diff --git a/WEB-INF/lib/ttFavReportHelper.class.php b/WEB-INF/lib/ttFavReportHelper.class.php index 0a21f7c9..069ecbb5 100644 --- a/WEB-INF/lib/ttFavReportHelper.class.php +++ b/WEB-INF/lib/ttFavReportHelper.class.php @@ -325,4 +325,50 @@ class ttFavReportHelper { // $options now is a subset of db fields from tt_fav_reports table. return $options; } + + // adjustOptions takes and array or report options and adjusts them for current user + // (and group) settings. This is needed in situations when a fav report is stored in db + // long ago, but user or group attributes are now changed, so we have to adjust. + static function adjustOptions($options) { + global $user; + + // Check and optionally adjust users. + // Special handling of the NULL $options['users'] field (this used to mean "all users"). + if (!$options['users']) { + if ($user->can('view_reports') || $user->can('view_all_reports') || $user->isClient()) { + if ($user->can('view_reports') || $user->can('view_all_reports')) { + $max_rank = $user->rank-1; + if ($user->can('view_all_reports')) $max_rank = 512; + if ($user->can('view_own_reports')) + $user_options = array('max_rank'=>$max_rank,'include_self'=>true); + else + $user_options = array('max_rank'=>$max_rank); + $users = $user->getUsers($user_options); // Active and inactive users. + } elseif ($user->isClient()) { + $users = ttTeamHelper::getUsersForClient(); // Active and inactive users for clients. + } + foreach ($users as $single_user) { + $user_ids[] = $single_user['id']; + } + $options['users'] = implode(',', $user_ids); + } + } else { + $users_to_adjust = explode(',', $options['users']); // Users to adjust. + if ($user->isClient()) { + $users = ttTeamHelper::getUsersForClient(); // Active and inactive users for clients. + foreach ($users as $single_user) { + $user_ids[] = $single_user['id']; + } + foreach ($users_to_adjust as $user_to_adjust) { + if (in_array($user_to_adjust['id'], $user_ids)) { + $adjusted_user_ids[] = $user_to_adjust['id']; + } + } + $options['users'] = implode(',', $adjusted_user_ids); + } + // TODO: add checking the existing user list for potentially changed access rights for user. + } + + return $options; + } } diff --git a/WEB-INF/templates/footer.tpl b/WEB-INF/templates/footer.tpl index 99c9b21c..2c74b1ec 100644 --- a/WEB-INF/templates/footer.tpl +++ b/WEB-INF/templates/footer.tpl @@ -12,7 +12,7 @@
-
 Anuko Time Tracker 1.17.98.4320 | Copyright © Anuko | +  Anuko Time Tracker 1.17.98.4321 | Copyright © Anuko | {$i18n.footer.credits} | {$i18n.footer.license} | {$i18n.footer.improve} diff --git a/cron.php b/cron.php index 7d766992..eabcaa05 100644 --- a/cron.php +++ b/cron.php @@ -67,33 +67,11 @@ while ($val = $res->fetchRow()) { if (!$user->id) continue; // Skip not found user. // TODO: write a new function ttFavReportHelper::adjustOptions that will use - // a $user objecte recycled above. Put user handling below into it. + // a $user object recycled above. Put user handling below into it. // Also adjust remaining options for potentially changed user access rights and group properties. // For example, tracking mode may have changed, but fav report options are still old... // This needs to be fixed. - - // Special handling of the NULL $options['users'] field (this used to mean "all users"). - if (!$options['users']) { - if ($user->can('view_reports') || $user->can('view_all_reports') || $user->isClient()) { - if ($user->can('view_reports') || $user->can('view_all_reports')) { - $max_rank = $user->rank-1; - if ($user->can('view_all_reports')) $max_rank = 512; - if ($user->can('view_own_reports')) - $user_options = array('max_rank'=>$max_rank,'include_self'=>true); - else - $user_options = array('max_rank'=>$max_rank); - $users = $user->getUsers($user_options); // Active and inactive users. - } elseif ($user->isClient()) { - $users = ttTeamHelper::getUsersForClient(); // Active and inactive users for clients. - } - foreach ($users as $single_user) { - $user_ids[] = $single_user['id']; - } - $options['users'] = implode(',', $user_ids); - } - } else { - // TODO: add checking the existing user list for potentially changed access rights for user. - } + $options = ttFavReportHelper::adjustOptions($options); // Skip users with disabled Notifications plugin. if (!$user->isPluginEnabled('no')) continue; -- 2.20.1