Radiant tip van de dag

14/04/2010

Comment-spammers kiezen vaak de artikels waar al het meeste comments op staan om hun vuiligheid achter te laten. Vaak zijn dat steeds dezelfde, wat oudere artikels. Heel wat CMS systemen hebben dan ook de mogelijkheid om de commentaar mogelijkheid op oudere artikels automatisch uit te schakelen. Radiant CMS heeft dat helaas niet.

Omdat ik het beu was om steeds spamcomments voor dezelfde artikels in mijn moderation queue te vinden, heb ik een kleine Raketask gemaakt. Het zoekt alle artikels ouder dan 6 maand, waar commentaar toegestaan is, en schakelt de commentaar mogelijkheid op dat artikel uit.

Voeg deze code toe aan de Rakefile in je Radiant hoofdfolder:

namespace :onderhoud do
	desc "Commentaar af op oude artikels"
	task :disable_comments => :environment do
		posts = Page.find(:all, :conditions => ["published_at < ? 
				and enable_comments = ?", 6.months.ago, true])
		posts.each do |post|
			post.enable_comments = false 
			post.save!
			puts "Disabled comments on #{post.slug}"
		end
	end
end

Voeg dan een cronjob toe die volgende regel elke dag uitvoert:

RAILS_ENV=production rake -s onderhoud:disable_comments

Et voila, een pak minder te modereren spam.


Er zijn 2 reacties op dit artikel:

  1. Mike says:

    14/04/2010

    Zou dit alles niet veel korter kunnen in een SQL ? ;-)

  2. Frank says:

    14/04/2010

    Mike: Het zou niet veel schelen:

    mysql -u user -p database -h dbserver (eerst .my.cnf zetten!!!) -e "select slug from pages where ..."

    Gevolgd door

    mysql -u user -p database -h dbserver -e "update pages set ... where ..."

    Ik wed dat dat niet veel korter is. Daarnaast is het DB afhankelijk (het mijne werkt met elke ActiveRecord compatibele DB), en heb ik error logging als het foutgaat.