. // }}} namespace Component\Circle\Controller; use App\Core\Cache; use App\Core\DB; use App\Core\Router; use App\Entity\Actor; use App\Entity\LocalUser; use Component\Circle\Entity\ActorCircle; use Component\Collection\Util\Controller\MetaCollectionController; class Circles extends MetaCollectionController { protected const SLUG = 'circle'; protected const PLURAL_SLUG = 'circles'; protected string $page_title = 'Actor circles'; public function createCollection(int $owner_id, string $name) { return \Component\Circle\Circle::createCircle($owner_id, $name); } public function getCollectionUrl(int $owner_id, ?string $owner_nickname, int $collection_id): string { return Router::url( 'actor_circle_view_by_circle_id', ['circle_id' => $collection_id], ); } public function getCollectionItems(int $owner_id, $collection_id): array { $notes = []; // TODO: Use Feed::query return [ '_template' => 'collection/notes.html.twig', 'notes' => $notes, ]; } public function feedByCircleId(int $circle_id) { // Owner id isn't used return $this->getCollectionItems(0, $circle_id); } public function feedByTaggerIdAndTag(int $tagger_id, string $tag) { // Owner id isn't used $circle_id = ActorCircle::getByPK(['tagger' => $tagger_id, 'tag' => $tag])->getId(); return $this->getCollectionItems($tagger_id, $circle_id); } public function feedByTaggerNicknameAndTag(string $tagger_nickname, string $tag) { $tagger_id = LocalUser::getByNickname($tagger_nickname)->getId(); $circle_id = ActorCircle::getByPK(['tagger' => $tagger_id, 'tag' => $tag])->getId(); return $this->getCollectionItems($tagger_id, $circle_id); } public function getCollectionsByActorId(int $owner_id): array { return DB::findBy(ActorCircle::class, ['tagger' => $owner_id], order_by: ['id' => 'desc']); } public function getCollectionBy(int $owner_id, int $collection_id): ActorCircle { return DB::findOneBy(ActorCircle::class, ['id' => $collection_id, 'actor_id' => $owner_id]); } public function setCollectionName(int $actor_id, string $actor_nickname, ActorCircle $collection, string $name) { foreach ($collection->getActorTags(db_reference: true) as $at) { $at->setTag($name); } $collection->setTag($name); Cache::delete(Actor::cacheKeys($actor_id)['circles']); } public function removeCollection(int $actor_id, string $actor_nickname, ActorCircle $collection) { foreach ($collection->getActorTags(db_reference: true) as $at) { DB::remove($at); } DB::remove($collection); Cache::delete(Actor::cacheKeys($actor_id)['circles']); } }