/** * Find a preference by it's key * or return a new instance. * * @param $key * @return PreferenceInterface */ public function findByKeyOrNew($key) { /* @var UserInterface $user */ if (!($user = $this->auth->getUser())) { throw new \Exception('The user could not be determined.'); } if (!($preference = $this->model->where('key', $key)->where('user_id', $user->getId())->first())) { $preference = $this->model->newInstance(); $preference->setKey($key); $preference->setUser($user); } return $preference; }
/** * Set a preference value. * * @param $key * @param $value * @return $this */ public function set($key, $value) { $preference = $this->model->where('user_id', $this->auth->id())->where('key', $key)->first(); if (!$preference) { $preference = $this->model->newInstance(); $preference->user_id = $this->auth->id(); $preference->key = $key; } if (!($field = config(str_replace('::', '::preferences/preferences.', $key)))) { $field = config(str_replace('::', '::preferences.', $key)); } if (is_string($field)) { $field = ['type' => $field]; } $type = app(array_get($field, 'type')); $modifier = $type->getModifier(); if ($modifier instanceof FieldTypeModifier) { $value = $modifier->modify($value); } $preference->value = $value; $preference->save(); return $this; }