Adding basic Akismet stuff. Seems to work. Still working on it, make

sure it's okay.
This commit is contained in:
Ernst 2017-12-05 17:03:12 -08:00
parent 607e0fa6d4
commit 6a6b1973a1
8 changed files with 216 additions and 175 deletions

View file

@ -17,6 +17,8 @@ use RocketTheme\Toolbox\File\File;
use RocketTheme\Toolbox\Event\Event;
use Symfony\Component\Yaml\Yaml;
require_once 'extern/akismet/Akismet.class.php';
class CommentsPlugin extends Plugin
{
protected $route = 'comments';
@ -27,6 +29,8 @@ class CommentsPlugin extends Plugin
protected $comments_cache_id;
protected $pingbacks_cache_id;
protected $akismet_enabled;
/**
* @return array
*/
@ -85,6 +89,7 @@ class CommentsPlugin extends Plugin
$this->grav['twig']->pingbacks_enabled = $this->pingbacks_enabled;
$this->grav['twig']->comments = $this->fetchComments();
$this->grav['twig']->pingbacks = $this->fetchPingbacks();
$this->grav['twig']->akismet_enabled = $this->grav['config']->get('plugins.comments.akismet');
}
/**
@ -117,6 +122,8 @@ class CommentsPlugin extends Plugin
$this->commenting_enabled = $this->grav['config']->get('plugins.comments.commenting');
$this->pingbacks_enabled = $this->grav['config']->get('plugins.comments.pingbacks');
$this->akismet_enabled = $this->grav['config']->get('plugins.comments.akismet');
}
/**
@ -124,8 +131,6 @@ class CommentsPlugin extends Plugin
*/
public function initializeFrontend()
{
$this->calculateEnable();
$this->enable([
'onTwigTemplatePaths' => ['onTwigTemplatePaths', 0],
]);
@ -182,6 +187,8 @@ class CommentsPlugin extends Plugin
*/
public function onPluginsInitialized()
{
$this->calculateEnable();
if ($this->isAdmin()) {
$this->initializeAdmin();
} else {
@ -218,7 +225,7 @@ class CommentsPlugin extends Plugin
$name = filter_var(urldecode($post['name']), FILTER_SANITIZE_STRING);
$email = filter_var(urldecode($post['email']), FILTER_SANITIZE_STRING);
$title = filter_var(urldecode($post['title']), FILTER_SANITIZE_STRING);
$site = filter_var(urldecode($post['site']), FILTER_SANITIZE_STRING);
$site = isset($post['site']) ? filter_var(urldecode($post['site']), FILTER_SANITIZE_STRING) : "";
if (isset($this->grav['user'])) {
$user = $this->grav['user'];
@ -232,6 +239,25 @@ class CommentsPlugin extends Plugin
$language = $this->grav['language'];
$lang = $language->getLanguage();
if ($this->akismet_enabled) {
$key = $this->grav['config']->get('plugins.comments.akismet_apikey');
$url_override = $this->grav['config']->get('plugins.comments.akismet_site');
$url = !empty($url_override) ? $url_override : $_SERVER['HTTP_HOST'];
$akismet = new \Akismet($url, $key);
$akismet->setCommentAuthor($name);
$akismet->setCommentAuthorEmail($email);
$akismet->setCommentAuthorURL($site);
$akismet->setCommentContent($text);
//$akismet->setPermalink($comment->post->permalink);
//try {
$spam = ($akismet->isCommentSpam()) ? 'spam' : 'ham';
//return;
//} catch (Exception $e) {
// EventLog::log($e->getMessage(), 'notice', 'comment', 'HabariAkismet');
//}
}
$filename = DATA_DIR . 'comments';
$filename .= ($lang ? '/' . $lang : '');
$filename .= $path . '.yaml';
@ -245,7 +271,8 @@ class CommentsPlugin extends Plugin
'date' => date('D, d M Y H:i:s', time()),
'author' => $name,
'email' => $email,
'site' => $site
'site' => $site,
'approved' => ( !isset($spam) || $spam == 'ham' ? 'true' : 'false' )
];
} else {
$data = array(
@ -256,7 +283,8 @@ class CommentsPlugin extends Plugin
'date' => date('D, d M Y H:i:s', time()),
'author' => $name,
'email' => $email,
'site' => $site
'site' => $site,
'approved' => ( !isset($spam) || $spam == 'ham' ? 'true' : 'false' )
])
);
}
@ -451,6 +479,20 @@ class CommentsPlugin extends Plugin
public function onTwigAdminTemplatePaths()
{
$this->grav['twig']->twig_paths[] = __DIR__ . '/admin/templates';
$this->grav['twig']->akismet_enabled = $this->akismet_enabled;
if ($this->akismet_enabled) {
$key = $this->grav['config']->get('plugins.comments.akismet_apikey');
$url_override = $this->grav['config']->get('plugins.comments.akismet_site');
$url = !empty($url_override) ? $url_override : $_SERVER['HTTP_HOST'];
$akismet = new \Akismet($url, $key);
if ($akismet->isKeyValid()) {
$this->grav['twig']->warning_message = "";
} else {
$this->grav['twig']->warning_message = sprintf("Akismet API key \"%s\" is invalid for the url \"%s\". Provide a correct url override or make sure you're registered. Please check to make sure the key is entered correctly.", $key, $url);
}
}
}
/**
@ -459,6 +501,8 @@ class CommentsPlugin extends Plugin
public function onAdminMenu()
{
$this->grav['twig']->plugins_hooked_nav['PLUGIN_COMMENTS.COMMENTS'] = ['route' => $this->route, 'icon' => 'fa-file-text'];
}
/**