Mod.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <?php
  2. namespace ForkBB\Models\Pages\Profile;
  3. use ForkBB\Core\Image;
  4. use ForkBB\Core\Validator;
  5. use ForkBB\Models\Pages\Profile;
  6. use ForkBB\Models\User\Model as User;
  7. use ForkBB\Models\Forum\Model as Forum;
  8. use ForkBB\Models\Forum\Manager as ForumManager;
  9. class Mod extends Profile
  10. {
  11. /**
  12. * Подготавливает данные для шаблона конфигурации прав модератора
  13. *
  14. * @param array $args
  15. * @param string $method
  16. *
  17. * @return Page
  18. */
  19. public function moderation(array $args, $method)
  20. {
  21. if (false === $this->initProfile($args['id']) || ! $this->rules->confModer) {
  22. return $this->c->Message->message('Bad request');
  23. }
  24. if ('POST' === $method) {
  25. $v = $this->c->Validator->reset()
  26. ->addValidators([
  27. ])->addRules([
  28. 'token' => 'token:EditUserModeration',
  29. 'moderator.*' => 'integer|in:' . \implode(',', \array_keys($this->curForums)),
  30. ])->addAliases([
  31. ])->addArguments([
  32. 'token' => ['id' => $this->curUser->id],
  33. ])->addMessages([
  34. ]);
  35. if ($v->validation($_POST)) {
  36. foreach ($this->c->forums->get(0)->descendants as $forum) {
  37. if (isset($v->moderator[$forum->id]) && $v->moderator[$forum->id] === $forum->id) {
  38. $forum->modAdd($this->curUser);
  39. } else {
  40. $forum->modDelete($this->curUser);
  41. }
  42. $this->c->forums->update($forum);
  43. }
  44. $this->c->Cache->delete('forums_mark');
  45. return $this->c->Redirect->page('EditUserModeration', ['id' => $this->curUser->id])->message('Update rights redirect');
  46. }
  47. $this->fIswev = $v->getErrors();
  48. }
  49. $this->crumbs = $this->crumbs(
  50. [$this->c->Router->link('EditUserModeration', ['id' => $this->curUser->id]), \ForkBB\__('Moderator rights')],
  51. [$this->c->Router->link('EditUserProfile', ['id' => $this->curUser->id]), \ForkBB\__('Editing profile')]
  52. );
  53. $this->form = $this->form();
  54. $this->actionBtns = $this->btns('edit');
  55. return $this;
  56. }
  57. /**
  58. * Возвращает список доступных разделов для пользователя текущего профиля
  59. *
  60. * @return array
  61. */
  62. protected function getcurForums()
  63. {
  64. $forums = new ForumManager($this->c);
  65. $forums->init($this->c->groups->get($this->curUser->group_id));
  66. $root = $forums->get(0);
  67. return $root instanceof Forum ? $root->descendants : [];
  68. }
  69. /**
  70. * Создает массив данных для формы
  71. *
  72. * @return array
  73. */
  74. protected function form()
  75. {
  76. $form = [
  77. 'action' => $this->c->Router->link('EditUserModeration', ['id' => $this->curUser->id]),
  78. 'hidden' => [
  79. 'token' => $this->c->Csrf->create('EditUserModeration', ['id' => $this->curUser->id]),
  80. ],
  81. 'sets' => [],
  82. 'btns' => [
  83. 'save' => [
  84. 'type' => 'submit',
  85. 'value' => \ForkBB\__('Save'),
  86. 'accesskey' => 's',
  87. ],
  88. ],
  89. ];
  90. $root = $this->c->forums->get(0);
  91. if ($root instanceof Forum) {
  92. $list = $this->c->forums->depthList($root, 0);
  93. $cid = null;
  94. foreach ($list as $forum) {
  95. if ($cid !== $forum->cat_id) {
  96. $form['sets']["category{$forum->cat_id}-info"] = [
  97. 'info' => [
  98. 'info1' => [
  99. 'type' => '', //????
  100. 'value' => $forum->cat_name,
  101. ],
  102. ],
  103. ];
  104. $cid = $forum->cat_id;
  105. }
  106. $fields = [];
  107. $fields["name{$forum->id}"] = [
  108. 'class' => ['modforum', 'name', 'depth' . $forum->depth],
  109. 'type' => 'str',
  110. 'value' => $forum->forum_name,
  111. 'caption' => \ForkBB\__('Forum label'),
  112. ];
  113. $fields["moderator[{$forum->id}]"] = [
  114. 'class' => ['modforum', 'moderator'],
  115. 'type' => 'checkbox',
  116. 'value' => $forum->id,
  117. 'checked' => isset($this->curForums[$forum->id]) && $this->curUser->isModerator($forum),
  118. 'disabled' => ! isset($this->curForums[$forum->id]) || '' != $this->curForums[$forum->id]->redirect_url,
  119. 'caption' => \ForkBB\__('Moderator label'),
  120. ];
  121. $form['sets']["forum{$forum->id}"] = [
  122. 'class' => 'modforum',
  123. 'legend' => $forum->cat_name . ' / ' . $forum->forum_name,
  124. 'fields' => $fields,
  125. ];
  126. }
  127. }
  128. return $form;
  129. }
  130. }