update license and adopt PSR2 coding style

master
Jean-Christian Paul Denis 2021-08-21 00:39:20 +02:00
parent 8ed255dac8
commit 3e2e840dd9
5 changed files with 370 additions and 375 deletions

View File

@ -1,28 +1,26 @@
whiteListCom 0.7 - 2021-08-19
* fix PSR2 coding style
* update license
whiteListCom 0.6 - 2013-11-13
===========================================================
* Clean up code
whiteListCom 0.5 - 2011-01-19
===========================================================
* Fixed calls to blog object
* Fixed (hope so) postgreSQL compatibility
* Added messages on admin
* New year copyright
whiteListCom 0.4 - 2010-06-05
===========================================================
* Switched to DC 2.2
whiteListCom 0.3 - 2009-11-08
===========================================================
* Fixed whitout comment_trackback in admin comments list
* Fixed typo
* Added LICENSE
whiteListCom 0.2 - 2009-09-27
===========================================================
* Changed to antispam system
whiteListCom 0.1 - 2009-09-16
===========================================================
* First lab release

View File

@ -23,3 +23,9 @@ Dotaddict repository. (See Dotclear's documentation to know how do this)
Enable and configure "Unmoderated authors" of "Reserved names"
from antispam manager.
Note: User must write a comment before able to be added to the list.
## MORE
* License : GNU GPL v2
* Source & contribution : [GitHub Page](https://github.com/JcDenis/whiteListCom)
* Packages & details: [Dotaddict Page](https://plugins.dotaddict.org/dc2/details/whiteListCom)

View File

@ -3,8 +3,7 @@
#
# This file is part of whiteListCom, a plugin for Dotclear 2.
#
# Copyright (c) 2009-2013 Jean-Christian Denis and contributors
# contact@jcdenis.fr http://jcd.lv
# Copyright (c) 2009-2021 Jean-Christian Denis and contributors
#
# Licensed under the GPL version 2.0 license.
# A copy of this license is available in LICENSE file or at
@ -12,23 +11,21 @@
#
# -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_RC_PATH')){return;}
if (!defined('DC_RC_PATH')) {
return null;
}
$this->registerModule(
/* Name */
"Whitelist comments",
/* Description*/
"Whitelists for comments moderation",
/* Author */
"Jean-Christian Denis",
/* Version */
'0.6',
array(
'permissions' => 'admin',
'priority' => 200,
'type' => 'plugin',
'dc_min' => '2.6',
'support' => 'http://jcd.lv/q=whiteListCom',
'details' => 'http://plugins.dotaddict.org/dc2/details/whiteListCom'
)
);
'Whitelist comments',
'Whitelists for comments moderation',
'Jean-Christian Denis and Contributors',
'0.7',
[
'permissions' => 'admin',
'priority' => 200,
'type' => 'plugin',
'dc_min' => '2.18',
'support' => 'https://github.com/JcDenis/whiteListCom',
'details' => 'https://plugins.dotaddict.org/dc2/details/whiteListCom'
]
);

View File

@ -3,8 +3,7 @@
#
# This file is part of whiteListCom, a plugin for Dotclear 2.
#
# Copyright (c) 2009-2013 Jean-Christian Denis and contributors
# contact@jcdenis.fr http://jcd.lv
# Copyright (c) 2009-2021 Jean-Christian Denis and contributors
#
# Licensed under the GPL version 2.0 license.
# A copy of this license is available in LICENSE file or at
@ -13,22 +12,21 @@
# -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_RC_PATH')) {
return null;
return null;
}
$d = dirname(__FILE__).'/inc/lib.whitelistcom.php';
$__autoload['whiteListCom'] = $d;
$__autoload['whiteListComBehaviors'] = $d;
$__autoload['whiteListComReservedFilter'] = $d;
$__autoload['whiteListComModeratedFilter'] = $d;
$__autoload['whiteListCom'] = $d;
$__autoload['whiteListComBehaviors'] = $d;
$__autoload['whiteListComReservedFilter'] = $d;
$__autoload['whiteListComModeratedFilter'] = $d;
$core->spamfilters[] = 'whiteListComModeratedFilter';
$core->addBehavior(
'publicAfterCommentCreate',
array('whiteListComBehaviors', 'switchStatus')
'publicAfterCommentCreate',
['whiteListComBehaviors', 'switchStatus']
);
$core->spamfilters[] = 'whiteListComReservedFilter';
$core->spamfilters[] = 'whiteListComReservedFilter';

View File

@ -3,8 +3,7 @@
#
# This file is part of whiteListCom, a plugin for Dotclear 2.
#
# Copyright (c) 2009-2013 Jean-Christian Denis and contributors
# contact@jcdenis.fr http://jcd.lv
# Copyright (c) 2009-2021 Jean-Christian Denis and contributors
#
# Licensed under the GPL version 2.0 license.
# A copy of this license is available in LICENSE file or at
@ -13,8 +12,7 @@
# -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_RC_PATH')) {
return null;
return null;
}
/**
@ -26,121 +24,125 @@ if (!defined('DC_RC_PATH')) {
*/
class whiteListComModeratedFilter extends dcSpamFilter
{
public $name = 'Unmoderated authors';
public $has_gui = true;
public $name = 'Unmoderated authors';
public $has_gui = true;
protected function setInfo()
{
$this->name = __('Unmoderated authors');
$this->description = __('Whitelist of unmoderated authors');
}
protected function setInfo()
{
$this->name = __('Unmoderated authors');
$this->description = __('Whitelist of unmoderated authors');
}
public function isSpam($type, $author, $email, $site, $ip, $content, $post_id, &$status)
{
if ($type != 'comment'
|| $this->core->blog === null
|| $this->core->blog->settings->system->comments_pub
) {
return null;
}
public function isSpam($type, $author, $email, $site, $ip, $content, $post_id, &$status)
{
if ($type != 'comment'
|| $this->core->blog === null
|| $this->core->blog->settings->system->comments_pub) {
return null;
}
try {
$wlc = new whiteListCom($this->core);
if ($wlc->isUnmoderated($email)) {
$status = 'unmoderated';
try {
$wlc = new whiteListCom($this->core);
if ($wlc->isUnmoderated($email)) {
$status = 'unmoderated';
# return true in order to change comment_status after
return true;
}
else {
# return true in order to change comment_status after
return true;
} else {
return null;
}
}
catch (Exception $e) {}
}
return null;
}
} catch (Exception $e) {
public function gui($url)
{
try {
$wlc = new whiteListCom($this->core);
}
}
if (!empty($_POST['update_unmoderated'])) {
$wlc->emptyUnmoderated();
foreach($_POST['unmoderated'] as $email) {
$wlc->addUnmoderated($email);
}
$wlc->commit();
}
$posts = $wlc->getPostsUsers();
$comments = $wlc->getCommentsUsers();
}
catch (Exception $e) {
$this->core->error->add($e->getMessage());
}
public function gui($url)
{
try {
$wlc = new whiteListCom($this->core);
$res = '';
if (!empty($_POST['update_unmoderated'])) {
$wlc->emptyUnmoderated();
foreach($_POST['unmoderated'] as $email) {
$wlc->addUnmoderated($email);
}
$wlc->commit();
}
$posts = $wlc->getPostsUsers();
$comments = $wlc->getCommentsUsers();
} catch (Exception $e) {
$this->core->error->add($e->getMessage());
}
if ($this->core->blog->settings->system->comments_pub) {
$res .=
'<p class="message">'.
__('This filter is used only if comments are moderates').
'</p>';
}
$res = '';
$res .=
'<form action="'.html::escapeURL($url).'" method="post">'.
'<p>'.__('Check the users who can make comments without being moderated.').'</p>'.
'<div class="two-cols">'.
'<div class="col">'.
'<p>'.__('Posts authors list').'</p>'.
'<table class="clear">'.
'<thead><tr><th>'.__('Name').'</th><th>'.__('Email').'</th></tr></thead>'.
'<tbody>';
if ($this->core->blog->settings->system->comments_pub) {
$res .=
'<p class="message">' .
__('This filter is used only if comments are moderates') .
'</p>';
}
foreach($posts as $user) {
$res .=
'<tr class="line">'.
'<td class="nowrap">'.
form::checkbox(array('unmoderated[]'), $user['email'],
$wlc->isUnmoderated($user['email'])).' '.
$user['name'].'</td>'.
'<td class="nowrap">'.$user['email'].'</td>'.
'</tr>';
}
$res .=
'<form action="' . html::escapeURL($url) . '" method="post">' .
'<p>' . __('Check the users who can make comments without being moderated.') . '</p>' .
'<div class="two-cols">' .
'<div class="col">' .
'<p>' . __('Posts authors list') . '</p>' .
'<table class="clear">' .
'<thead><tr><th>' . __('Name') . '</th><th>' . __('Email') . '</th></tr></thead>' .
'<tbody>';
$res .=
'</tbody>'.
'</table>'.
'</div>'.
'<div class="col">'.
'<p>'.__('Comments authors list').'</p>'.
'<table class="clear">'.
'<thead><tr><th>'.__('Author').'</th><th>'.__('Email').'</th></tr></thead>'.
'<tbody>';
foreach($posts as $user) {
$res .=
'<tr class="line">' .
'<td class="nowrap">' .
form::checkbox(
array('unmoderated[]'),
$user['email'],
$wlc->isUnmoderated($user['email'])
) .
' ' . $user['name'] . '</td>' .
'<td class="nowrap">' . $user['email'] . '</td>' .
'</tr>';
}
foreach($comments as $user) {
$res .=
'<tr class="line">'.
'<td class="nowrap">'.
form::checkbox(array('unmoderated[]'), $user['email'],
$wlc->isUnmoderated($user['email'])).' '.
$user['name'].'</td>'.
'<td class="nowrap">'.$user['email'].'</td>'.
'</tr>';
}
$res .=
'</tbody>' .
'</table>' .
'</div>' .
'<div class="col">' .
'<p>' . __('Comments authors list') . '</p>' .
'<table class="clear">' .
'<thead><tr><th>' . __('Author') . '</th><th>' . __('Email') . '</th></tr></thead>' .
'<tbody>';
$res .=
'</tbody>'.
'</table>'.
'</div>'.
'</div>'.
'<p><input type="submit" name="update_unmoderated" value="'.__('Save').'" />'.
$this->core->formNonce().'</p>'.
'</form>';
foreach($comments as $user) {
$res .=
'<tr class="line">' .
'<td class="nowrap">' .
form::checkbox(
array('unmoderated[]'),
$user['email'],
$wlc->isUnmoderated($user['email'])
) .
' ' . $user['name'] . '</td>' .
'<td class="nowrap">' . $user['email'] . '</td>' .
'</tr>';
}
return $res;
}
$res .=
'</tbody>' .
'</table>' .
'</div>' .
'</div>' .
'<p><input type="submit" name="update_unmoderated" value="' . __('Save') . '" />' .
$this->core->formNonce() . '</p>' .
'</form>';
return $res;
}
}
/**
@ -150,95 +152,95 @@ class whiteListComModeratedFilter extends dcSpamFilter
*/
class whiteListComReservedFilter extends dcSpamFilter
{
public $name = 'Reserved names';
public $has_gui = true;
public $name = 'Reserved names';
public $has_gui = true;
protected function setInfo()
{
$this->name = __('Reserved names');
$this->description = __('Whitelist of reserved names of users');
}
protected function setInfo()
{
$this->name = __('Reserved names');
$this->description = __('Whitelist of reserved names of users');
}
public function isSpam($type, $author, $email, $site, $ip, $content, $post_id, &$status)
{
if ($type != 'comment') {
public function isSpam($type, $author, $email, $site, $ip, $content, $post_id, &$status)
{
if ($type != 'comment') {
return null;
}
return null;
}
$throw = false;
try {
$wlc = new whiteListCom($this->core);
$throw = false;
try {
$wlc = new whiteListCom($this->core);
if (true === $wlc->isReserved($author, $email)) {
$status = 'reserved name';
//return true;
$throw = true;
} else {
return null;
}
} catch (Exception $e) {
if (true === $wlc->isReserved($author, $email)) {
$status = 'reserved name';
//return true;
$throw = true;
}
else {
}
return null;
}
}
catch (Exception $e) {}
# This message is show to author even if comments are moderated, comment is not saved
if($throw) {
throw new Exception(__('This name is reserved to an other user.'));
}
}
# This message is show to author even if comments are moderated, comment is not saved
if($throw) {
throw new Exception(__('This name is reserved to an other user.'));
}
}
public function getStatusMessage($status, $comment_id)
{
return __('This name is reserved to an other user.');
}
public function getStatusMessage($status,$comment_id)
{
return __('This name is reserved to an other user.');
}
public function gui($url)
{
try {
$wlc = new whiteListCom($this->core);
public function gui($url)
{
try {
$wlc = new whiteListCom($this->core);
if (!empty($_POST['update_reserved'])) {
$wlc->emptyReserved();
foreach($_POST['reserved'] as $email => $name) {
$wlc->addReserved($name, $email);
}
$wlc->commit();
}
$comments = $wlc->getCommentsUsers();
} catch (Exception $e) {
$this->core->error->add($e->getMessage());
}
if (!empty($_POST['update_reserved'])) {
$wlc->emptyReserved();
foreach($_POST['reserved'] as $email => $name) {
$wlc->addReserved($name, $email);
}
$wlc->commit();
}
$comments = $wlc->getCommentsUsers();
}
catch (Exception $e) {
$this->core->error->add($e->getMessage());
}
$res =
'<form action="' . html::escapeURL($url) . '" method="post">' .
'<p>' . __('Check the users who can make comments without being moderated.') . '</p>' .
'<p>' . __('Comments authors list') . '</p>' .
'<table class="clear">' .
'<thead><tr><th>' . __('Author') . '</th><th>' . __('Email') . '</th></tr></thead>' .
'<tbody>';
$res =
'<form action="'.html::escapeURL($url).'" method="post">'.
'<p>'.__('Check the users who can make comments without being moderated.').'</p>'.
'<p>'.__('Comments authors list').'</p>'.
'<table class="clear">'.
'<thead><tr><th>'.__('Author').'</th><th>'.__('Email').'</th></tr></thead>'.
'<tbody>';
foreach($comments as $user) {
$res .=
'<tr class="line">' .
'<td class="nowrap">' .
form::checkbox(
array('reserved[' . $user['email'] . ']'),
$user['name'],
(null === $wlc->isReserved($user['name'], $user['email']))
) .
' ' . $user['name'] . '</td>' .
'<td class="nowrap">' . $user['email'] . '</td>' .
'</tr>';
}
foreach($comments as $user) {
$res .=
'<tr class="line">'.
'<td class="nowrap">'.
form::checkbox(array('reserved['.$user['email'].']'), $user['name'],
(null === $wlc->isReserved($user['name'], $user['email']))).' '.
$user['name'].'</td>'.
'<td class="nowrap">'.$user['email'].'</td>'.
'</tr>';
}
$res .=
'</tbody>' .
'</table>' .
'<p><input type="submit" name="update_reserved" value="' . __('Save') . '" />' .
$this->core->formNonce() . '</p>' .
'</form>';
$res .=
'</tbody>'.
'</table>'.
'<p><input type="submit" name="update_reserved" value="'.__('Save').'" />'.
$this->core->formNonce().'</p>'.
'</form>';
return $res;
}
return $res;
}
}
/**
@ -248,159 +250,155 @@ class whiteListComReservedFilter extends dcSpamFilter
*/
class whiteListCom
{
public $core;
public $con;
public $blog;
public $settings;
public $core;
public $con;
public $blog;
public $settings;
private $unmoderated = array();
private $reserved = array();
private $unmoderated = array();
private $reserved = array();
public function __construct($core)
{
$this->core = $core;
$this->con = $core->con;
$this->blog = $core->con->escape($core->blog->id);
$core->blog->settings->addNamespace('whiteListCom');
$this->settings = $core->blog->settings->whiteListCom;
$unmoderated = $this->settings->whiteListCom_unmoderated;
$this->unmoderated = self::decode($unmoderated);
$reserved = $this->settings->whiteListCom_reserved;
$this->reserved = self::decode($reserved);
}
public function __construct($core)
{
$this->core = $core;
$this->con = $core->con;
$this->blog = $core->con->escape($core->blog->id);
$core->blog->settings->addNamespace('whiteListCom');
$this->settings = $core->blog->settings->whiteListCom;
$unmoderated = $this->settings->whiteListCom_unmoderated;
$this->unmoderated = self::decode($unmoderated);
$reserved = $this->settings->whiteListCom_reserved;
$this->reserved = self::decode($reserved);
}
public function commit()
{
$this->settings->put(
'whiteListCom_unmoderated',
self::encode($this->unmoderated),
'string',
'Whitelist of unmoderated users on comments',
true,false
);
$this->settings->put(
'whiteListCom_reserved',
self::encode($this->reserved),
'string',
'Whitelist of reserved names on comments',
true,false
);
}
public function commit()
{
$this->settings->put(
'whiteListCom_unmoderated',
self::encode($this->unmoderated),
'string',
'Whitelist of unmoderated users on comments',
true,false
);
$this->settings->put(
'whiteListCom_reserved',
self::encode($this->reserved),
'string',
'Whitelist of reserved names on comments',
true,false
);
}
# Return
# true if it is a reserved name with wrong email
# false if it is not a reserved name
# null if it is a reserved name with right email
public function isReserved($author, $email)
{
if (!isset($this->reserved[$author])) {
return false;
}
elseif ($this->reserved[$author] != $email) {
# Return
# true if it is a reserved name with wrong email
# false if it is not a reserved name
# null if it is a reserved name with right email
public function isReserved($author, $email)
{
if (!isset($this->reserved[$author])) {
return false;
} elseif ($this->reserved[$author] != $email) {
return true;
} else {
return null;
}
}
return true;
}
else {
# You must do a commit to save this change
public function addReserved($author, $email)
{
$this->reserved[$author] = $email;
return true;
}
return null;
}
}
# You must do a commit to save this change
public function emptyReserved()
{
$this->reserved = array();
}
# You must do a commit to save this change
public function addReserved($author, $email)
{
$this->reserved[$author] = $email;
return true;
}
# Return
# true if it is known as an unmoderated email else false
public function isUnmoderated($email)
{
return in_array($email, $this->unmoderated);
}
# You must do a commit to save this change
public function emptyReserved()
{
$this->reserved = array();
}
# You must do a commit to save this change
public function addUnmoderated($email)
{
if (!in_array($email,$this->unmoderated)) {
$this->unmoderated[] = $email;
# Return
# true if it is known as an unmoderated email else false
public function isUnmoderated($email)
{
return in_array($email, $this->unmoderated);
}
return true;
}
# You must do a commit to save this change
public function addUnmoderated($email)
{
if (!in_array($email,$this->unmoderated)) {
$this->unmoderated[] = $email;
return null;
}
return true;
}
# You must do a commit to save this change
public function emptyUnmoderated()
{
$this->unmoderated = array();
}
return null;
}
public function getPostsUsers()
{
$users = array();
$rs = $this->core->blog->getPostsUsers();
while($rs->fetch()) {
$name = dcUtils::getUserCN(
$rs->user_id,
$rs->user_name,
$rs->user_firstname,
$rs->user_displayname
);
$users[] = array(
'name' => $name,
'email' => $rs->user_email
);
}
# You must do a commit to save this change
public function emptyUnmoderated()
{
$this->unmoderated = array();
}
return $users;
}
public function getPostsUsers()
{
$users = array();
$rs = $this->core->blog->getPostsUsers();
while($rs->fetch()) {
$name = dcUtils::getUserCN(
$rs->user_id,
$rs->user_name,
$rs->user_firstname,
$rs->user_displayname
);
$users[] = array(
'name' => $name,
'email' => $rs->user_email
);
}
public function getCommentsUsers()
{
$users = array();
$rs = $this->con->select(
'SELECT comment_author, comment_email ' .
'FROM ' . $this->core->prefix . 'comment C ' .
'LEFT JOIN ' . $this->core->prefix . 'post P ON C.post_id=P.post_id ' .
"WHERE blog_id='" . $this->blog . "' AND comment_trackback=0 " .
'GROUP BY comment_email, comment_author ' // Added author to fix postgreSql
);
while($rs->fetch()) {
$users[] = array(
'name' => $rs->comment_author,
'email' => $rs->comment_email
);
}
return $users;
}
return $users;
}
public function getCommentsUsers()
{
$users = array();
$rs = $this->con->select(
'SELECT comment_author, comment_email '.
'FROM '.$this->core->prefix.'comment C '.
'LEFT JOIN '.$this->core->prefix.'post P ON C.post_id=P.post_id '.
"WHERE blog_id='".$this->blog."' AND comment_trackback=0 ".
'GROUP BY comment_email, comment_author ' // Added author to fix postgreSql
);
while($rs->fetch()) {
$users[] = array(
'name' => $rs->comment_author,
'email' => $rs->comment_email
);
}
public static function encode($x)
{
$y = is_array($x) ? $x : array();
return $users;
}
return base64_encode(serialize($y));
}
public static function encode($x)
{
$y = is_array($x) ? $x : array();
public static function decode($x)
{
$y = @unserialize(@base64_decode($x));
return base64_encode(serialize($y));
}
public static function decode($x)
{
$y = @unserialize(@base64_decode($x));
return is_array($y) ? $y : array();
}
return is_array($y) ? $y : array();
}
}
/**
@ -410,31 +408,29 @@ class whiteListCom
*/
class whiteListComBehaviors
{
# from behavior publicAfterCommentCreate
public static function switchStatus($cur,$id)
{
global $core;
# from behavior publicAfterCommentCreate
public static function switchStatus($cur, $id)
{
global $core;
if ($core->blog === null
|| $core->blog->settings->system->comments_pub
) {
return null;
}
if ($core->blog === null
|| $core->blog->settings->system->comments_pub) {
return null;
}
if ($cur->comment_spam_filter == 'whiteListComModeratedFilter'
&& $cur->comment_spam_status == 'unmoderated'
) {
$core->con->writeLock($core->prefix.'comment');
if ($cur->comment_spam_filter == 'whiteListComModeratedFilter'
&& $cur->comment_spam_status == 'unmoderated') {
$core->con->writeLock($core->prefix.'comment');
$cur->comment_status = 1;
$cur->comment_spam_status = 0;
$cur->comment_spam_filter = 0;
$cur->update('WHERE comment_id = '.$id.' ');
$cur->comment_status = 1;
$cur->comment_spam_status = 0;
$cur->comment_spam_filter = 0;
$cur->update('WHERE comment_id = ' . $id . ' ');
$core->con->unlock();
$core->con->unlock();
$core->blog->triggerComment($id);
$core->blog->triggerBlog();
}
}
}
$core->blog->triggerComment($id);
$core->blog->triggerBlog();
}
}
}