Forráskód Böngészése

* Form refactoring 3 and more

Visman 6 éve
szülő
commit
addb157fd6

+ 1 - 1
app/Controllers/Routing.php

@@ -79,7 +79,7 @@ class Routing
             // юзеры
             if ($user->viewUsers) {
                 // список пользователей
-                $r->add('GET',  '/userlist[/{sort:username|registered|num_posts}/{dir:ASC|DESC}/{group:\-1|[1-9]\d*}/{name}][/{page:[1-9]\d*}]', 'Userlist:view', 'Userlist');
+                $r->add('GET',  '/userlist[/{group:all|[1-9]\d*}/{sort:username|registered|num_posts}/{dir:ASC|DESC}/{name}][/{page:[1-9]\d*}]', 'Userlist:view', 'Userlist');
                 $r->add('POST', '/userlist', 'Userlist:view');
                 // юзеры
                 $r->add('GET',           '/user/{id:[2-9]|[1-9]\d+}/{name}',          'ProfileView:view',   'User');

+ 64 - 41
app/Models/Pages/Admin/Categories.php

@@ -50,6 +50,22 @@ class Categories extends Admin
             $this->fIswev  = $v->getErrors();
         }
 
+        $this->nameTpl   = 'admin/form';
+        $this->aIndex    = 'categories';
+        $this->form      = $this->formEdit();
+        $this->classForm = 'editcategories';
+        $this->titleForm = \ForkBB\__('Categories');
+
+        return $this;
+    }
+
+    /**
+     * Подготавливает массив данных для формы
+     *
+     * @return array
+     */
+    protected function formEdit()
+    {
         $form = [
             'action' => $this->c->Router->link('AdminCategories'),
             'hidden' => [
@@ -96,6 +112,7 @@ class Categories extends Admin
                 'fields' => $fields,
             ];
         }
+
         $form['sets']['new-cat'] = [
             'fields' => [
                 'new' => [
@@ -108,15 +125,10 @@ class Categories extends Admin
             ],
         ];
 
-        $this->nameTpl   = 'admin/form';
-        $this->aIndex    = 'categories';
-        $this->form      = $form;
-        $this->classForm = 'editcategories';
-        $this->titleForm = \ForkBB\__('Categories');
-
-        return $this;
+        return $form;
     }
 
+
     /**
      * Удаление категорий
      *
@@ -156,17 +168,59 @@ class Categories extends Admin
             return $this->c->Redirect->page('AdminCategories')->message('Category deleted redirect');
         }
 
-        $form = [
+        $this->nameTpl   = 'admin/form';
+        $this->aIndex    = 'categories';
+        $this->aCrumbs[] = [$this->c->Router->link('AdminCategoriesDelete', ['id' => $args['id']]), \ForkBB\__('Delete category head')];
+        $this->aCrumbs[] = \ForkBB\__('"%s"', $category['cat_name']);
+        $this->form      = $this->formDelete($args, $category);
+        $this->classForm = 'deletecategory';
+        $this->titleForm = \ForkBB\__('Delete category head');
+
+        return $this;
+    }
+
+    /**
+     * Подготавливает массив данных для формы
+     *
+     * @param array $args
+     * @param array $category
+     *
+     * @return array
+     */
+    protected function formDelete(array $args, array $category)
+    {
+        return [
             'action' => $this->c->Router->link('AdminCategoriesDelete', $args),
             'hidden' => [
                 'token' => $this->c->Csrf->create('AdminCategoriesDelete', $args),
             ],
-            'sets'   => [],
+            'sets'   => [
+                'del' => [
+                    'fields' => [
+                        'confirm' => [
+                            'caption' => \ForkBB\__('Confirm delete'),
+                            'type'    => 'checkbox',
+                            'label'   => \ForkBB\__('I want to delete the category %s', $category['cat_name']),
+                            'value'   => '1',
+                            'checked' => false,
+                        ],
+                    ],
+                ],
+                'del-info' => [
+                    'info' => [
+                        'info1' => [
+                            'type'  => '', //????
+                            'value' => \ForkBB\__('Delete category warn'),
+                            'html'  => true,
+                        ],
+                    ],
+                ],
+            ],
             'btns'   => [
                 'delete' => [
                     'type'      => 'submit',
                     'value'     => \ForkBB\__('Delete category'),
-                    'accesskey' => 'd',
+                    'accesskey' => 's',
                 ],
                 'cancel' => [
                     'type'      => 'btn',
@@ -175,36 +229,5 @@ class Categories extends Admin
                 ],
             ],
         ];
-
-        $form['sets']['del'] = [
-            'fields' => [
-                'confirm' => [
-                    'caption' => \ForkBB\__('Confirm delete'),
-                    'type'    => 'checkbox',
-                    'label'   => \ForkBB\__('I want to delete the category %s', $category['cat_name']),
-                    'value'   => '1',
-                    'checked' => false,
-                ],
-            ],
-        ];
-        $form['sets']['del-info'] = [
-            'info' => [
-                'info1' => [
-                    'type'  => '', //????
-                    'value' => \ForkBB\__('Delete category warn'),
-                    'html'  => true,
-                ],
-            ],
-        ];
-
-        $this->nameTpl   = 'admin/form';
-        $this->aIndex    = 'categories';
-        $this->aCrumbs[] = [$this->c->Router->link('AdminCategoriesDelete', ['id' => $args['id']]), \ForkBB\__('Delete category head')];
-        $this->aCrumbs[] = \ForkBB\__('"%s"', $category['cat_name']);
-        $this->form      = $form;
-        $this->classForm = 'deletecategory';
-        $this->titleForm = \ForkBB\__('Delete category head');
-
-        return $this;
     }
 }

+ 17 - 7
app/Models/Pages/Admin/Censoring.php

@@ -44,6 +44,22 @@ class Censoring extends Admin
             $this->fIswev  = $v->getErrors();
         }
 
+        $this->nameTpl   = 'admin/form';
+        $this->aIndex    = 'censoring';
+        $this->form      = $this->formEdit();
+        $this->classForm = 'editcensorship';
+        $this->titleForm = \ForkBB\__('Censoring');
+
+        return $this;
+    }
+
+    /**
+     * Подготавливает массив данных для формы
+     *
+     * @return array
+     */
+    protected function formEdit()
+    {
         $form = [
             'action' => $this->c->Router->link('AdminCensoring'),
             'hidden' => [
@@ -117,12 +133,6 @@ class Censoring extends Admin
             'fields' => $fieldset,
         ];
 
-        $this->nameTpl   = 'admin/form';
-        $this->aIndex    = 'censoring';
-        $this->form      = $form;
-        $this->classForm = 'editcensorship';
-        $this->titleForm = \ForkBB\__('Censoring');
-
-        return $this;
+        return $form;
     }
 }

+ 67 - 45
app/Models/Pages/Admin/Forums.php

@@ -114,6 +114,22 @@ class Forums extends Admin
             $this->fIswev  = $v->getErrors();
         }
 
+        $this->nameTpl   = 'admin/form';
+        $this->aIndex    = 'forums';
+        $this->form      = $this->formView();
+        $this->classForm = ['editforums', 'inline'];
+        $this->titleForm = \ForkBB\__('Forums');
+
+        return $this;
+    }
+
+    /**
+     * Подготавливает массив данных для формы
+     *
+     * @return array
+     */
+    protected function formView()
+    {
         $form = [
             'action' => $this->c->Router->link('AdminForums'),
             'hidden' => [
@@ -130,7 +146,7 @@ class Forums extends Admin
                 'update' => [
                     'type'      => 'submit',
                     'value'     => \ForkBB\__('Update positions'),
-                    'accesskey' => 'u',
+                    'accesskey' => 's',
                 ],
             ],
         ];
@@ -187,13 +203,7 @@ class Forums extends Admin
             }
         }
 
-        $this->nameTpl   = 'admin/form';
-        $this->aIndex    = 'forums';
-        $this->form      = $form;
-        $this->classForm = ['editforums', 'inline'];
-        $this->titleForm = \ForkBB\__('Forums');
-
-        return $this;
+        return $form;
     }
 
     /**
@@ -235,12 +245,55 @@ class Forums extends Admin
             return $this->c->Redirect->page('AdminForums')->message('Forum deleted redirect');
         }
 
-        $form = [
+        $this->nameTpl   = 'admin/form';
+        $this->aIndex    = 'forums';
+        $this->aCrumbs[] = [$this->c->Router->link('AdminForumsDelete', ['id' => $forum->id]), \ForkBB\__('Delete forum head')];
+        $this->aCrumbs[] = \ForkBB\__('"%s"', $forum->forum_name);
+        $this->form      = $this->formDelete($args, $forum);
+        $this->classForm = 'deleteforum';
+        $this->titleForm = \ForkBB\__('Delete forum head');
+
+        return $this;
+    }
+
+    /**
+     * Подготавливает массив данных для формы
+     *
+     * @param array $args
+     * @param Forum $forum
+     *
+     * @return array
+     */
+    protected function formDelete(array $args, Forum $forum)
+    {
+        return [
             'action' => $this->c->Router->link('AdminForumsDelete', $args),
             'hidden' => [
                 'token' => $this->c->Csrf->create('AdminForumsDelete', $args),
             ],
-            'sets'   => [],
+            'sets'   => [
+                'confirm' => [
+                    'fields' => [
+                        'confirm' => [
+                            'caption' => \ForkBB\__('Confirm delete'),
+                            'type'    => 'checkbox',
+                            'label'   => \ForkBB\__('I want to delete forum %s', $forum->forum_name),
+                            'value'   => '1',
+                            'checked' => false,
+                        ],
+                    ],
+                ],
+                [
+                    'info' => [
+                        'info1' => [
+                            'type'  => '', //????
+                            'value' => \ForkBB\__('Delete forum warn'),
+                            'html'  => true,
+                        ],
+                    ],
+                ],
+
+            ],
             'btns'   => [
                 'delete' => [
                     'type'      => 'submit',
@@ -254,37 +307,6 @@ class Forums extends Admin
                 ],
             ],
         ];
-
-        $form['sets'][] = [
-            'fields' => [
-                'confirm' => [
-                    'caption' => \ForkBB\__('Confirm delete'),
-                    'type'    => 'checkbox',
-                    'label'   => \ForkBB\__('I want to delete forum %s', $forum->forum_name),
-                    'value'   => '1',
-                    'checked' => false,
-                ],
-            ],
-        ];
-        $form['sets'][] = [
-            'info' => [
-                'info1' => [
-                    'type'  => '', //????
-                    'value' => \ForkBB\__('Delete forum warn'),
-                    'html'  => true,
-                ],
-            ],
-        ];
-
-        $this->nameTpl   = 'admin/form';
-        $this->aIndex    = 'forums';
-        $this->aCrumbs[] = [$this->c->Router->link('AdminForumsDelete', ['id' => $forum->id]), \ForkBB\__('Delete forum head')];
-        $this->aCrumbs[] = \ForkBB\__('"%s"', $forum->forum_name);
-        $this->form      = $form;
-        $this->classForm = 'deleteforum';
-        $this->titleForm = \ForkBB\__('Delete forum head');
-
-        return $this;
     }
 
     /**
@@ -381,21 +403,21 @@ class Forums extends Admin
 
         $this->nameTpl = 'admin/form';
         $this->aIndex  = 'forums';
-        $this->form    = $this->viewForm($forum, $marker, $args);
+        $this->form    = $this->formEdit($args, $forum, $marker);
 
         return $this;
     }
 
     /**
-     * Формирует данные для формы редактирования раздела
+     * Подготавливает массив данных для формы
      *
+     * @param array $args
      * @param Forum $forum
      * @param string $marker
-     * @param array $args
      *
      * @return array
      */
-    protected function viewForm(Forum $forum, $marker, array $args)
+    protected function formEdit(array $args, Forum $forum, $marker)
     {
         $form = [
             'action' => $this->c->Router->link($marker, $args),

+ 53 - 17
app/Models/Pages/Admin/Groups.php

@@ -50,7 +50,20 @@ class Groups extends Admin
     public function view()
     {
         $this->nameTpl     = 'admin/groups';
-        $this->formNew     = [
+        $this->formNew     = $this->formNew();
+        $this->formDefault = $this->formDefault();
+
+        return $this;
+    }
+
+    /**
+     * Подготавливает массив данных для формы
+     *
+     * @return array
+     */
+    protected function formNew()
+    {
+        return [
             'action' => $this->c->Router->link('AdminGroupsNew'),
             'hidden' => [
                 'token' => $this->c->Csrf->create('AdminGroupsNew'),
@@ -74,11 +87,20 @@ class Groups extends Admin
                 'submit' => [
                     'type'      => 'submit',
                     'value'     => \ForkBB\__('Add'),
-                    'accesskey' => 'a',
+                    'accesskey' => 'n',
                 ],
             ],
         ];
-        $this->formDefault = [
+    }
+
+    /**
+     * Подготавливает массив данных для формы
+     *
+     * @return array
+     */
+    protected function formDefault()
+    {
+        return [
             'action' => $this->c->Router->link('AdminGroupsDefault'),
             'hidden' => [
                 'token' => $this->c->Csrf->create('AdminGroupsDefault'),
@@ -105,8 +127,6 @@ class Groups extends Admin
                 ],
             ],
         ];
-
-        return $this;
     }
 
     /**
@@ -261,7 +281,7 @@ class Groups extends Admin
         }
 
         $this->nameTpl = 'admin/form';
-        $this->form    = $this->viewForm($group, $marker, $vars);
+        $this->form    = $this->formEdit($vars, $group, $marker);
 
         return $this;
     }
@@ -315,13 +335,13 @@ class Groups extends Admin
     /**
      * Формирует данные для формы редактирования группы
      *
+     * @param array $args
      * @param Group $group
      * @param string $marker
-     * @param array $args
      *
      * @return array
      */
-    protected function viewForm(Group $group, $marker, array $args)
+    protected function formEdit(array $args, Group $group, $marker)
     {
         $form = [
             'action' => $this->c->Router->link($marker, $args),
@@ -657,6 +677,29 @@ class Groups extends Admin
             return $this->c->Redirect->page('AdminGroups')->message('Group removed redirect');
         }
 
+
+        $this->nameTpl   = 'admin/form';
+        $this->aCrumbs[] = [$this->c->Router->link('AdminGroupsDelete', $args), \ForkBB\__('Group delete')];
+        $this->aCrumbs[] = \ForkBB\__('"%s"', $group->g_title);
+        $this->form      = $this->formDelete($args, $group, $count, $groups);
+        $this->titleForm = \ForkBB\__('Group delete');
+        $this->classForm = 'deletegroup';
+
+        return $this;
+    }
+
+    /**
+     * Подготавливает массив данных для формы
+     *
+     * @param array $args
+     * @param Group $group
+     * @param int $count
+     * @param array $groups
+     *
+     * @return array
+     */
+    protected function formDelete(array $args, Group $group, $count, array $groups)
+    {
         $form = [
             'action' => $this->c->Router->link('AdminGroupsDelete', $args),
             'hidden' => [
@@ -667,7 +710,7 @@ class Groups extends Admin
                 'delete' => [
                     'type'      => 'submit',
                     'value'     => \ForkBB\__('Delete group'),
-                    'accesskey' => 'd',
+                    'accesskey' => 's',
                 ],
                 'cancel' => [
                     'type'      => 'btn',
@@ -712,13 +755,6 @@ class Groups extends Admin
             ],
         ];
 
-        $this->nameTpl   = 'admin/form';
-        $this->aCrumbs[] = [$this->c->Router->link('AdminGroupsDelete', $args), \ForkBB\__('Group delete')];
-        $this->aCrumbs[] = \ForkBB\__('"%s"', $group->g_title);
-        $this->form      = $form;
-        $this->titleForm = \ForkBB\__('Group delete');
-        $this->classForm = 'deletegroup';
-
-        return $this;
+        return $form;
     }
 }

+ 27 - 6
app/Models/Pages/Admin/Maintenance.php

@@ -46,7 +46,24 @@ class Maintenance extends Admin
             $this->fIswev = $v->getErrors();
         }
 
-        $this->formMaintenance = [
+        $this->nameTpl         = 'admin/maintenance';
+        $this->aIndex          = 'maintenance';
+        $this->formMaintenance = $this->formMaintenance($config);
+        $this->formRebuild     = $this->formRebuild();
+
+        return $this;
+    }
+
+    /**
+     * Подготавливает массив данных для формы
+     *
+     * @param Config $config
+     *
+     * @return array
+     */
+    protected function formMaintenance(Config $config)
+    {
+        return [
             'action' => $this->c->Router->link('AdminMaintenance'),
             'hidden' => [
                 'token' => $this->c->Csrf->create('AdminMaintenance'),
@@ -79,8 +96,16 @@ class Maintenance extends Admin
                 ],
             ],
         ];
+    }
 
-        $this->formRebuild = [
+    /**
+     * Подготавливает массив данных для формы
+     *
+     * @return array
+     */
+    protected function formRebuild()
+    {
+        return [
             'action' => $this->c->Router->link('AdminMaintenanceRebuild'),
             'hidden' => [
                 'token' => $this->c->Csrf->create('AdminMaintenanceRebuild'),
@@ -142,10 +167,6 @@ class Maintenance extends Admin
             ],
         ];
 
-        $this->nameTpl         = 'admin/maintenance';
-        $this->aIndex          = 'maintenance';
-
-        return $this;
     }
 
     /**

+ 2 - 2
app/Models/Pages/Admin/Options.php

@@ -118,7 +118,7 @@ class Options extends Admin
 
         $this->aIndex    = 'options';
         $this->nameTpl   = 'admin/form';
-        $this->form      = $this->viewForm($config);
+        $this->form      = $this->formEdit($config);
         $this->titleForm = \ForkBB\__('Options head');
         $this->classForm = 'editoptions';
 
@@ -180,7 +180,7 @@ class Options extends Admin
      *
      * @return array
      */
-    protected function viewForm(Config $config)
+    protected function formEdit(Config $config)
     {
         $form = [
             'action' => $this->c->Router->link('AdminOptions'),

+ 2 - 2
app/Models/Pages/Admin/Permissions.php

@@ -62,7 +62,7 @@ class Permissions extends Admin
 
         $this->aIndex    = 'permissions';
         $this->nameTpl   = 'admin/form';
-        $this->form      = $this->viewForm($config);
+        $this->form      = $this->formEdit($config);
         $this->titleForm = \ForkBB\__('Permissions head');
         $this->classForm = 'editpermissions';
 
@@ -76,7 +76,7 @@ class Permissions extends Admin
      *
      * @return array
      */
-    protected function viewForm(Config $config)
+    protected function formEdit(Config $config)
     {
         $form = [
             'action' => $this->c->Router->link('AdminPermissions'),

+ 3 - 5
app/Models/Pages/Ban.php

@@ -9,21 +9,19 @@ class Ban extends Page
 {
     /**
      * Подготавливает данные для шаблона
-     * 
+     *
      * @param User $user
-     * 
+     *
      * @return Page
      */
     public function ban(User $user)
     {
-        $ban = $user->banInfo;
-        
         $this->httpStatus = 403;
         $this->nameTpl    = 'ban';
 #       $this->onlinePos  = 'ban';
 #       $this->robots     = 'noindex';
         $this->titles     = \ForkBB\__('Info');
-        $this->ban        = $ban;
+        $this->ban        = $user->banInfo;
         $this->adminEmail = $this->c->config->o_admin_email;
 
         return $this;

+ 19 - 4
app/Models/Pages/Delete.php

@@ -3,6 +3,7 @@
 namespace ForkBB\Models\Pages;
 
 use ForkBB\Models\Page;
+use ForkBB\Models\Post\Model as Post;
 
 class Delete extends Page
 {
@@ -61,7 +62,23 @@ class Delete extends Page
         $this->crumbs     = $this->crumbs($this->formTitle, $topic);
         $this->posts      = [$post];
         $this->postsTitle = \ForkBB\__('Delete info');
-        $this->form       = [
+        $this->form       = $this->formDelete($args, $post, $deleteTopic);
+
+        return $this;
+    }
+
+    /**
+     * Подготавливает массив данных для формы
+     *
+     * @param array $args
+     * @param Post $post
+     * @param bool $deleteTopic
+     *
+     * @return array
+     */
+    protected function formDelete(array $args, Post $post, $deleteTopic)
+    {
+        return [
             'action' => $this->c->Router->link('DeletePost', ['id' => $post->id]),
             'hidden' => [
                 'token' => $this->c->Csrf->create('DeletePost', ['id' => $post->id]),
@@ -71,7 +88,7 @@ class Delete extends Page
                     'info' => [
                         'info1' => [
                             'type'    => '', //????
-                            'value'   => \ForkBB\__('Topic') . ' «' . \ForkBB\cens($topic->subject) . '»',
+                            'value'   => \ForkBB\__('Topic') . ' «' . \ForkBB\cens($post->parent->subject) . '»',
                         ],
                         'info2' => [
                             'type'    => '', //????
@@ -104,7 +121,5 @@ class Delete extends Page
                 ],
             ],
         ];
-
-        return $this;
     }
 }

+ 2 - 4
app/Models/Pages/Edit.php

@@ -62,7 +62,7 @@ class Edit extends Page
         $this->robots    = 'noindex';
         $this->formTitle = $editSubject ? \ForkBB\__('Edit topic') : \ForkBB\__('Edit post');
         $this->crumbs    = $this->crumbs($this->formTitle, $topic);
-        $this->form      = $this->messageForm($post, 'EditPost', $args, true, $editSubject);
+        $this->form      = $this->messageForm($args, $post, 'EditPost', true, $editSubject);
 
         return $this;
     }
@@ -146,8 +146,6 @@ class Edit extends Page
 
         $this->c->search->index($post, 'edit');
 
-        return $this->c->Redirect
-            ->page('ViewPost', ['id' => $post->id])
-            ->message('Edit redirect');
+        return $this->c->Redirect->page('ViewPost', ['id' => $post->id])->message('Edit redirect');
     }
 }

+ 3 - 5
app/Models/Pages/Post.php

@@ -52,7 +52,7 @@ class Post extends Page
         $this->robots    = 'noindex';
         $this->crumbs    = $this->crumbs(\ForkBB\__('Post new topic'), $forum);
         $this->formTitle = \ForkBB\__('Post new topic');
-        $this->form      = $this->messageForm($forum, 'NewTopic', $args, false, true);
+        $this->form      = $this->messageForm($args, $forum, 'NewTopic', false, true);
 
         return $this;
     }
@@ -107,7 +107,7 @@ class Post extends Page
         $this->robots    = 'noindex';
         $this->crumbs    = $this->crumbs(\ForkBB\__('Post a reply'), $topic);
         $this->formTitle = \ForkBB\__('Post a reply');
-        $this->form      = $this->messageForm($topic, 'NewReply', $args);
+        $this->form      = $this->messageForm($args, $topic, 'NewReply');
 
         return $this;
     }
@@ -234,8 +234,6 @@ class Post extends Page
             $this->c->search->index($post);
         }
 
-        return $this->c->Redirect
-            ->page('ViewPost', ['id' => $merge ? $lastPost->id : $post->id])
-            ->message('Post redirect');
+        return $this->c->Redirect->page('ViewPost', ['id' => $merge ? $lastPost->id : $post->id])->message('Post redirect');
     }
 }

+ 2 - 2
app/Models/Pages/PostFormTrait.php

@@ -9,16 +9,16 @@ trait PostFormTrait
     /**
      * Возвращает данные для построения формы создания темы/сообщения
      *
+     * @param array $args
      * @param Model $model
      * @param string $marker
-     * @param array $args
      * @param bool $editPost
      * @param bool $editSubject
      * @param bool $quickReply
      *
      * @return array
      */
-    protected function messageForm(Model $model, $marker, array $args, $editPost = false, $editSubject = false, $quickReply = false)
+    protected function messageForm(array $args, Model $model, $marker, $editPost = false, $editSubject = false, $quickReply = false)
     {
         $vars = isset($args['_vars']) ? $args['_vars'] : null;
         unset($args['_vars']);

+ 162 - 129
app/Models/Pages/Search.php

@@ -125,12 +125,51 @@ class Search extends Page
             $this->fIswev = $v->getErrors();
         }
 
-        $form = [
-            'action' => $this->c->Router->link($marker),
+        $this->fIndex    = 'search';
+        $this->nameTpl   = 'search';
+        $this->onlinePos = 'search';
+        $this->canonical = $this->c->Router->link('Search');
+        $this->robots    = 'noindex';
+        $this->form      = $advanced ? $this->formSearchAdvanced($v) : $this->formSearch($v);
+        $this->crumbs    = $this->crumbs();
+
+        return $this;
+    }
+
+    /**
+     * Подготавливает массив данных для формы
+     *
+     * @param Validator $v
+     *
+     * @return array
+     */
+    protected function formSearch(Validator $v = null)
+    {
+        return [
+            'action' => $this->c->Router->link('Search'),
             'hidden' => [
-                'token' => $this->c->Csrf->create($marker),
+                'token' => $this->c->Csrf->create('Search'),
+            ],
+            'sets'   => [
+                'what' => [
+                    'fields' => [
+                        [
+                            'type'  => 'info',
+                            'value' => \ForkBB\__('<a href="%s">Advanced search</a>', $this->c->Router->link('SearchAdvanced')),
+                            'html'  => true,
+                        ],
+                        'keywords' => [
+                            'class'     => 'w0',
+                            'type'      => 'text',
+                            'maxlength' => 100,
+                            'caption'   => \ForkBB\__('Keyword search'),
+                            'value'     => $v ? $v->keywords : '',
+                            'required'  => true,
+                            'autofocus' => true,
+                        ],
+                    ],
+                ],
             ],
-            'sets'   => [],
             'btns'   => [
                 'search' => [
                     'type'      => 'submit',
@@ -139,143 +178,137 @@ class Search extends Page
                 ],
             ],
         ];
+    }
 
-        if ($advanced) {
-            $form['sets']['what'] = [
-                'fields' => [
-                    [
-                        'type'  => 'info',
-                        'value' => \ForkBB\__('<a href="%s">Simple search</a>', $this->c->Router->link('Search')),
-                        'html'  => true,
-                    ],
-                    'keywords' => [
-                        'class'     => 'w2',
-                        'type'      => 'text',
-                        'maxlength' => 100,
-                        'caption'   => \ForkBB\__('Keyword search'),
-                        'value'     => $v ? $v->keywords : '',
-                        'required'  => true,
-                        'autofocus' => true,
-                    ],
-                    'author' => [
-                        'class'     => 'w1',
-                        'type'      => 'text',
-                        'maxlength' => 25,
-                        'caption'   => \ForkBB\__('Author search'),
-                        'value'     => $v ? $v->author : '*',
-                        'required'  => true,
-                    ],
-                    [
-                        'type'  => 'info',
-                        'value' => \ForkBB\__('Search info'),
+    /**
+     * Подготавливает массив данных для формы
+     *
+     * @param Validator $v
+     *
+     * @return array
+     */
+    protected function formSearchAdvanced(Validator $v = null)
+    {
+        return [
+            'action' => $this->c->Router->link('SearchAdvanced'),
+            'hidden' => [
+                'token' => $this->c->Csrf->create('SearchAdvanced'),
+            ],
+            'sets'   => [
+                'what' => [
+                    'fields' => [
+                        [
+                            'type'  => 'info',
+                            'value' => \ForkBB\__('<a href="%s">Simple search</a>', $this->c->Router->link('Search')),
+                            'html'  => true,
+                        ],
+                        'keywords' => [
+                            'class'     => 'w2',
+                            'type'      => 'text',
+                            'maxlength' => 100,
+                            'caption'   => \ForkBB\__('Keyword search'),
+                            'value'     => $v ? $v->keywords : '',
+                            'required'  => true,
+                            'autofocus' => true,
+                        ],
+                        'author' => [
+                            'class'     => 'w1',
+                            'type'      => 'text',
+                            'maxlength' => 25,
+                            'caption'   => \ForkBB\__('Author search'),
+                            'value'     => $v ? $v->author : '*',
+                            'required'  => true,
+                        ],
+                        [
+                            'type'  => 'info',
+                            'value' => \ForkBB\__('Search info'),
+                        ],
                     ],
                 ],
-            ];
-            $form['sets']['where'] = [
-                'legend' => \ForkBB\__('Search in legend'),
-                'fields' => [
-                    'forums' => [
-                        'class'   => 'w3',
-                        'type'    => 'multiselect',
-                        'options' => $this->listForOptions,
-                        'value'   => $v ? \explode('.', $v->forums) : null,
-                        'caption' => \ForkBB\__('Forum search'),
-                        'size'    => \min(\count($this->listForOptions), 10),
-                    ],
-                    'serch_in' => [
-                        'class'   => 'w3',
-                        'type'    => 'select',
-                        'options' => [
-                            0 => \ForkBB\__('Message and subject'),
-                            1 => \ForkBB\__('Message only'),
-                            2 => \ForkBB\__('Topic only'),
+                'where' => [
+                    'legend' => \ForkBB\__('Search in legend'),
+                    'fields' => [
+                        'forums' => [
+                            'class'   => 'w3',
+                            'type'    => 'multiselect',
+                            'options' => $this->listForOptions,
+                            'value'   => $v ? \explode('.', $v->forums) : null,
+                            'caption' => \ForkBB\__('Forum search'),
+                            'size'    => \min(\count($this->listForOptions), 10),
+                        ],
+                        'serch_in' => [
+                            'class'   => 'w3',
+                            'type'    => 'select',
+                            'options' => [
+                                0 => \ForkBB\__('Message and subject'),
+                                1 => \ForkBB\__('Message only'),
+                                2 => \ForkBB\__('Topic only'),
+                            ],
+                            'value'   => $v ? $v->serch_in : 0,
+                            'caption' => \ForkBB\__('Search in'),
+                        ],
+                        [
+                            'type'  => 'info',
+                            'value' => \ForkBB\__('Search in info'),
+                        ],
+                        [
+                            'type'  => 'info',
+                            'value' => \ForkBB\__('Search multiple forums info'),
                         ],
-                        'value'   => $v ? $v->serch_in : 0,
-                        'caption' => \ForkBB\__('Search in'),
-                    ],
-                    [
-                        'type'  => 'info',
-                        'value' => \ForkBB\__('Search in info'),
-                    ],
-                    [
-                        'type'  => 'info',
-                        'value' => \ForkBB\__('Search multiple forums info'),
-                    ],
 
+                    ],
                 ],
-            ];
-            $form['sets']['how'] = [
-                'legend' => \ForkBB\__('Search results legend'),
-                'fields' => [
-                    'sort_by' => [
-                        'class'   => 'w4',
-                        'type'    => 'select',
-                        'options' => [
-                            0 => \ForkBB\__('Sort by post time'),
-                            1 => \ForkBB\__('Sort by author'),
-                            2 => \ForkBB\__('Sort by subject'),
-                            3 => \ForkBB\__('Sort by forum'),
+                'how' => [
+                    'legend' => \ForkBB\__('Search results legend'),
+                    'fields' => [
+                        'sort_by' => [
+                            'class'   => 'w4',
+                            'type'    => 'select',
+                            'options' => [
+                                0 => \ForkBB\__('Sort by post time'),
+                                1 => \ForkBB\__('Sort by author'),
+                                2 => \ForkBB\__('Sort by subject'),
+                                3 => \ForkBB\__('Sort by forum'),
+                            ],
+                            'value'   => $v ? $v->sort_by : 0,
+                            'caption' => \ForkBB\__('Sort by'),
                         ],
-                        'value'   => $v ? $v->sort_by : 0,
-                        'caption' => \ForkBB\__('Sort by'),
-                    ],
-                    'sort_dir' => [
-                        'class'   => 'w4',
-                        'type'    => 'radio',
-                        'values'  => [
-                            0 => \ForkBB\__('Descending'),
-                            1 => \ForkBB\__('Ascending'),
+                        'sort_dir' => [
+                            'class'   => 'w4',
+                            'type'    => 'radio',
+                            'values'  => [
+                                0 => \ForkBB\__('Descending'),
+                                1 => \ForkBB\__('Ascending'),
+                            ],
+                            'value'   => $v ? $v->sort_dir : 0,
+                            'caption' => \ForkBB\__('Sort order'),
                         ],
-                        'value'   => $v ? $v->sort_dir : 0,
-                        'caption' => \ForkBB\__('Sort order'),
-                    ],
-                    'show_as' => [
-                        'class'   => 'w4',
-                        'type'    => 'radio',
-                        'values'  => [
-                            0 => \ForkBB\__('Show as posts'),
-                            1 => \ForkBB\__('Show as topics'),
+                        'show_as' => [
+                            'class'   => 'w4',
+                            'type'    => 'radio',
+                            'values'  => [
+                                0 => \ForkBB\__('Show as posts'),
+                                1 => \ForkBB\__('Show as topics'),
+                            ],
+                            'value'   => $v ? $v->show_as : 0,
+                            'caption' => \ForkBB\__('Show as'),
+                        ],
+                        [
+                            'type'  => 'info',
+                            'value' => \ForkBB\__('Search results info'),
                         ],
-                        'value'   => $v ? $v->show_as : 0,
-                        'caption' => \ForkBB\__('Show as'),
-                    ],
-                    [
-                        'type'  => 'info',
-                        'value' => \ForkBB\__('Search results info'),
                     ],
-                ],
 
-            ];
-        } else {
-            $form['sets']['what'] = [
-                'fields' => [
-                    [
-                        'type'  => 'info',
-                        'value' => \ForkBB\__('<a href="%s">Advanced search</a>', $this->c->Router->link('SearchAdvanced')),
-                        'html'  => true,
-                    ],
-                    'keywords' => [
-                        'class'     => 'w0',
-                        'type'      => 'text',
-                        'maxlength' => 100,
-                        'caption'   => \ForkBB\__('Keyword search'),
-                        'value'     => $v ? $v->keywords : '',
-                        'required'  => true,
-                        'autofocus' => true,
-                    ],
                 ],
-            ];
-        }
-
-        $this->fIndex    = 'search';
-        $this->nameTpl   = 'search';
-        $this->onlinePos = 'search';
-        $this->canonical = $this->c->Router->link('Search');
-        $this->robots    = 'noindex';
-        $this->form      = $form;
-        $this->crumbs    = $this->crumbs();
-
-        return $this;
+            ],
+            'btns'   => [
+                'search' => [
+                    'type'      => 'submit',
+                    'value'     => \ForkBB\__('Search btn'),
+                    'accesskey' => 's',
+                ],
+            ],
+        ];
     }
 
     /**

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

@@ -152,7 +152,7 @@ class Topic extends Page
         $this->stats        = null;
 
         if ($topic->canReply && $this->c->config->o_quickpost == '1') {
-            $this->form     = $this->messageForm($topic, 'NewReply', ['id' => $topic->id], false, false, true);
+            $this->form     = $this->messageForm(['id' => $topic->id], $topic, 'NewReply', false, false, true);
         }
 
         if ($topic->showViews) {

+ 34 - 24
app/Models/Pages/Userlist.php

@@ -10,25 +10,23 @@ use InvalidArgumentException;
 class Userlist extends Page
 {
     /**
-     * Генерирует список доступных групп пользователей
-     *
-     * @param bool $onlyKeys
+     * Возвращает список доступных групп
      *
      * @return array
      */
-    protected function groups($onlyKeys = false)
+    protected function getgroupList()
     {
-        $groups = [
-            -1 => \ForkBB\__('All users'),
+        $list = [
+            'all' => \ForkBB\__('All users'),
         ];
 
         foreach ($this->c->groups->getList() as $group) {
             if (! $group->groupGuest) {
-                $groups[$group->g_id] = $group->g_title;
+                $list[$group->g_id] = $group->g_title;
             }
         }
 
-        return $onlyKeys ? \array_keys($groups) : $groups;
+        return $list;
     }
 
     /**
@@ -48,7 +46,7 @@ class Userlist extends Page
             ->addRules([
                 'sort'  => $prefix . 'string|in:username,registered' . ($this->user->showPostCount ? ',num_posts' : ''),
                 'dir'   => $prefix . 'string|in:ASC,DESC',
-                'group' => $prefix . 'integer|in:' . \implode(',', $this->groups(true)),
+                'group' => $prefix . 'string|in:' . \implode(',', \array_keys($this->groupList)),
                 'name'  => $prefix . 'string:trim|min:1|max:25' . ($this->user->searchUsers ? '' : '|in:*'),
             ]);
 
@@ -71,10 +69,10 @@ class Userlist extends Page
         }
 
         $filters = [];
-        if ($v->group < 1) {
-            $filters['group_id'] = ['!=', 0];
-        } else {
+        if (\is_numeric($v->group)) {
             $filters['group_id'] = ['=', $v->group];
+        } else {
+            $filters['group_id'] = ['!=', 0];
         }
         if (null !== $v->name) {
             $filters['username'] = ['LIKE', $v->name];
@@ -100,7 +98,7 @@ class Userlist extends Page
             $vars = ['page' => $page];
 
             if (4 === $count) {
-                $vars['group'] = -1;
+                $vars['group'] = 'all';
                 $vars['name']  = '*';
             } else {
                 $vars['group'] = $v->group;
@@ -130,6 +128,27 @@ class Userlist extends Page
             $this->fIswev   = ['i', \ForkBB\__('No users found')];
         }
 
+        $this->fIndex       = 'userlist';
+        $this->nameTpl      = 'userlist';
+        $this->onlinePos    = 'userlist';
+        $this->canonical    = $this->c->Router->link('Userlist', $args);
+        $this->robots       = 'noindex';
+        $this->crumbs       = $this->crumbs([$this->c->Router->link('Userlist'), \ForkBB\__('User list')]);
+        $this->pagination   = $this->c->Func->paginate($pages, $page, 'Userlist', $args);
+        $this->form         = $this->formUserlist($v);
+
+        return $this;
+    }
+
+    /**
+     * Подготавливает массив данных для формы
+     *
+     * @param Validator $v
+     *
+     * @return array
+     */
+    protected function formUserlist(Validator $v)
+    {
         $form = [
             'action' => $this->c->Router->link('Userlist'),
             'hidden' => [],
@@ -162,7 +181,7 @@ class Userlist extends Page
         $fields['group'] = [
             'class'   => 'w4',
             'type'    => 'select',
-            'options' => $this->groups(),
+            'options' => $this->groupList,
             'value'   => $v->group,
             'caption' => \ForkBB\__('User group'),
         ];
@@ -189,15 +208,6 @@ class Userlist extends Page
         ];
         $form['sets']['users'] = ['fields' => $fields];
 
-        $this->fIndex       = 'userlist';
-        $this->nameTpl      = 'userlist';
-        $this->onlinePos    = 'userlist';
-        $this->canonical    = $this->c->Router->link('Userlist', $args);
-        $this->robots       = 'noindex';
-        $this->form         = $form;
-        $this->crumbs       = $this->crumbs([$this->c->Router->link('Userlist'), \ForkBB\__('User list')]);
-        $this->pagination   = $this->c->Func->paginate($pages, $page, 'Userlist', $args);
-
-        return $this;
+        return $form;
     }
 }

+ 13 - 8
public/style/ForkBB/style.css

@@ -128,7 +128,7 @@ body,
 	font: inherit;
   box-sizing: border-box;
   word-wrap: break-word;
-	/*vertical-align: baseline;*/
+  /*vertical-align: baseline;*/
 }
 
 body,
@@ -148,6 +148,11 @@ body,
   position: relative;
 }
 
+#fork div,
+#fork fieldset {
+  min-width: 0;
+}
+
 #fork ul,
 #fork ol {
   list-style: none;
@@ -1724,7 +1729,7 @@ body,
 #fork .f-fs-category {
   display: flex;
   align-items: stretch;
-  min-width: 0;
+  /*min-width: 0;*/
 }
 
 #fork .f-fs-category > legend {
@@ -1781,7 +1786,7 @@ body,
 #fork .f-fs-forum {
   display: flex;
   align-items: stretch;
-  min-width: 0;
+  /*min-width: 0;*/
 }
 
 #fork .f-fs-forum > legend {
@@ -1857,7 +1862,7 @@ body,
   display: flex;
   flex-wrap: wrap;
   align-items: stretch;
-  min-width: 0;
+  /*min-width: 0;*/
 }
 
 #fork .f-fs-permission > legend {
@@ -1945,7 +1950,7 @@ body,
   display: flex;
   flex-wrap: wrap;
   align-items: stretch;
-  min-width: 0;
+  /*min-width: 0;*/
 }
 
 #fork .f-fs-censor .f-child1 {
@@ -2160,7 +2165,7 @@ body,
 /***********/
 #fork .f-fs-header {
   display: flex;
-  min-width: 0;
+  /*min-width: 0;*/
   align-items: center;
 }
 
@@ -2182,7 +2187,7 @@ body,
 #fork .f-fs-data {
   display: flex;
   flex-direction: column;
-  min-width: 0;
+  /*min-width: 0;*/
 }
 
 #fork .f-fs-header .f-wrap-usertitle {
@@ -2354,7 +2359,7 @@ body,
 #fork .f-fs-result {
   display: flex;
   align-items: stretch;
-  min-width: 0;
+  /*min-width: 0;*/
   border-bottom: 0.0625rem dotted #AA7939;
   margin-bottom: 0.3125rem;
   padding-bottom: 0.3125rem;