first commit

This commit is contained in:
2025-08-07 13:15:31 +01:00
commit d903893b4c
21854 changed files with 4461308 additions and 0 deletions

View File

@ -0,0 +1,242 @@
<?php
/**
* ---------------------------------------------------------------------
* GLPI - Gestionnaire Libre de Parc Informatique
* Copyright (C) 2015-2020 Teclib' and contributors.
*
* http://glpi-project.org
*
* based on GLPI - Gestionnaire Libre de Parc Informatique
* Copyright (C) 2003-2014 by the INDEPNET Development Team.
*
* ---------------------------------------------------------------------
*
* LICENSE
*
* This file is part of GLPI.
*
* GLPI 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 2 of the License, or
* (at your option) any later version.
*
* GLPI 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 GLPI. If not, see <http://www.gnu.org/licenses/>.
* ---------------------------------------------------------------------
*/
namespace Glpi\Api\Deprecated;
if (!defined('GLPI_ROOT')) {
die("Sorry. You can't access this file directly");
}
/**
* @since 9.5
*/
trait CommonDeprecatedTrait
{
abstract public function getType(): string;
/**
* Get the class short name for the deprecated itemtpe
*
* @return string
*/
private function getDeprecatedClass(): string {
return (new \ReflectionClass(static::class))->getShortName();
}
/**
* For each hateoas, update the href ref to match the deprecated type
*
* @param array $hateoas Current hateoas
* @return array Updated hateoas
*/
public function replaceCurrentHateoasRefByDeprecated(array $hateoas): array {
foreach ($hateoas as $key => $value) {
if (isset($value["href"])) {
$hateoas[$key]["href"] = str_replace(
$this->getType(),
$this->getDeprecatedClass(),
$value["href"]
);
}
}
return $hateoas;
}
/**
* For each searchoption, update the UID ref to match the deprecated type
*
* @param array $soptions
* @return CommonDeprecatedTrait Return self to allow method chaining
*/
public function updateSearchOptionsUids(array &$soptions) {
$soptions = array_map(function($soption) {
if (isset($soption['uid'])) {
$new_uid = str_replace(
$this->getType(),
$this->getDeprecatedClass(),
$soption['uid']
);
$soption['uid'] = $new_uid;
}
return $soption;
}, $soptions);
return $this;
}
/**
* For each searchoption, update the table ref to match the deprecated type
*
* @param array $soptions
* @return CommonDeprecatedTrait Return self to allow method chaining
*/
public function updateSearchOptionsTables(array &$soptions) {
$soptions = array_map(function($soption) {
if (isset($soption['table'])) {
$new_table = str_replace(
getTableForItemType($this->getType()),
getTableForItemType($this->getDeprecatedClass()),
$soption['table']
);
$soption['table'] = $new_table;
}
return $soption;
}, $soptions);
return $this;
}
/**
* Add a field in an array or an object
*
* @param array|object $fields
* @param string $name
* @param string $value
* @return CommonDeprecatedTrait Return self to allow method chaining
*/
public function addField(&$fields, string $name, string $value) {
if (is_object($fields)) {
if (!isset($fields->$name)) {
$fields->$name = $value;
}
} else if (is_array($fields)) {
if (!isset($fields[$name])) {
$fields[$name] = $value;
}
}
return $this;
}
/**
* Rename a field in an array or an object
*
* @param array|object $fields
* @param string $old
* @param string $new
* @return CommonDeprecatedTrait Return self to allow method chaining
*/
public function renameField(&$fields, string $old, string $new) {
if (is_object($fields)) {
if (isset($fields->$old)) {
$fields->$new = $fields->$old;
unset($fields->$old);
}
} else if (is_array($fields)) {
if (isset($fields[$old])) {
$fields[$new] = $fields[$old];
unset($fields[$old]);
}
}
return $this;
}
/**
* Delete a field in an array or an object
*
* @param array|object $fields
* @param string $name
* @return CommonDeprecatedTrait Return self to allow method chaining
*/
public function deleteField(&$fields, string $name) {
if (is_object($fields)) {
if (isset($fields->$name)) {
unset($fields->$name);
}
} else if (is_array($fields)) {
if (isset($fields[$name])) {
unset($fields[$name]);
}
}
return $this;
}
/**
* Add a searchoption
*
* @param array $fields
* @param string $key
* @param array $values
* @return CommonDeprecatedTrait Return self to allow method chaining
*/
public function addSearchOption(
array &$soptions,
string $key,
array $values
) {
$soptions[$key] = $values;
return $this;
}
/**
* Edit an existing searchoption
*
* @param array $fields
* @param string $key
* @param array $values
* @return CommonDeprecatedTrait Return self to allow method chaining
*/
public function alterSearchOption(
array &$soptions,
string $key,
array $values
) {
foreach ($values as $v_key => $v_value) {
$soptions[$key][$v_key] = $v_value;
}
return $this;
}
/**
* Delete an existing searchoption
*
* @param array $fields
* @param string $key
* @param array $values
* @return CommonDeprecatedTrait Return self to allow method chaining
*/
public function deleteSearchOption(array &$soptions, string $key) {
if (isset($soptions[$key])) {
unset($soptions[$key]);
}
return $this;
}
}

View File

@ -0,0 +1,104 @@
<?php
/**
* ---------------------------------------------------------------------
* GLPI - Gestionnaire Libre de Parc Informatique
* Copyright (C) 2015-2020 Teclib' and contributors.
*
* http://glpi-project.org
*
* based on GLPI - Gestionnaire Libre de Parc Informatique
* Copyright (C) 2003-2014 by the INDEPNET Development Team.
*
* ---------------------------------------------------------------------
*
* LICENSE
*
* This file is part of GLPI.
*
* GLPI 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 2 of the License, or
* (at your option) any later version.
*
* GLPI 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 GLPI. If not, see <http://www.gnu.org/licenses/>.
* ---------------------------------------------------------------------
*/
namespace Glpi\Api\Deprecated;
if (!defined('GLPI_ROOT')) {
die("Sorry. You can't access this file directly");
}
/**
* @since 9.5
*/
class Computer_SoftwareLicense implements DeprecatedInterface
{
use CommonDeprecatedTrait;
public function getType(): string {
return "Item_SoftwareLicense";
}
public function mapCurrentToDeprecatedHateoas(array $hateoas): array {
$hateoas = $this->replaceCurrentHateoasRefByDeprecated($hateoas);
return $hateoas;
}
public function mapDeprecatedToCurrentFields(object $fields): object {
$this
->renameField($fields, "computers_id", "items_id")
->addField($fields, "itemtype", "Computer");
return $fields;
}
public function mapCurrentToDeprecatedFields(array $fields): array {
$this
->renameField($fields, "items_id", "computers_id")
->deleteField($fields, "itemtype");
return $fields;
}
public function mapDeprecatedToCurrentCriteria(array $criteria): array {
$criteria[] = [
"link" => 'AND',
"field" => "6",
"searchtype" => 'equals',
"value" => "Computer"
];
return $criteria;
}
public function mapCurrentToDeprecatedSearchOptions(array $soptions): array {
$this
->updateSearchOptionsUids($soptions)
->updateSearchOptionsTables($soptions)
->alterSearchOption($soptions, "5", [
'name' => "Computer",
'table' => "glpi_computers",
'field' => "name",
'datatype' => "dropdown",
'uid' => "Computer_SoftwareLicense.Computer.name",
'available_searchtypes' => [
"contains",
"notcontains",
"equals",
"notequals"
],
])
->deleteSearchOption($soptions, "6");
return $soptions;
}
}

View File

@ -0,0 +1,108 @@
<?php
/**
* ---------------------------------------------------------------------
* GLPI - Gestionnaire Libre de Parc Informatique
* Copyright (C) 2015-2020 Teclib' and contributors.
*
* http://glpi-project.org
*
* based on GLPI - Gestionnaire Libre de Parc Informatique
* Copyright (C) 2003-2014 by the INDEPNET Development Team.
*
* ---------------------------------------------------------------------
*
* LICENSE
*
* This file is part of GLPI.
*
* GLPI 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 2 of the License, or
* (at your option) any later version.
*
* GLPI 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 GLPI. If not, see <http://www.gnu.org/licenses/>.
* ---------------------------------------------------------------------
*/
namespace Glpi\Api\Deprecated;
if (!defined('GLPI_ROOT')) {
die("Sorry. You can't access this file directly");
}
/**
* @since 9.5
*/
class Computer_SoftwareVersion implements DeprecatedInterface
{
use CommonDeprecatedTrait;
public function getType(): string {
return "Item_SoftwareVersion";
}
public function mapCurrentToDeprecatedHateoas(array $hateoas): array {
$hateoas = $this->replaceCurrentHateoasRefByDeprecated($hateoas);
return $hateoas;
}
public function mapDeprecatedToCurrentFields(object $fields): object {
$this
->renameField($fields, "computers_id", "items_id")
->addField($fields, "itemtype", "Computer")
->renameField($fields, "is_template_computer", "is_template_item")
->renameField($fields, "is_deleted_computer", "is_deleted_item");
return $fields;
}
public function mapCurrentToDeprecatedFields(array $fields): array {
$this
->renameField($fields, "items_id", "computers_id")
->deleteField($fields, "itemtype")
->renameField($fields, "is_template_item", "is_template_computer")
->renameField($fields, "is_deleted_item", "is_deleted_computer");
return $fields;
}
public function mapDeprecatedToCurrentCriteria(array $criteria): array {
$criteria[] = [
"link" => 'AND',
"field" => "5",
"searchtype" => 'equals',
"value" => "Computer"
];
return $criteria;
}
public function mapCurrentToDeprecatedSearchOptions(array $soptions): array {
$this
->updateSearchOptionsUids($soptions)
->updateSearchOptionsTables($soptions)
->alterSearchOption($soptions, "3", [
'name' => "Computer",
'table' => "glpi_computers",
'field' => "name",
'datatype' => "dropdown",
'uid' => "Computer_SoftwareVersion.Computer.name",
'available_searchtypes' => [
"contains",
"notcontains",
"equals",
"notequals"
],
])
->deleteSearchOption($soptions, "5");
return $soptions;
}
}

View File

@ -0,0 +1,92 @@
<?php
/**
* ---------------------------------------------------------------------
* GLPI - Gestionnaire Libre de Parc Informatique
* Copyright (C) 2015-2020 Teclib' and contributors.
*
* http://glpi-project.org
*
* based on GLPI - Gestionnaire Libre de Parc Informatique
* Copyright (C) 2003-2014 by the INDEPNET Development Team.
*
* ---------------------------------------------------------------------
*
* LICENSE
*
* This file is part of GLPI.
*
* GLPI 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 2 of the License, or
* (at your option) any later version.
*
* GLPI 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 GLPI. If not, see <http://www.gnu.org/licenses/>.
* ---------------------------------------------------------------------
*/
namespace Glpi\Api\Deprecated;
if (!defined('GLPI_ROOT')) {
die("Sorry. You can't access this file directly");
}
/**
* @since 9.5
*/
interface DeprecatedInterface
{
/**
* Get the deprecated itemtype
*
* @return string
*/
public function getType(): string;
/**
* Convert current hateoas to deprecated hateoas
*
* @param array $hateoas
* @return array
*/
public function mapCurrentToDeprecatedHateoas(array $hateoas): array;
/**
* Convert current fields to deprecated fields
*
* @param array $fields
* @return array
*/
public function mapCurrentToDeprecatedFields(array $fields): array;
/**
* Convert current searchoptions to deprecated searchoptions
*
* @param array $soptions
* @return array
*/
public function mapCurrentToDeprecatedSearchOptions(array $soptions): array;
/**
* Convert deprecated fields to current fields
*
* @param object $fields
* @return object
*/
public function mapDeprecatedToCurrentFields(object $fields): object;
/**
* Convert deprecated search criteria to current search criteria
*
* @param array $criteria
* @return array
*/
public function mapDeprecatedToCurrentCriteria(array $criteria): array;
}

View File

@ -0,0 +1,129 @@
<?php
/**
* ---------------------------------------------------------------------
* GLPI - Gestionnaire Libre de Parc Informatique
* Copyright (C) 2015-2020 Teclib' and contributors.
*
* http://glpi-project.org
*
* based on GLPI - Gestionnaire Libre de Parc Informatique
* Copyright (C) 2003-2014 by the INDEPNET Development Team.
*
* ---------------------------------------------------------------------
*
* LICENSE
*
* This file is part of GLPI.
*
* GLPI 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 2 of the License, or
* (at your option) any later version.
*
* GLPI 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 GLPI. If not, see <http://www.gnu.org/licenses/>.
* ---------------------------------------------------------------------
*/
namespace Glpi\Api\Deprecated;
if (!defined('GLPI_ROOT')) {
die("Sorry. You can't access this file directly");
}
/**
* @since 9.4.0
*/
class TicketFollowup implements DeprecatedInterface
{
use CommonDeprecatedTrait;
public function getType(): string {
return "ITILFollowup";
}
public function mapCurrentToDeprecatedHateoas(array $hateoas): array {
$hateoas = $this->replaceCurrentHateoasRefByDeprecated($hateoas);
return $hateoas;
}
public function mapDeprecatedToCurrentFields(object $fields): object {
$this
->renameField($fields, "tickets_id", "items_id")
->addField($fields, "itemtype", "Ticket");
return $fields;
}
public function mapCurrentToDeprecatedFields(array $fields): array {
$this
->renameField($fields, "items_id", "tickets_id")
->deleteField($fields, "itemtype")
->deleteField($fields, "sourceitems_id")
->deleteField($fields, "sourceof_items_id");
return $fields;
}
public function mapDeprecatedToCurrentCriteria(array $criteria): array {
// Add itemtype condition
$criteria[] = [
"link" => 'AND',
"field" => "6",
"searchtype" => 'equals',
"value" => "Ticket"
];
return $criteria;
}
public function mapCurrentToDeprecatedSearchOptions(array $soptions): array {
$this
->updateSearchOptionsUids($soptions)
->updateSearchOptionsTables($soptions)
->alterSearchOption($soptions, "1", [
"available_searchtypes" => ["contains"]
])
->alterSearchOption($soptions, "2", [
"available_searchtypes" => [
"contains",
"equals",
"notequals"
]
])
->alterSearchOption($soptions, "3", [
"available_searchtypes" => [
"equals",
"notequals",
"lessthan",
"morethan",
"contains"
]
])
->alterSearchOption($soptions, "4", [
"available_searchtypes" => [
"equals",
"notequals",
"contains"
]
])
->alterSearchOption($soptions, "5", [
"available_searchtypes" => [
"contains",
"equals",
"notequals"
]
])
->deleteSearchOption($soptions, "6")
->deleteSearchOption($soptions, "119")
->deleteSearchOption($soptions, "document");
return $soptions;
}
}