瀏覽代碼

* 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');
             $r->add('GET', '/admin/statistics', 'AdminStatistics:statistics', 'AdminStatistics');
 
 
             if ($user->canViewIP) {
             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', 'AdminUsers:view', 'AdminUsers');
             $r->add(['GET', 'POST'], '/admin/users/result/{data}[/{page:[1-9]\d*}]', 'AdminUsersResult:view', 'AdminUsersResult');
             $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', '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) {
         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') {
             if ($forum->no_sum_mess != '1') {
                 $this->user->num_posts = $this->user->num_posts + 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;
                     $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\DataModel;
 use ForkBB\Models\Model as BaseModel;
 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;
 use RuntimeException;
 
 
 class Model extends DataModel
 class Model extends DataModel
@@ -319,4 +320,30 @@ class Model extends DataModel
     {
     {
         return $this->isAdmin;
         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,
         'AdminUsers'      => \ForkBB\Models\Pages\Admin\Users\View::class,
         'AdminUsersResult' => \ForkBB\Models\Pages\Admin\Users\Result::class,
         'AdminUsersResult' => \ForkBB\Models\Pages\Admin\Users\Result::class,
         'AdminUsersStat'  => \ForkBB\Models\Pages\Admin\Users\Stat::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,
         'AdminHost'       => \ForkBB\Models\Pages\Admin\Host::class,
 
 
         'ConfigModel'     => \ForkBB\Models\Config\Model::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"
 msgid "No users found"
 msgstr "No users were found matching your criteria."
 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"
 msgid "User delete redirect"
 msgstr "User deleted. Redirecting …"
 msgstr "User deleted. Redirecting …"
 
 
-msgid "User promote redirect"
-msgstr "User promoted. Redirecting …"
-
 msgid "Group membership redirect"
 msgid "Group membership redirect"
 msgstr "Group membership saved. Redirecting …"
 msgstr "Group membership saved. Redirecting …"
 
 

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

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

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

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

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

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

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

@@ -90,6 +90,9 @@
             <li class="f-usertitle">{{ $post->user->title() }}</li>
             <li class="f-usertitle">{{ $post->user->title() }}</li>
         @if ($p->user->showUserInfo && $p->user->showPostCount && $post->user->num_posts)
         @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>
             <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
         @endif
           </ul>
           </ul>
         @if (! $post->user->isGuest && $p->user->showUserInfo)
         @if (! $post->user->isGuest && $p->user->showUserInfo)

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

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