From d81d68125b7630f5a378293718e6ccad0713372e Mon Sep 17 00:00:00 2001
From: "de@itstall.de" <de@itstall.de>
Date: Sun, 25 Feb 2018 19:23:10 +0100
Subject: [PATCH] Finished Issue #5, Issue #6 and Issue #3

---
 application/controllers/admin/Adminlte.php    |  4 --
 application/controllers/admin/Auth.php        | 55 +++++++--------
 application/controllers/admin/Export.php      |  3 +-
 application/controllers/admin/Group.php       | 12 ++--
 application/controllers/admin/Guests.php      | 35 +++++++++-
 application/controllers/admin/Keys.php        | 62 +++++-----------
 application/controllers/admin/Members.php     | 41 ++++++-----
 application/controllers/admin/Users.php       | 22 +++---
 application/helpers/data_helper.php           |  2 +-
 application/models/admin/Guests_model.php     |  4 ++
 application/models/admin/Keys_model.php       | 10 +--
 application/models/admin/Members_model.php    |  5 +-
 .../views/admin/guests/guests_list.php        | 44 ++++--------
 application/views/admin/include/sidebar.php   |  1 +
 application/views/admin/keys/keys_list.php    | 70 ++++++++++++-------
 .../views/admin/members/member_add.php        | 30 ++++++--
 .../views/admin/members/member_edit.php       | 32 ++++++---
 .../views/admin/members/member_list.php       | 29 ++++----
 .../views/admin/members/member_view.php       | 26 +++++--
 19 files changed, 282 insertions(+), 205 deletions(-)

diff --git a/application/controllers/admin/Adminlte.php b/application/controllers/admin/Adminlte.php
index 6da1bb9..5af89ce 100644
--- a/application/controllers/admin/Adminlte.php
+++ b/application/controllers/admin/Adminlte.php
@@ -131,8 +131,4 @@
 			$data['view'] = 'admin/adminlte/examples/pace';
 			$this->load->view('admin/layout', $data);
 		}
-
-
-
-
 	}
\ No newline at end of file
diff --git a/application/controllers/admin/Auth.php b/application/controllers/admin/Auth.php
index f8c6817..e1acaa5 100644
--- a/application/controllers/admin/Auth.php
+++ b/application/controllers/admin/Auth.php
@@ -2,25 +2,22 @@
 	defined('BASEPATH') OR exit('No direct script access allowed');
 
 	class Auth extends CI_Controller {
-
-		public function __construct(){
+		public function __construct() {
 			parent::__construct();
-			$this->load->model('admin/auth_model', 'auth_model');
+            $this->load->model('admin/auth_model', 'auth_model');
+            $this->load->model('admin/logging_model', 'logging_model');
 		}
-
-		public function index(){
-			if($this->session->has_userdata('is_admin_login'))
-			{
+		public function index() {
+			if($this->session->has_userdata('is_admin_login')) {
 				redirect('admin/dashboard');
 			}
-			else{
+			else {
 				redirect('admin/auth/login');
 			}
 		}
+		public function login() {
 
-		public function login(){
-
-			if($this->input->post('submit')){
+			if($this->input->post('submit')) {
 				$this->form_validation->set_rules('email', 'Email', 'trim|required');
 				$this->form_validation->set_rules('password', 'Password', 'trim|required');
 
@@ -40,21 +37,22 @@
 						 	'is_admin_login' => TRUE
 						);
 						$this->session->set_userdata($admin_data);
+                        $this->logging_model->history_write($result['id'], 'Login');
 						redirect(base_url('admin/dashboard'), 'refresh');
 					}
-					else{
+					else {
+                        $this->logging_model->history_write($result['id'], 'Login failed');
 						$data['msg'] = 'Invalid Email or Password!';
 						$this->load->view('admin/auth/login', $data);
 					}
 				}
 			}
-			else{
+			else {
 				$data['title'] = 'Login';
 				$this->load->view('admin/auth/login');
 			}
-		}	
-		
-		public function profile(){
+		}
+		public function profile() {
 			if($this->input->post('submit')){
 				$data = array(
 						'username' => $this->input->post('username'),
@@ -66,22 +64,21 @@
 					);
 					$data = $this->security->xss_clean($data);
 					$result = $this->auth_model->update_admin($data);
-					if($result){
+					if($result) {
 						$this->session->set_flashdata('msg', 'Record is Updated Successfully!');
 						redirect(base_url('admin/auth/profile'), 'refresh');
 					}
 			}
-			else{
+			else {
 				$data['admin'] = $this->auth_model->get_admin_detail();
 				$data['title'] = 'User Profile';
 				$data['view'] = 'admin/auth/profile';
 				$this->load->view('admin/layout', $data);
 			}
 		}
-
-		public function change_pwd(){
+		public function change_pwd() {
 			$id = $this->session->userdata('admin_id');
-			if($this->input->post('submit')){
+			if($this->input->post('submit')) {
 				$this->form_validation->set_rules('password', 'Password', 'trim|required');
 				$this->form_validation->set_rules('confirm_pwd', 'Confirm Password', 'trim|required|matches[password]');
 				if ($this->form_validation->run() == FALSE) {
@@ -89,30 +86,28 @@
 					$data['view'] = 'admin/auth/profile';
 					$this->load->view('admin/layout', $data);
 				}
-				else{
+				else {
 					$data = array(
 						'password' => password_hash($this->input->post('password'), PASSWORD_BCRYPT)
 					);
 					$result = $this->auth_model->change_pwd($data, $id);
-					if($result){
+					if($result) {
+                        $this->logging_model->history_write($this->session->userdata('admin_id'), 'Changed Password');
 						$this->session->set_flashdata('msg', 'Password has been changed successfully!');
 						redirect(base_url('admin/auth/profile'));
 					}
 				}
 			}
-			else{
+			else {
 				$data['title'] = 'Change Password';
 				$data['view'] = 'admin/auth/change_pwd';
 				$this->load->view('admin/layout', $data);
 			}
 		}
-				
-		public function logout(){
+		public function logout() {
+            $this->logging_model->history_write($this->session->userdata('admin_id'), 'Logout');
 			$this->session->sess_destroy();
 			redirect(base_url('admin/auth/login'), 'refresh');
 		}
-			
-	}  // end class
-
-
+	}
 ?>
\ No newline at end of file
diff --git a/application/controllers/admin/Export.php b/application/controllers/admin/Export.php
index c4d8d6b..964ffaa 100644
--- a/application/controllers/admin/Export.php
+++ b/application/controllers/admin/Export.php
@@ -7,6 +7,7 @@
 			parent::__construct();
         	$this->load->helper('download');
         	$this->load->library('zip');
+            $this->load->model('admin/logging_model', 'logging_model');
 		}
 
 		public function index(){
@@ -16,7 +17,7 @@
 		}
 
 		public function dbexport(){
-
+            $this->logging_model->history_write($this->session->userdata('admin_id'), 'exported Database');
 			$this->load->dbutil();
 			$db_format = array(
 							'ignore' => array($this->ignore_directories),
diff --git a/application/controllers/admin/Group.php b/application/controllers/admin/Group.php
index 11c8f14..fb80537 100644
--- a/application/controllers/admin/Group.php
+++ b/application/controllers/admin/Group.php
@@ -6,6 +6,7 @@
 		public function __construct(){
 			parent::__construct();
 			$this->load->model('admin/group_model', 'group_model');
+            $this->load->model('admin/logging_model', 'logging_model');
 		}
 		public function index(){
 			$data['all_groups'] = $this->group_model->get_all_groups();
@@ -27,7 +28,8 @@
 					);
 					$data = $this->security->xss_clean($data);
 					$result = $this->group_model->add_group($data);
-					if($result){
+					if($result) {
+                        $this->logging_model->history_write($this->session->userdata('admin_id'), 'added', 'ci_user_groups', $result);
 						$this->session->set_flashdata('msg', 'Group is Added Successfully!');
 						redirect(base_url('admin/group'));
 					}
@@ -39,14 +41,15 @@
 				$this->load->view('admin/layout', $data);
 			}
 		}
-		public function edit($id=0){
+		public function edit($id=0) {
 			if($this->input->post('submit')){
 				$data = array(
 					'group_name' => $this->input->post('group_name'),
 				);
 				$data = $this->security->xss_clean($data);
 				$result = $this->group_model->edit_group($data, $id);
-				if($result){
+				if($result) {
+                    $this->logging_model->history_write($this->session->userdata('admin_id'), 'edited', 'ci_user_groups', $result);
 					$this->session->set_flashdata('msg', 'Group is Added Successfully!');
 					redirect(base_url('admin/group'));
 				}
@@ -58,8 +61,9 @@
 				$this->load->view('admin/layout', $data);
 			}
 		}
-		public function del($id){
+		public function del($id) {
 			$this->db->delete('ci_user_groups', array('id' => $id));
+            $this->logging_model->history_write($this->session->userdata('admin_id'), 'deleted', 'ci_user_groups', $id);
 			$this->session->set_flashdata('msg', 'Record is Deleted Successfully!');
 			redirect(base_url('admin/group'));
 		}
diff --git a/application/controllers/admin/Guests.php b/application/controllers/admin/Guests.php
index 980dd11..3ac2928 100644
--- a/application/controllers/admin/Guests.php
+++ b/application/controllers/admin/Guests.php
@@ -3,16 +3,47 @@
 
 	class Guests extends MY_Controller {
 
-		public function __construct(){
+		public function __construct() {
 			parent::__construct();
 			$this->load->model('admin/guests_model', 'guests_model');
+            $this->load->model('admin/logging_model', 'logging_model');
 		}
 
-		public function index(){
+		public function index() {
 			$data['all_users'] =  $this->guests_model->get_all_guests();
 			$data['title'] = 'Gäste Liste';
 			$data['view'] = 'admin/guests/guests_list';
 			$this->load->view('admin/layout', $data);
 		}
+
+		public function add() {
+            if($this->input->post('submit')) {
+                if($this->input->post('birthday')) { $birthday = date_to_default($this->input->post('birthday')); } else { $birthday = null; }
+                $data = array(
+                    'firstname' => $this->input->post('firstname'),
+                    'lastname' => $this->input->post('lastname'),
+                    'street' => $this->input->post('street'),
+                    'zip' => $this->input->post('zip'),
+                    'town' => $this->input->post('town'),
+                    'birthday' => $birthday,
+                    'phone' => $this->input->post('phone'),
+                    'email' => $this->input->post('email'),
+                    'club' => $this->input->post('club'),
+                    'insurance_number' => $this->input->post('insurance_number'),
+                );
+                $data = $this->security->xss_clean($data);
+                $result = $this->guests_model->guest_add($data);
+                if($result) {
+                    $this->logging_model->history_write($this->session->userdata('admin_id'), 'added', 'guests', $result);
+                    $this->session->set_flashdata('msg', 'Gastpilot erfolgreich hinzugefügt!');
+                    redirect(base_url('admin/guests'));
+                }
+            }
+            else{
+                $data['title'] = 'Add Guest';
+                $data['view'] = 'admin/guests/guests_add';
+                $this->load->view('admin/layout', $data);
+            }
+        }
 	}
 ?>
\ No newline at end of file
diff --git a/application/controllers/admin/Keys.php b/application/controllers/admin/Keys.php
index 2ed257c..9a90433 100644
--- a/application/controllers/admin/Keys.php
+++ b/application/controllers/admin/Keys.php
@@ -6,58 +6,32 @@ class Keys extends MY_Controller {
     public function __construct(){
         parent::__construct();
         $this->load->model('admin/keys_model', 'keys_model');
+        $this->load->model('admin/logging_model', 'logging_model');
     }
-    public function index(){
+    public function index() {
+        $this->load->model('admin/members_model', 'members_model');
         $data['all_keys'] = $this->keys_model->get_all_keys();
         $data['title'] = 'Schlüssel Verwaltung';
         $data['view'] = 'admin/keys/keys_list';
+        $data['members'] = $this->members_model->get_all_users();
         $this->load->view('admin/layout', $data);
     }
-    public function add(){
-        if($this->input->post('submit')){
-            $this->form_validation->set_rules('group_name', 'Group', 'trim|min_length[3]|required');
-            if ($this->form_validation->run() == FALSE) {
-                $data['title'] = 'Add Group';
-                $data['view'] = 'admin/group/group_add';
-                $this->load->view('admin/layout', $data);
-            }
-            else{
-                $data = array(
-                    'group_name' => $this->input->post('group_name'),
-                );
-                $data = $this->security->xss_clean($data);
-                $result = $this->keys_model->add_group($data);
-                if($result){
-                    $this->session->set_flashdata('msg', 'Group is Added Successfully!');
-                    redirect(base_url('admin/group'));
-                }
-            }
-        }
-        else{
-            $data['title'] = 'Add Group';
-            $data['view'] = 'admin/group/group_add';
-            $this->load->view('admin/layout', $data);
-        }
-    }
-    public function edit($id=0){
-        if($this->input->post('submit')){
-            $data = array(
-                'group_name' => $this->input->post('group_name'),
-            );
-            $data = $this->security->xss_clean($data);
-            $result = $this->keys_model->edit_group($data, $id);
-            if($result){
-                $this->session->set_flashdata('msg', 'Group is Added Successfully!');
-                redirect(base_url('admin/group'));
-            }
-        }
-        else{
-            $data['title'] = 'Edit Group';
-            $data['view'] = 'admin/group/group_edit';
-            $this->load->view('admin/layout', $data);
+    public function edit() {
+        $data = array(
+            'key_number' => $this->input->post('keyid'),
+            'member_id' => $this->input->post('member_id'),
+            'key_distribution' => date_to_default($this->input->post('key_distribution'))
+        );
+        $data = $this->security->xss_clean($data);
+        $result = $this->keys_model->edit_key($data);
+        if($result) {
+            $this->logging_model->history_write($this->session->userdata('admin_id'), 'edited', 'club_keys', $this->input->post('keyid'));
+            $this->session->set_flashdata('msg', 'Key changed Successfully!');
+            redirect(base_url('admin/keys'));
         }
     }
-    public function del($id){
+    public function del($id) {
+        $this->logging_model->history_write($this->session->userdata('admin_id'), 'deleted', 'club_keys', $id);
         $this->db->delete('ci_user_groups', array('id' => $id));
         $this->session->set_flashdata('msg', 'Record is Deleted Successfully!');
         redirect(base_url('admin/group'));
diff --git a/application/controllers/admin/Members.php b/application/controllers/admin/Members.php
index bc0cb28..de30986 100644
--- a/application/controllers/admin/Members.php
+++ b/application/controllers/admin/Members.php
@@ -6,6 +6,7 @@ class Members extends MY_Controller {
     public function __construct(){
         parent::__construct();
         $this->load->model('admin/members_model', 'members_model');
+        $this->load->model('admin/logging_model', 'logging_model');
     }
 
     public function index() {
@@ -15,6 +16,7 @@ class Members extends MY_Controller {
             if($user['birthday'] != '0000-00-00') { $data['all_users'][$user['id']]['birthday'] = date_to_german($user['birthday']); } else { $data['all_users'][$user['id']]['birthday'] = ''; }
             if($user['joined'] != '0000-00-00') { $data['all_users'][$user['id']]['joined'] = date_to_german($user['joined']); } else { $data['all_users'][$user['id']]['joined'] = ''; }
             if($user['withdrawal'] != '0000-00-00') { $data['all_users'][$user['id']]['withdrawal'] = date_to_german($user['withdrawal']); } else { $data['all_users'][$user['id']]['withdrawal'] = ''; }
+            if($user['knowledge_proof'] != '0000-00-00') { $data['all_users'][$user['id']]['knowledge_proof'] = date_to_german($user['knowledge_proof']); } else { $data['all_users'][$user['id']]['knowledge_proof'] = ''; }
             if($user['is_member']) { $data['all_users'][$user['id']]['is_member'] = 'Ja'; } else { $data['all_users'][$user['id']]['is_member'] = 'Nein'; }
         }
         $data['title'] = 'User List';
@@ -24,12 +26,8 @@ class Members extends MY_Controller {
 
     public function view($id, $mode=false) {
         $this->load->model('admin/keys_model', 'keys_model');
-        if($mode == 'edit') {
-            $data['button_visibility'] = 'inline-block';
-        }
-        else {
-            $data['button_visibility'] = 'none';
-        }
+        if($mode == 'edit') { $data['button_visibility'] = 'inline-block'; }
+        else { $data['button_visibility'] = 'none'; }
         $data['mode'] = $mode;
         $data['user'] =  $this->members_model->get_user_by_id($id);
         $data['contact'] = $this->members_model->get_user_contacts_by_userid($id);
@@ -40,13 +38,13 @@ class Members extends MY_Controller {
         $this->load->view('admin/layout', $data);
     }
 
-    //---------------------------------------------------------------
-    //  Add User
     public function add() {
         if($this->input->post('submit')) {
             if($this->input->post('birthday')) { $birthday = date_to_default($this->input->post('birthday')); } else { $birthday = null; }
             if($this->input->post('joined')) { $joined = date_to_default($this->input->post('joined')); } else { $joined = null; }
             if($this->input->post('withdrawal')) { $withdrawal = date_to_default($this->input->post('withdrawal')); } else { $withdrawal = null; }
+            if($this->input->post('knowledge_proof') == 'on') { $knowledge_proof = date_to_default($this->input->post('knowledge_proof'));; } else { $knowledge_proof = null; }
+            if($this->input->post('flight_manager') == 'on') { $flight_manager = 1; } else { $flight_manager = 0; }
             $data = array(
                 'firstname' => $this->input->post('firstname'),
                 'lastname' => $this->input->post('lastname'),
@@ -60,15 +58,18 @@ class Members extends MY_Controller {
                 'insurance_number' => $this->input->post('insurance_number'),
                 'member_type_id' => $this->input->post('member_type_id'),
                 'club_function_id' => $this->input->post('club_function_id'),
+                'knowledge_proof' => $knowledge_proof,
+                'flight_manager' => $flight_manager,
             );
             $data = $this->security->xss_clean($data);
             $result = $this->members_model->add_member($data);
-            if($result){
+            if($result) {
+                $this->logging_model->history_write($this->session->userdata('admin_id'), 'added', 'members', $result);
                 $this->session->set_flashdata('msg', 'Mitglied erfolgreich hinzugefügt!');
                 redirect(base_url('admin/members/view/'.$result));
             }
         }
-        else{
+        else {
             $data['club_functions'] = $this->members_model->get_club_functions();
             $data['member_types'] = $this->members_model->get_member_types();
             $data['insurance_types'] = $this->members_model->get_insurance_types();
@@ -76,16 +77,17 @@ class Members extends MY_Controller {
             $data['view'] = 'admin/members/member_add';
             $this->load->view('admin/layout', $data);
         }
-
     }
 
     //---------------------------------------------------------------
     //  Edit User
-    public function edit($id = 0){
+    public function edit($id = 0) {
         if($this->input->post('submit')) {
             if($this->input->post('birthday')) { $birthday = date_to_default($this->input->post('birthday')); } else { $birthday = null; }
             if($this->input->post('joined')) { $joined = date_to_default($this->input->post('joined')); } else { $joined = null; }
             if($this->input->post('withdrawal')) { $withdrawal = date_to_default($this->input->post('withdrawal')); } else { $withdrawal = null; }
+            if($this->input->post('knowledge_proof')) { $knowledge_proof = date_to_default($this->input->post('knowledge_proof')); } else { $knowledge_proof = null; }
+            if($this->input->post('flight_manager') == 'on') { $flight_manager = 1; } else { $flight_manager = 0; }
             $data = array(
                 'firstname' => $this->input->post('firstname'),
                 'lastname' => $this->input->post('lastname'),
@@ -99,10 +101,13 @@ class Members extends MY_Controller {
                 'insurance_number' => $this->input->post('insurance_number'),
                 'member_type_id' => $this->input->post('member_type_id'),
                 'club_function_id' => $this->input->post('club_function_id'),
+                'knowledge_proof' => $knowledge_proof,
+                'flight_manager' => $flight_manager,
             );
             $data = $this->security->xss_clean($data);
             $result = $this->members_model->edit_user($data, $id);
-            if($result){
+            if($result) {
+                $this->logging_model->history_write($this->session->userdata('admin_id'), 'edited', 'members', $id);
                 $this->session->set_flashdata('msg', 'Mitglied erfolgreich bearbeitet!');
                 redirect(base_url('admin/members/view/'.$result));
             }
@@ -115,6 +120,7 @@ class Members extends MY_Controller {
             $data['member_data']['birthday'] = date_to_german($data['member_data']['birthday']);
             $data['member_data']['joined'] = date_to_german($data['member_data']['joined']);
             if($data['member_data']['withdrawal'] != '0000-00-00') { $data['member_data']['withdrawal'] = date_to_german($data['member_data']['withdrawal']); }
+            if($data['member_data']['knowledge_proof'] != '0000-00-00') { $data['member_data']['knowledge_proof'] = date_to_german($data['member_data']['knowledge_proof']); }
             else { $data['member_data']['withdrawal'] = null; }
             $data['title'] = 'Edit User';
             $data['view'] = 'admin/members/member_edit';
@@ -128,8 +134,8 @@ class Members extends MY_Controller {
             'value' => $this->input->post('contactvalue'),
             'member_id' => $id,
         );
-        //$data = $this->security->xss_clean($data);
         $result = $this->members_model->contact_insert($data);
+        $this->logging_model->history_write($this->session->userdata('admin_id'), 'added contact', 'members', $id);
         redirect(base_url('admin/members/view/'.$id.'/edit'));
     }
 
@@ -137,6 +143,7 @@ class Members extends MY_Controller {
         $data = array(
             'id' => $this->input->post('contactid'),
         );
+        $this->logging_model->history_write($this->session->userdata('admin_id'), 'deleted contact', 'members', $user_id);
         $result = $this->members_model->contact_delete($data);
 
         redirect(base_url('admin/members/view/'.$user_id.'/edit'));
@@ -147,6 +154,7 @@ class Members extends MY_Controller {
             'type_id' => $this->input->post('contact_type_id'),
             'value' => $this->input->post('contactvalue'),
         );
+        $this->logging_model->history_write($this->session->userdata('admin_id'), 'edited contact', 'members', $user_id);
         $result = $this->members_model->contact_edit($this->input->post('contactid'), $data);
 
         redirect(base_url('admin/members/view/'.$user_id.'/edit'));
@@ -154,7 +162,8 @@ class Members extends MY_Controller {
 
     //---------------------------------------------------------------
     //  Delete members
-    public function del($id = 0){
+    public function del($id = 0) {
+        $this->logging_model->history_write($this->session->userdata('admin_id'), 'deleted contact', 'members', $id);
         $this->db->delete('members', array('id' => $id));
         $this->session->set_flashdata('msg', 'User has been Deleted Successfully!');
         redirect(base_url('admin/members'));
@@ -171,7 +180,7 @@ class Members extends MY_Controller {
     //---------------------------------------------------------------
     // Export data in CSV format
     public function export_csv() {
-        // file name
+        $this->logging_model->history_write($this->session->userdata('admin_id'), 'exported csv', 'members');
         $filename = 'members_'.date('Y-m-d').'.csv';
         header("Content-Description: File Transfer");
         header("Content-Disposition: attachment; filename=$filename");
diff --git a/application/controllers/admin/Users.php b/application/controllers/admin/Users.php
index 8b42336..fe41663 100644
--- a/application/controllers/admin/Users.php
+++ b/application/controllers/admin/Users.php
@@ -6,6 +6,7 @@
 		public function __construct(){
 			parent::__construct();
 			$this->load->model('admin/user_model', 'user_model');
+            $this->load->model('admin/logging_model', 'logging_model');
 		}
 
 		public function index(){
@@ -17,9 +18,8 @@
 		
 		//---------------------------------------------------------------
 		//  Add User
-		public function add(){
-			if($this->input->post('submit')){
-
+		public function add() {
+			if($this->input->post('submit')) {
 				$this->form_validation->set_rules('username', 'Username', 'trim|min_length[5]|required');
 				$this->form_validation->set_rules('firstname', 'Firstname', 'trim|required');
 				$this->form_validation->set_rules('lastname', 'Lastname', 'trim|required');
@@ -34,7 +34,7 @@
 					$data['view'] = 'admin/users/user_add';
 					$this->load->view('admin/layout', $data);
 				}
-				else{
+				else {
 					$data = array(
 						'username' => $this->input->post('username'),
 						'firstname' => $this->input->post('firstname'),
@@ -48,13 +48,14 @@
 					);
 					$data = $this->security->xss_clean($data);
 					$result = $this->user_model->add_user($data);
-					if($result){
+					if($result) {
+                        $this->logging_model->history_write($this->session->userdata('admin_id'), 'added', 'users', $result);
 						$this->session->set_flashdata('msg', 'User has been Added Successfully!');
 						redirect(base_url('admin/users'));
 					}
 				}
 			}
-			else{
+			else {
 				$data['user_groups'] = $this->user_model->get_user_groups();
 				$data['title'] = 'Add User';
 				$data['view'] = 'admin/users/user_add';
@@ -65,7 +66,7 @@
 
 		//---------------------------------------------------------------
 		//  Edit User
-		public function edit($id = 0){
+		public function edit($id = 0) {
 			if($this->input->post('submit')){
 				$this->form_validation->set_rules('username', 'Username', 'trim|required');
 				$this->form_validation->set_rules('firstname', 'Username', 'trim|required');
@@ -94,6 +95,7 @@
 						'is_active' => $this->input->post('status'),
 						'updated_at' => date('Y-m-d : h:m:s'),
 					);
+                    $this->logging_model->history_write($this->session->userdata('admin_id'), 'edited', 'users', $id);
 					$data = $this->security->xss_clean($data);
 					$result = $this->user_model->edit_user($data, $id);
 					if($result){
@@ -113,7 +115,8 @@
 
 		//---------------------------------------------------------------
 		//  Delete Users
-		public function del($id = 0){
+		public function del($id = 0) {
+            $this->logging_model->history_write($this->session->userdata('admin_id'), 'deleted', 'users', $id);
 			$this->db->delete('ci_users', array('id' => $id));
 			$this->session->set_flashdata('msg', 'User has been Deleted Successfully!');
 			redirect(base_url('admin/users'));
@@ -129,7 +132,8 @@
 
 		//---------------------------------------------------------------	
 		// Export data in CSV format 
-		public function export_csv(){ 
+		public function export_csv() {
+            $this->logging_model->history_write($this->session->userdata('admin_id'), 'exported csv', 'users');
 		   // file name 
 		   $filename = 'users_'.date('Y-m-d').'.csv'; 
 		   header("Content-Description: File Transfer"); 
diff --git a/application/helpers/data_helper.php b/application/helpers/data_helper.php
index 440a2dc..e310737 100644
--- a/application/helpers/data_helper.php
+++ b/application/helpers/data_helper.php
@@ -13,4 +13,4 @@
         $temp_date = date_parse_from_format("d.m.Y", $date);
         return date_format(date_create($temp_date['year'].'-'.$temp_date['month'].'-'.$temp_date['day']), 'Y-m-d');
     }
-?>    
\ No newline at end of file
+?>
\ No newline at end of file
diff --git a/application/models/admin/Guests_model.php b/application/models/admin/Guests_model.php
index 9f11843..6b5ad1b 100644
--- a/application/models/admin/Guests_model.php
+++ b/application/models/admin/Guests_model.php
@@ -5,5 +5,9 @@
 			$query = $this->db->get('guests');
 			return $result = $query->result_array();
 		}
+		public function guest_add($data){
+            $this->db->insert('guests', $data);
+            return true;
+        }
 	}
 ?>
\ No newline at end of file
diff --git a/application/models/admin/Keys_model.php b/application/models/admin/Keys_model.php
index 66b0344..4d875b8 100644
--- a/application/models/admin/Keys_model.php
+++ b/application/models/admin/Keys_model.php
@@ -14,11 +14,11 @@
             return $result = $query->result_array();
 		}
 
-		public function edit_key($data, $id){
-			$this->db->where('id', $id);
-			$this->db->update('club_keys', $data);
-			return true;
-		}
+        public function edit_key($data) {
+            $this->db->where('key_number', $data['key_number']);
+            $this->db->update('club_keys', $data);
+            return true;
+        }
 
         public function get_keys_by_userid($id) {
             $this->db->select('key_number');
diff --git a/application/models/admin/Members_model.php b/application/models/admin/Members_model.php
index 131b650..53dbbc5 100644
--- a/application/models/admin/Members_model.php
+++ b/application/models/admin/Members_model.php
@@ -11,6 +11,7 @@
             $this->db->from('members');
             $this->db->join('member_types', 'member_types.id=members.member_type_id');
             $this->db->join('insurance_types', 'insurance_types.id=members.insurance_type_id');
+            $this->db->order_by('members.lastname, members.firstname', 'ASC');
             $query = $this->db->get();
 			return $result = $query->result_array();
 		}
@@ -67,12 +68,12 @@
         }
         public function contact_delete($data) {
             $this->db->delete('contact', $data);
-            return true;
+            return $data['member_id'];
         }
         public function contact_edit($contact_id, $data) {
             $this->db->where('id', $contact_id);
             $this->db->update('contact', $data);
-            return true;
+            return $data['member_id'];
         }
 	}
 ?>
\ No newline at end of file
diff --git a/application/views/admin/guests/guests_list.php b/application/views/admin/guests/guests_list.php
index 1d0934b..6bb82e2 100644
--- a/application/views/admin/guests/guests_list.php
+++ b/application/views/admin/guests/guests_list.php
@@ -17,8 +17,10 @@
         <tr>
             <th>Vorname</th>
             <th>Nachname</th>
+            <th>Straße</th>
             <th>PLZ</th>
             <th>Ort</th>
+            <th>Geburtstag</th>
             <th>Email</th>
             <th>Verein</th>
         </tr>
@@ -28,8 +30,10 @@
           <tr>
             <td><?= $row['firstname']; ?></td>
             <td><?= $row['lastname']; ?></td>
+            <td><?= $row['street']; ?></td>
             <td><?= $row['zip']; ?></td>
             <td><?= $row['town']; ?></td>
+            <td><?= date_to_german($row['birthday']); ?></td>
             <td><?= $row['email']; ?></td>
             <td><?= $row['club']; ?></td>
 		  </tr>
@@ -40,38 +44,18 @@
   </div>
 </section>
 
-<script type="text/javascript" src="https://cdn.datatables.net/r/bs/jszip-2.5.0,pdfmake-0.1.18,dt-1.10.9,b-1.0.3,b-html5-1.0.3,b-print-1.0.3/datatables.min.js"></script>
-<!--<script src="../../plugins/slimScroll/jquery.slimscroll.min.js"></script>-->
+<script src="<?= base_url() ?>public/plugins/datatables/jquery.dataTables.min.js"></script>
+<script src="<?= base_url() ?>public/plugins/datatables/dataTables.bootstrap.min.js"></script>
+<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js"></script>
+<script src="//cdn.datatables.net/plug-ins/1.10.16/sorting/datetime-moment.js"></script>
+
 <script>
     $(function () {
-        var example1 =  $("#example1").DataTable({
-            responsive: true,
-            lengthMenu: [[10, 25, 50, 100, -1], [10, 25, 50, 100, "Alle"]],
-            buttons: ['excelHtml5'],
-            language: {
-                "sEmptyTable":      "Keine Daten in der Tabelle vorhanden",
-                "sInfo":            "_START_ bis _END_ von _TOTAL_ Einträgen",
-                "sInfoEmpty":       "0 bis 0 von 0 Einträgen",
-                "sInfoFiltered":    "(gefiltert von _MAX_ Einträgen)",
-                "sInfoPostFix":     "",
-                "sInfoThousands":   ".",
-                "sLengthMenu":      "_MENU_ Einträge anzeigen",
-                "sLoadingRecords":  "Wird geladen...",
-                "sProcessing":      "Bitte warten...",
-                "sSearch":          "Suchen",
-                "sZeroRecords":     "Keine Einträge vorhanden.",
-                "oPaginate": {
-                    "sFirst":       "Erste",
-                    "sPrevious":    "Zurück",
-                    "sNext":        "Nächste",
-                    "sLast":        "Letzte"
-                },
-                "oAria": {
-                    "sSortAscending":  ": aktivieren, um Spalte aufsteigend zu sortieren",
-                    "sSortDescending": ": aktivieren, um Spalte absteigend zu sortieren"
-                }
+        $.fn.dataTable.moment( 'DD.MM.YYYY' );
+        $("#example1").DataTable({
+            "language": {
+                "url": "//cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/German.json"
             }
         });
-        example1.buttons().container().appendTo($('.col-sm-6:eq(0)', example1.table().container()));
     });
-</script>
\ No newline at end of file
+</script>
diff --git a/application/views/admin/include/sidebar.php b/application/views/admin/include/sidebar.php
index 7aca275..2883cbc 100644
--- a/application/views/admin/include/sidebar.php
+++ b/application/views/admin/include/sidebar.php
@@ -50,6 +50,7 @@ $cur_tab = $this->uri->segment(2)==''?'dashboard': $this->uri->segment(2);
             </span>
               </a>
               <ul class="treeview-menu">
+                  <li id="view_keys" class=""><a href="<?= base_url('admin/guests/add'); ?>"><i class="fa fa-circle-o"></i> Gast hinzufügen</a></li>
                   <li id="view_keys" class=""><a href="<?= base_url('admin/guests'); ?>"><i class="fa fa-circle-o"></i> Gäste anzeigen</a></li>
               </ul>
           </li>
diff --git a/application/views/admin/keys/keys_list.php b/application/views/admin/keys/keys_list.php
index 3e9ccb7..413beb9 100644
--- a/application/views/admin/keys/keys_list.php
+++ b/application/views/admin/keys/keys_list.php
@@ -28,8 +28,8 @@
             <td><?= $row['firstname'].' '.$row['lastname'];; ?></td>
             <td><?= date_to_german($row['key_distribution']); ?></td>
             <td class="text-right">
-				<a href="<?= base_url('admin/members/view/'.$row['member_id']); ?>" class="btn btn-danger btn-flat btn-xs"><i class="fa fa-edit"></i></a>
-			</td>
+                <button type="button" class="btn btn-danger btn-sm key_edit" data-toggle="modal" data-target="#key_edit" data-memberid="<?= $row['member_id']?>" data-keyid="<?= $row['key_number']?>"><i class="fa fa-edit"></i></button>
+            </td>
 		  </tr>
           <?php endforeach; ?>
         </tbody>
@@ -38,28 +38,47 @@
   </div>
 </section>
 
-<div id="confirm-delete" class="modal fade" role="dialog">
-  <div class="modal-dialog">
-    <div class="modal-content">
-      <div class="modal-header">
-        <button type="button" class="close" data-dismiss="modal">&times;</button>
-        <h4 class="modal-title">Delete Dialog</h4>
-      </div>
-      <div class="modal-body">
-        <p>As you sure you want to delete.</p>
-      </div>
-      <div class="modal-footer">
-        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
-        <a class="btn btn-danger btn-ok">Yes</a>
-      </div>
+<div class="modal fade key_edit" id="key_edit" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+    <div class="modal-dialog">
+        <div class="modal-content">
+            <div class="modal-header">
+                <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Abbruch</span></button>
+                <h4 class="modal-title" id="myModalLabel">Schlüssel zuweisen</h4>
+            </div>
+            <div class="modal-body">
+                <?php echo form_open(base_url('admin/keys/edit'), '' )?>
+                    <div class="form-group">
+                        <label for="member_id"><b>Mitglied auswählen</b></label>
+                        <select name="member_id" class="form-control">
+                            <option>Mitglied auswählen</option>
+                            <?php foreach($members as $member): ?>
+                                <option value="<?= $member['id']; ?>"><?= $member['lastname'].', '.$member['firstname']; ?></option>
+                            <?php endforeach; ?>
+                        </select>
+                        <input type="hidden" class="keyid" name="keyid" id="keyid" />
+                    </div>
+                    <div class="form-group">
+                        <label for="key_distribution"><b>Ausgabe Datum</b></label>
+                        <div class="input-group date">
+                            <div class="input-group-addon"><i class="fa fa-calendar"></i></div>
+                            <input type="text" class="form-control pull-right" id="key_distribution" name="key_distribution" data-date-format="dd.mm.yyyy">
+                        </div>
+                    </div>
+                    <div class="modal-footer">
+                        <button type="button" class="btn btn-default" data-dismiss="modal">Abbruch</button>
+                        <button type="submit" class="btn btn-success">Speichern</button>
+                    </div>
+                <?php echo form_close( ); ?>
+            </div>
+        </div>
     </div>
-  </div>
 </div>
 
 <script src="<?= base_url() ?>public/plugins/datatables/jquery.dataTables.min.js"></script>
 <script src="<?= base_url() ?>public/plugins/datatables/dataTables.bootstrap.min.js"></script>
 <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js"></script>
 <script src="//cdn.datatables.net/plug-ins/1.10.16/sorting/datetime-moment.js"></script>
+<script src="<?= base_url() ?>public/plugins/datepicker/bootstrap-datepicker.js"></script>
 
 <script>
     $(function () {
@@ -70,12 +89,15 @@
             }
         });
     });
-</script> 
-  <script type="text/javascript">
-      $('#confirm-delete').on('show.bs.modal', function(e) {
-      $(this).find('.btn-ok').attr('href', $(e.relatedTarget).data('href'));
+
+    $('#key_edit').on('show.bs.modal', function (event) {
+        var button = $(event.relatedTarget);
+        var keyid = button.data('keyid');
+        var memberid = button.data('memberid');
+
+        var modal = $(this);
+        //modal.find('.key_distribution').datepicker();
+        modal.find('.modal-body select').val(memberid);
+        modal.find('.modal-body #keyid').val(keyid);
     });
-  </script>
-<script>
-    $("#view_users").addClass('active');
 </script>
\ No newline at end of file
diff --git a/application/views/admin/members/member_add.php b/application/views/admin/members/member_add.php
index afe2eb1..df1cb64 100644
--- a/application/views/admin/members/member_add.php
+++ b/application/views/admin/members/member_add.php
@@ -1,8 +1,5 @@
-<script src="<?= base_url() ?>public/plugins/datepicker/bootstrap-datepicker.js"></script>
 <link rel="stylesheet" href="<?= base_url() ?>public/plugins/bootstrap-datepicker/css/datepicker.css">
-<script>
-    $('#datepicker').datepicker({})
-</script>
+<link rel="stylesheet" href="<?= base_url() ?>public/plugins/iCheck/square/_all.css">
 
 <section class="content">
   <div class="row">
@@ -89,7 +86,7 @@
             <div class="form-group">
                 <label for="insurance_number" class="col-sm-2 control-label">Versicherungs Nummer</label>
                 <div class="col-sm-9">
-                    <input type="text" name="insurance_number" class="form-control" id="insurance_number" placeholder="" maxlength="15">
+                    <input type="text" name="insurance_number" class="form-control" id="insurance_number" placeholder="" maxlength="50">
                 </div>
             </div>
             <div class="form-group">
@@ -112,6 +109,21 @@
                     </select>
                 </div>
             </div>
+            <div class="form-group">
+                <label for="knowledge_proof" class="col-sm-2 control-label">Kenntnis Nachweis</label>
+                <div class="col-sm-9">
+                    <div class="input-group date">
+                        <div class="input-group-addon"><i class="fa fa-calendar"></i></div>
+                        <input type="text" class="form-control pull-right datepicker" id="datepicker" name="knowledge_proof" data-provide="datepicker" data-date-format="dd.mm.yyyy">
+                    </div>
+                </div>
+            </div>
+            <div class="form-group">
+                <label for="flight_manager" class="col-sm-2 control-label">Flugleiter Schulung</label>
+                <div class="col-sm-9">
+                    <input type="checkbox" class="icheckbox_square-green" id="flight_manager" name="flight_manager">
+                </div>
+            </div>
             <div class="form-group">
                 <div class="col-md-11">
                   <input type="submit" name="submit" value="Mitglied hinzufügen" class="btn btn-info pull-right">
@@ -122,4 +134,10 @@
       </div>
     </div>
   </div>
-</section>
\ No newline at end of file
+</section>
+
+<script src="<?= base_url() ?>public/plugins/datepicker/bootstrap-datepicker.js"></script>
+<script src="<?= base_url() ?>public/plugins/iCheck/icheck.js"></script>
+<script>
+    $('#datepicker').datepicker({})
+</script>
\ No newline at end of file
diff --git a/application/views/admin/members/member_edit.php b/application/views/admin/members/member_edit.php
index b257e51..b28c5a4 100644
--- a/application/views/admin/members/member_edit.php
+++ b/application/views/admin/members/member_edit.php
@@ -1,8 +1,5 @@
-<script src="<?= base_url() ?>public/plugins/datepicker/bootstrap-datepicker.js"></script>
 <link rel="stylesheet" href="<?= base_url() ?>public/plugins/bootstrap-datepicker/css/datepicker.css">
-<script>
-    $('#datepicker').datepicker({})
-</script>
+<link rel="stylesheet" href="<?= base_url() ?>public/plugins/iCheck/square/_all.css">
 
 <section class="content">
     <div class="row">
@@ -27,14 +24,12 @@
                             <input type="text" name="firstname" class="form-control" id="firstname" placeholder="" value="<?= $member_data['firstname'];?>" maxlength="50">
                         </div>
                     </div>
-
                     <div class="form-group">
                         <label for="lastname" class="col-sm-2 control-label">Nachname</label>
                         <div class="col-sm-9">
                             <input type="text" name="lastname" class="form-control" id="lastname" placeholder="" value="<?= $member_data['lastname'];?>" maxlength="50">
                         </div>
                     </div>
-
                     <div class="form-group">
                         <label for="street" class="col-sm-2 control-label">Straße</label>
                         <div class="col-sm-9">
@@ -93,7 +88,7 @@
                     <div class="form-group">
                         <label for="insurance_number" class="col-sm-2 control-label">Versicherungs Nummer</label>
                         <div class="col-sm-9">
-                            <input type="text" name="insurance_number" class="form-control" id="insurance_number" placeholder="" value="<?= $member_data['insurance_number'];?>" maxlength="15">
+                            <input type="text" name="insurance_number" class="form-control" id="insurance_number" placeholder="" value="<?= $member_data['insurance_number'];?>" maxlength="50">
                         </div>
                     </div>
                     <div class="form-group">
@@ -116,6 +111,21 @@
                             </select>
                         </div>
                     </div>
+                    <div class="form-group">
+                        <label for="knowledge_proof" class="col-sm-2 control-label">Kenntnis Nachweis</label>
+                        <div class="col-sm-9">
+                            <div class="input-group date">
+                                <div class="input-group-addon"><i class="fa fa-calendar"></i></div>
+                                <input type="text" class="form-control pull-right datepicker" id="datepicker" name="knowledge_proof" data-provide="datepicker" data-date-format="dd.mm.yyyy" value="<?= $member_data['knowledge_proof'];?>">
+                            </div>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="flight_manager" class="col-sm-2 control-label">Flugleiter Schulung</label>
+                        <div class="col-sm-9">
+                            <input type="checkbox" class="icheckbox_square-green" id="flight_manager" name="flight_manager" <?php if($member_data['flight_manager']) { echo " checked"; } ?>>
+                        </div>
+                    </div>
                     <div class="form-group">
                         <div class="col-md-11">
                             <input type="submit" name="submit" value="Speichern" class="btn btn-info pull-right">
@@ -127,4 +137,10 @@
             </div>
         </div>
     </div>
-</section>
\ No newline at end of file
+</section>
+
+<script src="<?= base_url() ?>public/plugins/datepicker/bootstrap-datepicker.js"></script>
+<script src="<?= base_url() ?>public/plugins/iCheck/icheck.js"></script>
+<script>
+    $('#datepicker').datepicker({})
+</script>
diff --git a/application/views/admin/members/member_list.php b/application/views/admin/members/member_list.php
index f11707b..f9b1c4f 100644
--- a/application/views/admin/members/member_list.php
+++ b/application/views/admin/members/member_list.php
@@ -31,23 +31,27 @@
             <th>Austritt</th>
             <th>Mitglied</th>
             <th>Mitgliedschaft</th>
-          <th style="width: 100px;" class="text-right">Optionen</th>
+            <th>Kenntnis</th>
+            <th>Flugleiter</th>
+            <th style="width: 100px;" class="text-right">Optionen</th>
         </tr>
         </thead>
         <tbody>
           <?php foreach($all_users as $row): ?>
           <tr>
-            <td><?= $row['firstname']; ?></td>
-            <td><?= $row['lastname']; ?></td>
-            <td><?= $row['birthday']; ?></td>
-            <td><?= $row['joined']; ?></td>
-            <td><?php if($row['withdrawal'] != '00.00.0000') { echo $row['withdrawal']; } ?></td>
-            <td><?= $row['is_member']; ?></td>
-            <td><?= $row['member_type_name']; ?></td>
-            <td class="text-right">
-				<a href="<?= base_url('admin/members/view/'.$row['id']); ?>" class="btn btn-info btn-flat btn-xs"><i class="fa fa-eye"></i></a>
-				<a href="<?= base_url('admin/members/edit/'.$row['id']); ?>" class="btn btn-danger btn-flat btn-xs"><i class="fa fa-edit"></i></a>
-			</td>
+              <td><?= $row['firstname']; ?></td>
+              <td><?= $row['lastname']; ?></td>
+              <td><?= $row['birthday']; ?></td>
+              <td><?= $row['joined']; ?></td>
+              <td><?php if($row['withdrawal'] != '00.00.0000') { echo $row['withdrawal']; } ?></td>
+              <td><?= $row['is_member']; ?></td>
+              <td><?= $row['member_type_name']; ?></td>
+              <td><?= $row['knowledge_proof']; ?></td>
+              <td><?php if($row['flight_manager']) { echo "Ja"; } ?></td>
+              <td class="text-right">
+                  <a href="<?= base_url('admin/members/view/'.$row['id']); ?>" class="btn btn-info btn-flat btn-xs"><i class="fa fa-eye"></i></a>
+                  <a href="<?= base_url('admin/members/edit/'.$row['id']); ?>" class="btn btn-danger btn-flat btn-xs"><i class="fa fa-edit"></i></a>
+              </td>
 		  </tr>
           <?php endforeach; ?>
         </tbody>
@@ -79,7 +83,6 @@
   </div>
 </div>
 
-<!-- DataTables -->
 <script src="<?= base_url() ?>public/plugins/datatables/jquery.dataTables.min.js"></script>
 <script src="<?= base_url() ?>public/plugins/datatables/dataTables.bootstrap.min.js"></script>
 <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js"></script>
diff --git a/application/views/admin/members/member_view.php b/application/views/admin/members/member_view.php
index c945959..ad6dd23 100644
--- a/application/views/admin/members/member_view.php
+++ b/application/views/admin/members/member_view.php
@@ -62,10 +62,24 @@
 						<div class="col-sm-8"><?= $user['insurance_type_name']; ?></div>
 					</div>
 
-					<div class="form-group">
-						<div class="col-sm-4">Versicherungsnummer</div>
-						<div class="col-sm-8"><?= $user['insurance_number']; ?></div>
-					</div>
+                    <div class="form-group">
+                        <div class="col-sm-4">Versicherungsnummer</div>
+                        <div class="col-sm-8"><?= $user['insurance_number']; ?></div>
+                    </div>
+                    <?php } ?>
+
+                    <?php if($user['knowledge_proof']) { ?>
+                    <div class="form-group">
+                        <div class="col-sm-4">Kenntnisnachweis</div>
+                        <div class="col-sm-8"><?= date_to_german($user['knowledge_proof']); ?></div>
+                    </div>
+                    <?php } ?>
+
+                    <?php if($user['flight_manager']) { ?>
+                    <div class="form-group">
+                        <div class="col-sm-4">Flugleiter Schulung</div>
+                        <div class="col-sm-8">Ja</div>
+                    </div>
                     <?php } ?>
 				</div>
                 <div class="box-body my-form-body">
@@ -202,8 +216,8 @@
         modal.find('.modal-body select').val(contact_type_id)
     });
     function edit_contact() {
-        $('.club_key_add').css('display', 'inline-block');
-        $('.key_delete').css('display', 'inline-block');
+        //$('.club_key_add').css('display', 'inline-block');
+        //$('.key_delete').css('display', 'inline-block');
         $('.contact_add').css('display', 'inline-block');
         $('.contact_edit').css('display', 'inline-block');
         $('.contact_delete').css('display', 'inline-block');
-- 
GitLab