Joomla! Template Override:

Datenschutzerklärung Bug


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">&#160;*</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);


Peer Luks




Fehler melden

Bitte beachte unsere Datenschutzerklärung

Alle mit * markierten Felder werden benötigt um eine E-Mail zu senden.