Skip to content

Commit 1e3ab0e

Browse files
committed
Improve ticket list for item, refactor for unit tests
1 parent ae28dfa commit 1e3ab0e

File tree

1 file changed

+156
-100
lines changed

1 file changed

+156
-100
lines changed

src/Ticket.php

Lines changed: 156 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -5395,6 +5395,7 @@ public static function showListForItem(CommonDBTM $item, $withtemplate = 0)
53955395
self::$rightname,
53965396
[self::READALL, self::READMY, self::READASSIGN, CREATE]
53975397
)
5398+
&& !Session::haveRightsOr(TicketValidation::$rightname, TicketValidation::getValidateRights())
53985399
) {
53995400
return false;
54005401
}
@@ -5404,65 +5405,23 @@ public static function showListForItem(CommonDBTM $item, $withtemplate = 0)
54045405
}
54055406

54065407
$criteria = self::getCommonCriteria();
5407-
$restrict = [];
5408-
$options = [
5409-
'criteria' => [],
5410-
'reset' => 'reset',
5411-
];
5408+
$restrict = self::getListForItemRestrict($item);
5409+
$criteria['WHERE'] = $restrict + getEntitiesRestrictCriteria(self::getTable());
5410+
$criteria['WHERE']['glpi_tickets.is_deleted'] = 0;
5411+
$criteria['LIMIT'] = (int)$_SESSION['glpilist_limit'];
54125412

54135413
switch (get_class($item)) {
5414-
case User::class:
5415-
$restrict['glpi_tickets_users.users_id'] = $item->getID();
5416-
$restrict['glpi_tickets_users.type'] = CommonITILActor::REQUESTER;
5417-
5418-
$options['criteria'][0]['field'] = 4; // status
5419-
$options['criteria'][0]['searchtype'] = 'equals';
5420-
$options['criteria'][0]['value'] = $item->getID();
5421-
$options['criteria'][0]['link'] = 'AND';
5422-
break;
5423-
54245414
case SLA::class:
5425-
$restrict[] = [
5426-
'OR' => [
5427-
'slas_id_tto' => $item->getID(),
5428-
'slas_id_ttr' => $item->getID()
5429-
]
5430-
];
54315415
$criteria['ORDERBY'] = 'glpi_tickets.time_to_resolve DESC';
5432-
5433-
$options['criteria'][0]['field'] = 30;
5434-
$options['criteria'][0]['searchtype'] = 'equals';
5435-
$options['criteria'][0]['value'] = $item->getID();
5436-
$options['criteria'][0]['link'] = 'AND';
54375416
break;
54385417

54395418
case OLA::class:
5440-
$restrict[] = [
5441-
'OR' => [
5442-
'olas_id_tto' => $item->getID(),
5443-
'olas_id_ttr' => $item->getID()
5444-
]
5445-
];
54465419
$criteria['ORDERBY'] = 'glpi_tickets.internal_time_to_resolve DESC';
5447-
5448-
$options['criteria'][0]['field'] = 30;
5449-
$options['criteria'][0]['searchtype'] = 'equals';
5450-
$options['criteria'][0]['value'] = $item->getID();
5451-
$options['criteria'][0]['link'] = 'AND';
5452-
break;
5453-
5454-
case Supplier::class:
5455-
$restrict['glpi_suppliers_tickets.suppliers_id'] = $item->getID();
5456-
$restrict['glpi_suppliers_tickets.type'] = CommonITILActor::ASSIGN;
5457-
5458-
$options['criteria'][0]['field'] = 6;
5459-
$options['criteria'][0]['searchtype'] = 'equals';
5460-
$options['criteria'][0]['value'] = $item->getID();
5461-
$options['criteria'][0]['link'] = 'AND';
54625420
break;
54635421

54645422
case Group::class:
5465-
// Mini search engine
5423+
// Mini search engine
5424+
/** @var Group $item */
54665425
if ($item->haveChildren()) {
54675426
$tree = Session::getSavedOption(__CLASS__, 'tree', 0);
54685427
echo "<table class='tab_cadre_fixe'>";
@@ -5479,61 +5438,10 @@ public static function showListForItem(CommonDBTM $item, $withtemplate = 0)
54795438
$tree = 0;
54805439
}
54815440
echo "</td></tr></table>";
5482-
5483-
$restrict['glpi_groups_tickets.groups_id'] = ($tree ? getSonsOf('glpi_groups', $item->getID()) : $item->getID());
5484-
$restrict['glpi_groups_tickets.type'] = CommonITILActor::REQUESTER;
5485-
5486-
$options['criteria'][0]['field'] = 71;
5487-
$options['criteria'][0]['searchtype'] = ($tree ? 'under' : 'equals');
5488-
$options['criteria'][0]['value'] = $item->getID();
5489-
$options['criteria'][0]['link'] = 'AND';
5490-
break;
5491-
5492-
default:
5493-
$restrict['glpi_items_tickets.items_id'] = $item->getID();
5494-
$restrict['glpi_items_tickets.itemtype'] = $item->getType();
5495-
5496-
// you can only see your tickets
5497-
if (!Session::haveRight(self::$rightname, self::READALL)) {
5498-
$or = [
5499-
'glpi_tickets.users_id_recipient' => Session::getLoginUserID(),
5500-
[
5501-
'AND' => [
5502-
'glpi_tickets_users.tickets_id' => new \QueryExpression('glpi_tickets.id'),
5503-
'glpi_tickets_users.users_id' => Session::getLoginUserID()
5504-
]
5505-
], [
5506-
'AND' => [
5507-
'glpi_ticketvalidations.tickets_id' => new \QueryExpression('glpi_tickets.id'),
5508-
'glpi_ticketvalidations.users_id_validate' => Session::getLoginUserID()
5509-
]
5510-
]
5511-
];
5512-
if (count($_SESSION['glpigroups'])) {
5513-
$or['glpi_groups_tickets.groups_id'] = $_SESSION['glpigroups'];
5514-
}
5515-
$restrict[] = ['OR' => $or];
5516-
}
5517-
5518-
$options['criteria'][0]['field'] = 12;
5519-
$options['criteria'][0]['searchtype'] = 'equals';
5520-
$options['criteria'][0]['value'] = 'all';
5521-
$options['criteria'][0]['link'] = 'AND';
5522-
5523-
$options['metacriteria'][0]['itemtype'] = $item->getType();
5524-
$options['metacriteria'][0]['field'] = Search::getOptionNumber(
5525-
$item->getType(),
5526-
'id'
5527-
);
5528-
$options['metacriteria'][0]['searchtype'] = 'equals';
5529-
$options['metacriteria'][0]['value'] = $item->getID();
5530-
$options['metacriteria'][0]['link'] = 'AND';
5441+
/** @var CommonDBTM $item */
55315442
break;
55325443
}
55335444

5534-
$criteria['WHERE'] = $restrict + getEntitiesRestrictCriteria(self::getTable());
5535-
$criteria['WHERE']['glpi_tickets.is_deleted'] = 0;
5536-
$criteria['LIMIT'] = (int)$_SESSION['glpilist_limit'];
55375445
$iterator = $DB->request($criteria);
55385446
$number = count($iterator);
55395447

@@ -5595,6 +5503,7 @@ public static function showListForItem(CommonDBTM $item, $withtemplate = 0)
55955503
)
55965504
);
55975505

5506+
$options = self::getListForItemSearchOptionsCriteria($item);
55985507
echo "<tr class='noHover'><th colspan='$colspan'>";
55995508
$title = sprintf(_n('Last %d ticket', 'Last %d tickets', $number), $number);
56005509
$link = "<a href='" . Ticket::getSearchURL() . "?" .
@@ -7089,4 +6998,151 @@ public static function getContentTemplatesParametersClass(): string
70896998
{
70906999
return TicketParameters::class;
70917000
}
7001+
7002+
public static function getListForItemRestrict(CommonDBTM $item)
7003+
{
7004+
$restrict = [];
7005+
7006+
switch (get_class($item)) {
7007+
case User::class:
7008+
$restrict['glpi_tickets_users.users_id'] = $item->getID();
7009+
$restrict['glpi_tickets_users.type'] = CommonITILActor::REQUESTER;
7010+
break;
7011+
7012+
case SLA::class:
7013+
$restrict[] = [
7014+
'OR' => [
7015+
'slas_id_tto' => $item->getID(),
7016+
'slas_id_ttr' => $item->getID()
7017+
]
7018+
];
7019+
break;
7020+
7021+
case OLA::class:
7022+
$restrict[] = [
7023+
'OR' => [
7024+
'olas_id_tto' => $item->getID(),
7025+
'olas_id_ttr' => $item->getID()
7026+
]
7027+
];
7028+
break;
7029+
7030+
case Supplier::class:
7031+
$restrict['glpi_suppliers_tickets.suppliers_id'] = $item->getID();
7032+
$restrict['glpi_suppliers_tickets.type'] = CommonITILActor::ASSIGN;
7033+
break;
7034+
7035+
case Group::class:
7036+
/** @var Group $item */
7037+
if ($item->haveChildren()) {
7038+
$tree = Session::getSavedOption(__CLASS__, 'tree', 0);
7039+
} else {
7040+
$tree = 0;
7041+
}
7042+
$restrict['glpi_groups_tickets.groups_id'] = ($tree ? getSonsOf('glpi_groups', $item->getID()) : $item->getID());
7043+
$restrict['glpi_groups_tickets.type'] = CommonITILActor::REQUESTER;
7044+
/** @var CommonDBTM $item */
7045+
break;
7046+
7047+
default:
7048+
$restrict['glpi_items_tickets.items_id'] = $item->getID();
7049+
$restrict['glpi_items_tickets.itemtype'] = $item->getType();
7050+
// you can only see your tickets
7051+
if (!Session::haveRight(self::$rightname, self::READALL)) {
7052+
$or = [
7053+
'glpi_tickets.users_id_recipient' => Session::getLoginUserID(),
7054+
[
7055+
'AND' => [
7056+
'glpi_tickets_users.tickets_id' => new \QueryExpression('glpi_tickets.id'),
7057+
'glpi_tickets_users.users_id' => Session::getLoginUserID()
7058+
]
7059+
]
7060+
];
7061+
if (Session::haveRightsOr(TicketValidation::$rightname, [TicketValidation::VALIDATEINCIDENT, TicketValidation::VALIDATEREQUEST])) {
7062+
$or[] = [
7063+
'AND' => [
7064+
'glpi_ticketvalidations.tickets_id' => new \QueryExpression('glpi_tickets.id'),
7065+
'glpi_ticketvalidations.users_id_validate' => Session::getLoginUserID(),
7066+
]
7067+
];
7068+
}
7069+
if (count($_SESSION['glpigroups'])) {
7070+
$or['glpi_groups_tickets.groups_id'] = $_SESSION['glpigroups'];
7071+
}
7072+
$restrict[] = ['OR' => $or];
7073+
}
7074+
}
7075+
7076+
return $restrict;
7077+
}
7078+
7079+
public static function getListForItemSearchOptionsCriteria(CommonDBTM $item)
7080+
{
7081+
$options = [
7082+
'criteria' => [],
7083+
'reset' => 'reset',
7084+
];
7085+
7086+
switch (get_class($item)) {
7087+
case User::class:
7088+
$options['criteria'][0]['field'] = 4; // status
7089+
$options['criteria'][0]['searchtype'] = 'equals';
7090+
$options['criteria'][0]['value'] = $item->getID();
7091+
$options['criteria'][0]['link'] = 'AND';
7092+
break;
7093+
7094+
case SLA::class:
7095+
$options['criteria'][0]['field'] = 30;
7096+
$options['criteria'][0]['searchtype'] = 'equals';
7097+
$options['criteria'][0]['value'] = $item->getID();
7098+
$options['criteria'][0]['link'] = 'AND';
7099+
break;
7100+
7101+
case OLA::class:
7102+
$options['criteria'][0]['field'] = 30;
7103+
$options['criteria'][0]['searchtype'] = 'equals';
7104+
$options['criteria'][0]['value'] = $item->getID();
7105+
$options['criteria'][0]['link'] = 'AND';
7106+
break;
7107+
7108+
case Supplier::class:
7109+
$options['criteria'][0]['field'] = 6;
7110+
$options['criteria'][0]['searchtype'] = 'equals';
7111+
$options['criteria'][0]['value'] = $item->getID();
7112+
$options['criteria'][0]['link'] = 'AND';
7113+
break;
7114+
7115+
case Group::class:
7116+
/** @var Group $item */
7117+
if ($item->haveChildren()) {
7118+
$tree = Session::getSavedOption(__CLASS__, 'tree', 0);
7119+
} else {
7120+
$tree = 0;
7121+
}
7122+
$options['criteria'][0]['field'] = 71;
7123+
$options['criteria'][0]['searchtype'] = ($tree ? 'under' : 'equals');
7124+
$options['criteria'][0]['value'] = $item->getID();
7125+
$options['criteria'][0]['link'] = 'AND';
7126+
/** @var CommonDBTM $item */
7127+
break;
7128+
7129+
default:
7130+
$options['criteria'][0]['field'] = 12;
7131+
$options['criteria'][0]['searchtype'] = 'equals';
7132+
$options['criteria'][0]['value'] = 'all';
7133+
$options['criteria'][0]['link'] = 'AND';
7134+
7135+
$options['metacriteria'][0]['itemtype'] = $item->getType();
7136+
$options['metacriteria'][0]['field'] = Search::getOptionNumber(
7137+
$item->getType(),
7138+
'id'
7139+
);
7140+
$options['metacriteria'][0]['searchtype'] = 'equals';
7141+
$options['metacriteria'][0]['value'] = $item->getID();
7142+
$options['metacriteria'][0]['link'] = 'AND';
7143+
break;
7144+
}
7145+
7146+
return $options;
7147+
}
70927148
}

0 commit comments

Comments
 (0)