update to Dotclear 2.24

master
Jean-Christian Paul Denis 2022-11-29 00:14:55 +01:00
parent 7604301111
commit ab1b4ab8c8
Signed by: JcDenis
GPG Key ID: 1B5B8C5B90B6C951
9 changed files with 356 additions and 200 deletions

View File

@ -1,3 +1,7 @@
2022.11.28
* Use SVG icon
* Update to Dotclear 2.24
2013.07.10
* Fixed action on multiple posts

42
README.md 100644
View File

@ -0,0 +1,42 @@
# README
[![Release](https://img.shields.io/github/v/release/JcDenis/postslistOptions)](https://github.com/JcDenis/postslistOptions/releases)
[![Date](https://img.shields.io/github/release-date/JcDenis/postslistOptions)](https://github.com/JcDenis/postslistOptions/releases)
[![Issues](https://img.shields.io/github/issues/JcDenis/postslistOptions)](https://github.com/JcDenis/postslistOptions/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/postslistOptions)
[![License](https://img.shields.io/github/license/JcDenis/postslistOptions)](https://github.com/JcDenis/postslistOptions/blob/master/LICENSE)
## WHAT IS POSTsLISTOPTIONS ?
_Posts list options_ is a plugin for the open-source
web publishing software called Dotclear.
It add options on the posts list action box like
open/close/delete comments/trackbacks on multiple posts.
## REQUIREMENTS
_PostslistOptions_ requires:
* admin permissions
* Dotclear 2.24
## USAGE
First install _PostslistOptions_, manualy from a zip package or from
Dotaddict repository. (See Dotclear's documentation to know how do this)
Then this plugin adds options de the posts list actions box.
## LINKS
* License : [GNU GPL v2](https://www.gnu.org/licenses/old-licenses/lgpl-2.0.html)
* Source & contribution : [GitHub Page](https://github.com/JcDenis/postslistOptions)
* Packages & details : [Dotaddict Page](https://plugins.dotaddict.org/dc2/details/postslistOptions)
## CONTRIBUTORS
* Jean-Christian Denis
You are welcome to contribute to this code.

View File

@ -1,148 +1,221 @@
<?php
# -- BEGIN LICENSE BLOCK ----------------------------------
#
# This file is part of postslistOptions, a plugin for Dotclear 2.
#
# Copyright (c) 2009-2013 Jean-Christian Denis and contributors
# contact@jcdenis.fr http://jcd.lv
#
# 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;}
if (!$core->auth->check('admin',$core->blog->id)) { return; }
$core->addBehavior('adminPostsActionsCombo',array('behaviorsPostlistOptions','adminPostsActionsCombo'));
$core->addBehavior('adminPostsActionsContent',array('behaviorsPostlistOptions','adminPostsActionsContent'));
$core->addBehavior('adminPostsActions',array('behaviorsPostlistOptions','adminPostsActions'));
class behaviorsPostlistOptions
{
public static function adminPostsActionsCombo($args)
{
if (!$GLOBALS['core']->auth->check('admin',$GLOBALS['core']->blog->id)) return;
$args[0][__('Comments')][__('Mark as opened')] = 'commentsopen';
$args[0][__('Comments')][__('Mark as closed')] = 'commentsclose';
$args[0][__('Comments')][__('Delete all comments')] = 'commentsdelete';
$args[0][__('Trackbacks')][__('Mark as opened')] = 'trackbacksopen';
$args[0][__('Trackbacks')][__('Mark as closed')] = 'trackbacksclose';
$args[0][__('Trackbacks')][__('Delete all trackbacks')] = 'trackbacksdelete';
}
public static function adminPostsActionsContent($core,$action,$hidden_fields)
{
$allow = array(
'commentsdelete' => __('Are you sure you want to delete all comments?'),
'trackbacksdelete' => __('Are you sure you want to delete all trackbacks?')
);
if (!isset($allow[$action])
|| !$core->auth->check('admin',$core->blog->id)){ return; }
echo
'<h3>'.__('Confirm action').'</h3>'.
'<form action="posts_actions.php" method="post">'.
'<p>'.$allow[$action].'</p>'.
'<p>'.$hidden_fields.$core->formNonce().
form::hidden(array('action'),'confirmed'.$action).
'<input type="submit" value="'.__('yes').'" /></p>'.
'</form>';
}
public static function adminPostsActions($core,$posts,$action,$redir)
{
$allow = array(
'commentsopen','commentsclose','confirmedcommentsdelete',
'trackbacksopen','trackbacksclose','confirmedtrackbacksdelete'
);
if (!in_array($action,$allow)
|| !$core->auth->check('admin',$core->blog->id)){ return; }
try {
while ($posts->fetch())
{
$id = $posts->post_id;
switch ($action) {
case 'commentsopen' :
self::updPostOption($id,'post_open_comment',1);
break;
case 'commentsclose' :
self::updPostOption($id,'post_open_comment',0);
break;
case 'trackbacksopen' :
self::updPostOption($id,'post_open_tb',1);
break;
case 'trackbacksclose' :
self::updPostOption($id,'post_open_tb',0);
break;
case 'confirmedcommentsdelete' :
self::delPostComments($id,false);
self::updPostOption($id,'nb_comment',0);
break;
case 'confirmedtrackbacksdelete' :
self::delPostComments($id,true);
self::updPostOption($id,'nb_trackback',0);
break;
}
}
if (!$core->error->flag()) {
http::redirect($redir);
}
}
catch (Exception $e)
{
$core->error->add($e->getMessage());
}
}
private static function updPostOption($id,$option,$value)
{
global $core;
if (!$core->auth->check('admin',$core->blog->id)) {
throw new Exception(__('You are not allowed to change this entry option'));
}
$id = abs((integer) $id);
$cur = $core->con->openCursor($core->prefix.'post');
$cur->{$option} = $value;
$cur->post_upddt = date('Y-m-d H:i:s');
$cur->update(
'WHERE post_id = '.$id.' '.
"AND blog_id = '".$core->con->escape($core->blog->id)."' "
);
$core->blog->triggerBlog();
}
private static function delPostComments($id,$tb=false)
{
global $core;
$params = array(
'no_content' => true,
'post_id' => abs((integer) $id),
'comment_trackback' => $tb ? 1: 0
);
$comments = $core->blog->getComments($params);
while($comments->fetch())
{
// slower but preserve core behaviors
$core->blog->delComment($comments->comment_id);
}
}
}
?>
<?php
/**
* @brief postslistOptions, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis and Contributors
*
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
if (!defined('DC_CONTEXT_ADMIN')) {
return null;
}
if (!dcCore::app()->auth->check(dcAuth::PERMISSION_ADMIN, dcCore::app()->blog->id)) {
return null;
}
dcCore::app()->addBehavior('adminPostsActions', function (dcPostsActions $pa) {
$pa->addAction(
[
__('Comments') => [
__('Mark as opened') => 'commentsopen',
],
],
['behaviorsPostlistOptions', 'commentsOpen']
);
$pa->addAction(
[
__('Comments') => [
__('Mark as closed') => 'commentsclose',
],
],
['behaviorsPostlistOptions', 'commentsClose']
);
$pa->addAction(
[
__('Comments') => [
__('Delete all comments') => 'commentsdelete',
],
],
['behaviorsPostlistOptions', 'commentsDelete']
);
$pa->addAction(
[
__('Trackbacks') => [
__('Mark as opened') => 'trackbacksopen',
],
],
['behaviorsPostlistOptions', 'trackbacksOpen']
);
$pa->addAction(
[
__('Trackbacks') => [
__('Mark as closed') => 'trackbacksclose',
],
],
['behaviorsPostlistOptions', 'trackbacksClose']
);
$pa->addAction(
[
__('Trackbacks') => [
__('Delete all trackbacks') => 'trackbacksdelete',
],
],
['behaviorsPostlistOptions', 'trackbacksDelete']
);
});
class behaviorsPostlistOptions
{
public static function commentsOpen(dcPostsActions $pa, ArrayObject $post)
{
foreach (self::getPostsIds($pa) as $post_id) {
self::updPostOption($post_id, 'post_open_comment', 1);
}
dcAdminNotices::addSuccessNotice(__('Comments successfully opened.'));
$pa->redirect(true);
}
public static function commentsClose(dcPostsActions $pa, ArrayObject $post)
{
foreach (self::getPostsIds($pa) as $post_id) {
self::updPostOption($post_id, 'post_open_comment', 0);
}
dcAdminNotices::addSuccessNotice(__('Comments successfully closed.'));
$pa->redirect(true);
}
public static function commentsDelete(dcPostsActions $pa, ArrayObject $post)
{
$ids = self::getPostsIds($pa);
if (empty($_POST['confirmdeletecomments'])) {
$pa->beginPage(
dcPage::breadcrumb([
html::escapeHTML(dcCore::app()->blog->name) => '',
$pa->getCallerTitle() => $pa->getRedirection(true),
__('Delete posts comments') => '',
])
);
echo
'<form action="' . $pa->getURI() . '" method="post">' .
$pa->getCheckboxes() .
'<p>' . __('Are you sure you want to delete all comments?') . '</p>' .
'<p>' .
dcCore::app()->formNonce() .
$pa->getHiddenFields() .
form::hidden(['action'], 'commentsdelete') .
form::hidden(['confirmdeletecomments'], 1) .
'<input type="submit" value="' . __('yes') . '" /></p>' .
'</form>';
$pa->endPage();
} else {
foreach ($ids as $post_id) {
self::delPostComments($post_id, false);
self::updPostOption($post_id, 'nb_comment', 0);
}
dcAdminNotices::addSuccessNotice(__('Comments successfully deleted.'));
$pa->redirect(true);
}
}
public static function trackbacksOpen(dcPostsActions $pa, ArrayObject $post)
{
foreach (self::getPostsIds($pa) as $post_id) {
self::updPostOption($post_id, 'post_open_tb', 1);
}
dcAdminNotices::addSuccessNotice(__('Trackbacks successfully opened.'));
$pa->redirect(true);
}
public static function trackbacksClose(dcPostsActions $pa, ArrayObject $post)
{
foreach (self::getPostsIds($pa) as $post_id) {
self::updPostOption($post_id, 'post_open_tb', 0);
}
dcAdminNotices::addSuccessNotice(__('Trackbacks successfully closed.'));
$pa->redirect(true);
}
public static function trackbacksDelete(dcPostsActions $pa, ArrayObject $post)
{
$ids = self::getPostsIds($pa);
if (empty($_POST['confirmdeletetrackbacks'])) {
$pa->beginPage(
dcPage::breadcrumb([
html::escapeHTML(dcCore::app()->blog->name) => '',
$pa->getCallerTitle() => $pa->getRedirection(true),
__('Delete posts trackbacks') => '',
])
);
echo
'<form action="' . $pa->getURI() . '" method="post">' .
$pa->getCheckboxes() .
'<p>' . __('Are you sure you want to delete all trackbacks?') . '</p>' .
'<p>' .
dcCore::app()->formNonce() .
$pa->getHiddenFields() .
form::hidden(['action'], 'trackbacksdelete') .
form::hidden(['confirmdeletetrackbacks'], 1) .
'<input type="submit" value="' . __('yes') . '" /></p>' .
'</form>';
$pa->endPage();
} else {
foreach ($ids as $post_id) {
self::delPostComments($post_id, true);
self::updPostOption($post_id, 'nb_trackback', 0);
}
dcAdminNotices::addSuccessNotice(__('Trackbacks successfully deleted.'));
$pa->redirect(true);
}
}
private static function getPostsIds(dcPostsActions $pa)
{
$posts_ids = $pa->getIDs();
if (empty($posts_ids)) {
throw new Exception(__('No entry selected'));
}
return $posts_ids;
}
private static function updPostOption($id, $option, $value)
{
$id = abs((int) $id);
$cur = dcCore::app()->con->openCursor(dcCore::app()->prefix . dcBlog::POST_TABLE_NAME);
$cur->{$option} = $value;
$cur->post_upddt = date('Y-m-d H:i:s');
$cur->update(
'WHERE post_id = ' . $id . ' ' .
"AND blog_id = '" . dcCore::app()->con->escape(dcCore::app()->blog->id) . "' "
);
dcCore::app()->blog->triggerBlog();
}
private static function delPostComments($id, $tb = false)
{
$params = [
'no_content' => true,
'post_id' => abs((int) $id),
'comment_trackback' => $tb ? 1 : 0,
];
$comments = dcCore::app()->blog->getComments($params);
while ($comments->fetch()) {
// slower but preserve behaviors
dcCore::app()->blog->delComment($comments->__get('comment_id'));
}
}
}

View File

@ -1,24 +1,30 @@
<?php
# -- BEGIN LICENSE BLOCK ----------------------------------
#
# This file is part of postslistOptions, a plugin for Dotclear 2.
#
# Copyright (c) 2009-2013 Jean-Christian Denis and contributors
# contact@jcdenis.fr http://jcd.lv
#
# 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_RC_PATH')){return;}
$this->registerModule(
/* Name */ "Posts list options",
/* Description*/ "Add some options on admin posts list",
/* Author */ "JC Denis",
/* Version */ '2013.07.10',
/* Permissions */ 'admin'
);
?>
<?php
/**
* @brief postslistOptions, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis and Contributors
*
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
if (!defined('DC_RC_PATH')) {
return null;
}
$this->registerModule(
'Posts list options',
'Add some options on admin posts list',
'Jean-Christian Denis and Contributors',
'2022.11.28',
[
'requires' => [['core', '2.24']],
'permissions' => dcAuth::PERMISSION_ADMIN,
'type' => 'plugin',
'support' => 'https://github.com/JcDenis/postslistOptions',
'details' => 'https://plugins.dotaddict.org/dc2/details/postslistOptions',
'repository' => 'https://raw.githubusercontent.com/JcDenis/postslistOptions/master/dcstore.xml',
]
);

13
dcstore.xml 100644
View File

@ -0,0 +1,13 @@
<?xml version="1.0"?>
<modules xmlns:da="http://dotaddict.org/da/">
<module id="postslistOptions">
<name>Posts list options</name>
<version>2022.11.28</version>
<author>Jean-Christian Denis and Contributors</author>
<desc>Add some options on admin posts list</desc>
<file>https://github.com/JcDenis/postslistOptions/releases/download/v2022.11.28/plugin-postslistOptions.zip</file>
<da:dcmin>2.24</da:dcmin>
<da:details>https://plugins.dotaddict.org/dc2/details/postslistOptions</da:details>
<da:support>https://github.com/JcDenis/postslistOptions</da:support>
</module>
</modules>

BIN
icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 454 B

5
icon.svg 100644
View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
<g><path d="M10,86h863.8v90.9l-863.8,0V86L10,86z M10,358.7h863.8v90.9H10V358.7L10,358.7z M10,631.5h788.4l-95.8,90.9H10V631.5L10,631.5z M990,914H611.2L990,550.4V914z"/></g>
</svg>

After

Width:  |  Height:  |  Size: 517 B

View File

@ -1,8 +1,19 @@
<?php
// Language: Français
/**
* @brief postslistOptions, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis and Contributors
*
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
// Language: Français
// Module: postslistOptions - 0.1
// Date: 2010-09-09 23:05:58
// Translated with dcTranslater - 1.5
// Date: 2010-09-09 23:05:58
// Translated with dcTranslater - 1.5
#_admin.php:27
#_admin.php:30
@ -29,5 +40,3 @@ $GLOBALS['__l10n']['Confirm action'] = 'Confirmation';
#_admin.php:112
$GLOBALS['__l10n']['You are not allowed to change this entry option'] = 'Vous n\'êtes pas autorisé à changer cette option';
?>

View File

@ -1,50 +1,54 @@
# Language: Français
# Module: postslistOptions - 0.1
# Date: 2010-09-09 23:05:58
# Translated with translater 1.5
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: postslistOptions 0.1\n"
"Project-Id-Version: postslistOptions 2022.11.28\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2010-09-09T23:05:58+00:00\n"
"Last-Translator: JC Denis\n"
"PO-Revision-Date: 2022-11-28T23:04:55+00:00\n"
"Last-Translator: Jean-Christian Denis\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: _admin.php:27
#: _admin.php:30
msgid "Mark as opened"
msgstr "Ouvrir"
#: _admin.php:28
#: _admin.php:31
msgid "Mark as closed"
msgstr "Fermer"
#: _admin.php:29
msgid "Delete all comments"
msgstr "Supprimer tous les commentaires"
#: _admin.php:32
msgid "Delete all trackbacks"
msgstr "Supprimer tous les rétroliens"
#: _admin.php:38
msgid "Comments successfully opened."
msgstr "Commentaires ouverts avec succès."
msgid "Comments successfully closed."
msgstr "Commentaires fermés avec succès."
msgid "Delete posts comments"
msgstr "Supprimer les commentaires des billets"
msgid "Are you sure you want to delete all comments?"
msgstr "Êtes-vous sûr de vouloir supprimer tous les commentaires ?"
#: _admin.php:39
msgid "Comments successfully deleted."
msgstr "Commentaires supprimés avec succès."
msgid "Trackbacks successfully opened."
msgstr "Trackbacks ouverts avec succès."
msgid "Trackbacks successfully closed."
msgstr "Trackbacks fermés avec succès."
msgid "Delete posts trackbacks"
msgstr "Supprimer les trackbacks des billets"
msgid "Are you sure you want to delete all trackbacks?"
msgstr "Êtes-vous sûr de vouloir supprimer tous les rétroliens ?"
#: _admin.php:46
msgid "Confirm action"
msgstr "Confirmation"
#: _admin.php:112
msgid "You are not allowed to change this entry option"
msgstr "Vous n'êtes pas autorisé à changer cette option"
msgid "Trackbacks successfully deleted."
msgstr "Trackbacks supprimés avec succès."