Skip to content
Snippets Groups Projects
Commit c0a04fdc authored by xamgore's avatar xamgore
Browse files

Settings popup improvements

- Login filtering
- Complex enter key behaviour
- Process loading icon
parent 55c3f4b3
Branches
Tags
No related merge requests found
......@@ -12,6 +12,7 @@ $(function () {
$('#settingsButton').click(function () {
$.get(URLdir + "window/settings", function (data) {
wnd.open(JSON.parse(data));
onSettingsPopup();
});
});
......
var $ = jQuery;
$(function() {
var checkInput = new Array(); // Массив с ключами валидации (true/false)
$(document)
.on('click', '.changeLogin', function()
{
var jInputLogin = $(".inputLogin").first();
var jChangeLogin = $(".changeLogin").first();
var login = jInputLogin.val();
jChangeLogin.attr("disabled", true);
if (/^[a-zA-Z0-9]+$/.test(login))
checkInput['login'] = true;
else
checkInput['login'] = false;
if (checkInput['login'] === true) {
jInputLogin.attr("disabled", true);
$.post(URLdir + 'handler/settings/changeLogin', {'login': login},
function(data){
data = $.parseJSON(data);
jInputLogin.removeAttr("disabled");
jChangeLogin.removeAttr("disabled");
if(data.success === true) {
EventInspector_ShowMsg('Логин изменен', 'success');
jInputLogin.bind("keydown", function(event){ event.preventDefault(); });
jChangeLogin.html("Логин изменен!").unbind("click");
} else
EventInspector_ShowMsg('Не удалось изменить логин', 'error');
}
);
}
});
$('.changeEmail').click(function(){
if (/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,6})$/.test($('.inputNewEmail').val()))
checkInput['email'] = true;
else checkInput['email'] = false;
/*alert(checkInput['email']);
if (checkInput['email'] == true)
$.post(URLdir+'/handler/settings/changeEmail', {'email': $('.inputNewEmail').val()},
function(data){
}
);
*/
});
$(document)
.on('click', '.changePass', function()
{
var jChangePass = $(".changePass").first();
var jInputPwdCurrent = $('.inputCurrentPass').first();
var jInputPwdNew = $('.inputNewPass').first();
var jInputPwdConfirm = $('.inputСonfirmPass').first();
jChangePass.attr("disabled", true);
var pwdCurrent = $.trim(jInputPwdCurrent.val());
var pwdConfirm = $.trim(jInputPwdConfirm.val());
var pwdNew = $.trim(jInputPwdNew.val());
if (pwdCurrent === '' || pwdNew === '' || pwdNew !== pwdConfirm) {
EventInspector_ShowMsg('Не удалось изменить пароль', 'error');
jChangePass.removeAttr("disabled");
return;
}
$.post(URLdir + 'handler/settings/changePassword',
{
'old_password': pwdCurrent,
'password': pwdNew,
'confirm_password': pwdConfirm
},
function(data) {
data = $.parseJSON(data);
if(data.success === true) {
EventInspector_ShowMsg('Пароль изменен', 'success');
jChangePass.html("Пароль изменен!").unbind("click");
jInputPwdCurrent.attr("disabled", true);
jInputPwdConfirm.attr("disabled", true);
jInputPwdNew.attr("disabled", true);
} else
EventInspector_ShowMsg('Не удалось изменить пароль', 'error');
jChangePass.removeAttr("disabled");
}
);
});
});
$ = jQuery;
function onSettingsPopup() {
// login section
var $loginTextBox = $('.inputLogin').first();
var $changeLoginBut = $('.changeLogin').last();
var loginTextBoxTitle = $changeLoginBut.text();
$loginTextBox.keyup(function (event) {
if (event.keyCode == 13)
$changeLoginBut.trigger('click');
else {
var prev = $loginTextBox.val();
$loginTextBox.val(prev.replace(/[^a-z0-9_\-\.]/gi, ''));
}
});
$changeLoginBut.click(function () {
var login = $loginTextBox.val();
if (!login.length) {
$loginTextBox.focus();
return;
}
if (login.length < 2) {
EventInspector.error('Слишком короткий логин, мыслите шире!');
$loginTextBox.focus();
return;
}
if (!/^[a-zA-Z0-9_\-\.]{2,}$/.test(login)) {
EventInspector.error('Некорректные символы в логине, попробуйте ещё раз!');
$loginTextBox.focus();
return;
}
$changeLoginBut.attr('disabled', 'disabled')
.html('<i class="fa fa-circle-o-notch fa-spin"></i>');
$.post(URLdir + 'handler/settings/changeLogin', {
'login': login
}, function (res) {
res.success
? $changeLoginBut.text('Логин изменён!')
: $changeLoginBut.text('Ошибка!').addClass('Error').removeAttr('disabled');
setTimeout(function () {
$changeLoginBut.removeAttr('disabled')
.text(loginTextBoxTitle)
.removeClass('Error');
}, 1000);
}, 'json');
});
// password section
var $inputPwdCurrent = $('.inputCurrentPass').first();
var $inputPwdNew = $('.inputNewPass').first();
var $inputPwdConfirm = $('.inputСonfirmPass').first();
var $changePassBut = $('.changePass').last();
var passTextBoxTitle = $changeLoginBut.text();
$inputPwdCurrent
.add($inputPwdConfirm)
.add($inputPwdNew)
.keyup(function (event) {
if (event.keyCode == 13)
$changePassBut.trigger('click');
});
$changePassBut.click(function () {
var pCurrent = $inputPwdCurrent.val();
var pConfirm = $inputPwdConfirm.val();
var pNew = $inputPwdNew.val();
if (pCurrent === '') {
$inputPwdCurrent.focus();
return;
}
if (pNew === '') {
$inputPwdNew.focus();
return;
}
if (pNew !== pConfirm) {
if (pConfirm.length)
EventInspector.error('Пароли не совпадают!');
$inputPwdConfirm.focus().val('');
return;
}
$changePassBut.attr('disabled', 'disabled')
.html('<i class="fa fa-circle-o-notch fa-spin"></i>');
$.post(URLdir + 'handler/settings/changePassword', {
'confirm_password': pConfirm,
'old_password': pCurrent,
'password': pNew
}, function (data) {
if (data.success) {
$changePassBut.text('Пароль изменен!');
} else {
$changePassBut.text('Ошибка!').addClass('Error').removeAttr('disabled');
}
$inputPwdCurrent
.add($inputPwdConfirm)
.add($inputPwdNew)
.val('');
setTimeout(function () {
$changePassBut.removeAttr('disabled')
.text(passTextBoxTitle)
.removeClass('Error');
}, 1000);
}, 'json'
);
});
// email section
$('.changeEmail').click(function () {
//if (/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,6})$/.test($('.inputNewEmail').val()))
// $.post(URLdir+'/handler/settings/changeEmail', {'email': $('.inputNewEmail').val()},
});
}
......@@ -73,6 +73,13 @@ input[type=button].defaultForm, button.defaultForm, input[type=submit].defaultFo
background: lighten(@ColorLightBlue, 3%);
}
}
&.Error {
background: @ColorLightenRed;
color: @ColorRedBase;
&:hover {
background: lighten(@ColorLightenRed, 3%);
}
}
&.noMargin {
margin: 0 auto;
}
......
......@@ -10,19 +10,20 @@ class Controller_Handler_Settings extends Controller_Handler
}
public function action_changeLogin() {
$config = Kohana::$config->load('security.securityPolicy');
$this->post->rule('login', $config['login']['allowedSymbols'])->rule('login', 'not_empty');
$res['success'] = true;
if ($this->post->check() && $_POST['login'] !== $this->user->Login) {
Model_Account::changeLogin($this->user->ID, $this->post['login'])
? $this->user->Login = $this->post['login']
: $this->post->error('login', 'already_exists');
if ($_POST['login'] !== $this->user->Login) {
try {
Model_Account::changeLogin($this->user->ID, $this->post['login'])
? $this->user->Login = $this->post['login']
: $this->post->error('login', 'already_exists');
} catch (InvalidArgumentException $e) {
$this->post->error('login', 'invalid_symbols');
}
}
$res['success'] = true;
if ($this->post->errors()) {
$res['success'] = false;
$res['errors'] = $this->post->errors();
$res['success'] = false;
}
$this->response->body(json_encode($res));
......@@ -48,7 +49,7 @@ class Controller_Handler_Settings extends Controller_Handler
if (!User::instance()->changePassword($old, $new)) {
$res['success'] = false;
$this->post->error('login', 'invalid_password');
$this->post->error('password', 'invalid_password');
$res['errors'] = $this->post->errors();
$this->response->body(json_encode($res));
return;
......
......@@ -83,6 +83,9 @@ class Model_Account extends Model
* @return bool true, if login was changed
*/
public static function changeLogin($accountID, $newLogin) {
if (!preg_match('/^[a-zA-Z0-9_\-\.]{2,}$/', $newLogin))
throw new InvalidArgumentException('Логин содержит некорректные символы');
$sql = 'SELECT `ChangeAccountData`(:account, :value, "login") AS Num';
return (bool) DB::query(Database::SELECT, $sql)
->parameters([
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment