Skip to content

Commit

Permalink
User setting update now create setting if it doesn't exists yet inste…
Browse files Browse the repository at this point in the history
…ad of returning an error
  • Loading branch information
osaajani committed Sep 17, 2023
1 parent 9aa3eca commit fb3f942
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 4 deletions.
12 changes: 12 additions & 0 deletions controllers/internals/Setting.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,18 @@ public function gets_for_user(int $id_user)
return $settings_array;
}

/**
* Get a user setting by his name for a user.
*
* @param int $id_user : user id
*
* @return array
*/
public function get_by_name_for_user(int $id_user, string $name)
{
return $this->get_model()->get_by_name_for_user($id_user, $name);
}

/**
* Update a setting by his name and user id.
*
Expand Down
23 changes: 19 additions & 4 deletions controllers/publics/Setting.php
Original file line number Diff line number Diff line change
Expand Up @@ -75,12 +75,27 @@ public function update(string $setting_name, string $csrf)
$setting_value = json_encode($setting_value);
}

$update_setting_result = $this->internal_setting->update_for_user($_SESSION['user']['id'], $setting_name, $setting_value);
if (false === $update_setting_result)
// If setting dont exists yet, create it, else update
$setting = $this->internal_setting->get_by_name_for_user($_SESSION['user']['id'], $setting_name);
if (!$setting)
{
\FlashMessage\FlashMessage::push('danger', 'Impossible de mettre à jour ce réglage.');
$success = $this->internal_setting->create($_SESSION['user']['id'], $setting_name, $setting_value);
if (false === $success)
{
\FlashMessage\FlashMessage::push('danger', 'Impossible de mettre à jour ce réglage.');

return $this->redirect(\descartes\Router::url('Setting', 'show'));
return $this->redirect(\descartes\Router::url('Setting', 'show'));
}
}
else
{
$update_setting_result = $this->internal_setting->update_for_user($_SESSION['user']['id'], $setting_name, $setting_value);
if (false === $update_setting_result)
{
\FlashMessage\FlashMessage::push('danger', 'Impossible de mettre à jour ce réglage.');

return $this->redirect(\descartes\Router::url('Setting', 'show'));
}
}

$settings = $this->internal_setting->gets_for_user($_SESSION['user']['id']);
Expand Down
12 changes: 12 additions & 0 deletions models/Setting.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,18 @@ public function update_by_name_for_user(int $id_user, string $name, $value)
return $this->_update($this->get_table_name(), ['value' => $value], ['id_user' => $id_user, 'name' => $name]);
}

/**
* Get a user setting by his name for a user.
*
* @param int $id_user : user id
*
* @return array
*/
public function get_by_name_for_user(int $id_user, string $name)
{
return $this->_select_one($this->get_table_name(), ['name' => $name, 'id_user' => $id_user]);
}

/**
* Return table name.
*/
Expand Down

0 comments on commit fb3f942

Please sign in to comment.