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

"Joseph Ushindi \(@iRosh243\) via TikiWiki-cvs" <[email protected]>
Newsgroups gmane.comp.cms.tiki.cvs
Message-ID <694bbdb9ad1c3_2a17fd7c288eb@gitlab-sidekiq-low-urgency-cpu-bound-v2-587dc6b794-cg568.mail>

Joseph Ushindi pushed to branch 28.x at Tiki Wiki CMS Groupware / Tiki


Commits:
654caa55 by Joseph Ushindi at 2025-12-24T10:10:56+00:00
[BP][ENH] Enhance newsletter subscription plugin with user feedback and email confirmation
---
* [BP][ENH] Enhance newsletter subscription plugin with user feedback and email confirmation
---
* [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

See merge request tikiwiki/tiki!9224

See merge request tikiwiki/tiki!9258

- - - - -


2 changed files:

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


Changes:

=====================================
lib/wiki-plugins/wikiplugin_subscribenewsletter.php
=====================================
@@ -106,11 +106,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;
             }
         }
     }
@@ -138,22 +155,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);
@@ -163,6 +198,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 (isset($params["wikisyntax"]) && $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/654caa55c1b43cd89c87c03cd2fdd2e7c1bc51d8

-- 
View it on GitLab: https://gitlab.com/tikiwiki/tiki/-/commit/654caa55c1b43cd89c87c03cd2fdd2e7c1bc51d8
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.