hi
on http://akismet.com/development/ I have found an Akismet php5 class.
but the akismet plugin for zenphoto uses an Akismet php4 class.
so I have decided to create a new akismet plugin for zenphoto, using this php5 class.
after some tests, it seems to work well.
can you explain , how can I give it to the community ?
Vincent: As said on the other thread, it would be great if you could take it over. Info on how we suggest to do that here: http://www.zenphoto.org/news/general-contributor-guidelines#themes-and-plugins
hi
akismet allows to give feedback on messages and gives alert on no detected SPAM.
with another user of zenphoto, we wish to implement those functions on akismet plugin.
to do that, I need some improvement on admin-comment.php : if the admin check the message as a spam, use a new method of the plugin (feedbackMessage for exemple).
I will create a ticket for that, but first, I have a question : how the bulk action works in that case ?
Could you explain how it works ? Is there a "while loop" on each element ?
mhh,
unfortunatly, I dont' realy inderstand how the filters work.
If you could give me some explanation (or link to to some documentation)
The general documentation is here: http://www.zenphoto.org/news/zenphoto-plugin-architecture#filters
The list of filters there represents 1.4.1 so there will be an update for the 1.4.2 additions. (The comment filters are there on 1.4.1)
So the quick tutorial is:
add a line in your spam filter towards the front that reads someting like:
zp_register_filter('comment_disapprove', 'plugin_handler_function');
Then declare a function:
function plugin_handler_function($commentObj) { //do your code here return $commentObj; }
ok
there is the basic structure of the akismet plugin :
`
zp_register_filter('comment_disapprove', 'submitSpam');
class SpamFilter {
function SpamFilter() {
[...]
}
function getOptionsSupported() {
[...]
}
function handleOption($option, $currentValue) {
[...]
}
function filterMessage($author, $email, $website, $body, $receiver, $ip) {
[...]
}
function submitSpam($comment) {
[...]
}
}
class Akismet {
[...]
}
`
according to you, I am on the right way ?
there is no code to add in admin-comment.php or other core files ?
why the return of the $commentObj is needed ?
The call to the class method from the filter will not work. You call it as a function but it is a class method. You probably need a wrapper function for that method outside the class. Not sure if you can use $classobj->submitSpam within hte filter call. sbillard will know.
Quote:why the return of the $commentObj is needed ?
You mean in the filter? You can call a filter multiple times so someone else may want to use it as well.
thanks
do you think the following code is more correct ?
function submitSpam calls the method feedbackMessage of SpamFilter.
feedbackMessage invokes the method submitSpam of Akismet
`
zp_register_filter('comment_disapprove', 'submitSpam');
function submitSpam($comment) {
[...]
$spamfilter = new SpamFilter();
$spamfilter->feedbackMessage($author, $email, $website, $body, false);
return $comment;
}
class SpamFilter {
function SpamFilter() {
[...]
}
function getOptionsSupported() {
[...]
}
function handleOption($option, $currentValue) {
[...]
}
function filterMessage($author, $email, $website, $body, $receiver, $ip) {
[...]
}
function feedbackMessage($author, $email, $website, $body, $goodMessage) {
[...]
if (!($goodMessage)) {
$akismet->submitSpam();
}
}
}
`
the class object is created when a visitor add a comment
and, of course, for each call of akismet to signalize a SPAM.
so I need a new object on each comment, don't you think ?
I do some tests but I am unable to verify the improvement (I can't see if the function submitSpam() is called by the filter).
Is there a way to add some trace for debugging the code (to generate zp-date/debug.log or something like that) ?
thanks for your help
ok, I have found and I have set DEBUG_PLUGINS and DEBUG_FILTERS to true in global-definitions.
I can't see a call of the hook 'comment_disapprove' when I choose a comment as a Spam.
I can see the registration, only if I go to admin/options/comment.
could you help me ?
not sure it is the only problem.
with DEBUG_FILTERS, I can see :
the function submitSpam is only registred when I navigate on admin/options/comment.
wathever I do, the test if ( !isset($_zp_filters[$hook]) ) on function zp_apply_filter is false, so my function is not triggered.
I really need some help on that subject
You are supposed to be able to attach class methods to filters, but I do not know if anyone has ever really done that.
Also, it seems that because the spam filters do not follow the normal filter implementation there is an issue of the filter not getting loaded.
A work-around would be to create a new plugin that contains the filtering code. It would have to do the "require_once" on the spam filter to get it loaded. Otherwise your code could pretty much stay as above.
`require_once(SERVERPATH.'/'.USER_PLUGIN_FOLDER.'/spamfilters/akismet_php5.php');
zp_register_filter('comment_disapprove', 'submitSpam');
function submitSpam($comment) {
[...]
$spamfilter = new SpamFilter();
$spamfilter->feedbackMessage($author, $email, $website, $body, false);
return $comment;
}'
Really what is needed is to recast the spam filters into normal plugins. But that is a 1.4.3 issue. Still, I think we will do that, so be on notice that the akismit filter will probably need to be change then.
I will look further to see if some other method will work. I will keep you posted.
It seems we have the same idea :-)
I will have a look as soon as possible
just a question : what is the need to add "$spamfilter = new SpamFilter();" in the code above ?
I was thinking the 1st part was necessary.
21 if (!(false === ($requirePath = getPlugin('spamfilters/'.getOption('spam_filter').'.php')))) { 22 require_once($requirePath); 23 $spamfilter = new SpamFilter(); 24 }