SystemPreferenceService.php (3475B)
1 <?php 2 3 namespace PartKeepr\SystemPreferenceBundle\Service; 4 5 use Doctrine\ORM\EntityManager; 6 use Doctrine\ORM\NoResultException; 7 use PartKeepr\SystemPreferenceBundle\Entity\SystemPreference; 8 use PartKeepr\SystemPreferenceBundle\Exceptions\SystemPreferenceNotFoundException; 9 10 class SystemPreferenceService 11 { 12 /* 13 * @var EntityManager 14 */ 15 private $entityManager; 16 17 public function __construct(EntityManager $entityManager) 18 { 19 $this->entityManager = $entityManager; 20 } 21 22 /** 23 * Creates or updates a preference for a given user. 24 * 25 * @param string $key The key to set 26 * @param string $value The value to set 27 * 28 * @return SystemPreference The user preference 29 */ 30 public function setSystemPreference($key, $value) 31 { 32 $dql = 'SELECT sp FROM PartKeepr\SystemPreferenceBundle\Entity\SystemPreference sp WHERE sp.preferenceKey = :key'; 33 34 $query = $this->entityManager->createQuery($dql); 35 $query->setParameter('key', $key); 36 37 try { 38 $systemPreference = $query->getSingleResult(); 39 } catch (\Exception $e) { 40 $systemPreference = new SystemPreference(); 41 $systemPreference->setPreferenceKey($key); 42 43 $this->entityManager->persist($systemPreference); 44 } 45 46 $systemPreference->setPreferenceValue($value); 47 48 $this->entityManager->flush(); 49 50 return $systemPreference; 51 } 52 53 /** 54 * Returns a specific preference value. 55 * 56 * @param string $key The preference key to retrieve 57 * 58 * @throws \PartKeepr\AuthBundle\Exceptions\UserPreferenceNotFoundException Thrown if the preference key was not found 59 * 60 * @return string The preference string 61 */ 62 public function getSystemPreferenceValue($key) 63 { 64 $systemPreference = $this->getPreference($key); 65 66 return $systemPreference->getPreferenceValue(); 67 } 68 69 /** 70 * Returns a specific preference object. 71 * 72 * @param string $key The preference key to retrieve 73 * 74 * @throws SystemPreferenceNotFoundException Thrown if the preference key was not found 75 * 76 * @return SystemPreference The preference object 77 */ 78 public function getPreference($key) 79 { 80 $dql = "SELECT sp FROM PartKeepr\SystemPreferenceBundle\Entity\SystemPreference sp WHERE sp.preferenceKey = :key"; 81 82 $query = $this->entityManager->createQuery($dql); 83 $query->setParameter('key', $key); 84 85 try { 86 $sp = $query->getSingleResult(); 87 88 return $sp; 89 } catch (NoResultException $e) { 90 throw new SystemPreferenceNotFoundException($key); 91 } 92 } 93 94 /** 95 * Returns all system preferences. 96 * 97 * @return SystemPreference[] An array of SystemPreference objects 98 */ 99 public function getPreferences() 100 { 101 $dql = "SELECT sp FROM PartKeepr\SystemPreferenceBundle\Entity\SystemPreference sp"; 102 103 $query = $this->entityManager->createQuery($dql); 104 105 return $query->getResult(); 106 } 107 108 /** 109 * Removes a specific system preference. 110 * 111 * @param string $key The key to delete 112 */ 113 public function deletePreference($key) 114 { 115 $dql = "DELETE FROM PartKeepr\SystemPreferenceBundle\Entity\SystemPreference sp WHERE sp.preferenceKey = :key"; 116 117 $query = $this->entityManager->createQuery($dql); 118 $query->setParameter('key', $key); 119 120 $query->execute(); 121 } 122 }