partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

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 }