/**
* @param $start
* @param $status (default ''process)
* @param $showgrouptickets (true by default)
*/
static function showCentralList($start, $status = "process", $showgrouptickets = true)
{
global $DB, $CFG_GLPI;
if (!Session::haveRightsOr(self::$rightname, array(CREATE, self::READALL, self::READASSIGN)) && !Session::haveRightsOr('ticketvalidation', TicketValidation::getValidateRights())) {
return false;
}
$search_users_id = " (`glpi_tickets_users`.`users_id` = '" . Session::getLoginUserID() . "'\n AND `glpi_tickets_users`.`type` = '" . CommonITILActor::REQUESTER . "') ";
$search_assign = " (`glpi_tickets_users`.`users_id` = '" . Session::getLoginUserID() . "'\n AND `glpi_tickets_users`.`type` = '" . CommonITILActor::ASSIGN . "')";
$search_observer = " (`glpi_tickets_users`.`users_id` = '" . Session::getLoginUserID() . "'\n AND `glpi_tickets_users`.`type` = '" . CommonITILActor::OBSERVER . "')";
$is_deleted = " `glpi_tickets`.`is_deleted` = 0 ";
if ($showgrouptickets) {
$search_users_id = " 0 = 1 ";
$search_assign = " 0 = 1 ";
if (count($_SESSION['glpigroups'])) {
$groups = implode("','", $_SESSION['glpigroups']);
$search_assign = " (`glpi_groups_tickets`.`groups_id` IN ('" . $groups . "')\n AND `glpi_groups_tickets`.`type` = '" . CommonITILActor::ASSIGN . "')";
if (Session::haveRight(self::$rightname, self::READGROUP)) {
$search_users_id = " (`glpi_groups_tickets`.`groups_id` IN ('" . $groups . "')\n AND `glpi_groups_tickets`.`type`\n = '" . CommonITILActor::REQUESTER . "') ";
$search_observer = " (`glpi_groups_tickets`.`groups_id` IN ('" . $groups . "')\n AND `glpi_groups_tickets`.`type`\n = '" . CommonITILActor::OBSERVER . "') ";
}
}
}
$query = "SELECT DISTINCT `glpi_tickets`.`id`\n FROM `glpi_tickets`\n LEFT JOIN `glpi_tickets_users`\n ON (`glpi_tickets`.`id` = `glpi_tickets_users`.`tickets_id`)\n LEFT JOIN `glpi_groups_tickets`\n ON (`glpi_tickets`.`id` = `glpi_groups_tickets`.`tickets_id`)";
switch ($status) {
case "waiting":
// on affiche les tickets en attente
$query .= "WHERE {$is_deleted}\n AND ({$search_assign})\n AND `status` = '" . self::WAITING . "' " . getEntitiesRestrictRequest("AND", "glpi_tickets");
break;
case "process":
// on affiche les tickets planifiés ou assignés au user
$query .= "WHERE {$is_deleted}\n AND ( {$search_assign} )\n AND (`status` IN ('" . implode("','", self::getProcessStatusArray()) . "')) " . getEntitiesRestrictRequest("AND", "glpi_tickets");
break;
case "toapprove":
// on affiche les tickets planifiés ou assignés au user
$query .= "WHERE {$is_deleted}\n AND (`status` = '" . self::SOLVED . "')\n AND ({$search_users_id}";
if (!$showgrouptickets && Session::haveRight('ticket', Ticket::SURVEY)) {
$query .= " OR `glpi_tickets`.users_id_recipient = '" . Session::getLoginUserID() . "' ";
}
$query .= ")" . getEntitiesRestrictRequest("AND", "glpi_tickets");
break;
case "tovalidate":
// on affiche les tickets à valider
$query .= " LEFT JOIN `glpi_ticketvalidations`\n ON (`glpi_tickets`.`id` = `glpi_ticketvalidations`.`tickets_id`)\n WHERE {$is_deleted}\n AND `users_id_validate` = '" . Session::getLoginUserID() . "'\n AND `glpi_ticketvalidations`.`status` = '" . CommonITILValidation::WAITING . "'\n AND (`glpi_tickets`.`status` NOT IN ('" . self::CLOSED . "',\n '" . self::SOLVED . "')) " . getEntitiesRestrictRequest("AND", "glpi_tickets");
break;
case "rejected":
// on affiche les tickets rejetés
$query .= "WHERE {$is_deleted}\n AND ({$search_assign})\n AND `status` <> '" . self::CLOSED . "'\n AND `global_validation` = '" . CommonITILValidation::REFUSED . "' " . getEntitiesRestrictRequest("AND", "glpi_tickets");
break;
case "observed":
$query .= "WHERE {$is_deleted}\n AND ({$search_observer})\n AND (`status` IN ('" . self::INCOMING . "',\n '" . self::PLANNED . "',\n '" . self::ASSIGNED . "',\n '" . self::WAITING . "'))\n AND NOT ( {$search_assign} )\n AND NOT ( {$search_users_id} ) " . getEntitiesRestrictRequest("AND", "glpi_tickets");
break;
case "survey":
// tickets dont l'enquête de satisfaction n'est pas remplie et encore valide
$query .= " INNER JOIN `glpi_ticketsatisfactions`\n ON (`glpi_tickets`.`id` = `glpi_ticketsatisfactions`.`tickets_id`)\n INNER JOIN `glpi_entities`\n ON (`glpi_entities`.`id` = `glpi_tickets`.`entities_id`)\n WHERE {$is_deleted}\n AND ({$search_users_id}\n OR `glpi_tickets`.`users_id_recipient` = '" . Session::getLoginUserID() . "')\n AND `glpi_tickets`.`status` = '" . self::CLOSED . "'\n AND (`glpi_entities`.`inquest_duration` = 0\n OR DATEDIFF(ADDDATE(`glpi_ticketsatisfactions`.`date_begin`,\n INTERVAL\n `glpi_entities`.`inquest_duration` DAY),\n CURDATE()) > 0)\n AND `glpi_ticketsatisfactions`.`date_answered` IS NULL " . getEntitiesRestrictRequest("AND", "glpi_tickets");
break;
case "requestbyself":
// on affiche les tickets demandés le user qui sont planifiés ou assignés
// à quelqu'un d'autre (exclut les self-tickets)
// on affiche les tickets demandés le user qui sont planifiés ou assignés
// à quelqu'un d'autre (exclut les self-tickets)
default:
$query .= "WHERE {$is_deleted}\n AND ({$search_users_id})\n AND (`status` IN ('" . self::INCOMING . "',\n '" . self::PLANNED . "',\n '" . self::ASSIGNED . "',\n '" . self::WAITING . "'))\n AND NOT ( {$search_assign} ) " . getEntitiesRestrictRequest("AND", "glpi_tickets");
}
$query .= " ORDER BY `glpi_tickets`.`date_mod` DESC";
$result = $DB->query($query);
$numrows = $DB->numrows($result);
if ($_SESSION['glpidisplay_count_on_home'] > 0) {
$query .= " LIMIT " . intval($start) . ',' . intval($_SESSION['glpidisplay_count_on_home']);
$result = $DB->query($query);
$number = $DB->numrows($result);
} else {
$number = 0;
}
if ($numrows > 0) {
echo "<table class='tab_cadrehov'>";
echo "<tr class='noHover'><th colspan='4'>";
$options['reset'] = 'reset';
$forcetab = '';
$num = 0;
if ($showgrouptickets) {
switch ($status) {
case "toapprove":
$options['criteria'][0]['field'] = 12;
// status
$options['criteria'][0]['searchtype'] = 'equals';
$options['criteria'][0]['value'] = self::SOLVED;
$options['criteria'][0]['link'] = 'AND';
$options['criteria'][1]['field'] = 71;
// groups_id
$options['criteria'][1]['searchtype'] = 'equals';
$options['criteria'][1]['value'] = 'mygroups';
$options['criteria'][1]['link'] = 'AND';
$forcetab = 'Ticket$2';
echo "<a href=\"" . $CFG_GLPI["root_doc"] . "/front/ticket.php?" . Toolbox::append_params($options, '&') . "\">" . Html::makeTitle(__('Your tickets to close'), $number, $numrows) . "</a>";
break;
case "waiting":
$options['criteria'][0]['field'] = 12;
// status
$options['criteria'][0]['searchtype'] = 'equals';
$options['criteria'][0]['value'] = self::WAITING;
$options['criteria'][0]['link'] = 'AND';
$options['criteria'][1]['field'] = 8;
// groups_id_assign
$options['criteria'][1]['searchtype'] = 'equals';
$options['criteria'][1]['value'] = 'mygroups';
$options['criteria'][1]['link'] = 'AND';
echo "<a href=\"" . $CFG_GLPI["root_doc"] . "/front/ticket.php?" . Toolbox::append_params($options, '&') . "\">" . Html::makeTitle(__('Tickets on pending status'), $number, $numrows) . "</a>";
break;
case "process":
$options['criteria'][0]['field'] = 12;
// status
$options['criteria'][0]['searchtype'] = 'equals';
$options['criteria'][0]['value'] = 'process';
$options['criteria'][0]['link'] = 'AND';
$options['criteria'][1]['field'] = 8;
// groups_id_assign
$options['criteria'][1]['searchtype'] = 'equals';
$options['criteria'][1]['value'] = 'mygroups';
$options['criteria'][1]['link'] = 'AND';
echo "<a href=\"" . $CFG_GLPI["root_doc"] . "/front/ticket.php?" . Toolbox::append_params($options, '&') . "\">" . Html::makeTitle(__('Tickets to be processed'), $number, $numrows) . "</a>";
break;
case "observed":
$options['criteria'][0]['field'] = 12;
// status
$options['criteria'][0]['searchtype'] = 'equals';
$options['criteria'][0]['value'] = 'notold';
$options['criteria'][0]['link'] = 'AND';
$options['criteria'][1]['field'] = 65;
// groups_id
$options['criteria'][1]['searchtype'] = 'equals';
$options['criteria'][1]['value'] = 'mygroups';
$options['criteria'][1]['link'] = 'AND';
echo "<a href=\"" . $CFG_GLPI["root_doc"] . "/front/ticket.php?" . Toolbox::append_params($options, '&') . "\">" . Html::makeTitle(__('Your observed tickets'), $number, $numrows) . "</a>";
break;
case "requestbyself":
default:
$options['criteria'][0]['field'] = 12;
// status
$options['criteria'][0]['searchtype'] = 'equals';
$options['criteria'][0]['value'] = 'notold';
$options['criteria'][0]['link'] = 'AND';
$options['criteria'][1]['field'] = 71;
// groups_id
$options['criteria'][1]['searchtype'] = 'equals';
$options['criteria'][1]['value'] = 'mygroups';
$options['criteria'][1]['link'] = 'AND';
echo "<a href=\"" . $CFG_GLPI["root_doc"] . "/front/ticket.php?" . Toolbox::append_params($options, '&') . "\">" . Html::makeTitle(__('Your tickets in progress'), $number, $numrows) . "</a>";
}
} else {
switch ($status) {
case "waiting":
$options['criteria'][0]['field'] = 12;
// status
$options['criteria'][0]['searchtype'] = 'equals';
$options['criteria'][0]['value'] = self::WAITING;
$options['criteria'][0]['link'] = 'AND';
$options['criteria'][1]['field'] = 5;
// users_id_assign
$options['criteria'][1]['searchtype'] = 'equals';
$options['criteria'][1]['value'] = Session::getLoginUserID();
$options['criteria'][1]['link'] = 'AND';
echo "<a href=\"" . $CFG_GLPI["root_doc"] . "/front/ticket.php?" . Toolbox::append_params($options, '&') . "\">" . Html::makeTitle(__('Tickets on pending status'), $number, $numrows) . "</a>";
break;
case "process":
$options['criteria'][0]['field'] = 5;
// users_id_assign
$options['criteria'][0]['searchtype'] = 'equals';
$options['criteria'][0]['value'] = Session::getLoginUserID();
$options['criteria'][0]['link'] = 'AND';
$options['criteria'][1]['field'] = 12;
// status
$options['criteria'][1]['searchtype'] = 'equals';
$options['criteria'][1]['value'] = 'process';
$options['criteria'][1]['link'] = 'AND';
echo "<a href=\"" . $CFG_GLPI["root_doc"] . "/front/ticket.php?" . Toolbox::append_params($options, '&') . "\">" . Html::makeTitle(__('Tickets to be processed'), $number, $numrows) . "</a>";
break;
case "tovalidate":
$options['criteria'][0]['field'] = 55;
// validation status
$options['criteria'][0]['searchtype'] = 'equals';
$options['criteria'][0]['value'] = CommonITILValidation::WAITING;
$options['criteria'][0]['link'] = 'AND';
$options['criteria'][1]['field'] = 59;
// validation aprobator
$options['criteria'][1]['searchtype'] = 'equals';
$options['criteria'][1]['value'] = Session::getLoginUserID();
$options['criteria'][1]['link'] = 'AND';
$options['criteria'][2]['field'] = 12;
// validation aprobator
$options['criteria'][2]['searchtype'] = 'equals';
$options['criteria'][2]['value'] = 'old';
$options['criteria'][2]['link'] = 'AND NOT';
$forcetab = 'TicketValidation$1';
echo "<a href=\"" . $CFG_GLPI["root_doc"] . "/front/ticket.php?" . Toolbox::append_params($options, '&') . "\">" . Html::makeTitle(__('Your tickets to validate'), $number, $numrows) . "</a>";
break;
case "rejected":
$options['criteria'][0]['field'] = 52;
// validation status
$options['criteria'][0]['searchtype'] = 'equals';
$options['criteria'][0]['value'] = CommonITILValidation::REFUSED;
$options['criteria'][0]['link'] = 'AND';
$options['criteria'][1]['field'] = 5;
// assign user
$options['criteria'][1]['searchtype'] = 'equals';
$options['criteria'][1]['value'] = Session::getLoginUserID();
$options['criteria'][1]['link'] = 'AND';
echo "<a href=\"" . $CFG_GLPI["root_doc"] . "/front/ticket.php?" . Toolbox::append_params($options, '&') . "\">" . Html::makeTitle(__('Your rejected tickets'), $number, $numrows) . "</a>";
break;
case "toapprove":
$options['criteria'][0]['field'] = 12;
// status
$options['criteria'][0]['searchtype'] = 'equals';
$options['criteria'][0]['value'] = self::SOLVED;
$options['criteria'][0]['link'] = 'AND';
$options['criteria'][1]['field'] = 4;
// users_id_assign
$options['criteria'][1]['searchtype'] = 'equals';
$options['criteria'][1]['value'] = Session::getLoginUserID();
$options['criteria'][1]['link'] = 'AND';
$options['criteria'][2]['field'] = 22;
// users_id_recipient
$options['criteria'][2]['searchtype'] = 'equals';
$options['criteria'][2]['value'] = Session::getLoginUserID();
$options['criteria'][2]['link'] = 'OR';
$options['criteria'][3]['field'] = 12;
// status
$options['criteria'][3]['searchtype'] = 'equals';
$options['criteria'][3]['value'] = self::SOLVED;
$options['criteria'][3]['link'] = 'AND';
$forcetab = 'Ticket$2';
echo "<a href=\"" . $CFG_GLPI["root_doc"] . "/front/ticket.php?" . Toolbox::append_params($options, '&') . "\">" . Html::makeTitle(__('Your tickets to close'), $number, $numrows) . "</a>";
break;
case "observed":
$options['criteria'][0]['field'] = 66;
// users_id
$options['criteria'][0]['searchtype'] = 'equals';
$options['criteria'][0]['value'] = Session::getLoginUserID();
$options['criteria'][0]['link'] = 'AND';
$options['criteria'][1]['field'] = 12;
// status
$options['criteria'][1]['searchtype'] = 'equals';
$options['criteria'][1]['value'] = 'notold';
$options['criteria'][1]['link'] = 'AND';
echo "<a href=\"" . $CFG_GLPI["root_doc"] . "/front/ticket.php?" . Toolbox::append_params($options, '&') . "\">" . Html::makeTitle(__('Your observed tickets'), $number, $numrows) . "</a>";
break;
case "survey":
$options['criteria'][0]['field'] = 12;
// status
$options['criteria'][0]['searchtype'] = 'equals';
$options['criteria'][0]['value'] = self::CLOSED;
$options['criteria'][0]['link'] = 'AND';
$options['criteria'][1]['field'] = 60;
// enquete generee
$options['criteria'][1]['searchtype'] = 'contains';
$options['criteria'][1]['value'] = '^';
$options['criteria'][1]['link'] = 'AND';
$options['criteria'][2]['field'] = 61;
// date_answered
$options['criteria'][2]['searchtype'] = 'contains';
$options['criteria'][2]['value'] = 'NULL';
$options['criteria'][2]['link'] = 'AND';
$options['criteria'][3]['field'] = 22;
// auteur
$options['criteria'][3]['searchtype'] = 'equals';
$options['criteria'][3]['value'] = Session::getLoginUserID();
$options['criteria'][3]['link'] = 'AND';
$forcetab = 'Ticket$3';
echo "<a href=\"" . $CFG_GLPI["root_doc"] . "/front/ticket.php?" . Toolbox::append_params($options, '&') . "\">" . Html::makeTitle(__('Satisfaction survey'), $number, $numrows) . "</a>";
break;
case "requestbyself":
default:
$options['criteria'][0]['field'] = 4;
// users_id
$options['criteria'][0]['searchtype'] = 'equals';
$options['criteria'][0]['value'] = Session::getLoginUserID();
$options['criteria'][0]['link'] = 'AND';
$options['criteria'][1]['field'] = 12;
// status
$options['criteria'][1]['searchtype'] = 'equals';
$options['criteria'][1]['value'] = 'notold';
$options['criteria'][1]['link'] = 'AND';
echo "<a href=\"" . $CFG_GLPI["root_doc"] . "/front/ticket.php?" . Toolbox::append_params($options, '&') . "\">" . Html::makeTitle(__('Your tickets in progress'), $number, $numrows) . "</a>";
}
}
echo "</th></tr>";
if ($number) {
echo "<tr><th></th>";
echo "<th>" . __('Requester') . "</th>";
echo "<th>" . _n('Associated element', 'Associated elements', Session::getPluralNumber()) . "</th>";
echo "<th>" . __('Description') . "</th></tr>";
for ($i = 0; $i < $number; $i++) {
$ID = $DB->result($result, $i, "id");
self::showVeryShort($ID, $forcetab);
}
}
echo "</table>";
}
}