Beispiel #1
0
 /**
  * Is the current user have more right than all profiles in parameters
  *
  * @param $IDs array of profile ID to test
  *
  * @return boolean true if have more right
  **/
 static function currentUserHaveMoreRightThan($IDs = array())
 {
     global $DB;
     if (Session::isCron()) {
         return true;
     }
     if (count($IDs) == 0) {
         // Check all profiles (means more right than all possible profiles)
         return countElementsInTable('glpi_profiles') == countElementsInTable('glpi_profiles', self::getUnderActiveProfileRestrictRequest(''));
     }
     $under_profiles = array();
     $query = "SELECT *\n                         FROM `glpi_profiles` " . self::getUnderActiveProfileRestrictRequest("WHERE");
     $result = $DB->query($query);
     while ($data = $DB->fetch_assoc($result)) {
         $under_profiles[$data['id']] = $data['id'];
     }
     foreach ($IDs as $ID) {
         if (!isset($under_profiles[$ID])) {
             return false;
         }
     }
     return true;
 }
 /**
  * Update date mod of the ITIL object
  *
  * @param $ID                    integer  ID of the ITIL object
  * @param $no_stat_computation   boolean  do not cumpute take into account stat (false by default)
  * @param $users_id_lastupdater  integer  to force last_update id (default 0 = not used)
  **/
 function updateDateMod($ID, $no_stat_computation = false, $users_id_lastupdater = 0)
 {
     global $DB;
     if ($this->getFromDB($ID)) {
         // Force date mod and lastupdater
         $query = "UPDATE `" . $this->getTable() . "`\n                   SET `date_mod` = '" . $_SESSION["glpi_currenttime"] . "'";
         // set last updater if interactive user
         if (!Session::isCron()) {
             $query .= ", `users_id_lastupdater` = '" . Session::getLoginUserID() . "' ";
         } else {
             if ($users_id_lastupdater > 0) {
                 $query .= ", `users_id_lastupdater` = '{$users_id_lastupdater}' ";
             }
         }
         $query .= "WHERE `id` = '{$ID}'";
         $DB->query($query);
     }
 }
Beispiel #3
0
 /**
  * @since version 0.85
  **/
 static function getSearchOptionsToAdd()
 {
     $tab = array();
     $tab[145]['table'] = 'glpi_links';
     $tab[145]['field'] = '_virtual';
     $tab[145]['name'] = _n('External link', 'External links', Session::getPluralNumber());
     $tab[145]['datatype'] = 'specific';
     $tab[145]['additionalfields'] = array('id', 'link', 'name', 'data', 'open_window');
     $tab[145]['nosearch'] = true;
     $tab[145]['forcegroupby'] = true;
     $tab[145]['nosort'] = true;
     $tab[145]['joinparams'] = array('beforejoin' => array('table' => 'glpi_links_itemtypes', 'joinparams' => array('jointype' => 'itemtypeonly')));
     if (!Session::isCron() && !isCommandLine()) {
         $tab[145]['joinparams']['condition'] = getEntitiesRestrictRequest('AND', 'NEWTABLE');
     }
     return $tab;
 }
 /**
  * Raise a notification event event
  *
  * @param $event           the event raised for the itemtype
  * @param $item            the object which raised the event
  * @param $options array   of options used
  * @param $label           used for debugEvent() (default '')
  **/
 static function raiseEvent($event, $item, $options = array(), $label = '')
 {
     global $CFG_GLPI;
     //If notifications are enabled in GLPI's configuration
     if ($CFG_GLPI["use_mailing"]) {
         $email_processed = array();
         $email_notprocessed = array();
         //Get template's information
         $template = new NotificationTemplate();
         $notificationtarget = NotificationTarget::getInstance($item, $event, $options);
         if (!$notificationtarget) {
             return false;
         }
         $entity = $notificationtarget->getEntity();
         //Foreach notification
         foreach (Notification::getNotificationsByEventAndType($event, $item->getType(), $entity) as $data) {
             $targets = getAllDatasFromTable('glpi_notificationtargets', 'notifications_id = ' . $data['id']);
             $notificationtarget->clearAddressesList();
             //Process more infos (for example for tickets)
             $notificationtarget->addAdditionnalInfosForTarget();
             $template->getFromDB($data['notificationtemplates_id']);
             $template->resetComputedTemplates();
             //Set notification's signature (the one which corresponds to the entity)
             $template->setSignature(Notification::getMailingSignature($entity));
             $notify_me = false;
             if (Session::isCron()) {
                 // Cron notify me
                 $notify_me = true;
             } else {
                 // Not cron see my pref
                 $notify_me = $_SESSION['glpinotification_to_myself'];
             }
             //Foreach notification targets
             foreach ($targets as $target) {
                 //Get all users affected by this notification
                 $notificationtarget->getAddressesByTarget($target, $options);
                 foreach ($notificationtarget->getTargets() as $user_email => $users_infos) {
                     if ($label || $notificationtarget->validateSendTo($event, $users_infos, $notify_me)) {
                         //If the user have not yet been notified
                         if (!isset($email_processed[$users_infos['language']][$users_infos['email']])) {
                             //If ther user's language is the same as the template's one
                             if (isset($email_notprocessed[$users_infos['language']][$users_infos['email']])) {
                                 unset($email_notprocessed[$users_infos['language']][$users_infos['email']]);
                             }
                             $options['item'] = $item;
                             if ($tid = $template->getTemplateByLanguage($notificationtarget, $users_infos, $event, $options)) {
                                 //Send notification to the user
                                 if ($label == '') {
                                     $datas = $template->getDataToSend($notificationtarget, $tid, $users_infos, $options);
                                     $datas['_notificationtemplates_id'] = $data['notificationtemplates_id'];
                                     $datas['_itemtype'] = $item->getType();
                                     $datas['_items_id'] = $item->getID();
                                     $datas['_entities_id'] = $entity;
                                     Notification::send($datas);
                                 } else {
                                     $notificationtarget->getFromDB($target['id']);
                                     echo "<tr class='tab_bg_2'><td>" . $label . "</td>";
                                     echo "<td>" . $notificationtarget->getNameID() . "</td>";
                                     echo "<td>" . sprintf(__('%1$s (%2$s)'), $template->getName(), $users_infos['language']) . "</td>";
                                     echo "<td>" . $users_infos['email'] . "</td>";
                                     echo "</tr>";
                                 }
                                 $email_processed[$users_infos['language']][$users_infos['email']] = $users_infos;
                             } else {
                                 $email_notprocessed[$users_infos['language']][$users_infos['email']] = $users_infos;
                             }
                         }
                     }
                 }
             }
         }
     }
     unset($email_processed);
     unset($email_notprocessed);
     $template = null;
     return true;
 }
 function prepareInputForAdd($input)
 {
     //       if ($job->fields["status"] == CommonITILObject::SOLVED
     //                  || $job->fields["status"] == CommonITILObject::CLOSED) {
     //            return false;
     //         }
     $input["users_id"] = 0;
     // Only set requester on manual action
     if (!isset($input['_auto_import']) && !isset($input['_auto_update']) && !Session::isCron()) {
         $input["users_id"] = Session::getLoginUserID();
     }
     $input["submission_date"] = $_SESSION["glpi_currenttime"];
     $input["status"] = 'waiting';
     return parent::prepareInputForAdd($input);
 }
Beispiel #6
0
 function getSearchOptions()
 {
     // Only use for History (not by search Engine)
     $tab = array();
     $tab['common'] = __('Characteristics');
     $tab[1]['table'] = $this->getTable();
     $tab[1]['field'] = 'name';
     $tab[1]['name'] = __('Name');
     $tab[1]['datatype'] = 'itemlink';
     $tab[1]['massiveaction'] = false;
     $tab[2]['table'] = $this->getTable();
     $tab[2]['field'] = 'id';
     $tab[2]['name'] = __('ID');
     $tab[2]['massiveaction'] = false;
     $tab[2]['datatype'] = 'number';
     $tab += Location::getSearchOptionsToAdd();
     $tab[16]['table'] = $this->getTable();
     $tab[16]['field'] = 'comment';
     $tab[16]['name'] = __('Comments');
     $tab[16]['datatype'] = 'text';
     $tab[90]['table'] = $this->getTable();
     $tab[90]['field'] = 'notepad';
     $tab[90]['name'] = __('Notes');
     $tab[90]['massiveaction'] = false;
     $tab[90]['datatype'] = 'text';
     $tab[62]['table'] = 'glpi_softwarecategories';
     $tab[62]['field'] = 'name';
     $tab[62]['name'] = __('Category');
     $tab[62]['datatype'] = 'dropdown';
     $tab[19]['table'] = $this->getTable();
     $tab[19]['field'] = 'date_mod';
     $tab[19]['name'] = __('Last update');
     $tab[19]['datatype'] = 'datetime';
     $tab[19]['massiveaction'] = false;
     $tab[23]['table'] = 'glpi_manufacturers';
     $tab[23]['field'] = 'name';
     $tab[23]['name'] = __('Publisher');
     $tab[23]['datatype'] = 'dropdown';
     $tab[24]['table'] = 'glpi_users';
     $tab[24]['field'] = 'name';
     $tab[24]['linkfield'] = 'users_id_tech';
     $tab[24]['name'] = __('Technician in charge of the hardware');
     $tab[24]['datatype'] = 'dropdown';
     $tab[24]['right'] = 'own_ticket';
     $tab[49]['table'] = 'glpi_groups';
     $tab[49]['field'] = 'completename';
     $tab[49]['linkfield'] = 'groups_id_tech';
     $tab[49]['name'] = __('Group in charge of the hardware');
     $tab[49]['condition'] = '`is_assign`';
     $tab[49]['datatype'] = 'dropdown';
     $tab[70]['table'] = 'glpi_users';
     $tab[70]['field'] = 'name';
     $tab[70]['name'] = __('User');
     $tab[70]['datatype'] = 'dropdown';
     $tab[70]['right'] = 'all';
     $tab[71]['table'] = 'glpi_groups';
     $tab[71]['field'] = 'completename';
     $tab[71]['name'] = __('Group');
     $tab[71]['condition'] = '`is_itemgroup`';
     $tab[71]['datatype'] = 'dropdown';
     $tab[61]['table'] = $this->getTable();
     $tab[61]['field'] = 'is_helpdesk_visible';
     $tab[61]['name'] = __('Associable to a ticket');
     $tab[61]['datatype'] = 'bool';
     $tab[80]['table'] = 'glpi_entities';
     $tab[80]['field'] = 'completename';
     $tab[80]['name'] = __('Entity');
     $tab[80]['massiveaction'] = false;
     $tab[80]['datatype'] = 'dropdown';
     $tab[72]['table'] = 'glpi_computers_softwareversions';
     $tab[72]['field'] = 'count';
     $tab[72]['name'] = __('Number of installations');
     $tab[72]['forcegroupby'] = true;
     $tab[72]['usehaving'] = true;
     $tab[72]['datatype'] = 'number';
     $tab[72]['nometa'] = true;
     $tab[72]['massiveaction'] = false;
     if (Session::getLoginUserID()) {
         $tab[72]['joinparams'] = array('jointype' => 'child', 'condition' => "AND NEWTABLE.`is_deleted_computer` = '0'\n                                                          AND NEWTABLE.`is_deleted` = '0'\n                                                          AND NEWTABLE.`is_template_computer` = '0'\n                                                          " . getEntitiesRestrictRequest('AND', 'NEWTABLE'), 'beforejoin' => array('table' => 'glpi_softwareversions', 'joinparams' => array('jointype' => 'child')));
     }
     $tab[86]['table'] = $this->getTable();
     $tab[86]['field'] = 'is_recursive';
     $tab[86]['name'] = __('Child entities');
     $tab[86]['datatype'] = 'bool';
     $tab[86]['massiveaction'] = false;
     $tab['versions'] = _n('Version', 'Versions', 2);
     $tab[5]['table'] = 'glpi_softwareversions';
     $tab[5]['field'] = 'name';
     $tab[5]['name'] = __('Version name');
     $tab[5]['forcegroupby'] = true;
     $tab[5]['massiveaction'] = false;
     $tab[5]['joinparams'] = array('jointype' => 'child');
     $tab[5]['datatype'] = 'dropdown';
     $tab[31]['table'] = 'glpi_states';
     $tab[31]['field'] = 'completename';
     $tab[31]['name'] = __('Status');
     $tab[31]['datatype'] = 'dropdown';
     $tab[31]['forcegroupby'] = true;
     $tab[31]['massiveaction'] = false;
     $tab[31]['joinparams'] = array('beforejoin' => array('table' => 'glpi_softwareversions', 'joinparams' => array('jointype' => 'child')));
     $tab[170]['table'] = 'glpi_softwareversions';
     $tab[170]['field'] = 'comment';
     $tab[170]['name'] = __('Version comments');
     $tab[170]['forcegroupby'] = true;
     $tab[170]['datatype'] = 'text';
     $tab[170]['massiveaction'] = false;
     $tab[170]['joinparams'] = array('jointype' => 'child');
     $tab[4]['table'] = 'glpi_operatingsystems';
     $tab[4]['field'] = 'name';
     $tab[4]['datatype'] = 'dropdown';
     $tab[4]['name'] = __('Operating system');
     $tab[4]['forcegroupby'] = true;
     $tab[4]['joinparams'] = array('beforejoin' => array('table' => 'glpi_softwareversions', 'joinparams' => array('jointype' => 'child')));
     $tab['license'] = _n('License', 'Licenses', 2);
     $licjoin = array();
     $licjoinexpire = array();
     if (!Session::isCron()) {
         // no filter for cron
         $licjoin = array('jointype' => 'child', 'condition' => getEntitiesRestrictRequest(' AND', "NEWTABLE", '', '', true));
         $licjoinexpire = array('jointype' => 'child', 'condition' => getEntitiesRestrictRequest(' AND', "NEWTABLE", '', '', true) . " AND (NEWTABLE.`expire` IS NULL\n                                                   OR NEWTABLE.`expire` > NOW())");
     }
     $tab[160]['table'] = 'glpi_softwarelicenses';
     $tab[160]['field'] = 'name';
     $tab[160]['name'] = __('License name');
     $tab[160]['datatype'] = 'dropdown';
     $tab[160]['forcegroupby'] = true;
     $tab[160]['massiveaction'] = false;
     $tab[160]['joinparams'] = $licjoinexpire;
     $tab[161]['table'] = 'glpi_softwarelicenses';
     $tab[161]['field'] = 'serial';
     $tab[161]['datatype'] = 'string';
     $tab[161]['name'] = __('License serial number');
     $tab[161]['forcegroupby'] = true;
     $tab[161]['massiveaction'] = false;
     $tab[161]['joinparams'] = $licjoinexpire;
     $tab[162]['table'] = 'glpi_softwarelicenses';
     $tab[162]['field'] = 'otherserial';
     $tab[162]['datatype'] = 'string';
     $tab[162]['name'] = __('License inventory number');
     $tab[162]['forcegroupby'] = true;
     $tab[162]['massiveaction'] = false;
     $tab[162]['joinparams'] = $licjoinexpire;
     $tab[163]['table'] = 'glpi_softwarelicenses';
     $tab[163]['field'] = 'number';
     $tab[163]['name'] = __('Number of licenses');
     $tab[163]['forcegroupby'] = true;
     $tab[163]['usehaving'] = true;
     $tab[163]['datatype'] = 'number';
     $tab[163]['massiveaction'] = false;
     $tab[163]['joinparams'] = $licjoinexpire;
     $tab[164]['table'] = 'glpi_softwarelicensetypes';
     $tab[164]['field'] = 'name';
     $tab[164]['datatype'] = 'dropdown';
     $tab[164]['name'] = __('License types');
     $tab[164]['forcegroupby'] = true;
     $tab[164]['massiveaction'] = false;
     $tab[164]['joinparams'] = array('beforejoin' => array('table' => 'glpi_softwarelicenses', 'joinparams' => $licjoinexpire));
     $tab[165]['table'] = 'glpi_softwarelicenses';
     $tab[165]['field'] = 'comment';
     $tab[165]['name'] = __('License comments');
     $tab[165]['forcegroupby'] = true;
     $tab[165]['datatype'] = 'text';
     $tab[165]['massiveaction'] = false;
     $tab[165]['joinparams'] = $licjoinexpire;
     $tab[166]['table'] = 'glpi_softwarelicenses';
     $tab[166]['field'] = 'expire';
     $tab[166]['name'] = __('Expiration');
     $tab[166]['forcegroupby'] = true;
     $tab[166]['datatype'] = 'date';
     $tab[166]['massiveaction'] = false;
     $tab[166]['joinparams'] = $licjoinexpire;
     return $tab;
 }
Beispiel #7
0
 function getSearchOptions()
 {
     $tab = array();
     $tab += $this->getSearchOptionsMain();
     $tab[155]['table'] = $this->getTable();
     $tab[155]['field'] = 'time_to_own';
     $tab[155]['name'] = __('Time to own');
     $tab[155]['datatype'] = 'datetime';
     $tab[155]['maybefuture'] = true;
     $tab[155]['massiveaction'] = false;
     $tab[155]['additionalfields'] = array('status');
     $tab[158]['table'] = $this->getTable();
     $tab[158]['field'] = 'time_to_own';
     $tab[158]['name'] = __('Time to own + Progress');
     $tab[158]['massiveaction'] = false;
     $tab[158]['nosearch'] = true;
     $tab[158]['additionalfields'] = array('status');
     $tab[159]['table'] = $this->getTable();
     $tab[159]['field'] = 'is_late';
     $tab[159]['name'] = __('Time to own exceedeed');
     $tab[159]['datatype'] = 'bool';
     $tab[159]['massiveaction'] = false;
     $tab[159]['computation'] = "IF(TABLE.`time_to_own` IS NOT NULL\n                                            AND TABLE.`status` <> " . self::WAITING . "\n                                            AND (TABLE.`takeintoaccount_delay_stat`\n                                                        > TIME_TO_SEC(TIMEDIFF(TABLE.`time_to_own`,\n                                                                               TABLE.`date`))\n                                                 OR (TABLE.`takeintoaccount_delay_stat` = 0\n                                                      AND TABLE.`time_to_own` < NOW())),\n                                            1, 0)";
     $tab[14]['table'] = $this->getTable();
     $tab[14]['field'] = 'type';
     $tab[14]['name'] = __('Type');
     $tab[14]['searchtype'] = 'equals';
     $tab[14]['datatype'] = 'specific';
     $tab[13]['table'] = 'glpi_items_tickets';
     $tab[13]['field'] = 'items_id';
     $tab[13]['name'] = _n('Associated element', 'Associated elements', Session::getPluralNumber());
     $tab[13]['datatype'] = 'specific';
     $tab[13]['comments'] = true;
     $tab[13]['nosort'] = true;
     $tab[13]['nosearch'] = true;
     $tab[13]['additionalfields'] = array('itemtype');
     $tab[13]['joinparams'] = array('jointype' => 'child');
     $tab[13]['forcegroupby'] = true;
     $tab[13]['massiveaction'] = false;
     $tab[131]['table'] = 'glpi_items_tickets';
     $tab[131]['field'] = 'itemtype';
     $tab[131]['name'] = _n('Associated item type', 'Associated item types', Session::getPluralNumber());
     $tab[131]['datatype'] = 'itemtypename';
     $tab[131]['itemtype_list'] = 'ticket_types';
     $tab[131]['nosort'] = true;
     $tab[131]['additionalfields'] = array('itemtype');
     $tab[131]['joinparams'] = array('jointype' => 'child');
     $tab[131]['forcegroupby'] = true;
     $tab[131]['massiveaction'] = false;
     $tab[9]['table'] = 'glpi_requesttypes';
     $tab[9]['field'] = 'name';
     $tab[9]['name'] = __('Request source');
     $tab[9]['datatype'] = 'dropdown';
     // Can't use Location::getSearchOptionsToAdd because id conflicts
     $tab[83]['table'] = 'glpi_locations';
     $tab[83]['field'] = 'completename';
     $tab[83]['name'] = __('Location');
     $tab[83]['datatype'] = 'dropdown';
     $tab[80]['table'] = 'glpi_entities';
     $tab[80]['field'] = 'completename';
     $tab[80]['name'] = __('Entity');
     $tab[80]['massiveaction'] = false;
     $tab[80]['datatype'] = 'dropdown';
     // For ticket template
     $tab[142]['table'] = 'glpi_documents';
     $tab[142]['field'] = 'name';
     $tab[142]['name'] = _n('Document', 'Documents', Session::getPluralNumber());
     $tab[142]['forcegroupby'] = true;
     $tab[142]['usehaving'] = true;
     $tab[142]['nosearch'] = true;
     $tab[142]['nodisplay'] = true;
     $tab[142]['datatype'] = 'dropdown';
     $tab[142]['massiveaction'] = false;
     $tab[142]['joinparams'] = array('jointype' => 'items_id', 'beforejoin' => array('table' => 'glpi_documents_items', 'joinparams' => array('jointype' => 'itemtype_item')));
     $tab += $this->getSearchOptionsActors();
     $tab['slt'] = __('SLT');
     $tab[37]['table'] = 'glpi_slts';
     $tab[37]['field'] = 'name';
     $tab[37]['linkfield'] = 'slts_tto_id';
     $tab[37]['name'] = __('SLT') . "&nbsp;" . __('Time to own');
     $tab[37]['massiveaction'] = false;
     $tab[37]['datatype'] = 'dropdown';
     $tab[37]['joinparams'] = array('condition' => "AND NEWTABLE.`type` = '" . SLT::TTO . "'");
     $tab[37]['condition'] = "`glpi_slts`.`type` = '" . SLT::TTO . "'";
     $tab[30]['table'] = 'glpi_slts';
     $tab[30]['field'] = 'name';
     $tab[30]['linkfield'] = 'slts_ttr_id';
     $tab[30]['name'] = __('SLT') . "&nbsp;" . __('Time to resolve');
     $tab[30]['massiveaction'] = false;
     $tab[30]['datatype'] = 'dropdown';
     $tab[30]['joinparams'] = array('condition' => "AND NEWTABLE.`type` = '" . SLT::TTR . "'");
     $tab[30]['condition'] = "`glpi_slts`.`type` = '" . SLT::TTR . "'";
     $tab[32]['table'] = 'glpi_slalevels';
     $tab[32]['field'] = 'name';
     $tab[32]['name'] = __('Escalation level');
     $tab[32]['massiveaction'] = false;
     $tab[32]['datatype'] = 'dropdown';
     $tab[32]['joinparams'] = array('beforejoin' => array('table' => 'glpi_slalevels_tickets', 'joinparams' => array('jointype' => 'child')));
     $tab[32]['forcegroupby'] = true;
     $tab += TicketValidation::getSearchOptionsToAdd();
     $tab['satisfaction'] = __('Satisfaction survey');
     $tab[31]['table'] = 'glpi_ticketsatisfactions';
     $tab[31]['field'] = 'type';
     $tab[31]['name'] = __('Type');
     $tab[31]['massiveaction'] = false;
     $tab[31]['searchtype'] = array('equals', 'notequals');
     $tab[31]['searchequalsonfield'] = true;
     $tab[31]['joinparams'] = array('jointype' => 'child');
     $tab[31]['datatype'] = 'specific';
     $tab[60]['table'] = 'glpi_ticketsatisfactions';
     $tab[60]['field'] = 'date_begin';
     $tab[60]['name'] = __('Creation date');
     $tab[60]['datatype'] = 'datetime';
     $tab[60]['massiveaction'] = false;
     $tab[60]['joinparams'] = array('jointype' => 'child');
     $tab[61]['table'] = 'glpi_ticketsatisfactions';
     $tab[61]['field'] = 'date_answered';
     $tab[61]['name'] = __('Response date');
     $tab[61]['datatype'] = 'datetime';
     $tab[61]['massiveaction'] = false;
     $tab[61]['joinparams'] = array('jointype' => 'child');
     $tab[62]['table'] = 'glpi_ticketsatisfactions';
     $tab[62]['field'] = 'satisfaction';
     $tab[62]['name'] = __('Satisfaction');
     $tab[62]['datatype'] = 'number';
     $tab[62]['massiveaction'] = false;
     $tab[62]['joinparams'] = array('jointype' => 'child');
     $tab[63]['table'] = 'glpi_ticketsatisfactions';
     $tab[63]['field'] = 'comment';
     $tab[63]['name'] = __('Comments');
     $tab[63]['datatype'] = 'text';
     $tab[63]['massiveaction'] = false;
     $tab[63]['joinparams'] = array('jointype' => 'child');
     $tab['followup'] = _n('Followup', 'Followups', Session::getPluralNumber());
     $followup_condition = '';
     if (!Session::haveRight('followup', TicketFollowup::SEEPRIVATE)) {
         $followup_condition = "AND (`NEWTABLE`.`is_private` = '0'\n                                     OR `NEWTABLE`.`users_id` = '" . Session::getLoginUserID() . "')";
     }
     $tab[25]['table'] = 'glpi_ticketfollowups';
     $tab[25]['field'] = 'content';
     $tab[25]['name'] = __('Description');
     $tab[25]['forcegroupby'] = true;
     $tab[25]['splititems'] = true;
     $tab[25]['massiveaction'] = false;
     $tab[25]['joinparams'] = array('jointype' => 'child', 'condition' => $followup_condition);
     $tab[25]['datatype'] = 'text';
     $tab[36]['table'] = 'glpi_ticketfollowups';
     $tab[36]['field'] = 'date';
     $tab[36]['name'] = __('Date');
     $tab[36]['datatype'] = 'datetime';
     $tab[36]['massiveaction'] = false;
     $tab[36]['forcegroupby'] = true;
     $tab[36]['joinparams'] = array('jointype' => 'child', 'condition' => $followup_condition);
     $tab[27]['table'] = 'glpi_ticketfollowups';
     $tab[27]['field'] = 'id';
     $tab[27]['name'] = _x('quantity', 'Number of followups');
     $tab[27]['forcegroupby'] = true;
     $tab[27]['usehaving'] = true;
     $tab[27]['datatype'] = 'count';
     $tab[27]['massiveaction'] = false;
     $tab[27]['joinparams'] = array('jointype' => 'child', 'condition' => $followup_condition);
     $tab[29]['table'] = 'glpi_requesttypes';
     $tab[29]['field'] = 'name';
     $tab[29]['name'] = __('Request source');
     $tab[29]['datatype'] = 'dropdown';
     $tab[29]['forcegroupby'] = true;
     $tab[29]['massiveaction'] = false;
     $tab[29]['joinparams'] = array('beforejoin' => array('table' => 'glpi_ticketfollowups', 'joinparams' => array('jointype' => 'child', 'condition' => $followup_condition)));
     $tab[91]['table'] = 'glpi_ticketfollowups';
     $tab[91]['field'] = 'is_private';
     $tab[91]['name'] = __('Private followup');
     $tab[91]['datatype'] = 'bool';
     $tab[91]['forcegroupby'] = true;
     $tab[91]['splititems'] = true;
     $tab[91]['massiveaction'] = false;
     $tab[91]['joinparams'] = array('jointype' => 'child', 'condition' => $followup_condition);
     $tab[93]['table'] = 'glpi_users';
     $tab[93]['field'] = 'name';
     $tab[93]['name'] = __('Writer');
     $tab[93]['datatype'] = 'itemlink';
     $tab[93]['right'] = 'all';
     $tab[93]['forcegroupby'] = true;
     $tab[93]['massiveaction'] = false;
     $tab[93]['joinparams'] = array('beforejoin' => array('table' => 'glpi_ticketfollowups', 'joinparams' => array('jointype' => 'child', 'condition' => $followup_condition)));
     $tab += $this->getSearchOptionsStats();
     $tab[150]['table'] = $this->getTable();
     $tab[150]['field'] = 'takeintoaccount_delay_stat';
     $tab[150]['name'] = __('Take into account time');
     $tab[150]['datatype'] = 'timestamp';
     $tab[150]['forcegroupby'] = true;
     $tab[150]['massiveaction'] = false;
     if (Session::haveRightsOr(self::$rightname, array(self::READALL, self::READASSIGN, self::OWN))) {
         $tab['linktickets'] = _n('Linked ticket', 'Linked tickets', Session::getPluralNumber());
         $tab[40]['table'] = 'glpi_tickets_tickets';
         $tab[40]['field'] = 'tickets_id_1';
         $tab[40]['name'] = __('All linked tickets');
         $tab[40]['massiveaction'] = false;
         $tab[40]['forcegroupby'] = true;
         $tab[40]['searchtype'] = 'equals';
         $tab[40]['joinparams'] = array('jointype' => 'item_item');
         $tab[40]['additionalfields'] = array('tickets_id_2');
         $tab[47]['table'] = 'glpi_tickets_tickets';
         $tab[47]['field'] = 'tickets_id_1';
         $tab[47]['name'] = __('Duplicated tickets');
         $tab[47]['massiveaction'] = false;
         $tab[47]['searchtype'] = 'equals';
         $tab[47]['joinparams'] = array('jointype' => 'item_item', 'condition' => "AND NEWTABLE.`link` = " . Ticket_Ticket::DUPLICATE_WITH);
         $tab[47]['additionalfields'] = array('tickets_id_2');
         $tab[47]['forcegroupby'] = true;
         $tab[41]['table'] = 'glpi_tickets_tickets';
         $tab[41]['field'] = 'id';
         $tab[41]['name'] = __('Number of all linked tickets');
         $tab[41]['massiveaction'] = false;
         $tab[41]['datatype'] = 'count';
         $tab[41]['usehaving'] = true;
         $tab[41]['joinparams'] = array('jointype' => 'item_item');
         $tab[46]['table'] = 'glpi_tickets_tickets';
         $tab[46]['field'] = 'id';
         $tab[46]['name'] = __('Number of duplicated tickets');
         $tab[46]['massiveaction'] = false;
         $tab[46]['datatype'] = 'count';
         $tab[46]['usehaving'] = true;
         $tab[46]['joinparams'] = array('jointype' => 'item_item', 'condition' => "AND NEWTABLE.`link` = " . Ticket_Ticket::DUPLICATE_WITH);
         $tab += TicketTask::getSearchOptionsToAdd();
         $tab += $this->getSearchOptionsSolution();
         if (Session::haveRight('ticketcost', READ)) {
             $tab += TicketCost::getSearchOptionsToAdd();
         }
         $tab['problem'] = Problem::getTypeName(Session::getPluralNumber());
         $tab[141]['table'] = 'glpi_problems_tickets';
         $tab[141]['field'] = 'id';
         $tab[141]['name'] = _x('quantity', 'Number of problems');
         $tab[141]['forcegroupby'] = true;
         $tab[141]['usehaving'] = true;
         $tab[141]['datatype'] = 'count';
         $tab[141]['massiveaction'] = false;
         $tab[141]['joinparams'] = array('jointype' => 'child');
     }
     // Filter search fields for helpdesk
     if (!Session::isCron() && (!isset($_SESSION['glpiactiveprofile']['interface']) || $_SESSION['glpiactiveprofile']['interface'] == 'helpdesk')) {
         $tokeep = array('common', 'requester', 'satisfaction');
         if (Session::haveRightsOr('ticketvalidation', array_merge(TicketValidation::getValidateRights(), TicketValidation::getCreateRights()))) {
             $tokeep[] = 'validation';
         }
         $keep = false;
         foreach ($tab as $key => $val) {
             if (!is_array($val)) {
                 $keep = in_array($key, $tokeep);
             }
             if (!$keep) {
                 if (is_array($val)) {
                     $tab[$key]['nosearch'] = true;
                 }
             }
         }
         // last updater no search
         $tab[64]['nosearch'] = true;
     }
     return $tab;
 }
Beispiel #8
0
 function getSearchOptions()
 {
     $tab = array();
     $tab['common'] = __('Characteristics');
     $tab[1]['table'] = $this->getTable();
     $tab[1]['field'] = 'name';
     $tab[1]['name'] = __('Title');
     $tab[1]['searchtype'] = 'contains';
     $tab[1]['datatype'] = 'itemlink';
     $tab[1]['massiveaction'] = false;
     $tab[21]['table'] = $this->getTable();
     $tab[21]['field'] = 'content';
     $tab[21]['name'] = __('Description');
     $tab[21]['massiveaction'] = false;
     $tab[21]['datatype'] = 'text';
     $tab[2]['table'] = $this->getTable();
     $tab[2]['field'] = 'id';
     $tab[2]['name'] = __('ID');
     $tab[2]['massiveaction'] = false;
     $tab[2]['datatype'] = 'number';
     $tab[12]['table'] = $this->getTable();
     $tab[12]['field'] = 'status';
     $tab[12]['name'] = __('Status');
     $tab[12]['searchtype'] = 'equals';
     $tab[12]['datatype'] = 'specific';
     $tab[14]['table'] = $this->getTable();
     $tab[14]['field'] = 'type';
     $tab[14]['name'] = __('Type');
     $tab[14]['searchtype'] = 'equals';
     $tab[14]['datatype'] = 'specific';
     $tab[10]['table'] = $this->getTable();
     $tab[10]['field'] = 'urgency';
     $tab[10]['name'] = __('Urgency');
     $tab[10]['searchtype'] = 'equals';
     $tab[10]['datatype'] = 'specific';
     $tab[11]['table'] = $this->getTable();
     $tab[11]['field'] = 'impact';
     $tab[11]['name'] = __('Impact');
     $tab[11]['searchtype'] = 'equals';
     $tab[11]['datatype'] = 'specific';
     $tab[3]['table'] = $this->getTable();
     $tab[3]['field'] = 'priority';
     $tab[3]['name'] = __('Priority');
     $tab[3]['searchtype'] = 'equals';
     $tab[3]['datatype'] = 'specific';
     $tab[15]['table'] = $this->getTable();
     $tab[15]['field'] = 'date';
     $tab[15]['name'] = __('Opening date');
     $tab[15]['datatype'] = 'datetime';
     $tab[15]['massiveaction'] = false;
     $tab[16]['table'] = $this->getTable();
     $tab[16]['field'] = 'closedate';
     $tab[16]['name'] = __('Closing date');
     $tab[16]['datatype'] = 'datetime';
     $tab[16]['massiveaction'] = false;
     $tab[18]['table'] = $this->getTable();
     $tab[18]['field'] = 'due_date';
     $tab[18]['name'] = __('Due date');
     $tab[18]['datatype'] = 'datetime';
     $tab[18]['maybefuture'] = true;
     $tab[18]['massiveaction'] = false;
     $tab[151]['table'] = $this->getTable();
     $tab[151]['field'] = 'due_date';
     $tab[151]['name'] = __('Due date + Progress');
     $tab[151]['massiveaction'] = false;
     $tab[151]['nosearch'] = true;
     $tab[82]['table'] = $this->getTable();
     $tab[82]['field'] = 'is_late';
     $tab[82]['name'] = __('Late');
     $tab[82]['datatype'] = 'bool';
     $tab[82]['massiveaction'] = false;
     $tab[17]['table'] = $this->getTable();
     $tab[17]['field'] = 'solvedate';
     $tab[17]['name'] = __('Resolution date');
     $tab[17]['datatype'] = 'datetime';
     $tab[17]['massiveaction'] = false;
     $tab[19]['table'] = $this->getTable();
     $tab[19]['field'] = 'date_mod';
     $tab[19]['name'] = __('Last update');
     $tab[19]['datatype'] = 'datetime';
     $tab[19]['massiveaction'] = false;
     $tab[7]['table'] = 'glpi_itilcategories';
     $tab[7]['field'] = 'completename';
     $tab[7]['name'] = __('Category');
     $tab[7]['datatype'] = 'dropdown';
     if (!Session::isCron() && isset($_SESSION['glpiactiveprofile']['interface']) && $_SESSION['glpiactiveprofile']['interface'] == 'helpdesk') {
         $tab[7]['condition'] = "`is_helpdeskvisible`='1'";
     }
     $tab[13]['table'] = $this->getTable();
     $tab[13]['field'] = 'items_id';
     $tab[13]['name'] = __('Associated element');
     $tab[13]['datatype'] = 'specific';
     $tab[13]['nosearch'] = true;
     $tab[13]['nosort'] = true;
     $tab[13]['massiveaction'] = false;
     $tab[13]['additionalfields'] = array('itemtype');
     $tab[131]['table'] = $this->getTable();
     $tab[131]['field'] = 'itemtype';
     $tab[131]['name'] = __('Associated item type');
     $tab[131]['datatype'] = 'itemtypename';
     $tab[131]['itemtype_list'] = 'ticket_types';
     $tab[131]['nosort'] = true;
     $tab[131]['massiveaction'] = false;
     $tab[9]['table'] = 'glpi_requesttypes';
     $tab[9]['field'] = 'name';
     $tab[9]['name'] = __('Request source');
     $tab[9]['datatype'] = 'dropdown';
     // Can't use Location::getSearchOptionsToAdd because id conflicts
     $tab[83]['table'] = 'glpi_locations';
     $tab[83]['field'] = 'completename';
     $tab[83]['name'] = __('Location');
     $tab[83]['datatype'] = 'dropdown';
     $tab[80]['table'] = 'glpi_entities';
     $tab[80]['field'] = 'completename';
     $tab[80]['name'] = __('Entity');
     $tab[80]['massiveaction'] = false;
     $tab[80]['datatype'] = 'dropdown';
     $tab[45]['table'] = $this->getTable();
     $tab[45]['field'] = 'actiontime';
     $tab[45]['name'] = __('Total duration');
     $tab[45]['datatype'] = 'timestamp';
     $tab[45]['withdays'] = false;
     $tab[45]['massiveaction'] = false;
     $tab[45]['nosearch'] = true;
     $tab[64]['table'] = 'glpi_users';
     $tab[64]['field'] = 'name';
     $tab[64]['linkfield'] = 'users_id_lastupdater';
     $tab[64]['name'] = __('Last updater');
     $tab[64]['massiveaction'] = false;
     $tab[64]['datatype'] = 'dropdown';
     $tab[64]['right'] = 'all';
     $tab += $this->getSearchOptionsActors();
     $tab['sla'] = __('SLA');
     $tab[30]['table'] = 'glpi_slas';
     $tab[30]['field'] = 'name';
     $tab[30]['name'] = __('SLA');
     $tab[30]['massiveaction'] = false;
     $tab[30]['datatype'] = 'dropdown';
     $tab[32]['table'] = 'glpi_slalevels';
     $tab[32]['field'] = 'name';
     $tab[32]['name'] = __('Escalation level');
     $tab[32]['massiveaction'] = false;
     $tab[32]['datatype'] = 'dropdown';
     $tab['validation'] = __('Approval');
     $tab[52]['table'] = $this->getTable();
     $tab[52]['field'] = 'global_validation';
     $tab[52]['name'] = __('Approval');
     $tab[52]['searchtype'] = 'equals';
     $tab[52]['datatype'] = 'specific';
     $tab[53]['table'] = 'glpi_ticketvalidations';
     $tab[53]['field'] = 'comment_submission';
     $tab[53]['name'] = sprintf(__('%1$s: %2$s'), __('Request'), __('Comments'));
     $tab[53]['datatype'] = 'text';
     $tab[53]['forcegroupby'] = true;
     $tab[53]['massiveaction'] = false;
     $tab[53]['joinparams'] = array('jointype' => 'child');
     $tab[54]['table'] = 'glpi_ticketvalidations';
     $tab[54]['field'] = 'comment_validation';
     $tab[54]['name'] = sprintf(__('%1$s: %2$s'), __('Approval'), __('Comments'));
     $tab[54]['datatype'] = 'text';
     $tab[54]['forcegroupby'] = true;
     $tab[54]['massiveaction'] = false;
     $tab[54]['joinparams'] = array('jointype' => 'child');
     $tab[55]['table'] = 'glpi_ticketvalidations';
     $tab[55]['field'] = 'status';
     $tab[55]['datatype'] = 'specific';
     $tab[55]['name'] = sprintf(__('%1$s: %2$s'), __('Approval'), __('Status'));
     $tab[55]['searchtype'] = 'equals';
     $tab[55]['forcegroupby'] = true;
     $tab[55]['massiveaction'] = false;
     $tab[55]['joinparams'] = array('jointype' => 'child');
     $tab[56]['table'] = 'glpi_ticketvalidations';
     $tab[56]['field'] = 'submission_date';
     $tab[56]['name'] = sprintf(__('%1$s: %2$s'), __('Request'), __('Date'));
     $tab[56]['datatype'] = 'datetime';
     $tab[56]['forcegroupby'] = true;
     $tab[56]['massiveaction'] = false;
     $tab[56]['joinparams'] = array('jointype' => 'child');
     $tab[57]['table'] = 'glpi_ticketvalidations';
     $tab[57]['field'] = 'validation_date';
     $tab[57]['name'] = sprintf(__('%1$s: %2$s'), __('Approval'), __('Date'));
     $tab[57]['datatype'] = 'datetime';
     $tab[57]['forcegroupby'] = true;
     $tab[57]['massiveaction'] = false;
     $tab[57]['joinparams'] = array('jointype' => 'child');
     $tab[58]['table'] = 'glpi_users';
     $tab[58]['field'] = 'name';
     $tab[58]['name'] = __('Requester');
     $tab[58]['datatype'] = 'itemlink';
     $tab[58]['right'] = array('create_incident_validation', 'create_request_validation');
     $tab[58]['forcegroupby'] = true;
     $tab[58]['massiveaction'] = false;
     $tab[58]['joinparams'] = array('beforejoin' => array('table' => 'glpi_ticketvalidations', 'joinparams' => array('jointype' => 'child')));
     $tab[59]['table'] = 'glpi_users';
     $tab[59]['field'] = 'name';
     $tab[59]['linkfield'] = 'users_id_validate';
     $tab[59]['name'] = __('Approver');
     $tab[59]['datatype'] = 'itemlink';
     $tab[59]['right'] = array('validate_request', 'validate_incident');
     $tab[59]['forcegroupby'] = true;
     $tab[59]['massiveaction'] = false;
     $tab[59]['joinparams'] = array('beforejoin' => array('table' => 'glpi_ticketvalidations', 'joinparams' => array('jointype' => 'child')));
     $tab['satisfaction'] = __('Satisfaction survey');
     $tab[31]['table'] = 'glpi_ticketsatisfactions';
     $tab[31]['field'] = 'type';
     $tab[31]['name'] = __('Type');
     $tab[31]['massiveaction'] = false;
     $tab[31]['searchtype'] = 'equals';
     $tab[31]['joinparams'] = array('jointype' => 'child');
     $tab[31]['datatype'] = 'specific';
     $tab[60]['table'] = 'glpi_ticketsatisfactions';
     $tab[60]['field'] = 'date_begin';
     $tab[60]['name'] = __('Creation date');
     $tab[60]['datatype'] = 'datetime';
     $tab[60]['massiveaction'] = false;
     $tab[60]['joinparams'] = array('jointype' => 'child');
     $tab[61]['table'] = 'glpi_ticketsatisfactions';
     $tab[61]['field'] = 'date_answered';
     $tab[61]['name'] = __('Response date');
     $tab[61]['datatype'] = 'datetime';
     $tab[61]['massiveaction'] = false;
     $tab[61]['joinparams'] = array('jointype' => 'child');
     $tab[62]['table'] = 'glpi_ticketsatisfactions';
     $tab[62]['field'] = 'satisfaction';
     $tab[62]['name'] = __('Satisfaction');
     $tab[62]['datatype'] = 'number';
     $tab[62]['massiveaction'] = false;
     $tab[62]['joinparams'] = array('jointype' => 'child');
     $tab[63]['table'] = 'glpi_ticketsatisfactions';
     $tab[63]['field'] = 'comment';
     $tab[63]['name'] = __('Comments');
     $tab[63]['datatype'] = 'text';
     $tab[63]['massiveaction'] = false;
     $tab[63]['joinparams'] = array('jointype' => 'child');
     $tab['followup'] = _n('Followup', 'Followups', 2);
     $followup_condition = '';
     if (!Session::haveRight('show_full_ticket', 1)) {
         $followup_condition = "AND (`NEWTABLE`.`is_private` = '0'\n                                     OR `NEWTABLE`.`users_id` = '" . Session::getLoginUserID() . "')";
     }
     $tab[25]['table'] = 'glpi_ticketfollowups';
     $tab[25]['field'] = 'content';
     $tab[25]['name'] = __('Description');
     $tab[25]['forcegroupby'] = true;
     $tab[25]['splititems'] = true;
     $tab[25]['massiveaction'] = false;
     $tab[25]['joinparams'] = array('jointype' => 'child', 'condition' => $followup_condition);
     $tab[25]['datatype'] = 'text';
     $tab[27]['table'] = 'glpi_ticketfollowups';
     $tab[27]['field'] = 'count';
     $tab[27]['name'] = __('Number of followups');
     $tab[27]['forcegroupby'] = true;
     $tab[27]['usehaving'] = true;
     $tab[27]['datatype'] = 'number';
     $tab[27]['massiveaction'] = false;
     $tab[27]['joinparams'] = array('jointype' => 'child', 'condition' => $followup_condition);
     $tab[29]['table'] = 'glpi_requesttypes';
     $tab[29]['field'] = 'name';
     $tab[29]['name'] = __('Request source');
     $tab[29]['datatype'] = 'dropdown';
     $tab[29]['forcegroupby'] = true;
     $tab[29]['massiveaction'] = false;
     $tab[29]['joinparams'] = array('beforejoin' => array('table' => 'glpi_ticketfollowups', 'joinparams' => array('jointype' => 'child', 'condition' => $followup_condition)));
     $tab[91]['table'] = 'glpi_ticketfollowups';
     $tab[91]['field'] = 'is_private';
     $tab[91]['name'] = __('Private followup');
     $tab[91]['datatype'] = 'bool';
     $tab[91]['forcegroupby'] = true;
     $tab[91]['splititems'] = true;
     $tab[91]['massiveaction'] = false;
     $tab[91]['joinparams'] = array('jointype' => 'child', 'condition' => $followup_condition);
     $tab[93]['table'] = 'glpi_users';
     $tab[93]['field'] = 'name';
     $tab[93]['name'] = __('Writer');
     $tab[93]['datatype'] = 'itemlink';
     $tab[93]['right'] = 'all';
     $tab[93]['forcegroupby'] = true;
     $tab[93]['massiveaction'] = false;
     $tab[93]['joinparams'] = array('beforejoin' => array('table' => 'glpi_ticketfollowups', 'joinparams' => array('jointype' => 'child', 'condition' => $followup_condition)));
     $tab += $this->getSearchOptionsStats();
     $tab[150]['table'] = $this->getTable();
     $tab[150]['field'] = 'takeintoaccount_delay_stat';
     $tab[150]['name'] = __('Take into account time');
     $tab[150]['datatype'] = 'timestamp';
     $tab[150]['forcegroupby'] = true;
     $tab[150]['massiveaction'] = false;
     if (Session::haveRight("show_all_ticket", "1") || Session::haveRight("show_assign_ticket", "1") || Session::haveRight("own_ticket", "1")) {
         $tab['linktickets'] = _n('Linked ticket', 'Linked tickets', 2);
         $tab[40]['table'] = 'glpi_tickets';
         $tab[40]['field'] = 'name';
         $tab[40]['name'] = __('All linked tickets');
         $tab[40]['massiveaction'] = false;
         $tab[40]['joinparams'] = array('jointype' => 'item_item_revert', 'condition' => "AND NEWTABLE.`id` <> `glpi_tickets`.`id`", 'beforejoin' => array('table' => 'glpi_tickets_tickets', 'joinparams' => array('jointype' => 'item_item')));
         $tab[40]['datatype'] = 'dropdown';
         $tab[40]['forcegroupby'] = true;
         $tab[47]['table'] = 'glpi_tickets';
         $tab[47]['field'] = 'name';
         $tab[47]['name'] = __('Duplicated tickets');
         $tab[47]['massiveaction'] = false;
         $tab[47]['joinparams'] = array('jointype' => 'item_item_revert', 'condition' => "AND NEWTABLE.`id` <> `glpi_tickets`.`id`", 'beforejoin' => array('table' => 'glpi_tickets_tickets', 'joinparams' => array('jointype' => 'item_item', 'condition' => "AND NEWTABLE.`link` = " . Ticket_Ticket::DUPLICATE_WITH)));
         $tab[47]['datatype'] = 'dropdown';
         $tab[47]['forcegroupby'] = true;
         $tab[41]['table'] = 'glpi_tickets_tickets';
         $tab[41]['field'] = 'count';
         $tab[41]['name'] = __('Number of all linked tickets');
         $tab[41]['massiveaction'] = false;
         $tab[41]['datatype'] = 'number';
         $tab[41]['usehaving'] = true;
         $tab[41]['joinparams'] = array('jointype' => 'item_item');
         $tab[46]['table'] = 'glpi_tickets_tickets';
         $tab[46]['field'] = 'count';
         $tab[46]['name'] = __('Number of duplicated tickets');
         $tab[46]['massiveaction'] = false;
         $tab[46]['datatype'] = 'number';
         $tab[46]['usehaving'] = true;
         $tab[46]['joinparams'] = array('jointype' => 'item_item', 'condition' => "AND NEWTABLE.`link` = " . Ticket_Ticket::DUPLICATE_WITH);
         $tab['task'] = _n('Task', 'Tasks', 2);
         $tab[26]['table'] = 'glpi_tickettasks';
         $tab[26]['field'] = 'content';
         $tab[26]['name'] = __('Description');
         $tab[26]['datatype'] = 'text';
         $tab[26]['forcegroupby'] = true;
         $tab[26]['splititems'] = true;
         $tab[26]['massiveaction'] = false;
         $tab[26]['joinparams'] = array('jointype' => 'child');
         $tab[28]['table'] = 'glpi_tickettasks';
         $tab[28]['field'] = 'count';
         $tab[28]['name'] = __('Number of tasks');
         $tab[28]['forcegroupby'] = true;
         $tab[28]['usehaving'] = true;
         $tab[28]['datatype'] = 'number';
         $tab[28]['massiveaction'] = false;
         $tab[28]['joinparams'] = array('jointype' => 'child');
         $tab[20]['table'] = 'glpi_taskcategories';
         $tab[20]['field'] = 'name';
         $tab[20]['datatype'] = 'dropdown';
         $tab[20]['name'] = __('Task category');
         $tab[20]['forcegroupby'] = true;
         $tab[20]['splititems'] = true;
         $tab[20]['massiveaction'] = false;
         $tab[20]['joinparams'] = array('beforejoin' => array('table' => 'glpi_tickettasks', 'joinparams' => array('jointype' => 'child')));
         $tab[92]['table'] = 'glpi_tickettasks';
         $tab[92]['field'] = 'is_private';
         $tab[92]['name'] = __('Private task');
         $tab[92]['datatype'] = 'bool';
         $tab[92]['forcegroupby'] = true;
         $tab[92]['splititems'] = true;
         $tab[92]['massiveaction'] = false;
         $tab[92]['joinparams'] = array('jointype' => 'child');
         $tab[94]['table'] = 'glpi_users';
         $tab[94]['field'] = 'name';
         $tab[94]['name'] = __('Writer');
         $tab[94]['datatype'] = 'itemlink';
         $tab[94]['right'] = 'all';
         $tab[94]['forcegroupby'] = true;
         $tab[94]['massiveaction'] = false;
         $tab[94]['joinparams'] = array('beforejoin' => array('table' => 'glpi_tickettasks', 'joinparams' => array('jointype' => 'child')));
         $tab[95]['table'] = 'glpi_users';
         $tab[95]['field'] = 'name';
         $tab[95]['linkfield'] = 'users_id_tech';
         $tab[95]['name'] = __('Technician');
         $tab[95]['datatype'] = 'itemlink';
         $tab[95]['right'] = 'own_ticket';
         $tab[95]['forcegroupby'] = true;
         $tab[95]['massiveaction'] = false;
         $tab[95]['joinparams'] = array('beforejoin' => array('table' => 'glpi_tickettasks', 'joinparams' => array('jointype' => 'child')));
         $tab[96]['table'] = 'glpi_tickettasks';
         $tab[96]['field'] = 'actiontime';
         $tab[96]['name'] = __('Duration');
         $tab[96]['datatype'] = 'timestamp';
         $tab[96]['massiveaction'] = false;
         $tab[96]['joinparams'] = array('jointype' => 'child');
         $tab[97]['table'] = 'glpi_tickettasks';
         $tab[97]['field'] = 'date';
         $tab[97]['name'] = __('Date');
         $tab[97]['datatype'] = 'datetime';
         $tab[97]['massiveaction'] = false;
         $tab[97]['joinparams'] = array('jointype' => 'child');
         $tab['solution'] = _n('Solution', 'Solutions', 1);
         $tab[23]['table'] = 'glpi_solutiontypes';
         $tab[23]['field'] = 'name';
         $tab[23]['name'] = __('Solution type');
         $tab[23]['datatype'] = 'dropdown';
         $tab[24]['table'] = $this->getTable();
         $tab[24]['field'] = 'solution';
         $tab[24]['name'] = _n('Solution', 'Solutions', 1);
         $tab[24]['datatype'] = 'text';
         $tab[24]['htmltext'] = true;
         $tab[24]['massiveaction'] = false;
         $tab['cost'] = __('Cost');
         $tab[48]['table'] = 'glpi_ticketcosts';
         $tab[48]['field'] = 'totalcost';
         $tab[48]['name'] = __('Total cost');
         $tab[48]['datatype'] = 'decimal';
         $tab[48]['forcegroupby'] = true;
         $tab[48]['usehaving'] = true;
         $tab[48]['massiveaction'] = false;
         $tab[48]['joinparams'] = array('jointype' => 'child');
         $tab[42]['table'] = 'glpi_ticketcosts';
         $tab[42]['field'] = 'cost_time';
         $tab[42]['name'] = __('Time cost');
         $tab[42]['datatype'] = 'decimal';
         $tab[42]['forcegroupby'] = true;
         $tab[42]['massiveaction'] = false;
         $tab[42]['joinparams'] = array('jointype' => 'child');
         $tab[49]['table'] = 'glpi_ticketcosts';
         $tab[49]['field'] = 'actiontime';
         $tab[49]['name'] = sprintf(__('%1$s - %2$s'), __('Cost'), __('Duration'));
         $tab[49]['datatype'] = 'timestamp';
         $tab[49]['forcegroupby'] = true;
         $tab[49]['massiveaction'] = false;
         $tab[49]['joinparams'] = array('jointype' => 'child');
         $tab[43]['table'] = 'glpi_ticketcosts';
         $tab[43]['field'] = 'cost_fixed';
         $tab[43]['name'] = __('Fixed cost');
         $tab[43]['datatype'] = 'decimal';
         $tab[43]['forcegroupby'] = true;
         $tab[43]['massiveaction'] = false;
         $tab[43]['joinparams'] = array('jointype' => 'child');
         $tab[44]['table'] = 'glpi_ticketcosts';
         $tab[44]['field'] = 'cost_material';
         $tab[44]['name'] = __('Material cost');
         $tab[44]['datatype'] = 'decimal';
         $tab[44]['forcegroupby'] = true;
         $tab[44]['massiveaction'] = false;
         $tab[44]['joinparams'] = array('jointype' => 'child');
         $tab['problem'] = Problem::getTypeName(2);
         $tab[141]['table'] = 'glpi_problems_tickets';
         $tab[141]['field'] = 'count';
         $tab[141]['name'] = __('Number of problems');
         $tab[141]['forcegroupby'] = true;
         $tab[141]['usehaving'] = true;
         $tab[141]['datatype'] = 'number';
         $tab[141]['massiveaction'] = false;
         $tab[141]['joinparams'] = array('jointype' => 'child');
     }
     // Filter search fields for helpdesk
     if (!Session::isCron() && (!isset($_SESSION['glpiactiveprofile']['interface']) || $_SESSION['glpiactiveprofile']['interface'] == 'helpdesk')) {
         $tokeep = array('common', 'requester');
         if (Session::haveRight('validate_request', 1) || Session::haveRight('validate_incident', 1) || Session::haveRight('create_incident_validation', 1) || Session::haveRight('create_request_validation', 1)) {
             $tokeep[] = 'validation';
         }
         $keep = false;
         foreach ($tab as $key => $val) {
             if (!is_array($val)) {
                 $keep = in_array($key, $tokeep);
             }
             if (!$keep) {
                 if (is_array($val)) {
                     $tab[$key]['nosearch'] = true;
                 }
             }
         }
         // last updater no search
         $tab[64]['nosearch'] = true;
     }
     return $tab;
 }
Beispiel #9
0
 /**
  * @since version 0.84 (before in entitydata.class)
  **/
 function prepareInputForUpdate($input)
 {
     $input = parent::prepareInputForUpdate($input);
     // Si on change le taux de déclenchement de l'enquête (enquête activée) ou le type de l'enquete,
     // cela s'applique aux prochains tickets - Pas à l'historique
     if (isset($input['inquest_rate']) && ($this->fields['inquest_rate'] == 0 || is_null($this->fields['max_closedate'])) && $input['inquest_rate'] != $this->fields['inquest_rate'] || isset($input['inquest_config']) && ($this->fields['inquest_config'] == self::CONFIG_PARENT || is_null($this->fields['max_closedate'])) && $input['inquest_config'] != $this->fields['inquest_config']) {
         $input['max_closedate'] = $_SESSION["glpi_currenttime"];
     }
     // Force entities_id = -1 for root entity
     if ($input['id'] == 0) {
         $input['entities_id'] = -1;
         $input['level'] = 1;
     }
     if (!Session::isCron()) {
         // Filter input for connected
         $input = $this->checkRightDatas($input);
     }
     return $input;
 }
 function prepareInputForAdd($input)
 {
     $input["users_id"] = 0;
     // Only set requester on manual action
     if (!isset($input['_auto_import']) && !isset($input['_auto_update']) && !Session::isCron()) {
         $input["users_id"] = Session::getLoginUserID();
     }
     $input["submission_date"] = $_SESSION["glpi_currenttime"];
     $input["status"] = self::WAITING;
     if (!isset($input["users_id_validate"]) || $input["users_id_validate"] <= 0) {
         return false;
     }
     return parent::prepareInputForAdd($input);
 }
Beispiel #11
0
 static function getSearchOptionsToAdd()
 {
     $tab = array();
     if (!self::canView()) {
         return $tab;
     }
     $tab['license'] = _n('License', 'Licenses', Session::getPluralNumber());
     $licjoin = array();
     $licjoinexpire = array();
     if (!Session::isCron() && !isCommandLine()) {
         // no filter for cron
         $licjoin = array('jointype' => 'child', 'condition' => getEntitiesRestrictRequest(' AND', "NEWTABLE", '', '', true));
         $licjoinexpire = array('jointype' => 'child', 'condition' => getEntitiesRestrictRequest(' AND', "NEWTABLE", '', '', true) . " AND (NEWTABLE.`expire` IS NULL\n                                                      OR NEWTABLE.`expire` > NOW())");
     }
     $tab[160]['table'] = 'glpi_softwarelicenses';
     $tab[160]['field'] = 'name';
     $tab[160]['name'] = __('License name');
     $tab[160]['datatype'] = 'dropdown';
     $tab[160]['forcegroupby'] = true;
     $tab[160]['massiveaction'] = false;
     $tab[160]['joinparams'] = $licjoinexpire;
     $tab[161]['table'] = 'glpi_softwarelicenses';
     $tab[161]['field'] = 'serial';
     $tab[161]['datatype'] = 'string';
     $tab[161]['name'] = __('License serial number');
     $tab[161]['forcegroupby'] = true;
     $tab[161]['massiveaction'] = false;
     $tab[161]['joinparams'] = $licjoinexpire;
     $tab[162]['table'] = 'glpi_softwarelicenses';
     $tab[162]['field'] = 'otherserial';
     $tab[162]['datatype'] = 'string';
     $tab[162]['name'] = __('License inventory number');
     $tab[162]['forcegroupby'] = true;
     $tab[162]['massiveaction'] = false;
     $tab[162]['joinparams'] = $licjoinexpire;
     $tab[163]['table'] = 'glpi_softwarelicenses';
     $tab[163]['field'] = 'number';
     $tab[163]['name'] = _x('phone', 'Number of licenses');
     $tab[163]['forcegroupby'] = true;
     $tab[163]['usehaving'] = true;
     $tab[163]['datatype'] = 'number';
     $tab[163]['massiveaction'] = false;
     $tab[163]['joinparams'] = $licjoinexpire;
     $tab[164]['table'] = 'glpi_softwarelicensetypes';
     $tab[164]['field'] = 'name';
     $tab[164]['datatype'] = 'dropdown';
     $tab[164]['name'] = _n('License type', 'License types', Session::getPluralNumber());
     $tab[164]['forcegroupby'] = true;
     $tab[164]['massiveaction'] = false;
     $tab[164]['joinparams'] = array('beforejoin' => array('table' => 'glpi_softwarelicenses', 'joinparams' => $licjoinexpire));
     $tab[165]['table'] = 'glpi_softwarelicenses';
     $tab[165]['field'] = 'comment';
     $tab[165]['name'] = __('License comments');
     $tab[165]['forcegroupby'] = true;
     $tab[165]['datatype'] = 'text';
     $tab[165]['massiveaction'] = false;
     $tab[165]['joinparams'] = $licjoinexpire;
     $tab[166]['table'] = 'glpi_softwarelicenses';
     $tab[166]['field'] = 'expire';
     $tab[166]['name'] = __('Expiration');
     $tab[166]['forcegroupby'] = true;
     $tab[166]['datatype'] = 'date';
     $tab[166]['emptylabel'] = __('Never expire');
     $tab[166]['massiveaction'] = false;
     $tab[166]['joinparams'] = $licjoinexpire;
     $tab[167]['table'] = 'glpi_softwarelicenses';
     $tab[167]['field'] = 'is_valid';
     $tab[167]['name'] = _x('adjective', 'Valid');
     $tab[167]['forcegroupby'] = true;
     $tab[167]['datatype'] = 'bool';
     $tab[167]['massiveaction'] = false;
     $tab[167]['joinparams'] = $licjoinexpire;
     return $tab;
 }
Beispiel #12
0
 static function getEntries($type = 'tab', $full = false)
 {
     $sql_type = "1=1";
     if ($type !== "all") {
         $sql_type = "`type` = '{$type}'";
     }
     if (!TableExists("glpi_plugin_fields_containers")) {
         return false;
     }
     $itemtypes = array();
     $container = new self();
     $profile = new PluginFieldsProfile();
     $found = $container->find("{$sql_type} AND is_active = 1", "`label`");
     foreach ($found as $item) {
         //entities restriction
         if (!in_array($item['entities_id'], $_SESSION['glpiactiveentities'])) {
             if ($item['is_recursive'] == 1) {
                 $entities = getSonsOf("glpi_entities", $item['entities_id']);
                 if (count(array_intersect($entities, $_SESSION['glpiactiveentities'])) == 0) {
                     continue;
                 }
             } else {
                 continue;
             }
         }
         //profiles restriction
         if (Session::isCron() || !isset($_SESSION['glpiactiveprofile']['id'])) {
             continue;
         }
         $found = $profile->find("`profiles_id` = '" . $_SESSION['glpiactiveprofile']['id'] . "'\n                                 AND `plugin_fields_containers_id` = '" . $item['id'] . "'");
         $first_found = array_shift($found);
         if ($first_found['right'] == NULL) {
             continue;
         }
         //show more info or not
         if ($full) {
             $itemtypes[$item['itemtype']][$item['name']] = $item['label'];
         } else {
             $itemtypes[] = $item['itemtype'];
         }
     }
     return $itemtypes;
 }