--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/controllers/aumanager.php Thu Dec 25 11:25:58 2008 +0000
@@ -0,0 +1,242 @@
+<?php
+/*
+ * Manage users, users group and role
+ */
+class Aumanager extends Controller
+{
+ private $data=NULL;
+
+ function Aumanager()
+ {
+ parent::Controller();
+ $this->load->library('aulib');
+ if ( !$this->aulib->isRole('admin') ) $this->aulib->denyAccess();
+ $this->config->load('auconfig');
+ if ($this->config->item('au_language') != '')
+ $curLang = $this->config->item('au_language');
+ else
+ $curLang = $this->config->item('language');
+ $this->lang->load('au', $curLang);
+ $this->load->helper(array('form', 'url'));
+ $this->load->library('validation');
+ $this->load->library('parser');
+ $this->load->model('aumodel');
+ }
+
+ /*
+ * Start point for manager
+ */
+ function index()
+ {
+ $this->load->library('table');
+ $tmpl = array ( 'table_open' => '<table width="96%" border="1" cellpadding="2" cellspacing="1"' );
+ $this->table->set_template($tmpl);
+
+ $view_table = $this->uri->segment(3, 'user');
+ switch($view_table)
+ {
+ case 'user':
+ $field_caption = explode("; ", $this->lang->line('field_name_user'));
+ $table_caption = $this->lang->line('table_name_user');
+ $this->data['add_new'] = '';
+ $sql_str = sprintf("SELECT
+ CONCAT('<a href=\"/aumanager/edit/user/',auser.id,'\">',auser.name,'</a>') as _edit,
+ email,
+ created,
+ last_visit,
+ aurole.name as arole,
+ augroup.name as agroup,
+ CONCAT('<a href=\"#\"
+ onClick=\"if(confirm("%s")) location=\'/aumanager/delete/user/',
+ auser.id,
+ '\';return false;\">%s</a>') as _delete
+ FROM auser, aurole, augroup
+ WHERE (auser.role_id = aurole.id) and (auser.group_id = augroup.id)",
+ $this->lang->line('request_confirm_delete'),
+ $this->lang->line('field_delete'));
+ break;
+ case 'group': $field_caption = explode("; ", $this->lang->line('field_name_group'));
+ $table_caption = $this->lang->line('table_name_group');
+ $this->data['add_new'] = sprintf("<a href='/aumanager/append/group'>%s</a>",
+ $this->lang->line('add_new_link'));
+ $sql_str = sprintf("select
+ CONCAT('<a href=\"/aumanager/edit/group/',augroup.id,'\">',augroup.name,'</a>') as _edit,
+ CONCAT('<a href=\"#\"
+ onClick=\"if(confirm("%s")) location=\'/aumanager/delete/group/',
+ augroup.id,
+ '\';return false;\">%s</a>') as _delete
+ from augroup",
+ $this->lang->line('request_confirm_delete'),
+ $this->lang->line('field_delete'));
+ break;
+ case 'role': $field_caption = explode("; ", $this->lang->line('field_name_role'));
+ $table_caption = $this->lang->line('table_name_role');
+ $this->data['add_new'] = sprintf("<a href='/aumanager/append/role'>%s</a>",
+ $this->lang->line('add_new_link'));
+ $sql_str = sprintf("select
+ CONCAT('<a href=\"/aumanager/edit/role/',aurole.id,'\">',aurole.name,'</a>') as _edit,
+ CONCAT('<a href=\"#\"
+ onClick=\"if(confirm("%s")) location=\'/aumanager/delete/role/',
+ aurole.id,
+ '\';return false;\">%s</a>') as _delete
+ from aurole",
+ $this->lang->line('request_confirm_delete'),
+ $this->lang->line('field_delete'));
+ break;
+ default: redirect('aumanager'); break;
+ }
+ $this->table->set_caption("<h2>".$table_caption.'</h2>');
+ $this->table->set_heading($field_caption);
+ $this->table->set_empty("---");
+ $sql = $this->db->query($sql_str);
+
+ $this->data['table'] = $this->table->generate($sql);
+ $this->data['table_name_user'] = $this->lang->line('table_name_user');
+ $this->data['table_name_group'] = $this->lang->line('table_name_group');
+ $this->data['table_name_role'] = $this->lang->line('table_name_role');
+ $this->_show_view('au/manager');
+ }
+
+ /*
+ * Edit page
+ */
+ function edit()
+ {
+ $mode = $this->uri->segment(3, 'user');
+ switch($mode)
+ {
+ case 'user' : $this->showUserEdit(); break;
+ case 'group': $this->showRefEdit(); break;
+ case 'role' : $this->showRefEdit(); break;
+ default: redirect('aumanager'); break;
+ }
+ }
+
+ /*
+ * Delete page
+ */
+ function delete()
+ {
+ if(FALSE === $this->uri->segment(3)) return;
+ $mode = $this->uri->segment(3);
+ if(FALSE === $this->uri->segment(4)) return;
+ $id = $this->uri->segment(4);
+ switch($mode)
+ {
+ case 'user' :
+ $this->aumodel->delete('auser', $id);
+ redirect('aumanager/index/user');
+ break;
+ case 'group':
+ $this->aumodel->updateUsersRef('group', $id, 1);
+ $this->aumodel->delete('augroup', $id);
+ redirect('aumanager/index/group');
+ break;
+ case 'role' :
+ $this->aumodel->updateUsersRef('role', $id, 1);
+ $this->aumodel->delete('aurole', $id);
+ redirect('aumanager/index/role');
+ break;
+ default: redirect('aumanager'); break;
+ }
+ }
+
+ /*
+ * Add new
+ */
+ function append()
+ {
+ if(FALSE === $this->uri->segment(3)) return;
+ $mode = $this->uri->segment(3);
+ switch($mode)
+ {
+ case 'group': $this->aumodel->append('augroup');redirect('aumanager/index/group');break;
+ case 'role' : $this->aumodel->append('aurole'); redirect('aumanager/index/role'); break;
+ default: redirect('aumanager'); break;
+ }
+ }
+/*
+ * Service function
+ */
+ function showRefEdit()
+ {
+ $ref = $this->uri->segment(3);
+ $id = $this->uri->segment(4);
+ $rules['name'] = "trim|required|min_length[4]|xss_clean";
+ $this->validation->set_rules($rules);
+ if($ref == 'group')
+ $fields['name'] = '"'.$this->lang->line('form_group').'"';
+ else
+ $fields['name'] = '"'.$this->lang->line('form_role').'"';
+ $this->validation->set_fields($fields);
+
+ if ($this->validation->run() == FALSE)
+ {
+ $name = $this->aumodel->getRefName('au'.$ref,$id);
+ $this->data['name_label'] = $this->lang->line('form_'.$ref);
+ $this->data['form_title'] = $this->lang->line('table_name_'.$ref);
+ $this->data['name_value'] = ($this->input->post('name_value') ? $this->validation->name : $name);
+ $this->data['name_error'] = $this->validation->name_error;
+ $this->data['submit_label'] = $this->lang->line('form_ok');
+ $this->data['id'] = $ref.'/'.$id;
+ $this->_show_view('au/group_role_edit.php');
+ }
+ else
+ {
+ $this->aumodel->setRefName('au'.$ref, $id, $this->input->post('name'));
+ redirect('aumanager/index/'.$ref);
+ }
+ }
+ function showUserEdit()
+ {
+ $id = $this->uri->segment(4);
+ $rules['username'] = "trim|required|min_length[4]|max_length[12]|xss_clean";
+ $rules['email'] = "trim|required|valid_email";
+ $this->validation->set_rules($rules);
+
+ $fields['username'] = '"'.$this->lang->line('form_username').'"';
+ $fields['email'] = '"'.$this->lang->line('form_email').'"';
+ $this->validation->set_fields($fields);
+
+ if ($this->validation->run() == FALSE)
+ {
+ $user = $this->aumodel->userFullInfo($id);
+ $this->data['form_title'] = $this->lang->line('table_name_user');
+ $this->data['username_label'] = $this->lang->line('form_username');
+ $this->data['username_value'] = ($this->input->post('username_value') ? $this->validation->username : $user['name']);
+ $this->data['username_error'] = $this->validation->username_error;
+ $this->data['email_label'] = $this->lang->line('form_email');
+ $this->data['email_value'] = ($this->input->post('email_value') ? $this->validation->email : $user['email']);
+ $this->data['email_error'] = $this->validation->email_error;
+ $this->data['group_label'] = $this->lang->line('form_group');
+ $group_list = $this->aumodel->getRefList('augroup');
+ $this->data['group_value'] = form_dropdown('group_value', $group_list, ($this->input->post('group_value') ? $this->input->post('group_value') : $user['group_id']));
+ $this->data['role_label'] = $this->lang->line('form_role');
+ $role_list = $this->aumodel->getRefList('aurole');
+ $this->data['role_value'] = form_dropdown('role_value', $role_list, ($this->input->post('role_value') ? $this->input->post('role_value') : $user['role_id']));
+
+ $this->data['submit_label'] = $this->lang->line('form_ok');
+ $this->data['id'] = $id;
+ $this->_show_view('au/user_edit.php');
+ }
+ else
+ {
+ $newdata['name'] = $this->input->post('username');
+ $newdata['email'] = $this->input->post('email');
+ $newdata['group_id'] = $this->input->post('group_value');
+ $newdata['role_id'] = $this->input->post('role_value');
+ $this->aumodel->change($id, $newdata);
+ redirect('aumanager/index/user');
+ }
+ }
+
+ /*
+ * All view's call from this point
+ * You may customize it as you need
+ */
+ function _show_view($view_name)
+ {
+ $this->parser->parse($view_name, $this->data);
+ }
+}
+?>
\ No newline at end of file