[TikiWiki-commits] [Git][tikiwiki/tiki][27.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 | <694bc473783a7_2a1e9df1c32523@gitlab-sidekiq-low-urgency-cpu-bound-v2-587dc6b794-z7lsm.mail> |
Joseph Ushindi pushed to branch 27.x at Tiki Wiki CMS Groupware / Tiki
Commits:
a42a2315 by Joseph Ushindi at 2025-12-24T10:39:51+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
---
* [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
See merge request tikiwiki/tiki!9266
- - - - -
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="">
- {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/a42a2315ca375837a33587c0f7a9bf724df600fe
--
View it on GitLab: https://gitlab.com/tikiwiki/tiki/-/commit/a42a2315ca375837a33587c0f7a9bf724df600fe
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