@@ -120,32 +120,26 @@ public function canViewItem() {
120120 }
121121
122122 $ approvers = $ this ->getApprovers ();
123- if ($ approvers === null ) {
124- return false ;
125- }
126-
127- // Check if the current user is a validator user
128- $ validatorUsers = array_keys ($ approvers [User::getType ()]);
129- if (in_array ($ currentUser , $ validatorUsers )) {
130- return true ;
131- }
132-
133- // Check if the current user is a member of a validator group
134- $ groupList = Group_User::getUserGroups ($ currentUser );
135- $ validatorGroups = array_keys ($ approvers [Group::getType ()]);
136- foreach ($ groupList as $ group ) {
137- if (in_array ($ group ['id ' ], $ validatorGroups )) {
138- // one of the groups of the user is a validator group
123+ if ($ approvers !== null ) {
124+ // Check if the current user is a validator user
125+ $ validatorUsers = array_keys ($ approvers [User::getType ()]);
126+ if (in_array ($ currentUser , $ validatorUsers )) {
139127 return true ;
140128 }
141- }
142129
143- // $groups = Group_User::getUserGroups($currentUser);
144- // if (in_array($this->fields['users_id_validator'], $groups)) {
145- // return true;
146- // }
130+ // Check if the current user is a member of a validator group
131+ $ groups = Group_User::getUserGroups ($ currentUser );
132+ $ validatorGroups = array_keys ($ approvers [Group::getType ()]);
133+ foreach ($ groups as $ group ) {
134+ if (in_array ($ group ['id ' ], $ validatorGroups )) {
135+ // one of the groups of the user is a validator group
136+ return true ;
137+ }
138+ }
139+ }
147140
148141 if (version_compare (GLPI_VERSION , '10.1 ' ) >= 0 ) {
142+ // Check if the user is a substitute of a validator
149143 $ request = [
150144 'SELECT ' => self ::getTableField ('id ' ),
151145 'FROM ' => self ::getTable (),
@@ -160,71 +154,42 @@ public function canViewItem() {
160154 }
161155 }
162156
163- $ request = [
164- 'SELECT ' => PluginFormcreatorForm_Validator::getTable () . '.* ' ,
165- 'FROM ' => $ this ::getTable (),
166- 'INNER JOIN ' => [
167- PluginFormcreatorForm::getTable () => [
168- 'FKEY ' => [
169- PluginFormcreatorForm::getTable () => PluginFormcreatorForm::getIndexName (),
170- $ this ::getTable () => PluginFormcreatorForm::getForeignKeyField (),
171- ],
172- ],
173- PluginFormcreatorForm_Validator::getTable () => [
174- 'FKEY ' => [
175- PluginFormcreatorForm::getTable () => PluginFormcreatorForm::getIndexName (),
176- PluginFormcreatorForm_Validator::getTable () => PluginFormcreatorForm::getForeignKeyField ()
177- ]
178- ]
179- ],
180- 'WHERE ' => [$ this ::getTable () . '.id ' => $ this ->getID ()],
181- ];
182- foreach ($ DB ->request ($ request ) as $ row ) {
183- if ($ row ['itemtype ' ] == User::class) {
184- if ($ currentUser == $ row ['items_id ' ]) {
185- return true ;
186- }
187- } else {
188- foreach ($ groups as $ group ) {
189- if ($ group ['id ' ] == $ row ['items_id ' ]) {
190- return true ;
191- }
192- }
193- }
194- }
195-
196157 // Check if the current user is a requester of a ticket linked to a form answer typed
197158 // Matches search option 42, 43 and 44 of PluginFormcreatorIssue (requester, watcher, assigned)
198159 $ ticket_table = Ticket::getTable ();
199160 $ ticket_user_table = Ticket_User::getTable ();
200161 $ item_ticket_table = Item_Ticket::getTable ();
201162 $ request = [
202- 'SELECT ' => Ticket_User::getTableField (User::getForeignKeyField ()),
163+ 'SELECT ' => [
164+ Ticket_User::getTableField (User::getForeignKeyField ()),
165+ Ticket::getTableField ('id ' ),
166+ ],
203167 'FROM ' => $ ticket_user_table ,
204168 'INNER JOIN ' => [
205169 $ ticket_table => [
206170 'FKEY ' => [
207171 $ ticket_table => 'id ' ,
208172 $ ticket_user_table => 'tickets_id ' ,
173+ ['AND ' => [
174+ Ticket_User::getTableField (User::getForeignKeyField ()) => $ currentUser ,
175+ ]],
209176 ],
210177 ],
211178 $ item_ticket_table => [
212179 'FKEY ' => [
213180 $ item_ticket_table => 'tickets_id ' ,
214181 $ ticket_table => 'id ' ,
215182 ['AND ' => [
216- Item_Ticket::getTableField ('itemtype ' ) => self ::getType (),
183+ Item_Ticket::getTableField ('itemtype ' ) => self ::getType (),
184+ Item_Ticket::getTableField ('items_id ' ) => $ this ->getID (),
217185 ]],
218186 ],
219187 ],
220-
221188 ]
222189 ];
223190
224- foreach ($ DB ->request ($ request ) as $ row ) {
225- if ($ row [User::getForeignKeyField ()] == $ currentUser ) {
226- return true ;
227- }
191+ if ($ DB ->request ($ request )->count () > 0 ) {
192+ return true ;
228193 }
229194
230195 return false ;
0 commit comments