%PDF- %PDF-
Direktori : /var/www/projetos/suporte.iigd.com.br.old/inc/ |
Current File : /var/www/projetos/suporte.iigd.com.br.old/inc/autoload.function.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/>. * * --------------------------------------------------------------------- */ if (!defined('GLPI_ROOT')) { die("Sorry. You can't access this file directly"); } define('NS_GLPI', 'Glpi\\'); define('NS_PLUG', 'GlpiPlugin\\'); /** * Is the script launch in Command line? * * @return boolean */ function isCommandLine() { return (PHP_SAPI == 'cli'); } /** * Is the script launched From API? * * @return boolean */ function isAPI() { global $CFG_GLPI; $called_url = (!empty($_SERVER['HTTPS'] ?? "") && ($_SERVER['HTTPS'] ?? "") !== 'off' ? 'https' : 'http') . '://' . ($_SERVER['HTTP_HOST'] ?? "") . ($_SERVER['REQUEST_URI'] ?? ""); $base_api_url = $CFG_GLPI['url_base_api'] ?? ""; // $CFG_GLPI may be not defined if DB is not available if (!empty($base_api_url) && strpos($called_url, $base_api_url) !== false) { return true; } $script = isset($_SERVER['SCRIPT_FILENAME']) ? $_SERVER['SCRIPT_FILENAME'] : ''; if (strpos($script, 'apirest.php') !== false) { return true; } if (strpos($script, 'apixmlrpc.php') !== false) { return true; } return false; } /** * Determine if an class name is a plugin one * * @param string $classname Class name to analyze * * @return boolean|array False or an array containing plugin name and class name */ function isPluginItemType($classname) { /** @var array $matches */ if (preg_match("/^Plugin([A-Z][a-z0-9]+)([A-Z]\w+)$/", $classname, $matches)) { $plug = []; $plug['plugin'] = $matches[1]; $plug['class'] = $matches[2]; return $plug; } else if (substr($classname, 0, \strlen(NS_PLUG)) === NS_PLUG) { $tab = explode('\\', $classname, 3); $plug = []; $plug['plugin'] = $tab[1]; $plug['class'] = $tab[2]; return $plug; } // Standard case return false; } /** * Translate a string * * @since 0.84 * * @param string $str String to translate * @param string $domain domain used (default is glpi, may be plugin name) * * @return string translated string */ function __($str, $domain = 'glpi') { global $TRANSLATE; $trans = null; if ($TRANSLATE !== null) { try { $trans = $TRANSLATE->translate($str, $domain); if (is_array($trans)) { // Wrong call when plural defined $trans = $trans[0]; } } catch (\Throwable $e) { // Error may happen when overrided translation files does not use same plural rules as GLPI. // Silently fail to not flood error log. } } return $trans ?? $str; } /** * Translate a string and escape HTML entities * * @since 0.84 * * @param string $str String to translate * @param string $domain domain used (default is glpi, may be plugin name) * * @return string */ function __s($str, $domain = 'glpi') { return htmlentities(__($str, $domain), ENT_QUOTES, 'UTF-8'); } /** * Translate a contextualized string and escape HTML entities * * @since 0.84 * * @param string $ctx context * @param string $str to translate * @param string $domain domain used (default is glpi, may be plugin name) * * @return string protected string (with htmlentities) */ function _sx($ctx, $str, $domain = 'glpi') { return htmlentities(_x($ctx, $str, $domain), ENT_QUOTES, 'UTF-8'); } /** * Pluralized translation * * @since 0.84 * * @param string $sing in singular * @param string $plural in plural * @param integer $nb to select singular or plural * @param string $domain domain used (default is glpi, may be plugin name) * * @return string translated string */ function _n($sing, $plural, $nb, $domain = 'glpi') { global $TRANSLATE; $trans = null; if ($TRANSLATE !== null) { try { $trans = $TRANSLATE->translatePlural($sing, $plural, $nb, $domain); } catch (\Throwable $e) { // Error may happen when overrided translation files does not use same plural rules as GLPI. // Silently fail to not flood error log. } } return $trans ?? (($nb == 0 || $nb > 1) ? $plural : $sing); } /** * Pluralized translation with HTML entities escaped * * @since 0.84 * * @param string $sing in singular * @param string $plural in plural * @param integer $nb to select singular or plural * @param string $domain domain used (default is glpi, may be plugin name) * * @return string protected string (with htmlentities) */ function _sn($sing, $plural, $nb, $domain = 'glpi') { return htmlentities(_n($sing, $plural, $nb, $domain), ENT_QUOTES, 'UTF-8'); } /** * Contextualized translation * * @since 0.84 * * @param string $ctx context * @param string $str to translate * @param string $domain domain used (default is glpi, may be plugin name) * * @return string */ function _x($ctx, $str, $domain = 'glpi') { // simulate pgettext $msg = $ctx . "\004" . $str; $trans = __($msg, $domain); if ($trans == $msg) { // No translation return $str; } return $trans; } /** * Pluralized contextualized translation * * @since 0.84 * * @param string $ctx context * @param string $sing in singular * @param string $plural in plural * @param integer $nb to select singular or plural * @param string $domain domain used (default is glpi, may be plugin name) * * @return string */ function _nx($ctx, $sing, $plural, $nb, $domain = 'glpi') { // simulate pgettext $singmsg = $ctx . "\004" . $sing; $pluralmsg = $ctx . "\004" . $plural; $trans = _n($singmsg, $pluralmsg, $nb, $domain); if ($trans == $singmsg) { // No translation return $sing; } if ($trans == $pluralmsg) { // No translation return $plural; } return $trans; } /** * Classes loader * * @param string $classname : class to load * * @return void|boolean */ function glpi_autoload($classname) { if ( $classname === 'phpCAS' && file_exists(stream_resolve_include_path("CAS.php")) ) { include_once('CAS.php'); return true; } // Deprecation warn for RuleImportComputer* classes if (in_array($classname, ['RuleImportComputer', 'RuleImportComputerCollection'])) { Toolbox::deprecated( sprintf( '%s has been replaced by %s.', $classname, str_replace('Computer', 'Asset', $classname) ) ); } $plug = isPluginItemType($classname); if (!$plug) { // PSR-4 styled autoloading for classes without namespace $path = sprintf('%s/src/%s.php', GLPI_ROOT, $classname); if (strpos($classname, NS_GLPI) !== 0 && file_exists($path)) { include_once($path); } return; } $plugin_name = strtolower($plug['plugin']); $plugin_class = $plug['class']; if (!Plugin::isPluginLoaded($plugin_name)) { return false; } $plugin_path = null; foreach (PLUGINS_DIRECTORIES as $plugins_dir) { $dir_to_check = sprintf('%s/%s', $plugins_dir, $plugin_name); if (is_dir($dir_to_check)) { $plugin_path = $dir_to_check; break; } } // Legacy class path, e.g. plugins/myplugin/foo.class.php $legacy_path = sprintf('%s/inc/%s.class.php', $plugin_path, str_replace('\\', '/', strtolower($plugin_class))); // PSR-4 styled path for class without namespace, e.g. plugins/myplugin/MyPluginFoo.php $psr4_styled_path = sprintf('%s/src/%s.php', $plugin_path, str_replace('\\', '/', $classname)); if (file_exists($legacy_path)) { include_once($legacy_path); } else if (strpos($classname, NS_PLUG) !== 0 && file_exists($psr4_styled_path)) { // PSR-4 styled autoloading for classes without namespace include_once($psr4_styled_path); } } // Check if dependencies are up to date $needrun = false; // composer dependencies $autoload = GLPI_ROOT . '/vendor/autoload.php'; if (!file_exists($autoload)) { $needrun = true; } else if (file_exists(GLPI_ROOT . '/composer.lock')) { if (!file_exists(GLPI_ROOT . '/.composer.hash')) { /* First time */ $needrun = true; } else if (sha1_file(GLPI_ROOT . '/composer.lock') != file_get_contents(GLPI_ROOT . '/.composer.hash')) { /* update */ $needrun = true; } } // node dependencies if (!file_exists(GLPI_ROOT . '/public/lib')) { $needrun = true; } else if (file_exists(GLPI_ROOT . '/package-lock.json')) { if (!file_exists(GLPI_ROOT . '/.package.hash')) { /* First time */ $needrun = true; } else if (sha1_file(GLPI_ROOT . '/package-lock.json') != file_get_contents(GLPI_ROOT . '/.package.hash')) { /* update */ $needrun = true; } } if ($needrun) { $deps_install_msg = 'Application dependencies are not up to date.' . PHP_EOL . 'Run "php bin/console dependencies install" in the glpi tree to fix this.' . PHP_EOL; if (isCommandLine()) { echo $deps_install_msg; } else { echo nl2br($deps_install_msg); } die(1); } // Check if locales are compiled. $need_mo_compile = false; $locales_files = scandir(GLPI_ROOT . '/locales'); $po_files = preg_grep('/\.po$/', $locales_files); $mo_files = preg_grep('/\.mo$/', $locales_files); if (count($mo_files) < count($po_files)) { $need_mo_compile = true; } else if (file_exists(GLPI_ROOT . '/locales/glpi.pot')) { // Assume that `locales/glpi.pot` file only exists when installation mode is GIT foreach ($po_files as $po_file) { $po_file = GLPI_ROOT . '/locales/' . $po_file; $mo_file = preg_replace('/\.po$/', '.mo', $po_file); if (!file_exists($mo_file) || filemtime($mo_file) < filemtime($po_file)) { $need_mo_compile = true; break; // No need to scan the whole dir } } } if ($need_mo_compile) { $mo_compile_msg = 'Application locales have to be compiled.' . PHP_EOL . 'Run "php bin/console locales:compile" in the glpi tree to fix this.' . PHP_EOL; if (isCommandLine()) { echo $mo_compile_msg; } else { echo nl2br($mo_compile_msg); } die(1); } require_once $autoload; // Use spl autoload to allow stackable autoload. spl_autoload_register('glpi_autoload');