Просмотр файла app/Controllers/PageController.php

Размер файла: 4.54Kb
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. namespace App\Controllers;
  6.  
  7. use App\Models\Rule;
  8. use App\Models\Sticker;
  9. use App\Models\StickersCategory;
  10. use App\Models\Status;
  11. use App\Models\Surprise;
  12. use Illuminate\Database\Capsule\Manager as DB;
  13.  
  14. class PageController extends BaseController
  15. {
  16. /**
  17. * Главная страница
  18. *
  19. * @param string $page
  20. * @return string
  21. */
  22. public function index(string $page = 'index'): string
  23. {
  24. if ($page === 'menu' ||
  25. ! preg_match('|^[a-z0-9_\-]+$|i', $page) ||
  26. ! file_exists(RESOURCES . '/views/main/' . $page . '.blade.php')
  27. ) {
  28. abort(404);
  29. }
  30.  
  31. return view('main/layout', compact('page'));
  32. }
  33.  
  34. /**
  35. * Меню
  36. *
  37. * @return string
  38. */
  39. public function menu(): string
  40. {
  41. if (! getUser()) {
  42. abort(404);
  43. }
  44.  
  45. return view('main/layout', ['page' => 'menu']);
  46. }
  47.  
  48. /**
  49. * Теги
  50. *
  51. * @return string
  52. */
  53. public function tags(): string
  54. {
  55. return view('pages/tags');
  56. }
  57.  
  58. /**
  59. * Правила
  60. *
  61. * @return string
  62. */
  63. public function rules(): string
  64. {
  65. $rules = Rule::query()->first();
  66.  
  67. if ($rules) {
  68. $rules['text'] = str_replace('%SITENAME%', setting('title'), $rules['text']);
  69. }
  70.  
  71. return view('pages/rules', compact('rules'));
  72. }
  73.  
  74. /**
  75. * Стикеры
  76. *
  77. * @return string
  78. */
  79. public function stickers(): string
  80. {
  81. $categories = StickersCategory::query()
  82. ->selectRaw('sc.id, sc.name, count(s.id) cnt')
  83. ->from('stickers_categories as sc')
  84. ->leftJoin('stickers as s', 's.category_id', 'sc.id')
  85. ->groupBy('sc.id')
  86. ->orderBy('sc.id')
  87. ->get();
  88.  
  89. return view('pages/stickers', compact('categories'));
  90. }
  91.  
  92. /**
  93. * Стикеры
  94. *
  95. * @param int $id
  96. *
  97. * @return string
  98. */
  99. public function stickersCategory(int $id): string
  100. {
  101. $category = StickersCategory::query()->where('id', $id)->first();
  102.  
  103. if (! $category) {
  104. abort(404, __('stickers.category_not_exist'));
  105. }
  106.  
  107. $stickers = Sticker::query()
  108. ->where('category_id', $id)
  109. ->orderBy(DB::connection()->raw('CHAR_LENGTH(code)'))
  110. ->orderBy('name')
  111. ->with('category')
  112. ->paginate(setting('stickerlist'));
  113.  
  114. return view('pages/stickers_category', compact('category', 'stickers'));
  115. }
  116.  
  117. /**
  118. * Ежегодный сюрприз
  119. *
  120. * @return void
  121. */
  122. public function surprise(): void
  123. {
  124. $surprise['requiredDate'] = '10.01';
  125.  
  126. $money = mt_rand(10000, 50000);
  127. $point = mt_rand(150, 250);
  128. $rating = mt_rand(3, 10);
  129. $year = date('Y');
  130.  
  131. if (! $user = getUser()) {
  132. abort(403, __('main.not_authorized'));
  133. }
  134.  
  135. if (strtotime(date('d.m.Y')) > strtotime($surprise['requiredDate'].'.'.date('Y'))) {
  136. abort('default', __('pages.surprise_date_receipt'));
  137. }
  138.  
  139. $existSurprise = Surprise::query()
  140. ->where('user_id', $user->id)
  141. ->where('year', $year)
  142. ->first();
  143.  
  144. if ($existSurprise) {
  145. abort('default', __('pages.surprise_already_received'));
  146. }
  147.  
  148. if ($user->point >= 50) {
  149. $user->increment('point', $point);
  150. } else {
  151. $point = 0;
  152. }
  153.  
  154. $user->increment('money', $money);
  155. $user->increment('posrating', $rating);
  156. $user->update(['rating' => $user->posrating - $user->negrating]);
  157.  
  158. $text = textNotice('surprise', ['year' => $year, 'point' => plural($point, setting('scorename')), 'money' => plural($money, setting('moneyname')), 'rating' => $rating]);
  159. $user->sendMessage(null, $text);
  160.  
  161. Surprise::query()->create([
  162. 'user_id' => $user->id,
  163. 'year' => $year,
  164. 'created_at' => SITETIME,
  165. ]);
  166.  
  167. setFlash('success', __('pages.surprise_success_received'));
  168. redirect('/');
  169. }
  170.  
  171. /**
  172. * FAQ по сайту
  173. *
  174. * @return string
  175. */
  176. public function faq(): string
  177. {
  178. return view('pages/faq');
  179. }
  180.  
  181.  
  182. /**
  183. * FAQ по статусам
  184. *
  185. * @return string
  186. */
  187. public function statusfaq(): string
  188. {
  189. $statuses = Status::query()
  190. ->orderByDesc('topoint')
  191. ->get();
  192.  
  193. return view('pages/statusfaq', compact('statuses'));
  194. }
  195. }