+
+ // markUserDeleted marks a user in group as deleted.
+ function markUserDeleted($user_id) {
+ if (!$this->can('manage_users') || $this->id == $user_id)
+ return false;
+
+ // Make sure we operate on a legit user.
+ $user_details = $this->getUser($user_id);
+ if (!$user_details) return false;
+
+ $mdb2 = getConnection();
+
+ // Mark user to project binds as deleted.
+ $sql = "update tt_user_project_binds set status = NULL where user_id = $user_id";
+ $affected = $mdb2->exec($sql);
+ if (is_a($affected, 'PEAR_Error'))
+ return false;
+
+ // Mark user favorite reports as deleted.
+ $sql = "update tt_fav_reports set status = NULL where user_id = $user_id";
+ $affected = $mdb2->exec($sql);
+ if (is_a($affected, 'PEAR_Error'))
+ return false;
+
+ // Mark user as deleted.
+ $sql = "update tt_users set status = NULL where id = $user_id and group_id = ".$this->group_id;
+ $affected = $mdb2->exec($sql);
+ if (is_a($affected, 'PEAR_Error'))
+ return false;
+
+ return true;
+ }
+
+ // enablePlugin either enables or disables a specific plugin for group.
+ function enablePlugin($plugin, $enable = true)
+ {
+ if (!$this->can('manage_advanced_settings'))
+ return false; // Note: enablePlugin is currently only used on week_view.php.
+ // So, it's not really a plugin we are enabling, but rather week view display options.
+ // Therefore, a check for manage_advanced_settings, not manage_features.
+
+ $plugin_array = explode(',', $this->plugins);
+ if ($enable && !in_array($plugin, $plugin_array))
+ $plugin_array[] = $plugin; // Add plugin to array.
+
+ if (!$enable && in_array($plugin, $plugin_array)) {
+ $key = array_search($plugin, $plugin_array);
+ if ($key !== false)
+ unset($plugin_array[$key]); // Remove plugin from array.
+ }
+
+ $plugins = implode(',', $plugin_array);
+ if ($plugins != $this->plugins) {
+ if (!$this->updateGroup(array('plugins' => $plugins)))
+ return false;
+ $this->plugins = $plugins;
+ }
+
+ return true;
+ }
+
+ // isSubgroupValid determines if a subgroup is valid for user.
+ // A subgroup is valid if:
+ // - user can manage_subgroups;
+ // - subgroup is either a direct child of user group, or "on the path"
+ // to it (grand-child, etc.).
+ function isSubgroupValid($subgroup_id) {
+ if (!$this->can('manage_subgroups')) return false; // User cannot manage subgroups.
+
+ $current_group_id = $subgroup_id;
+ while ($parent_group_id = ttGroupHelper::getParentGroup($current_group_id)) {
+ if ($parent_group_id == $this->group_id) {
+ return true; // Found it.
+ }
+ $current_group_id = $parent_group_id;
+ }
+ return false;
+ }
+
+ // getMaxRankForGroup determines effective user rank for a user in a given group.
+ // For home group it is the existing user rank (as per role) minus 1.
+ // For subgroups, if user can "manage_subgroups", it is MAX_RANK.
+ function getMaxRankForGroup($group_id) {
+
+ $max_rank = 0; // Start safely.
+ if ($this->group_id == $group_id) {
+ $max_rank = $this->rank - 1;
+ return $max_rank;
+ }
+
+ if ($this->isSubgroupValid($group_id))
+ $max_rank = MAX_RANK;
+
+ return $max_rank;
+ }