- Classes migradas de inc/*.class.php (PluginButterfly*) para src/ com namespace GlpiPlugin\Butterfly (PSR-4 registrado pelo core; KB-033). Referências de core qualificadas (\Config, \Html, \Session, ...). - Editor de CSS custom agora usa o Monaco do core (GLPI.Monaco.createEditor + sync via formdata, mesmo padrão de custom_ui do core) com fallback para textarea se a lib não carregar. - pics/ movido para public/pics: no GLPI 11 só recursos em public/ são servidos estaticamente em /plugins/<key>/... (RequestRouterTrait). URLs do select2 de temas agora usam root_doc + encodeURIComponent. - MIN_GLPI_VERSION 11.0.0; removido bloco morto de GLPI <9.5 e css/login.base.css órfão. - config_page com glpi_tab urlencoded para a classe namespaced. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
87 lines
2.8 KiB
PHP
87 lines
2.8 KiB
PHP
<?php
|
|
|
|
// GLPI 11: o core já foi bootado pelo LegacyFileLoadController antes deste
|
|
// arquivo executar — não incluir inc/includes.php (KB-PLUGIN-028)
|
|
|
|
// FIX: Prevent this script from being stored as the "Return URL" after login
|
|
if (isset($_SESSION['glpi_currentpage']) && strpos($_SESSION['glpi_currentpage'], basename(__FILE__)) !== false) {
|
|
unset($_SESSION['glpi_currentpage']);
|
|
}
|
|
|
|
// Redirect if is a not cached URL
|
|
if (!isset($_GET['_'])) {
|
|
$timestamp = \GlpiPlugin\Butterfly\Toolbox::getTimestamp();
|
|
|
|
// Disable cache and redirect to cached URL
|
|
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
|
|
header("Cache-Control: post-check=0, pre-check=0", false);
|
|
header("Pragma: no-cache");
|
|
|
|
$file = basename(__FILE__);
|
|
$url = "$file?_=$timestamp";
|
|
if (isset($_GET['v'])) {
|
|
$url .= '&v=' . $_GET['v'];
|
|
}
|
|
header("Location: " . $url);
|
|
die;
|
|
}
|
|
|
|
header('Content-Type: application/javascript');
|
|
|
|
$is_cacheable = !isset($_GET['debug']) && !isset($_GET['nocache']);
|
|
if ($is_cacheable) {
|
|
// Makes CSS cacheable by browsers and proxies
|
|
$max_age = WEEK_TIMESTAMP;
|
|
header_remove('Pragma');
|
|
header('Cache-Control: public');
|
|
header('Cache-Control: max-age=' . $max_age);
|
|
header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', time() + $max_age));
|
|
}
|
|
|
|
if (false) {
|
|
?>
|
|
<script>
|
|
<?php
|
|
}
|
|
?>
|
|
<?php echo "$(function () {"; ?>
|
|
$('link[href*="butterfly/front/internal.css.php"]').appendTo($('head'))
|
|
<?php
|
|
$favicon = \GlpiPlugin\Butterfly\Config::getConfig('favicon_picture');
|
|
if ($favicon):
|
|
$faviconUrl = \GlpiPlugin\Butterfly\Toolbox::getPictureUrl($favicon);
|
|
?>
|
|
var $icon = $('link[rel*=icon]');
|
|
$icon.attr('type', null);
|
|
$icon.attr('href', <?php echo json_encode($faviconUrl, JSON_UNESCAPED_UNICODE | JSON_HEX_TAG | JSON_HEX_AMP) ?>);
|
|
<?php
|
|
endif;
|
|
$pageTitle = \GlpiPlugin\Butterfly\Config::getConfig('page_title');
|
|
if ($pageTitle):
|
|
?>
|
|
var $title = $('title');
|
|
var newTitle = $title.text().replace('GLPI', <?php echo json_encode($pageTitle, JSON_UNESCAPED_UNICODE | JSON_HEX_TAG | JSON_HEX_AMP) ?>);
|
|
$title.text(newTitle);
|
|
<?php
|
|
endif;
|
|
|
|
$footerDisplay = \GlpiPlugin\Butterfly\Config::getConfig('page_footer_display', 'original');
|
|
$footerText = \GlpiPlugin\Butterfly\Config::getConfig('page_footer_text', '');
|
|
if ($footerDisplay === 'hide'):
|
|
?>
|
|
$('a[id^=show_about_modal_]').hide();
|
|
<?php
|
|
endif;
|
|
if ($footerDisplay === 'custom'):
|
|
$footerText = \Glpi\RichText\RichText::getEnhancedHtml($footerText);
|
|
?>
|
|
$('div[id^=about_modal_] .copyright').parent().parent().html(<?php echo json_encode($footerText, JSON_UNESCAPED_UNICODE | JSON_HEX_TAG | JSON_HEX_AMP) ?>);
|
|
<?php
|
|
endif;
|
|
|
|
echo "});";
|
|
if (false) {
|
|
?>
|
|
</script>
|
|
<?php
|
|
}
|