X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=time.php;h=258f15c19fd2a9b4d5bc6af9087b92665d522204;hb=a711e76851f29c7e0ac290a279eb4dd984ea7167;hp=1c29aa8f6b59e755ac9de62182c0ae0b3bc4f100;hpb=a8a4278a6a87c600835890a10c774dfdc58e930a;p=timetracker.git diff --git a/time.php b/time.php index 1c29aa8f..258f15c1 100644 --- a/time.php +++ b/time.php @@ -29,23 +29,26 @@ require_once('initialize.php'); import('form.Form'); import('ttUserHelper'); +import('ttGroupHelper'); import('ttTeamHelper'); import('ttClientHelper'); import('ttTimeHelper'); import('DateAndTime'); -// This is a now removed check whether user browser supports cookies. -// if (!isset($_COOKIE['tt_PHPSESSID'])) { - // This test gives a false-positive if user goes directly to this page - // as from a desktop shortcut (on first request only). - // die ("Your browser's cookie functionality is turned off. Please turn it on."); -// } - -// Access check. +// Access checks. if (!(ttAccessAllowed('track_own_time') || ttAccessAllowed('track_time'))) { header('Location: access_denied.php'); exit(); } +if ($user->behalf_id && (!$user->can('track_time') || !$user->checkBehalfId())) { + header('Location: access_denied.php'); // Trying on behalf, but no right or wrong user. + exit(); +} +if (!$user->behalf_id && !$user->can('track_own_time') && !$user->adjustBehalfId()) { + header('Location: access_denied.php'); // Trying as self, but no right for self, and noone to work on behalf. + exit(); +} +// End of access checks. // Initialize and store date in session. $cl_date = $request->getParameter('date', @$_SESSION['date']); @@ -59,7 +62,7 @@ $_SESSION['date'] = $cl_date; // Use custom fields plugin if it is enabled. if ($user->isPluginEnabled('cf')) { require_once('plugins/CustomFields.class.php'); - $custom_fields = new CustomFields($user->team_id); + $custom_fields = new CustomFields($user->group_id); $smarty->assign('custom_fields', $custom_fields); } @@ -93,6 +96,7 @@ if ($user->isPluginEnabled('iv')) { $cl_billable = $_SESSION['billable']; } $on_behalf_id = $request->getParameter('onBehalfUser', (isset($_SESSION['behalf_id'])? $_SESSION['behalf_id'] : $user->id)); +$on_behalf_group_id = $request->getParameter('onBehalfGroup', (isset($_SESSION['behalf_group_id'])? $_SESSION['behalf_group_id'] : $user->group_id)); $cl_client = $request->getParameter('client', ($request->isPost() ? null : @$_SESSION['client'])); $_SESSION['client'] = $cl_client; $cl_project = $request->getParameter('project', ($request->isPost() ? null : @$_SESSION['project'])); @@ -103,9 +107,30 @@ $_SESSION['task'] = $cl_task; // Elements of timeRecordForm. $form = new Form('timeRecordForm'); -if ($user->canManageTeam()) { - $user_list = ttTeamHelper::getActiveUsers(array('putSelfFirst'=>true)); - if (count($user_list) > 1) { +if (defined('SUBGROUP_DEBUG') && isTrue(SUBGROUP_DEBUG)) { +if ($user->can('manage_subgroups')) { + $groups = $user->getGroups(); + if (count($groups) > 1) { + $form->addInput(array('type'=>'combobox', + 'onchange'=>'this.form.submit();', + 'name'=>'onBehalfGroup', + 'style'=>'width: 250px;', + 'value'=>$on_behalf_group_id, + 'data'=>$groups, + 'datakeys'=>array('id','name'))); + $smarty->assign('on_behalf_group_control', 1); + } +} +} // SUBGROUP_DEBUG + +if ($user->can('track_time')) { + $rank = $user->getMaxRankForGroup($on_behalf_group_id); + if ($user->can('track_own_time')) + $options = array('group_id'=>$on_behalf_group_id,'status'=>ACTIVE,'max_rank'=>$rank,'include_self'=>true,'self_first'=>true); + else + $options = array('group_id'=>$on_behalf_group_id,'status'=>ACTIVE,'max_rank'=>$rank); + $user_list = $user->getUsers($options); + if (count($user_list) >= 1) { $form->addInput(array('type'=>'combobox', 'onchange'=>'this.form.submit();', 'name'=>'onBehalfUser', @@ -119,7 +144,7 @@ if ($user->canManageTeam()) { // Dropdown for clients in MODE_TIME. Use all active clients. if (MODE_TIME == $user->tracking_mode && $user->isPluginEnabled('cl')) { - $active_clients = ttTeamHelper::getActiveClients($user->team_id, true); + $active_clients = ttTeamHelper::getActiveClients($user->group_id, true); $form->addInput(array('type'=>'combobox', 'onchange'=>'fillProjectDropdown(this.value);', 'name'=>'client', @@ -145,7 +170,7 @@ if (MODE_PROJECTS == $user->tracking_mode || MODE_PROJECTS_AND_TASKS == $user->t // Dropdown for clients if the clients plugin is enabled. if ($user->isPluginEnabled('cl')) { - $active_clients = ttTeamHelper::getActiveClients($user->team_id, true); + $active_clients = ttTeamHelper::getActiveClients($user->group_id, true); // We need an array of assigned project ids to do some trimming. foreach($project_list as $project) $projects_assigned_to_user[] = $project['id']; @@ -173,7 +198,7 @@ if (MODE_PROJECTS == $user->tracking_mode || MODE_PROJECTS_AND_TASKS == $user->t } if (MODE_PROJECTS_AND_TASKS == $user->tracking_mode) { - $task_list = ttTeamHelper::getActiveTasks($user->team_id); + $task_list = ttTeamHelper::getActiveTasks($user->group_id); $form->addInput(array('type'=>'combobox', 'name'=>'task', 'style'=>'width: 250px;', @@ -287,6 +312,7 @@ if ($request->isPost()) { $id = ttTimeHelper::insert(array( 'date' => $cl_date, 'user_id' => $user->getActiveUser(), + 'group_id' => $user->getActiveGroup(), 'client' => $cl_client, 'project' => $cl_project, 'task' => $cl_task, @@ -340,18 +366,61 @@ if ($request->isPost()) { exit(); } } - elseif ($request->getParameter('onBehalfUser')) { - if($user->canManageTeam()) { - unset($_SESSION['behalf_id']); - unset($_SESSION['behalf_name']); - - if($on_behalf_id != $user->id) { - $_SESSION['behalf_id'] = $on_behalf_id; - $_SESSION['behalf_name'] = ttUserHelper::getUserName($on_behalf_id); + elseif ($request->getParameter('onBehalfUser') || $request->getParameter('onBehalfGroup')) { + // User changed either on behalf user or group. + // TODO: Organize this code into a separate function. + + // We get here if one of the dropdowns changed. Handle these 2 situations differently. + // 1) User changed. Determine if user changed. Then do exactly as before. + // + // Group changed. Determine if group changed. + // Adjust group info. + // Adjust user info to first user in group (or self if we are in home group now). + // + // Determine if user was changed. + if ($request->getParameter('onBehalfUser')) { + $request_user_id = $request->getParameter('onBehalfUser'); + $session_user_id = $_SESSION['behalf_id']; + $user_changed = !(($session_user_id == null && ($user->id == $request_user_id)) + || ($session_user_id != null && ($request_user_id == $session_user_id))); + if ($user_changed && $user->can('track_time')) { + unset($_SESSION['behalf_id']); + unset($_SESSION['behalf_name']); + + if($request_user_id != $user->id) { + $_SESSION['behalf_id'] = $request_user_id; + $_SESSION['behalf_name'] = ttUserHelper::getUserName($request_user_id); + } + } + } + + if ($request->getParameter('onBehalfGroup')) { + // Determine if group was changed. + $request_group_id = $request->getParameter('onBehalfGroup'); + $session_group_id = $_SESSION['behalf_group_id']; + $group_changed = !(($session_group_id == null && ($user->group_id == $request_group_id)) + || ($session_group_id != null && ($request_group_id == $session_group_id))); + + if ($group_changed && $user->can('manage_subgroups')) { + unset($_SESSION['behalf_group_id']); + unset($_SESSION['behalf_group_name']); + if ($request_group_id == $user->group_id) + $user->behalf_group_id = null; + + if (($request_group_id != $user->group_id) && $user->isSubgroupValid($request_group_id)) { + $_SESSION['behalf_group_id'] = $request_group_id; + $_SESSION['behalf_group_name'] = ttGroupHelper::getGroupName($request_group_id); + $user->behalf_group_id = $request_group_id; + } + + unset($_SESSION['behalf_id']); + unset($_SESSION['behalf_name']); + if ($request_group_id != $user->group_id) + $user->adjustBehalfId(); } - header('Location: time.php'); - exit(); } + header('Location: time.php'); + exit(); } } // isPost