mirror of
https://github.com/silverstripe/silverstripe-cms
synced 2024-10-22 08:05:56 +02:00
elofgren: Make it so that if red (X) link next to an Email on the Bounced Tab of a Mailing List is clicked, the Email_BounceRecord will be deleted and the Member will be removed from the Mailing List group. @TODO Reload whole right frame so that Recipients and Bounced tabs will be updated after bounced member is removed.
(merged from branches/gsoc) git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/cms/trunk@42037 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
parent
e28baf03db
commit
bba347331f
@ -19,8 +19,36 @@ class BouncedList extends TableListField {
|
|||||||
|
|
||||||
function sourceItems() {
|
function sourceItems() {
|
||||||
$id = $this->nlType->GroupID;
|
$id = $this->nlType->GroupID;
|
||||||
// @TODO Try to find way to show Firstname and Surname under a 'Username' heading
|
// @TODO Try to find way to show Firstname and Surname under a 'Username' heading";
|
||||||
return DataObject::get( 'Email_BounceRecord', "`GroupID`='$id'", null, "INNER JOIN `Group_Members` USING(`MemberID`)" );
|
// Get a list of all bounces for all subscribers to this mailing list
|
||||||
|
$bouncedSubscribers = DataObject::get( 'Email_BounceRecord', "`GroupID`='$id'", null, "INNER JOIN `Group_Members` USING(`MemberID`)" );
|
||||||
|
|
||||||
|
// @TODO Find faster/elegenter way to do this. Probably some sort of SQL JOIN would work instead
|
||||||
|
// If there are bounces logged for this Mailing List
|
||||||
|
if ($bouncedSubscribers) {
|
||||||
|
$bouncedSubscribersWithMemberID = new DataObjectSet();
|
||||||
|
// Convert bounce to array so we can easily iterate through them
|
||||||
|
$bouncedSubscribersArray = $bouncedSubscribers->toArray();
|
||||||
|
// Iterate through each bounce record and add 'GroupID' to it (this is clumsy)
|
||||||
|
foreach($bouncedSubscribersArray as $key => $bouncedSubscriberObject)
|
||||||
|
{
|
||||||
|
$bouncedSubscriberArray = $bouncedSubscriberObject->getAllFields();
|
||||||
|
// Add MemberID to DataObjectSet so the removebouncedmember link will work
|
||||||
|
$bouncedSubscriberArray['GroupID'] = $id;
|
||||||
|
$bouncedSubscribersWithMemberID->push(new ArrayData($bouncedSubscriberArray));
|
||||||
|
}
|
||||||
|
return $bouncedSubscribersWithMemberID;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the template to be rendered with
|
||||||
|
*/
|
||||||
|
function FieldHolder() {
|
||||||
|
return $this->renderWith('NewsletterAdmin_BouncedList');
|
||||||
}
|
}
|
||||||
|
|
||||||
function setController($controller) {
|
function setController($controller) {
|
||||||
@ -28,12 +56,7 @@ class BouncedList extends TableListField {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Not needed now that we are extending TableListField instead of FormField
|
// Not needed now that we are extending TableListField instead of FormField
|
||||||
// @TODO Remove NewsletterAdmin_BouncedList.ss after copying out any needed bits
|
|
||||||
/*
|
/*
|
||||||
function FieldHolder() {
|
|
||||||
return $this->renderWith( 'NewsletterAdmin_BouncedList' );
|
|
||||||
}
|
|
||||||
|
|
||||||
function Entries() {
|
function Entries() {
|
||||||
|
|
||||||
$id = $this->nlType->GroupID;
|
$id = $this->nlType->GroupID;
|
||||||
|
@ -291,7 +291,7 @@ class NewsletterAdmin extends LeftAndMain {
|
|||||||
$unsubscribedList = new UnsubscribedList("Unsubscribed", $mailType)
|
$unsubscribedList = new UnsubscribedList("Unsubscribed", $mailType)
|
||||||
),
|
),
|
||||||
new Tab("Bounced",
|
new Tab("Bounced",
|
||||||
new LiteralField('Instructions', '<p><b>Instructions:</b></p><ul><li>Uncheck the box and click the "Save" button to disable sending to an email address.</li><li>To delete an email address from your mailing list, click the red "X" icon.</li></ul>'),
|
new LiteralField('Instructions', '<p><b>Instructions:</b></p><ul><li>Uncheck the box and click the "Save" button to disable sending to an email address. <b>@TODO Make this functional</b></li><li>To remove a recipients\'s email address from your mailing list, click the red "X" icon.</li></ul>'),
|
||||||
$bouncedList = new BouncedList("Bounced", $mailType )
|
$bouncedList = new BouncedList("Bounced", $mailType )
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -323,6 +323,37 @@ class NewsletterAdmin extends LeftAndMain {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a bounced member from the mailing list
|
||||||
|
*
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
function removebouncedmember($urlParams) {
|
||||||
|
// First remove the Bounce entry
|
||||||
|
$memberID = Convert::raw2sql($urlParams['ID']);
|
||||||
|
if (is_numeric($memberID)) {
|
||||||
|
$bounceObject = DataObject::get_by_id('Email_BounceRecord', $memberID);
|
||||||
|
if($bounceObject) {
|
||||||
|
// Remove this bounce record
|
||||||
|
$bounceObject->delete();
|
||||||
|
|
||||||
|
$memberObject = DataObject::get_by_id('Member', $bounceObject->MemberID);
|
||||||
|
$groupID = Convert::raw2sql($_REQUEST['GroupID']);
|
||||||
|
if(is_numeric($groupID) && is_object($memberObject)) {
|
||||||
|
// Remove the member from the mailing list
|
||||||
|
$memberObject->Groups()->remove($groupID);
|
||||||
|
} else {
|
||||||
|
user_error("MemberTableField::delete: Bad parameters: Group=$groupID, Member=$memberID", E_USER_ERROR);
|
||||||
|
}
|
||||||
|
// @TODO Reload whole right frame so that Recipients and Bounced tabs will be updated after bounced member is removed.
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reloads the list of recipients via ajax
|
* Reloads the list of recipients via ajax
|
||||||
*/
|
*/
|
||||||
|
@ -1,24 +1,55 @@
|
|||||||
<% if Entries %>
|
<div id="$id" class="$Classes TableField">
|
||||||
<table class="CMSList BouncedList" summary="Emails that have bounced">
|
<% include TableListField_PageControls %>
|
||||||
<thead>
|
<table class="data BouncedList">
|
||||||
<tr>
|
<thead>
|
||||||
<th>User name</th>
|
<tr>
|
||||||
<th>Email address</th>
|
<% if Markable %><th width="16"> </th><% end_if %>
|
||||||
<th>Reason:</th>
|
<% control Headings %>
|
||||||
<th>Last bounce at</th>
|
<th class="$Name">$Title</th>
|
||||||
</tr>
|
<% end_control %>
|
||||||
</thead>
|
<% if Can(delete) %><th width="18"> </th><% end_if %>
|
||||||
<tbody>
|
</tr>
|
||||||
<% control Entries %>
|
</thead>
|
||||||
<tr>
|
|
||||||
<td>$Member.FirstName $Member.Surname</td>
|
<% if HasSummary %>
|
||||||
<td>$Member.Email</td>
|
<tfoot>
|
||||||
<td>$Record.BounceMessage</td>
|
<tr class="summary">
|
||||||
<td>$Record.Created.Long</td>
|
<% if Markable %><th width="16"> </th><% end_if %>
|
||||||
</tr>
|
<td><i>$SummaryTitle</i></td>
|
||||||
<% end_control %>
|
<% control SummaryFields %>
|
||||||
</tbody>
|
<td<% if Function %> class="$Function"<% end_if %>> </td>
|
||||||
</table>
|
<% end_control %>
|
||||||
<% else %>
|
<% if Can(delete) %><td width="18"> </td><% end_if %>
|
||||||
<p>No emails sent have bounced.</p>
|
</tr>
|
||||||
<% end_if %>
|
</tfoot>
|
||||||
|
<% end_if %>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
<% if Items %>
|
||||||
|
<% control Items %>
|
||||||
|
<tr id="record-$ID"<% if HighlightClasses %> class="$HighlightClasses"<% end_if %>>
|
||||||
|
<% if Markable %><td width="16">$MarkingCheckbox</td><% end_if %>
|
||||||
|
<% control Fields %>
|
||||||
|
<td>$Value</td>
|
||||||
|
<% end_control %>
|
||||||
|
<% if Can(delete) %>
|
||||||
|
<td width="16"><a class="deletelink" href="admin/newsletter/removebouncedmember/$ID/?GroupID=$GroupID"><img src="cms/images/delete.gif" alt="delete" /></a></td>
|
||||||
|
<% end_if %>
|
||||||
|
</tr>
|
||||||
|
<% end_control %>
|
||||||
|
<% else %>
|
||||||
|
<tr class="notfound">
|
||||||
|
<% if Markable %><th width="18"> </th><% end_if %>
|
||||||
|
<td colspan="$Headings.Count"><i>No bounce records found</i></td>
|
||||||
|
<% if Can(delete) %><td width="18"> </td><% end_if %>
|
||||||
|
</tr>
|
||||||
|
<% end_if %>
|
||||||
|
<% if Can(add) %>$AddRecordForm.AsTableRow<% end_if %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="utility">
|
||||||
|
<% if Can(export) %>
|
||||||
|
$ExportButton
|
||||||
|
<% end_if %>
|
||||||
|
</div>
|
||||||
|
</div>
|
Loading…
Reference in New Issue
Block a user