/**
* Creates or updates a preference for a given user.
*
* @param User $user The user to set the preference for
* @param string $key The key to set
* @param string $value The value to set
*
* @return UserPreference The user preference
*/
public function setPreference(User $user, $key, $value)
{
$dql = 'SELECT up FROM PartKeepr\\AuthBundle\\Entity\\UserPreference up WHERE up.user = :user AND ';
$dql .= 'up.preferenceKey = :key';
$query = $this->entityManager->createQuery($dql);
$query->setParameter('user', $user);
$query->setParameter('key', $key);
try {
$userPreference = $query->getSingleResult();
} catch (\Exception $e) {
$userPreference = new UserPreference();
$userPreference->setUser($user);
$userPreference->setPreferenceKey($key);
$this->entityManager->persist($userPreference);
}
$userPreference->setPreferenceValue($value);
$this->entityManager->flush();
return $userPreference;
}