]> git.mxchange.org Git - friendica-addons.git/commitdiff
Ratioed: move panel class into separate file
authorMatthew Exon <git.mexon@spamgourmet.com>
Sun, 23 Jun 2024 13:24:43 +0000 (15:24 +0200)
committerMatthew Exon <git.mexon@spamgourmet.com>
Sun, 23 Jun 2024 13:43:05 +0000 (15:43 +0200)
ratioed/RatioedPanel.php [new file with mode: 0644]
ratioed/ratioed.php

diff --git a/ratioed/RatioedPanel.php b/ratioed/RatioedPanel.php
new file mode 100644 (file)
index 0000000..16f9df6
--- /dev/null
@@ -0,0 +1,206 @@
+<?php
+
+namespace Friendica\Addon\ratioed;
+
+use Friendica\Content\Pager;
+use Friendica\Core\Logger;
+use Friendica\Core\Renderer;
+use Friendica\Database\DBA;
+use Friendica\Model\User;
+use Friendica\Module\Moderation\Users\Active;
+
+/**
+ * This class implements the "Behaviour" panel in Moderation/Users
+ */
+class RatioedPanel extends Active
+{
+       protected function content(array $request = []): string
+       {
+               Active::content();
+
+               $action = $this->parameters['action'] ?? '';
+               $uid    = $this->parameters['uid']      ?? 0;
+
+               if ($uid) {
+                       $user = User::getById($uid, ['username', 'blocked']);
+                       if (!$user) {
+                               $this->systemMessages->addNotice($this->t('User not found'));
+                               $this->baseUrl->redirect('moderation/users');
+                       }
+               }
+
+               switch ($action) {
+                       case 'delete':
+                               if ($this->session->getLocalUserId() != $uid) {
+                                       self::checkFormSecurityTokenRedirectOnError('moderation/users/active', 'moderation_users_active', 't');
+                                       // delete user
+                                       User::remove($uid);
+
+                                       $this->systemMessages->addNotice($this->t('User "%s" deleted', $user['username']));
+                               } else {
+                                       $this->systemMessages->addNotice($this->t('You can\'t remove yourself'));
+                               }
+
+                               $this->baseUrl->redirect('moderation/users/active');
+                               break;
+                       case 'block':
+                               self::checkFormSecurityTokenRedirectOnError('moderation/users/active', 'moderation_users_active', 't');
+                               User::block($uid);
+                               $this->systemMessages->addNotice($this->t('User "%s" blocked', $user['username']));
+                               $this->baseUrl->redirect('moderation/users/active');
+                               break;
+               }
+               $pager = new Pager($this->l10n, $this->args->getQueryString(), 100);
+
+               $valid_orders = [
+                       'name',
+                       'email',
+                       'register_date',
+                       'last-activity',
+                       'last-item',
+                       'page-flags',
+               ];
+
+               $order             = 'last-item';
+               $order_direction = '-';
+               if (!empty($request['o'])) {
+                       $new_order = $request['o'];
+                       if ($new_order[0] === '-') {
+                               $order_direction = '-';
+                               $new_order         = substr($new_order, 1);
+                       }
+
+                       if (in_array($new_order, $valid_orders)) {
+                               $order = $new_order;
+                       }
+               }
+
+               $users = User::getList($pager->getStart(), $pager->getItemsPerPage(), 'active', $order, ($order_direction == '-'));
+
+               $users = array_map($this->setupUserCallback(), $users);
+
+               $header_titles = [
+                       $this->t('Name'),
+                       $this->t('Email'),
+                       $this->t('Register date'),
+                       $this->t('Last login'),
+                       $this->t('Last public item'),
+                       $this->t('Type'),
+                       $this->t('Blocked by'),
+                       $this->t('Comments last 24h'),
+                       $this->t('Reactions last 24h'),
+                       $this->t('Ratio last 24h'),
+               ];
+               $field_names = [
+                       'name',
+                       'email',
+                       'register_date',
+                       'login_date',
+                       'lastitem_date',
+                       'page_flags',
+                       'blocked_by',
+                       'comments',
+                       'reactions',
+                       'ratio',
+               ];
+               $th_users = array_map(null, $header_titles, $valid_orders, $field_names);
+
+               $count = $this->database->count('user', ["`verified` AND NOT `blocked` AND NOT `account_removed` AND NOT `account_expired` AND `uid` != ?", 0]);
+
+               $t = Renderer::getMarkupTemplate('ratioed.tpl', 'addon/ratioed');
+               return self::getTabsHTML('ratioed') . Renderer::replaceMacros($t, [
+                       // strings //
+                       '$title'                  => $this->t('Moderation'),
+                       '$page'            => $this->t('Behaviour'),
+                       '$select_all'    => $this->t('select all'),
+                       '$delete'                => $this->t('Delete'),
+                       '$block'                  => $this->t('Block'),
+                       '$blocked'              => $this->t('User blocked'),
+                       '$siteadmin'      => $this->t('Site admin'),
+                       '$accountexpired' => $this->t('Account expired'),
+                       '$h_newuser'      => $this->t('Create a new user'),
+
+                       '$th_users'                       => $th_users,
+                       '$order_users'             => $order,
+                       '$order_direction_users' => $order_direction,
+
+                       '$confirm_delete_multi' => $this->t('Selected users will be deleted!\n\nEverything these users had posted on this site will be permanently deleted!\n\nAre you sure?'),
+                       '$confirm_delete'          => $this->t('The user {0} will be deleted!\n\nEverything this user has posted on this site will be permanently deleted!\n\nAre you sure?'),
+
+                       '$form_security_token' => self::getFormSecurityToken('moderation_users_active'),
+
+                       // values //
+                       '$baseurl'        => $this->baseUrl,
+                       '$query_string' => $this->args->getQueryString(),
+
+                       '$users' => $users,
+                       '$count' => $count,
+                       '$pager' => $pager->renderFull($count),
+               ]);
+       }
+
+       protected function setupUserCallback(): \Closure
+       {
+               Logger::debug("ratioed: setupUserCallback");
+               $parentCallback = parent::setupUserCallback();
+               return function ($user) use ($parentCallback) {
+                       $blocked_count = DBA::count('user-contact', ['uid' => $user['uid'], 'is-blocked' => 1]);
+                       $user['blocked_by'] = $blocked_count;
+
+                       $self_contact_result = DBA::p('SELECT admin_contact.id AS user_contact_uid FROM contact AS admin_contact JOIN contact AS user_contact ON admin_contact.`uri-id` = user_contact.`uri-id` AND admin_contact.self = 0 AND user_contact.self = 1 WHERE user_contact.uid = ?', $user['uid']);
+                       if (DBA::isResult($self_contact_result)) {
+                               $self_contact_result_row = DBA::fetch($self_contact_result);
+                               $user['user_contact_uid'] = $self_contact_result_row['user_contact_uid'];
+                       }
+                       else {
+                               $user['user_contact_uid'] = NULL;
+                       }
+
+                       if ($user['user_contact_uid']) {
+                               $post_engagement_result = DBA::p('SELECT SUM(`comments`) AS `comment_count`, SUM(`activities`) AS `activities_count` FROM `post-engagement` WHERE `post-engagement`.created > DATE_SUB(now(), INTERVAL 1 DAY) AND `post-engagement`.`owner-id` = ?', $user['user_contact_uid']);
+                               if (DBA::isResult($post_engagement_result)) {
+                                       $post_engagement_result_row = DBA::fetch($post_engagement_result);
+                                       $user['comments'] = $post_engagement_result_row['comment_count'];
+                                       $user['reactions'] = $post_engagement_result_row['activities_count'];
+                                       if ($user['reactions'] > 0) {
+                                               $user['ratio'] = number_format($user['comments'] / $user['reactions'], 1, '.', '');
+                                               $user['ratioed'] = (float)($user['ratio']) >= 2.0;
+                                       }
+                                       else {
+                                               if ($user['comments'] == 0) {
+                                                       $user['ratio'] = '0';
+                                                       $user['ratioed'] = false;
+                                               }
+                                               else {
+                                                       $user['ratio'] = '∞';
+                                                       $user['ratioed'] = false;
+                                               }
+                                       }
+                               }
+                               else {
+                                       $user['comments'] = 'error';
+                                       $user['reactions'] = 'error';
+                                       $user['ratio'] = 'error';
+                                       $user['ratioed'] = false;
+                               }
+                       }
+                       else {
+                               $user['comments'] = 'error';
+                               $user['reactions'] = 'error';
+                               $user['ratio'] = 'error';
+                               $user['ratioed'] = false;
+                       }
+
+                       $user = $parentCallback($user);
+                       Logger::debug("ratioed: setupUserCallback", [
+                               'uid' => $user['uid'],
+                               'blocked_by' => $user['blocked_by'],
+                               'comments' => $user['comments'],
+                               'reactions' => $user['reactions'],
+                               'ratio' => $user['ratio'],
+                               'ratioed' => $user['ratioed'],
+                       ]);
+                       return $user;
+               };
+       }
+}
index d8da9ac1048e28783881439f60073657c4cfa5b4..8ae0d48c79b395bdbac24d8931d1ce77f66b6049 100644 (file)
@@ -6,14 +6,10 @@
  * Author: Matthew Exon <http://mat.exon.name>
  */
 
-use Friendica\Content\Pager;
+use Friendica\Addon\ratioed\RatioedPanel;
 use Friendica\Core\Hook;
 use Friendica\Core\Logger;
-use Friendica\Core\Renderer;
-use Friendica\Database\DBA;
 use Friendica\DI;
-use Friendica\Model\User;
-use Friendica\Module\Moderation\Users\Active;
 
 /**
  * Sets up the addon hooks and updates data in the database if needed
@@ -50,206 +46,13 @@ function ratioed_users_tabs(array &$arr) {
        ]);
 }
 
-class Ratioed extends Friendica\Module\Moderation\Users\Active
-{
-       protected function content(array $request = []): string
-       {
-               Friendica\Module\Moderation\Users\Active::content();
-
-               $action = $this->parameters['action'] ?? '';
-               $uid    = $this->parameters['uid']      ?? 0;
-
-               if ($uid) {
-                       $user = User::getById($uid, ['username', 'blocked']);
-                       if (!$user) {
-                               $this->systemMessages->addNotice($this->t('User not found'));
-                               $this->baseUrl->redirect('moderation/users');
-                       }
-               }
-
-               switch ($action) {
-                       case 'delete':
-                               if ($this->session->getLocalUserId() != $uid) {
-                                       self::checkFormSecurityTokenRedirectOnError('moderation/users/active', 'moderation_users_active', 't');
-                                       // delete user
-                                       User::remove($uid);
-
-                                       $this->systemMessages->addNotice($this->t('User "%s" deleted', $user['username']));
-                               } else {
-                                       $this->systemMessages->addNotice($this->t('You can\'t remove yourself'));
-                               }
-
-                               $this->baseUrl->redirect('moderation/users/active');
-                               break;
-                       case 'block':
-                               self::checkFormSecurityTokenRedirectOnError('moderation/users/active', 'moderation_users_active', 't');
-                               User::block($uid);
-                               $this->systemMessages->addNotice($this->t('User "%s" blocked', $user['username']));
-                               $this->baseUrl->redirect('moderation/users/active');
-                               break;
-               }
-               $pager = new Pager($this->l10n, $this->args->getQueryString(), 100);
-
-               $valid_orders = [
-                       'name',
-                       'email',
-                       'register_date',
-                       'last-activity',
-                       'last-item',
-                       'page-flags',
-               ];
-
-               $order             = 'last-item';
-               $order_direction = '-';
-               if (!empty($request['o'])) {
-                       $new_order = $request['o'];
-                       if ($new_order[0] === '-') {
-                               $order_direction = '-';
-                               $new_order         = substr($new_order, 1);
-                       }
-
-                       if (in_array($new_order, $valid_orders)) {
-                               $order = $new_order;
-                       }
-               }
-
-               $users = User::getList($pager->getStart(), $pager->getItemsPerPage(), 'active', $order, ($order_direction == '-'));
-
-               $users = array_map($this->setupUserCallback(), $users);
-
-               $header_titles = [
-                       $this->t('Name'),
-                       $this->t('Email'),
-                       $this->t('Register date'),
-                       $this->t('Last login'),
-                       $this->t('Last public item'),
-                       $this->t('Type'),
-                       $this->t('Blocked by'),
-                       $this->t('Comments last 24h'),
-                       $this->t('Reactions last 24h'),
-                       $this->t('Ratio last 24h'),
-               ];
-               $field_names = [
-                       'name',
-                       'email',
-                       'register_date',
-                       'login_date',
-                       'lastitem_date',
-                       'page_flags',
-            'blocked_by',
-                       'comments',
-                       'reactions',
-                       'ratio',
-               ];
-               $th_users = array_map(null, $header_titles, $valid_orders, $field_names);
-
-               $count = $this->database->count('user', ["`verified` AND NOT `blocked` AND NOT `account_removed` AND NOT `account_expired` AND `uid` != ?", 0]);
-
-               $t = Renderer::getMarkupTemplate('ratioed.tpl', 'addon/ratioed');
-               return self::getTabsHTML('ratioed') . Renderer::replaceMacros($t, [
-                       // strings //
-                       '$title'                  => $this->t('Moderation'),
-                       '$page'            => $this->t('Behaviour'),
-                       '$select_all'    => $this->t('select all'),
-                       '$delete'                => $this->t('Delete'),
-                       '$block'                  => $this->t('Block'),
-                       '$blocked'              => $this->t('User blocked'),
-                       '$siteadmin'      => $this->t('Site admin'),
-                       '$accountexpired' => $this->t('Account expired'),
-                       '$h_newuser'      => $this->t('Create a new user'),
-
-                       '$th_users'                       => $th_users,
-                       '$order_users'             => $order,
-                       '$order_direction_users' => $order_direction,
-
-                       '$confirm_delete_multi' => $this->t('Selected users will be deleted!\n\nEverything these users had posted on this site will be permanently deleted!\n\nAre you sure?'),
-                       '$confirm_delete'          => $this->t('The user {0} will be deleted!\n\nEverything this user has posted on this site will be permanently deleted!\n\nAre you sure?'),
-
-                       '$form_security_token' => self::getFormSecurityToken('moderation_users_active'),
-
-                       // values //
-                       '$baseurl'        => $this->baseUrl,
-                       '$query_string' => $this->args->getQueryString(),
-
-                       '$users' => $users,
-                       '$count' => $count,
-                       '$pager' => $pager->renderFull($count),
-               ]);
-       }
-
-       protected function setupUserCallback(): \Closure
-       {
-       Logger::debug("ratioed: setupUserCallback");
-               $parentCallback = parent::setupUserCallback();
-               return function ($user) use ($parentCallback) {
-            $blocked_count = DBA::count('user-contact', ['uid' => $user['uid'], 'is-blocked' => 1]);
-                       $user['blocked_by'] = $blocked_count;
-
-            $self_contact_result = DBA::p('SELECT admin_contact.id AS user_contact_uid FROM contact AS admin_contact JOIN contact AS user_contact ON admin_contact.`uri-id` = user_contact.`uri-id` AND admin_contact.self = 0 AND user_contact.self = 1 WHERE user_contact.uid = ?', $user['uid']);
-            if (DBA::isResult($self_contact_result)) {
-                $self_contact_result_row = DBA::fetch($self_contact_result);
-                $user['user_contact_uid'] = $self_contact_result_row['user_contact_uid'];
-            }
-            else {
-                $user['user_contact_uid'] = NULL;
-            }
-
-            if ($user['user_contact_uid']) {
-                $post_engagement_result = DBA::p('SELECT SUM(`comments`) AS `comment_count`, SUM(`activities`) AS `activities_count` FROM `post-engagement` WHERE `post-engagement`.created > DATE_SUB(now(), INTERVAL 1 DAY) AND `post-engagement`.`owner-id` = ?', $user['user_contact_uid']);
-                if (DBA::isResult($post_engagement_result)) {
-                    $post_engagement_result_row = DBA::fetch($post_engagement_result);
-                    $user['comments'] = $post_engagement_result_row['comment_count'];
-                    $user['reactions'] = $post_engagement_result_row['activities_count'];
-                    if ($user['reactions'] > 0) {
-                        $user['ratio'] = number_format($user['comments'] / $user['reactions'], 1, '.', '');
-                        $user['ratioed'] = (float)($user['ratio']) >= 2.0;
-                    }
-                    else {
-                        if ($user['comments'] == 0) {
-                            $user['ratio'] = '0';
-                            $user['ratioed'] = false;
-                        }
-                        else {
-                            $user['ratio'] = '∞';
-                            $user['ratioed'] = false;
-                        }
-                    }
-                }
-                else {
-                    $user['comments'] = 'error';
-                    $user['reactions'] = 'error';
-                    $user['ratio'] = 'error';
-                    $user['ratioed'] = false;
-                }
-            }
-            else {
-                $user['comments'] = 'error';
-                $user['reactions'] = 'error';
-                $user['ratio'] = 'error';
-                $user['ratioed'] = false;
-            }
-
-                       $user = $parentCallback($user);
-            Logger::debug("ratioed: setupUserCallback", [
-                'uid' => $user['uid'],
-                'blocked_by' => $user['blocked_by'],
-                'comments' => $user['comments'],
-                'reactions' => $user['reactions'],
-                'ratio' => $user['ratio'],
-                'ratioed' => $user['ratioed'],
-            ]);
-                       return $user;
-               };
-       }
-}
-
 /**
  * @brief Displays the ratioed tab in the moderation panel
  */
 function ratioed_content() {
        Logger::debug("ratioed: content");
 
-       $ratioed = DI::getDice()->create(Ratioed::class, [$_SERVER]);
+       $ratioed = DI::getDice()->create(RatioedPanel::class, [$_SERVER]);
        $httpException = DI::getDice()->create(Friendica\Module\Special\HTTPException::class);
        $ratioed->run($httpException);
 }