X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=WEB-INF%2Flib%2FttUser.class.php;h=dd4a81d5226ae31892b3783689569b6d3b287f58;hb=f787edd7045299de3885c052d243b446f7324ea0;hp=4145f6030f9871e84667b56ef45ceec391d8479a;hpb=d74142948db5d27a3bf144a8ee485318cc1330c3;p=timetracker.git diff --git a/WEB-INF/lib/ttUser.class.php b/WEB-INF/lib/ttUser.class.php index 4145f603..dd4a81d5 100644 --- a/WEB-INF/lib/ttUser.class.php +++ b/WEB-INF/lib/ttUser.class.php @@ -162,9 +162,19 @@ class ttUser { } } - // The getUser returns user id on behalf of whom the current user is operating. + // getUser returns user id on behalf of whom the current user is operating. function getUser() { - return ($this->behalf_id ? $this->behalf_id : $this->id); + return ($this->behalfUser ? $this->behalfUser->id : $this->id); + } + + // getName returns user name on behalf of whom the current user is operating. + function getName() { + return ($this->behalfUser ? $this->behalfUser->name : $this->name); + } + + // getQuotaPercent returns quota percent for active user. + function getQuotaPercent() { + return ($this->behalfUser ? $this->behalfUser->quota_percent : $this->quota_percent); } // The getGroup returns group id on behalf of which the current user is operating. @@ -254,7 +264,7 @@ class ttUser { } // getAssignedProjects - returns an array of assigned projects. - function getAssignedProjects() + function getAssignedProjects($includeFiles = false) { $result = array(); $mdb2 = getConnection(); @@ -263,8 +273,15 @@ class ttUser { $group_id = $this->getGroup(); $org_id = $this->org_id; + if ($includeFiles) { + $filePart = ', if(Sub1.entity_id is null, 0, 1) as has_files'; + $fileJoin = " left join (select distinct entity_id from tt_files". + " where entity_type = 'project' and group_id = $group_id and org_id = $org_id and status = 1) Sub1". + " on (p.id = Sub1.entity_id)"; + } + // Do a query with inner join to get assigned projects. - $sql = "select p.id, p.name, p.description, p.tasks, upb.rate from tt_projects p". + $sql = "select p.id, p.name, p.description, p.tasks, upb.rate $filePart from tt_projects p $fileJoin". " inner join tt_user_project_binds upb on (upb.user_id = $user_id and upb.project_id = p.id and upb.status = 1)". " where p.group_id = $group_id and p.org_id = $org_id and p.status = 1 order by p.name"; $res = $mdb2->query($sql); @@ -390,7 +407,16 @@ class ttUser { $includeSelf = isset($options['include_self']); $select_part = 'select u.id, u.group_id, u.name'; - if (isset($options['include_login'])) $select_part .= ', u.login'; + if (isset($options['include_login'])) { + $select_part .= ', u.login'; + // Piggy-back on include_login to see if we must also include quota_percent. + $include_quota = $this->isPluginEnabled('mq'); + if ($include_quota) { + $decimal_mark = $this->getDecimalMark(); + $replaceDecimalMark = ('.' != $decimal_mark); + $select_part .= ', u.quota_percent'; + } + } if (!isset($options['include_clients'])) $select_part .= ', r.rights'; if (isset($options['include_role'])) $select_part .= ', r.name as role_name, r.rank'; @@ -398,7 +424,7 @@ class ttUser { $left_joins = null; if (isset($options['max_rank']) || $skipClients || isset($options['include_role'])) - $left_joins .= ' left join tt_roles r on (u.role_id = r.id)'; + $left_joins .= ' left join tt_roles r on (u.role_id = r.id)'; $where_part = " where u.org_id = $org_id and u.group_id = $group_id"; if (isset($options['status'])) @@ -425,6 +451,14 @@ class ttUser { if ($isClient) continue; // Skip adding clients. } + if ($include_quota) { + $quota = $val['quota_percent']; + if (ttEndsWith($quota, '.00')) + $quota = substr($quota, 0, strlen($quota)-3); // Trim trailing ".00"; + elseif ($replaceDecimalMark) + $quota = str_replace('.', $decimal_mark, $quota); + $val['quota_percent'] = $quota.'%'; + } $user_list[] = $val; } @@ -448,21 +482,6 @@ class ttUser { // - The entire stack of groups all the way down to current on behalf group. // - All immediate children of the current on behalf group. // This allows user to navigate easily to home group, anything in between, and 1 level below. - // - // Note 1: group dropdown is, by design, to be placed on all pages where "relevant", - // such as users.php, projects.php, tasks.php, etc. But some features may be disabled - // in some groups. We should check for feature availability on group change - // in post and redirect to feature_disabled.php when this happens. - // This will allow us to keep dropdown content consistent on all pages. - // Filtering content of the dropdown does not seem right. - // - // Note 2: Menu should display according to $user home group settings. - // Pages, should look according to $user->behalfGroup settings (if set). - // For example, if home group allows tasks, menu should display Tasks, - // even when we are on behalf of a subgroup without tasks. - // - // Note 3: Language of all pages should be as in $user home group even when - // subgroups have a different language. function getGroupsForDropdown() { $mdb2 = getConnection(); @@ -537,7 +556,7 @@ class ttUser { // then rank restriction does not apply. $max_rank = $this->behalfGroup ? MAX_RANK : $this->rank; - $sql = "select u.id, u.name, u.login, u.role_id, u.client_id, u.status, u.rate, u.email from tt_users u". + $sql = "select u.id, u.name, u.login, u.role_id, u.client_id, u.status, u.rate, u.quota_percent, u.email from tt_users u". " left join tt_roles r on (u.role_id = r.id)". " where u.id = $user_id and u.group_id = $group_id and u.org_id = $org_id and u.status is not null". " and (r.rank < $max_rank or (r.rank = $max_rank and u.id = $this->id))"; // Users with lesser roles or self. @@ -570,7 +589,7 @@ class ttUser { return false; // So far, so good. Check user now. - $options = array('group_id'=>$group_id,'status'=>ACTIVE,'max_rank'=>MAX_RANK); + $options = array('status'=>ACTIVE,'max_rank'=>MAX_RANK); $users = $this->getUsers($options); foreach($users as $one_user) { if ($one_user['id'] == $this->behalf_id) @@ -673,7 +692,8 @@ class ttUser { return false; // Mark user as deleted. - $sql = "update tt_users set status = NULL where id = $user_id". + $modified_part = ', modified = now(), modified_ip = '.$mdb2->quote($_SERVER['REMOTE_ADDR']).', modified_by = '.$mdb2->quote($this->id); + $sql = "update tt_users set status = null $modified_part where id = $user_id". " and group_id = $group_id and org_id = $org_id"; $affected = $mdb2->exec($sql); if (is_a($affected, 'PEAR_Error'))