Skip to main content

Elumenotion Blog

Go Search

 
Elumenotion > Elumenotion Blog > Posts > Use a CustomAction to Fight Blog Spam
Use a CustomAction to Fight Blog Spam

I've been really busy lately, and a minor thorn in my side has been some especially obnoxious blog spammers. To keep my readers from seeing them spam and to deny them the ability to benefit from their evil ways, I turned on approvals in my content list. One of the spammers decided to fight back by sending the same content over every few minutes. One of the downsides of using approval is that it also makes getting rid of items in bulk more difficult, so this really, really irritated me and I had to write a little feature to restore my own sanity.

The feature consists of a custom action and an application page. You can download the VS2005 solution and web solution package here.

Here's how you use it.

If Has Got Spam

(sorry, I've been playing with LOLCODE again)

 

Activate the Feature

(If you don't know how to install a web solution package, the Visual Studio project will do it for you when you build)

Refresh the Comments List and Use the new Menu

Click OK to Delete the Evil Spam

Be careful to approve the comments that are not evil spam before you do this. I know I deleted a couple good comments accidentally.

How it Works

 

The custom action itself is simple. It targets only comment lists and shows up only if you have permission to approve items.

<CustomAction Id="DeletePendingAction"

RegistrationType="List"

RegistrationId="302"

GroupId="ActionsMenu"

Location="Microsoft.SharePoint.StandardMenu"

Sequence="100"

Title="Delete Pending Comments"

Description="Combat spam by deleting all the unapproved comments."

Rights="ApproveItems">

<UrlAction Url="{SiteUrl}/_layouts/ZapPending.aspx?list={ListId}"/>

</CustomAction>

When you use it, it sends you to the new application page. You can see it's full code in the download, but the main function is shown below.

protected void BtnDeletePendingComments_Click(object sender, EventArgs e)

{

SPList list = SPContext.Current.List;

for (int i = list.Items.Count - 1; i >= 0; i--)

{

SPListItem comment = list.Items[i];

if (comment.ModerationInformation.Status == SPModerationStatusType.Pending)

{

Console.WriteLine(comment["Title"]);

comment.Delete();

}

}

Response.Redirect(list.DefaultViewUrl);

}

Enjoy! I'll put this up on CodePlex next week.

--Doug Ware

Comments

There are no comments yet for this post.
Items on this list require content approval. Your submission will not appear in public views until approved by someone with proper rights. More information on content approval.

Title


Body *


Your Name *


Attachments
Follow me on twitter!
  Archive
  Archive (Calendar)
  Skinner Created Themes
  New Skinner Download
  New Skinner Tutorial

©  2009 Elumenotion, LLC  |   SharePoint Training, SharePoint Consulting and SharePoint Staffing
8075 Cavendish Place | Suwanee, Georgia 30024 | + 1 (888) 653-5021