Index: /changelog
===================================================================
--- /changelog	(revision 8122)
+++ /changelog	(revision 8123)
@@ -523,2 +523,3 @@
 #4.3.9
 - Bugfix: PHP 7.2. KompatibilitÃ€t (Rechnungsmodul)
+- Feature: DSGVO Layer fÃŒr das Registrierungsrecaptcha
Index: /mods/wpsg_mod_kundenverwaltung.class.php
===================================================================
--- /mods/wpsg_mod_kundenverwaltung.class.php	(revision 8122)
+++ /mods/wpsg_mod_kundenverwaltung.class.php	(revision 8123)
@@ -201,4 +201,5 @@
 			$this->shop->update_option('wpsg_mod_kundenveraltung_recaptcha_key', $_REQUEST['wpsg_mod_kundenveraltung_recaptcha_key'], false, false, WPSG_SANITIZE_TEXTFIELD);
 			$this->shop->update_option('wpsg_mod_kundenveraltung_recaptcha_secretkey', $_REQUEST['wpsg_mod_kundenveraltung_recaptcha_secretkey'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->update_option('wpsg_mod_kundenverwaltung_recaptcha_dsgvo_layer', $_REQUEST['wpsg_mod_kundenverwaltung_recaptcha_dsgvo_layer'], false, false, WPSG_SANITIZE_CHECKBOX);
 			
 			$this->shop->update_option('wpsg_mod_kundenverwaltung_mathcaptcha', $_REQUEST['wpsg_mod_kundenverwaltung_mathcaptcha'], false, false, WPSG_SANITIZE_CHECKBOX);
Index: /views/mods/mod_kundenverwaltung/register.phtml
===================================================================
--- /views/mods/mod_kundenverwaltung/register.phtml	(revision 8122)
+++ /views/mods/mod_kundenverwaltung/register.phtml	(revision 8123)
@@ -13,117 +13,113 @@
 		<?php if ($this->get_option('wpsg_form_validation') == '1') { ?>
 
-		if (typeof jQuery.validationEngine == "object")
-		{
-		
-			jQuery("#form-step2").validationEngine('attach', {promptPosition : "centerRight", scroll: false});
-				
-			jQuery('.wpsg_mod_kundenverwaltung_login').bind('click', function(){
-				jQuery("#form-step2").validationEngine('detach');		
+			if (typeof jQuery.validationEngine == "object")
+			{
+			
+				jQuery("#form-step2").validationEngine('attach', {promptPosition : "centerRight", scroll: false});
+					
+				jQuery('.wpsg_mod_kundenverwaltung_login').bind('click', function(){
+					jQuery("#form-step2").validationEngine('detach');		
+				});
+
+			}
+		
+		<?php } else if ($this->get_option('wpsg_form_validation') == '2') { ?>
+
+			jQuery.validator.addMethod("cRequired", jQuery.validator.methods.required, "<?php echo __('Dieses Feld ist ein Pflichtfeld.', 'wpsg'); ?>");
+			jQuery.validator.addClassRules('validate[required]', { cRequired: true } );
+			jQuery("#form-step2").validate( { 
+				ignore: '',
+				errorClass: 'wpsg_error',
+				onsubmit: false,
+				showErrors: function(errorMap, errorList) {
+
+					this.defaultShowErrors();	
+
+				}
+			} ); 
+
+			jQuery('.wpsg_registerButton').bind('click', function() { 
+
+				var bReturn = jQuery('#form-step2').validate().form();
+				if (jQuery('#form-step2 input.wpsg_error').length > 0) jQuery('#form-step2 input.wpsg_error')[0].focus();
+				return bReturn;
+				
+			} );
+		
+		<?php } ?>
+		
+
+		// Visualisierung der PasswortstÃ€rke 
+		jQuery('input[type=password]').keyup(function(){
+
+			var password = jQuery(this).val();
+			
+			if (password.length < 6) {
+				
+				jQuery('#wpsg_pwd_length').removeClass('valid').addClass('invalid');
+
+			}else{
+
+				jQuery('#wpsg_pwd_length').removeClass('invalid').addClass('valid');
+	
+			}
+
+			if (password.match(/([a-z])/)) {
+				
+				jQuery('#wpsg_pwd_letter').removeClass('invalid').addClass('valid');
+
+			}else{
+
+				jQuery('#wpsg_pwd_letter').removeClass('valid').addClass('invalid');
+	
+			}
+
+			if (password.match(/([A-Z])/)) {
+				
+				jQuery('#wpsg_pwd_capital').removeClass('invalid').addClass('valid');
+
+			}else{
+
+				jQuery('#wpsg_pwd_capital').removeClass('valid').addClass('invalid');
+	
+			}
+			
+			if (password.match(/([0-9])/)) {
+				
+				jQuery('#wpsg_pwd_number').removeClass('invalid').addClass('valid');
+
+			}else{
+
+				jQuery('#wpsg_pwd_number').removeClass('valid').addClass('invalid');
+	
+			}
+
+			if (password.match(/([~,!,%,@,&,#,Â°,^,$,?,_,*,Â§])/)) {
+				
+				jQuery('#wpsg_pwd_speziell').removeClass('invalid').addClass('valid');
+
+			}else{
+
+				jQuery('#wpsg_pwd_speziell').removeClass('valid').addClass('invalid');
+	
+			}
+
+			jQuery('#wpsg_pwd_info').show(); 
+
+			jQuery(this).blur(function(){
+
+				jQuery('#wpsg_pwd_info').hide(); 
+				
 			});
-
-		}
-		
-		<?php } else if ($this->get_option('wpsg_form_validation') == '2') { ?>
-
-		jQuery.validator.addMethod("cRequired", jQuery.validator.methods.required, "<?php echo __('Dieses Feld ist ein Pflichtfeld.', 'wpsg'); ?>");
-		jQuery.validator.addClassRules('validate[required]', { cRequired: true } );
-		jQuery("#form-step2").validate( { 
-			ignore: '',
-			errorClass: 'wpsg_error',
-			onsubmit: false,
-			showErrors: function(errorMap, errorList) {
-
-				this.defaultShowErrors();	
-
-			}
-		} ); 
-
-		jQuery('.wpsg_registerButton').bind('click', function() { 
-
-			var bReturn = jQuery('#form-step2').validate().form();
-			if (jQuery('#form-step2 input.wpsg_error').length > 0) jQuery('#form-step2 input.wpsg_error')[0].focus();
-			return bReturn;
-			  
-		} );
-		
-		<?php } ?>
-		
-
-// Visualisierung der PasswortstÃ€rke 
-
-		jQuery('input[type=password]').keyup(function(){
-
-			var password = jQuery(this).val();
-			
-			if (password.length < 6) {
-				
-				jQuery('#wpsg_pwd_length').removeClass('valid').addClass('invalid');
-
-			}else{
-
-				jQuery('#wpsg_pwd_length').removeClass('invalid').addClass('valid');
-	
-			}
-
-			if (password.match(/([a-z])/)) {
-				
-				jQuery('#wpsg_pwd_letter').removeClass('invalid').addClass('valid');
-
-			}else{
-
-				jQuery('#wpsg_pwd_letter').removeClass('valid').addClass('invalid');
-	
-			}
-
-			if (password.match(/([A-Z])/)) {
-				
-				jQuery('#wpsg_pwd_capital').removeClass('invalid').addClass('valid');
-
-			}else{
-
-				jQuery('#wpsg_pwd_capital').removeClass('valid').addClass('invalid');
-	
-			}
-			
-			if (password.match(/([0-9])/)) {
-				
-				jQuery('#wpsg_pwd_number').removeClass('invalid').addClass('valid');
-
-			}else{
-
-				jQuery('#wpsg_pwd_number').removeClass('valid').addClass('invalid');
-	
-			}
-
-			if (password.match(/([~,!,%,@,&,#,Â°,^,$,?,_,*,Â§])/)) {
-				
-				jQuery('#wpsg_pwd_speziell').removeClass('invalid').addClass('valid');
-
-			}else{
-
-				jQuery('#wpsg_pwd_speziell').removeClass('valid').addClass('invalid');
-	
-			}
-			
-
-			jQuery('#wpsg_pwd_info').show(); 
-
-
-			jQuery(this).blur(function(){
-
-				jQuery('#wpsg_pwd_info').hide(); 
-				
-			});
 			
 		});
-
-		
-// Validierung Spam	
-	<?php
-	if (isset($_GET["wpsg_spam_email"]) && $_GET["wpsg_spam_email"] != "") {
-	     		echo "<p>Sie haben ein Feld ausgefÃŒllt, das frei bleiben muss.</p>";
-	     		exit;
-	  		}
-	?>
+		
+		// Validierung Spam	
+		<?php
+			if (isset($_GET["wpsg_spam_email"]) && $_GET["wpsg_spam_email"] != "") {
+				echo "<p>Sie haben ein Feld ausgefÃŒllt, das frei bleiben muss.</p>";
+				exit;
+			}
+		?>
 
 	});	
@@ -145,7 +141,16 @@
 <div class="wpsg wpsg_checkout wpsg_register">
 	
-	<?php echo $this->writeFrontendMessage(); ?>
+	<style> 
+        .placeholder { display: none !important; } 
+        .m1_dsgvo_layer { position:relative; width:100%; height:100px; margin-bottom: 30px; }
+        .m1_dsgvo_layer > .placeholder_text { height:100px; font-size: small; position:relative; left:0; top:0; z-index:2; background-color:rgba(0, 0, 0, 0.75); display:flex; justify-content:center; align-items:center; color:#FFFFFF; flex-direction:column; padding:1rem; text-align:center; } 
+        .m1_dsgvo_layer > .placeholder_text > button { color: rgba(0, 0, 0, 0.75); margin-top: 1rem;}
+    </style>
 	
 	<form id="form-step2" method="post" action="<?php echo $this->callMod('wpsg_mod_kundenverwaltung', 'getRegisterURL'); ?>">
+
+		<?php echo $this->writeFrontendMessage(); ?>    
+		
+		<h2><?php echo __('Registrierung', 'sto'); ?></h2>
 	
 		<?php if ($this->view['pflicht']['firma'] != '2') { ?>
@@ -286,11 +291,11 @@
 			
 		<?php } ?>
-	
+
 		<?php if ($this->view['pflicht']['plz'] != '2') { ?>
 		<div class="wpsg_checkoutblock">
 			<label for="plz" class="wpsg_register"><?php echo __("Postleitzahl", "wpsg"); ?>
-			<?php if ($this->view['pflicht']['plz'] != '1') { ?><span class="wpsg_required">*</span><?php } ?>:
-			</label>
-			<input class="wpsg_input_text <?php echo (($this->view['pflicht']['plz'] != '1')?'validate[required]':''); ?> wpsg_register <?php echo ((in_array("plz", (array)$this->view['error']))?'wpsg_error':''); ?>" type="text" id="plz" name="wpsg[register][plz]" value="<?php echo htmlspecialchars(wpsg_getStr($this->view['data']['plz'])); ?>" />
+				<?php if ($this->view['pflicht']['plz'] != '1') { ?><span class="wpsg_required">*</span><?php } ?>:
+			</label>
+			<input class="<?php echo (($this->view['pflicht']['plz'] != '1')?'validate[required]':''); ?> wpsg_register <?php echo ((in_array("plz", (array)$this->view['error']))?'wpsg_error':''); ?>" type="text" id="plz" name="wpsg[register][plz]" value="<?php echo htmlspecialchars(wpsg_getStr($this->view['data']['plz'])); ?>" />
 		</div>
 		<?php } ?>
@@ -299,5 +304,5 @@
 		<div class="wpsg_checkoutblock">
 			<label for="ort" class="wpsg_register"><?php echo __("Ort", "wpsg"); ?>
-			<?php if ($this->view['pflicht']['ort'] != '1') { ?><span class="wpsg_required">*</span><?php } ?>:
+				<?php if ($this->view['pflicht']['ort'] != '1') { ?><span class="wpsg_required">*</span><?php } ?>:
 			</label>
 			<input class="<?php echo (($this->view['pflicht']['ort'] != '1')?'validate[required]':''); ?> wpsg_register <?php echo ((in_array("ort", (array)$this->view['error']))?'wpsg_error':''); ?>" type="text" id="ort" name="wpsg[register][ort]" value="<?php echo htmlspecialchars(wpsg_getStr($this->view['data']['ort'])); ?>" />
@@ -308,5 +313,5 @@
 		<div class="wpsg_checkoutblock">
 			<label for="wpsg_land" class="wpsg_register"><?php echo __("Land", "wpsg"); ?>
-			<?php if ($this->view['pflicht']['land'] != '1') { ?><span class="wpsg_required">*</span><?php } ?>:
+				<?php if ($this->view['pflicht']['land'] != '1') { ?><span class="wpsg_required">*</span><?php } ?>:
 			</label>					
 			<select name="wpsg[register][land]" class="<?php echo (($this->view['pflicht']['land'] != '1')?'validate[required]':''); ?> wpsg_register <?php echo ((in_array("land", (array)$this->view['error']))?'wpsg_error':''); ?>" id="wpsg_land">
@@ -322,5 +327,5 @@
 		<div class="wpsg_checkoutblock">
 			<label for="wpsg_ustidnr" class="wpsg_register"><?php echo __("UStIdNr.", "wpsg"); ?>
-			<?php if ($this->view['pflicht']['ustidnr'] != '1') { ?><span class="wpsg_required">*</span><?php } ?>:
+				<?php if ($this->view['pflicht']['ustidnr'] != '1') { ?><span class="wpsg_required">*</span><?php } ?>:
 			</label>
 			<input class="<?php echo (($this->view['pflicht']['ustidnr'] != '1')?'validate[required]':''); ?> wpsg_register <?php echo ((in_array("ustidnr", (array)$this->view['error']))?'wpsg_error':''); ?>" type="text" id="wpsg_ustidnr" name="wpsg[register][ustidnr]" value="<?php echo htmlspecialchars(wpsg_getStr($this->view['data']['ustidnr'])); ?>" />
@@ -355,52 +360,66 @@
 		<div class="wpsg_clear"></div>
 
-        <?php if ($this->get_option('wpsg_mod_kundenverwaltung_recaptcha_register') === '1') { ?>
-            <div class="wpsg_checkoutblock">
-                <label>
-                    <?php echo __('SPAM Schutz Abfrage'); ?> <span class="wpsg_required">*</span>:
-                    <div class="g-recaptcha" data-sitekey="<?php echo $this->get_option('wpsg_mod_kundenveraltung_recaptcha_key'); ?>"></div>
-                </label>
-            </div>
-            <div class="wpsg_clear"></div>
-        <?php } ?>
-        
-        <?php if ($this->get_option('wpsg_mod_kundenverwaltung_mathcaptcha') === '1') {  
-            
-            $number1 = rand(0, 9);
-            $number2 = rand(0, 10);
-            $arOperator = ['+', '-', '*']; $operator = $arOperator[array_rand($arOperator)];
-            
-            $time = time(); 
-                            
-            switch ($operator) {
-                
-                case '+': $captcha_result = $number1 + $number2; break;
-                case '-': $captcha_result = $number1 - $number2; break;
-                case '*': $captcha_result = $number1 * $number2; break;
-                
-                default: throw new \Exception();
-                
-            }
-            
-            \set_transient('wpsg_mod_kundenverwaltung_mathcaptcha_result', $captcha_result);
-            
-            ?>
-         
-            <div class="wpsg_checkoutblock">
-                <label for="wpsg_mod_kundenverwaltung_mathcaptcha" class="wpsg_register"><?php echo wpsg_translate(
-                    __("Ergebnis aus #1# #2# #3#", "wpsg"),
-                        $number1, $operator, $number2
-	            ); ?>:
-                    <span class="wpsg_required">*</span>
-                </label>
-                <input 
-                        class="validate[required] wpsg_register <?php echo ((in_array("wpsg_mod_kundenverwaltung_mathcaptcha", (array)$this->view['error']))?'wpsg_error':''); ?>" 
-                        type="text" id="wpsg_mod_kundenverwaltung_mathcaptcha" name="wpsg_mod_kundenverwaltung_mathcaptcha"
-                        placeholder="SPAM Schutz"
-                        value="" />
-            </div>
-            
-        <?php } ?>
-        
+		<?php if ($this->get_option('wpsg_mod_kundenverwaltung_recaptcha_register') === '1') { ?>
+			<div class="wpsg_checkoutblock">
+				<label class="recaptcha_v2_checkout ">
+
+					<?php echo __('SPAM Schutz Abfrage'); ?> <span class="wpsg_required">*</span>:
+
+					<?php if ($this->get_option('wpsg_mod_kundenverwaltung_recaptcha_dsgvo_layer') != '1') { ?>
+						<div class="g-recaptcha" data-sitekey="<?php echo $this->get_option('wpsg_mod_kundenveraltung_recaptcha_key'); ?>"></div> 
+					<?php } else { ?>
+						<div class="wpsg_recaptcha placeholder"> <!-- Platzhalter fÃŒr das Google ReCAPTCHA --> </div>
+						<div class="m1_dsgvo_layer ">
+							<div class="placeholder_text">
+								<strong>Datenschutz ist uns wichtig!</strong>
+								Daher wird das Google ReCAPTCHA erst geladen, wenn sie der Verwendung des Drittanbieters "Google LLC" zustimmen durch den mÃ¶glicherweise Cookies gesetzt werden.<br />
+								<button class="layer_link wpsg_required">Ich bin damit einverstanden.</button>
+							</div>
+						</div>
+					<?php } ?>
+
+				</label>
+			</div>
+			<div class="wpsg_clear"></div>
+		<?php } ?>
+		
+		<?php if ($this->get_option('wpsg_mod_kundenverwaltung_mathcaptcha') === '1') {  
+			
+			$number1 = rand(0, 9);
+			$number2 = rand(0, 10);
+			$arOperator = ['+', '-', '*']; $operator = $arOperator[array_rand($arOperator)];
+			
+			$time = time(); 
+							
+			switch ($operator) {
+				
+				case '+': $captcha_result = $number1 + $number2; break;
+				case '-': $captcha_result = $number1 - $number2; break;
+				case '*': $captcha_result = $number1 * $number2; break;
+				
+				default: throw new \Exception();
+				
+			}
+			
+			\set_transient('wpsg_mod_kundenverwaltung_mathcaptcha_result', $captcha_result);
+			
+			?>
+		
+			<div class="wpsg_checkoutblock">
+				<label for="wpsg_mod_kundenverwaltung_mathcaptcha" class="wpsg_register"><?php echo wpsg_translate(
+					__("Ergebnis aus #1# #2# #3#", "wpsg"),
+						$number1, $operator, $number2
+				); ?>:
+					<span class="wpsg_required">*</span>
+				</label>
+				<input 
+						class="validate[required] wpsg_register <?php echo ((in_array("wpsg_mod_kundenverwaltung_mathcaptcha", (array)$this->view['error']))?'wpsg_error':''); ?>" 
+						type="text" id="wpsg_mod_kundenverwaltung_mathcaptcha" name="wpsg_mod_kundenverwaltung_mathcaptcha"
+						placeholder="SPAM Schutz"
+						value="" />
+			</div>
+			
+		<?php } ?>
+		
 		<div class="wpsg_mandatoryfield_hint">
 			<?php echo wpsg_translate(__('Mit #1# gekennzeichnete Felder sind Pflichtfelder.', 'wpsg'), '<span class="wpsg_required">*</span>'); ?>
@@ -409,9 +428,9 @@
 		<?php /* versteckte Sicherheitsabfrage als Bot-Schutz START*/ ?>
 			<span style="display:none">
-   				<label for="wpsg_spam_email">Das Feld muss frei bleiben:</label>
-   				<input type="text" name="wpsg_spam_email" id="wpsg_spam_email" title=" dieses Feld muss frei bleiben " />
+				<label for="wpsg_spam_email">Das Feld muss frei bleiben:</label>
+				<input type="text" name="wpsg_spam_email" id="wpsg_spam_email" title=" dieses Feld muss frei bleiben " />
 			</span> 
 		<?php /* versteckte Sicherheitsabfrage als Bot-Schutz ENDE*/ ?>
-		        
+				
 		<br />		
 		
@@ -422,3 +441,30 @@
 		<div class="wpsg_clear"></div>
 	</form>
+
+	<!--  <div class="g-recaptcha" data-sitekey="<?php echo $this->get_option('wpsg_mod_kundenveraltung_recaptcha_key'); ?>"></div>  -->
+
+    <script>
+		// DSGVO Layer Script
+        document.querySelector('.layer_link').addEventListener('click', function() {
+
+			const recaptcha = document.createElement("div");
+			const a = document.createAttribute("data-sitekey");
+			const b = document.createAttribute("style");
+			a.value = "<?php echo $this->get_option('wpsg_mod_kundenveraltung_recaptcha_key'); ?>";
+			b.value = "float: left !important;";
+			recaptcha.classList.add("g-recaptcha");
+			recaptcha.setAttributeNode(a);
+			recaptcha.setAttributeNode(b);
+
+			document.querySelector('.wpsg_recaptcha').appendChild(recaptcha);
+            (function(){var w=window,C='___grecaptcha_cfg',cfg=w[C]=w[C]||{},N='grecaptcha';var gr=w[N]=w[N]||{};gr.ready=gr.ready||function(f){(cfg['fns']=cfg['fns']||[]).push(f);};w['__recaptcha_api']='https://www.google.com/recaptcha/api2/';(cfg['render']=cfg['render']||[]).push('onload');w['__google_recaptcha_client']=true;var d=document,po=d.createElement('script');po.type='text/javascript';po.async=true;po.src='https://www.gstatic.com/recaptcha/releases/vP4jQKq0YJFzU6e21-BGy3GP/recaptcha__de.js';po.crossOrigin='anonymous';po.integrity='sha384-xxpEMChSTl1oMpSrXrILE1mQOlVQNv6OGibce0r0HX1HeHF72bSDheOIehafBC9Y';var e=d.querySelector('script[nonce]'),n=e&&(e['nonce']||e.getAttribute('nonce'));if(n){po.setAttribute('nonce',n);}var s=d.getElementsByTagName('script')[0];s.parentNode.insertBefore(po, s);})();	
+
+			document.querySelector('.m1_dsgvo_layer').classList.add('placeholder');
+            document.querySelector('.wpsg_recaptcha').classList.remove('placeholder');
+
+			event.preventDefault();
+
+        });
+    </script>
+
 </div>
Index: /views/mods/mod_kundenverwaltung/settings_edit.phtml
===================================================================
--- /views/mods/mod_kundenverwaltung/settings_edit.phtml	(revision 8122)
+++ /views/mods/mod_kundenverwaltung/settings_edit.phtml	(revision 8123)
@@ -76,4 +76,5 @@
     <?php echo wpsg_drawForm_Input('wpsg_mod_kundenveraltung_recaptcha_key', __('WebsiteschlÃŒssel', 'wpsg'), $this->get_option('wpsg_mod_kundenveraltung_recaptcha_key')); ?>
     <?php echo wpsg_drawForm_Input('wpsg_mod_kundenveraltung_recaptcha_secretkey', __('Geheimer SchlÃŒssel', 'wpsg'), $this->get_option('wpsg_mod_kundenveraltung_recaptcha_secretkey')); ?>
+	<?php echo wpsg_drawForm_Checkbox('wpsg_mod_kundenverwaltung_recaptcha_dsgvo_layer', __('DSGVO Layer fÃŒr das Recaptcha', 'wpsg'), $this->get_option('wpsg_mod_kundenverwaltung_recaptcha_dsgvo_layer')); ?>
     
 </div>
