code review for dotclear 2.24

This commit is contained in:
Jean-Christian Paul Denis 2022-12-21 01:40:42 +01:00
parent c8de8345a1
commit bb709274b2
Signed by: JcDenis
GPG Key ID: 1B5B8C5B90B6C951
9 changed files with 490 additions and 611 deletions

View File

@ -1,3 +1,9 @@
todo
bug jsToolBar !
1.0 - 2022.12.xx
* update to dotclear 2.24
v0.9 - 19-07-2015 - Pierre Van Glabek v0.9 - 19-07-2015 - Pierre Van Glabek
* héritabe thème mustek * héritabe thème mustek
* dc2.8 requis * dc2.8 requis

View File

@ -1,5 +1,12 @@
# README # README
[![Release](https://img.shields.io/github/v/release/JcDenis/disclaimer)](https://github.com/JcDenis/disclaimer/releases)
[![Date](https://img.shields.io/github/release-date/JcDenis/disclaimer)](https://github.com/JcDenis/disclaimer/releases)
[![Issues](https://img.shields.io/github/issues/JcDenis/disclaimer)](https://github.com/JcDenis/disclaimer/issues)
[![Dotclear](https://img.shields.io/badge/dotclear-v2.24-blue.svg)](https://fr.dotclear.org/download)
[![Dotaddict](https://img.shields.io/badge/dotaddict-official-green.svg)](https://plugins.dotaddict.org/dc2/details/disclaimer)
[![License](https://img.shields.io/github/license/JcDenis/disclaimer)](https://github.com/JcDenis/disclaimer/blob/master/LICENSE)
## QU'EST CE QUE DISCLAIMER ? ## QU'EST CE QUE DISCLAIMER ?
"disclaimer" est un plugin pour l'outil open source de "disclaimer" est un plugin pour l'outil open source de

View File

@ -1,207 +1,124 @@
<?php <?php
# -- BEGIN LICENSE BLOCK ----------------------------------
#
# This file is part of disclaimer, a plugin for Dotclear 2.
#
# Copyright (c) 2009-2015 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
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_CONTEXT_ADMIN')) {
return null;
}
$core->addBehavior(
'adminBeforeBlogSettingsUpdate',
array('adminDisclaimer', 'adminBeforeBlogSettingsUpdate')
);
$core->addBehavior(
'adminBlogPreferencesHeaders',
array('adminDisclaimer', 'adminDisclaimerHeaders')
);
$core->addBehavior(
'adminBlogPreferencesForm',
array('adminDisclaimer', 'adminBlogPreferencesForm')
);
/** /**
* @ingroup DC_PLUGIN_DISCLAIMER * @brief disclaimer, a plugin for Dotclear 2
* @brief Public disclaimer - Admin methods. *
* @since 2.6 * @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, Pierre Van Glabeke
*
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class adminDisclaimer if (!defined('DC_CONTEXT_ADMIN')) {
{ return null;
/**
* Save settings
*
* @param dcSettings $blog_settings dcSettings instance
*/
public static function adminBeforeBlogSettingsUpdate(dcSettings $blog_settings)
{
$blog_settings->addNamespace('disclaimer');
$s = $blog_settings->disclaimer;
try {
$disclaimer_active =
isset($_POST['disclaimer_active']);
$disclaimer_remember =
isset($_POST['disclaimer_remember']);
$disclaimer_redir =
isset($_POST['disclaimer_redir']) ?
$_POST['disclaimer_redir'] : '';
$disclaimer_title =
isset($_POST['disclaimer_title']) ?
$_POST['disclaimer_title'] : '';
$disclaimer_text =
isset($_POST['disclaimer_text']) ?
$_POST['disclaimer_text'] : '';
$disclaimer_bots_unactive =
isset($_POST['disclaimer_bots_unactive']);
$disclaimer_bots_agents =
isset($_POST['disclaimer_bots_agents']) ?
$_POST['disclaimer_bots_agents'] : '';
$s->put('disclaimer_active', $disclaimer_active);
$s->put('disclaimer_remember', $disclaimer_remember);
$s->put('disclaimer_redir', $disclaimer_redir);
$s->put('disclaimer_title', $disclaimer_title);
$s->put('disclaimer_text', $disclaimer_text);
$s->put('disclaimer_bots_unactive', $disclaimer_bots_unactive);
$s->put('disclaimer_bots_agents', $disclaimer_bots_agents);
}
catch (Exception $e) {
$s->drop('disclaimer_active');
$s->put('disclaimer_active', 0);
}
}
public static function adminDisclaimerHeaders()
{
global $core;
$post_format = $core->auth->getOption('post_format');
$post_editor = $core->auth->getOption('editor');
$admin_post_behavior = '';
if ($post_editor && !empty($post_editor[$post_format])) {
$admin_post_behavior = $core->callBehavior('adminPostEditor', $post_editor[$post_format],
'disclaimer_text', array('#disclaimer_text')
);
}
return
dcPage::jsToolBar().
$admin_post_behavior.
dcPage::jsConfirmClose('opts-forms').
dcPage::jsLoad('index.php?pf=disclaimer/js/config.js');
} }
/**
* Form
*
* @param dcCore $core dcCore instance
* @param dcSettings $blog_settings dcSettings instance
*/
public static function adminBlogPreferencesForm(dcCore $core, dcSettings $blog_settings)
{
$blog_settings->addNamespace('disclaimer');
$s = $blog_settings->disclaimer;
$disclaimer_active = (boolean) $s->disclaimer_active;
$disclaimer_remember = (boolean) $s->disclaimer_remember;
$disclaimer_redir = (string) $s->disclaimer_redir;
$disclaimer_title = (string) $s->disclaimer_title;
$disclaimer_text = (string) $s->disclaimer_text;
$disclaimer_bots_unactive = (boolean) $s->disclaimer_bots_unactive;
$disclaimer_bots_agents = $s->disclaimer_bots_agents;
if (!$disclaimer_bots_agents) {
$disclaimer_bots_agents =
'bot;Scooter;Slurp;Voila;WiseNut;Fast;Index;Teoma;'.
'Mirago;search;find;loader;archive;Spider;Crawler';
}
echo dcCore::app()->addBehavior('adminBeforeBlogSettingsUpdate', function (dcSettings $blog_settings) {
'<div class="fieldset">'. $s = $blog_settings->addNamespace(basename(__DIR__));
'<h4>'.__('Disclaimer').'</h4>'.
'<div class="two-boxes">'. try {
$s->put('disclaimer_active', isset($_POST['disclaimer_active']));
$s->put('disclaimer_remember', isset($_POST['disclaimer_remember']));
$s->put('disclaimer_redir', $_POST['disclaimer_redir'] ?? '');
$s->put('disclaimer_title', $_POST['disclaimer_title'] ?? '');
$s->put('disclaimer_text', $_POST['disclaimer_text'] ?? '');
$s->put('disclaimer_bots_unactive', isset($_POST['disclaimer_bots_unactive']));
$s->put('disclaimer_bots_agents', $_POST['disclaimer_bots_agents'] ?? '');
} catch (Exception $e) {
$s->drop('disclaimer_active');
$s->put('disclaimer_active', 0);
}
});
'<p><label class="classic" for="disclaimer_active">'. dcCore::app()->addBehavior('adminBlogPreferencesHeaders', function () {
form::checkbox( $editor = dcCore::app()->auth->getOption('editor');
'disclaimer_active',
'1',
$disclaimer_active
).
__('Enable disclaimer').'</label></p>'.
'<p><label for="disclaimer_title">'. echo
__('Title:'). dcCore::app()->callBehavior('adminPostEditor', $editor['xhtml'], 'disclaimer', ['#disclaimer_text'], 'xhtml') .
'</label>'. dcPage::jsModuleLoad(basename(__DIR__) . '/js/admin.js');
form::field( });
'disclaimer_title',
30,
255,
html::escapeHTML($disclaimer_title)
).
'</p>'.
'</div><div class="two-boxes">'. dcCore::app()->addBehavior('adminBlogPreferencesFormV2', function (dcSettings $blog_settings) {
$s = $blog_settings->addNamespace(basename(__DIR__));
'<p><label class="classic">'. $disclaimer_bots_agents = $s->get('disclaimer_bots_agents');
form::checkbox( if (empty($disclaimer_bots_agents)) {
'disclaimer_remember', $disclaimer_bots_agents = 'bot;Scooter;Slurp;Voila;WiseNut;Fast;Index;Teoma;' .
'1', 'Mirago;search;find;loader;archive;Spider;Crawler';
$disclaimer_remember }
).
__('Remember the visitor').'</label></p>'.
'<p><label for="disclaimer_redir">'. echo
__('Link output:'). '<div class="fieldset">' .
'</label>'. '<h4>' . __('Disclaimer') . '</h4>' .
form::field( '<div class="two-boxes">' .
'disclaimer_redir',
30,
255,
html::escapeHTML($disclaimer_redir)
).'</p>'.
'<p class="form-note info">'.__('Leave blank to redirect to the site Dotclear').'</p>'.
'</div><div class="clear">'. '<p><label class="classic" for="disclaimer_active">' .
form::checkbox(
'disclaimer_active',
'1',
(bool) $s->get('disclaimer_active')
) .
__('Enable disclaimer') . '</label></p>' .
'<p class="area"><label for="disclaimer_text">'. '<p><label for="disclaimer_title">' . __('Title:') . '</label>' .
__('Disclaimer:'). form::field(
'</label>'. 'disclaimer_title',
form::textarea( 30,
'disclaimer_text', 255,
60, html::escapeHTML((string) $s->get('disclaimer_title'))
5, ) .
html::escapeHTML($disclaimer_text) '</p>' .
).'</p>'.
'<p><label for="disclaimer_bots_agents">'. '</div><div class="two-boxes">' .
__('List of robots allowed to index the site pages (separated by semicolons):').
'</label>'.
form::field(
'disclaimer_bots_agents',
120,
255,
html::escapeHTML($disclaimer_bots_agents)
).'</p>'.
'<p><label for="disclaimer_bots_unactive">'. '<p><label class="classic">' .
form::checkbox( form::checkbox(
'disclaimer_bots_unactive', 'disclaimer_remember',
'1', '1',
$disclaimer_bots_unactive (bool) $s->get('disclaimer_remember')
). ) .
__('Disable the authorization of indexing by search engines'). __('Remember the visitor') . '</label></p>' .
'</label></p>'.
'</div>'. '<p><label for="disclaimer_redir">' . __('Link output:') . '</label>' .
form::field(
'disclaimer_redir',
30,
255,
html::escapeHTML((string) $s->get('disclaimer_redir'))
) . '</p>' .
'<p class="form-note info">' . __('Leave blank to redirect to the site Dotclear') . '</p>' .
'</div>'; '</div><div class="clear">' .
}
} '<p class="area"><label for="disclaimer_text">' . __('Disclaimer:') . '</label>' .
form::textarea(
'disclaimer_text',
60,
5,
[
'default' => html::escapeHTML((string) $s->get('disclaimer_text')),
'extra_html' => 'lang="' . dcCore::app()->blog->settings->get('system')->get('lang') . '" spellcheck="true"',
]
) . '</p>' .
'<p><label for="disclaimer_bots_agents">' . __('List of robots allowed to index the site pages (separated by semicolons):') . '</label>' .
form::field(
'disclaimer_bots_agents',
120,
255,
html::escapeHTML($disclaimer_bots_agents)
) . '</p>' .
'<p><label for="disclaimer_bots_unactive">' .
form::checkbox(
'disclaimer_bots_unactive',
'1',
(bool) $s->get('disclaimer_bots_unactive')
) .
__('Disable the authorization of indexing by search engines') .
'</label></p>' .
'</div>' .
'</div>';
});

View File

@ -1,36 +1,32 @@
<?php <?php
# -- BEGIN LICENSE BLOCK ---------------------------------- /**
# * @brief disclaimer, a plugin for Dotclear 2
# This file is part of disclaimer, a plugin for Dotclear 2. *
# * @package Dotclear
# Copyright (c) 2009-2015 Jean-Christian Denis and contributors * @subpackage Plugin
# *
# Licensed under the GPL version 2.0 license. * @author Jean-Christian Denis, Pierre Van Glabeke
# A copy of this license is available in LICENSE file or at *
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * @copyright Jean-Christian Denis
# * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
# -- END LICENSE BLOCK ------------------------------------ */
if (!defined('DC_RC_PATH')) { if (!defined('DC_RC_PATH')) {
return null;
return null;
} }
$this->registerModule( $this->registerModule(
/* Name */ 'disclaimer',
"disclaimer", 'Add a disclaimer to your blog entrance',
/* Description*/ 'Jean-Christian Denis, Pierre Van Glabeke',
"Add a disclaimer to your blog entrance", '0.10',
/* Author */ [
"Jean-Christian Denis, Pierre Van Glabeke", 'requires' => [['core', '2.24']],
/* Version */ 'permissions' => dcCore::app()->auth->makePermissions([
'0.9', dcAuth::PERMISSION_ADMIN,
/* Properties */ ]),
array( 'type' => 'plugin',
'permissions' => 'admin', 'support' => 'http://forum.dotclear.org/viewtopic.php?id=40000',
'type' => 'plugin', 'details' => 'https://github.com/JcDenis/' . basename(__DIR__),
'dc_min' => '2.8', 'repository' => 'https://raw.githubusercontent.com/JcDenis/' . basename(__DIR__) . '/master/dcstore.xml',
'support' => 'http://forum.dotclear.org/viewtopic.php?id=40000', ]
'details' => 'http://plugins.dotaddict.org/dc2/details/disclaimer' );
)
);

View File

@ -1,127 +1,108 @@
<?php <?php
# -- BEGIN LICENSE BLOCK ---------------------------------- /**
# * @brief disclaimer, a plugin for Dotclear 2
# This file is part of disclaimer, a plugin for Dotclear 2. *
# * @package Dotclear
# Copyright (c) 2009-2015 Jean-Christian Denis and contributors * @subpackage Plugin
# *
# Licensed under the GPL version 2.0 license. * @author Jean-Christian Denis, Pierre Van Glabeke
# A copy of this license is available in LICENSE file or at *
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * @copyright Jean-Christian Denis
# * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
# -- END LICENSE BLOCK ------------------------------------ */
if (!defined('DC_CONTEXT_ADMIN')) { if (!defined('DC_CONTEXT_ADMIN')) {
return null;
return null;
} }
# -- Module specs -- // Module specs
$mod_conf = [
$dc_min = '2.7'; [
$mod_id = 'disclaimer'; 'disclaimer_active',
$mod_conf = array( 'Enable disclaimer plugin',
array( false,
'disclaimer_active', 'boolean',
'Enable disclaimer plugin', ],
false, [
'boolean' 'disclaimer_remember',
), 'Remember the visitor who has already accepted the terms',
array( false,
'disclaimer_remember', 'boolean',
'Remember the visitor who has already accepted the terms', ],
false, [
'boolean' 'disclaimer_redir',
), 'Redirection if disclaimer is refused',
array( 'https://www.google.fr',
'disclaimer_redir', 'string',
'Redirection if disclaimer is refused', ],
'https://www.google.fr', [
'string' 'disclaimer_title',
), 'Title for disclaimer',
array( 'Disclaimer',
'disclaimer_title', 'string',
'Title for disclaimer', ],
'Disclaimer', [
'string' 'disclaimer_text',
), 'Description for disclaimer',
array( __('<p>You must accept this term before entering</p>'),
'disclaimer_text', //'You must accept this term before entering',
'Description for disclaimer', 'string',
__('<p>You must accept this term before entering</p>'), ],
//'You must accept this term before entering', [
'string' 'disclaimer_bots_unactive',
), 'Bypass disclaimer for bots',
array( false,
'disclaimer_bots_unactive', 'boolean',
'Bypass disclaimer for bots', ],
false, [
'boolean' 'disclaimer_bots_agents',
), 'List of know bots',
array( implode(';', [
'disclaimer_bots_agents', 'bot',
'List of know bots', 'Scooter',
implode(';', array( 'Slurp',
'bot', 'Voila',
'Scooter', 'WiseNut',
'Slurp', 'Fast',
'Voila', 'Index',
'WiseNut', 'Teoma',
'Fast', 'Mirago',
'Index', 'search',
'Teoma', 'find',
'Mirago', 'loader',
'search', 'archive',
'find', 'Spider',
'loader', 'Crawler',
'archive', ]),
'Spider', 'string',
'Crawler' ],
)), ];
'string'
)
);
# -- Nothing to change below --
// Nothing to change below
try { try {
// Version
if (!dcCore::app()->newVersion(
basename(__DIR__),
dcCore::app()->plugins->moduleInfo(basename(__DIR__), 'version')
)) {
return null;
}
# Check module version // Settings
if (version_compare( dcCore::app()->blog->settings->addNamespace(basename(__DIR__));
$core->getVersion($mod_id), foreach ($mod_conf as $v) {
$core->plugins->moduleInfo($mod_id, 'version'), dcCore::app()->blog->settings->get(basename(__DIR__))->put(
'>=' $v[0],
)) { $v[2],
$v[3],
$v[1],
false,
true
);
}
return null; return true;
} } catch (Exception $e) {
dcCore::app()->error->add($e->getMessage());
# Check Dotclear version
if (!method_exists('dcUtils', 'versionsCompare')
|| dcUtils::versionsCompare(DC_VERSION, $dc_min, '<', false)) {
throw new Exception(sprintf(
'%s requires Dotclear %s', $mod_id, $dc_min
));
}
# Set module settings
$core->blog->settings->addNamespace($mod_id);
foreach($mod_conf as $v) {
$core->blog->settings->{$mod_id}->put(
$v[0], $v[2], $v[3], $v[1], false, true
);
}
# Set module version
$core->setVersion(
$mod_id,
$core->plugins->moduleInfo($mod_id, 'version')
);
return true;
} }
catch (Exception $e) {
$core->error->add($e->getMessage());
return false; return false;
}

View File

@ -1,27 +1,24 @@
<?php <?php
# -- BEGIN LICENSE BLOCK ---------------------------------- /**
# * @brief disclaimer, a plugin for Dotclear 2
# This file is part of disclaimer, a plugin for Dotclear 2. *
# * @package Dotclear
# Copyright (c) 2009-2015 Jean-Christian Denis and contributors * @subpackage Plugin
# *
# Licensed under the GPL version 2.0 license. * @author Jean-Christian Denis, Pierre Van Glabeke
# A copy of this license is available in LICENSE file or at *
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * @copyright Jean-Christian Denis
# * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
# -- END LICENSE BLOCK ------------------------------------ */
if (!defined('DC_RC_PATH')) { if (!defined('DC_RC_PATH')) {
return null;
return null;
} }
$core->blog->settings->addNamespace('disclaimer'); dcCore::app()->blog->settings->addNamespace(basename(__DIR__));
# Is active # Is active
if (!$core->blog->settings->disclaimer->disclaimer_active) { if (!dcCore::app()->blog->settings->get(basename(__DIR__))->get('disclaimer_active')) {
return null;
return null;
} }
# Localized l10n # Localized l10n
@ -30,28 +27,30 @@ __('Accept terms of uses');
__('I agree'); __('I agree');
__('I disagree'); __('I disagree');
# Behaviors
$core->addBehavior(
'publicBeforeDocument',
array('urlDisclaimer', 'publicBeforeDocument')
);
$core->addBehavior(
'publicHeadContent',
array('urlDisclaimer', 'publicHeadContent')
);
# Templates # Templates
$core->tpl->addValue( dcCore::app()->tpl->addValue('DisclaimerTitle', function ($attr) {
'DisclaimerTitle', return '<?php echo ' . sprintf(
array('tplDisclaimer', 'DisclaimerTitle') dcCore::app()->tpl->getFilters($attr),
); 'dcCore::app()->blog->settings->get("disclaimer")->get("disclaimer_title")'
$core->tpl->addValue( ) . '; ?>';
'DisclaimerText', });
array('tplDisclaimer', 'DisclaimerText')
); dcCore::app()->tpl->addValue('DisclaimerText', function ($attr) {
$core->tpl->addValue( return '<?php echo dcCore::app()->blog->settings->get("disclaimer")->get("disclaimer_text"); ?>';
'DisclaimerFormURL', });
array('tplDisclaimer', 'DisclaimerFormURL')
dcCore::app()->tpl->addValue('DisclaimerFormURL', function ($attr) {
return '<?php dcCore::app()->blog->url; ?>';
});
# Behaviors
dcCore::app()->addBehavior('publicHeadContent', function () {
echo dcUtils::cssModuleLoad(basename(__DIR__) . '/css/disclaimer.css');
});
dcCore::app()->addBehavior(
'publicBeforeDocumentV2',
['urlDisclaimer', 'publicBeforeDocumentV2']
); );
/** /**
@ -61,202 +60,137 @@ $core->tpl->addValue(
*/ */
class urlDisclaimer extends dcUrlHandlers class urlDisclaimer extends dcUrlHandlers
{ {
public static $default_bots_agents = array( private const COOKIE_PREFIX = 'dc_disclaimer_cookie_';
'bot','Scooter','Slurp','Voila','WiseNut','Fast','Index','Teoma',
'Mirago','search','find','loader','archive','Spider','Crawler'
);
/** public static $default_bots_agents = [
* Remove public callbacks (and serve disclaimer css) 'bot','Scooter','Slurp','Voila','WiseNut','Fast','Index','Teoma',
* 'Mirago','search','find','loader','archive','Spider','Crawler',
* @param array $args Arguments ];
*/
public static function overwriteCallbacks($args)
{
if ($args == 'disclaimer.css') {
self::serveDocument('disclaimer.css', 'text/css', false);
exit;
}
return null; /**
} * Remove public callbacks (and serve disclaimer css)
*
/** * @param array $args Arguments
* Add CSS for disclaimer */
* public static function overwriteCallbacks($args)
* @param dcCore $core dcCore instance {
* @return [type] [description] if ($args == 'disclaimer.css') {
*/ self::serveDocument('disclaimer.css', 'text/css', false);
public static function publicHeadContent(dcCore $core) exit;
{
$url = $core->blog->getQmarkURL().'pf='.basename(dirname(__FILE__));
echo
'<link rel="stylesheet" type="text/css" media="screen" href="'.$url."/css/disclaimer.css\" />\n";
}
/**
* Check disclaimer
*
* @param array $args Arguments
*/
public static function publicBeforeDocument($args)
{
global $core, $_ctx;
# Test user-agent to see if it is a bot
if (!$core->blog->settings->disclaimer->disclaimer_bots_unactive) {
$bots_agents = $core->blog->settings->disclaimer->diclaimer_bots_agents;
$bots_agents = !$bots_agents ?
self::$default_bots_agents : explode(';', $bots_agents);
$is_bot = false;
foreach($bots_agents as $bot) {
if(stristr($_SERVER['HTTP_USER_AGENT'], $bot)) {
$is_bot = true;
}
}
if ($is_bot) {
return null;
}
}
# Set default-templates path for disclaimer files
$tplset = $core->themes->moduleInfo($core->blog->settings->system->theme,'tplset');
if (!empty($tplset) && is_dir(dirname(__FILE__).'/default-templates/'.$tplset)) {
$core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__).'/default-templates/'.$tplset);
} else {
$core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__).'/default-templates/'.DC_DEFAULT_TPLSET);
} }
# New URL handler return null;
$urlHandler = new urlHandler(); }
$urlHandler->mode = $core->url->mode;
$urlHandler->registerDefault(array(
'urlDisclaimer',
'overwriteCallbacks'
));
# Create session if not exists /**
if (!isset($session)) { * Check disclaimer
$session = new sessionDB( */
$core->con, public static function publicBeforeDocumentV2()
$core->prefix.'session', {
'dc_disclaimer_sess_'.$core->blog->id, $s = dcCore::app()->blog->settings->addNamespace(basename(__DIR__));
'/'
);
$session->start();
}
# Remove all URLs representations # Test user-agent to see if it is a bot
foreach ($core->url->getTypes() as $k => $v) { if (!$s->get('disclaimer_bots_unactive')) {
$urlHandler->register( $bots_agents = $s->get('diclaimer_bots_agents');
$k, $bots_agents = !$bots_agents ? self::$default_bots_agents : explode(';', $bots_agents);
$v['url'],
$v['representation'],
array('urlDisclaimer', 'overwriteCallbacks')
);
}
# Get type $is_bot = false;
$urlHandler->getDocument(); foreach ($bots_agents as $bot) {
$type = $urlHandler->type; if (stristr($_SERVER['HTTP_USER_AGENT'], $bot)) {
unset($urlHandler); $is_bot = true;
}
}
# Test cookie if ($is_bot) {
$cookie_name="dc_disclaimer_cookie_".$core->blog->id; return null;
$cookie_value = }
empty($_COOKIE[$cookie_name]) }
|| !$core->blog->settings->disclaimer->disclaimer_remember ?
false : ($_COOKIE[$cookie_name]) == 1;
# User say "disagree" so go away # Set default-templates path for disclaimer files
if (isset($_POST['disclaimerdisagree'])) { $tplset = dcCore::app()->themes->moduleInfo(dcCore::app()->blog->settings->get('system')->get('theme'), 'tplset');
$session->destroy(); if (!empty($tplset) && is_dir(__DIR__ . '/default-templates/' . $tplset)) {
if ($core->blog->settings->disclaimer->disclaimer_remember) { dcCore::app()->tpl->setPath(dcCore::app()->tpl->getPath(), __DIR__ . '/default-templates/' . $tplset);
setcookie($cookie_name, 0, time()-86400, '/'); } else {
} dcCore::app()->tpl->setPath(dcCore::app()->tpl->getPath(), __DIR__ . '/default-templates/' . DC_DEFAULT_TPLSET);
$redir = $core->blog->settings->disclaimer->disclaimer_redir; }
if (!$redir) {
$redir = 'http://www.dotclear.org';
}
http::redirect($redir);
exit;
}
# Check if user say yes before # New URL handler
elseif (!isset($_SESSION['sess_blog_disclaimer']) $urlHandler = new urlHandler();
|| $_SESSION['sess_blog_disclaimer'] != 1 $urlHandler->mode = dcCore::app()->url->mode;
) { $urlHandler->registerDefault([
if ($core->blog->settings->disclaimer->disclaimer_remember 'urlDisclaimer',
&& $cookie_value != false 'overwriteCallbacks',
) { ]);
$_SESSION['sess_blog_disclaimer'] = 1;
return null; # Create session
} $session = new sessionDB(
if (!empty($_POST['disclaimeragree'])) { dcCore::app()->con,
$_SESSION['sess_blog_disclaimer'] = 1; dcCore::app()->prefix . 'session',
'dc_disclaimer_sess_' . dcCore::app()->blog->id,
'/'
);
$session->start();
if ($core->blog->settings->disclaimer->disclaimer_remember) { # Remove all URLs representations
setcookie($cookie_name, 1, time() + 31536000, '/'); foreach (dcCore::app()->url->getTypes() as $k => $v) {
} $urlHandler->register(
$k,
$v['url'],
$v['representation'],
['urlDisclaimer', 'overwriteCallbacks']
);
}
return null; # Get type
} $urlHandler->getDocument();
$type = $urlHandler->type;
unset($urlHandler);
$session->destroy(); # Test cookie
self::serveDocument('disclaimer.html', 'text/html', false); $cookie_name = self::COOKIE_PREFIX . dcCore::app()->blog->id;
exit; $cookie_value = empty($_COOKIE[$cookie_name]) || !$s->get('disclaimer_remember') ?
} false : ($_COOKIE[$cookie_name]) == 1;
return null; # User say "disagree" so go away
} if (isset($_POST['disclaimerdisagree'])) {
$session->destroy();
if ($s->get('disclaimer_remember')) {
setcookie($cookie_name, '0', time() - 86400, '/');
}
$redir = $s->get('disclaimer_redir');
if (!$redir) {
$redir = 'http://www.dotclear.org';
}
http::redirect($redir);
exit;
}
# Check if user say yes before
elseif (!isset($_SESSION['sess_blog_disclaimer'])
|| $_SESSION['sess_blog_disclaimer'] != 1
) {
if ($s->get('disclaimer_remember')
&& $cookie_value != false
) {
$_SESSION['sess_blog_disclaimer'] = 1;
return null;
}
if (!empty($_POST['disclaimeragree'])) {
$_SESSION['sess_blog_disclaimer'] = 1;
if ($s->get('disclaimer_remember')) {
setcookie($cookie_name, '1', time() + 31536000, '/');
}
return null;
}
$session->destroy();
self::serveDocument('disclaimer.html', 'text/html', false);
exit;
}
return null;
}
} }
/**
* @ingroup DC_PLUGIN_DISCLAIMER
* @brief Public disclaimer - Template.
* @since 2.6
*/
class tplDisclaimer
{
/**
* Public title of disclaimer page and form
*
* @param array $attr Template value attribute
*/
public static function DisclaimerTitle($attr)
{
$f = $GLOBALS['core']->tpl->getFilters($attr);
return
'<?php echo '.sprintf(
$f,
'$core->blog->settings->disclaimer->disclaimer_title'
).'; ?>';
}
/**
* Public disclaimer text
*
* @param array $attr Template value attribute
*/
public static function DisclaimerText($attr)
{
return
'<?php echo $core->blog->settings->disclaimer->disclaimer_text; ?>';
}
/**
* Public URL of disclaimer form action
*
* @param array $attr Template value attribute
*/
public static function DisclaimerFormURL($attr)
{
return '<?php $core->blog->url; ?>';
}
}

View File

@ -1,62 +1,81 @@
<?php <?php
# -- BEGIN LICENSE BLOCK ---------------------------------- /**
# * @brief disclaimer, a plugin for Dotclear 2
# This file is part of disclaimer, a plugin for Dotclear 2. *
# * @package Dotclear
# Copyright (c) 2009-2015 Jean-Christian Denis and contributors * @subpackage Plugin
# *
# Licensed under the GPL version 2.0 license. * @author Jean-Christian Denis, Pierre Van Glabeke
# A copy of this license is available in LICENSE file or at *
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * @copyright Jean-Christian Denis
# * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
# -- END LICENSE BLOCK ------------------------------------ */
if (!defined('DC_CONTEXT_ADMIN')) { if (!defined('DC_CONTEXT_ADMIN')) {
return null;
return null;
} }
$mod_id = 'disclaimer';
$this->addUserAction( $this->addUserAction(
/* type */ 'settings', /* type */
/* action */ 'delete_all', 'settings',
/* ns */ $mod_id, /* action */
/* desc */ __('delete all settings') 'delete_all',
/* ns */
basename(__DIR__),
/* desc */
__('delete all settings')
); );
$this->addUserAction( $this->addUserAction(
/* type */ 'plugins', /* type */
/* action */ 'delete', 'plugins',
/* ns */ $mod_id, /* action */
/* desc */ __('delete plugin files') 'delete',
/* ns */
basename(__DIR__),
/* desc */
__('delete plugin files')
); );
$this->addUserAction( $this->addUserAction(
/* type */ 'versions', /* type */
/* action */ 'delete', 'versions',
/* ns */ $mod_id, /* action */
/* desc */ __('delete the version number') 'delete',
); /* ns */
basename(__DIR__),
/* desc */
$this->addDirectAction( __('delete the version number')
/* type */ 'settings',
/* action */ 'delete_all',
/* ns */ $mod_id,
/* desc */ sprintf(__('delete all %s settings'), $mod_id)
); );
$this->addDirectAction( $this->addDirectAction(
/* type */ 'plugins', /* type */
/* action */ 'delete', 'settings',
/* ns */ $mod_id, /* action */
/* desc */ sprintf(__('delete %s plugin files'), $mod_id) 'delete_all',
/* ns */
basename(__DIR__),
/* desc */
sprintf(__('delete all %s settings'), basename(__DIR__))
); );
$this->addDirectAction( $this->addDirectAction(
/* type */ 'versions', /* type */
/* action */ 'delete', 'plugins',
/* ns */ $mod_id, /* action */
/* desc */ sprintf(__('delete %s version number'), $mod_id) 'delete',
); /* ns */
basename(__DIR__),
/* desc */
sprintf(__('delete %s plugin files'), basename(__DIR__))
);
$this->addDirectAction(
/* type */
'versions',
/* action */
'delete',
/* ns */
basename(__DIR__),
/* desc */
sprintf(__('delete %s version number'), basename(__DIR__))
);

13
dcstore.xml Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0"?>
<modules xmlns:da="http://dotaddict.org/da/">
<module id="disclaimer">
<name>disclaimer</name>
<version>0.10</version>
<author>Jean-Christian Denis, Pierre Van Glabeke</author>
<desc>Add a disclaimer to your blog entrance</desc>
<file>https://github.com/JcDenis/disclaimer/releases/download/v0.10/plugin-disclaimer.zip</file>
<da:dcmin>2.24</da:dcmin>
<da:details>https://github.com/JcDenis/disclaimer</da:details>
<da:support>http://forum.dotclear.org/viewtopic.php?id=40000</da:support>
</module>
</modules>

View File

@ -1,6 +1,12 @@
$(function() { /*global $, dotclear, jsToolBar */
if ($.isFunction(jsToolBar)) { 'use strict';
var tbUser = new jsToolBar(document.getElementById('disclaimer_text'));
tbUser.draw('xhtml'); $(() => {
} if (typeof jsToolBar === 'function') {
$('#disclaimer_text').each(function () {
const tbWidgetTextDisclaimer = new jsToolBar(this);
tbWidgetTextDisclaimer.context = 'disclaimer_text';
tbWidgetTextDisclaimer.draw('xhtml');
});
}
}); });