Circle.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. declare(strict_types = 1);
  3. // {{{ License
  4. // This file is part of GNU social - https://www.gnu.org/software/social
  5. //
  6. // GNU social is free software: you can redistribute it and/or modify
  7. // it under the terms of the GNU Affero General Public License as published by
  8. // the Free Software Foundation, either version 3 of the License, or
  9. // (at your option) any later version.
  10. //
  11. // GNU social is distributed in the hope that it will be useful,
  12. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. // GNU Affero General Public License for more details.
  15. //
  16. // You should have received a copy of the GNU Affero General Public License
  17. // along with GNU social. If not, see <http://www.gnu.org/licenses/>.
  18. // }}}
  19. namespace Component\Circle\Controller;
  20. use function App\Core\I18n\_m;
  21. use App\Entity\LocalUser;
  22. use App\Util\Exception\ClientException;
  23. use Component\Circle\Entity\ActorCircle;
  24. use Component\Collection\Util\Controller\CircleController;
  25. class Circle extends CircleController
  26. {
  27. /**
  28. * Render an existing ActorCircle with the given id as a Collection of Actors
  29. *
  30. * @param ActorCircle|int $circle_id the desired ActorCircle id
  31. *
  32. * @throws \App\Util\Exception\ServerException
  33. * @throws ClientException
  34. *
  35. * @return ControllerResultType
  36. */
  37. public function circleById(int|ActorCircle $circle_id): array
  38. {
  39. $circle = \is_int($circle_id) ? ActorCircle::getByPK(['id' => $circle_id]) : $circle_id;
  40. unset($circle_id);
  41. if (\is_null($circle)) {
  42. throw new ClientException(_m('No such circle.'), 404);
  43. } else {
  44. return [
  45. '_template' => 'collection/actors.html.twig',
  46. 'title' => _m('Circle'),
  47. 'empty_message' => _m('No members.'),
  48. 'sort_form_fields' => [],
  49. 'page' => $this->int('page') ?? 1,
  50. 'actors' => $circle->getTaggedActors(),
  51. ];
  52. }
  53. }
  54. /**
  55. * @return ControllerResultType
  56. */
  57. public function circleByTaggerIdAndTag(int $tagger_id, string $tag): array
  58. {
  59. return $this->circleById(ActorCircle::getByPK(['tagger' => $tagger_id, 'tag' => $tag]));
  60. }
  61. /**
  62. * @return ControllerResultType
  63. */
  64. public function circleByTaggerNicknameAndTag(string $tagger_nickname, string $tag): array
  65. {
  66. return $this->circleById(ActorCircle::getByPK(['tagger' => LocalUser::getByNickname($tagger_nickname)->getId(), 'tag' => $tag]));
  67. }
  68. }