[TikiWiki-commits] [Git][tikiwiki/tiki][master] [ENH] Enhance newsletter subscription plugin with user feedback and email confirmation

Benoit Grégoire (@benoitg) via TikiWiki-cvs <[email protected]>
Newsgroups gmane.comp.cms.tiki.cvs
Message-ID <693840874d5c1_2ac62c5812643@gitlab-sidekiq-low-urgency-cpu-bound-v2-565846999f-jdmd4.mail>

Benoit Grégoire pushed to branch master at Tiki Wiki CMS Groupware / Tiki


Commits:
dea39513 by Joseph Ushindi at 2025-12-09T15:21:36+00:00
[ENH] Enhance newsletter subscription plugin with user feedback and email confirmation
---
* [ENH] Enhance newsletter subscription plugin with user feedback and email confirmation

See merge request tikiwiki/tiki!9134

- - - - -


2 changed files:

- lib/wiki-plugins/wikiplugin_subscribenewsletter.php
- templates/wiki-plugins/wikiplugin_subscribenewsletter.tpl


Changes:

=====================================
lib/wiki-plugins/wikiplugin_subscribenewsletter.php
=====================================
@@ -102,11 +102,28 @@ function wikiplugin_subscribenewsletter($data, $params)
         return;
     }
 
+    $alreadySubscribed = false;
+    $alreadySubscribedMessage = '';
     if ($user) {
         $alls = $nllib->get_all_subscribers($nlId, false);
         foreach ($alls as $all) {
             if (strtolower($all['db_email']) == strtolower($user)) {
-                return;
+                $alreadySubscribed = true;
+                $alreadySubscribedMessage = tra('You are already subscribed to this newsletter.');
+                break;
+            }
+        }
+    }
+
+    // Check for anonymous users by email
+    if (! $user && isset($_REQUEST['wpSubscribe'], $_REQUEST['wpNlId']) && $_REQUEST['wpNlId'] == $nlId) {
+        $subscribers = $nllib->get_all_subscribers($nlId, false);
+        $submittedEmail = strtolower($_REQUEST['wpEmail']);
+        foreach ($subscribers as $subscriber) {
+            if (strtolower($subscriber['db_email']) == $submittedEmail) {
+                $alreadySubscribed = true;
+                $alreadySubscribedMessage = tra('This email address is already subscribed to this newsletter.');
+                break;
             }
         }
     }
@@ -134,22 +151,40 @@ function wikiplugin_subscribenewsletter($data, $params)
         $useCaptcha = 1;
     }
     if (isset($_REQUEST['wpSubscribe']) && $_REQUEST['wpNlId'] == $nlId) {
-        $captchalib = TikiLib::lib('captcha');
-        if ($useCaptcha != 0 && ! $user && $prefs['feature_antibot'] == 'y' && ! $captchalib->validate()) {
-            $wpError = $captchalib->getErrors();
-        } elseif (! $user && empty($_REQUEST['wpEmail'])) {
-            $wpError = tra('Invalid Email');
-        } elseif (! $user && ! validate_email($_REQUEST['wpEmail'], $prefs['validateEmail'])) {
-            $wpError = tra('Invalid Email');
+        if ($alreadySubscribed) {
+            $wpError = $alreadySubscribedMessage;
             $subscribeEmail = $_REQUEST['wpEmail'];
-        } elseif (
-            ($user && $nllib->newsletter_subscribe($nlId, $user, 'y', 'n'))
-            || (! $user && $nllib->newsletter_subscribe($nlId, $_REQUEST['wpEmail'], 'n', $info['validateAddr']))
-        ) {
-            $wpSubscribe = 'y';
-            $smarty->assign('subscribeThanks', empty($thanks) ? $data : $thanks);
         } else {
-            $wpError = tra('Already subscribed');
+            $captchalib = TikiLib::lib('captcha');
+            if ($useCaptcha != 0 && ! $user && $prefs['feature_antibot'] == 'y' && ! $captchalib->validate()) {
+                $wpError = $captchalib->getErrors();
+            } elseif (! $user && empty($_REQUEST['wpEmail'])) {
+                $wpError = tra('Email address is missing');
+            } elseif (! $user && ! validate_email($_REQUEST['wpEmail'], $prefs['validateEmail'])) {
+                $wpError = tra('Invalid Email');
+                $subscribeEmail = $_REQUEST['wpEmail'];
+            } else {
+                if ($user) {
+                    $result = $nllib->newsletter_subscribe($nlId, $user, 'y', 'n');
+                } else {
+                    $result = $nllib->newsletter_subscribe($nlId, $_REQUEST['wpEmail'], 'n', $info['validateAddr']);
+                }
+                if ($result) {
+                    $wpSubscribe = 'y';
+                    $smarty->assign('subscribeThanks', empty($thanks) ? $data : $thanks);
+                    if ($info['validateAddr'] == 'y' && ! $user) {
+                        // For anonymous users with email validation required
+                        $smarty->assign('confirmationSent', true);
+                        $smarty->assign('confirmationMessage', tra('A confirmation email has been sent to your email address. Please check your inbox and click the confirmation link to activate your subscription.'));
+                    } else {
+                        // For immediate subscription or logged-in users
+                        $smarty->assign('subscriptionActive', true);
+                        $smarty->assign('confirmationMessage', tra('Your subscription has been activated. You will now receive newsletters.'));
+                    }
+                } else {
+                    $wpError = tra('Subscription failed. Please try again.');
+                }
+            }
         }
     }
     $smarty->assign_by_ref('wpSubscribe', $wpSubscribe);
@@ -159,6 +194,8 @@ function wikiplugin_subscribenewsletter($data, $params)
     $smarty->assign('inmodule', ! empty($inmodule) ? "moduleSubscribeNL" : "");
     $smarty->assign_by_ref('subscribeInfo', $info);
     $smarty->assign('useCaptcha', $useCaptcha);
+    $smarty->assign('alreadySubscribed', $alreadySubscribed);
+    $smarty->assign('alreadySubscribedMessage', $alreadySubscribedMessage);
     $res = $smarty->fetch('wiki-plugins/wikiplugin_subscribenewsletter.tpl');
     if ($params["wikisyntax"] == 1) {
         return $res;


=====================================
templates/wiki-plugins/wikiplugin_subscribenewsletter.tpl
=====================================
@@ -4,24 +4,30 @@
     {else}
         {$subscribeThanks|escape}
     {/if}
+    
+{elseif $alreadySubscribed}
+    {remarksbox type='warning'}
+        {$alreadySubscribedMessage|escape}
+    {/remarksbox}
+
 {else}
     <form name="wpSubscribeNL" method="post">
         <input type="hidden" name="wpNlId" value="{$subscribeInfo.nlId|escape}">
 
         {if !empty($wpError)}
             {remarksbox type='errors'}
-                    {$wpError|escape}
+                {$wpError|escape}
             {/remarksbox}
         {/if}
 
         <div class="d-flex flex-row flex-wrap align-items-center row">
             <div class="input-group">
-                <input type="email" class="form-control fa" id="wpEmail" name="wpEmail" size="50" value="{$subscribeEmail|escape}" placeholder="&#xf0e0;">
-                    {if empty($subcribeMessage)}
-                        <input type="submit" class="btn btn-primary" name="wpSubscribe" value="{tr}Subscribe to the newsletter:{/tr} {$subscribeInfo.name}">
-                    {else}
-                        <input type="submit" class="btn btn-primary" name="wpSubscribe" value="{$subcribeMessage|escape}">
-                    {/if}
+                <input type="email" class="form-control fa" id="wpEmail" name="wpEmail" size="80" value="{$subscribeEmail|escape}" placeholder="{tr}Enter your email address{/tr}" required>
+                {if empty($subcribeMessage)}
+                    <input type="submit" class="btn btn-primary" name="wpSubscribe" value="{tr}Subscribe to the newsletter:{/tr} {$subscribeInfo.name}">
+                {else}
+                    <input type="submit" class="btn btn-primary" name="wpSubscribe" value="{$subcribeMessage|escape}">
+                {/if}
             </div>
         </div>
 



View it on GitLab: https://gitlab.com/tikiwiki/tiki/-/commit/dea3951303956c8f83242d18d396d68a82465c53

-- 
View it on GitLab: https://gitlab.com/tikiwiki/tiki/-/commit/dea3951303956c8f83242d18d396d68a82465c53
You're receiving this email because of your account on gitlab.com.

_______________________________________________
TikiWiki-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.