Change post form for messages

This commit is contained in:
Visman 2021-03-18 18:05:28 +07:00
parent 0a60f0482a
commit 12b0432f02
5 changed files with 107 additions and 94 deletions

View file

@ -36,8 +36,8 @@ class Edit extends Page
return $this->c->Message->message('Bad request');
}
$topic = $post->parent;
$editSubject = $post->id === $topic->first_post_id;
$topic = $post->parent;
$firstPost = $post->id === $topic->first_post_id;
$this->c->Lang->load('post');
@ -46,7 +46,7 @@ class Edit extends Page
}
if ('POST' === $method) {
$v = $this->messageValidator($post, 'EditPost', $args, true, $editSubject);
$v = $this->messageValidator($post, 'EditPost', $args, true, $firstPost);
if (
$v->validation($_POST)
@ -68,7 +68,7 @@ class Edit extends Page
);
if (
$editSubject
$firstPost
&& $this->user->usePoll
&& $v->poll_enable
) {
@ -88,7 +88,7 @@ class Edit extends Page
}
if (
$editSubject
$firstPost
&& $this->user->usePoll
) {
if (
@ -124,9 +124,9 @@ class Edit extends Page
$this->onlinePos = 'topic-' . $topic->id;
$this->canonical = $post->linkEdit;
$this->robots = 'noindex';
$this->formTitle = $editSubject ? __('Edit topic') : __('Edit post');
$this->formTitle = $firstPost ? __('Edit topic') : __('Edit post');
$this->crumbs = $this->crumbs($this->formTitle, $topic);
$this->form = $this->messageForm($args, $post, 'EditPost', true, $editSubject);
$this->form = $this->messageForm($post, 'EditPost', $args, true, $firstPost, false);
return $this;
}
@ -136,13 +136,13 @@ class Edit extends Page
*/
protected function endEdit(Post $post, Validator $v): Page
{
$now = \time();
$executive = $this->user->isAdmin || $this->user->isModerator($post);
$topic = $post->parent;
$editSubject = $post->id === $topic->first_post_id;
$calcPost = false;
$calcTopic = false;
$calcForum = false;
$now = \time();
$executive = $this->user->isAdmin || $this->user->isModerator($post);
$topic = $post->parent;
$firstPost = $post->id === $topic->first_post_id;
$calcPost = false;
$calcTopic = false;
$calcForum = false;
// текст сообщения
if ($post->message !== $v->message) {
@ -171,7 +171,7 @@ class Edit extends Page
$post->edit_post = $v->edit_post ? 1 : 0;
}
if ($editSubject) {
if ($firstPost) {
// заголовок темы
if ($topic->subject !== $v->subject) {
$topic->subject = $v->subject;

View file

@ -90,7 +90,7 @@ class Post extends Page
$this->robots = 'noindex';
$this->crumbs = $this->crumbs(__('Post new topic'), $forum);
$this->formTitle = __('Post new topic');
$this->form = $this->messageForm($args, $forum, 'NewTopic', false, true);
$this->form = $this->messageForm($forum, 'NewTopic', $args, false, true, false);
return $this;
}
@ -114,7 +114,7 @@ class Post extends Page
$this->onlinePos = 'topic-' . $topic->id;
if ('POST' === $method) {
$v = $this->messageValidator($topic, 'NewReply', $args);
$v = $this->messageValidator($topic, 'NewReply', $args, false, false);
if ($this->user->isGuest) {
$v = $this->c->Test->beforeValidation($v);
@ -160,7 +160,7 @@ class Post extends Page
$this->robots = 'noindex';
$this->crumbs = $this->crumbs(__('Post a reply'), $topic);
$this->formTitle = __('Post a reply');
$this->form = $this->messageForm($args, $topic, 'NewReply');
$this->form = $this->messageForm($topic, 'NewReply', $args, false, false, false);
$this->postsTitle = __('Topic review');
$this->posts = $topic->review();

View file

@ -18,13 +18,15 @@ trait PostFormTrait
/**
* Возвращает данные для построения формы создания темы/сообщения
*/
protected function messageForm(array $args, Model $model, string $marker, bool $editPost = false, bool $editSubject = false, bool $quickReply = false): array
protected function messageForm(Model $model, string $marker, array $args, bool $edit, bool $first, bool $quick): array
{
$vars = $args['_vars'] ?? null;
unset($args['_vars']);
$autofocus = $quickReply ? null : true;
$form = [
$notPM = $this->fIndex !== self::FI_PM;
$autofocus = $quick ? null : true;
$form = [
'action' => $this->c->Router->link($marker, $args),
'hidden' => [
'token' => $this->c->Csrf->create($marker, $args),
@ -44,6 +46,7 @@ trait PostFormTrait
];
$fieldset = [];
if ($this->user->isGuest) {
$fieldset['username'] = [
'class' => 'w1',
@ -67,7 +70,7 @@ trait PostFormTrait
$autofocus = null;
}
if ($editSubject) {
if ($first) {
$fieldset['subject'] = [
'class' => 'w0',
'type' => 'text',
@ -99,75 +102,78 @@ trait PostFormTrait
$form['sets']['uesm'] = [
'fields' => $fieldset,
];
$autofocus = null;
$fieldset = [];
if (
$this->user->isAdmin
|| $this->user->isModerator($model)
) {
if ($editSubject) {
$fieldset['stick_topic'] = [
'type' => 'checkbox',
'label' => __('Stick topic'),
'value' => '1',
'checked' => (bool) ($vars['stick_topic'] ?? false),
];
$fieldset['stick_fp'] = [
'type' => 'checkbox',
'label' => __('Stick first post'),
'value' => '1',
'checked' => (bool) ($vars['stick_fp'] ?? false),
];
} elseif (! $editPost) {
$fieldset['merge_post'] = [
'type' => 'checkbox',
'label' => __('Merge posts'),
'value' => '1',
'checked' => (bool) ($vars['merge_post'] ?? true),
];
$autofocus = null;
$fieldset = [];
if ($notPM) {
if (
$this->user->isAdmin
|| $this->user->isModerator($model)
) {
if ($first) {
$fieldset['stick_topic'] = [
'type' => 'checkbox',
'label' => __('Stick topic'),
'value' => '1',
'checked' => (bool) ($vars['stick_topic'] ?? false),
];
$fieldset['stick_fp'] = [
'type' => 'checkbox',
'label' => __('Stick first post'),
'value' => '1',
'checked' => (bool) ($vars['stick_fp'] ?? false),
];
} elseif (! $edit) {
$fieldset['merge_post'] = [
'type' => 'checkbox',
'label' => __('Merge posts'),
'value' => '1',
'checked' => (bool) ($vars['merge_post'] ?? true),
];
}
if (
$edit
&& ! $model->user->isGuest
&& ! $model->user->isAdmin
) {
$fieldset['edit_post'] = [
'type' => 'checkbox',
'label' => __('EditPost edit'),
'value' => '1',
'checked' => (bool) ($vars['edit_post'] ?? false),
];
}
}
if (
$editPost
&& ! $model->user->isGuest
&& ! $model->user->isAdmin
! $edit
&& '1' == $this->c->config->o_topic_subscriptions
&& $this->user->email_confirmed
) {
$fieldset['edit_post'] = [
'type' => 'checkbox',
'label' => __('EditPost edit'),
'value' => '1',
'checked' => (bool) ($vars['edit_post'] ?? false),
];
}
}
$subscribed = ! $first && $model->is_subscribed;
if (
! $editPost
&& '1' == $this->c->config->o_topic_subscriptions
&& $this->user->email_confirmed
) {
$subscribed = ! $editSubject && $model->is_subscribed;
if ($quickReply) {
if (
$subscribed
|| $this->user->auto_notify
) {
$form['hidden']['subscribe'] = '1';
if ($quick) {
if (
$subscribed
|| $this->user->auto_notify
) {
$form['hidden']['subscribe'] = '1';
}
} else {
$fieldset['subscribe'] = [
'type' => 'checkbox',
'label' => $subscribed ? __('Stay subscribed') : __('New subscribe'),
'value' => '1',
'checked' => (bool) ($vars['subscribe'] ?? ($subscribed || $this->user->auto_notify)),
];
}
} else {
$fieldset['subscribe'] = [
'type' => 'checkbox',
'label' => $subscribed ? __('Stay subscribed') : __('New subscribe'),
'value' => '1',
'checked' => (bool) ($vars['subscribe'] ?? ($subscribed || $this->user->auto_notify)),
];
}
}
if (
! $quickReply
! $quick
&& '1' == $this->c->config->o_smilies
) {
$fieldset['hide_smilies'] = [
@ -186,10 +192,11 @@ trait PostFormTrait
}
if (
$editSubject
$first
&& $notPM
&& $this->user->usePoll
) {
$term = $editPost && $model->parent->poll_term
$term = $edit && $model->parent->poll_term
? $model->parent->poll_term
: $this->c->config->i_poll_term;
@ -263,7 +270,6 @@ trait PostFormTrait
$this->pageHeader('pollJS', 'script', 9000, [
'src' => $this->publicLink('/js/poll.js'),
]);
}
return $form;

View file

@ -98,10 +98,12 @@ trait PostValidatorTrait
/**
* Подготовка валидатора к проверке данных из формы создания темы/сообщения
*/
protected function messageValidator(Model $model, string $marker, array $args, bool $editPost = false, bool $editSubject = false): Validator
protected function messageValidator(Model $model, string $marker, array $args, bool $edit, bool $first): Validator
{
$this->c->Lang->load('validator');
$notPM = $this->fIndex !== self::FI_PM;
if ($this->user->isGuest) {
$ruleEmail = ('1' == $this->c->config->p_force_guest_email ? 'required|' : '') . 'string:trim|email:noban';
$ruleUsername = 'required|string:trim|username';
@ -111,10 +113,13 @@ trait PostValidatorTrait
}
if (
$this->user->isAdmin
|| $this->user->isModerator($model)
$notPM
&& (
$this->user->isAdmin
|| $this->user->isModerator($model)
)
) {
if ($editSubject) {
if ($first) {
$ruleStickTopic = 'checkbox';
$ruleStickFP = 'checkbox';
} else {
@ -122,15 +127,15 @@ trait PostValidatorTrait
$ruleStickFP = 'absent';
}
if (
! $editSubject
&& ! $editPost
! $first
&& ! $edit
) {
$ruleMergePost = 'checkbox';
} else {
$ruleMergePost = 'absent';
}
if (
$editPost
$edit
&& ! $model->user->isGuest
&& ! $model->user->isAdmin
) {
@ -147,14 +152,15 @@ trait PostValidatorTrait
$executive = false;
}
if ($editSubject) {
if ($first) {
$ruleSubject = 'required|string:trim,spaces|min:1|max:70|' . ($executive ? '' : 'noURL|') . 'check_subject';
} else {
$ruleSubject = 'absent';
}
if (
! $editPost
! $edit
&& $notPM
&& '1' == $this->c->config->o_topic_subscriptions
&& $this->user->email_confirmed
) {
@ -202,7 +208,8 @@ trait PostValidatorTrait
]);
if (
$editSubject
$first
&& $notPM
&& $this->user->usePoll
) {
$v->addValidators([

View file

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