Skip to content

Commit 4d92bc5

Browse files
committed
feat(targetticket,targetcvhange,targetproblem): update actors array
see glpi-project/glpi#11957
1 parent 0feb7d1 commit 4d92bc5

File tree

5 files changed

+127
-25
lines changed

5 files changed

+127
-25
lines changed

inc/abstractitiltarget.class.php

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2148,6 +2148,64 @@ protected function initializeActors() {
21482148
];
21492149
}
21502150

2151+
/**
2152+
* Cleanup invalid actors or emoty keys on actors of the target
2153+
*
2154+
* @param array $data
2155+
* @return array
2156+
*/
2157+
public function cleanActors(array $data): array {
2158+
$actorTypes = [
2159+
'_users_id_requester',
2160+
'_users_id_observer',
2161+
'_users_id_assign',
2162+
'_suppliers_id_assign',
2163+
];
2164+
2165+
foreach ($actorTypes as $actorType) {
2166+
if (isset($data["$actorType"])) {
2167+
if (is_array($data["$actorType"])) {
2168+
if (count($data["$actorType"]) < 1) {
2169+
unset($data["$actorType"]);
2170+
unset($data["${actorType}_notif"]);
2171+
} else {
2172+
$cleaned = [];
2173+
$cleaned_notif = [];
2174+
foreach ($data["$actorType"] as $key => $actor) {
2175+
if ($actor == 0) {
2176+
continue;
2177+
}
2178+
$cleaned[] = $actor;
2179+
$cleaned_notif['use_notification'][] = $data["${actorType}_notif"]['use_notification'][$key];
2180+
$cleaned_notif['alternative_email'][] = $data["${actorType}_notif"]['alternative_email'][$key];
2181+
}
2182+
$data["$actorType"] = $cleaned;
2183+
$data["${actorType}_notif"] = $cleaned_notif;
2184+
}
2185+
} else {
2186+
if ($data["$actorType"] == 0) {
2187+
unset($data["$actorType"]);
2188+
unset($data["${actorType}_notif"]);
2189+
}
2190+
}
2191+
}
2192+
}
2193+
2194+
if (isset($data['_groups_id_requester']) && $data['_groups_id_requester'] == 0) {
2195+
unset($data['_groups_id_requester']);
2196+
}
2197+
2198+
if (isset($data['_groups_id_observer']) && $data['_groups_id_observer'] == 0) {
2199+
unset($data['_groups_id_observer']);
2200+
}
2201+
2202+
if (isset($data['_groups_id_assign']) && $data['_groups_id_assign'] == 0) {
2203+
unset($data['_groups_id_assign']);
2204+
}
2205+
2206+
return $data;
2207+
}
2208+
21512209
/**
21522210
* Set default values for the item to create
21532211
*

inc/targetchange.class.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -726,6 +726,9 @@ public function save(PluginFormcreatorFormAnswer $formanswer): ?CommonDBTM {
726726

727727
$this->appendFieldsData($formanswer, $data);
728728

729+
// Cleanup actors array
730+
$data = $this->cleanActors($data);
731+
729732
// Create the target change
730733
if (!$changeID = $change->add($data)) {
731734
return null;

inc/targetproblem.class.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,9 @@ public function save(PluginFormcreatorFormAnswer $formanswer): ?CommonDBTM {
223223

224224
$this->appendFieldsData($formanswer, $data);
225225

226+
// Cleanup actors array
227+
$data = $this->cleanActors($data);
228+
226229
// Create the target problem
227230
if (!$problemID = $problem->add($data)) {
228231
return null;

inc/targetticket.class.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -935,6 +935,9 @@ public function save(PluginFormcreatorFormAnswer $formanswer): ?CommonDBTM {
935935

936936
$this->appendFieldsData($formanswer, $data);
937937

938+
// Cleanup actors array
939+
$data = $this->cleanActors($data);
940+
938941
// Create the target ticket
939942
$data['_auto_import'] = true;
940943
if (!$ticketID = $ticket->add($data)) {

tests/3-unit/PluginFormcreatorCommon.php

Lines changed: 60 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -196,11 +196,18 @@ public function providerGetTicketStatusForIssue() {
196196
$this->boolean($ticket->isNewItem())->isFalse();
197197
// Creating a ticket directly with status solved or closed
198198
// will prevent credation of ticketvalidation item
199-
$ticket->update([
200-
'id' => $ticket->getID(),
201-
'status' => $ticketStatus,
202-
'_users_id_assign' => ($ticketStatus > \CommonITILObject::INCOMING) ? 4 /* Tech */ : 0,
203-
]);
199+
if ($ticketStatus > \CommonITILObject::INCOMING) {
200+
$ticket->update([
201+
'id' => $ticket->getID(),
202+
'status' => $ticketStatus,
203+
'_users_id_assign' => 4,
204+
]);
205+
} else {
206+
$ticket->update([
207+
'id' => $ticket->getID(),
208+
'status' => $ticketStatus,
209+
]);
210+
}
204211
$this->integer((int) $ticket->fields['status'])->isEqualTo($ticketStatus);
205212
$ticket->fields['global_validation'] = \CommonITILValidation::NONE;
206213
$dataSet = [
@@ -233,11 +240,18 @@ public function providerGetTicketStatusForIssue() {
233240
$this->boolean($ticket->isNewItem())->isFalse();
234241
// Creating a ticket directly with status solved or closed
235242
// will prevent credation of ticketvalidation item
236-
$ticket->update([
237-
'id' => $ticket->getID(),
238-
'status' => $ticketStatus,
239-
'_users_id_assign' => ($ticketStatus > \CommonITILObject::INCOMING) ? 4 /* Tech */ : 0,
240-
]);
243+
if ($ticketStatus > \CommonITILObject::INCOMING) {
244+
$ticket->update([
245+
'id' => $ticket->getID(),
246+
'status' => $ticketStatus,
247+
'_users_id_assign' => 4 // Tech,
248+
]);
249+
} else {
250+
$ticket->update([
251+
'id' => $ticket->getID(),
252+
'status' => $ticketStatus,
253+
]);
254+
}
241255
$this->integer((int) $ticket->fields['status'])->isEqualTo($ticketStatus);
242256
$ticket->fields['global_validation'] = \CommonITILValidation::ACCEPTED;
243257
$dataSet = [
@@ -269,11 +283,18 @@ public function providerGetTicketStatusForIssue() {
269283
$this->boolean($ticket->isNewItem())->isFalse();
270284
// Creating a ticket directly with status solved or closed
271285
// will prevent credation of ticketvalidation item
272-
$ticket->update([
273-
'id' => $ticket->getID(),
274-
'status' => $ticketStatus,
275-
'_users_id_assign' => ($ticketStatus > \CommonITILObject::INCOMING) ? 4 /* Tech */ : 0,
276-
]);
286+
if ($ticketStatus > \CommonITILObject::INCOMING) {
287+
$ticket->update([
288+
'id' => $ticket->getID(),
289+
'status' => $ticketStatus,
290+
'_users_id_assign' => 4, /* Tech */
291+
]);
292+
} else {
293+
$ticket->update([
294+
'id' => $ticket->getID(),
295+
'status' => $ticketStatus,
296+
]);
297+
}
277298
$this->integer((int) $ticket->fields['status'])->isEqualTo($ticketStatus);
278299
$ticket->fields['global_validation'] = \CommonITILValidation::WAITING;
279300
$dataSet = [
@@ -336,11 +357,18 @@ public function providerGetTicketStatusForIssue() {
336357
$this->boolean($ticket->isNewItem())->isFalse();
337358
// Creating a ticket directly with status solved or closed
338359
// will prevent credation of ticketvalidation item
339-
$ticket->update([
340-
'id' => $ticket->getID(),
341-
'status' => $ticketStatus,
342-
'_users_id_assign' => ($ticketStatus > \CommonITILObject::INCOMING) ? 4 /* Tech */ : 0,
343-
]);
360+
if ($ticketStatus > \CommonITILObject::INCOMING) {
361+
$ticket->update([
362+
'id' => $ticket->getID(),
363+
'status' => $ticketStatus,
364+
'_users_id_assign' => 4, /* Tech */
365+
]);
366+
} else {
367+
$ticket->update([
368+
'id' => $ticket->getID(),
369+
'status' => $ticketStatus,
370+
]);
371+
}
344372
$this->integer((int) $ticket->fields['status'])->isEqualTo($ticketStatus);
345373
$ticket->fields['global_validation'] = \CommonITILValidation::REFUSED;
346374
$dataSet = [
@@ -367,11 +395,18 @@ public function providerGetTicketStatusForIssue() {
367395
$this->boolean($ticket->isNewItem())->isFalse();
368396
// Creating a ticket directly with status solved or closed
369397
// will prevent credation of ticketvalidation item
370-
$ticket->update([
371-
'id' => $ticket->getID(),
372-
'status' => $ticketStatus,
373-
'_users_id_assign' => ($ticketStatus > \CommonITILObject::INCOMING) ? 4 /* Tech */ : 0,
374-
]);
398+
if ($ticketStatus > \CommonITILObject::INCOMING) {
399+
$ticket->update([
400+
'id' => $ticket->getID(),
401+
'status' => $ticketStatus,
402+
'_users_id_assign' => 4, /* Tech */
403+
]);
404+
} else {
405+
$ticket->update([
406+
'id' => $ticket->getID(),
407+
'status' => $ticketStatus,
408+
]);
409+
}
375410
$this->integer((int) $ticket->fields['status'])->isEqualTo($ticketStatus);
376411
$ticket->fields['global_validation'] = \CommonITILValidation::REFUSED;
377412
$dataSet = [

0 commit comments

Comments
 (0)