Third pass to clean up code

This commit is contained in:
Jean-Christian Paul Denis 2021-09-03 09:45:21 +02:00
parent 60289b71c4
commit 8b50811b0b
4 changed files with 515 additions and 584 deletions

View File

@ -11,13 +11,16 @@
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_RC_PATH')){return;} if (!defined('DC_RC_PATH')) {
return null;
}
if (!defined('ACTIVITY_REPORT')){return;} if (!defined('ACTIVITY_REPORT')) {
return null;
}
/* ActivityReport plugin // ActivityReport plugin
-------------------------*/ $core->activityReport->addGroup('activityReport', __('ActivityReport messages'));
$core->activityReport->addGroup('activityReport',__('ActivityReport messages'));
$core->activityReport->addAction( $core->activityReport->addAction(
'activityReport', 'activityReport',
@ -25,194 +28,189 @@ $core->activityReport->addAction(
__('Special messages'), __('Special messages'),
__('%s'), __('%s'),
'messageActivityReport', 'messageActivityReport',
array('activityReportBehaviors','messageActivityReport') ['activityReportBehaviors', 'messageActivityReport']
); );
/* Blog // Blog
-------------------------*/ $core->activityReport->addGroup('blog', __('Actions on blog'));
$core->activityReport->addGroup('blog',__('Actions on blog'));
# Not use as it is global : BEHAVIOR adminAfterBlogCreate in admin/blog.php // Not use as it is global : BEHAVIOR adminAfterBlogCreate in admin/blog.php
# from BEHAVIOR adminAfterBlogUpdate in admin/blog_pref.php // from BEHAVIOR adminAfterBlogUpdate in admin/blog_pref.php
$core->activityReport->addAction( $core->activityReport->addAction(
'blog', 'blog',
'update', 'update',
__('updating blog'), __('updating blog'),
__('Blog was updated by "%s"'), __('Blog was updated by "%s"'),
'adminAfterBlogUpdate', 'adminAfterBlogUpdate',
array('activityReportBehaviors','blogUpdate') ['activityReportBehaviors', 'blogUpdate']
); );
# from BEHAVIOR publicHeadContent in template // from BEHAVIOR publicHeadContent in template
$core->activityReport->addAction( $core->activityReport->addAction(
'blog', 'blog',
'p404', 'p404',
__('404 error'), __('404 error'),
__('New 404 error page at "%s"'), __('New 404 error page at "%s"'),
'publicHeadContent', 'publicHeadContent',
array('activityReportBehaviors','blogP404') ['activityReportBehaviors', 'blogP404']
); );
/* Post // Post
-------------------------*/ $core->activityReport->addGroup('post', __('Actions on posts'));
$core->activityReport->addGroup('post',__('Actions on posts'));
# from BEHAVIOR coreAfterPostCreate in inc/core/class.dc.blog.php (DC 2.2) // from BEHAVIOR coreAfterPostCreate in inc/core/class.dc.blog.php (DC 2.2)
# duplicate adminAfterPostCreate in admin/post.php // duplicate adminAfterPostCreate in admin/post.php
# duplicate adminAfterPostCreate in admin/services.php // duplicate adminAfterPostCreate in admin/services.php
$core->activityReport->addAction( $core->activityReport->addAction(
'post', 'post',
'create', 'create',
__('post creation'), __('post creation'),
__('A new post called "%s" was created by "%s" at %s'), __('A new post called "%s" was created by "%s" at %s'),
'adminAfterPostCreate', 'adminAfterPostCreate',
array('activityReportBehaviors','postCreate') ['activityReportBehaviors', 'postCreate']
); );
# Plugin contribute // Plugin contribute
# from BEHAVIOR publicAfterPostCreate in plugins/contribute/_public.php // from BEHAVIOR publicAfterPostCreate in plugins/contribute/_public.php
$core->activityReport->addAction( $core->activityReport->addAction(
'post', 'post',
'create', 'create',
__('post creation'), __('post creation'),
__('A new post called "%s" was created by "%s" at %s'), __('A new post called "%s" was created by "%s" at %s'),
'publicAfterPostCreate', 'publicAfterPostCreate',
array('activityReportBehaviors','postCreate') ['activityReportBehaviors', 'postCreate']
); );
# from BEHAVIOR coreAfterPostUpdate in inc/core/class.dc.blog.php (DC2.2) // from BEHAVIOR coreAfterPostUpdate in inc/core/class.dc.blog.php (DC2.2)
# duplicate adminAfterPostUpdate in admin/post.php // duplicate adminAfterPostUpdate in admin/post.php
$core->activityReport->addAction( $core->activityReport->addAction(
'post', 'post',
'update', 'update',
__('updating post'), __('updating post'),
__('Post called "%s" has been updated by "%s" at %s'), __('Post called "%s" has been updated by "%s" at %s'),
'adminAfterPostUpdate', 'adminAfterPostUpdate',
array('activityReportBehaviors','postUpdate') ['activityReportBehaviors', 'postUpdate']
); );
# from BEHAVIOR adminBeforePostDelete in admin/posts_actions.php // from BEHAVIOR adminBeforePostDelete in admin/posts_actions.php
# from BEHAVIOR adminBeforePostDelete in admin/post.php // from BEHAVIOR adminBeforePostDelete in admin/post.php
$core->activityReport->addAction( $core->activityReport->addAction(
'post', 'post',
'delete', 'delete',
__('post deletion'), __('post deletion'),
__('Post called "%s" has been deleted by "%s"'), __('Post called "%s" has been deleted by "%s"'),
'adminBeforePostDelete', 'adminBeforePostDelete',
array('activityReportBehaviors','postDelete') ['activityReportBehaviors', 'postDelete']
); );
# Wrong attempt on passworded enrty // Wrong attempt on passworded enrty
# from BEHAVIOR urlHandlerServeDocument in inc/public/lib.urlhandlers.php // from BEHAVIOR urlHandlerServeDocument in inc/public/lib.urlhandlers.php
$core->activityReport->addAction( $core->activityReport->addAction(
'post', 'post',
'protection', 'protection',
__('Post protection'), __('Post protection'),
__('An attempt failed on a passworded post with password "%s" at "%s"'), __('An attempt failed on a passworded post with password "%s" at "%s"'),
'urlHandlerServeDocument', 'urlHandlerServeDocument',
array('activityReportBehaviors','postPasswordAttempt') ['activityReportBehaviors', 'postPasswordAttempt']
); );
/* Comment // Comment
-------------------------*/
$core->activityReport->addGroup('comment',__('Actions on comments')); $core->activityReport->addGroup('comment',__('Actions on comments'));
# from BEHAVIOR coreAfterCommentCreate in inc/core/class.dc.blog.php // from BEHAVIOR coreAfterCommentCreate in inc/core/class.dc.blog.php
# duplicate adminAfterCommentCreate in admin/comment.php // duplicate adminAfterCommentCreate in admin/comment.php
# duplicate publicAfterCommentCreate in inc/public/lib.urlhandlers.php // duplicate publicAfterCommentCreate in inc/public/lib.urlhandlers.php
$core->activityReport->addAction( $core->activityReport->addAction(
'comment', 'comment',
'create', 'create',
__('comment creation'), __('comment creation'),
__('A new comment was created by "%s" on post "%s" at %s'), __('A new comment was created by "%s" on post "%s" at %s'),
'coreAfterCommentCreate', 'coreAfterCommentCreate',
array('activityReportBehaviors','commentCreate') ['activityReportBehaviors', 'commentCreate']
); );
# from BEHAVIOR coreAfterCommentUpdate in inc/core/class.dc.blog.php // from BEHAVIOR coreAfterCommentUpdate in inc/core/class.dc.blog.php
# duplicate adminAfterCommentUpdate in admin/comment.php // duplicate adminAfterCommentUpdate in admin/comment.php
$core->activityReport->addAction( $core->activityReport->addAction(
'comment', 'comment',
'update', 'update',
__('updating comment'), __('updating comment'),
__('Comment has been updated by "%s" at %s'), __('Comment has been updated by "%s" at %s'),
'coreAfterCommentUpdate', 'coreAfterCommentUpdate',
array('activityReportBehaviors','commentUpdate') ['activityReportBehaviors', 'commentUpdate']
); );
# Missing coreBeforeCommentDelete in inc/core/class.dc.blog.php // Missing coreBeforeCommentDelete in inc/core/class.dc.blog.php
# Missing adminBeforeCommentDelete in admin/comment.php // Missing adminBeforeCommentDelete in admin/comment.php
# from BEHAVIOR coreAfterCommentCreate in inc/core/class.dc.blog.php // from BEHAVIOR coreAfterCommentCreate in inc/core/class.dc.blog.php
# duplicate publicAfterTrackbackCreate in inc/core/class.dc.trackback.php // duplicate publicAfterTrackbackCreate in inc/core/class.dc.trackback.php
$core->activityReport->addAction( $core->activityReport->addAction(
'comment', 'comment',
'trackback', 'trackback',
__('trackback creation'), __('trackback creation'),
__('A new trackback to "%" at "%s" was created on post "%s" at %s'), __('A new trackback to "%" at "%s" was created on post "%s" at %s'),
'coreAfterCommentCreate', 'coreAfterCommentCreate',
array('activityReportBehaviors','trackbackCreate') ['activityReportBehaviors', 'trackbackCreate']
); );
/* Category // Category
-------------------------*/ $core->activityReport->addGroup('category', __('Actions on categories'));
$core->activityReport->addGroup('category',__('Actions on categories'));
# from BEHAVIOR adminAfterCategoryCreate in admin/category.php // from BEHAVIOR adminAfterCategoryCreate in admin/category.php
$core->activityReport->addAction( $core->activityReport->addAction(
'category', 'category',
'create', 'create',
__('category creation'), __('category creation'),
__('A new category called "%s" was created by "%s" at %s'), __('A new category called "%s" was created by "%s" at %s'),
'adminAfterCategoryCreate', 'adminAfterCategoryCreate',
array('activityReportBehaviors','categoryCreate') ['activityReportBehaviors', 'categoryCreate']
); );
# from BEHAVIOR adminAfterCategoryUpdate in admin/category.php // from BEHAVIOR adminAfterCategoryUpdate in admin/category.php
$core->activityReport->addAction( $core->activityReport->addAction(
'category', 'category',
'update', 'update',
__('updating category'), __('updating category'),
__('Category called "%s" has been updated by "%s" at %s'), __('Category called "%s" has been updated by "%s" at %s'),
'adminAfterCategoryUpdate', 'adminAfterCategoryUpdate',
array('activityReportBehaviors','categoryUpdate') ['activityReportBehaviors', 'categoryUpdate']
); );
# Missing adminBeforeCategoryDelete in admin/category.php // Missing adminBeforeCategoryDelete in admin/category.php
/* User // User
-------------------------*/ $core->activityReport->addGroup('user', __('Actions on users'));
$core->activityReport->addGroup('user',__('Actions on users'));
# from BEHAVIOR adminAfterUserCreate in admin/user.php // from BEHAVIOR adminAfterUserCreate in admin/user.php
$core->activityReport->addAction( $core->activityReport->addAction(
'user', 'user',
'create', 'create',
__('user creation'), __('user creation'),
__('A new user named "%s" was created by "%s"'), __('A new user named "%s" was created by "%s"'),
'adminAfterUserCreate', 'adminAfterUserCreate',
array('activityReportBehaviors','userCreate') ['activityReportBehaviors', 'userCreate']
); );
# from BEHAVIOR adminAfterUserUpdated in admin/user.php // from BEHAVIOR adminAfterUserUpdated in admin/user.php
$core->activityReport->addAction( $core->activityReport->addAction(
'user', 'user',
'update', 'update',
__('updating user'), __('updating user'),
__('User named "%s" has been updated by "%s"'), __('User named "%s" has been updated by "%s"'),
'adminAfterUserUpdate', 'adminAfterUserUpdate',
array('activityReportBehaviors','userUpdate') ['activityReportBehaviors', 'userUpdate']
); );
# from BEHAVIOR adminBeforeUserDelete in admin/users.php // from BEHAVIOR adminBeforeUserDelete in admin/users.php
$core->activityReport->addAction( $core->activityReport->addAction(
'user', 'user',
'delete', 'delete',
__('user deletion'), __('user deletion'),
__('User named "%s" has been deleted by "%"'), __('User named "%s" has been deleted by "%"'),
'adminBeforeUserDelete', 'adminBeforeUserDelete',
array('activityReportBehaviors','userDelete') ['activityReportBehaviors', 'userDelete']
); );
class activityReportBehaviors class activityReportBehaviors
@ -220,210 +218,198 @@ class activityReportBehaviors
public static function messageActivityReport($message) public static function messageActivityReport($message)
{ {
global $core; global $core;
$logs = [$message];
$logs = array($message); $core->activityReport->addLog('activityReport', 'message', $logs);
$core->activityReport->addLog('activityReport','message',$logs);
} }
public static function blogUpdate($cur,$blog_id) public static function blogUpdate($cur, $blog_id)
{ {
global $core; global $core;
$logs = [$core->auth->getInfo('user_cn')];
$logs = array($core->auth->getInfo('user_cn')); $core->activityReport->addLog('blog', 'update' ,$logs);
$core->activityReport->addLog('blog','update',$logs);
} }
public static function blogP404() public static function blogP404()
{ {
global $core; global $core;
if ($core->url->type != '404') return; if ($core->url->type != '404') {
return null;
$logs = array($core->blog->url.$_SERVER['QUERY_STRING']); }
$logs = [$core->blog->url . $_SERVER['QUERY_STRING']];
$core->activityReport->addLog('blog','p404',$logs); $core->activityReport->addLog('blog', 'p404', $logs);
} }
public static function postCreate($cur,$post_id) public static function postCreate($cur, $post_id)
{ {
global $core; global $core;
$type = $cur->post_type ? $cur->post_type : 'post'; $type = $cur->post_type ? $cur->post_type : 'post';
$post_url = $core->blog->getPostURL('',$cur->post_dt,$cur->post_title,$post_id); $post_url = $core->blog->getPostURL('', $cur->post_dt, $cur->post_title, $post_id);
$logs = [
$logs = array(
$cur->post_title, $cur->post_title,
$core->auth->getInfo('user_cn'), $core->auth->getInfo('user_cn'),
$core->blog->url.$core->url->getBase($type).'/'.$post_url $core->blog->url . $core->url->getBase($type) . '/' . $post_url
); ];
$core->activityReport->addLog('post', 'create', $logs);
$core->activityReport->addLog('post','create',$logs);
} }
public static function postUpdate($cur,$post_id) public static function postUpdate($cur, $post_id)
{ {
global $core; global $core;
$type = $cur->post_type ? $cur->post_type : 'post'; $type = $cur->post_type ? $cur->post_type : 'post';
$post_url = $core->blog->getPostURL('',$cur->post_dt,$cur->post_title,$post_id); $post_url = $core->blog->getPostURL('', $cur->post_dt, $cur->post_title, $post_id);
$logs = [
$logs = array(
$cur->post_title, $cur->post_title,
$core->auth->getInfo('user_cn'), $core->auth->getInfo('user_cn'),
$core->blog->url.$core->url->getBase($type).'/'.$post_url $core->blog->url . $core->url->getBase($type) . '/' . $post_url
); ];
$core->activityReport->addLog('post', 'update', $logs);
$core->activityReport->addLog('post','update',$logs);
} }
public static function postDelete($post_id) public static function postDelete($post_id)
{ {
global $core; global $core;
$posts = $core->blog->getPosts(array('post_id'=>$post_id,'limit'=>1)); $posts = $core->blog->getPosts(['post_id' => $post_id, 'limit' => 1]);
$logs = [
$logs = array(
$posts->post_title, $posts->post_title,
$core->auth->getInfo('user_cn') $core->auth->getInfo('user_cn')
); ];
$core->activityReport->addLog('post', 'delete', $logs);
$core->activityReport->addLog('post','delete',$logs);
} }
public static function postPasswordAttempt($result) public static function postPasswordAttempt($result)
{ {
global $core; global $core;
if ($result['tpl'] != 'password-form.html' || empty($_POST['password'])) return; if ($result['tpl'] != 'password-form.html' || empty($_POST['password'])) {
return null;
$logs = array( }
$logs = [
$_POST['password'], $_POST['password'],
http::getSelfURI() http::getSelfURI()
); ];
$core->activityReport->addLog('post', 'protection', $logs);
$core->activityReport->addLog('post','protection',$logs);
} }
public static function commentCreate($blog,$cur) public static function commentCreate($blog, $cur)
{ {
global $core; global $core;
if ($cur->comment_trackback) return; if ($cur->comment_trackback) {
return null;
$posts = $core->blog->getPosts(array('post_id'=>$cur->post_id,'limit'=>1)); }
$posts = $core->blog->getPosts(['post_id' => $cur->post_id, 'limit' => 1]);
$logs = array( $logs = [
$cur->comment_author, $cur->comment_author,
$posts->post_title, $posts->post_title,
$core->blog->url.$core->url->getBase($posts->post_type). $core->blog->url . $core->url->getBase($posts->post_type) .
'/'.$posts->post_url.'#c'.$cur->comment_id '/' . $posts->post_url . '#c' . $cur->comment_id
); ];
$core->activityReport->addLog('comment', 'create', $logs);
$core->activityReport->addLog('comment','create',$logs);
} }
public static function commentUpdate($blog,$cur,$old) public static function commentUpdate($blog, $cur, $old)
{ {
global $core; global $core;
$posts = $core->blog->getPosts(array('post_id'=>$old->post_id,'limit'=>1)); $posts = $core->blog->getPosts(['post_id' => $old->post_id, 'limit' => 1]);
$logs = array( $logs = [
$core->auth->getInfo('user_cn'), $core->auth->getInfo('user_cn'),
$posts->post_title, $posts->post_title,
$core->blog->url.$core->url->getBase($posts->post_type). $core->blog->url . $core->url->getBase($posts->post_type) .
'/'.$posts->post_url.'#c'.$old->comment_id '/' . $posts->post_url . '#c' . $old->comment_id
); ];
$core->activityReport->addLog('comment', 'update', $logs);
$core->activityReport->addLog('comment','update',$logs);
} }
public static function trackbackCreate($cur,$comment_id) public static function trackbackCreate($cur, $comment_id)
{ {
global $core; global $core;
// From blog args are $blog, $cur #thks to bruno
// From blog args are $blog,$cur #thks to bruno
$c = $cur instanceOf dcBlog ? $comment_id : $cur; $c = $cur instanceOf dcBlog ? $comment_id : $cur;
if (!$c->comment_trackback || !$c->comment_site) return; if (!$c->comment_trackback || !$c->comment_site) {
return null;
}
$posts = $core->blog->getPosts( $posts = $core->blog->getPosts(
array('post_id'=>$c->post_id,'no_content'=>true,'limit'=>1)); ['post_id' => $c->post_id, 'no_content' => true, 'limit' => 1]);
if ($posts->isEmpty()) return; if ($posts->isEmpty()) {
return null;
$logs = array( }
$logs = [
$c->comment_author, $c->comment_author,
$c->comment_site, $c->comment_site,
$posts->post_title, $posts->post_title,
$core->blog->url.$core->url->getBase($posts->post_type). $core->blog->url . $core->url->getBase($posts->post_type) .
'/'.$posts->post_url '/' . $posts->post_url
); ];
$core->activityReport->addLog('comment', 'trackback', $logs);
$core->activityReport->addLog('comment','trackback',$logs);
} }
public static function categoryCreate($cur,$cat_id) public static function categoryCreate($cur, $cat_id)
{ {
global $core; global $core;
$logs = [
$logs = array(
$cur->cat_title, $cur->cat_title,
$core->auth->getInfo('user_cn'), $core->auth->getInfo('user_cn'),
$core->blog->url.$core->url->getBase('category').'/'.$cur->cat_url $core->blog->url . $core->url->getBase('category') . '/' . $cur->cat_url
); ];
$core->activityReport->addLog('category', 'create', $logs);
$core->activityReport->addLog('category','create',$logs);
} }
public static function categoryUpdate($cur,$cat_id) public static function categoryUpdate($cur, $cat_id)
{ {
global $core; global $core;
$logs = [
$logs = array(
$cur->cat_title, $cur->cat_title,
$core->auth->getInfo('user_cn'), $core->auth->getInfo('user_cn'),
$core->blog->url.$core->url->getBase('category').'/'.$cur->cat_url $core->blog->url . $core->url->getBase('category') . '/' . $cur->cat_url
); ];
$core->activityReport->addLog('category', 'update', $logs);
$core->activityReport->addLog('category','update',$logs);
} }
public static function userCreate($cur,$user_id) public static function userCreate($cur, $user_id)
{ {
global $core; global $core;
$user_cn = dcUtils::getUserCN($cur->user_id, $cur->user_name, $user_cn = dcUtils::getUserCN(
$cur->user_firstname, $cur->user_displayname); $cur->user_id,
$cur->user_name,
$logs = array( $cur->user_firstname,
$cur->user_displayname
);
$logs = [
$user_cn, $user_cn,
$core->auth->getInfo('user_cn') $core->auth->getInfo('user_cn')
); ];
$core->activityReport->addLog('user', 'create', $logs);
$core->activityReport->addLog('user','create',$logs);
} }
public static function usertUpdate($cur,$user_id) public static function usertUpdate($cur, $user_id)
{ {
global $core; global $core;
$user_cn = dcUtils::getUserCN($cur->user_id, $cur->user_name, $user_cn = dcUtils::getUserCN(
$cur->user_firstname, $cur->user_displayname); $cur->user_id,
$cur->user_name,
$logs = array( $cur->user_firstname,
$cur->user_displayname
);
$logs = [
$user_cn, $user_cn,
$core->auth->getInfo('user_cn') $core->auth->getInfo('user_cn')
); ];
$core->activityReport->addLog('user', 'update', $logs);
$core->activityReport->addLog('user','update',$logs);
} }
public static function userDelete($user_id) public static function userDelete($user_id)
{ {
global $core; global $core;
$users = $core->getUser($id); $users = $core->getUser($id);
$user_cn = dcUtils::getUserCN($users->user_id, $users->user_name, $user_cn = dcUtils::getUserCN(
$users->user_firstname, $users->user_displayname); $users->user_id,
$users->user_name,
$logs = array( $users->user_firstname,
$users->user_displayname
);
$logs = [
$user_cn, $user_cn,
$core->auth->getInfo('user_cn') $core->auth->getInfo('user_cn')
); ];
$core->activityReport->addLog('user', 'delete', $logs);
$core->activityReport->addLog('user','delete',$logs);
} }
} }

View File

@ -24,16 +24,16 @@ class activityReport
private $_global = 0; private $_global = 0;
private $blog = null; private $blog = null;
private $table = ''; private $table = '';
private $groups = array(); private $groups = [];
private $settings = array(); private $settings = [];
private $lock_blog = null; private $lock_blog = null;
private $lock_global = null; private $lock_global = null;
public function __construct($core,$ns='activityReport') public function __construct($core, $ns = 'activityReport')
{ {
$this->core =& $core; $this->core =& $core;
$this->con = $core->con; $this->con = $core->con;
$this->table = $core->prefix.'activity'; $this->table = $core->prefix . 'activity';
$this->blog = $core->con->escape($core->blog->id); $this->blog = $core->con->escape($core->blog->id);
$this->ns = $core->con->escape($ns); $this->ns = $core->con->escape($ns);
@ -53,101 +53,94 @@ class activityReport
$this->_global = 0; $this->_global = 0;
} }
public function getGroups($group=null,$action=null) public function getGroups($group = null, $action = null)
{
if ($action !== null)
{ {
if ($action !== null) {
return isset($this->groups[$group]['actions'][$action]) ? return isset($this->groups[$group]['actions'][$action]) ?
$this->groups[$group]['actions'][$action] : null; $this->groups[$group]['actions'][$action] : null;
} } elseif ($group !== null) {
elseif ($group !== null)
{
return isset($this->groups[$group]) ? return isset($this->groups[$group]) ?
$this->groups[$group] : null; $this->groups[$group] : null;
} } else {
else
{
return $this->groups; return $this->groups;
} }
} }
public function addGroup($group,$title) public function addGroup($group, $title)
{ {
$this->groups[$group] = array( $this->groups[$group] = [
'title' => $title, 'title' => $title,
'actions'=>array() 'actions' => []
); ];
return true; return true;
} }
public function addAction($group,$action,$title,$msg,$behavior,$function) public function addAction($group, $action, $title, $msg, $behavior, $function)
{ {
if (!isset($this->groups[$group])) return false; if (!isset($this->groups[$group])) return false;
$this->groups[$group]['actions'][$action] = array( $this->groups[$group]['actions'][$action] = [
'title' => $title, 'title' => $title,
'msg' => $msg 'msg' => $msg
); ];
$this->core->addBehavior($behavior,$function); $this->core->addBehavior($behavior, $function);
return true; return true;
} }
private function getSettings() private function getSettings()
{ {
$settings = array(); $settings = [
'active' => false,
$settings['active'] = false; 'obsolete' => 2419200,
$settings['obsolete'] = 2419200; 'dashboardItem' => false,
$settings['dashboardItem'] = false; 'interval' => 86400,
$settings['interval'] = 86400; 'lastreport' => 0,
$settings['lastreport'] = 0; 'mailinglist' => [],
$settings['mailinglist'] = array(); 'mailformat' => 'plain',
$settings['mailformat'] = 'plain'; 'dateformat' => '%Y-%m-%d %H:%M:%S',
$settings['dateformat'] = '%Y-%m-%d %H:%M:%S'; 'requests' => [],
$settings['requests'] = array(); 'blogs' => []
$settings['blogs'] = array(); ];
$this->settings[0] = $this->settings[1] = $settings; $this->settings[0] = $this->settings[1] = $settings;
$rs = $this->con->select( $rs = $this->con->select(
'SELECT setting_id, setting_value, blog_id '. 'SELECT setting_id, setting_value, blog_id ' .
'FROM '.$this->table.'_setting '. 'FROM ' . $this->table . '_setting ' .
"WHERE setting_type='".$this->ns."' ". "WHERE setting_type='" . $this->ns . "' " .
"AND (blog_id='".$this->blog."' OR blog_id IS NULL) ". "AND (blog_id='" . $this->blog . "' OR blog_id IS NULL) " .
'ORDER BY setting_id DESC ' 'ORDER BY setting_id DESC '
); );
while($rs->fetch()) while($rs->fetch()) {
{
$k = $rs->f('setting_id'); $k = $rs->f('setting_id');
$v = $rs->f('setting_value'); $v = $rs->f('setting_value');
$b = $rs->f('blog_id'); $b = $rs->f('blog_id');
$g = $b === null ? 1 : 0; $g = $b === null ? 1 : 0;
if (isset($settings[$k])) if (isset($settings[$k])) {
{
$this->settings[$g][$k] = self::decode($v); $this->settings[$g][$k] = self::decode($v);
} }
} }
# Force blog # Force blog
$this->settings[0]['blogs'] = array(1=>$this->blog); $this->settings[0]['blogs'] = [1 => $this->blog];
} }
public function getSetting($n) public function getSetting($n)
{ {
return isset($this->settings[$this->_global][$n]) ? return $this->settings[$this->_global][$n] ?? null;
$this->settings[$this->_global][$n] :
null;
} }
public function setSetting($n,$v) public function setSetting($n, $v)
{ {
if (!isset($this->settings[$this->_global][$n])) return null; if (!isset($this->settings[$this->_global][$n])) {
return null;
}
$c = $this->delSetting($n); $c = $this->delSetting($n);
$cur = $this->con->openCursor($this->table.'_setting'); $cur = $this->con->openCursor($this->table . '_setting');
$this->con->writeLock($this->table.'_setting'); $this->con->writeLock($this->table . '_setting');
$cur->blog_id = $this->_global ? null : $this->blog; $cur->blog_id = $this->_global ? null : $this->blog;
$cur->setting_id = $this->con->escape($n); $cur->setting_id = $this->con->escape($n);
@ -165,167 +158,129 @@ class activityReport
private function delSetting($n) private function delSetting($n)
{ {
return $this->con->execute( return $this->con->execute(
'DELETE FROM '.$this->table.'_setting '. 'DELETE FROM ' . $this->table . '_setting ' .
"WHERE blog_id".($this->_global ? ' IS NULL' : "='".$this->blog."'").' '. "WHERE blog_id" . ($this->_global ? ' IS NULL' : "='" . $this->blog . "'") . ' ' .
"AND setting_id='".$this->con->escape($n)."' ". "AND setting_id='" . $this->con->escape($n) . "' " .
"AND setting_type='".$this->ns."' " "AND setting_type='" . $this->ns . "' "
); );
} }
# Action params to put in params['sql'] // Action params to put in params['sql']
public static function requests2params($requests) public static function requests2params($requests)
{ {
$r = array(); $r = [];
foreach($requests as $group => $actions) foreach($requests as $group => $actions) {
{ foreach($actions as $action => $is) {
foreach($actions as $action => $is) $r[] = "activity_group='" . $group ."' AND activity_action='" . $action . "' ";
{
$r[] = "activity_group='".$group."' AND activity_action='".$action."' ";
} }
} }
return empty($r) ? '' : 'AND ('.implode('OR ',$r).') '; return empty($r) ? '' : 'AND (' . implode('OR ', $r) . ') ';
} }
public function getLogs($p,$count_only=false) public function getLogs($p, $count_only = false)
{
if ($count_only)
{ {
if ($count_only) {
$r = 'SELECT count(E.activity_id) '; $r = 'SELECT count(E.activity_id) ';
} } else {
else
{
$content_r = empty($p['no_content']) ? 'activity_logs, ' : ''; $content_r = empty($p['no_content']) ? 'activity_logs, ' : '';
if (!empty($params['columns']) && is_array($params['columns'])) if (!empty($params['columns']) && is_array($params['columns'])) {
{ $content_r .= implode(', ', $params['columns']) . ', ';
$content_r .= implode(', ',$params['columns']).', ';
} }
$r = $r =
'SELECT E.activity_id, E.blog_id, B.blog_url, B.blog_name, '.$content_r. 'SELECT E.activity_id, E.blog_id, B.blog_url, B.blog_name, ' . $content_r .
'E.activity_group, E.activity_action, E.activity_dt, '. 'E.activity_group, E.activity_action, E.activity_dt, ' .
'E.activity_blog_status, E.activity_super_status '; 'E.activity_blog_status, E.activity_super_status ';
} }
$r .= $r .=
'FROM '.$this->table.' E '. 'FROM ' . $this->table . ' E ' .
'LEFT JOIN '.$this->core->prefix.'blog B on E.blog_id=B.blog_id '; 'LEFT JOIN ' . $this->core->prefix . 'blog B on E.blog_id=B.blog_id ';
if (!empty($p['from'])) if (!empty($p['from'])) {
{ $r .= $p['from'] . ' ';
$r .= $p['from'].' ';
} }
if ($this->_global) if ($this->_global) {
{
$r .= "WHERE E.activity_super_status = 0 "; $r .= "WHERE E.activity_super_status = 0 ";
} } else {
else
{
$r .= "WHERE E.activity_blog_status = 0 "; $r .= "WHERE E.activity_blog_status = 0 ";
} }
if (!empty($p['activity_type'])) if (!empty($p['activity_type'])) {
{ $r .= "AND E.activity_type = '" . $this->con->escape($p['activity_type']) . "' ";
$r .= "AND E.activity_type = '".$this->con->escape($p['activity_type'])."' "; } else {
} $r .= "AND E.activity_type = '" . $this->ns . "' ";
else
{
$r .= "AND E.activity_type = '".$this->ns."' ";
} }
if (!empty($p['blog_id'])) if (!empty($p['blog_id'])) {
{ if(is_array($p['blog_id'])) {
if(is_array($p['blog_id'])) $r .= 'AND E.blog_id' . $this->con->in($p['blog_id']);
{ } else {
$r .= 'AND E.blog_id'.$this->con->in($p['blog_id']); $r .= "AND E.blog_id = '" . $this->con->escape($p['blog_id']) . "' ";
} }
else } elseif($this->_global) {
{
$r .= "AND E.blog_id = '".$this->con->escape($p['blog_id'])."' ";
}
}
elseif($this->_global)
{
$r .= 'AND E.blog_id IS NOT NULL '; $r .= 'AND E.blog_id IS NOT NULL ';
} } else {
else $r .= "AND E.blog_id='" . $this->blog . "' ";
{
$r .= "AND E.blog_id='".$this->blog."' ";
} }
if (isset($p['activity_group'])) if (isset($p['activity_group'])) {
{ if (is_array($p['activity_group']) && !empty($p['activity_group'])) {
if (is_array($p['activity_group']) && !empty($p['activity_group'])) $r .= 'AND E.activity_group ' . $this->con->in($p['activity_group']);
{ } elseif ($p['activity_group'] != '') {
$r .= 'AND E.activity_group '.$this->con->in($p['activity_group']); $r .= "AND E.activity_group = '" . $this->con->escape($p['activity_group']) . "' ";
}
elseif ($p['activity_group'] != '')
{
$r .= "AND E.activity_group = '".$this->con->escape($p['activity_group'])."' ";
} }
} }
if (isset($p['activity_action'])) if (isset($p['activity_action'])) {
{ if (is_array($p['activity_action']) && !empty($p['activity_action'])) {
if (is_array($p['activity_action']) && !empty($p['activity_action'])) $r .= 'AND E.activity_action ' . $this->con->in($p['activity_action']);
{ } elseif ($p['activity_action'] != '') {
$r .= 'AND E.activity_action '.$this->con->in($p['activity_action']); $r .= "AND E.activity_action = '" . $this->con->escape($p['activity_action']) . "' ";
}
elseif ($p['activity_action'] != '')
{
$r .= "AND E.activity_action = '".$this->con->escape($p['activity_action'])."' ";
} }
} }
if (isset($p['activity_blog_status'])) if (isset($p['activity_blog_status'])) {
{ $r .= "AND E.activity_blog_status = " . ((integer) $p['activity_blog_status']) . " ";
$r .= "AND E.activity_blog_status = ".((integer) $p['activity_blog_status'])." ";
} }
if (isset($p['activity_super_status'])) if (isset($p['activity_super_status'])) {
{ $r .= "AND E.activity_super_status = " . ((integer) $p['activity_super_status']) . " ";
$r .= "AND E.activity_super_status = ".((integer) $p['activity_super_status'])." ";
} }
if (isset($p['from_date_ts'])) if (isset($p['from_date_ts'])) {
{
$dt = date('Y-m-d H:i:s',$p['from_date_ts']); $dt = date('Y-m-d H:i:s',$p['from_date_ts']);
$r .= "AND E.activity_dt >= TIMESTAMP '".$dt."' "; $r .= "AND E.activity_dt >= TIMESTAMP '" . $dt . "' ";
} }
if (isset($p['to_date_ts'])) if (isset($p['to_date_ts'])) {
{
$dt = date('Y-m-d H:i:s',$p['to_date_ts']); $dt = date('Y-m-d H:i:s',$p['to_date_ts']);
$r .= "AND E.activity_dt < TIMESTAMP '".$dt."' "; $r .= "AND E.activity_dt < TIMESTAMP '" . $dt . "' ";
} }
if (!empty($p['sql'])) if (!empty($p['sql'])) {
{ $r .= $p['sql'] . ' ';
$r .= $p['sql'].' ';
} }
if (!$count_only) if (!$count_only) {
{ if (!empty($p['order'])) {
if (!empty($p['order'])) $r .= 'ORDER BY ' . $this->con->escape($p['order']) . ' ';
{
$r .= 'ORDER BY '.$this->con->escape($p['order']).' ';
} else { } else {
$r .= 'ORDER BY E.activity_dt DESC '; $r .= 'ORDER BY E.activity_dt DESC ';
} }
} }
if (!$count_only && !empty($p['limit'])) if (!$count_only && !empty($p['limit'])) {
{
$r .= $this->con->limit($p['limit']); $r .= $this->con->limit($p['limit']);
} }
return $this->con->select($r); return $this->con->select($r);
} }
public function addLog($group,$action,$logs) public function addLog($group, $action, $logs)
{
try
{ {
try {
$cur = $this->con->openCursor($this->table); $cur = $this->con->openCursor($this->table);
$this->con->writeLock($this->table); $this->con->writeLock($this->table);
@ -339,21 +294,23 @@ class activityReport
$cur->insert(); $cur->insert();
$this->con->unlock(); $this->con->unlock();
} } catch (Exception $e) {
catch (Exception $e) {
$this->con->unlock(); $this->con->unlock();
$this->core->error->add($e->getMessage()); $this->core->error->add($e->getMessage());
} }
# Test if email report is needed // Test if email report is needed
$this->needReport(); $this->needReport();
} }
private function parseLogs($rs) private function parseLogs($rs)
{ {
if ($rs->isEmpty()) return ''; if ($rs->isEmpty()) {
return '';
}
include dirname(__FILE__).'/lib.parselogs.config.php'; // @todo move this in function
include dirname(__FILE__) . '/lib.parselogs.config.php';
$from = time(); $from = time();
$to = 0; $to = 0;
@ -368,11 +325,9 @@ class activityReport
$blog_open = $group_open = false; $blog_open = $group_open = false;
while($rs->fetch()) while($rs->fetch()) {
{ // blog
# Blog if ($rs->blog_id != $blog && $this->_global) {
if ($rs->blog_id != $blog && $this->_global)
{
if ($group_open) { if ($group_open) {
$res .= $tpl['group_close']; $res .= $tpl['group_close'];
$group_open = false; $group_open = false;
@ -384,38 +339,50 @@ class activityReport
$blog = $rs->blog_id; $blog = $rs->blog_id;
$group = ''; $group = '';
$res .= str_replace(array('%TEXT%','%URL%'),array($rs->blog_name.' ('.$rs->blog_id.')',$rs->blog_url),$tpl['blog_title']); $res .= str_replace(
['%TEXT%', '%URL%'],
[$rs->blog_name . ' (' . $rs->blog_id . ')', $rs->blog_url],
$tpl['blog_title']
) . $tpl['blog_open'];
$res .= $tpl['blog_open'];
$blog_open = true; $blog_open = true;
} }
if (isset($this->groups[$rs->activity_group])) if (isset($this->groups[$rs->activity_group])) {
{ // Type
# Type if ($rs->activity_group != $group) {
if ($rs->activity_group != $group)
{
if ($group_open) { if ($group_open) {
$res .= $tpl['group_close']; $res .= $tpl['group_close'];
} }
$group = $rs->activity_group; $group = $rs->activity_group;
$res .= str_replace('%TEXT%',__($this->groups[$group]['title']),$tpl['group_title']); $res .= str_replace(
'%TEXT%',
__($this->groups[$group]['title']),
$tpl['group_title']
) . $tpl['group_open'];
$res .= $tpl['group_open'];
$group_open = true; $group_open = true;
} }
# Action // Action
$time = strtotime($rs->activity_dt); $time = strtotime($rs->activity_dt);
$data = self::decode($rs->activity_logs); $data = self::decode($rs->activity_logs);
$res .= str_replace(array('%TIME%','%TEXT%'),array(dt::str($dt,$time,$tz),vsprintf(__($this->groups[$group]['actions'][$rs->activity_action]['msg']),$data)),$tpl['action']); $res .= str_replace(
['%TIME%', '%TEXT%'],
[dt::str($dt, $time, $tz), vsprintf(__($this->groups[$group]['actions'][$rs->activity_action]['msg']), $data)],
$tpl['action']
);
# Period # Period
if ($time < $from) $from = $time; if ($time < $from) {
if ($time > $to) $to = $time; $from = $time;
}
if ($time > $to) {
$to = $time;
}
} }
} }
@ -425,61 +392,70 @@ class activityReport
if ($blog_open) { if ($blog_open) {
$res .= $tpl['blog_close']; $res .= $tpl['blog_close'];
} }
if ($to == 0) { if ($to == 0) {
$res .= str_replace('%TEXT%',__('An error occured when parsing report.'),$tpl['error']); $res .= str_replace('%TEXT%', __('An error occured when parsing report.'), $tpl['error']);
} }
# Top of msg // Top of msg
if (empty($res)) return ''; if (empty($res)) {
return '';
$period = str_replace('%TEXT%',__('Activity report'),$tpl['period_title']);
$period .= $tpl['period_open'];
$period .= str_replace('%TEXT%',__("You received a message from your blog's activity report module."),$tpl['info']);
if (!$this->_global)
{
$period .= str_replace('%TEXT%',$rs->blog_name,$tpl['info']);
$period .= str_replace('%TEXT%',$rs->blog_url,$tpl['info']);
} }
$period .= str_replace('%TEXT%',sprintf(__('Period from %s to %s'),dt::str($dt,$from,$tz),dt::str($dt,$to,$tz)),$tpl['info']);
$period = str_replace(
'%TEXT%',
__('Activity report'),
$tpl['period_title']
) . $tpl['period_open'];
$period .= str_replace(
'%TEXT%',
__("You received a message from your blog's activity report module."),
$tpl['info']
);
if (!$this->_global) {
$period .= str_replace('%TEXT%', $rs->blog_name,$tpl['info']);
$period .= str_replace('%TEXT%', $rs->blog_url,$tpl['info']);
}
$period .= str_replace(
'%TEXT%',
sprintf(__('Period from %s to %s'), dt::str($dt, $from, $tz), dt::str($dt, $to, $tz)),
$tpl['info']);
$period .= $tpl['period_close']; $period .= $tpl['period_close'];
$res = str_replace(array('%PERIOD%','%TEXT%'),array($period,$res),$tpl['page']); $res = str_replace(['%PERIOD%', '%TEXT%'], [$period, $res], $tpl['page']);
return $res; return $res;
} }
private function obsoleteLogs() private function obsoleteLogs()
{ {
# Get blogs and logs count // Get blogs and logs count
$rs = $this->con->select( $rs = $this->con->select(
"SELECT blog_id ". "SELECT blog_id " .
'FROM '.$this->table.' '. 'FROM ' . $this->table . ' ' .
"WHERE activity_type='".$this->ns."' ". "WHERE activity_type='" . $this->ns . "' " .
'GROUP BY blog_id ' 'GROUP BY blog_id '
); );
if ($rs->isEmpty()) return; if ($rs->isEmpty()) {
return null;
}
while ($rs->fetch()) while ($rs->fetch()) {
{
$ts = time(); $ts = time();
$obs_blog = dt::str('%Y-%m-%d %H:%M:%S',$ts - (integer) $this->settings[0]['obsolete']); $obs_blog = dt::str('%Y-%m-%d %H:%M:%S', $ts - (integer) $this->settings[0]['obsolete']);
$obs_global = dt::str('%Y-%m-%d %H:%M:%S',$ts - (integer) $this->settings[1]['obsolete']); $obs_global = dt::str('%Y-%m-%d %H:%M:%S', $ts - (integer) $this->settings[1]['obsolete']);
$this->con->execute( $this->con->execute(
'DELETE FROM '.$this->table.' '. 'DELETE FROM ' . $this->table . ' ' .
"WHERE activity_type='".$this->ns."' ". "WHERE activity_type='" . $this->ns . "' " .
"AND (activity_dt < TIMESTAMP '".$obs_blog."' ". "AND (activity_dt < TIMESTAMP '" . $obs_blog . "' " .
"OR activity_dt < TIMESTAMP '".$obs_global."') ". "OR activity_dt < TIMESTAMP '" . $obs_global . "') " .
"AND blog_id = '".$this->con->escape($rs->blog_id)."' " "AND blog_id = '" . $this->con->escape($rs->blog_id) ."' "
); );
if ($this->con->changes()) if ($this->con->changes()) {
{ try {
try
{
$cur = $this->con->openCursor($this->table); $cur = $this->con->openCursor($this->table);
$this->con->writeLock($this->table); $this->con->writeLock($this->table);
@ -493,8 +469,7 @@ class activityReport
$cur->insert(); $cur->insert();
$this->con->unlock(); $this->con->unlock();
} } catch (Exception $e) {
catch (Exception $e) {
$this->con->unlock(); $this->con->unlock();
$this->core->error->add($e->getMessage()); $this->core->error->add($e->getMessage());
} }
@ -505,43 +480,38 @@ class activityReport
private function cleanLogs() private function cleanLogs()
{ {
$this->con->execute( $this->con->execute(
'DELETE FROM '.$this->table.' '. 'DELETE FROM ' . $this->table . ' ' .
"WHERE activity_type='".$this->ns."' ". "WHERE activity_type='" . $this->ns . "' " .
"AND activity_blog_status = 1 ". "AND activity_blog_status = 1 " .
"AND activity_super_status = 1 " "AND activity_super_status = 1 "
); );
} }
public function deleteLogs() public function deleteLogs()
{ {
if (!$this->core->auth->isSuperAdmin()) return; if (!$this->core->auth->isSuperAdmin()) {
return null;
}
return $this->con->execute( return $this->con->execute(
'DELETE FROM '.$this->table.' '. 'DELETE FROM ' . $this->table . ' ' .
"WHERE activity_type='".$this->ns."' " "WHERE activity_type='" . $this->ns . "' "
); );
} }
private function updateStatus($from_date_ts,$to_date_ts) private function updateStatus($from_date_ts, $to_date_ts)
{ {
$r = $r = 'UPDATE ' . $this->table . ' ';
'UPDATE '.$this->table.' ';
if ($this->_global) if ($this->_global) {
{ $r .= "SET activity_super_status = 1 WHERE blog_id IS NOT NULL ";
$r .= } else {
"SET activity_super_status = 1 WHERE blog_id IS NOT NULL "; $r .= "SET activity_blog_status = 1 WHERE blog_id = '" . $this->blog . "' ";
} }
else
{
$r .= $r .=
"SET activity_blog_status = 1 WHERE blog_id = '".$this->blog."' "; "AND activity_type = '" . $this->ns . "' " .
} "AND activity_dt >= TIMESTAMP '" . date('Y-m-d H:i:s',$from_date_ts) . "' " .
"AND activity_dt < TIMESTAMP '" . date('Y-m-d H:i:s',$to_date_ts) . "' ";
$r .=
"AND activity_type = '".$this->ns."' ".
"AND activity_dt >= TIMESTAMP '".date('Y-m-d H:i:s',$from_date_ts)."' ".
"AND activity_dt < TIMESTAMP '".date('Y-m-d H:i:s',$to_date_ts)."' ";
$this->con->execute($r); $this->con->execute($r);
} }
@ -549,15 +519,14 @@ class activityReport
public function getNextId() public function getNextId()
{ {
return $this->con->select( return $this->con->select(
'SELECT MAX(activity_id) FROM '.$this->table 'SELECT MAX(activity_id) FROM ' . $this->table
)->f(0) + 1; )->f(0) + 1;
} }
# Lock a file to see if an update is ongoing # Lock a file to see if an update is ongoing
public function lockUpdate() public function lockUpdate()
{ {
try try {
{
# Need flock function # Need flock function
if (!function_exists('flock')) { if (!function_exists('flock')) {
throw New Exception("Can't call php function named flock"); throw New Exception("Can't call php function named flock");
@ -571,46 +540,41 @@ class activityReport
$cached_file = sprintf('%s/%s/%s/%s/%s.txt', $cached_file = sprintf('%s/%s/%s/%s/%s.txt',
DC_TPL_CACHE, DC_TPL_CACHE,
'activityreport', 'activityreport',
substr($f_md5,0,2), substr($f_md5, 0, 2),
substr($f_md5,2,2), substr($f_md5, 2, 2),
$f_md5 $f_md5
); );
# Real path # Real path
$cached_file = path::real($cached_file,false); $cached_file = path::real($cached_file, false);
# Make dir // make dir
if (!is_dir(dirname($cached_file))) { if (!is_dir(dirname($cached_file))) {
files::makeDir(dirname($cached_file), true);
files::makeDir(dirname($cached_file),true);
} }
# Make file //ake file
if (!file_exists($cached_file)) { if (!file_exists($cached_file)) {
!$fp = @fopen($cached_file, 'w'); !$fp = @fopen($cached_file, 'w');
if ($fp === false) { if ($fp === false) {
throw New Exception("Can't create file"); throw New Exception("Can't create file");
} }
fwrite($fp,'1',strlen('1')); fwrite($fp, '1', strlen('1'));
fclose($fp); fclose($fp);
} }
# Open file // open file
if (!($fp = @fopen($cached_file, 'r+'))) { if (!($fp = @fopen($cached_file, 'r+'))) {
throw New Exception("Can't open file"); throw New Exception("Can't open file");
} }
# Lock file // lock file
if (!flock($fp,LOCK_EX)) { if (!flock($fp, LOCK_EX)) {
throw New Exception("Can't lock file"); throw New Exception("Can't lock file");
} }
if ($this->_global) if ($this->_global) {
{
$this->lock_global = $fp; $this->lock_global = $fp;
} } else {
else
{
$this->lock_blog = $fp; $this->lock_blog = $fp;
} }
return true; return true;
} } catch (Exception $e) {
catch (Exception $e) // what ?
{
throw $e; throw $e;
} }
return false; return false;
@ -618,13 +582,10 @@ class activityReport
public function unlockUpdate() public function unlockUpdate()
{ {
if ($this->_global) if ($this->_global) {
{
@fclose($this->lock_global); @fclose($this->lock_global);
$this->lock_global = null; $this->lock_global = null;
} } else {
else
{
@fclose($this->lock_blog); @fclose($this->lock_blog);
$this->lock_blog = null; $this->lock_blog = null;
} }
@ -635,17 +596,15 @@ class activityReport
return function_exists('mail') || function_exists('_mail'); return function_exists('mail') || function_exists('_mail');
} }
public function needReport($force=false) public function needReport($force = false)
{
try
{
# Check if server has mail function
if (!self::hasMailer())
{ {
try {
// Check if server has mail function
if (!self::hasMailer()) {
throw new Exception('No mail fonction'); throw new Exception('No mail fonction');
} }
# Limit to one update at a time // Limit to one update at a time
$this->lockUpdate(); $this->lockUpdate();
$send = false; $send = false;
@ -659,115 +618,106 @@ class activityReport
$interval = (integer) $this->settings[$this->_global]['interval']; $interval = (integer) $this->settings[$this->_global]['interval'];
$blogs = $this->settings[$this->_global]['blogs']; $blogs = $this->settings[$this->_global]['blogs'];
if ($force) $lastreport = 0; if ($force) {
$lastreport = 0;
}
# Check if report is needed // Check if report is needed
if ($active && !empty($mailinglist) && !empty($requests) && !empty($blogs) if ($active && !empty($mailinglist) && !empty($requests) && !empty($blogs)
&& ($lastreport + $interval) < $now ) && ($lastreport + $interval) < $now
{ ) {
# Get datas // Get datas
$params = array(); $params = [
$params['from_date_ts'] = $lastreport; 'from_date_ts' => $lastreport,
$params['to_date_ts'] = $now; 'to_date_ts' => $now,
$params['blog_id'] = $blogs; 'blog_id' => $blogs,
$params['sql'] = self::requests2params($requests); 'sql' => self::requests2params($requests),
$params['order'] = 'blog_id ASC, activity_group ASC, activity_action ASC, activity_dt ASC '; 'order' => 'blog_id ASC, activity_group ASC, activity_action ASC, activity_dt ASC '
];
$logs = $this->getLogs($params); $logs = $this->getLogs($params);
if (!$logs->isEmpty()) if (!$logs->isEmpty()) {
{ // Datas to readable text
# Datas to readable text
$content = $this->parseLogs($logs); $content = $this->parseLogs($logs);
if (!empty($content)) if (!empty($content)) {
{ // Send mails
# Send mails $send = $this->sendReport($mailinglist, $content, $mailformat);
$send = $this->sendReport($mailinglist,$content,$mailformat);
} }
} }
# Update db // Update db
if ($send || $this->_global) // if global : delete all blog logs even if not selected if ($send || $this->_global) { // if global : delete all blog logs even if not selected
{ $this->updateStatus($lastreport, $now);
# Update log status
$this->updateStatus($lastreport,$now);
# Delete old logs
$this->cleanLogs(); $this->cleanLogs();
# Then set update time $this->setSetting('lastreport', $now);
$this->setSetting('lastreport',$now);
} }
} }
# If this is on a blog, we need to test superAdmin report // If this is on a blog, we need to test superAdmin report
if (!$this->_global) if (!$this->_global) {
{
$this->_global = true; $this->_global = true;
$this->needReport(); $this->needReport();
$this->_global = false; $this->_global = false;
if ($send) if ($send) {
{ $this->core->callBehavior('messageActivityReport', 'Activity report has been successfully send by mail.');
$this->core->callBehavior('messageActivityReport','Activity report has been successfully send by mail.');
} }
} }
$this->unlockUpdate(); $this->unlockUpdate();
} } catch (Exception $e) {
catch (Exception $e)
{
$this->unlockUpdate(); $this->unlockUpdate();
//throw $e; //throw $e;
} }
return true; return true;
} }
private function sendReport($recipients,$msg,$mailformat='') private function sendReport($recipients, $msg, $mailformat =' ')
{ {
if (!is_array($recipients) || empty($msg) || !text::isEmail($this->mailer)) return false; if (!is_array($recipients) || empty($msg) || !text::isEmail($this->mailer)) {
return false;
}
$mailformat = $mailformat == 'html' ? 'html' : 'plain'; $mailformat = $mailformat == 'html' ? 'html' : 'plain';
# Checks recipients addresses // Checks recipients addresses
$rc2 = array(); $rc2 = [];
foreach ($recipients as $v) foreach ($recipients as $v) {
{
$v = trim($v); $v = trim($v);
if (!empty($v) && text::isEmail($v)) if (!empty($v) && text::isEmail($v)) {
{
$rc2[] = $v; $rc2[] = $v;
} }
} }
$recipients = $rc2; $recipients = $rc2;
unset($rc2); unset($rc2);
if (empty($recipients)) return false; if (empty($recipients)) {
return false;
}
# Sending mails # Sending mails
try try {
{ $headers = [
$headers = array( 'From: ' . mail::B64Header(__('Activity report module')) . ' <' . $this->mailer . '>',
'From: '.mail::B64Header(__('Activity report module')).' <'.$this->mailer.'>', 'Reply-To: <' . $this->mailer . '>',
'Reply-To: <'.$this->mailer.'>', 'Content-Type: text/' . $mailformat . '; charset=UTF-8;',
'Content-Type: text/'.$mailformat.'; charset=UTF-8;',
'MIME-Version: 1.0', 'MIME-Version: 1.0',
'X-Originating-IP: '.http::realIP(), 'X-Originating-IP: ' . http::realIP(),
'X-Mailer: Dotclear', 'X-Mailer: Dotclear',
'X-Blog-Id: '.mail::B64Header($this->core->blog->id), 'X-Blog-Id: ' . mail::B64Header($this->core->blog->id),
'X-Blog-Name: '.mail::B64Header($this->core->blog->name), 'X-Blog-Name: ' . mail::B64Header($this->core->blog->name),
'X-Blog-Url: '.mail::B64Header($this->core->blog->url) 'X-Blog-Url: ' . mail::B64Header($this->core->blog->url)
); ];
$subject = $this->_global ? $subject = $this->_global ?
mail::B64Header(__('Blog activity report')) : mail::B64Header(__('Blog activity report')) :
mail::B64Header('['.$this->core->blog->name.'] '.__('Blog activity report')); mail::B64Header('[' . $this->core->blog->name . '] ' . __('Blog activity report'));
$done = true; $done = true;
foreach ($recipients as $email) foreach ($recipients as $email) {
{ if (true !== mail::sendMail($email, $subject, $msg, $headers)) {
if (true !== mail::sendMail($email,$subject,$msg,$headers)) {
$done = false; $done = false;
} }
} }
} } catch (Exception $e) {
catch (Exception $e)
{
$done = false; $done = false;
} }
@ -777,17 +727,17 @@ class activityReport
public function getUserCode() public function getUserCode()
{ {
$code = $code =
pack('a32',$this->core->auth->userID()). pack('a32', $this->core->auth->userID()) .
pack('H*',crypt::hmac(DC_MASTER_KEY,$this->core->auth->getInfo('user_pwd'))); pack('H*', crypt::hmac(DC_MASTER_KEY, $this->core->auth->getInfo('user_pwd')));
return bin2hex($code); return bin2hex($code);
} }
public function checkUserCode($code) public function checkUserCode($code)
{ {
$code = pack('H*',$code); $code = pack('H*', $code);
$user_id = trim(@pack('a32',substr($code,0,32))); $user_id = trim(@pack('a32', substr($code, 0, 32)));
$pwd = @unpack('H40hex',substr($code,32,40)); $pwd = @unpack('H40hex', substr($code, 32, 40));
if ($user_id === false || $pwd === false) { if ($user_id === false || $pwd === false) {
return false; return false;
@ -795,9 +745,9 @@ class activityReport
$pwd = $pwd['hex']; $pwd = $pwd['hex'];
$strReq = 'SELECT user_id, user_pwd '. $strReq = 'SELECT user_id, user_pwd ' .
'FROM '.$this->core->prefix.'user '. 'FROM ' . $this->core->prefix . 'user ' .
"WHERE user_id = '".$this->core->con->escape($user_id)."' "; "WHERE user_id = '" . $this->core->con->escape($user_id) . "' ";
$rs = $this->core->con->select($strReq); $rs = $this->core->con->select($strReq);

View File

@ -11,60 +11,54 @@
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
$format = array( $format = [
'html' => [
'html' => array( 'blog_title' => '<h2><a href="%URL%">%TEXT%</a></h2>',
'blog_open' => '',
'blog_title' => '<h2><a href="%URL%">%TEXT%</a></h2>', 'blog_close' => '',
'blog_open' => '', 'group_title' => '<h3>%TEXT%</h3>',
'blog_close' => '', 'group_open' => '<ul>',
'group_title' => '<h3>%TEXT%</h3>', 'group_close' => '</ul>',
'group_open' => '<ul>', 'action' => '<li><em>%TIME%</em><br />%TEXT%</li>',
'group_close' => '</ul>', 'error' => '<p>%TEXT%</p>',
'action' => '<li><em>%TIME%</em><br />%TEXT%</li>', 'period_title' => '<h1>%TEXT%</h1>',
'error' => '<p>%TEXT%</p>', 'period_open' => '<ul>',
'period_title' => '<h1>%TEXT%</h1>', 'period_close' => '</ul>',
'period_open' => '<ul>', 'info' => '<li>%TEXT%</li>',
'period_close' => '</ul>', 'page' =>
'info' => '<li>%TEXT%</li>', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'."\n".
'page' => '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">'."\n".
"<head><title>".__('Activity report')."</title>".
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'."\n". '<style type="text/css">'.
'<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">'."\n". ' body { color: #303030; background: #FCFCFC; font-size: 0.7em;font-family: Georgia, Tahoma, Arial, Helvetica, sans-serif; }'.
"<head><title>".__('Activity report')."</title>". ' a { color: #303030; text-decoration: none; }'.
'<style type="text/css">'. ' h1 { text-align: center; font-size: 2em; }'.
' body { color: #303030; background: #FCFCFC; font-size: 0.7em;font-family: Georgia, Tahoma, Arial, Helvetica, sans-serif; }'. ' h2 { color: #303030; text-align:center; }'.
' a { color: #303030; text-decoration: none; }'. ' h3 { color: #7F3F3F; }'.
' h1 { text-align: center; font-size: 2em; }'. ' li em { color: #303030; }'.
' h2 { color: #303030; text-align:center; }'. ' div.info { color: #3F497F; background-color: #F8F8EB; border: 1px solid #888888; margin: 4px; padding: 4px; }'.
' h3 { color: #7F3F3F; }'. ' div.content { color: #3F7F47; background-color: #F8F8EB; border: 1px solid #888888; margin: 4px; padding: 4px; }'.
' li em { color: #303030; }'. ' div.foot { text-align:center; font-size: 0.9em; }'.
' div.info { color: #3F497F; background-color: #F8F8EB; border: 1px solid #888888; margin: 4px; padding: 4px; }'. '</style>'.
' div.content { color: #3F7F47; background-color: #F8F8EB; border: 1px solid #888888; margin: 4px; padding: 4px; }'. "</head><body>".
' div.foot { text-align:center; font-size: 0.9em; }'. '<div class="info">%PERIOD%</div><div class="content">%TEXT%</div>'.
'</style>'. '<div class="foot"><p>Powered by <a href="http://dotclear.jcdenis.com/go/activityReport">activityReport</a></p></div>'.
"</head><body>". "</body></html>"
'<div class="info">%PERIOD%</div><div class="content">%TEXT%</div>'. ],
'<div class="foot"><p>Powered by <a href="http://dotclear.jcdenis.com/go/activityReport">activityReport</a></p></div>'. 'plain' => [
"</body></html>" 'blog_title' => "\n--- %TEXT% ---\n",
'blog_open' => '',
), 'blog_close' => '',
'plain' => array( 'group_title' => "\n-- %TEXT% --\n\n",
'group_open' => '',
'blog_title' => "\n--- %TEXT% ---\n", 'group_close' => '',
'blog_open' => '', 'action' => "- %TIME% : %TEXT%\n",
'blog_close' => '', 'error' => '%TEXT%',
'group_title' => "\n-- %TEXT% --\n\n", 'period_title' => "%TEXT%\n",
'group_open' => '', 'period_open' => '',
'group_close' => '', 'period_close' => '',
'action' => "- %TIME% : %TEXT%\n", 'info' => "%TEXT%\n",
'error' => '%TEXT%', 'page' =>
'period_title' => "%TEXT%\n", "%PERIOD%\n-----------------------------------------------------------\n%TEXT%"
'period_open' => '', ]
'period_close' => '', ];
'info' => "%TEXT%\n",
'page' =>
"%PERIOD%\n-----------------------------------------------------------\n%TEXT%"
));

View File

@ -23,10 +23,11 @@ dcPage::check('admin');
require_once dirname(__FILE__) . '/inc/lib.activity.report.index.php'; require_once dirname(__FILE__) . '/inc/lib.activity.report.index.php';
$tab = isset($_REQUEST['tab']) ? $_REQUEST['tab'] : 'blog_settings'; $tab = $_REQUEST['tab'] ?? 'blog_settings';
$section = $_REQUEST['section'] ?? '';
echo ' echo '
<html><head><title><?php echo __('Activity report'); ?></title>' . <html><head><title>'. __('Activity report') . '</title>' .
dcPage::jsLoad('js/_posts_list.js') . dcPage::jsLoad('js/_posts_list.js') .
dcPage::jsToolBar() . dcPage::jsToolBar() .
dcPage::jsPageTabs($tab) . dcPage::jsPageTabs($tab) .
@ -42,11 +43,11 @@ if (!activityReport::hasMailer()) {
echo '<p class="error">' . __('This server has no mail function, activityReport not send email report.') . '</p>'; echo '<p class="error">' . __('This server has no mail function, activityReport not send email report.') . '</p>';
} }
activityReportLib::settingTab($core,__('Settings')); activityReportLib::settingTab($core, __('Settings'));
activityReportLib::logTab($core,__('Logs')); activityReportLib::logTab($core, __('Logs'));
if ($core->auth->isSuperAdmin()) { if ($core->auth->isSuperAdmin()) {
activityReportLib::settingTab($core, __('Super settings'), true); activityReportLib::settingTab($core, __('Super settings'), true);
activityReportLib::logTab($core, __('Super logs'), true); activityReportLib::logTab($core, __('Super logs'), true);
} }
echo '</html>'; echo '</body></html>';