%PDF- %PDF-
| Direktori : /var/www/projetos/suporte.iigd.com.br/install/migrations/update_10.0.2_to_10.0.3/ |
| Current File : /var/www/projetos/suporte.iigd.com.br/install/migrations/update_10.0.2_to_10.0.3/notifications.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/>.
*
* ---------------------------------------------------------------------
*/
use Glpi\Toolbox\Sanitizer;
/**
* @var \DBmysql $DB
* @var \Migration $migration
*/
/* BEGIN: Fixes default notification targets */
$itil_types = ['Ticket', 'Change', 'Problem'];
$iterator = $DB->request([
'SELECT' => ['id', 'event'],
'FROM' => 'glpi_notifications',
'WHERE' => [
'itemtype' => $itil_types,
],
]);
foreach ($iterator as $notification) {
$target_iterator = $DB->request([
'SELECT' => ['id', 'items_id'],
'FROM' => 'glpi_notificationtargets',
'WHERE' => [
'notifications_id' => $notification['id']
],
]);
$targets = [];
foreach ($target_iterator as $target) {
$targets[$target['id']] = $target['items_id'];
}
$removed_item_group = false;
$found_assigned_group = false;
foreach ($targets as $target_id => $items_id) {
if (
$items_id === Notification::ITEM_TECH_GROUP_IN_CHARGE
|| $items_id === Notification::ITEM_TECH_IN_CHARGE
|| $items_id === Notification::ITEM_USER
) {
$DB->deleteOrDie('glpi_notificationtargets', [
'id' => $target_id,
]);
if ($items_id === Notification::ITEM_TECH_GROUP_IN_CHARGE) {
$removed_item_group = true;
}
}
if ($items_id === Notification::ASSIGN_GROUP) {
$found_assigned_group = true;
}
}
if ($notification['event'] === 'assign_group' && $removed_item_group && !$found_assigned_group) {
$DB->insertOrDie('glpi_notificationtargets', [
'notifications_id' => $notification['id'],
'type' => Notification::USER_TYPE,
'items_id' => Notification::ASSIGN_GROUP,
]);
}
}
/* END: Fixes default notification targets */
/* BEGIN: Fixes notification templates encoding (see #10295) */
$template_iterator = $DB->request([
'SELECT' => ['id', 'content_html'],
'FROM' => 'glpi_notificationtemplatetranslations',
]);
foreach ($template_iterator as $template_data) {
if ($template_data['content_html'] === null) {
continue;
}
$content_html = Sanitizer::decodeHtmlSpecialChars($template_data['content_html']);
if (str_contains($content_html, '<p>') && str_contains($content_html, '</p>')) {
// HTML still contains encoded HTML. It can be result of 2 different initial states
// 1. DB content may contains be partially encoded (contains both encoded and raw HTML).
// In this case, Sanitizer::decodeHtmlSpecialChars() will have no effect, as it is not considered as encoded,
// and so `<p>` and `</p>` will still be present.
// 2. A template partially encoded has been saved from UI, resulting in presence of `&lt;p&gt;` and `&lt;/p&gt;`.
// Sanitizer::decodeHtmlSpecialChars() will transform these to `<p>` and `</p>`.
//
// In both cases, remaining encoded HTML has to be decoded, so it will be then possible to reencode the whole
// content without having some characters that are double-encoded.
$content_html = str_replace(['<', '>'], ['<', '>'], $content_html);
$migration->addPostQuery(
$DB->buildUpdate(
'glpi_notificationtemplatetranslations',
[
'content_html' => Sanitizer::sanitize($content_html),
],
[
'id' => $template_data['id'],
]
)
);
}
}
/* END: Fixes notification templates encoding */