getUserGroups() static public method

static public getUserGroups ( $users_id, $condition = '' )
$users_id
$condition (default '')
 function getGroups($ticket_id, $removeAlreadyAssigned = true)
 {
     $groups = $user_groups = $ticket_groups = array();
     // get groups for user connected
     $tmp_user_groups = Group_User::getUserGroups($_SESSION['glpiID']);
     foreach ($tmp_user_groups as $current_group) {
         $user_groups[$current_group['id']] = $current_group['id'];
         $groups[$current_group['id']] = $current_group['id'];
     }
     // get groups already assigned in the ticket
     if ($ticket_id > 0) {
         $ticket = new Ticket();
         $ticket->getFromDB($ticket_id);
         foreach ($ticket->getGroups(CommonITILActor::ASSIGN) as $current_group) {
             $ticket_groups[$current_group['groups_id']] = $current_group['groups_id'];
         }
     }
     // To do an escalation, the user must be in a group currently assigned to the ticket
     // or no group is assigned to the ticket
     // TODO : matching with "view all tickets (yes/no) option in profile user"
     if (!empty($ticket_groups) && count(array_intersect($ticket_groups, $user_groups)) == 0) {
         return array();
     }
     //get all group which we can climb
     if (count($groups) > 0) {
         $group_group = $this->find("groups_id_source IN (" . implode(", ", $groups) . ")");
         foreach ($group_group as $current_group) {
             $groups[$current_group['groups_id_destination']] = $current_group['groups_id_destination'];
         }
     }
     //remove already assigned groups
     if (!empty($ticket_groups) && $removeAlreadyAssigned) {
         $groups = array_diff_assoc($groups, $ticket_groups);
     }
     //add name to returned groups and remove non assignable groups
     $group_obj = new Group();
     foreach ($groups as $groups_id => &$groupname) {
         $group_obj->getFromDB($groups_id);
         //check if we can assign this group
         if ($group_obj->fields['is_assign'] == 0) {
             unset($groups[$groups_id]);
             continue;
         }
         //add name
         $groupname = $group_obj->fields['name'];
     }
     //sort by group name (and keep associative index)
     asort($groups);
     return $groups;
 }
Beispiel #2
0
 /**
  * @param $output
  * @param $params
  **/
 function executeActions($output, $params)
 {
     if (count($this->actions)) {
         foreach ($this->actions as $action) {
             switch ($action->fields["action_type"]) {
                 case "send":
                     $ticket = new Ticket();
                     if ($ticket->getFromDB($output['id'])) {
                         NotificationEvent::raiseEvent('recall', $ticket);
                     }
                     break;
                 case "add_validation":
                     if (isset($output['_add_validation']) && !is_array($output['_add_validation'])) {
                         $output['_add_validation'] = array($output['_add_validation']);
                     }
                     switch ($action->fields['field']) {
                         case 'users_id_validate_requester_supervisor':
                             $output['_add_validation'][] = 'requester_supervisor';
                             break;
                         case 'users_id_validate_assign_supervisor':
                             $output['_add_validation'][] = 'assign_supervisor';
                             break;
                         case 'groups_id_validate':
                             $output['_add_validation']['group'][] = $action->fields["value"];
                             break;
                         case 'users_id_validate':
                             $output['_add_validation'][] = $action->fields["value"];
                             break;
                         case 'validation_percent':
                             $output[$action->fields["field"]] = $action->fields["value"];
                             break;
                         default:
                             $output['_add_validation'][] = $action->fields["value"];
                             break;
                     }
                     break;
                 case "assign":
                     $output[$action->fields["field"]] = $action->fields["value"];
                     // Special case of users_id_requester
                     if ($action->fields["field"] === '_users_id_requester') {
                         // Add groups of requester
                         if (!isset($output['_groups_id_of_requester'])) {
                             $output['_groups_id_of_requester'] = array();
                         }
                         foreach (Group_User::getUserGroups($action->fields["value"]) as $g) {
                             $output['_groups_id_of_requester'][$g['id']] = $g['id'];
                         }
                     }
                     break;
                 case "append":
                     $actions = $this->getActions();
                     $value = $action->fields["value"];
                     if (isset($actions[$action->fields["field"]]["appendtoarray"]) && isset($actions[$action->fields["field"]]["appendtoarrayfield"])) {
                         $value = $actions[$action->fields["field"]]["appendtoarray"];
                         $value[$actions[$action->fields["field"]]["appendtoarrayfield"]] = $action->fields["value"];
                     }
                     $output[$actions[$action->fields["field"]]["appendto"]][] = $value;
                     // Special case of users_id_requester
                     if ($action->fields["field"] === '_users_id_requester') {
                         // Add groups of requester
                         if (!isset($output['_groups_id_of_requester'])) {
                             $output['_groups_id_of_requester'] = array();
                         }
                         foreach (Group_User::getUserGroups($action->fields["value"]) as $g) {
                             $output['_groups_id_of_requester'][$g['id']] = $g['id'];
                         }
                     }
                     break;
                 case 'fromuser':
                     if ($action->fields['field'] == 'locations_id' && isset($output['users_locations'])) {
                         $output['locations_id'] = $output['users_locations'];
                     }
                     break;
                 case 'fromitem':
                     if ($action->fields['field'] == 'locations_id' && isset($output['items_locations'])) {
                         $output['locations_id'] = $output['items_locations'];
                     }
                     if ($action->fields['field'] == 'groups_id' && isset($output['items_groups'])) {
                         $output['groups_id'] = $output['items_groups'];
                     }
                     break;
                 case 'compute':
                     // Value could be not set (from test)
                     $urgency = isset($output['urgency']) ? $output['urgency'] : 3;
                     $impact = isset($output['impact']) ? $output['impact'] : 3;
                     // Apply priority_matrix from config
                     $output['priority'] = Ticket::computePriority($urgency, $impact);
                     break;
                 case "affectbyip":
                 case "affectbyfqdn":
                 case "affectbymac":
                     if (!isset($output["entities_id"])) {
                         $output["entities_id"] = $params["entities_id"];
                     }
                     if (isset($this->regex_results[0])) {
                         $regexvalue = RuleAction::getRegexResultById($action->fields["value"], $this->regex_results[0]);
                     } else {
                         $regexvalue = $action->fields["value"];
                     }
                     switch ($action->fields["action_type"]) {
                         case "affectbyip":
                             $result = IPAddress::getUniqueItemByIPAddress($regexvalue, $output["entities_id"]);
                             break;
                         case "affectbyfqdn":
                             $result = FQDNLabel::getUniqueItemByFQDN($regexvalue, $output["entities_id"]);
                             break;
                         case "affectbymac":
                             $result = NetworkPortInstantiation::getUniqueItemByMac($regexvalue, $output["entities_id"]);
                             break;
                         default:
                             $result = array();
                     }
                     if (!empty($result)) {
                         $output["items_id"][$result["itemtype"]][] = $result["id"];
                     }
                     break;
             }
         }
     }
     return $output;
 }
Beispiel #3
0
 if (isset($_GET['entities_id']) && isset($_GET['is_recursive'])) {
     $user->loadMinimalSession($_GET['entities_id'], $_GET['is_recursive']);
 }
 //// check if the request is valid: rights on uID / gID
 // First check mine : user then groups
 $ismine = false;
 if ($user->getID() == $_GET["uID"]) {
     $ismine = true;
 }
 // Check groups if have right to see
 if (!$ismine && $_GET["gID"] !== 0) {
     if ($_GET["gID"] === 'mine') {
         $ismine = true;
     } else {
         $entities = Profile_User::getUserEntitiesForRight($user->getID(), Planning::READGROUP);
         $groups = Group_User::getUserGroups($user->getID());
         foreach ($groups as $group) {
             if ($_GET["gID"] == $group['id'] && in_array($group['entities_id'], $entities)) {
                 $ismine = true;
             }
         }
     }
 }
 $canview = false;
 // If not mine check global right
 if (!$ismine) {
     // First check user
     $entities = Profile_User::getUserEntitiesForRight($user->getID(), Planning::READALL);
     if ($_GET["uID"]) {
         $userentities = Profile_User::getUserEntities($user->getID());
         $intersect = array_intersect($entities, $userentities);
 /**
  * check right for Approve ticket Solution
  * for an authenticated user and a particular user
  *
  * @param $users_id  user id used for check ticket right
  * @param $ticket    ticket object
  *
  * @return array of hashtable
  **/
 static function checkApprobationSolution($users_id, Ticket $ticket)
 {
     if (!self::checkUserRights(Session::getLoginUserID(), 'update_ticket', 1, $ticket->getField('entities_id'))) {
         return false;
     }
     if (!($ticket->fields["users_id_recipient"] === $users_id || $ticket->isUser(CommonITILActor::REQUESTER, $users_id) || sizeof(Group_User::getUserGroups($users_id) > 0) && $ticket->haveAGroup(CommonITILActor::REQUESTER, Group_User::getUserGroups($users_id)))) {
         return false;
     }
     return true;
 }
 /**
  * @see RuleCollection::prepareInputDataForProcess()
  **/
 function prepareInputDataForProcess($input, $params)
 {
     $input['mailcollector'] = $params['mailcollector'];
     $input['_users_id_requester'] = $params['_users_id_requester'];
     $fields = $this->getFieldsToLookFor();
     //Add needed ticket datas for rules processing
     if (isset($params['ticket']) && is_array($params['ticket'])) {
         foreach ($params['ticket'] as $key => $value) {
             if (in_array($key, $fields) && !isset($input[$key])) {
                 $input[$key] = $value;
             }
         }
     }
     //Add needed headers for rules processing
     if (isset($params['headers']) && is_array($params['headers'])) {
         foreach ($params['headers'] as $key => $value) {
             if (in_array($key, $fields) && !isset($input[$key])) {
                 $input[$key] = $value;
             }
         }
     }
     //Add all user's groups
     if (in_array('groups', $fields)) {
         foreach (Group_User::getUserGroups($input['_users_id_requester']) as $group) {
             $input['GROUPS'][] = $group['id'];
         }
     }
     //Add all user's profiles
     if (in_array('profiles', $fields)) {
         foreach (Profile_User::getForUser($input['_users_id_requester']) as $profile) {
             $input['PROFILES'][$profile['profiles_id']] = $profile['profiles_id'];
         }
     }
     //If the criteria is "user has only one time the profile xxx"
     if (in_array('unique_profile', $fields)) {
         //Get all profiles
         $profiles = Profile_User::getForUser($input['_users_id_requester']);
         foreach ($profiles as $profile) {
             if (Profile_User::haveUniqueRight($input['_users_id_requester'], $profile['profiles_id'])) {
                 $input['UNIQUE_PROFILE'][$profile['profiles_id']] = $profile['profiles_id'];
             }
         }
     }
     //Store the number of profiles of which the user belongs to
     if (in_array('one_profile', $fields)) {
         $profiles = Profile_User::getForUser($input['_users_id_requester']);
         if (count($profiles) == 1) {
             $tmp = array_pop($profiles);
             $input['ONE_PROFILE'] = $tmp['profiles_id'];
         }
     }
     //Store the number of profiles of which the user belongs to
     if (in_array('known_domain', $fields)) {
         if (preg_match("/@(.*)/", $input['from'], $results)) {
             if (Entity::getEntityIDByDomain($results[1]) != -1) {
                 $input['KNOWN_DOMAIN'] = 1;
             } else {
                 $input['KNOWN_DOMAIN'] = 0;
             }
         }
     }
     return $input;
 }
 static function checkGroupUserFromForm($formID)
 {
     //$formID = $_REQUEST['id'];
     $grupos = Group_User::getUserGroups($_SESSION['glpiID']);
     $gruposUsuario = array("0");
     $found = 0;
     foreach ($grupos as $grupo) {
         if (in_array($grupo['id'], PluginFormcreatorForm::getGroupForm($formID))) {
             $found = 1;
         }
     }
     return $found;
 }
 /**
  * @see RuleCollection::prepareInputDataForProcess()
  **/
 function prepareInputDataForProcess($input, $params)
 {
     // Pass x-priority header if exists
     if (isset($input['_head']['x-priority'])) {
         $input['_x-priority'] = $input['_head']['x-priority'];
     }
     $input['_groups_id_of_requester'] = array();
     // Get groups of users
     if (isset($input['_users_id_requester'])) {
         foreach (Group_User::getUserGroups($input['_users_id_requester']) as $g) {
             $input['_groups_id_of_requester'][$g['id']] = $g['id'];
         }
     }
     return $input;
 }
                 if (isset($timelevels[$key])) {
                     $timelevels[$key] += $time;
                 } else {
                     $timelevels[$key] = $time;
                 }
             }
         }
     }
 }
 //Time of task by level group
 $tickettechs = array();
 $restrict = " `tickets_id` = " . $data["id"] . " \n                  AND actiontime > 0 ORDER BY date";
 $tasks = getAllDatasFromTable("glpi_tickettasks", $restrict);
 if (!empty($tasks)) {
     foreach ($tasks as $task) {
         foreach (Group_User::getUserGroups($task["users_id"]) as $usergroups) {
             if (in_array($usergroups["id"], $ticketgroups)) {
                 if (isset($tickettechs[$usergroups["id"]])) {
                     $tickettechs[$usergroups["id"]] += $task["actiontime"];
                 } else {
                     $tickettechs[$usergroups["id"]] = $task["actiontime"];
                 }
             }
         }
     }
 }
 $tasklevels = array();
 if (!empty($mylevels) && !empty($tickettechs)) {
     foreach ($mylevels as $key => $val) {
         foreach ($tickettechs as $group => $time) {
             if (is_array($val) && in_array($group, $val)) {
 /**
  * check right for Approve ticket Solution
  * for an authenticated user and a particular user
  *
  * @param $users_id  user id used for check ticket right
  * @param $ticket    ticket object
  *
  * @return array of hashtable
  **/
 static function checkApprobationSolution($users_id, Ticket $ticket)
 {
     if (!($ticket->fields["users_id_recipient"] === $users_id || $ticket->isUser(CommonITILActor::REQUESTER, $users_id) || sizeof(Group_User::getUserGroups($users_id) > 0) && $ticket->haveAGroup(CommonITILActor::REQUESTER, Group_User::getUserGroups($users_id)))) {
         return false;
     }
     return true;
 }
 static function notMultiple($item)
 {
     if ($_SESSION['glpiactiveprofile']['interface'] == 'central') {
         $peConfig = new PluginEscalationConfig();
         $unique_assigned = $peConfig->getValue("unique_assigned", $item->fields['entities_id']);
         if ($unique_assigned == '1') {
             $ticket_User = new Ticket_User();
             $group_Ticket = new Group_Ticket();
             $group_User = new Group_User();
             if (isset($item->input['_itil_assign'])) {
                 if ($item->input['_itil_assign']['_type'] == 'user') {
                     $in_group = 0;
                     $a_groups = $group_Ticket->find("`type`='2'\n                     AND `tickets_id`='" . $item->fields['id'] . "'");
                     $groups = Group_User::getUserGroups($item->input['_itil_assign']['users_id']);
                     if (count($a_groups) > 0) {
                         foreach ($a_groups as $data) {
                             foreach ($groups as $dat) {
                                 if ($dat['id'] == $data['groups_id']) {
                                     $in_group = 1;
                                 }
                             }
                         }
                     }
                     //if ($in_group == '0') {
                     //   unset($item->input['_itil_assign']['users_id']);
                     //}
                 } else {
                     if ($item->input['_itil_assign']['_type'] == 'group') {
                         $a_groups = $group_Ticket->find("`type`='2'\n                     AND `tickets_id`='" . $item->getID() . "'");
                         if (count($a_groups) > 0) {
                             foreach ($a_groups as $data) {
                                 $group_Ticket->delete($data);
                             }
                         }
                         $a_users = $ticket_User->find("`type`='2'\n                     AND `tickets_id`='" . $item->getID() . "'");
                         foreach ($a_users as $data) {
                             if (countElementsInTable($group_User->getTable(), "`users_id`='" . $data['users_id'] . "'\n                             AND `groups_id`='" . $item->input['_itil_assign']['groups_id'] . "'") == '0') {
                                 $ticket_User->delete($data);
                             }
                         }
                     }
                 }
             }
         }
     }
 }
     $link = "getDropdownUsers.php";
 }
 $rand = mt_rand();
 $field_id = Html::cleanId("dropdown_" . $_POST["name"] . $rand);
 $p = array('value' => 0, 'valuename' => Dropdown::EMPTY_VALUE, 'itemtype' => $_POST["idtable"], 'display_emptychoice' => true, 'displaywith' => array('otherserial', 'serial'));
 if (isset($_POST['value'])) {
     $p['value'] = $_POST['value'];
 }
 if (isset($_POST['entity_restrict'])) {
     $p['entity_restrict'] = $_POST['entity_restrict'];
 }
 if (isset($_POST['condition'])) {
     $p['condition'] = $_POST['condition'];
 }
 if ($_POST['idtable'] == 'Group') {
     $groups = Group_User::getUserGroups(Session::getLoginUserID());
     $user_groups = array();
     foreach ($groups as $group) {
         $user_groups[] = $group['id'];
     }
     $p['condition'] = Dropdown::addNewCondition("`id` IN ('" . implode("','", $user_groups) . "')");
 }
 echo Html::jsAjaxDropdown($_POST["name"], $field_id, $CFG_GLPI['root_doc'] . "/ajax/" . $link, $p);
 if (!empty($_POST['showItemSpecificity'])) {
     $params = array('items_id' => '__VALUE__', 'itemtype' => $_POST["idtable"]);
     if (isset($_POST['entity_restrict'])) {
         $params['entity_restrict'] = $_POST['entity_restrict'];
     }
     Ajax::updateItemOnSelectEvent($field_id, "showItemSpecificity_" . $_POST["name"] . "{$rand}", $_POST['showItemSpecificity'], $params);
     echo "<br><span id='showItemSpecificity_" . $_POST["name"] . "{$rand}'>&nbsp;</span>\n";
 }