butterfly/front/internal.js.php
Claude 18879bff6d Conformidade KB: sem inc/includes.php, logo.png, limpeza e JSON_HEX_TAG
- front/*.php não incluem mais ../../../inc/includes.php: no GLPI 11 o
  LegacyFileLoadController boota o core antes do script, e o include
  quebra quando o plugin roda do marketplace dir (KB-PLUGIN-028/010).
- logo.png (512x512) criado a partir de plugin.png: o LogoController só
  reconhece o nome fixo logo.png (KB-INFRA-002).
- Removidos front/test_simple.php e front/login.css.php (deprecated),
  incluindo a firewall strategy correspondente no setup.php (KB-018).
- json_encode com JSON_HEX_TAG|JSON_HEX_AMP em todo dado dinâmico
  embutido em <script> (KB-PLUGIN-003).
- .gitignore padrão KB-018; .DS_Store removidos.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 16:25:56 -03:00

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 = PluginButterflyToolbox::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 = PluginButterflyConfig::getConfig('favicon_picture');
if ($favicon):
$faviconUrl = PluginButterflyToolbox::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 = PluginButterflyConfig::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 = PluginButterflyConfig::getConfig('page_footer_display', 'original');
$footerText = PluginButterflyConfig::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
}