Imported Pingbacks can display or be toggled off. You can also display

comments but have adding new ones disabled. TODO: allow disabling
comments on a per page basis.
This commit is contained in:
Ernst 2017-12-01 17:53:07 -08:00
parent 563d7af096
commit a52c1b2f6d
9 changed files with 735 additions and 46 deletions

View file

@ -1,6 +1,9 @@
<?php
namespace Grav\Plugin;
use Grav\Common\Blueprint;
use Grav\Common\Blueprints;
use Grav\Common\BlueprintSchema;
use Grav\Common\Filesystem\Folder;
use Grav\Common\GPM\GPM;
use Grav\Common\Grav;
@ -18,7 +21,11 @@ class CommentsPlugin extends Plugin
{
protected $route = 'comments';
protected $enable = false;
protected $commenting_enabled = false;
protected $pingbacks_enabled = false;
protected $comments_cache_id;
protected $pingbacks_cache_id;
/**
* @return array
@ -74,7 +81,10 @@ class CommentsPlugin extends Plugin
public function onTwigSiteVariables() {
$this->grav['twig']->enable_comments_plugin = $this->enable;
$this->grav['twig']->commenting_enabled = $this->commenting_enabled;
$this->grav['twig']->pingbacks_enabled = $this->pingbacks_enabled;
$this->grav['twig']->comments = $this->fetchComments();
$this->grav['twig']->pingbacks = $this->fetchPingbacks();
}
/**
@ -100,6 +110,13 @@ class CommentsPlugin extends Plugin
}
}
}
#$blueprint = $this->getBlueprint();
#$this->commenting_enabled = $blueprint->get('form/fields/commenting', false, '/');
#$this->pingbacks_enabled = $blueprint->get('form/fields/pingbacks' , false, '/');
$this->commenting_enabled = $this->grav['config']->get('plugins.comments.commenting');
$this->pingbacks_enabled = $this->grav['config']->get('plugins.comments.pingbacks');
}
/**
@ -127,6 +144,8 @@ class CommentsPlugin extends Plugin
//init cache id
$this->comments_cache_id = md5('comments-data' . $cache->getKey() . '-' . $uri->url());
$this->pingbacks_cache_id = md5('pingbacks-data' . $cache->getKey() . '-' . $uri->url());
}
/**
@ -185,16 +204,21 @@ class CommentsPlugin extends Plugin
return;
}
if (!$this->commenting_enabled) {
return;
}
switch ($action) {
case 'addComment':
$post = isset($_POST['data']) ? $_POST['data'] : [];
$lang = filter_var(urldecode($post['lang']), FILTER_SANITIZE_STRING);
$path = filter_var(urldecode($post['path']), FILTER_SANITIZE_STRING);
$text = filter_var(urldecode($post['text']), FILTER_SANITIZE_STRING);
$name = filter_var(urldecode($post['name']), FILTER_SANITIZE_STRING);
$lang = filter_var(urldecode($post['lang']), FILTER_SANITIZE_STRING);
$path = filter_var(urldecode($post['path']), FILTER_SANITIZE_STRING);
$text = filter_var(urldecode($post['text']), FILTER_SANITIZE_STRING);
$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);
if (isset($this->grav['user'])) {
$user = $this->grav['user'];
@ -220,7 +244,8 @@ class CommentsPlugin extends Plugin
'text' => $text,
'date' => date('D, d M Y H:i:s', time()),
'author' => $name,
'email' => $email
'email' => $email,
'site' => $site
];
} else {
$data = array(
@ -230,7 +255,8 @@ class CommentsPlugin extends Plugin
'text' => $text,
'date' => date('D, d M Y H:i:s', time()),
'author' => $name,
'email' => $email
'email' => $email,
'site' => $site
])
);
}
@ -239,6 +265,7 @@ class CommentsPlugin extends Plugin
//clear cache
$this->grav['cache']->delete($this->comments_cache_id);
$this->grav['cache']->delete($this->pingbacks_cache_id);
break;
}
@ -353,6 +380,26 @@ class CommentsPlugin extends Plugin
return $comments;
}
/**
* Return the pingbacks associated to the current route
*/
private function fetchPingbacks() {
$cache = $this->grav['cache'];
//search in cache
if ($pingbacks = $cache->fetch($this->pingbacks_cache_id)) {
return $pingbacks;
}
$lang = $this->grav['language']->getLanguage();
$filename = $lang ? '/' . $lang : '';
$filename .= $this->grav['uri']->path() . '.yaml';
$pingbacks = $this->getDataFromFilename($filename)['pingbacks'];
//save to cache if enabled
$cache->save($this->pingbacks_cache_id, $pingbacks);
return $pingbacks;
}
/**
* Return the latest commented pages
*/