MarkTipReadAction.php (1871B)
1 <?php 2 3 namespace PartKeepr\TipOfTheDayBundle\Action; 4 5 use Doctrine\ORM\EntityManager; 6 use Dunglas\ApiBundle\Action\ActionUtilTrait; 7 use Dunglas\ApiBundle\Exception\RuntimeException; 8 use Dunglas\ApiBundle\Model\DataProviderInterface; 9 use PartKeepr\AuthBundle\Services\UserService; 10 use PartKeepr\TipOfTheDayBundle\Entity\TipOfTheDay; 11 use PartKeepr\TipOfTheDayBundle\Entity\TipOfTheDayHistory; 12 use Symfony\Component\HttpFoundation\Request; 13 14 class MarkTipReadAction 15 { 16 use ActionUtilTrait; 17 18 /** 19 * @var DataProviderInterface 20 */ 21 private $dataProvider; 22 23 /** 24 * @var EntityManager 25 */ 26 private $entityManager; 27 28 /** 29 * @var UserService 30 */ 31 private $userService; 32 33 public function __construct( 34 DataProviderInterface $dataProvider, 35 EntityManager $entityManager, 36 UserService $userService 37 ) { 38 $this->dataProvider = $dataProvider; 39 $this->entityManager = $entityManager; 40 $this->userService = $userService; 41 } 42 43 /** 44 * Marks a specific tip as read. 45 * 46 * @param Request $request The request 47 * @param int $id The ID of the system notice 48 * 49 * @throws RuntimeException 50 * 51 * @return array|\Dunglas\ApiBundle\Model\PaginatorInterface|\Traversable 52 */ 53 public function __invoke(Request $request, $id) 54 { 55 list($resourceType) = $this->extractAttributes($request); 56 57 $tip = $this->getItem($this->dataProvider, $resourceType, $id); 58 59 /* 60 * @var $tip TipOfTheDay 61 */ 62 $tipOfTheDayHistoryItem = new TipOfTheDayHistory(); 63 $tipOfTheDayHistoryItem->setUser($this->userService->getUser()); 64 $tipOfTheDayHistoryItem->setName($tip->getName()); 65 66 $this->entityManager->persist($tipOfTheDayHistoryItem); 67 $this->entityManager->flush(); 68 69 return $tip; 70 } 71 }