RssController.php
1 <?php 2 3 namespace App\Controller; 4 5 use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; 6 use Symfony\Contracts\Translation\TranslatorInterface; 7 8 use Symfony\Component\Routing\Annotation\Route; 9 use Symfony\Component\HttpFoundation\Response; 10 use Symfony\Component\HttpFoundation\Request; 11 12 use App\Entity\Online; 13 use App\Entity\Player; 14 use App\Entity\Server; 15 16 use Doctrine\ORM\EntityManagerInterface; 17 18 class RssController extends AbstractController 19 { 20 #[Route( 21 '/rss/online/{crc32server}', 22 name: 'rss_online', 23 requirements: 24 [ 25 'crc32server' => '\d+', 26 ], 27 methods: 28 [ 29 'GET' 30 ] 31 )] 32 public function online( 33 ?Request $request, 34 EntityManagerInterface $entityManagerInterface 35 ): Response 36 { 37 $online = []; 38 39 foreach ($entityManagerInterface->getRepository(Online::class)->findBy( 40 [ 41 'crc32server' => $request->get('crc32server') 42 ], 43 [ 44 'id' => 'DESC' // same as online.time but faster 45 ], 46 10 47 ) as $value) 48 { 49 $online[] = 50 [ 51 'id' => $value->getId(), 52 'bots' => $value->getBots(), 53 'players' => $value->getPlayers(), 54 'total' => $value->getTotal(), 55 'time' => $value->getTime() 56 ]; 57 } 58 59 // Response 60 $response = new Response(); 61 62 $response->headers->set( 63 'Content-Type', 64 'text/xml' 65 ); 66 67 return $this->render( 68 'default/rss/online.xml.twig', 69 [ 70 'server' => 71 [ 72 'crc32server' => $request->get('crc32server'), 73 'online' => $online 74 ] 75 ], 76 $response 77 ); 78 79 throw $this->createNotFoundException(); 80 } 81 82 #[Route( 83 '/rss/players/{crc32server}', 84 name: 'rss_players', 85 requirements: 86 [ 87 'crc32server' => '\d+', 88 ], 89 methods: 90 [ 91 'GET' 92 ] 93 )] 94 public function players( 95 ?Request $request, 96 EntityManagerInterface $entityManagerInterface 97 ): Response 98 { 99 $players = []; 100 101 foreach ($entityManagerInterface->getRepository(Player::class)->findBy( 102 [ 103 'crc32server' => $request->get('crc32server') 104 ], 105 [ 106 'id' => 'DESC' 107 ], 108 10 109 ) as $value) 110 { 111 $players[] = 112 [ 113 'id' => $value->getId(), 114 'name' => $value->getName(), 115 'joined' => $value->getJoined() 116 ]; 117 } 118 119 // Response 120 $response = new Response(); 121 122 $response->headers->set( 123 'Content-Type', 124 'text/xml' 125 ); 126 127 return $this->render( 128 'default/rss/players.xml.twig', 129 [ 130 'server' => 131 [ 132 'crc32server' => $request->get('crc32server'), 133 'players' => $players 134 ] 135 ], 136 $response 137 ); 138 } 139 }