+
+ // isUserValid function is used during access checks and determines whether user id, passed in post, is valid
+ // in current context.
+ static function isUserValid($user_id) {
+ // We have to cover several situations.
+ //
+ // 1) User is a client.
+ // 2) User with view_all_timesheets rights.
+ // 3) User with view_timesheets rights.
+
+ global $user;
+
+ // Step 1.
+ // A client must have view_client_timesheets and
+ // aser must be assigned to one of client projects.
+ if ($user->isClient()) {
+ if (!$user->can('view_client_timesheets'))
+ return false;
+ $valid_users = ttGroupHelper::getUsersForClient($user->client_id);
+ $v = 2;
+ }
+
+ return true;
+ }
+
+ // getReportOptions prepares $options array to be used with ttReportHelper
+ // to obtain items for timesheet view.
+ static function getReportOptions($timesheet) {
+ global $user;
+ $group_by_client = $user->isPluginEnabled('cl') && !$timesheet['client_id'];
+ $trackingMode = $user->getTrackingMode();
+ $group_by_project = MODE_PROJECTS == $trackingMode || MODE_PROJECTS_AND_TASKS == $trackingMode;
+
+ $options['timesheet_id'] = $timesheet['id'];
+ $options['client_id'] = $timesheet['client_id'];
+ $options['users'] = $timesheet['user_id'];
+ $options['show_durarion'] = 1;
+ $options['show_cost'] = 1; // To include expenses.
+ $options['show_totals_only'] = 1;
+ $options['group_by1'] = 'date';
+ if ($group_by_client || $group_by_project) {
+ $options['group_by2'] = $group_by_client ? 'client' : 'project';
+ }
+ if ($options['group_by2'] && $options['group_by2'] != 'project' && $group_by_project) {
+ $options['group_by3'] = 'project';
+ }
+ return $options;
+ }