Skip to content

Commit

Permalink
Bugfix Session-Handling
Browse files Browse the repository at this point in the history
Session-Handling gefixed.
Änderung der Script-Urls (ohne index.php)
Danke an @TobiasKrais @skerbis @ynamite @marcohanke
  • Loading branch information
aeberhard committed Nov 29, 2021
1 parent c30a334 commit 8e3d171
Show file tree
Hide file tree
Showing 5 changed files with 107 additions and 97 deletions.
167 changes: 87 additions & 80 deletions boot.php
Original file line number Diff line number Diff line change
@@ -1,97 +1,104 @@
<?php
// Nur im Backend
if (rex::isBackend()) {

rex_perm::register('consent_manager[texteditonly]');
if (rex::isBackend() && rex::getUser()) {
if (!rex::getUser()->isAdmin() && rex::getUser()->hasPerm('consent_manager[texteditonly]')) {
$page = $this->getProperty('page');
if ($page) {
foreach (['cookiegroup', 'cookie', 'domain', 'config', 'setup', 'help'] as $removepage) {
unset($page['subpages'][$removepage]);
rex_perm::register('consent_manager[texteditonly]');
if (rex::getUser()) {
if (!rex::getUser()->isAdmin() && rex::getUser()->hasPerm('consent_manager[texteditonly]')) {
$page = $this->getProperty('page');
if ($page) {
foreach (['cookiegroup', 'cookie', 'domain', 'config', 'setup', 'help'] as $removepage) {
unset($page['subpages'][$removepage]);
}
$this->setProperty('page', $page);
}
$this->setProperty('page', $page);
}
}
}

rex_extension::register('PACKAGES_INCLUDED', function () {
if (rex::getUser()) {
if (rex::getUser()->isAdmin() && rex::isDebugMode() && 'get' == rex_request_method()) {
$compiler = new rex_scss_compiler();
$compiler->setRootDir($this->getPath());
$compiler->setScssFile($this->getPath('scss/consent_manager_backend.scss'));
$compiler->setCssFile($this->getPath('assets/consent_manager_backend.css'));
$compiler->compile();
$compiler->setScssFile($this->getPath('scss/consent_manager_frontend.scss'));
$compiler->setCssFile($this->getPath('assets/consent_manager_frontend.css'));
$compiler->compile();
rex_file::copy($this->getPath('assets/consent_manager_frontend.css'), $this->getAssetsPath('consent_manager_frontend.css'));
rex_file::copy($this->getPath('assets/consent_manager_backend.css'), $this->getAssetsPath('consent_manager_backend.css'));
rex_file::copy($this->getPath('assets/consent_manager_polyfills.js'), $this->getAssetsPath('consent_manager_frontend.js'));
rex_file::copy($this->getPath('assets/consent_manager_frontend.js'), $this->getAssetsPath('consent_manager_frontend.js'));
rex_extension::register('PACKAGES_INCLUDED', function () {
if (rex::getUser()) {
if (rex::getUser()->isAdmin() && rex::isDebugMode() && 'get' == rex_request_method()) {
$compiler = new rex_scss_compiler();
$compiler->setRootDir($this->getPath());
$compiler->setScssFile($this->getPath('scss/consent_manager_backend.scss'));
$compiler->setCssFile($this->getPath('assets/consent_manager_backend.css'));
$compiler->compile();
$compiler->setScssFile($this->getPath('scss/consent_manager_frontend.scss'));
$compiler->setCssFile($this->getPath('assets/consent_manager_frontend.css'));
$compiler->compile();
rex_file::copy($this->getPath('assets/consent_manager_frontend.css'), $this->getAssetsPath('consent_manager_frontend.css'));
rex_file::copy($this->getPath('assets/consent_manager_backend.css'), $this->getAssetsPath('consent_manager_backend.css'));
rex_file::copy($this->getPath('assets/consent_manager_polyfills.js'), $this->getAssetsPath('consent_manager_frontend.js'));
rex_file::copy($this->getPath('assets/consent_manager_frontend.js'), $this->getAssetsPath('consent_manager_frontend.js'));
}
if ('consent_manager' == rex_be_controller::getCurrentPagePart(1)) {
rex_view::addCssFile($this->getAssetsUrl('consent_manager_backend.css'));
}
}
if (rex::isBackend() && 'consent_manager' == rex_be_controller::getCurrentPagePart(1)) {
rex_view::addCssFile($this->getAssetsUrl('consent_manager_backend.css'));
});

rex_extension::register('OUTPUT_FILTER', static function (rex_extension_point $ep) {
if (1 == rex_clang::count()) {
$s = '</head>';
$r = '<style>[id*="rex-page-consent_manager"] .rex-page-nav .navbar{display:none}</style></head>';
$ep->setSubject(str_replace($s, $r, $ep->getSubject()));
}
}
});
});
rex_extension::register('REX_FORM_CONTROL_FIELDS', 'consent_manager_rex_form::removeDeleteButton');
rex_extension::register('PAGES_PREPARED', 'consent_manager_clang::addLangNav');
rex_extension::register('REX_FORM_SAVED', 'consent_manager_clang::formSaved');
rex_extension::register('REX_FORM_SAVED', 'consent_manager_cache::write');
rex_extension::register('CLANG_ADDED', 'consent_manager_clang::clangAdded');
rex_extension::register('CLANG_DELETED', 'consent_manager_clang::clangDeleted');

rex_extension::register('OUTPUT_FILTER', static function (rex_extension_point $ep) {
if (rex::isBackend() && 1 == rex_clang::count()) {
$s = '</head>';
$r = '<style>[id*="rex-page-consent_manager"] .rex-page-nav .navbar{display:none}</style></head>';
$ep->setSubject(str_replace($s, $r, $ep->getSubject()));
if ('consent_manager' == rex_be_controller::getCurrentPagePart(1) && $this->getConfig('justInstalled')) {
$this->setConfig('justInstalled', false);
consent_manager_clang::addonJustInstalled();
}
if ($this->getConfig('forceCache')) {
$this->setConfig('forceCache', false);
consent_manager_cache::forceWrite();
}
});
rex_extension::register('REX_FORM_CONTROL_FIELDS', 'consent_manager_rex_form::removeDeleteButton');
rex_extension::register('PAGES_PREPARED', 'consent_manager_clang::addLangNav');
rex_extension::register('REX_FORM_SAVED', 'consent_manager_clang::formSaved');
rex_extension::register('REX_FORM_SAVED', 'consent_manager_cache::write');
rex_extension::register('CLANG_ADDED', 'consent_manager_clang::clangAdded');
rex_extension::register('CLANG_DELETED', 'consent_manager_clang::clangDeleted');

if ('consent_manager' == rex_be_controller::getCurrentPagePart(1) && $this->getConfig('justInstalled')) {
$this->setConfig('justInstalled', false);
consent_manager_clang::addonJustInstalled();
}
if ($this->getConfig('forceCache')) {
$this->setConfig('forceCache', false);
consent_manager_cache::forceWrite();
}
rex_extension::register('OUTPUT_FILTER', static function (rex_extension_point $ep) {
if (rex::isFrontend()) {
$consent_manager = isset($_COOKIE['consent_manager']) ? json_decode($_COOKIE['consent_manager'], 1) : false;
$outcss = rex_addon::get('consent_manager')->getConfig('outputcss', false);
$_search = '<!--REX_CONSENT_MANAGER_OUTPUT[]-->';
$_replace = '';
if ($outcss) {
if (!$consent_manager || strstr($ep->getSubject(), 'consent_manager-show-box') || strstr($ep->getSubject(), 'consent_manager-show-box-reload')) {
if (isset($_SESSION['consent_manager']['outputcss'])) {
$_replace .= $_SESSION['consent_manager']['outputcss'];

// Nur im Frontend
if (rex::isFrontend()) {
rex_extension::register('OUTPUT_FILTER', static function (rex_extension_point $ep) {

if (true === rex_get('consent_manager_outputjs', 'bool', false)) {
$consent_manager = new consent_manager_frontend(0);
$consent_manager->setDomain($_SERVER['HTTP_HOST']);
$consent_manager->outputJavascript();
exit;
}

if (!rex_article::getCurrentId() or rex_article::getCurrentId() == rex_article::getNotfoundArticleId()) {
return;
}

if (isset($_SESSION['consent_manager']['outputjs']) && strstr($ep->getSubject(), '<!--REX_CONSENT_MANAGER_OUTPUT[]-->')) {
$consent_manager = isset($_COOKIE['consent_manager']) ? json_decode($_COOKIE['consent_manager'], 1) : false;
$outcss = rex_addon::get('consent_manager')->getConfig('outputcss', false);
$_search = '<!--REX_CONSENT_MANAGER_OUTPUT[]-->';
$_replace = '';
if ($outcss) {
if (!$consent_manager || strstr($ep->getSubject(), 'consent_manager-show-box') || strstr($ep->getSubject(), 'consent_manager-show-box-reload')) {
if (isset($_SESSION['consent_manager']['outputcss'])) {
$_replace .= $_SESSION['consent_manager']['outputcss'];
}
} else {
$_replace .= ' <style>.consent_manager-hidden{display:none}</style>' . PHP_EOL;
}
} else {
$_replace .= ' <style>.consent_manager-hidden{display:none}</style>' . PHP_EOL;
$_replace .= $_SESSION['consent_manager']['outputcss'];
}
} else {
$_replace .= $_SESSION['consent_manager']['outputcss'];
}
if (isset($_SESSION['consent_manager']['outputjs'])) {
$_replace .= $_SESSION['consent_manager']['outputjs'];
if (isset($_SESSION['consent_manager']['outputjs'])) {
$_replace .= $_SESSION['consent_manager']['outputjs'];
}
$ep->setSubject(str_replace($_search, $_replace, $ep->getSubject()));
}
$ep->setSubject(str_replace($_search, $_replace, $ep->getSubject()));
}
});

rex_extension::register('FE_OUTPUT', static function (rex_extension_point $ep) {
if (true === rex_get('consent_manager_outputjs', 'bool', false)) {
if (!isset($_SESSION) || !isset($_SESSION['consent_manager'])) {
rex_login::startSession();
$_SESSION['consent_manager']['article'] = rex_article::getCurrentId();
$_SESSION['consent_manager']['outputcss'] = '';
$_SESSION['consent_manager']['outputjs'] = '';
$_SESSION['consent_manager']['clang'] = rex_clang::getCurrentId();
}
$consent_manager = new consent_manager_frontend(0);
$consent_manager->setDomain($_SERVER['HTTP_HOST']);
$consent_manager->outputJavascript();
}
});
});

}
21 changes: 16 additions & 5 deletions fragments/consent_manager_box_cssjs.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,15 @@
<?php
if (!rex_article::getCurrentId() or rex_article::getCurrentId() == rex_article::getNotfoundArticleId()) {
return;
}

// Session starten falls noch nicht vorhanden
if (rex::isFrontend()) {
if (!isset($_SESSION)) {
rex_login::startSession();
}
}

$addon = rex_addon::get('consent_manager');
$forceCache = $this->getVar('forceCache');

Expand Down Expand Up @@ -30,16 +41,16 @@

$hidescrollbar = ('|1|' == $addon->getConfig('hidebodyscrollbar', false)) ? 'true' : 'false';

if (isset($_SESSION['consent_manager']['initially_hidden']) && $_SESSION['consent_manager']['initially_hidden'] != $initially_hidden) {
touch($addon->getAssetsPath('consent_manager_frontend.js'));
}

$_SESSION['consent_manager']['initially_hidden'] = $initially_hidden;
$_SESSION['consent_manager']['cachelogid'] = $consent_manager->cacheLogId;
$_SESSION['consent_manager']['version'] = $consent_manager->version;
$_SESSION['consent_manager']['hidescrollbar'] = $hidescrollbar;

$_params = [];
$_params['consent_manager_outputjs'] = true;
$_params['clang'] = rex_clang::getCurrentId();
$_params['v'] = filemtime($addon->getAssetsPath('consent_manager_frontend.js')) . rex_clang::getCurrentId();
$outputjs .= ' <script src="' . rex_url::frontendController($_params) . '" id="consent_manager_script" defer></script>';
$outputjs .= ' <script src="?consent_manager_outputjs=1&clang=' . rex_clang::getCurrentId() . '&v=' . filemtime($addon->getAssetsPath('consent_manager_frontend.js')) . '" id="consent_manager_script" defer></script>';

$_SESSION['consent_manager']['cachelogid'] = $consent_manager->cacheLogId;
$_SESSION['consent_manager']['outputcss'] = $outputcss;
Expand Down
5 changes: 3 additions & 2 deletions lib/consent_manager_frontend.php
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,8 @@ public static function outputJavascript($host = null, $article_id = null)
if (!isset($_SESSION)) {
rex_login::startSession();
}
header('Content-Type: application/javascript');
header_remove();
header('Content-Type: application/javascript; charset=utf-8');
header('Cache-Control: max-age=604800, public');
//header('Pragma: cache');
//header('Cache-Control: public');
Expand All @@ -106,7 +107,7 @@ public static function outputJavascript($host = null, $article_id = null)
$boxtemplate = str_replace("\n", ' ', $boxtemplate);
}
echo '/* --- Parameters --- */' . PHP_EOL;
echo 'var consent_manager_parameters = {initially_hidden: ' . $_SESSION['consent_manager']['initially_hidden'] . ', domain: "' . $_SERVER['HTTP_HOST'] . '", consentid: "' . uniqid('', true) . '", cachelogid: "' . $_SESSION['consent_manager']['cachelogid'] . '", version: "' . $_SESSION['consent_manager']['version'] . '", fe_controller: "' . rex_url::frontendController(). '", hidebodyscrollbar: ' . $_SESSION['consent_manager']['hidescrollbar'] . '};' . PHP_EOL . PHP_EOL;
echo 'var consent_manager_parameters = {initially_hidden: ' . $_SESSION['consent_manager']['initially_hidden'] . ', domain: "' . $_SERVER['HTTP_HOST'] . '", consentid: "' . uniqid('', true) . '", cachelogid: "' . $_SESSION['consent_manager']['cachelogid'] . '", version: "' . $_SESSION['consent_manager']['version'] . '", fe_controller: "' . rex_url::frontend() . '", hidebodyscrollbar: ' . $_SESSION['consent_manager']['hidescrollbar'] . '};' . PHP_EOL . PHP_EOL;
echo '/* --- Consent-Manager Box Template ' . $_SESSION['consent_manager']['clang'] . ' --- */' . PHP_EOL;
echo 'var consent_manager_box_template = \'';
echo $boxtemplate . '\';' . PHP_EOL . PHP_EOL;
Expand Down
9 changes: 0 additions & 9 deletions lib/rex_var_consent_manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,6 @@ class rex_var_consent_manager extends rex_var
{
protected function getOutput()
{
if (rex::isFrontend()) {
if (!isset($_SESSION)) {
rex_login::startSession();
$_SESSION['consent_manager']['article'] = rex_article::getCurrentId();
$_SESSION['consent_manager']['outputcss'] = '';
$_SESSION['consent_manager']['outputjs'] = '';
$_SESSION['consent_manager']['clang'] = rex_clang::getCurrentId();
}
}
$forceCache = $this->getArg('forceCache', 0, false);
return "consent_manager_frontend::getFragment($forceCache, 'consent_manager_box_cssjs.php')";
}
Expand Down
2 changes: 1 addition & 1 deletion package.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package: consent_manager
version: "3.0.2"
version: "3.0.3"
author: "Friends Of REDAXO"
supportpage: https://redaxo.org/support/community/#slack

Expand Down

0 comments on commit 8e3d171

Please sign in to comment.