%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/projetos/suporte.iigd.com.br.old/install/migrations/
Upload File :
Create Path :
Current File : /var/www/projetos/suporte.iigd.com.br.old/install/migrations/update_9.4.2_to_9.4.3.php

<?php

/**
 * ---------------------------------------------------------------------
 *
 * GLPI - Gestionnaire Libre de Parc Informatique
 *
 * http://glpi-project.org
 *
 * @copyright 2015-2022 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/>.
 *
 * ---------------------------------------------------------------------
 */

/**
 * Update from 9.4.2 to 9.4.3
 *
 * @return bool for success (will die for most error)
 **/
function update942to943()
{
    global $DB, $migration;

    $updateresult     = true;

   //TRANS: %s is the number of new version
    $migration->displayTitle(sprintf(__('Update to %s'), '9.4.3'));
    $migration->setVersion('9.4.3');

    /** Fix URL of images inside ITIL objects contents */
   // This is an exact copy of the same process used in "update940to941()" and "update941to942()"
   // which was not working for elements having a simple quote in their content.
   // It has been fixed there for people who had not yet updated to 9.4.1 / 9.4.2 but have to
   // be put back here for people already having updated to 9.4.1 / 9.4.2.
    $migration->displayMessage(sprintf(__('Fix URL of images in ITIL tasks, followups and solutions.')));

   // Search for contents that does not contains the itil object parameter after the docid parameter
   // (i.e. having a quote that ends the href just after the docid param value).
   // 1st capturing group is the end of href attribute value
   // 2nd capturing group is the href attribute ending quote
    $quotes_possible_exp   = ['\'', '&apos;', '&#39;', '&#x27;', '"', '&quot', '&#34;', '&#x22;'];
    $missing_param_pattern = '(document\.send\.php\?docid=[0-9]+)(' . implode('|', $quotes_possible_exp) . ')';

    $itil_mappings = [
        'Change' => [
            'itil_table' => 'glpi_changes',
            'itil_fkey'  => 'changes_id',
            'task_table' => 'glpi_changetasks',
        ],
        'Problem' => [
            'itil_table' => 'glpi_problems',
            'itil_fkey'  => 'problems_id',
            'task_table' => 'glpi_problemtasks',
        ],
        'Ticket' => [
            'itil_table' => 'glpi_tickets',
            'itil_fkey'  => 'tickets_id',
            'task_table' => 'glpi_tickettasks',
        ],
    ];

    $fix_content_fct = function ($content, $itil_id, $itil_fkey) use ($missing_param_pattern) {
       // Add itil object param between docid param ($1) and ending quote ($2)
        return preg_replace(
            '/' . $missing_param_pattern . '/',
            '$1&amp;' . http_build_query([$itil_fkey => $itil_id]) . '$2',
            $content
        );
    };

    foreach ($itil_mappings as $itil_type => $itil_specs) {
        $itil_fkey  = $itil_specs['itil_fkey'];
        $task_table = $itil_specs['task_table'];

       // Fix followups and solutions
        foreach (['glpi_itilfollowups', 'glpi_itilsolutions'] as $itil_element_table) {
            $elements_to_fix = $DB->request(
                [
                    'SELECT'    => ['id', 'items_id', 'content'],
                    'FROM'      => $itil_element_table,
                    'WHERE'     => [
                        'itemtype' => $itil_type,
                        'content'  => ['REGEXP', $DB->escape($missing_param_pattern)],
                    ]
                ]
            );
            foreach ($elements_to_fix as $data) {
                 $data['content'] = $DB->escape($fix_content_fct($data['content'], $data['items_id'], $itil_fkey));
                 $DB->update($itil_element_table, $data, ['id' => $data['id']]);
            }
        }

       // Fix tasks
        $tasks_to_fix = $DB->request(
            [
                'SELECT'    => ['id', $itil_fkey, 'content'],
                'FROM'      => $task_table,
                'WHERE'     => [
                    'content'  => ['REGEXP', $DB->escape($missing_param_pattern)],
                ]
            ]
        );
        foreach ($tasks_to_fix as $data) {
            $data['content'] = $DB->escape($fix_content_fct($data['content'], $data[$itil_fkey], $itil_fkey));
            $DB->update($task_table, $data, ['id' => $data['id']]);
        }
    }
    /** /Fix URL of images inside ITIL objects contents */

   // add is_private field to change and problems
    $migration->addField('glpi_changetasks', 'is_private', 'bool');
    $migration->addField('glpi_problemtasks', 'is_private', 'bool');
    $migration->addKey('glpi_changetasks', 'is_private');
    $migration->addKey('glpi_problemtasks', 'is_private');

    /** Crontask missing from fresh install */
    CronTask::Register(
        'PurgeLogs',
        'PurgeLogs',
        7 * DAY_TIMESTAMP,
        [
            'param' => 24,
            'mode' => CronTask::MODE_EXTERNAL
        ]
    );
    /** /Crontask missing from fresh install */

   // ************ Keep it at the end **************
    $migration->executeMigration();

    return $updateresult;
}

Zerion Mini Shell 1.0