prepare DC 2.24

master
Jean-Christian Paul Denis 2022-11-15 11:08:10 +01:00
parent 2a3980165a
commit 5e9afe15e5
Signed by: JcDenis
GPG Key ID: 1B5B8C5B90B6C951
6 changed files with 78 additions and 86 deletions

View File

@ -14,18 +14,18 @@ if (!defined('DC_CONTEXT_ADMIN')) {
return null;
}
require dirname(__FILE__) . '/_widgets.php';
require __DIR__ . '/_widgets.php';
# Dashboard item and user preference
$core->addBehavior(
'adminDashboardItems',
dcCore::app()->addBehavior(
'adminDashboardItemsV2',
['topWriterAdmin', 'adminDashboardItems']
);
$core->addBehavior(
'adminDashboardOptionsForm',
dcCore::app()->addBehavior(
'adminDashboardOptionsFormV2',
['topWriterAdmin', 'adminDashboardOptionsForm']
);
$core->addBehavior(
dcCore::app()->addBehavior(
'adminAfterDashboardOptionsUpdate',
['topWriterAdmin', 'adminAfterDashboardOptionsUpdate']
);
@ -37,13 +37,13 @@ $core->addBehavior(
*/
class topWriterAdmin
{
public static function adminDashboardItems(dcCore $core, $__dashboard_items)
public static function adminDashboardItems($__dashboard_items)
{
$pref = self::setDefaultPref($core);
$pref = self::setDefaultPref();
# top posts
if ($pref['topWriterPostsItems']) {
$lines = topWriter::posts($core, $pref['topWriterPostsPeriod'], $pref['topWriterPostsLimit']);
$lines = topWriter::posts($pref['topWriterPostsPeriod'], $pref['topWriterPostsLimit']);
if (empty($lines)) {
return null;
}
@ -62,7 +62,7 @@ class topWriterAdmin
# top comments
if ($pref['topWriterCommentsItems']) {
$lines = topWriter::comments($core, $pref['topWriterCommentsPeriod'], $pref['topWriterCommentsLimit']);
$lines = topWriter::comments($pref['topWriterCommentsPeriod'], $pref['topWriterCommentsLimit']);
if (empty($lines)) {
return null;
}
@ -80,9 +80,9 @@ class topWriterAdmin
}
}
public static function adminDashboardOptionsForm(dcCore $core)
public static function adminDashboardOptionsForm()
{
$pref = self::setDefaultPref($core);
$pref = self::setDefaultPref();
echo
'<div class="fieldset">' .
@ -110,80 +110,78 @@ class topWriterAdmin
public static function adminAfterDashboardOptionsUpdate($user_id)
{
global $core;
$core->auth->user_prefs->dashboard->put(
dcCore::app()->auth->user_prefs->dashboard->put(
'topWriterPostsItems',
!empty($_POST['topWriterPostsItems']),
'boolean'
);
$core->auth->user_prefs->dashboard->put(
dcCore::app()->auth->user_prefs->dashboard->put(
'topWriterPostsPeriod',
(string) $_POST['topWriterPostsPeriod'],
'string'
);
$core->auth->user_prefs->dashboard->put(
dcCore::app()->auth->user_prefs->dashboard->put(
'topWriterPostsLimit',
(int) $_POST['topWriterPostsLimit'],
'integer'
);
$core->auth->user_prefs->dashboard->put(
dcCore::app()->auth->user_prefs->dashboard->put(
'topWriterCommentsItems',
!empty($_POST['topWriterCommentsItems']),
'boolean'
);
$core->auth->user_prefs->dashboard->put(
dcCore::app()->auth->user_prefs->dashboard->put(
'topWriterCommentsPeriod',
(string) $_POST['topWriterCommentsPeriod'],
'string'
);
$core->auth->user_prefs->dashboard->put(
dcCore::app()->auth->user_prefs->dashboard->put(
'topWriterCommentsLimit',
(int) $_POST['topWriterCommentsLimit'],
'integer'
);
}
private static function setDefaultPref($core)
private static function setDefaultPref()
{
if (!$core->auth->user_prefs->dashboard->prefExists('topWriterPostsItems')) {
$core->auth->user_prefs->dashboard->put(
if (!dcCore::app()->auth->user_prefs->dashboard->prefExists('topWriterPostsItems')) {
dcCore::app()->auth->user_prefs->dashboard->put(
'topWriterPostsItems',
false,
'boolean'
);
}
if (!$core->auth->user_prefs->dashboard->prefExists('topWriterPostsPeriod')) {
$core->auth->user_prefs->dashboard->put(
if (!dcCore::app()->auth->user_prefs->dashboard->prefExists('topWriterPostsPeriod')) {
dcCore::app()->auth->user_prefs->dashboard->put(
'topWriterPostsPeriod',
'month',
'string'
);
}
if (!$core->auth->user_prefs->dashboard->prefExists('topWriterPostsLimit')) {
$core->auth->user_prefs->dashboard->put(
if (!dcCore::app()->auth->user_prefs->dashboard->prefExists('topWriterPostsLimit')) {
dcCore::app()->auth->user_prefs->dashboard->put(
'topWriterPostsLimit',
10,
'integer'
);
}
if (!$core->auth->user_prefs->dashboard->prefExists('topWriterCommentsItems')) {
$core->auth->user_prefs->dashboard->put(
if (!dcCore::app()->auth->user_prefs->dashboard->prefExists('topWriterCommentsItems')) {
dcCore::app()->auth->user_prefs->dashboard->put(
'topWriterCommentsItems',
false,
'boolean'
);
}
if (!$core->auth->user_prefs->dashboard->prefExists('topWriterCommentsPeriod')) {
$core->auth->user_prefs->dashboard->put(
if (!dcCore::app()->auth->user_prefs->dashboard->prefExists('topWriterCommentsPeriod')) {
dcCore::app()->auth->user_prefs->dashboard->put(
'topWriterCommentsPeriod',
'month',
'string'
);
}
if (!$core->auth->user_prefs->dashboard->prefExists('topWriterCommentsLimit')) {
$core->auth->user_prefs->dashboard->put(
if (!dcCore::app()->auth->user_prefs->dashboard->prefExists('topWriterCommentsLimit')) {
dcCore::app()->auth->user_prefs->dashboard->put(
'topWriterCommentsLimit',
10,
'integer'
@ -191,12 +189,12 @@ class topWriterAdmin
}
return [
'topWriterPostsItems' => $core->auth->user_prefs->dashboard->get('topWriterPostsItems'),
'topWriterPostsPeriod' => $core->auth->user_prefs->dashboard->get('topWriterPostsPeriod'),
'topWriterPostsLimit' => $core->auth->user_prefs->dashboard->get('topWriterPostsLimit') ?? 10,
'topWriterCommentsItems' => $core->auth->user_prefs->dashboard->get('topWriterCommentsItems'),
'topWriterCommentsPeriod' => $core->auth->user_prefs->dashboard->get('topWriterCommentsPeriod'),
'topWriterCommentsLimit' => $core->auth->user_prefs->dashboard->get('topWriterCommentsLimit') ?? 10
'topWriterPostsItems' => dcCore::app()->auth->user_prefs->dashboard->get('topWriterPostsItems'),
'topWriterPostsPeriod' => dcCore::app()->auth->user_prefs->dashboard->get('topWriterPostsPeriod'),
'topWriterPostsLimit' => dcCore::app()->auth->user_prefs->dashboard->get('topWriterPostsLimit') ?? 10,
'topWriterCommentsItems' => dcCore::app()->auth->user_prefs->dashboard->get('topWriterCommentsItems'),
'topWriterCommentsPeriod' => dcCore::app()->auth->user_prefs->dashboard->get('topWriterCommentsPeriod'),
'topWriterCommentsLimit' => dcCore::app()->auth->user_prefs->dashboard->get('topWriterCommentsLimit') ?? 10,
];
}
}

View File

@ -18,13 +18,13 @@ $this->registerModule(
'Top writer',
'Ranking of the most prolific writers and/or commentators',
'Jean-Christian Denis, Pierre Van Glabeke',
'0.9',
'0.10',
[
'requires' => [['core', '2.19']],
'permissions' => 'admin',
'requires' => [['core', '2.24']],
'permissions' => dcAuth::PERMISSION_CONTENT_ADMIN,
'type' => 'plugin',
'support' => 'http://forum.dotclear.org/viewtopic.php?pid=333002#p333002',
'details' => 'http://plugins.dotaddict.org/dc2/details/topWriter',
'repository' => 'https://raw.githubusercontent.com/JcDenis/topWriter/master/dcstore.xml'
'repository' => 'https://raw.githubusercontent.com/JcDenis/topWriter/master/dcstore.xml',
]
);

View File

@ -14,4 +14,4 @@ if (!defined('DC_RC_PATH')) {
return;
}
$__autoload['topWriter'] = dirname(__FILE__) . '/inc/class.topwriter.php';
Clearbricks::lib()->autoload(['topWriter' => __DIR__ . '/inc/class.topwriter.php']);

View File

@ -14,4 +14,4 @@ if (!defined('DC_RC_PATH')) {
return null;
}
require dirname(__FILE__) . '/_widgets.php';
require __DIR__ . '/_widgets.php';

View File

@ -14,7 +14,7 @@ if (!defined('DC_RC_PATH')) {
return null;
}
$core->addBehavior('initWidgets', ['topWriterWidget', 'init']);
dcCore::app()->addBehavior('initWidgets', ['topWriterWidget', 'init']);
class topWriterWidget
{
@ -50,7 +50,7 @@ class topWriterWidget
'combo',
[
__('Ascending') => 'asc',
__('Descending') => 'desc'
__('Descending') => 'desc',
]
)
->setting(
@ -100,7 +100,7 @@ class topWriterWidget
'combo',
[
__('Ascending') => 'asc',
__('Descending') => 'desc'
__('Descending') => 'desc',
]
)
->setting(
@ -117,16 +117,14 @@ class topWriterWidget
public static function topCom($w)
{
global $core;
if ($w->offline
|| ($w->homeonly == 1 && !$core->url->isHome($core->url->type))
|| ($w->homeonly == 2 && $core->url->isHome($core->url->type))
|| ($w->homeonly == 1 && !dcCore::app()->url->isHome(dcCore::app()->url->type))
|| ($w->homeonly == 2 && dcCore::app()->url->isHome(dcCore::app()->url->type))
) {
return null;
}
$lines = topWriter::comments($core, $w->period, $w->limit, $w->sort == 'desc', $w->exclude);
$lines = topWriter::comments($w->period, $w->limit, $w->sort == 'desc', $w->exclude);
if (empty($lines)) {
return null;
}
@ -142,16 +140,14 @@ class topWriterWidget
public static function topPost($w)
{
global $core;
if ($w->offline
|| ($w->homeonly == 1 && !$core->url->isHome($core->url->type))
|| ($w->homeonly == 2 && $core->url->isHome($core->url->type))
|| ($w->homeonly == 1 && !dcCore::app()->url->isHome(dcCore::app()->url->type))
|| ($w->homeonly == 2 && dcCore::app()->url->isHome(dcCore::app()->url->type))
) {
return null;
}
$lines = topWriter::posts($core, $w->period, $w->limit, $w->sort == 'desc');
$lines = topWriter::posts($w->period, $w->limit, $w->sort == 'desc');
if (empty($lines)) {
return null;
}

View File

@ -16,30 +16,30 @@ if (!defined('DC_RC_PATH')) {
class topWriter
{
public static function posts(dcCore $core, string $period, int $limit, bool $sort_desc = true)
public static function posts(string $period, int $limit, bool $sort_desc = true)
{
$req = 'SELECT COUNT(*) AS count, U.user_id ' .
'FROM ' . $core->prefix . 'post P ' .
'INNER JOIN ' . $core->prefix . 'user U ON U.user_id = P.user_id ' .
"WHERE blog_id='" . $core->con->escape($core->blog->id) . "' " .
'FROM ' . dcCore::app()->prefix . 'post P ' .
'INNER JOIN ' . dcCore::app()->prefix . 'user U ON U.user_id = P.user_id ' .
"WHERE blog_id='" . dcCore::app()->con->escape(dcCore::app()->blog->id) . "' " .
'AND post_status=1 AND user_status=1 ' .
self::period('post_dt', $period) .
'GROUP BY U.user_id ' .
'ORDER BY count ' . ($sort_desc ? 'DESC' : 'ASC') . ' , U.user_id ASC ' .
$core->con->limit(abs((int) $limit));
dcCore::app()->con->limit(abs((int) $limit));
$rs = $core->con->select($req);
$rs = dcCore::app()->con->select($req);
if ($rs->isEmpty()) {
return null;
}
$core->blog->settings->addNamespace('authormode');
dcCore::app()->blog->settings->addNamespace('authormode');
$res = [];
$i = 0;
while ($rs->fetch()) {
$user = $core->con->select(
'SELECT * FROM ' . $core->prefix . "user WHERE user_id='" . $rs->user_id . "' "
$user = dcCore::app()->con->select(
'SELECT * FROM ' . dcCore::app()->prefix . "user WHERE user_id='" . $rs->user_id . "' "
);
if ($user->isEmpty()) {
continue;
@ -56,9 +56,9 @@ class topWriter
}
$i++;
if ($core->blog->settings->authormode->authormode_active) {
if (dcCore::app()->blog->settings->authormode->authormode_active) {
$res[$i]['author_link'] = '<a href="' .
$core->blog->url . $core->url->getBase('author') . '/' . $user->user_id . '" ' .
dcCore::app()->blog->url . dcCore::app()->url->getBase('author') . '/' . $user->user_id . '" ' .
'title="' . __('Author posts') . '">' . $author . '</a>';
} elseif ($user->user_url) {
$res[$i]['author_link'] = '<a href="' . $user->user_url . '" title="' .
@ -80,29 +80,29 @@ class topWriter
return $res;
}
public static function comments(dcCore $core, string $period, int $limit, bool $sort_desc = true, $exclude = false)
public static function comments(string $period, int $limit, bool $sort_desc = true, $exclude = false)
{
$req = 'SELECT COUNT(*) AS count, comment_email ' .
'FROM ' . $core->prefix . 'post P, ' . $core->prefix . 'comment C ' .
'FROM ' . dcCore::app()->prefix . 'post P, ' . dcCore::app()->prefix . 'comment C ' .
'WHERE P.post_id=C.post_id ' .
"AND blog_id='" . $core->con->escape($core->blog->id) . "' " .
"AND blog_id='" . dcCore::app()->con->escape(dcCore::app()->blog->id) . "' " .
'AND post_status=1 AND comment_status=1 ' .
self::period('comment_dt', $period);
if ($exclude) {
$req .= 'AND comment_email NOT IN (' .
' SELECT U.user_email ' .
' FROM ' . $core->prefix . 'user U' .
' INNER JOIN ' . $core->prefix . 'post P ON P.user_id = U.user_id ' .
" WHERE blog_id='" . $core->con->escape($core->blog->id) . "' " .
' FROM ' . dcCore::app()->prefix . 'user U' .
' INNER JOIN ' . dcCore::app()->prefix . 'post P ON P.user_id = U.user_id ' .
" WHERE blog_id='" . dcCore::app()->con->escape(dcCore::app()->blog->id) . "' " .
' GROUP BY U.user_email) ';
}
$req .= 'GROUP BY comment_email ' .
'ORDER BY count ' . ($sort_desc ? 'DESC' : 'ASC') . ' ' .
$core->con->limit(abs((int) $limit));
dcCore::app()->con->limit(abs((int) $limit));
$rs = $core->con->select($req);
$rs = dcCore::app()->con->select($req);
if ($rs->isEmpty()) {
return null;
}
@ -110,8 +110,8 @@ class topWriter
$res = [];
$i = 0;
while ($rs->fetch()) {
$user = $core->con->select(
'SELECT * FROM ' . $core->prefix . 'comment ' .
$user = dcCore::app()->con->select(
'SELECT * FROM ' . dcCore::app()->prefix . 'comment ' .
"WHERE comment_email='" . $rs->comment_email . "' " .
'ORDER BY comment_dt DESC'
);
@ -150,27 +150,25 @@ class topWriter
case 'day':
$time = 3600 * 24;
break;
break;
case 'week':
$time = 3600 * 24 * 7;
break;
break;
case 'month':
$time = 3600 * 24 * 30;
break;
break;
case 'year':
$time = 3600 * 24 * 30 * 12;
break;
break;
default:
return '';
break;
}
return "AND $field > TIMESTAMP '" . dt::str($pattern, time() - $time) . "' ";
@ -183,7 +181,7 @@ class topWriter
__('last week') => 'week',
__('last month') => 'month',
__('last year') => 'year',
__('from begining') => ''
__('from begining') => '',
];
}
}