first commit from emailNotification 1.1

This commit is contained in:
Jean-Christian Paul Denis 2022-12-07 23:01:33 +01:00
commit 8e1528fa4c
Signed by: JcDenis
GPG Key ID: 1B5B8C5B90B6C951
7 changed files with 368 additions and 0 deletions

18
_admin.php Normal file
View File

@ -0,0 +1,18 @@
<?php
# -- BEGIN LICENSE BLOCK ----------------------------------
#
# This file is part of emailNotification, a plugin for Dotclear 2.
#
# Copyright (c) Olivier Meunier and contributors
# Licensed under the GPL version 2.0 license.
# See LICENSE file or
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_CONTEXT_ADMIN')) { return; }
$core->addBehavior('adminPreferencesForm',array('notificationBehaviors','adminUserForm'));
$core->addBehavior('adminUserForm',array('notificationBehaviors','adminUserForm')); // user.php
$core->addBehavior('adminBeforeUserUpdate',array('notificationBehaviors','adminBeforeUserUpdate'));
$core->addBehavior('adminBeforeUserOptionsUpdate',array('notificationBehaviors','adminBeforeUserUpdate')); //preferences.php

27
_define.php Normal file
View File

@ -0,0 +1,27 @@
<?php
# -- BEGIN LICENSE BLOCK ----------------------------------
#
# This file is part of emailNotification, a plugin for Dotclear 2.
#
# Copyright (c) Olivier Meunier and contributors
# Licensed under the GPL version 2.0 license.
# See LICENSE file or
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_RC_PATH')) { return; }
$this->registerModule(
/* Name */ "Email notification",
/* Description*/ "Email notification",
/* Author */ "Olivier Meunier",
/* Version */ '1.1',
/* Properties */
array(
'permissions' => 'usage,contentadmin',
'type' => 'plugin',
'dc_min' => '2.6',
'support' => 'http://forum.dotclear.org/viewforum.php?id=16',
'details' => 'http://plugins.dotaddict.org/dc2/details/emailNotification'
)
);

14
_prepend.php Normal file
View File

@ -0,0 +1,14 @@
<?php
# -- BEGIN LICENSE BLOCK ----------------------------------
#
# This file is part of emailNotification, a plugin for Dotclear 2.
#
# Copyright (c) Olivier Meunier and contributors
# Licensed under the GPL version 2.0 license.
# See LICENSE file or
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_RC_PATH')) { return; }
$GLOBALS['__autoload']['notificationBehaviors'] = dirname(__FILE__).'/behaviors.php';

14
_public.php Normal file
View File

@ -0,0 +1,14 @@
<?php
# -- BEGIN LICENSE BLOCK ----------------------------------
#
# This file is part of emailNotification, a plugin for Dotclear 2.
#
# Copyright (c) Olivier Meunier and contributors
# Licensed under the GPL version 2.0 license.
# See LICENSE file or
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_RC_PATH')) { return; }
$core->addBehavior('publicAfterCommentCreate',array('notificationBehaviors','publicAfterCommentCreate'));

153
behaviors.php Normal file
View File

@ -0,0 +1,153 @@
<?php
# -- BEGIN LICENSE BLOCK ----------------------------------
#
# This file is part of emailNotification, a plugin for Dotclear 2.
#
# Copyright (c) Olivier Meunier and contributors
# Licensed under the GPL version 2.0 license.
# See LICENSE file or
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_RC_PATH')) {return;}
class notificationBehaviors
{
public static function adminUserForm($core)
{
global $user_options;
$notify_comments = !empty($user_options['notify_comments']) ? $user_options['notify_comments'] : '0';
$opt = array(
__('Never') => '0',
__('My entries') => 'mine',
__('All entries') => 'all'
);
echo
'<div class="fieldset"><h5>'.__('Email notification').'</h5>'.
'<p><label class="classic" for="notify_comments">'.__('Notify new comments by email:').' '.
form::combo('notify_comments',$opt,$notify_comments).
'</label></p>'.
'</div>';
}
public static function adminBeforeUserUpdate($cur,$user_id='')
{
$cur->user_options['notify_comments'] = $_POST['notify_comments'];
}
public static function publicAfterCommentCreate($cur,$comment_id)
{
# We don't want notification for spam
if ($cur->comment_status == -2) {
return;
}
global $core;
# Information on comment author and post author
$rs = $core->auth->sudo(array($core->blog,'getComments'), array('comment_id'=>$comment_id));
if ($rs->isEmpty()) {
return;
}
# Information on blog users
$strReq =
'SELECT U.user_id, user_email, user_options '.
'FROM '.$core->blog->prefix.'user U JOIN '.$core->blog->prefix.'permissions P ON U.user_id = P.user_id '.
"WHERE blog_id = '".$core->con->escape($core->blog->id)."' ".
'UNION '.
'SELECT user_id, user_email, user_options '.
'FROM '.$core->blog->prefix.'user '.
'WHERE user_super = 1 ';
$users = $core->con->select($strReq);
# Create notify list
$ulist = array();
while ($users->fetch()) {
if (!$users->user_email) {
continue;
}
$notification_pref = self::notificationPref(rsExtUser::options($users));
if ($notification_pref == 'all'
|| ($notification_pref == 'mine' && $users->user_id == $rs->user_id) )
{
$ulist[$users->user_id] = $users->user_email;
}
}
if (count($ulist) > 0)
{
# Author of the post wants to be notified by mail
$headers = array(
'Reply-To: '.$rs->comment_email,
'Content-Type: text/plain; charset=UTF-8;',
'X-Mailer: Dotclear',
'X-Blog-Id: '.mail::B64Header($core->blog->id),
'X-Blog-Name: '.mail::B64Header($core->blog->name),
'X-Blog-Url: '.mail::B64Header($core->blog->url)
);
$subject = '['.$core->blog->name.'] '.sprintf(__('"%s" - New comment'),$rs->post_title);
$subject = mail::B64Header($subject);
$msg = preg_replace('%</p>\s*<p>%msu',"\n\n",$rs->comment_content);
$msg = html::clean($msg);
$msg = html_entity_decode($msg);
if ($cur->comment_status == 1)
{
$status = __('published');
}
elseif ($cur->comment_status == 0)
{
$status = __('unpublished');
}
elseif ($cur->comment_status == -1)
{
$status = __('pending');
}
else
{
# unknown status
$status = $cur->comment_status;
}
$msg .= "\n\n-- \n".
sprintf(__('Blog: %s'),$core->blog->name)."\n".
sprintf(__('Entry: %s <%s>'),$rs->post_title,$rs->getPostURL())."\n".
sprintf(__('Comment by: %s <%s>'),$rs->comment_author,$rs->comment_email)."\n".
sprintf(__('Website: %s'),$rs->getAuthorURL())."\n".
sprintf(__('Comment status: %s'),$status)."\n".
sprintf(__('Edit this comment: <%s>'),DC_ADMIN_URL.
((substr(DC_ADMIN_URL,-1) != '/') ? '/' : '').
'comment.php?id='.$cur->comment_id.
'&switchblog='.$core->blog->id)."\n".
__('You must log in on the backend before clicking on this link to go directly to the comment.');
$msg = __('You received a new comment on your blog:')."\n\n".$msg;
# --BEHAVIOR-- emailNotificationAppendToEmail
$msg .= $core->callBehavior('emailNotificationAppendToEmail',$cur);
foreach ($ulist as $email) {
$h = array_merge(array('From: '.$email),$headers);
mail::sendMail($email,$subject,$msg,$h);
}
}
}
protected static function notificationPref($o)
{
if (is_array($o) && isset($o['notify_comments'])) {
return $o['notify_comments'];
}
return null;
}
}

76
locales/_pot/main.pot Normal file
View File

@ -0,0 +1,76 @@
# SOME DESCRIPTIVE TITLE.
# This file is put in the public domain.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Dotclear 2 emailNotification module\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-07-10 07:59+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../hg-plugins/emailNotification//behaviors.php:24
msgid "My entries"
msgstr ""
#: ../hg-plugins/emailNotification//behaviors.php:25
msgid "All entries"
msgstr ""
#: ../hg-plugins/emailNotification//behaviors.php:29
msgid "Email notification"
msgstr ""
#: ../hg-plugins/emailNotification//behaviors.php:30
msgid "Notify new comments by email:"
msgstr ""
#: ../hg-plugins/emailNotification//behaviors.php:97
#, php-format
msgid "\"%s\" - New comment"
msgstr ""
#: ../hg-plugins/emailNotification//behaviors.php:123
#, php-format
msgid "Blog: %s"
msgstr ""
#: ../hg-plugins/emailNotification//behaviors.php:124
#, php-format
msgid "Entry: %s <%s>"
msgstr ""
#: ../hg-plugins/emailNotification//behaviors.php:125
#, php-format
msgid "Comment by: %s <%s>"
msgstr ""
#: ../hg-plugins/emailNotification//behaviors.php:126
#, php-format
msgid "Website: %s"
msgstr ""
#: ../hg-plugins/emailNotification//behaviors.php:127
#, php-format
msgid "Comment status: %s"
msgstr ""
#: ../hg-plugins/emailNotification//behaviors.php:128
#, php-format
msgid "Edit this comment: <%s>"
msgstr ""
#: ../hg-plugins/emailNotification//behaviors.php:132
msgid "You must log in on the backend before clicking on this link to go directly to the comment."
msgstr ""
#: ../hg-plugins/emailNotification//behaviors.php:134
msgid "You received a new comment on your blog:"
msgstr ""

66
locales/fr/main.po Normal file
View File

@ -0,0 +1,66 @@
# SOME DESCRIPTIVE TITLE.
# This file is put in the public domain.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Dotclear 2 emailNotification module\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-07-10 07:59+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "Never"
msgstr "Jamais"
msgid "My entries"
msgstr "Mes billets"
msgid "All entries"
msgstr "Tous les billets"
msgid "Email notification"
msgstr "Notification par e-mail"
msgid "Notify new comments by email:"
msgstr "Avertir des nouveaux commentaires par e-mail :"
#, php-format
msgid "\"%s\" - New comment"
msgstr "\"%s\" - Nouveau commentaire"
#, php-format
msgid "Blog: %s"
msgstr "Blog : %s"
#, php-format
msgid "Entry: %s <%s>"
msgstr "Billet : %s <%s>"
#, php-format
msgid "Comment by: %s <%s>"
msgstr "Commentaire par : %s <%s>"
#, php-format
msgid "Website: %s"
msgstr "Site web : %s"
#, php-format
msgid "Comment status: %s"
msgstr "Statut du commentaire : %s"
#, php-format
msgid "Edit this comment: <%s>"
msgstr "Modifier ce commentaire : %s"
msgid "You must log in on the backend before clicking on this link to go directly to the comment."
msgstr "Vous devez vous enregistrer sur l'interface d'administration avant de cliquer sur ce lien pour aller directement sur ce commentaire."
msgid "You received a new comment on your blog:"
msgstr "Vous avez reçu un nouveau commentaire sur votre blog :"