Stat.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <?php
  2. /**
  3. * This file is part of the ForkBB <https://github.com/forkbb>.
  4. *
  5. * @copyright (c) Visman <mio.visman@yandex.ru, https://github.com/MioVisman>
  6. * @license The MIT License (MIT)
  7. */
  8. declare(strict_types=1);
  9. namespace ForkBB\Models\Pages\Admin\Users;
  10. use ForkBB\Core\Validator;
  11. use ForkBB\Models\Page;
  12. use ForkBB\Models\Pages\Admin\Users;
  13. use function \ForkBB\__;
  14. use function \ForkBB\dt;
  15. use function \ForkBB\num;
  16. class Stat extends Users
  17. {
  18. /**
  19. * Подготавливает данные для шаблона ip статистики для пользователя
  20. */
  21. public function view(array $args, string $method): Page
  22. {
  23. $stat = $this->c->posts->userStat($args['id']);
  24. $number = \count($stat);
  25. $page = $args['page'] ?? 1;
  26. $pages = (int) \ceil(($number ?: 1) / $this->c->config->i_disp_users);
  27. if ($page > $pages) {
  28. return $this->c->Message->message('Not Found', true, 404);
  29. }
  30. $startNum = ($page - 1) * $this->c->config->i_disp_users;
  31. $stat = \array_slice($stat, $startNum, $this->c->config->i_disp_users);
  32. $user = $this->c->users->load($args['id']);
  33. if (0 == $number) {
  34. $this->fIswev = ['i', 'Results no posts found'];
  35. }
  36. $this->nameTpl = 'admin/users_result';
  37. $this->mainSuffix = '-one-column';
  38. $this->aCrumbs[] = [
  39. $this->c->Router->link(
  40. 'AdminUserStat',
  41. [
  42. 'id' => $args['id'],
  43. ]
  44. ),
  45. ['%s', $user->username],
  46. ];
  47. $this->formResult = $this->form($stat, $startNum);
  48. $this->pagination = $this->c->Func->paginate(
  49. $pages,
  50. $page,
  51. 'AdminUserStat',
  52. [
  53. 'id' => $args['id'],
  54. ]
  55. );
  56. return $this;
  57. }
  58. /**
  59. * Создает массив данных для формы статистики пользователя по ip
  60. */
  61. protected function form(array $stat, int $number): array
  62. {
  63. $form = [
  64. 'action' => null,
  65. 'hidden' => null,
  66. 'sets' => [],
  67. 'btns' => null,
  68. ];
  69. \array_unshift($stat, ['last_used' => null, 'used_times' => null]);
  70. $flag = false;
  71. foreach ($stat as $ip => $data) {
  72. $fields = [];
  73. $fields["l{$number}-ip"] = [
  74. 'class' => ['result', 'ip'],
  75. 'type' => $flag ? 'link' : 'str',
  76. 'caption' => 'Results IP address head',
  77. 'value' => $flag ? $ip : null,
  78. 'href' => $flag
  79. ? $this->c->Router->link(
  80. 'AdminHost',
  81. [
  82. 'ip' => $ip,
  83. ]
  84. )
  85. : null,
  86. ];
  87. $fields["l{$number}-last-used"] = [
  88. 'class' => ['result', 'last-used'],
  89. 'type' => 'str',
  90. 'caption' => 'Results last used head',
  91. 'value' => $flag ? dt($data['last_used']) : null,
  92. ];
  93. $fields["l{$number}-used-times"] = [
  94. 'class' => ['result', 'used-times'],
  95. 'type' => 'str',
  96. 'caption' => 'Results times found head',
  97. 'value' => $flag ? num($data['used_times']) : null,
  98. ];
  99. $fields["l{$number}-action"] = [
  100. 'class' => ['result', 'action'],
  101. 'type' => $flag ? 'link' : 'str',
  102. 'caption' => 'Results action head',
  103. 'value' => $flag ? __('Results find more link') : null,
  104. 'href' => $flag
  105. ? $this->c->Router->link(
  106. 'AdminUsersResult',
  107. [
  108. 'data' => $this->encodeData($ip),
  109. ]
  110. )
  111. : null,
  112. ];
  113. $form['sets']["l{$number}"] = [
  114. 'class' => ['result', 'stat'],
  115. 'legend' => $flag ? (string) $number : null,
  116. 'fields' => $fields,
  117. ];
  118. ++$number;
  119. $flag = true;
  120. }
  121. return $form;
  122. }
  123. }