浏览代码

* Added user promotion

Visman 6 年之前
父节点
当前提交
7cec9c591a

+ 4 - 2
app/Controllers/Routing.php

@@ -127,13 +127,15 @@ class Routing
             $r->add('GET', '/admin/statistics', 'AdminStatistics:statistics', 'AdminStatistics');
 
             if ($user->canViewIP) {
-                $r->add('GET',           '/admin/get/host/{ip:[0-9a-fA-F:.]+}',      'AdminHost:view',           'AdminHost');
-                $r->add('GET',           '/admin/users/user/{id:[2-9]|[1-9]\d+}[/{page:[1-9]\d*}]',      'AdminUsersStat:view',            'AdminUserStat');
+                $r->add('GET', '/admin/get/host/{ip:[0-9a-fA-F:.]+}', 'AdminHost:view', 'AdminHost');
+                $r->add('GET', '/admin/users/user/{id:[2-9]|[1-9]\d+}[/{page:[1-9]\d*}]', 'AdminUsersStat:view', 'AdminUserStat');
             }
 
             $r->add(['GET', 'POST'], '/admin/users', 'AdminUsers:view', 'AdminUsers');
             $r->add(['GET', 'POST'], '/admin/users/result/{data}[/{page:[1-9]\d*}]', 'AdminUsersResult:view', 'AdminUsersResult');
             $r->add(['GET', 'POST'], '/admin/users/{action:\w+}/{ids:\d+(?:-\d+)*}', 'AdminUsersAction:view', 'AdminUsersAction');
+
+            $r->add('GET',           '/admin/users/promote/{uid:[2-9]|[1-9]\d+}/{pid:[1-9]\d*}/{token}', 'AdminUsersPromote:promote', 'AdminUserPromote');
         }
         // только админ
         if ($user->isAdmin) {

+ 31 - 0
app/Models/Pages/Admin/Users/Promote.php

@@ -0,0 +1,31 @@
+<?php
+
+namespace ForkBB\Models\Pages\Admin\Users;
+
+use ForkBB\Models\Pages\Admin\Users;
+
+class Promote extends Users
+{
+    /**
+     * Продвигает пользователя
+     *
+     * @param array $args
+     * @param string $method
+     *
+     * @return Page
+     */
+    public function promote(array $args, $method)
+    {
+        if (! $this->c->Csrf->verify($args['token'], 'AdminUserPromote', $args)) {
+            return $this->c->Message->message('Bad token');
+        }
+
+        $user = $this->c->users->load((int) $args['uid']);
+        if (0 < $user->g_promote_next_group * $user->g_promote_min_posts) {
+            $user->group_id = $user->g_promote_next_group;
+            $this->c->users->update($user);
+        }
+
+        return $this->c->Redirect->page('ViewPost', ['id' => $args['pid']])->message('User promote redirect');
+    }
+}

+ 1 - 1
app/Models/Pages/Post.php

@@ -217,7 +217,7 @@ class Post extends Page
             if ($forum->no_sum_mess != '1') {
                 $this->user->num_posts = $this->user->num_posts + 1;
 
-                if ($this->user->g_promote_next_group != '0' && $this->user->num_posts >= $this->user->g_promote_min_posts) {
+                if (0 != $this->user->g_promote_next_group && $this->user->num_posts >= $this->user->g_promote_min_posts) {
                     $this->user->group_id = $this->user->g_promote_next_group;
                 }
             }

+ 28 - 1
app/Models/User/Model.php

@@ -4,7 +4,8 @@ namespace ForkBB\Models\User;
 
 use ForkBB\Models\DataModel;
 use ForkBB\Models\Model as BaseModel;
-use ForkBB\Models\Forum;
+use ForkBB\Models\Forum\Model as Forum;
+use ForkBB\Models\Post\Model as Post;
 use RuntimeException;
 
 class Model extends DataModel
@@ -319,4 +320,30 @@ class Model extends DataModel
     {
         return $this->isAdmin;
     }
+
+    /**
+     * Ссылка для продвижения пользователя из указанного сообщения
+     *
+     * @param Post $post
+     *
+     * @return null|string
+     */
+    public function linkPromote(Post $post)
+    {
+        if (($this->isAdmin || ($this->isAdmMod && 1 == $this->g_mod_promote_users))
+            && $this->id !== $post->user->id //????
+            && 0 < $post->user->g_promote_min_posts * $post->user->g_promote_next_group
+        ) {
+            return $this->c->Router->link('AdminUserPromote', [
+                'uid'   => $post->user->id,
+                'pid'   => $post->id,
+                'token' => $this->c->Csrf->create('AdminUserPromote', [
+                    'uid'   => $post->user->id,
+                    'pid'   => $post->id,
+                ]),
+            ]);
+        } else {
+            return null;
+        }
+    }
 }

+ 2 - 1
app/config/main.dist.php

@@ -169,7 +169,8 @@ return [
         'AdminUsers'      => \ForkBB\Models\Pages\Admin\Users\View::class,
         'AdminUsersResult' => \ForkBB\Models\Pages\Admin\Users\Result::class,
         'AdminUsersStat'  => \ForkBB\Models\Pages\Admin\Users\Stat::class,
-        'AdminUsersAction'  => \ForkBB\Models\Pages\Admin\Users\Action::class,
+        'AdminUsersAction' => \ForkBB\Models\Pages\Admin\Users\Action::class,
+        'AdminUsersPromote' => \ForkBB\Models\Pages\Admin\Users\Promote::class,
         'AdminHost'       => \ForkBB\Models\Pages\Admin\Host::class,
 
         'ConfigModel'     => \ForkBB\Models\Config\Model::class,

+ 3 - 0
app/lang/en/admin_users.po

@@ -350,3 +350,6 @@ msgstr "Select how to view search results"
 
 msgid "No users found"
 msgstr "No users were found matching your criteria."
+
+msgid "User promote redirect"
+msgstr "User promoted. Redirecting …"

+ 0 - 3
app/lang/en/profile.po

@@ -372,9 +372,6 @@ msgstr "Delete"
 msgid "User delete redirect"
 msgstr "User deleted. Redirecting …"
 
-msgid "User promote redirect"
-msgstr "User promoted. Redirecting …"
-
 msgid "Group membership redirect"
 msgstr "Group membership saved. Redirecting …"
 

+ 3 - 0
app/lang/ru/admin_users.po

@@ -350,3 +350,6 @@ msgstr "Настройка параметров вывода результат
 
 msgid "No users found"
 msgstr "По вашему запросу ничего не найдено."
+
+msgid "User promote redirect"
+msgstr "Пользователь продвинут. Переадресация &hellip;"

+ 0 - 3
app/lang/ru/profile.po

@@ -372,9 +372,6 @@ msgstr "Удалить"
 msgid "User delete redirect"
 msgstr "Пользователь удален. Переадресация &hellip;"
 
-msgid "User promote redirect"
-msgstr "Пользователь перемещен. Переадресация &hellip;"
-
 msgid "Group membership redirect"
 msgstr "Группа пользователя изменена. Переадресация &hellip;"
 

+ 1 - 1
app/lang/ru/topic.po

@@ -22,7 +22,7 @@ msgid "From"
 msgstr "Откуда:"
 
 msgid "Promote user"
-msgstr "Переместить пользователя"
+msgstr "Продвинуть пользователя"
 
 msgid "IP address logged"
 msgstr "IP адрес"

+ 3 - 0
app/templates/topic.forkbb.php

@@ -90,6 +90,9 @@
             <li class="f-usertitle">{{ $post->user->title() }}</li>
         @if ($p->user->showUserInfo && $p->user->showPostCount && $post->user->num_posts)
             <li class="f-postcount">{!! __('%s post', $post->user->num_posts, num($post->user->num_posts)) !!}</li>
+        @endif
+        @if ($linkPromote = $p->user->linkPromote($post))
+            <li class="f-promoteuser"><a href="{!! $linkPromote !!}">{!! __('Promote user') !!}</a></li>
         @endif
           </ul>
         @if (! $post->user->isGuest && $p->user->showUserInfo)

+ 4 - 0
public/style/ForkBB/style.css

@@ -1470,6 +1470,10 @@ body,
   font-size: 1rem;
 }
 
+#fork .f-user-online .f-userstatus {
+  font-weight: bold;
+}
+
 #fork .f-post-main,
 #fork .f-post-btns,
 #fork .f-post-signature {