Anzeige Datenschutzerklärung (Modal Link) zusammen mit Passwortrücksetzung erforderlich
Kurzform:
Sobald man bei einem neuen User die Option "Passwortrücksetzen erforderlich" auf Ja setzt und dieser dem Datenschutz noch nicht zugestimmt hat, so hat er bei der ersten Anmeldung keine Möglichkeit den Beitrag mit der Datenschutzerklärung einzusehen. Statt des Beitrag wird die Seite selbst angezeigt.
Ausführliche Beschreibung:
- Neuer User wird im Backend angelegt (eigene Registrierung im FE abgeschaltet)
- User bekommt Startpasswort und Option "Passwortrücksetzung erforderlich" = JA
- User loggt sich mit Startpasswort ein und muss dem Datenschutz zustimmt und ein eigenes Passwort eingeben
Bei diesem ersten Login ist links neben den Zustimmung-Optionsfeldern der Link zur Datenschutzerklärung. Diese sollte sich in einem Modal-Fenster öffnen. Sobald aber eine Passwortrücksetzung erforderlich ist, funktioniert das nicht. Stattdessen wird die eigene aktuelle Seite modal geöffnet.
Verzichtet man auf die Passwortrücksetzung, so wird die Datenschutzerklärung ohne Probleme angezeigt.
P.S. Die Zustimmung mit der Passwortrücksetzung funktioniert. Lediglich die Anzeige der Datenschutzerklärung funktioniert in diesem Zusammenhang nicht.
Der Bug ist bekannt (https://github.com/joomla/joomla-cms/issues/24719), kann aber nicht so einfach gelöst werden. Es wird für Joomla 4 daran gearbeitet.
Hier bieten wir ein Override als Workaround:
Es ist ein Override der "layouts\plugins\system\privacyconsent\label.php"
Zu diesem muss aber ein Language String "PLG_SYSTEM_PRIVACYCONSENT_READ" erstellt werden. Das ist für den Buttom im Footer des Modal-Fenster.
Mit diesem Override wird der gleiche Artikel angezeigt, der im Plugin verknüpft ist. Sollte sich darin ein Modul o.ä. befinden, welche mit {loadmoduleid xx} oder so eingebunden ist, dann wird das auch ausgegeben.
Benötigte Override-Dateien
-
<?php /** * @package Joomla.Plugin * @subpackage System.privacyconsent * * @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ // Create a Language Override or String for PLG_SYSTEM_PRIVACYCONSENT_READ defined('JPATH_BASE') or die; use Joomla\CMS\Factory; use Joomla\CMS\Language\Text; use Joomla\CMS\Router\Route; // load the privacyconsent article JLoader::register('ContentHelperRoute', JPATH_SITE . '/components/com_content/helpers/route.php'); JModelLegacy::addIncludePath(JPATH_SITE . '/components/com_content/models', 'ContentModel'); use Joomla\Utilities\ArrayHelper; $document = JFactory::getDocument(); $css = ' #jform_privacyconsent_privacy-modal { text-align: left;} #jform_privacyconsent_privacy-modal .modal-body { overflow-y: scroll;} '; $document->addStyleDeclaration($css); extract($displayData); /** * Layout variables * ----------------- * @var string $autocomplete Autocomplete attribute for the field. * @var boolean $autofocus Is autofocus enabled? * @var string $class Classes for the input. * @var string $description Description of the field. * @var boolean $disabled Is this field disabled? * @var string $group Group the field belongs to. <fields> section in form XML. * @var boolean $hidden Is this field hidden in the form? * @var string $hint Placeholder for the field. * @var string $id DOM id of the field. * @var string $label Label of the field. * @var string $labelclass Classes to apply to the label. * @var boolean $multiple Does this field support multiple values? * @var string $name Name of the input field. * @var string $onchange Onchange attribute for the field. * @var string $onclick Onclick attribute for the field. * @var string $pattern Pattern (Reg Ex) of value of the form field. * @var boolean $readonly Is this field read only? * @var boolean $repeat Allows extensions to duplicate elements. * @var boolean $required Is this field required? * @var integer $size Size attribute of the input. * @var boolean $spellcheck Spellcheck state for the form field. * @var string $validate Validation rules to apply. * @var string $value Value attribute of the field. * @var array $options Options available for this field. * @var array $privacynote The privacy note that needs to be displayed * @var array $translateLabel Should the label be translated? * @var array $translateDescription Should the description be translated? * @var array $translateHint Should the hint be translated? * @var array $privacyArticle The Article ID holding the Privancy Article * $var object $article The Article object */ // Get the label text from the XML element, defaulting to the element name. $text = $label ? (string) $label : (string) $name; $text = $translateLabel ? Text::_($text) : $text; // Set required to true as this field is not displayed at all if not required. $required = true; // Build the class for the label. $class = !empty($description) ? 'hasPopover' : ''; $class = $class . ' required'; $class = !empty($labelclass) ? $class . ' ' . $labelclass : $class; // Add the opening label tag and main attributes. $label = '<label id="' . $id . '-lbl" for="' . $id . '" class="' . $class . '"'; // If a description is specified, use it to build a tooltip. if (!empty($description)) { $label .= ' title="' . htmlspecialchars(trim($text, ':'), ENT_COMPAT, 'UTF-8') . '"'; $label .= ' data-content="' . htmlspecialchars( $translateDescription ? Text::_($description) : $description, ENT_COMPAT, 'UTF-8' ) . '"'; } if (Factory::getLanguage()->isRtl()) { $label .= ' data-placement="left"'; } $attribs = array(); $attribs['class'] = 'modal'; $attribs['role'] = 'button'; $attribs['data-target'] = '#jform_privacyconsent_privacy-modal'; $attribs['data-toggle'] = 'modal'; if ($article) { $link = JHtml::_('link', '#jform_privacyconsent_privacy-modal', $text, $attribs); } else { $link = $text; } // Add the label text and closing tag. $label .= '>' . $link . '<span class="star"> *</span></label>'; echo $label; // ********* Load the privacyconsent article ************* // Get an instance of the generic articles model $model = JModelLegacy::getInstance('Articles', 'ContentModel', array('ignore_request' => true)); // Set application parameters in model $app = JFactory::getApplication(); $appParams = $app->getParams(); $model->setState('params', $appParams); // Filter by language $model->setState('filter.language', $app->getLanguageFilter()); $items = $model->getItems(); foreach ($items as $item) { if($item->id == $article->id){ $new = JHtml::_('content.prepare', $item->introtext, '', ''); } } //modal box ' $footer='<a class="btn small" role="button" data-dismiss="modal" aria-hidden="true">'.JText::_('PLG_SYSTEM_PRIVACYCONSENT_READ').'</a>'; $modal_params = array(); $modal_params['height'] = "600px"; $modal_params['width'] = "300px"; $modal_params['title'] = $text; $modal_params['backdrop'] = "true"; $modal_params['footer'] = $footer; $modal_body = '<div style="padding: 1.5em;">'.$new.'</div>'; echo JHTML::_('bootstrap.renderModal', 'jform_privacyconsent_privacy-modal', $modal_params, $modal_body);