UserPreferenceService.php (4852B)
1 <?php 2 3 namespace PartKeepr\AuthBundle\Services; 4 5 use Doctrine\ORM\EntityManager; 6 use Doctrine\ORM\NoResultException; 7 use PartKeepr\AuthBundle\Entity\User; 8 use PartKeepr\AuthBundle\Entity\UserPreference; 9 use PartKeepr\AuthBundle\Exceptions\UserPreferenceNotFoundException; 10 11 class UserPreferenceService 12 { 13 /* 14 * @var EntityManager 15 */ 16 private $entityManager; 17 18 public function __construct(EntityManager $entityManager) 19 { 20 $this->entityManager = $entityManager; 21 } 22 23 /** 24 * Creates or updates a preference for a given user. 25 * 26 * @param User $user The user to set the preference for 27 * @param string $key The key to set 28 * @param string $value The value to set 29 * 30 * @return UserPreference The user preference 31 */ 32 public function setPreference(User $user, $key, $value) 33 { 34 $dql = 'SELECT up FROM PartKeepr\AuthBundle\Entity\UserPreference up WHERE up.user = :user AND '; 35 $dql .= 'up.preferenceKey = :key'; 36 37 $query = $this->entityManager->createQuery($dql); 38 $query->setParameter('user', $user); 39 $query->setParameter('key', $key); 40 41 try { 42 $userPreference = $query->getSingleResult(); 43 } catch (\Exception $e) { 44 $userPreference = new UserPreference(); 45 $userPreference->setUser($user); 46 $userPreference->setPreferenceKey($key); 47 48 $this->entityManager->persist($userPreference); 49 } 50 51 $userPreference->setPreferenceValue($value); 52 53 $this->entityManager->flush(); 54 55 return $userPreference; 56 } 57 58 /** 59 * Returns a specific preference value for the given user. 60 * 61 * @param User $user The user to retrieve the preference for 62 * @param string $key The preference key to retrieve 63 * 64 * @throws \PartKeepr\AuthBundle\Exceptions\UserPreferenceNotFoundException Thrown if the preference key was not found 65 * 66 * @return string The preference string 67 */ 68 public function getPreferenceValue(User $user, $key) 69 { 70 $userPreference = $this->getPreference($user, $key); 71 72 return $userPreference->getPreferenceValue(); 73 } 74 75 /** 76 * Returns all preferences for the given user. 77 * 78 * @param \PartKeepr\AuthBundle\Entity\User $user The user 79 * 80 * @return UserPreference[] An array of UserPreference objects 81 */ 82 public function getPreferences(User $user) 83 { 84 $dql = "SELECT up FROM PartKeepr\AuthBundle\Entity\UserPreference up WHERE up.user = :user"; 85 86 $query = $this->entityManager->createQuery($dql); 87 $query->setParameter('user', $user); 88 89 return $query->getResult(); 90 } 91 92 /** 93 * Returns a specific preference object for the given user. 94 * 95 * @param \PartKeepr\AuthBundle\Entity\User $user The user to retrieve the preference for 96 * @param string $key The preference key to retrieve 97 * 98 * @throws \PartKeepr\AuthBundle\Exceptions\UserPreferenceNotFoundException Thrown if the preference key was not found 99 * 100 * @return UserPreference The preference object 101 */ 102 public function getPreference(User $user, $key) 103 { 104 $dql = "SELECT up FROM PartKeepr\AuthBundle\Entity\UserPreference up WHERE up.user = :user AND "; 105 $dql .= 'up.preferenceKey = :key'; 106 107 $query = $this->entityManager->createQuery($dql); 108 $query->setParameter('user', $user); 109 $query->setParameter('key', $key); 110 111 try { 112 $up = $query->getSingleResult(); 113 114 return $up; 115 } catch (NoResultException $e) { 116 throw new UserPreferenceNotFoundException($user, $key); 117 } 118 } 119 120 /** 121 * Removes a specific setting for a specific user. 122 * 123 * @param \PartKeepr\AuthBundle\Entity\User $user The user to delete the preference for 124 * @param string $key The key to delete 125 */ 126 public function deletePreference(User $user, $key) 127 { 128 $dql = "DELETE FROM PartKeepr\AuthBundle\Entity\UserPreference up WHERE up.user = :user AND "; 129 $dql .= 'up.preferenceKey = :key'; 130 131 $query = $this->entityManager->createQuery($dql); 132 $query->setParameter('user', $user); 133 $query->setParameter('key', $key); 134 135 $query->execute(); 136 } 137 138 /** 139 * Removes all preferences for specific user. This is usually used when removing the user. 140 * 141 * @param \PartKeepr\AuthBundle\Entity\User $user The user to delete the preference for 142 */ 143 public function deletePreferences(User $user) 144 { 145 $dql = "DELETE FROM PartKeepr\AuthBundle\Entity\UserPreference up WHERE up.user = :user"; 146 147 $query = $this->entityManager->createQuery($dql); 148 $query->setParameter('user', $user); 149 150 $query->execute(); 151 } 152 }