changed the signin form to a dialog
This commit is contained in:
		| @ -20,6 +20,33 @@ class Main extends Controller | ||||
| 		redirect ("main/signin/$xurl"); | ||||
| 	} | ||||
|  | ||||
| 	function xhr_signin () | ||||
| 	{ | ||||
| 		$this->load->model ('UserModel', 'users'); | ||||
|  | ||||
| 		if($this->input->post('user_name')) | ||||
| 		{ | ||||
| 			$user_name = $this->input->post('user_name'); | ||||
| 			$user_pass = $this->input->post('user_pass'); | ||||
|  | ||||
| 			if ($this->login->authenticate ($user_name, $user_pass) === FALSE) | ||||
| 			{ | ||||
| 				print 'error - ' . $this->login->getErrorMessage(); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				$settings = $this->users->fetchSettings ($user_name); | ||||
| 				if ($settings !== FALSE) $this->login->setUserSettings ($settings); | ||||
| 				print 'ok'; | ||||
| 			} | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			$this->login->deauthenticate (); | ||||
| 			print 'ok'; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	function signin ($xurl = '') | ||||
| 	{ | ||||
| 		$this->load->model ('UserModel', 'users'); | ||||
|  | ||||
| @ -130,6 +130,7 @@ $lang['MSG_NO_SUCH_PROJECT'] = 'No such project'; | ||||
| $lang['MSG_SURE_TO_DELETE_THIS'] = "I'm sure to delete this"; | ||||
| $lang['MSG_FAILED_TO_READ_FILE'] = 'Failed to read file - %s'; | ||||
| $lang['MSG_NO_SUCH_FILE'] = 'No such file - %s'; | ||||
| $lang['MSG_SIGNIN_FAILURE'] = 'Cannot sign in'; | ||||
|  | ||||
| $lang['MSG_PROJECT_MEMBERSHIP_REQUIRED'] = 'You have to be a member of the %s project to perform this task'; | ||||
| $lang['MSG_FORM_INPUT_INCOMPLETE'] = 'Your input is incomplete'; | ||||
|  | ||||
| @ -127,6 +127,7 @@ $lang['MSG_NO_SUCH_PROJECT'] = 'No such project'; | ||||
| $lang['MSG_SURE_TO_DELETE_THIS'] = "Saya yakin untuk menghapus"; | ||||
| $lang['MSG_FAILED_TO_READ_FILE'] = 'Failed to read file - %s'; | ||||
| $lang['MSG_NO_SUCH_FILE'] = 'No such file - %s'; | ||||
| $lang['MSG_SIGNIN_FAILURE'] = 'Cannot sign in'; | ||||
|  | ||||
| $lang['MSG_PROJECT_MEMBERSHIP_REQUIRED'] = 'You have to be a member of the %s project to perform this task'; | ||||
| $lang['MSG_FORM_INPUT_INCOMPLETE'] = 'Your input is incomplete'; | ||||
|  | ||||
| @ -130,6 +130,7 @@ $lang['MSG_NO_SUCH_PROJECT'] = '프로젝트가 없습니다'; | ||||
| $lang['MSG_SURE_TO_DELETE_THIS'] = '반드시 이것을 삭제하고 싶어요'; | ||||
| $lang['MSG_FAILED_TO_READ_FILE'] = '파일을 읽을 수 없습니다 - %s'; | ||||
| $lang['MSG_NO_SUCH_FILE'] = '파일이 없습니다 - %s'; | ||||
| $lang['MSG_SIGNIN_FAILURE'] = '로그인할 수 없습니다'; | ||||
|  | ||||
| $lang['MSG_PROJECT_MEMBERSHIP_REQUIRED'] = '이 작업을 수행하려면 %s 프로젝트의 멤버가 되어야 합니다'; | ||||
| $lang['MSG_FORM_INPUT_INCOMPLETE'] = '입력이 완전하지 않습니다'; | ||||
|  | ||||
| @ -36,7 +36,7 @@ class DbLoginModel extends LoginModel | ||||
|  | ||||
| 	function authenticate ($userid, $passwd) | ||||
| 	{ | ||||
| 		$this->db->trans_start (); | ||||
| 		$this->db->trans_begin (); | ||||
| 		 | ||||
| 		$this->db->select ('userid,passwd,email'); | ||||
| 		$this->db->where ('userid', $userid); | ||||
| @ -45,27 +45,36 @@ class DbLoginModel extends LoginModel | ||||
|  | ||||
| 		if ($this->db->trans_status() == FALSE) | ||||
| 		{ | ||||
| 			$this->db->trans_complete (); | ||||
| 			$this->setErrorMessage ($this->db->_error_message()); | ||||
| 			$this->db->trans_rollback (); | ||||
| 			return FALSE; | ||||
| 		} | ||||
|  | ||||
| 		$result = $query->result (); | ||||
| 		if (empty($result)) | ||||
| 		{ | ||||
| 			$this->db->trans_complete (); | ||||
| 			$this->setErrorMessage ('invalid credential'); // no such user name | ||||
| 			$this->db->trans_rollback (); | ||||
| 			return FALSE; | ||||
| 		} | ||||
|  | ||||
| 		$this->db->trans_complete (); | ||||
| 		if ($this->db->trans_status() == FALSE) return FALSE; | ||||
| 		$this->db->trans_commit(); | ||||
|  | ||||
| 		$user = $result[0]; | ||||
| 		if (strlen($user->passwd) < 10) return FALSE; | ||||
| 		if (strlen($user->passwd) < 10)  | ||||
| 		{ | ||||
| 			$this->setErrorMessage ('wrongly formatted password'); | ||||
| 			return FALSE; | ||||
| 		} | ||||
| 		// the last 10 characters are the salt. | ||||
| 		$hexsalt = substr ($user->passwd, -10); | ||||
| 		$binsalt = pack('H*' , $hexsalt); | ||||
|  | ||||
| 		if (strcmp ($this->format_password_with_salt($passwd,$binsalt),$user->passwd) != 0) return FALSE; | ||||
| 		if (strcmp ($this->format_password_with_salt($passwd,$binsalt),$user->passwd) != 0)  | ||||
| 		{ | ||||
| 			$this->setErrorMessage ('invalid credential'); // invalid password | ||||
| 			return FALSE; | ||||
| 		} | ||||
|  | ||||
| 		return parent::authenticate ($userid, $user->passwd, $user->email); | ||||
| 	} | ||||
| @ -80,6 +89,7 @@ class DbLoginModel extends LoginModel | ||||
|  | ||||
| 		if ($this->db->trans_status() === FALSE) | ||||
| 		{ | ||||
| 			$this->setErrorMessage ($this->db->_error_message()); | ||||
| 			$this->db->trans_rollback (); | ||||
| 			return FALSE; | ||||
| 		} | ||||
| @ -98,6 +108,7 @@ class DbLoginModel extends LoginModel | ||||
|  | ||||
| 		if ($this->db->trans_status() == FALSE) | ||||
| 		{ | ||||
| 			$this->setErrorMessage ($this->db->_error_message()); | ||||
| 			$this->db->trans_complete (); | ||||
| 			return FALSE; | ||||
| 		} | ||||
|  | ||||
| @ -699,7 +699,6 @@ $(function () { | ||||
| 				} | ||||
| 			}, | ||||
| 			'<?php print $this->lang->line('Cancel')?>': function () { | ||||
| 				if (import_in_progress) return; | ||||
| 				$('#code_folder_search').dialog('close'); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| @ -39,65 +39,30 @@ function show_taskbar ($con, $login) | ||||
|  | ||||
|  | ||||
| 		print ' '; | ||||
| 		//print form_submit ( | ||||
| 		//	'login',  | ||||
| 		//	$con->lang->line('Sign out'),  | ||||
| 		//	'class="button" id="taskbar_signinout_button"' | ||||
| 		//); | ||||
| 		printf ('<a href="#" id="taskbar_signinout_button">%s</a>', $con->lang->line('Sign out')); | ||||
| 		print form_close(); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		print form_open('main/signin', array('id' => 'taskbar_signinout_form')); | ||||
| 		print '<div id="taskbar_signin_container">'; | ||||
|  | ||||
| 		print form_fieldset(); | ||||
| 		print '<div id="taskbar_signin_error"></div>'; | ||||
|  | ||||
| 		$user_name = ""; | ||||
| 		$user_pass = ""; | ||||
| 		print '<div id="taskbar_signin_form">'; | ||||
|  | ||||
| 		print form_hidden ( | ||||
| 			'user_url',  | ||||
| 			set_value ('user_url', current_url()) | ||||
| 		); | ||||
|  | ||||
| 		/* | ||||
| 		print form_label( | ||||
| 			$con->lang->line('Username'),  | ||||
| 			'taskbar_user_name' | ||||
| 		); | ||||
| 		print ' '; | ||||
| 		*/ | ||||
| 		print form_input ( | ||||
| 			'user_name',  | ||||
| 			set_value ('user_name', $user_name),  | ||||
| 			'user_name', set_value ('user_name', ''),  | ||||
| 			"size='16' id='taskbar_user_name' placeholder={$con->lang->line('Username')}" | ||||
| 		); | ||||
|  | ||||
| 		print ' '; | ||||
| 		/* | ||||
| 		print form_label ( | ||||
| 			$con->lang->line('Password'), | ||||
| 			'taskbar_user_pass' | ||||
| 		); | ||||
| 		print ' '; | ||||
| 		*/ | ||||
| 		print form_password ( | ||||
| 			'user_pass', | ||||
| 			set_value ('user_pass', $user_pass), | ||||
| 			'user_pass', set_value ('user_pass', ''), | ||||
| 			"size='16' id='taskbar_user_pass' placeholder={$con->lang->line('Password')}" | ||||
| 		); | ||||
| 		print '</div>'; | ||||
| 		print '</div>'; | ||||
|  | ||||
| 		print ' '; | ||||
| 		//print form_submit ( | ||||
| 		//	'login',  | ||||
| 		//	$con->lang->line('Sign in'),  | ||||
| 		//	'class="button" id="taskbar_signinout_button"' | ||||
| 		//); | ||||
| 		printf ('<a href="#" id="taskbar_signinout_button">%s</a>', $con->lang->line('Sign in')); | ||||
|  | ||||
| 		print form_fieldset_close(); | ||||
| 		print form_close(); | ||||
| 	} | ||||
| 	print '</div>'; // boxb | ||||
|  | ||||
| @ -120,7 +85,7 @@ function show_taskbar ($con, $login) | ||||
| 	} | ||||
| 	print '</ul>'; | ||||
|  | ||||
| 	print '</div>'; | ||||
| 	print '</div>'; // boxa | ||||
|  | ||||
| 	print '</div>'; | ||||
| } | ||||
| @ -140,20 +105,106 @@ function ready_to_signinout() | ||||
| <?php endif; ?> | ||||
| } | ||||
|  | ||||
| var taskbar_signin_in_progress = 0; | ||||
|  | ||||
| $(function () { | ||||
| 	$('#taskbar_signin_container').dialog ({ | ||||
| 		title: '<?php print $this->lang->line('Sign in'); ?>', | ||||
| 		resizable: true, | ||||
| 		autoOpen: false, | ||||
| 		modal: true, | ||||
| 		width: 'auto', | ||||
| 		height: 'auto', | ||||
| 		buttons: { | ||||
| 			'<?php print $this->lang->line('OK')?>': function () { | ||||
| 				if (taskbar_signin_in_progress) return; | ||||
|  | ||||
| 				if (!!window.FormData) | ||||
| 				{ | ||||
| 					// FormData is supported | ||||
| 					taskbar_signin_in_progress = true; | ||||
|  | ||||
| 					var form_data = new FormData(); | ||||
| 					form_data.append ('user_name', $('#taskbar_user_name').val()); | ||||
| 					form_data.append ('user_pass', $('#taskbar_user_pass').val()); | ||||
|  | ||||
| 					$('#taskbar_signin_container').dialog('disable'); | ||||
| 					$.ajax({ | ||||
| 						url: codepot_merge_path('<?php print site_url() ?>', '<?php print "/main/xhr_signin"; ?>'), | ||||
| 						type: 'POST', | ||||
| 						data: form_data, | ||||
| 						mimeType: 'multipart/form-data', | ||||
| 						contentType: false, | ||||
| 						processData: false, | ||||
| 						cache: false, | ||||
|  | ||||
| 						success: function (data, textStatus, jqXHR) {  | ||||
| 							taskbar_signin_in_progress = false; | ||||
|  | ||||
| 							$('#taskbar_signin_container').dialog('enable'); | ||||
| 							if (data == 'ok')  | ||||
| 							{ | ||||
| 								$('#taskbar_signin_container').dialog('close'); | ||||
| 								// refresh the page to the head revision | ||||
| 								$(location).attr ('href', '<?php print current_url(); ?>'); | ||||
| 							} | ||||
| 							else | ||||
| 							{ | ||||
| 								$('#taskbar_signin_error').text(codepot_htmlspecialchars('<?php print $this->lang->line('MSG_SIGNIN_FAILURE')?>')); | ||||
| 							} | ||||
| 						}, | ||||
|  | ||||
| 						error: function (jqXHR, textStatus, errorThrown) {  | ||||
| 							taskbar_signin_in_progress = false; | ||||
| 							$('#taskbar_signin_container').dialog('enable'); | ||||
| 							var errmsg = ''; | ||||
| 							if (errmsg == '' && errorThrown != null) errmsg = errorThrown; | ||||
| 							if (errmsg == '' && textStatus != null) errmsg = textStatus; | ||||
| 							if (errmsg == '') errmsg = 'Unknown error'; | ||||
| 							$('#taskbar_signin_error').text(codepot_htmlspecialchars(errmsg)); | ||||
| 						} | ||||
| 					}); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					$('#taskbar_signin_error').text('NOT SUPPORTED'); | ||||
| 				} | ||||
|  | ||||
| 			}, | ||||
| 			'<?php print $this->lang->line('Cancel')?>': function () { | ||||
| 				if (taskbar_signin_in_progress) return; | ||||
| 				$('#taskbar_signin_container').dialog('close'); | ||||
| 			} | ||||
| 		}, | ||||
|  | ||||
| 		beforeClose: function() {  | ||||
| 			// if importing is in progress, prevent dialog closing | ||||
| 			return !taskbar_signin_in_progress; | ||||
| 		} | ||||
| 	}); | ||||
|  | ||||
| 	$("#taskbar_user_name").button().bind ('keyup', function(e) { | ||||
| 		if (e.keyCode == 13) { | ||||
| 			if (ready_to_signinout()) $("#taskbar_signinout_form").submit(); | ||||
| 		if (e.keyCode == 13)  | ||||
| 		{ | ||||
| 			var buttons = $("#taskbar_signin_container").dialog("option", "buttons"); | ||||
| 			buttons[Object.keys(buttons)[0]](); // trigger the first button | ||||
| 		} | ||||
| 	}); | ||||
| 	$("#taskbar_user_pass").button().bind ('keyup', function(e) { | ||||
| 		if (e.keyCode == 13) { | ||||
| 			if (ready_to_signinout()) $("#taskbar_signinout_form").submit(); | ||||
| 		if (e.keyCode == 13)  | ||||
| 		{ | ||||
| 			var buttons = $("#taskbar_signin_container").dialog("option", "buttons"); | ||||
| 			buttons[Object.keys(buttons)[0]](); // trigger the first button | ||||
| 		} | ||||
| 	}); | ||||
|  | ||||
| 	$("#taskbar_signinout_button").button().click (function() { | ||||
| 		<?php if (isset($login['id']) && $login['id'] != ''): ?> | ||||
| 		if (ready_to_signinout()) $("#taskbar_signinout_form").submit(); | ||||
| 		<?php else: ?> | ||||
| 		$('#taskbar_signin_container').dialog('open'); | ||||
| 		<?php endif; ?> | ||||
| 		return false; | ||||
| 	}); | ||||
|  | ||||
| 	$("#taskbar_project_to_find").button().autocomplete({ | ||||
|  | ||||
| @ -1000,6 +1000,13 @@ textarea { | ||||
| 	line-height: 1em; | ||||
| } | ||||
|  | ||||
| #taskbar_signin_error { | ||||
| 	color: #AA3344; | ||||
| 	font-weight: bold; | ||||
| 	text-align: center; | ||||
| 	margin-bottom: 0.5em; | ||||
| } | ||||
|  | ||||
| /* ================ login page =================== */ | ||||
|  | ||||
| #login_user_name { | ||||
|  | ||||
		Reference in New Issue
	
	Block a user