diff --git a/application/config/autoload.php b/application/config/autoload.php index 7a8bab8..07f208e 100755 --- a/application/config/autoload.php +++ b/application/config/autoload.php @@ -52,7 +52,7 @@ $autoload['packages'] = array(APPPATH.'third_party'); | $autoload['libraries'] = array('database', 'session', 'xmlrpc'); */ -$autoload['libraries'] = array('lang_detect', 'database', 'session'); +$autoload['libraries'] = array('lang_detect', 'database', 'session', 'access'); /* diff --git a/application/controllers/auth.php b/application/controllers/auth.php index 1ba4d35..5b5894b 100755 --- a/application/controllers/auth.php +++ b/application/controllers/auth.php @@ -7,197 +7,200 @@ */ class Auth extends CI_Controller { - /** - * Constructor. - */ - public function __construct() { - parent::__construct(); - $this->load->library('access'); - $this->load->library('form_validation'); - $this->load->model('user'); - } + /** + * Constructor. + */ + public function __construct() { + parent::__construct(); + $this->load->library('access'); + $this->load->library('form_validation'); + $this->load->model('user'); + } - //redirect if needed, otherwise display the user list - public function index() { - if (!$this->access->loggedIn()) { - redirect('auth/login'); - } else { - //set the flash data error message if there is one - $this->data['message'] = validation_errors() ? validation_errors() : $this->session->flashdata('message'); + /** + * Redirects the user if needed, otherwise display the layout. + */ + public function index() { + if (!$this->access->loggedIn()) { + redirect('auth/login'); + } else { + $this->load->view('index'); + } + } - //$this->data['users'] = $this->access->getUsers(); - $this->load->view('index', $this->data); - } - } + /** + * Logs the user in - or not ;-) + */ + public function login() { + if ($this->access->loggedIn()) { + redirect(); + } - /** - * Logs the user in - or not ;-) - */ - public function login() { - if ($this->access->loggedIn()) { - redirect('welcome'); - } + // validate form input + $this->form_validation->set_rules('username', "Benutzername", 'required'); + $this->form_validation->set_rules('password', "Passwort", 'required'); - // validate form input - $this->form_validation->set_rules('username', "Benutzername", 'required'); - $this->form_validation->set_rules('password', "Passwort", 'required'); + if ($this->form_validation->run() == true) { + // check for "remember me" + $remember = (boolean) $this->input->post('remember'); - if ($this->form_validation->run() == true) { - // check for "remember me" - $remember = (boolean) $this->input->post('remember'); + if ($this->access->login($this->input->post('username'), $this->input->post('password'), $remember)) { + $this->data['success'] = true; + } else { // if the login was un-successful + $this->data['success'] = false; + $this->data['message'] = $this->access->errors(); + } - if ($this->access->login($this->input->post('username'), $this->input->post('password'), $remember)) { - $this->data['success'] = true; - } else { // if the login was un-successful - $this->data['success'] = false; - $this->data['message'] = $this->access->errors(); - } + // output JSON data + $this->output->set_content_type('application/json') + ->set_output(json_encode($this->data)); + } else { + $this->data['message'] = validation_errors() ? validation_errors() : null; + $this->data['username'] = $this->form_validation->set_value('username'); - // output json data - $this->output->set_content_type('application/json') - ->set_output(json_encode($this->data)); - } else { - $this->data['message'] = validation_errors() ? validation_errors() : null; - $this->data['username'] = $this->form_validation->set_value('username'); + $this->load->view('auth/login', $this->data); + } + } - $this->load->view('auth/login', $this->data); - } - } + /** + * Logs the user out. + */ + public function logout() { + $logout = $this->access->logout(); - /** - * Logs the user out. - */ - public function logout() { - $logout = $this->access->logout(); - redirect('auth'); - } + // output JSON data + $this->output->set_content_type('application/json') + ->set_output(json_encode(array('success' => true))); + } - /** - * Allows users to register. - */ - public function register() { - if ($this->access->loggedIn()) { - redirect('welcome'); - } + /** + * Allows users to register. + */ + public function register() { + if ($this->access->loggedIn()) { + redirect('welcome'); + } - // validate form input - $this->form_validation->set_rules('username', "Username", 'required'); - $this->form_validation->set_rules('realname', "Realname", 'required'); - $this->form_validation->set_rules('email', "Email address", 'required|valid_email'); - $this->form_validation->set_rules('password', "Password", 'required|min_length[' . $this->config->item('min_password_length', 'access') . ']|max_length[' . $this->config->item('max_password_length', 'access') . ']|matches[password_confirm]'); - $this->form_validation->set_rules('password_confirm', "Password confirmation", 'required'); + // validate form input + $this->form_validation->set_rules('username', "Username", 'required'); + $this->form_validation->set_rules('realname', "Realname", 'required'); + $this->form_validation->set_rules('email', "Email address", 'required|valid_email'); + $this->form_validation->set_rules('password', "Password", 'required|min_length[' . $this->config->item('min_password_length', 'access') . ']|max_length[' . $this->config->item('max_password_length', 'access') . ']|matches[password_confirm]'); + $this->form_validation->set_rules('password_confirm', "Password confirmation", 'required'); - if ($this->form_validation->run() == true) { - $username = $this->input->post('username'); - $email = $this->input->post('email'); - $password = $this->input->post('password'); + if ($this->form_validation->run() == true) { + $username = $this->input->post('username'); + $email = $this->input->post('email'); + $password = $this->input->post('password'); - $additional_data = array( + $additional_data = array( 'realname' => $this->input->post('realname'), - ); - } + ); + } - if ($this->form_validation->run() == true && $this->access->register($username, $password, $email, $additional_data)) { - // redirect them to the login page - $this->session->set_flashdata('message', "Registration successful"); - redirect('auth/register_success'); - } else { - // set the flash data error message if there is one - $this->data['message'] = validation_errors() ? validation_errors() : ($this->access->errors() ? $this->access->errors() : $this->session->flashdata('message')); - $this->data['username'] = $this->form_validation->set_value('username'); - $this->data['email'] = $this->form_validation->set_value('email'); - $this->data['realname'] = $this->form_validation->set_value('realname'); - $this->data['password'] = $this->form_validation->set_value('password'); - $this->data['password_confirm'] = $this->form_validation->set_value('password_confirm'); - $this->load->view('auth/register', $this->data); - } - } + if ($this->form_validation->run() == true && $this->access->register($username, $password, $email, $additional_data)) { + // redirect them to the login page + $this->session->set_flashdata('message', "Registration successful"); + redirect('auth/register_success'); + } else { + // set the flash data error message if there is one + $this->data['message'] = validation_errors() ? validation_errors() : ($this->access->errors() ? $this->access->errors() : $this->session->flashdata('message')); + $this->data['username'] = $this->form_validation->set_value('username'); + $this->data['email'] = $this->form_validation->set_value('email'); + $this->data['realname'] = $this->form_validation->set_value('realname'); + $this->data['password'] = $this->form_validation->set_value('password'); + $this->data['password_confirm'] = $this->form_validation->set_value('password_confirm'); + $this->load->view('auth/register', $this->data); + } + } - public function register_success() { - $this->load->view('auth/register_success', $this->data); - } + /** + * Allows users to edit their settings. + */ + public function settings() { + if (!$this->access->loggedIn()) { + redirect('auth/login', 'refresh'); + } - public function settings() { - if (!$this->access->loggedIn()) { - redirect('auth/login', 'refresh'); - } + // validate the form + $this->form_validation->set_rules('new_password', 'New Password', 'min_length[' . $this->config->item('min_password_length', 'auth') . ']|max_length[' . $this->config->item('max_password_length', 'access') . ']|matches[new_password_confirm]'); - // validate form - $this->form_validation->set_rules('new_password', 'New Password', 'min_length[' . $this->config->item('min_password_length', 'auth') . ']|max_length[' . $this->config->item('max_password_length', 'access') . ']|matches[new_password_confirm]'); + if ($this->form_validation->run() == true) { + // change password if needed + if ($this->input->post('new_password') != '') { + $username = $this->session->userdata('username'); + $change = $this->access->changePassword($username, $this->input->post('old_password'), $this->input->post('new_password')); - if ($this->form_validation->run() == true) { - // change password if needed - if ($this->input->post('new_password') != '') { - $username = $this->session->userdata('username'); - $change = $this->access->changePassword($username, $this->input->post('old_password'), $this->input->post('new_password')); + if ($change) { + $this->logout(); + } + } - if ($change) { - $this->logout(); - } - } - - // update user - $updateData = array( + // update user + $updateData = array( 'firstname' => $this->input->post('firstname'), 'lastname' => $this->input->post('lastname'), 'institution' => $this->input->post('institution'), 'phone' => $this->input->post('phone'), 'email' => $this->input->post('email'), - ); - $this->access->updateUser($this->session->userdata('user_id'), $updateData); + ); + $this->access->updateUser($this->session->userdata('user_id'), $updateData); - echo "{success: true}"; - } else { - $this->data['success'] = true; - $this->data['data'] = $this->access->getCurrentUser(); + // output JSON data + $this->output->set_content_type('application/json') + ->set_output(json_encode(array('success' => true))); + } else { + $data['success'] = true; + $data['data'] = $this->access->getCurrentUser(); - // output json data - $this->output->set_content_type('application/json') - ->set_output(json_encode($this->data)); - } - } + // output JSON data + $this->output->set_content_type('application/json') + ->set_output(json_encode($data)); + } + } - //forgot password - public function forgot_password() { - $this->form_validation->set_rules('email', 'Email Address', 'required'); - if ($this->form_validation->run() == false) { - //setup the input - $this->data['email'] = array('name' => 'email', + /** + * Allows users to request a new password. + */ + public function forgot_password() { + $this->form_validation->set_rules('email', 'Email Address', 'required'); + if ($this->form_validation->run() == false) { + //setup the input + $this->data['email'] = array('name' => 'email', 'id' => 'email', - ); - //set any errors and display the form - $this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); - $this->load->view('auth/forgot_password', $this->data); - } else { - //run the forgotten password method to email an activation code to the user - $forgotten = $this->access->forgotten_password($this->input->post('email')); + ); + //set any errors and display the form + $this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); + $this->load->view('auth/forgot_password', $this->data); + } else { + //run the forgotten password method to email an activation code to the user + $forgotten = $this->access->forgotten_password($this->input->post('email')); - if ($forgotten) { //if there were no errors - $this->session->set_flashdata('message', $this->access->messages()); - redirect("auth/login", 'refresh'); //we should display a confirmation page here instead of the login page - } else { - $this->session->set_flashdata('message', $this->access->errors()); - redirect("auth/forgot_password", 'refresh'); - } - } - } + if ($forgotten) { //if there were no errors + $this->session->set_flashdata('message', $this->access->messages()); + redirect("auth/login", 'refresh'); //we should display a confirmation page here instead of the login page + } else { + $this->session->set_flashdata('message', $this->access->errors()); + redirect("auth/forgot_password", 'refresh'); + } + } + } - //reset password - final step for forgotten password - public function reset_password($code) { - $reset = $this->access->forgotten_password_complete($code); + /** + * Final step for forgotten password. + */ + public function reset_password($code) { + $reset = $this->access->forgotten_password_complete($code); - if ($reset) { //if the reset worked then send them to the login page - $this->session->set_flashdata('message', $this->access->messages()); - redirect('auth/login'); - } else { //if the reset didnt work then send them back to the forgot password page - $this->session->set_flashdata('message', $this->access->errors()); - redirect('auth/forgot_password'); - } - } + if ($reset) { //if the reset worked then send them to the login page + $this->session->set_flashdata('message', $this->access->messages()); + redirect('auth/login'); + } else { //if the reset didnt work then send them back to the forgot password page + $this->session->set_flashdata('message', $this->access->errors()); + redirect('auth/forgot_password'); + } + } - public function test() { - echo "{xtype: 'form', title: 'Bla'}"; - } } /* End of file auth.php */ diff --git a/application/views/header.php b/application/views/header.php index d720a47..26f60c7 100644 --- a/application/views/header.php +++ b/application/views/header.php @@ -24,7 +24,7 @@ 'assets/images/logo.png', 'style' => 'margin-left: 5px'));?>
Einstellungen | - 'padding: 5px;'));?> + Logout
'assets/images/lang_' . $this->config->item('lang_selected') . '.png', 'style' => 'float: right; margin-top: 18px; margin-right: 5px;'));?> diff --git a/application/views/index.php b/application/views/index.php index 24878ce..8910357 100644 --- a/application/views/index.php +++ b/application/views/index.php @@ -25,7 +25,7 @@ var projectTree = new Ext.tree.TreePanel({ dataUrl: BASE_URL + 'projects/getAvailable', root: { nodeType: 'async', - text: 'Projekte', + text: "Projekte", expanded: true, id: 'projects' } @@ -48,7 +48,7 @@ var tabPanel = new Ext.TabPanel({ id: 'tab_welcome', bodyStyle: 'padding: 10px', title: "Willkommen", - closable: true, + closable: true }] }); @@ -85,32 +85,21 @@ var layoutMain = new Ext.Viewport({ }, layoutCenter] }); -function logout() { - Ext.Ajax.request({ - url: BASE_URL + 'auth/logout', - method: 'post', - success: function(xhr) { - window.location = BASE_URL + 'auth/login'; - } - }); -} - function loadProjectInfo(n) { - if(n.isLeaf()){ + if (n.isLeaf()) { Ext.Ajax.request({ url: BASE_URL + 'projects/detail/' + n.prjId, method: 'get', - success: function ( result, request ) { - + success: function(result, request) { var theResponse = Ext.util.JSON.decode(result.responseText); tabPanel.add({ - title: 'New Tab ', - html: 'Lade Projekt...', - closable:true + title: "New Tab", + html: "Lade Projekt...", + closable: true }).show(); }, - failure: function ( result, request ) { + failure: function(result, request) { switch(result.status) { case 404: Ext.MessageBox.alert("Fehler", "Das gewünschte Projekt konnte nicht gefunden werden."); @@ -119,13 +108,11 @@ function loadProjectInfo(n) { Ext.MessageBox.alert("Fehler", "Sie besitzen nicht die nötigen Zugriffsrechte, um dieses Projekt zu lesen." + "Wenden Sie sich an den Projektbesitzer, um Zugriff zu erhalten."); break; - } + }; } }); - } } -
diff --git a/assets/css/main.css b/assets/css/main.css index 9630f2f..836f96c 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -36,3 +36,7 @@ a:hover { .x-tree-node-icon { height: 16px !important; } + +.x-form-display-field { + color: #777; +} diff --git a/assets/js/SettingsWindow.js b/assets/js/SettingsWindow.js index a131319..356e378 100644 --- a/assets/js/SettingsWindow.js +++ b/assets/js/SettingsWindow.js @@ -3,94 +3,109 @@ * * @class SettingsWindow * @extends Ext.Window + * @author Eike Foken */ SettingsWindow = Ext.extend(Ext.Window, { - title: lang['settings_window_title'], - id: 'settings-window', - width: 400, - autoHeight: true, - closeAction: 'hide', - draggable: false, - resizable: false, - modal: true, - initComponent: function() { - this.items = [{ - xtype: 'form', - id: 'settings-form', - url: BASE_URL + 'auth/settings', - method: 'POST', - border: false, - items: [{ - xtype: 'tabpanel', - border: false, - activeTab: 0, - defaults: { - layout: 'form', - defaultType: 'textfield', - labelWidth: 170, - autoHeight: true, - bodyStyle: 'padding: 10px' - }, - items: [{ - xtype: 'panel', - id: 'password', - title: lang['settings_window_panel_password'], - items: [{ - fieldLabel: lang['settings_window_old_password'], - name: 'old_password' - }, { - fieldLabel: lang['settings_window_new_password'], - name: 'new_password' - }, { - fieldLabel: lang['settings_window_new_password_confirm'], - name: 'new_password_confirm' - }] - }, { - xtype: 'panel', - title: lang['settings_window_panel_profile'], - items: [{ - fieldLabel: lang['settings_window_firstname'], - name: 'firstname' - }, { - fieldLabel: lang['settings_window_lastname'], - name: 'lastname' - }, { - fieldLabel: lang['settings_window_institution'], - name: 'institution' - }, { - fieldLabel: lang['settings_window_phone'], - name: 'phone' - }, { - fieldLabel: lang['settings_window_email'], - name: 'email' - }] - }] - }], - buttons: [{ - text: lang['settings_window_save'], - handler: function() { - Ext.getCmp('settings-form').getForm().submit(); - } - }, { - text: lang['settings_window_close'], - handler: function() { - this.hide(); - } - }] - }]; + title: lang['settings_window_title'], + id: 'settings-window', + width: 400, + closeAction: 'hide', + draggable: false, + resizable: false, + modal: true, + initComponent: function() { + this.items = [{ + xtype: 'form', + id: 'settings-form', + url: BASE_URL + 'auth/settings', + method: 'post', + border: false, + items: [{ + xtype: 'tabpanel', + border: false, + activeTab: 0, + defaults: { + layout: 'form', + defaultType: 'textfield', + labelWidth: 170, + height: 150, + bodyStyle: 'padding: 10px' + }, + items: [{ + xtype: 'panel', + title: lang['settings_window_panel_profile'], + items: [{ + fieldLabel: lang['settings_window_firstname'], + name: 'firstname' + }, { + fieldLabel: lang['settings_window_lastname'], + name: 'lastname' + }, { + fieldLabel: lang['settings_window_institution'], + name: 'institution' + }, { + fieldLabel: lang['settings_window_phone'], + name: 'phone' + }, { + fieldLabel: lang['settings_window_email'], + name: 'email' + }] + }, { + xtype: 'panel', + id: 'password', + title: lang['settings_window_panel_password'], + items: [{ + fieldLabel: lang['settings_window_old_password'], + name: 'old_password', + inputType: 'password' + }, { + fieldLabel: lang['settings_window_new_password'], + name: 'new_password', + inputType: 'password' + }, { + fieldLabel: lang['settings_window_new_password_confirm'], + name: 'new_password_confirm', + inputType: 'password' + }, { + xtype: 'displayfield', + value: lang['settings_window_password_note'], + hideLabel: true + }] + }] + }], + buttons: [{ + text: lang['settings_window_save'], + handler: function() { + var theForm = Ext.getCmp('settings-form').getForm(); - // call parent - SettingsWindow.superclass.initComponent.apply(this); - }, - beforeShow: function() { - Ext.getCmp('settings-form').load({ - url : BASE_URL + 'auth/settings', - waitMsg: "Lade..." - }); + if (theForm.isValid()) { + theForm.submit({ + success: function() { + Ext.getCmp('settings-window').hide(); + } + }); + } + } + }, { + text: lang['settings_window_cancel'], + handler: function() { + Ext.getCmp('settings-window').hide(); + } + }] + }]; - // call parent - SettingsWindow.superclass.beforeShow.apply(this); - } + // call parent + SettingsWindow.superclass.initComponent.apply(this); + }, + beforeShow: function() { + Ext.getCmp('settings-form').load({ + url : BASE_URL + 'auth/settings', + waitMsg: "Lade..." + }); + + // call parent + SettingsWindow.superclass.beforeShow.apply(this); + } }); // register xtype to allow for lazy initialization diff --git a/assets/js/common.js b/assets/js/common.js index ffc4ce1..ba12e14 100644 --- a/assets/js/common.js +++ b/assets/js/common.js @@ -3,6 +3,7 @@ * * @param {} title * @param {} message + * @param {} icon */ var message = function(title, message, icon) { Ext.Msg.show({ @@ -15,11 +16,26 @@ var message = function(title, message, icon) { }); }; -var settings = new SettingsWindow(); +/** + * Logs the user out. + */ +var logout = function() { + Ext.Ajax.request({ + url: BASE_URL + 'auth/logout', + method: 'post', + success: function(xhr) { + window.location = BASE_URL + 'auth/login'; + } + }); +}; /** * Application main entry point */ Ext.onReady(function() { Ext.QuickTips.init(); + + if (typeof(SettingsWindow) == "function") { + settings = new SettingsWindow(); + } }); diff --git a/assets/js/language/english.js b/assets/js/language/english.js index 53ccbfe..796e363 100644 --- a/assets/js/language/english.js +++ b/assets/js/language/english.js @@ -1,12 +1,13 @@ var lang = { settings_window_title: "Settings", settings_window_save: "Save", - settings_window_close: "Close", + settings_window_cancel: "Cancel", settings_window_panel_password: "Password", settings_window_panel_profile: "Profile", - settings_window_old_password: "Old password", + settings_window_old_password: "Current password", settings_window_new_password: "New password", settings_window_new_password_confirm: "Confirm new password", + settings_window_password_note: "If you want to change your password, please fill out these fields, otherwise leave it blank.", settings_window_firstname: "Firstname", settings_window_lastname: "Lastname", settings_window_institution: "Company", diff --git a/assets/js/language/german.js b/assets/js/language/german.js index 7d96514..2a1d074 100644 --- a/assets/js/language/german.js +++ b/assets/js/language/german.js @@ -1,12 +1,13 @@ var lang = { settings_window_title: "Einstellungen", settings_window_save: "Speichern", - settings_window_close: "Schließen", + settings_window_cancel: "Abbrechen", settings_window_panel_password: "Passwort", settings_window_panel_profile: "Profil", - settings_window_old_password: "Altes Passwort", + settings_window_old_password: "Aktuelles Passwort", settings_window_new_password: "Neues Passwort", - settings_window_new_password_confirm: "Neues Passwort wiederholen", + settings_window_new_password_confirm: "Neues Passwort bestätigen", + settings_window_password_note: "Wenn Sie Ihr Passwort ändern möchten, füllen Sie bitte die obigen Felder aus, ansonsten lassen Sie sie einfach leer.", settings_window_firstname: "Vorname", settings_window_lastname: "Nachname", settings_window_institution: "Institut",