code review for dotclear 2.24
This commit is contained in:
parent
c8de8345a1
commit
bb709274b2
9 changed files with 490 additions and 611 deletions
|
@ -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
|
||||
* héritabe thème mustek
|
||||
* dc2.8 requis
|
||||
|
|
|
@ -1,5 +1,12 @@
|
|||
# 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 ?
|
||||
|
||||
"disclaimer" est un plugin pour l'outil open source de
|
||||
|
|
297
_admin.php
297
_admin.php
|
@ -1,207 +1,124 @@
|
|||
<?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 Public disclaimer - Admin methods.
|
||||
* @since 2.6
|
||||
* @brief disclaimer, a plugin for Dotclear 2
|
||||
*
|
||||
* @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
|
||||
{
|
||||
|
||||
/**
|
||||
* 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');
|
||||
if (!defined('DC_CONTEXT_ADMIN')) {
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* 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
|
||||
'<div class="fieldset">'.
|
||||
'<h4>'.__('Disclaimer').'</h4>'.
|
||||
dcCore::app()->addBehavior('adminBeforeBlogSettingsUpdate', function (dcSettings $blog_settings) {
|
||||
$s = $blog_settings->addNamespace(basename(__DIR__));
|
||||
|
||||
'<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">'.
|
||||
form::checkbox(
|
||||
'disclaimer_active',
|
||||
'1',
|
||||
$disclaimer_active
|
||||
).
|
||||
__('Enable disclaimer').'</label></p>'.
|
||||
dcCore::app()->addBehavior('adminBlogPreferencesHeaders', function () {
|
||||
$editor = dcCore::app()->auth->getOption('editor');
|
||||
|
||||
'<p><label for="disclaimer_title">'.
|
||||
__('Title:').
|
||||
'</label>'.
|
||||
form::field(
|
||||
'disclaimer_title',
|
||||
30,
|
||||
255,
|
||||
html::escapeHTML($disclaimer_title)
|
||||
).
|
||||
'</p>'.
|
||||
echo
|
||||
dcCore::app()->callBehavior('adminPostEditor', $editor['xhtml'], 'disclaimer', ['#disclaimer_text'], 'xhtml') .
|
||||
dcPage::jsModuleLoad(basename(__DIR__) . '/js/admin.js');
|
||||
});
|
||||
|
||||
'</div><div class="two-boxes">'.
|
||||
dcCore::app()->addBehavior('adminBlogPreferencesFormV2', function (dcSettings $blog_settings) {
|
||||
$s = $blog_settings->addNamespace(basename(__DIR__));
|
||||
|
||||
'<p><label class="classic">'.
|
||||
form::checkbox(
|
||||
'disclaimer_remember',
|
||||
'1',
|
||||
$disclaimer_remember
|
||||
).
|
||||
__('Remember the visitor').'</label></p>'.
|
||||
$disclaimer_bots_agents = $s->get('disclaimer_bots_agents');
|
||||
if (empty($disclaimer_bots_agents)) {
|
||||
$disclaimer_bots_agents = 'bot;Scooter;Slurp;Voila;WiseNut;Fast;Index;Teoma;' .
|
||||
'Mirago;search;find;loader;archive;Spider;Crawler';
|
||||
}
|
||||
|
||||
'<p><label for="disclaimer_redir">'.
|
||||
__('Link output:').
|
||||
'</label>'.
|
||||
form::field(
|
||||
'disclaimer_redir',
|
||||
30,
|
||||
255,
|
||||
html::escapeHTML($disclaimer_redir)
|
||||
).'</p>'.
|
||||
'<p class="form-note info">'.__('Leave blank to redirect to the site Dotclear').'</p>'.
|
||||
echo
|
||||
'<div class="fieldset">' .
|
||||
'<h4>' . __('Disclaimer') . '</h4>' .
|
||||
'<div class="two-boxes">' .
|
||||
|
||||
'</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">'.
|
||||
__('Disclaimer:').
|
||||
'</label>'.
|
||||
form::textarea(
|
||||
'disclaimer_text',
|
||||
60,
|
||||
5,
|
||||
html::escapeHTML($disclaimer_text)
|
||||
).'</p>'.
|
||||
'<p><label for="disclaimer_title">' . __('Title:') . '</label>' .
|
||||
form::field(
|
||||
'disclaimer_title',
|
||||
30,
|
||||
255,
|
||||
html::escapeHTML((string) $s->get('disclaimer_title'))
|
||||
) .
|
||||
'</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>'.
|
||||
'</div><div class="two-boxes">' .
|
||||
|
||||
'<p><label for="disclaimer_bots_unactive">'.
|
||||
form::checkbox(
|
||||
'disclaimer_bots_unactive',
|
||||
'1',
|
||||
$disclaimer_bots_unactive
|
||||
).
|
||||
__('Disable the authorization of indexing by search engines').
|
||||
'</label></p>'.
|
||||
'<p><label class="classic">' .
|
||||
form::checkbox(
|
||||
'disclaimer_remember',
|
||||
'1',
|
||||
(bool) $s->get('disclaimer_remember')
|
||||
) .
|
||||
__('Remember the visitor') . '</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>';
|
||||
});
|
||||
|
|
60
_define.php
60
_define.php
|
@ -1,36 +1,32 @@
|
|||
<?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 ------------------------------------
|
||||
|
||||
/**
|
||||
* @brief disclaimer, a plugin for Dotclear 2
|
||||
*
|
||||
* @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
|
||||
*/
|
||||
if (!defined('DC_RC_PATH')) {
|
||||
|
||||
return null;
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
$this->registerModule(
|
||||
/* Name */
|
||||
"disclaimer",
|
||||
/* Description*/
|
||||
"Add a disclaimer to your blog entrance",
|
||||
/* Author */
|
||||
"Jean-Christian Denis, Pierre Van Glabeke",
|
||||
/* Version */
|
||||
'0.9',
|
||||
/* Properties */
|
||||
array(
|
||||
'permissions' => 'admin',
|
||||
'type' => 'plugin',
|
||||
'dc_min' => '2.8',
|
||||
'support' => 'http://forum.dotclear.org/viewtopic.php?id=40000',
|
||||
'details' => 'http://plugins.dotaddict.org/dc2/details/disclaimer'
|
||||
)
|
||||
);
|
||||
'disclaimer',
|
||||
'Add a disclaimer to your blog entrance',
|
||||
'Jean-Christian Denis, Pierre Van Glabeke',
|
||||
'0.10',
|
||||
[
|
||||
'requires' => [['core', '2.24']],
|
||||
'permissions' => dcCore::app()->auth->makePermissions([
|
||||
dcAuth::PERMISSION_ADMIN,
|
||||
]),
|
||||
'type' => 'plugin',
|
||||
'support' => 'http://forum.dotclear.org/viewtopic.php?id=40000',
|
||||
'details' => 'https://github.com/JcDenis/' . basename(__DIR__),
|
||||
'repository' => 'https://raw.githubusercontent.com/JcDenis/' . basename(__DIR__) . '/master/dcstore.xml',
|
||||
]
|
||||
);
|
||||
|
|
215
_install.php
215
_install.php
|
@ -1,127 +1,108 @@
|
|||
<?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 ------------------------------------
|
||||
|
||||
/**
|
||||
* @brief disclaimer, a plugin for Dotclear 2
|
||||
*
|
||||
* @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
|
||||
*/
|
||||
if (!defined('DC_CONTEXT_ADMIN')) {
|
||||
|
||||
return null;
|
||||
return null;
|
||||
}
|
||||
|
||||
# -- Module specs --
|
||||
|
||||
$dc_min = '2.7';
|
||||
$mod_id = 'disclaimer';
|
||||
$mod_conf = array(
|
||||
array(
|
||||
'disclaimer_active',
|
||||
'Enable disclaimer plugin',
|
||||
false,
|
||||
'boolean'
|
||||
),
|
||||
array(
|
||||
'disclaimer_remember',
|
||||
'Remember the visitor who has already accepted the terms',
|
||||
false,
|
||||
'boolean'
|
||||
),
|
||||
array(
|
||||
'disclaimer_redir',
|
||||
'Redirection if disclaimer is refused',
|
||||
'https://www.google.fr',
|
||||
'string'
|
||||
),
|
||||
array(
|
||||
'disclaimer_title',
|
||||
'Title for disclaimer',
|
||||
'Disclaimer',
|
||||
'string'
|
||||
),
|
||||
array(
|
||||
'disclaimer_text',
|
||||
'Description for disclaimer',
|
||||
__('<p>You must accept this term before entering</p>'),
|
||||
//'You must accept this term before entering',
|
||||
'string'
|
||||
),
|
||||
array(
|
||||
'disclaimer_bots_unactive',
|
||||
'Bypass disclaimer for bots',
|
||||
false,
|
||||
'boolean'
|
||||
),
|
||||
array(
|
||||
'disclaimer_bots_agents',
|
||||
'List of know bots',
|
||||
implode(';', array(
|
||||
'bot',
|
||||
'Scooter',
|
||||
'Slurp',
|
||||
'Voila',
|
||||
'WiseNut',
|
||||
'Fast',
|
||||
'Index',
|
||||
'Teoma',
|
||||
'Mirago',
|
||||
'search',
|
||||
'find',
|
||||
'loader',
|
||||
'archive',
|
||||
'Spider',
|
||||
'Crawler'
|
||||
)),
|
||||
'string'
|
||||
)
|
||||
);
|
||||
|
||||
# -- Nothing to change below --
|
||||
// Module specs
|
||||
$mod_conf = [
|
||||
[
|
||||
'disclaimer_active',
|
||||
'Enable disclaimer plugin',
|
||||
false,
|
||||
'boolean',
|
||||
],
|
||||
[
|
||||
'disclaimer_remember',
|
||||
'Remember the visitor who has already accepted the terms',
|
||||
false,
|
||||
'boolean',
|
||||
],
|
||||
[
|
||||
'disclaimer_redir',
|
||||
'Redirection if disclaimer is refused',
|
||||
'https://www.google.fr',
|
||||
'string',
|
||||
],
|
||||
[
|
||||
'disclaimer_title',
|
||||
'Title for disclaimer',
|
||||
'Disclaimer',
|
||||
'string',
|
||||
],
|
||||
[
|
||||
'disclaimer_text',
|
||||
'Description for disclaimer',
|
||||
__('<p>You must accept this term before entering</p>'),
|
||||
//'You must accept this term before entering',
|
||||
'string',
|
||||
],
|
||||
[
|
||||
'disclaimer_bots_unactive',
|
||||
'Bypass disclaimer for bots',
|
||||
false,
|
||||
'boolean',
|
||||
],
|
||||
[
|
||||
'disclaimer_bots_agents',
|
||||
'List of know bots',
|
||||
implode(';', [
|
||||
'bot',
|
||||
'Scooter',
|
||||
'Slurp',
|
||||
'Voila',
|
||||
'WiseNut',
|
||||
'Fast',
|
||||
'Index',
|
||||
'Teoma',
|
||||
'Mirago',
|
||||
'search',
|
||||
'find',
|
||||
'loader',
|
||||
'archive',
|
||||
'Spider',
|
||||
'Crawler',
|
||||
]),
|
||||
'string',
|
||||
],
|
||||
];
|
||||
|
||||
// Nothing to change below
|
||||
try {
|
||||
// Version
|
||||
if (!dcCore::app()->newVersion(
|
||||
basename(__DIR__),
|
||||
dcCore::app()->plugins->moduleInfo(basename(__DIR__), 'version')
|
||||
)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
# Check module version
|
||||
if (version_compare(
|
||||
$core->getVersion($mod_id),
|
||||
$core->plugins->moduleInfo($mod_id, 'version'),
|
||||
'>='
|
||||
)) {
|
||||
// Settings
|
||||
dcCore::app()->blog->settings->addNamespace(basename(__DIR__));
|
||||
foreach ($mod_conf as $v) {
|
||||
dcCore::app()->blog->settings->get(basename(__DIR__))->put(
|
||||
$v[0],
|
||||
$v[2],
|
||||
$v[3],
|
||||
$v[1],
|
||||
false,
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
# 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;
|
||||
return true;
|
||||
} catch (Exception $e) {
|
||||
dcCore::app()->error->add($e->getMessage());
|
||||
}
|
||||
catch (Exception $e) {
|
||||
$core->error->add($e->getMessage());
|
||||
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
|
|
378
_public.php
378
_public.php
|
@ -1,27 +1,24 @@
|
|||
<?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 ------------------------------------
|
||||
|
||||
/**
|
||||
* @brief disclaimer, a plugin for Dotclear 2
|
||||
*
|
||||
* @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
|
||||
*/
|
||||
if (!defined('DC_RC_PATH')) {
|
||||
|
||||
return null;
|
||||
return null;
|
||||
}
|
||||
|
||||
$core->blog->settings->addNamespace('disclaimer');
|
||||
dcCore::app()->blog->settings->addNamespace(basename(__DIR__));
|
||||
|
||||
# Is active
|
||||
if (!$core->blog->settings->disclaimer->disclaimer_active) {
|
||||
|
||||
return null;
|
||||
if (!dcCore::app()->blog->settings->get(basename(__DIR__))->get('disclaimer_active')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
# Localized l10n
|
||||
|
@ -30,28 +27,30 @@ __('Accept terms of uses');
|
|||
__('I agree');
|
||||
__('I disagree');
|
||||
|
||||
# Behaviors
|
||||
$core->addBehavior(
|
||||
'publicBeforeDocument',
|
||||
array('urlDisclaimer', 'publicBeforeDocument')
|
||||
);
|
||||
$core->addBehavior(
|
||||
'publicHeadContent',
|
||||
array('urlDisclaimer', 'publicHeadContent')
|
||||
);
|
||||
|
||||
# Templates
|
||||
$core->tpl->addValue(
|
||||
'DisclaimerTitle',
|
||||
array('tplDisclaimer', 'DisclaimerTitle')
|
||||
);
|
||||
$core->tpl->addValue(
|
||||
'DisclaimerText',
|
||||
array('tplDisclaimer', 'DisclaimerText')
|
||||
);
|
||||
$core->tpl->addValue(
|
||||
'DisclaimerFormURL',
|
||||
array('tplDisclaimer', 'DisclaimerFormURL')
|
||||
dcCore::app()->tpl->addValue('DisclaimerTitle', function ($attr) {
|
||||
return '<?php echo ' . sprintf(
|
||||
dcCore::app()->tpl->getFilters($attr),
|
||||
'dcCore::app()->blog->settings->get("disclaimer")->get("disclaimer_title")'
|
||||
) . '; ?>';
|
||||
});
|
||||
|
||||
dcCore::app()->tpl->addValue('DisclaimerText', function ($attr) {
|
||||
return '<?php echo dcCore::app()->blog->settings->get("disclaimer")->get("disclaimer_text"); ?>';
|
||||
});
|
||||
|
||||
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
|
||||
{
|
||||
public static $default_bots_agents = array(
|
||||
'bot','Scooter','Slurp','Voila','WiseNut','Fast','Index','Teoma',
|
||||
'Mirago','search','find','loader','archive','Spider','Crawler'
|
||||
);
|
||||
private const COOKIE_PREFIX = 'dc_disclaimer_cookie_';
|
||||
|
||||
/**
|
||||
* Remove public callbacks (and serve disclaimer css)
|
||||
*
|
||||
* @param array $args Arguments
|
||||
*/
|
||||
public static function overwriteCallbacks($args)
|
||||
{
|
||||
if ($args == 'disclaimer.css') {
|
||||
self::serveDocument('disclaimer.css', 'text/css', false);
|
||||
exit;
|
||||
}
|
||||
public static $default_bots_agents = [
|
||||
'bot','Scooter','Slurp','Voila','WiseNut','Fast','Index','Teoma',
|
||||
'Mirago','search','find','loader','archive','Spider','Crawler',
|
||||
];
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add CSS for disclaimer
|
||||
*
|
||||
* @param dcCore $core dcCore instance
|
||||
* @return [type] [description]
|
||||
*/
|
||||
public static function publicHeadContent(dcCore $core)
|
||||
{
|
||||
$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);
|
||||
/**
|
||||
* Remove public callbacks (and serve disclaimer css)
|
||||
*
|
||||
* @param array $args Arguments
|
||||
*/
|
||||
public static function overwriteCallbacks($args)
|
||||
{
|
||||
if ($args == 'disclaimer.css') {
|
||||
self::serveDocument('disclaimer.css', 'text/css', false);
|
||||
exit;
|
||||
}
|
||||
|
||||
# New URL handler
|
||||
$urlHandler = new urlHandler();
|
||||
$urlHandler->mode = $core->url->mode;
|
||||
$urlHandler->registerDefault(array(
|
||||
'urlDisclaimer',
|
||||
'overwriteCallbacks'
|
||||
));
|
||||
return null;
|
||||
}
|
||||
|
||||
# Create session if not exists
|
||||
if (!isset($session)) {
|
||||
$session = new sessionDB(
|
||||
$core->con,
|
||||
$core->prefix.'session',
|
||||
'dc_disclaimer_sess_'.$core->blog->id,
|
||||
'/'
|
||||
);
|
||||
$session->start();
|
||||
}
|
||||
/**
|
||||
* Check disclaimer
|
||||
*/
|
||||
public static function publicBeforeDocumentV2()
|
||||
{
|
||||
$s = dcCore::app()->blog->settings->addNamespace(basename(__DIR__));
|
||||
|
||||
# Remove all URLs representations
|
||||
foreach ($core->url->getTypes() as $k => $v) {
|
||||
$urlHandler->register(
|
||||
$k,
|
||||
$v['url'],
|
||||
$v['representation'],
|
||||
array('urlDisclaimer', 'overwriteCallbacks')
|
||||
);
|
||||
}
|
||||
# Test user-agent to see if it is a bot
|
||||
if (!$s->get('disclaimer_bots_unactive')) {
|
||||
$bots_agents = $s->get('diclaimer_bots_agents');
|
||||
$bots_agents = !$bots_agents ? self::$default_bots_agents : explode(';', $bots_agents);
|
||||
|
||||
# Get type
|
||||
$urlHandler->getDocument();
|
||||
$type = $urlHandler->type;
|
||||
unset($urlHandler);
|
||||
$is_bot = false;
|
||||
foreach ($bots_agents as $bot) {
|
||||
if (stristr($_SERVER['HTTP_USER_AGENT'], $bot)) {
|
||||
$is_bot = true;
|
||||
}
|
||||
}
|
||||
|
||||
# Test cookie
|
||||
$cookie_name="dc_disclaimer_cookie_".$core->blog->id;
|
||||
$cookie_value =
|
||||
empty($_COOKIE[$cookie_name])
|
||||
|| !$core->blog->settings->disclaimer->disclaimer_remember ?
|
||||
false : ($_COOKIE[$cookie_name]) == 1;
|
||||
if ($is_bot) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
# User say "disagree" so go away
|
||||
if (isset($_POST['disclaimerdisagree'])) {
|
||||
$session->destroy();
|
||||
if ($core->blog->settings->disclaimer->disclaimer_remember) {
|
||||
setcookie($cookie_name, 0, time()-86400, '/');
|
||||
}
|
||||
$redir = $core->blog->settings->disclaimer->disclaimer_redir;
|
||||
if (!$redir) {
|
||||
$redir = 'http://www.dotclear.org';
|
||||
}
|
||||
http::redirect($redir);
|
||||
exit;
|
||||
}
|
||||
# Set default-templates path for disclaimer files
|
||||
$tplset = dcCore::app()->themes->moduleInfo(dcCore::app()->blog->settings->get('system')->get('theme'), 'tplset');
|
||||
if (!empty($tplset) && is_dir(__DIR__ . '/default-templates/' . $tplset)) {
|
||||
dcCore::app()->tpl->setPath(dcCore::app()->tpl->getPath(), __DIR__ . '/default-templates/' . $tplset);
|
||||
} else {
|
||||
dcCore::app()->tpl->setPath(dcCore::app()->tpl->getPath(), __DIR__ . '/default-templates/' . DC_DEFAULT_TPLSET);
|
||||
}
|
||||
|
||||
# Check if user say yes before
|
||||
elseif (!isset($_SESSION['sess_blog_disclaimer'])
|
||||
|| $_SESSION['sess_blog_disclaimer'] != 1
|
||||
) {
|
||||
if ($core->blog->settings->disclaimer->disclaimer_remember
|
||||
&& $cookie_value != false
|
||||
) {
|
||||
$_SESSION['sess_blog_disclaimer'] = 1;
|
||||
# New URL handler
|
||||
$urlHandler = new urlHandler();
|
||||
$urlHandler->mode = dcCore::app()->url->mode;
|
||||
$urlHandler->registerDefault([
|
||||
'urlDisclaimer',
|
||||
'overwriteCallbacks',
|
||||
]);
|
||||
|
||||
return null;
|
||||
}
|
||||
if (!empty($_POST['disclaimeragree'])) {
|
||||
$_SESSION['sess_blog_disclaimer'] = 1;
|
||||
# Create session
|
||||
$session = new sessionDB(
|
||||
dcCore::app()->con,
|
||||
dcCore::app()->prefix . 'session',
|
||||
'dc_disclaimer_sess_' . dcCore::app()->blog->id,
|
||||
'/'
|
||||
);
|
||||
$session->start();
|
||||
|
||||
if ($core->blog->settings->disclaimer->disclaimer_remember) {
|
||||
setcookie($cookie_name, 1, time() + 31536000, '/');
|
||||
}
|
||||
# Remove all URLs representations
|
||||
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();
|
||||
self::serveDocument('disclaimer.html', 'text/html', false);
|
||||
exit;
|
||||
}
|
||||
# Test cookie
|
||||
$cookie_name = self::COOKIE_PREFIX . dcCore::app()->blog->id;
|
||||
$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; ?>';
|
||||
}
|
||||
}
|
109
_uninstall.php
109
_uninstall.php
|
@ -1,62 +1,81 @@
|
|||
<?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 ------------------------------------
|
||||
|
||||
/**
|
||||
* @brief disclaimer, a plugin for Dotclear 2
|
||||
*
|
||||
* @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
|
||||
*/
|
||||
if (!defined('DC_CONTEXT_ADMIN')) {
|
||||
|
||||
return null;
|
||||
return null;
|
||||
}
|
||||
|
||||
$mod_id = 'disclaimer';
|
||||
|
||||
$this->addUserAction(
|
||||
/* type */ 'settings',
|
||||
/* action */ 'delete_all',
|
||||
/* ns */ $mod_id,
|
||||
/* desc */ __('delete all settings')
|
||||
/* type */
|
||||
'settings',
|
||||
/* action */
|
||||
'delete_all',
|
||||
/* ns */
|
||||
basename(__DIR__),
|
||||
/* desc */
|
||||
__('delete all settings')
|
||||
);
|
||||
|
||||
$this->addUserAction(
|
||||
/* type */ 'plugins',
|
||||
/* action */ 'delete',
|
||||
/* ns */ $mod_id,
|
||||
/* desc */ __('delete plugin files')
|
||||
/* type */
|
||||
'plugins',
|
||||
/* action */
|
||||
'delete',
|
||||
/* ns */
|
||||
basename(__DIR__),
|
||||
/* desc */
|
||||
__('delete plugin files')
|
||||
);
|
||||
|
||||
$this->addUserAction(
|
||||
/* type */ 'versions',
|
||||
/* action */ 'delete',
|
||||
/* ns */ $mod_id,
|
||||
/* desc */ __('delete the version number')
|
||||
);
|
||||
|
||||
|
||||
$this->addDirectAction(
|
||||
/* type */ 'settings',
|
||||
/* action */ 'delete_all',
|
||||
/* ns */ $mod_id,
|
||||
/* desc */ sprintf(__('delete all %s settings'), $mod_id)
|
||||
/* type */
|
||||
'versions',
|
||||
/* action */
|
||||
'delete',
|
||||
/* ns */
|
||||
basename(__DIR__),
|
||||
/* desc */
|
||||
__('delete the version number')
|
||||
);
|
||||
|
||||
$this->addDirectAction(
|
||||
/* type */ 'plugins',
|
||||
/* action */ 'delete',
|
||||
/* ns */ $mod_id,
|
||||
/* desc */ sprintf(__('delete %s plugin files'), $mod_id)
|
||||
/* type */
|
||||
'settings',
|
||||
/* action */
|
||||
'delete_all',
|
||||
/* ns */
|
||||
basename(__DIR__),
|
||||
/* desc */
|
||||
sprintf(__('delete all %s settings'), basename(__DIR__))
|
||||
);
|
||||
|
||||
$this->addDirectAction(
|
||||
/* type */ 'versions',
|
||||
/* action */ 'delete',
|
||||
/* ns */ $mod_id,
|
||||
/* desc */ sprintf(__('delete %s version number'), $mod_id)
|
||||
);
|
||||
/* type */
|
||||
'plugins',
|
||||
/* action */
|
||||
'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
13
dcstore.xml
Normal 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>
|
16
js/admin.js
16
js/admin.js
|
@ -1,6 +1,12 @@
|
|||
$(function() {
|
||||
if ($.isFunction(jsToolBar)) {
|
||||
var tbUser = new jsToolBar(document.getElementById('disclaimer_text'));
|
||||
tbUser.draw('xhtml');
|
||||
}
|
||||
/*global $, dotclear, jsToolBar */
|
||||
'use strict';
|
||||
|
||||
$(() => {
|
||||
if (typeof jsToolBar === 'function') {
|
||||
$('#disclaimer_text').each(function () {
|
||||
const tbWidgetTextDisclaimer = new jsToolBar(this);
|
||||
tbWidgetTextDisclaimer.context = 'disclaimer_text';
|
||||
tbWidgetTextDisclaimer.draw('xhtml');
|
||||
});
|
||||
}
|
||||
});
|
Loading…
Reference in a new issue