Skip to content

Commit

Permalink
Remove requirement to enter email address to unsubscribe
Browse files Browse the repository at this point in the history
  • Loading branch information
mattwire committed Sep 6, 2021
1 parent 2887809 commit ec436db
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 55 deletions.
2 changes: 1 addition & 1 deletion CRM/Admin/Form/Preferences/Mailing.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
*/

/**
* This class generates form components for the maling component preferences.
* This class generates form components for the mailing component preferences.
*/
class CRM_Admin_Form_Preferences_Mailing extends CRM_Admin_Form_Preferences {

Expand Down
75 changes: 30 additions & 45 deletions CRM/Mailing/Form/Unsubscribe.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,32 @@ class CRM_Mailing_Form_Unsubscribe extends CRM_Core_Form {
*/
public $submitOnce = TRUE;

public function preProcess() {
/**
* @var int
*/
private $_job_id;

/**
* @var int
*/
private $_queue_id;

$this->_type = 'unsubscribe';
/**
* @var string
*/
private $_hash;

/**
* @var string
*/
private $_email;

public function preProcess() {
$this->_job_id = $job_id = CRM_Utils_Request::retrieve('jid', 'Integer', $this);
$this->_queue_id = $queue_id = CRM_Utils_Request::retrieve('qid', 'Integer', $this);
$this->_hash = $hash = CRM_Utils_Request::retrieve('h', 'String', $this);

if (!$job_id ||
!$queue_id ||
!$hash
) {
if (!$job_id || !$queue_id || !$hash) {
throw new CRM_Core_Exception(ts('Missing Parameters'));
}

Expand All @@ -55,28 +69,22 @@ public function preProcess() {
$groups = CRM_Mailing_Event_BAO_Unsubscribe::unsub_from_mailing($job_id, $queue_id, $hash, TRUE);
$this->assign('groups', $groups);
$groupExist = NULL;
foreach ($groups as $key => $value) {
foreach ($groups as $value) {
if ($value) {
$groupExist = TRUE;
}
}
if (!$groupExist) {
$statusMsg = ts('%1 has been unsubscribed.',
[1 => $email]
);
$statusMsg = ts('%1 has been unsubscribed.', [1 => $email]);
CRM_Core_Session::setStatus($statusMsg, '', 'error');
}
$this->assign('groupExist', $groupExist);

}

public function buildQuickForm() {
CRM_Utils_System::addHTMLHead('<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">');
$this->setTitle(ts('Unsubscribe Confirmation'));

$this->add('text', 'email_confirm', ts('Verify email address to unsubscribe:'));
$this->addRule('email_confirm', ts('Email address is required to unsubscribe.'), 'required');

$buttons = [
[
'type' => 'next',
Expand All @@ -93,42 +101,19 @@ public function buildQuickForm() {
}

public function postProcess() {
$values = $this->exportValues();

// check if EmailTyped matches Email address
$result = CRM_Utils_String::compareStr($this->_email, $values['email_confirm'], TRUE);
$job_id = $this->_job_id;
$queue_id = $this->_queue_id;
$hash = $this->_hash;

$confirmURL = CRM_Utils_System::url("civicrm/mailing/{$this->_type}", "reset=1&jid={$job_id}&qid={$queue_id}&h={$hash}&confirm=1");
$confirmURL = CRM_Utils_System::url("civicrm/mailing/unsubscribe", "reset=1&jid={$this->_job_id}&qid={$this->_queue_id}&h={$this->_hash}&confirm=1");
$this->assign('confirmURL', $confirmURL);
$session = CRM_Core_Session::singleton();
$session->pushUserContext($confirmURL);
CRM_Core_Session::singleton()->pushUserContext($confirmURL);

if ($result == TRUE) {
// Email address verified
$groups = CRM_Mailing_Event_BAO_Unsubscribe::unsub_from_mailing($job_id, $queue_id, $hash);
// Email address verified
$groups = CRM_Mailing_Event_BAO_Unsubscribe::unsub_from_mailing($this->_job_id, $this->_queue_id, $this->_hash);

if (count($groups)) {
CRM_Mailing_Event_BAO_Unsubscribe::send_unsub_response($queue_id, $groups, FALSE, $job_id);
}

$statusMsg = ts('%1 is unsubscribed.',
[1 => $values['email_confirm']]
);

CRM_Core_Session::setStatus($statusMsg, '', 'success');
if (count($groups)) {
CRM_Mailing_Event_BAO_Unsubscribe::send_unsub_response($this->_queue_id, $groups, FALSE, $this->_job_id);
}
elseif ($result == FALSE) {
// Email address not verified
$statusMsg = ts('%1 is not associated with this unsubscribe request.',
[1 => $values['email_confirm']]
);

CRM_Core_Session::setStatus($statusMsg, '', 'error');

}
$statusMsg = ts('%1 is unsubscribed.', [1 => CRM_Utils_String::maskEmail($this->_email)]);
CRM_Core_Session::setStatus($statusMsg, '', 'success');
}

}
13 changes: 4 additions & 9 deletions templates/CRM/Mailing/Form/Unsubscribe.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,10 @@
<div class="crm-block crm-form-block crm-miscellaneous-form-block">
<p>{ts}You are requesting to unsubscribe this email address:{/ts}</p>
<h3>{$email_masked}</h3>
<p>{ts}If this is not your email address, there is no need to do anything. You have <i><b>not</b></i> been added to any mailing lists. If this is your email address and you <i><b>wish to unsubscribe</b></i> please enter your email address below for verification purposes:{/ts}</p>
<table class="form-layout">
<tbody>
<tr>
<td class="label">{$form.email_confirm.label}</td>
<td class="content">{$form.email_confirm.html}</td>
</tr>
</tbody>
</table>
<p>
{ts}If this is not your email address, there is no need to do anything. You have <strong>not</strong> been added to any mailing lists.{/ts}
{ts}If this is your email address and you <strong>wish to unsubscribe</strong> please click the <strong>Unsubscribe</strong> button to confirm.{/ts}
</p>
<div class="crm-submit-buttons">
{include file="CRM/common/formButtons.tpl" location="bottom"}
</div>
Expand Down

0 comments on commit ec436db

Please sign in to comment.