@@ -5379,6 +5379,7 @@ public static function showListForItem(CommonDBTM $item, $withtemplate = 0)
53795379 self ::$ rightname ,
53805380 [self ::READALL , self ::READMY , self ::READASSIGN , CREATE ]
53815381 )
5382+ && !Session::haveRightsOr (TicketValidation::$ rightname , TicketValidation::getValidateRights ())
53825383 ) {
53835384 return false ;
53845385 }
@@ -5388,65 +5389,24 @@ public static function showListForItem(CommonDBTM $item, $withtemplate = 0)
53885389 }
53895390
53905391 $ criteria = self ::getCommonCriteria ();
5391- $ restrict = [];
5392- $ options = [
5393- 'criteria ' => [],
5394- 'reset ' => 'reset ' ,
5395- ];
5392+ $ restrict = self ::getListForItemRestrict ($ item );
5393+ $ criteria ['WHERE ' ] = $ restrict + getEntitiesRestrictCriteria (self ::getTable ());
5394+ $ criteria ['WHERE ' ]['glpi_tickets.is_deleted ' ] = 0 ;
5395+ $ criteria ['LIMIT ' ] = (int )$ _SESSION ['glpilist_limit ' ];
53965396
53975397 switch (get_class ($ item )) {
5398- case User::class:
5399- $ restrict ['glpi_tickets_users.users_id ' ] = $ item ->getID ();
5400- $ restrict ['glpi_tickets_users.type ' ] = CommonITILActor::REQUESTER ;
5401-
5402- $ options ['criteria ' ][0 ]['field ' ] = 4 ; // status
5403- $ options ['criteria ' ][0 ]['searchtype ' ] = 'equals ' ;
5404- $ options ['criteria ' ][0 ]['value ' ] = $ item ->getID ();
5405- $ options ['criteria ' ][0 ]['link ' ] = 'AND ' ;
5406- break ;
5407-
54085398 case SLA ::class:
5409- $ restrict [] = [
5410- 'OR ' => [
5411- 'slas_id_tto ' => $ item ->getID (),
5412- 'slas_id_ttr ' => $ item ->getID ()
5413- ]
5414- ];
54155399 $ criteria ['ORDERBY ' ] = 'glpi_tickets.time_to_resolve DESC ' ;
5416-
5417- $ options ['criteria ' ][0 ]['field ' ] = 30 ;
5418- $ options ['criteria ' ][0 ]['searchtype ' ] = 'equals ' ;
5419- $ options ['criteria ' ][0 ]['value ' ] = $ item ->getID ();
5420- $ options ['criteria ' ][0 ]['link ' ] = 'AND ' ;
54215400 break ;
54225401
5402+
54235403 case OLA ::class:
5424- $ restrict [] = [
5425- 'OR ' => [
5426- 'olas_id_tto ' => $ item ->getID (),
5427- 'olas_id_ttr ' => $ item ->getID ()
5428- ]
5429- ];
54305404 $ criteria ['ORDERBY ' ] = 'glpi_tickets.internal_time_to_resolve DESC ' ;
5431-
5432- $ options ['criteria ' ][0 ]['field ' ] = 30 ;
5433- $ options ['criteria ' ][0 ]['searchtype ' ] = 'equals ' ;
5434- $ options ['criteria ' ][0 ]['value ' ] = $ item ->getID ();
5435- $ options ['criteria ' ][0 ]['link ' ] = 'AND ' ;
5436- break ;
5437-
5438- case Supplier::class:
5439- $ restrict ['glpi_suppliers_tickets.suppliers_id ' ] = $ item ->getID ();
5440- $ restrict ['glpi_suppliers_tickets.type ' ] = CommonITILActor::ASSIGN ;
5441-
5442- $ options ['criteria ' ][0 ]['field ' ] = 6 ;
5443- $ options ['criteria ' ][0 ]['searchtype ' ] = 'equals ' ;
5444- $ options ['criteria ' ][0 ]['value ' ] = $ item ->getID ();
5445- $ options ['criteria ' ][0 ]['link ' ] = 'AND ' ;
54465405 break ;
54475406
54485407 case Group::class:
5449- // Mini search engine
5408+ // Mini search engine
5409+ /** @var Group $item */
54505410 if ($ item ->haveChildren ()) {
54515411 $ tree = Session::getSavedOption (__CLASS__ , 'tree ' , 0 );
54525412 echo "<table class='tab_cadre_fixe'> " ;
@@ -5463,61 +5423,10 @@ public static function showListForItem(CommonDBTM $item, $withtemplate = 0)
54635423 $ tree = 0 ;
54645424 }
54655425 echo "</td></tr></table> " ;
5466-
5467- $ restrict ['glpi_groups_tickets.groups_id ' ] = ($ tree ? getSonsOf ('glpi_groups ' , $ item ->getID ()) : $ item ->getID ());
5468- $ restrict ['glpi_groups_tickets.type ' ] = CommonITILActor::REQUESTER ;
5469-
5470- $ options ['criteria ' ][0 ]['field ' ] = 71 ;
5471- $ options ['criteria ' ][0 ]['searchtype ' ] = ($ tree ? 'under ' : 'equals ' );
5472- $ options ['criteria ' ][0 ]['value ' ] = $ item ->getID ();
5473- $ options ['criteria ' ][0 ]['link ' ] = 'AND ' ;
5474- break ;
5475-
5476- default :
5477- $ restrict ['glpi_items_tickets.items_id ' ] = $ item ->getID ();
5478- $ restrict ['glpi_items_tickets.itemtype ' ] = $ item ->getType ();
5479-
5480- // you can only see your tickets
5481- if (!Session::haveRight (self ::$ rightname , self ::READALL )) {
5482- $ or = [
5483- 'glpi_tickets.users_id_recipient ' => Session::getLoginUserID (),
5484- [
5485- 'AND ' => [
5486- 'glpi_tickets_users.tickets_id ' => new \QueryExpression ('glpi_tickets.id ' ),
5487- 'glpi_tickets_users.users_id ' => Session::getLoginUserID ()
5488- ]
5489- ], [
5490- 'AND ' => [
5491- 'glpi_ticketvalidations.tickets_id ' => new \QueryExpression ('glpi_tickets.id ' ),
5492- 'glpi_ticketvalidations.users_id_validate ' => Session::getLoginUserID ()
5493- ]
5494- ]
5495- ];
5496- if (count ($ _SESSION ['glpigroups ' ])) {
5497- $ or ['glpi_groups_tickets.groups_id ' ] = $ _SESSION ['glpigroups ' ];
5498- }
5499- $ restrict [] = ['OR ' => $ or ];
5500- }
5501-
5502- $ options ['criteria ' ][0 ]['field ' ] = 12 ;
5503- $ options ['criteria ' ][0 ]['searchtype ' ] = 'equals ' ;
5504- $ options ['criteria ' ][0 ]['value ' ] = 'all ' ;
5505- $ options ['criteria ' ][0 ]['link ' ] = 'AND ' ;
5506-
5507- $ options ['metacriteria ' ][0 ]['itemtype ' ] = $ item ->getType ();
5508- $ options ['metacriteria ' ][0 ]['field ' ] = Search::getOptionNumber (
5509- $ item ->getType (),
5510- 'id '
5511- );
5512- $ options ['metacriteria ' ][0 ]['searchtype ' ] = 'equals ' ;
5513- $ options ['metacriteria ' ][0 ]['value ' ] = $ item ->getID ();
5514- $ options ['metacriteria ' ][0 ]['link ' ] = 'AND ' ;
5426+ /** @var CommonDBTM $item */
55155427 break ;
55165428 }
55175429
5518- $ criteria ['WHERE ' ] = $ restrict + getEntitiesRestrictCriteria (self ::getTable ());
5519- $ criteria ['WHERE ' ]['glpi_tickets.is_deleted ' ] = 0 ;
5520- $ criteria ['LIMIT ' ] = (int )$ _SESSION ['glpilist_limit ' ];
55215430 $ iterator = $ DB ->request ($ criteria );
55225431 $ number = count ($ iterator );
55235432
@@ -5579,6 +5488,7 @@ public static function showListForItem(CommonDBTM $item, $withtemplate = 0)
55795488 )
55805489 );
55815490
5491+ $ options = self ::getListForItemSearchOptionsCriteria ($ item );
55825492 echo "<tr class='noHover'><th colspan=' $ colspan'> " ;
55835493 $ title = sprintf (_n ('Last %d ticket ' , 'Last %d tickets ' , $ number ), $ number );
55845494 $ link = "<a href=' " . Ticket::getSearchURL () . "? " .
@@ -7073,4 +6983,151 @@ public static function getContentTemplatesParametersClass(): string
70736983 {
70746984 return TicketParameters::class;
70756985 }
6986+
6987+ public static function getListForItemRestrict (CommonDBTM $ item )
6988+ {
6989+ $ restrict = [];
6990+
6991+ switch (get_class ($ item )) {
6992+ case User::class:
6993+ $ restrict ['glpi_tickets_users.users_id ' ] = $ item ->getID ();
6994+ $ restrict ['glpi_tickets_users.type ' ] = CommonITILActor::REQUESTER ;
6995+ break ;
6996+
6997+ case SLA ::class:
6998+ $ restrict [] = [
6999+ 'OR ' => [
7000+ 'slas_id_tto ' => $ item ->getID (),
7001+ 'slas_id_ttr ' => $ item ->getID ()
7002+ ]
7003+ ];
7004+ break ;
7005+
7006+ case OLA ::class:
7007+ $ restrict [] = [
7008+ 'OR ' => [
7009+ 'olas_id_tto ' => $ item ->getID (),
7010+ 'olas_id_ttr ' => $ item ->getID ()
7011+ ]
7012+ ];
7013+ break ;
7014+
7015+ case Supplier::class:
7016+ $ restrict ['glpi_suppliers_tickets.suppliers_id ' ] = $ item ->getID ();
7017+ $ restrict ['glpi_suppliers_tickets.type ' ] = CommonITILActor::ASSIGN ;
7018+ break ;
7019+
7020+ case Group::class:
7021+ /** @var Group $item */
7022+ if ($ item ->haveChildren ()) {
7023+ $ tree = Session::getSavedOption (__CLASS__ , 'tree ' , 0 );
7024+ } else {
7025+ $ tree = 0 ;
7026+ }
7027+ $ restrict ['glpi_groups_tickets.groups_id ' ] = ($ tree ? getSonsOf ('glpi_groups ' , $ item ->getID ()) : $ item ->getID ());
7028+ $ restrict ['glpi_groups_tickets.type ' ] = CommonITILActor::REQUESTER ;
7029+ /** @var CommonDBTM $item */
7030+ break ;
7031+
7032+ default :
7033+ $ restrict ['glpi_items_tickets.items_id ' ] = $ item ->getID ();
7034+ $ restrict ['glpi_items_tickets.itemtype ' ] = $ item ->getType ();
7035+ // you can only see your tickets
7036+ if (!Session::haveRight (self ::$ rightname , self ::READALL )) {
7037+ $ or = [
7038+ 'glpi_tickets.users_id_recipient ' => Session::getLoginUserID (),
7039+ [
7040+ 'AND ' => [
7041+ 'glpi_tickets_users.tickets_id ' => new \QueryExpression ('glpi_tickets.id ' ),
7042+ 'glpi_tickets_users.users_id ' => Session::getLoginUserID ()
7043+ ]
7044+ ]
7045+ ];
7046+ if (Session::haveRightsOr (TicketValidation::$ rightname , [TicketValidation::VALIDATEINCIDENT , TicketValidation::VALIDATEREQUEST ])) {
7047+ $ or [] = [
7048+ 'AND ' => [
7049+ 'glpi_ticketvalidations.tickets_id ' => new \QueryExpression ('glpi_tickets.id ' ),
7050+ 'glpi_ticketvalidations.users_id_validate ' => Session::getLoginUserID (),
7051+ ]
7052+ ];
7053+ }
7054+ if (count ($ _SESSION ['glpigroups ' ])) {
7055+ $ or ['glpi_groups_tickets.groups_id ' ] = $ _SESSION ['glpigroups ' ];
7056+ }
7057+ $ restrict [] = ['OR ' => $ or ];
7058+ }
7059+ }
7060+
7061+ return $ restrict ;
7062+ }
7063+
7064+ public static function getListForItemSearchOptionsCriteria (CommonDBTM $ item )
7065+ {
7066+ $ options = [
7067+ 'criteria ' => [],
7068+ 'reset ' => 'reset ' ,
7069+ ];
7070+
7071+ switch (get_class ($ item )) {
7072+ case User::class:
7073+ $ options ['criteria ' ][0 ]['field ' ] = 4 ; // status
7074+ $ options ['criteria ' ][0 ]['searchtype ' ] = 'equals ' ;
7075+ $ options ['criteria ' ][0 ]['value ' ] = $ item ->getID ();
7076+ $ options ['criteria ' ][0 ]['link ' ] = 'AND ' ;
7077+ break ;
7078+
7079+ case SLA ::class:
7080+ $ options ['criteria ' ][0 ]['field ' ] = 30 ;
7081+ $ options ['criteria ' ][0 ]['searchtype ' ] = 'equals ' ;
7082+ $ options ['criteria ' ][0 ]['value ' ] = $ item ->getID ();
7083+ $ options ['criteria ' ][0 ]['link ' ] = 'AND ' ;
7084+ break ;
7085+
7086+ case OLA ::class:
7087+ $ options ['criteria ' ][0 ]['field ' ] = 30 ;
7088+ $ options ['criteria ' ][0 ]['searchtype ' ] = 'equals ' ;
7089+ $ options ['criteria ' ][0 ]['value ' ] = $ item ->getID ();
7090+ $ options ['criteria ' ][0 ]['link ' ] = 'AND ' ;
7091+ break ;
7092+
7093+ case Supplier::class:
7094+ $ options ['criteria ' ][0 ]['field ' ] = 6 ;
7095+ $ options ['criteria ' ][0 ]['searchtype ' ] = 'equals ' ;
7096+ $ options ['criteria ' ][0 ]['value ' ] = $ item ->getID ();
7097+ $ options ['criteria ' ][0 ]['link ' ] = 'AND ' ;
7098+ break ;
7099+
7100+ case Group::class:
7101+ /** @var Group $item */
7102+ if ($ item ->haveChildren ()) {
7103+ $ tree = Session::getSavedOption (__CLASS__ , 'tree ' , 0 );
7104+ } else {
7105+ $ tree = 0 ;
7106+ }
7107+ $ options ['criteria ' ][0 ]['field ' ] = 71 ;
7108+ $ options ['criteria ' ][0 ]['searchtype ' ] = ($ tree ? 'under ' : 'equals ' );
7109+ $ options ['criteria ' ][0 ]['value ' ] = $ item ->getID ();
7110+ $ options ['criteria ' ][0 ]['link ' ] = 'AND ' ;
7111+ /** @var CommonDBTM $item */
7112+ break ;
7113+
7114+ default :
7115+ $ options ['criteria ' ][0 ]['field ' ] = 12 ;
7116+ $ options ['criteria ' ][0 ]['searchtype ' ] = 'equals ' ;
7117+ $ options ['criteria ' ][0 ]['value ' ] = 'all ' ;
7118+ $ options ['criteria ' ][0 ]['link ' ] = 'AND ' ;
7119+
7120+ $ options ['metacriteria ' ][0 ]['itemtype ' ] = $ item ->getType ();
7121+ $ options ['metacriteria ' ][0 ]['field ' ] = Search::getOptionNumber (
7122+ $ item ->getType (),
7123+ 'id '
7124+ );
7125+ $ options ['metacriteria ' ][0 ]['searchtype ' ] = 'equals ' ;
7126+ $ options ['metacriteria ' ][0 ]['value ' ] = $ item ->getID ();
7127+ $ options ['metacriteria ' ][0 ]['link ' ] = 'AND ' ;
7128+ break ;
7129+ }
7130+
7131+ return $ options ;
7132+ }
70767133}
0 commit comments