partkeepr

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

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 }