Markread.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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\Forum;
  10. use ForkBB\Models\Action;
  11. use ForkBB\Models\Forum\Forum;
  12. use ForkBB\Models\User\User;
  13. use RuntimeException;
  14. class Markread extends Action
  15. {
  16. /**
  17. * Пометка всех тем/разделов прочитанными
  18. */
  19. public function markread(Forum $forum, User $user): Forum
  20. {
  21. if ($user->isGuest) {
  22. throw new RuntimeException('Expected user, not guest');
  23. }
  24. if (0 === $forum->id) {
  25. $user->u_mark_all_read = \time();
  26. $this->c->users->update($user);
  27. $vars = [
  28. ':uid' => $user->id,
  29. ];
  30. $query = 'DELETE
  31. FROM ::mark_of_topic
  32. WHERE uid=?i:uid';
  33. $this->c->DB->exec($query, $vars);
  34. $query = 'DELETE
  35. FROM ::mark_of_forum
  36. WHERE uid=?i:uid';
  37. $this->c->DB->exec($query, $vars);
  38. } elseif ($forum->id > 0) {
  39. $vars = [
  40. ':uid' => $user->id,
  41. ':fid' => $forum->id,
  42. ':mark' => \time(),
  43. ];
  44. $query = 'DELETE
  45. FROM ::mark_of_topic
  46. WHERE uid=?i:uid AND tid IN (
  47. SELECT id
  48. FROM ::topics
  49. WHERE forum_id=?i:fid
  50. )';
  51. $this->c->DB->exec($query, $vars);
  52. if ($user->mf_mark_all_read) { // ????
  53. $query = 'UPDATE ::mark_of_forum
  54. SET mf_mark_all_read=?i:mark
  55. WHERE uid=?i:uid AND fid=?i:fid';
  56. } else { // ????
  57. $query = 'INSERT INTO ::mark_of_forum (uid, fid, mf_mark_all_read)
  58. VALUES (?i:uid, ?i:fid, ?i:mark)';
  59. }
  60. $this->c->DB->exec($query, $vars);
  61. } else {
  62. throw new RuntimeException('The model does not have ID');
  63. }
  64. return $forum;
  65. }
  66. }