%PDF- %PDF-
Direktori : /var/www/projetos/suporte.iigd.com.br/src/Features/ |
Current File : /var/www/projetos/suporte.iigd.com.br/src/Features/ParentStatus.php |
<?php /** * --------------------------------------------------------------------- * * GLPI - Gestionnaire Libre de Parc Informatique * * http://glpi-project.org * * @copyright 2015-2024 Teclib' and contributors. * @copyright 2003-2014 by the INDEPNET Development Team. * @licence https://www.gnu.org/licenses/gpl-3.0.html * * --------------------------------------------------------------------- * * LICENSE * * This file is part of GLPI. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. * * --------------------------------------------------------------------- */ namespace Glpi\Features; use CommonITILActor; use CommonITILObject; use PendingReason_Item; use Session; /** * ParentStatus * * @since 10.0.4 */ trait ParentStatus { public function updateParentStatus(CommonITILObject $parentitem, array $input): void { $needupdateparent = false; // Set pending reason data on parent and self if not already set if ($input['pending'] ?? 0) { $parent_pending_reason = PendingReason_Item::getForItem($this->input['_job']); if ( !$parent_pending_reason || ( $parent_pending_reason && !$parent_pending_reason->fields['pendingreasons_id'] ) ) { PendingReason_Item::createForItem($parentitem, [ 'pendingreasons_id' => $input['pendingreasons_id'] ?? 0, 'followup_frequency' => $input['followup_frequency'] ?? 0, 'followups_before_resolution' => $input['followups_before_resolution'] ?? 0, 'previous_status' => $parentitem->fields['status'], ]); PendingReason_Item::createForItem($this, [ 'pendingreasons_id' => $input['pendingreasons_id'] ?? 0, 'followup_frequency' => $input['followup_frequency'] ?? 0, 'followups_before_resolution' => $input['followups_before_resolution'] ?? 0, ]); } } if ( isset($input["_close"]) && $input["_close"] && ($parentitem->isSolved()) ) { $update = [ 'id' => $parentitem->fields['id'], 'status' => CommonITILObject::CLOSED, 'closedate' => $_SESSION["glpi_currenttime"], '_accepted' => true, ]; // Use update method for history $parentitem->update($update); } if (isset($input['pending'])) { // Pending toggle was explicitly enabled or disabled if ($input['pending']) { $input['_status'] = CommonITILObject::WAITING; } else { $input["_reopen"] = true; } } else { // Pending toggle isn't set (self-service, API, ...) // Try to compute whether or not we need te reopen the ticket if (!isset($input['_no_reopen']) && $parentitem->needReopen()) { $input["_reopen"] = true; } } //manage reopening of ITILObject $reopened = false; if (!isset($input['_status'])) { $input['_status'] = $parentitem->fields["status"]; } // if reopen set (from followup form or mailcollector) // and status is reopenable and not changed in form $is_set_pending = $input['pending'] ?? 0; if ( isset($input["_reopen"]) && $input["_reopen"] && in_array($parentitem->fields["status"], $parentitem::getReopenableStatusArray()) && $input['_status'] == $parentitem->fields["status"] && !$is_set_pending ) { if ( isset($parentitem::getAllStatusArray($parentitem->getType())[CommonITILObject::ASSIGNED]) && ( ($parentitem->countUsers(CommonITILActor::ASSIGN) > 0) || ($parentitem->countGroups(CommonITILActor::ASSIGN) > 0) || ($parentitem->countSuppliers(CommonITILActor::ASSIGN) > 0) ) ) { //check if lifecycle allowed new status if ( Session::isCron() || Session::getCurrentInterface() == "helpdesk" || $parentitem::isAllowedStatus($parentitem->fields["status"], CommonITILObject::ASSIGNED) ) { $needupdateparent = true; // If begin date is defined, the status must be planned if it exists, rather than assigned. if (!empty($this->fields['begin']) && $parentitem->isStatusExists(CommonITILObject::PLANNED)) { $update['status'] = CommonITILObject::PLANNED; } else { $update['status'] = CommonITILObject::ASSIGNED; } } } else { //check if lifecycle allowed new status if ( Session::isCron() || Session::getCurrentInterface() == "helpdesk" || $parentitem::isAllowedStatus($parentitem->fields["status"], CommonITILObject::INCOMING) ) { $needupdateparent = true; $update['status'] = CommonITILObject::INCOMING; } } if ($needupdateparent) { $update['id'] = $parentitem->fields['id']; // Use update method for history $parentitem->update($update); $reopened = true; } } if ( !$is_set_pending && !empty($this->fields['begin']) && $parentitem->isStatusExists(CommonITILObject::PLANNED) && (($parentitem->fields["status"] == CommonITILObject::INCOMING) || ($parentitem->fields["status"] == CommonITILObject::ASSIGNED) || $needupdateparent) ) { $input['_status'] = CommonITILObject::PLANNED; } //change ITILObject status only if input change if ( !$reopened && $input['_status'] != $parentitem->fields['status'] ) { $update['status'] = $input['_status']; $update['id'] = $parentitem->fields['id']; // don't notify on ITILObject - update event $update['_disablenotif'] = true; // Use update method for history $parentitem->update($update); } } }