Implement user settings

This commit is contained in:
Eike Foken
2011-09-15 18:28:45 +02:00
parent 59739561b4
commit 1496c44505
5 changed files with 72 additions and 3 deletions

View File

@@ -72,6 +72,16 @@ $config['auth/settings'] = array(
'label' => _('New password'),
'rules' => 'min_length[6]|matches[new_password_confirm]',
),
array(
'field' => 'job_check_interval',
'label' => _('Job checking interval'),
'rules' => 'greater_than[4]',
),
array(
'field' => 'projects_sort_recently',
'label' => _('Sort projects by last access'),
'rules' => 'integer',
),
);
/**

View File

@@ -128,8 +128,17 @@ class Auth extends CI_Controller {
'phone' => $this->input->post('phone')
);
// update the users settings
$settings = array(
'projects_sort_recently' => $this->input->post('projects_sort_recently'),
'jobs_check_interval' => $this->input->post('jobs_check_interval'),
);
$this->user->updateSettings($settings, $user['id']);
$this->session->unset_userdata('settings'); // clear saved settings
if ($this->user->update($user['id'], $data)) {
$this->messages->add(_("Settings saved successfully"), 'success');
$this->messages->add(_("Changes saved successfully"), 'success');
redirect('auth/settings', 303);
}
}

View File

@@ -273,6 +273,22 @@ class Access {
return $this->cache['profile'];
}
/**
* Gets the settings of the current user.
*
* @return array
*/
public function settings($key) {
if ((boolean) $this->CI->session->userdata('settings')) {
$settings = $this->CI->session->userdata('settings');
} else {
$settings = $this->CI->user->getSettings($this->CI->session->userdata('user_id'));
$this->CI->session->set_userdata('settings', $settings);
}
return isset($settings[$key]) ? $settings[$key] : false;
}
}
/* End of file Access.php */

View File

@@ -454,6 +454,17 @@ class User extends CI_Model {
->where('id', $user->group_id)->get('groups')->row_array();
}
/**
* Gets a users settings.
*
* @param string $userId
* @return array
*/
public function getSettings($userId) {
$query = $this->db->get_where('users_settings', array('user_id' => $userId));
return $query->row_array();
}
/**
* Updates a user.
*
@@ -480,6 +491,21 @@ class User extends CI_Model {
return $this->db->affected_rows() > 0;
}
/**
*
*/
public function updateSettings($data, $userId) {
foreach ($data as $key => $value) {
$data[$key] = $this->db->escape($value);
}
$query = $this->db->query("REPLACE INTO `users_settings` (`user_id`, "
. implode(", ", array_keys($data)) . ") VALUES ('" . $userId . "', "
. implode(", ", array_values($data)) . ")");
return $this->db->affected_rows() > 0;
}
/**
* Deletes a specified user.
*

View File

@@ -57,10 +57,18 @@
<div id="settings" class="tab_content">
<ul>
<li>
<input type="checkbox" id="projects_sortrecently" name="projects_sortrecently" value="1" class="checkbox"/>
<label for="projects_sortrecently"><?=_('Sort projects by date of the last access');?></label><br />
<input type="checkbox" id="projects_sort_recently" name="projects_sort_recently" value="1" class="checkbox" <?=set_checkbox('projects_sort_recently', 1, (boolean) $this->access->settings('projects_sort_recently'));?> />
<?=form_label(_('Sort projects by last access'), 'projects_sort_recently');?><br />
<label class="note"><?=_('If the projects are sorted by the data of the last access, the rarely used projects &quot;slip&quot; to the end of the list.');?></label>
</li>
<li>
<?=form_label(_('Job checking interval'), 'jobs_check_interval');?><br />
<label class="note"><?=_('Check for new jobs every x seconds.');?></label>
<div>
<input type="text" name="jobs_check_interval" id="jobs_check_interval" class="text" value="<?=set_value('jobs_check_interval', $this->access->settings('jobs_check_interval'));?>" />
<?=form_error('jobs_check_interval');?>
</div>
</li>
</ul>
</div>
<div id="password" class="tab_content">