Add enable_on_routes and disable_on_routes config options

Example usage:

enable_on_routes:
  - '/blog'

disable_on_routes:
  - /blog/blog-post-to-ignore
  - /ignore-this-route
  #- '/blog/daring-fireball-link'
This commit is contained in:
Flavio Copes 2015-10-15 18:04:02 +02:00
parent fe66c4bfd6
commit 13252376e4
3 changed files with 89 additions and 37 deletions

View File

@ -15,6 +15,7 @@ use Symfony\Component\Yaml\Yaml;
class CommentsPlugin extends Plugin class CommentsPlugin extends Plugin
{ {
protected $route = 'comments'; protected $route = 'comments';
protected $enable = false;
/** /**
* @return array * @return array
@ -51,7 +52,43 @@ class CommentsPlugin extends Plugin
public function onTwigSiteVariables() { public function onTwigSiteVariables() {
if (!$this->isAdmin()) { if (!$this->isAdmin()) {
$this->grav['twig']->comments = $this->fetchComments(); $this->grav['twig']->enable = $this->enable;
if ($this->enable) {
$this->grav['twig']->comments = $this->fetchComments();
}
}
}
/**
* Determine if $haystack starts with $needle. Credit: http://stackoverflow.com/a/10473026/205039
*/
private function startsWith($haystack, $needle) {
return $needle === "" || strrpos($haystack, $needle, -strlen($haystack)) !== FALSE;
}
/**
* Determine if the plugin should be enabled based on the enable_on_routes and disable_on_routes config options
*/
private function calculateEnable() {
$uri = $this->grav['uri'];
$disable_on_routes = (array) $this->config->get('plugins.comments.disable_on_routes');
$enable_on_routes = (array) $this->config->get('plugins.comments.enable_on_routes');
$path = $uri->path();
if (!in_array($path, $disable_on_routes)) {
if (in_array($path, $enable_on_routes)) {
$this->enable = true;
} else {
foreach($enable_on_routes as $route) {
if ($this->startsWith($path, $route)) {
$this->enable = true;
break;
}
}
}
} }
} }
@ -61,6 +98,8 @@ class CommentsPlugin extends Plugin
{ {
if (!$this->isAdmin()) { if (!$this->isAdmin()) {
$this->calculateEnable();
$this->enable([ $this->enable([
'onTwigTemplatePaths' => ['onTwigTemplatePaths', 0], 'onTwigTemplatePaths' => ['onTwigTemplatePaths', 0],
]); ]);
@ -118,6 +157,7 @@ class CommentsPlugin extends Plugin
$name = filter_var(urldecode($post['name']), FILTER_SANITIZE_STRING); $name = filter_var(urldecode($post['name']), FILTER_SANITIZE_STRING);
$email = filter_var(urldecode($post['email']), FILTER_SANITIZE_STRING); $email = filter_var(urldecode($post['email']), FILTER_SANITIZE_STRING);
$title = filter_var(urldecode($post['title']), FILTER_SANITIZE_STRING); $title = filter_var(urldecode($post['title']), FILTER_SANITIZE_STRING);
/** @var Language $language */ /** @var Language $language */
$language = $this->grav['language']; $language = $this->grav['language'];
$lang = $language->getLanguage(); $lang = $language->getLanguage();

View File

@ -1,4 +1,13 @@
enabled: true enabled: true
enable_on_routes:
- '/blog'
disable_on_routes:
- /blog/blog-post-to-ignore
- /ignore-this-route
#- '/blog/daring-fireball-link'
form: form:
name: comments name: comments
fields: fields:
@ -45,7 +54,7 @@ form:
# - name: g-recaptcha-response # - name: g-recaptcha-response
# label: Captcha # label: Captcha
# type: captcha # type: captcha
# recatpcha_site_key: 6Lde4gwTAAAAAAZuv4z2AgVU6Xamn5twDYzQr8hv # recatpcha_site_key: e32iojeoi32jeoi32jeoij32oiej32oiej3
# recaptcha_not_validated: 'Captcha not valid!' # recaptcha_not_validated: 'Captcha not valid!'
# validate: # validate:
# required: true # required: true
@ -61,7 +70,7 @@ form:
# subject: "[Site Guestbook] {{ form.value.name|e }}" # subject: "[Site Guestbook] {{ form.value.name|e }}"
# body: "{% include 'forms/data.html.twig' %}" # body: "{% include 'forms/data.html.twig' %}"
# - captcha: # - captcha:
# recatpcha_secret: 6Lde4gwTAAAAAPpwVKuaYm53n2bWfFfxcDxSlI54 # recatpcha_secret: ej32oiej23oiej32oijeoi32jeio32je
- addComment: - addComment:
- message: Thank you for writing your comment! - message: Thank you for writing your comment!

View File

@ -1,41 +1,44 @@
<h3>{{'PLUGIN_COMMENTS.ADD_COMMENT'|t}}</h3> {% if grav.twig.enable %}
<form name="{{ grav.config.plugins.comments.form.name }}" <h3>{{'PLUGIN_COMMENTS.ADD_COMMENT'|t}}</h3>
action="{{ uri.rootUrl ~ (grav.config.plugins.comments.form.action|default(page.route)) }}"
method="{{ grav.config.plugins.comments.form.method|upper|default('POST') }}">
{% for field in grav.config.plugins.comments.form.fields %}
{% set value = form.value(field.name) %} <form name="{{ grav.config.plugins.comments.form.name }}"
{% if field.evaluateDefault %} action="{{ uri.rootUrl ~ (grav.config.plugins.comments.form.action|default(page.route)) }}"
{% set value = evaluate(field.evaluateDefault) %} method="{{ grav.config.plugins.comments.form.method|upper|default('POST') }}">
{% endif %} {% for field in grav.config.plugins.comments.form.fields %}
<div>
{% include "forms/fields/#{field.type}/#{field.type}.html.twig" %}
</div>
{% endfor %}
<div class="buttons"> {% set value = form.value(field.name) %}
{% for button in grav.config.plugins.comments.form.buttons %} {% if field.evaluateDefault %}
<button class="button" type="{{ button.type|default('submit') }}">{{ button.value|default('Submit') }}</button> {% set value = evaluate(field.evaluateDefault) %}
{% endif %}
<div>
{% include "forms/fields/#{field.type}/#{field.type}.html.twig" %}
</div>
{% endfor %} {% endfor %}
</div>
</form>
<div class="alert">{{ form.message }}</div> <div class="buttons">
{% for button in grav.config.plugins.comments.form.buttons %}
{% if grav.twig.comments|length %} <button class="button" type="{{ button.type|default('submit') }}">{{ button.value|default('Submit') }}</button>
<h3>{{'PLUGIN_COMMENTS.COMMENTS'|t}}</h3>
<table>
{% for comment in grav.twig.comments|array_reverse %}
<tr>
<td>
{{comment.text|e}}
<br />
{{'PLUGIN_COMMENTS.WRITTEN_ON'|t}} {{comment.date|e}} {{'PLUGIN_COMMENTS.BY'|t}} {{comment.author|e}}
</td>
</tr>
{% endfor %} {% endfor %}
</table> </div>
</form>
<div class="alert">{{ form.message }}</div>
{% if grav.twig.comments|length %}
<h3>{{'PLUGIN_COMMENTS.COMMENTS'|t}}</h3>
<table>
{% for comment in grav.twig.comments|array_reverse %}
<tr>
<td>
{{comment.text|e}}
<br />
{{'PLUGIN_COMMENTS.WRITTEN_ON'|t}} {{comment.date|e}} {{'PLUGIN_COMMENTS.BY'|t}} {{comment.author|e}}
</td>
</tr>
{% endfor %}
</table>
{% endif %}
{% endif %} {% endif %}