Первая копия

This commit is contained in:
2020-02-27 00:28:43 +06:00
commit 925cac4752
1125 changed files with 198979 additions and 0 deletions

505
metadata/dbms/login.js Normal file
View File

@ -0,0 +1,505 @@
function TUser()
{
//Функция запрашивает информацию о текущем пользователе с сервера
this.LoadData = function()
{
var r = new TRequest(this);
var xs='<?xml version="1.0" encoding="utf-8"?><metadata fn="7"><cmd><![CDATA[0]]></cmd></metadata>';
if(r.callServer(ScriptName,xs))
{
this.showShadow(true);
}
};
this.applyReq=function(req,fn,node)
{
//alert(getXMLNodeSerialisation(node));
this.showShadow(false);
if(fn==7)
{
var nCmd=findFirstNode(node, "cmd");
if(nCmd!=null)
{
if(findFirstNode(nCmd,'#cdata-section').nodeValue=="1") //Logout
{
location.reload();
//window.location.href = '../';
}else if(findFirstNode(nCmd,'#cdata-section').nodeValue=="2") //Check if user not logged
{
if(findNode(node,'#cdata-section').nodeValue=="0") //if not logged
{
this.showLoginForm();
}else
{
this.name=getCdataValue(findNode(node,'name'));
this.surname=getCdataValue(findNode(node,'surname'));
this.patronymic=getCdataValue(findNode(node,'patronymic'));
if (typeof this.onUpdateName !== 'undefined') {
this.onUpdateName(this.name,this.surname,this.patronymic);
}
//configGUIbyAccessLevel();
//var shadow=document.getElementById("shadow");
//if(shadow.parentNode!=null) shadow.parentNode.removeChild(shadow);
}
}else if(findFirstNode(nCmd,'#cdata-section').nodeValue=="3") //Login
{
//if(findNode(node,'#cdata-section').nodeValue=="0") //if not logged
//{
// alert(_('Invalid_username_and_or_password'));
//}else
//{
// location.reload();
//}
}else if(findFirstNode(nCmd,'#cdata-section').nodeValue=="4") //Register
{
//if(findNode(node,'#cdata-section').nodeValue=="1") //if register
//{
// alert(_('New_user_is_registered')+'\n'+_('The_password_has_been_sent_to_you_by_Email'));
// location.reload();
//}
}
}
}
};
//Display login and registration form
this.showLoginForm = function()
{
if(this.win==null || this.win.closed)
{
this.win=new TWin(true);
this.win.TWin(10,10);
this.win.setCaption(_('Authorization'));
this.win.setSize("350px","200px");
var str='<div style="width: 100%; height: 100%; padding: 3px; text-align: left;">\n\
<table border="0" cellpadding="0" cellspacing="0" style="width: 100%; height: 100%;">\n\
<tbody>\n\
<tr><td>\n\
<table border="0" style="width: 100%; height: 100%;">\n\
<tr>\n\
<td style="padding: 2px; width: 30%; white-space: nowrap"><b>'+_('Login')+' (E-mail):</b></td>\n\
<td style="padding: 2px;"><input type="text" maxlength="50" style="width: 100%; padding: 2px; display: inline;" id="tcLogin'+this.uid+'" name="login"><br></td>\n\
</tr>\n\
<tr>\n\
<td style="padding: 2px;"><b>Password:</b></td>\n\
<td style="padding: 2px;"><input type="password" maxlength="33" style="width: 100%; padding: 2px; display: inline;" id="tcPassword'+this.uid+'" name="password"><br></td>\n\
</tr>\n\
<tr>\n\
<td style="padding: 2px;" colspan="2"><table cellspacing="0" cellpadding="0" border="0" style="width: 100%;"><tr><td><label for="save0" style="white-space: nowrap;"><input id="save_'+this.uid+'" type="checkbox" style="display: inline;" checked/>&nbsp;Remember&nbsp;(<a href="#" onclick="showRestoreForm();">Forgot your password?</a>)</label></td></tr></table></td>\n\
</tr>\n\
<tr><td colspan="2" style="text-align: right;"><input class="button-secondary" id="TLogin_E'+this.uid+'" type="button" style="display: inline;" value="'+_('Log_in')+'"></td></tr>\n\
</table>\n\
</td></tr>\n\
</tbody>\n\
</table>\n\
</div>';
this.win.setContent(str);
//Center the window and display the shadow
//if(this.win.tbl.offsetHeight>this.win.div.offsetHeight) this.win.div.style.height=this.win.tbl.offsetHeight+"px";
//if(this.win.tbl.offsetWidth>this.win.div.offsetWidth) this.win.div.style.width=this.win.tbl.offsetWidth+"px";
this.win.setCenter();
this.win.shadow=true;
this.win.hide(false);
//Нажатие на кнопку авторизоваться
var obj=null;
obj=document.getElementById('TLogin_E'+this.uid);
if(obj!==null)
{
obj.onclick=function(thiz)
{
return function()
{
var xs='<?xml version="1.0" encoding="utf-8"?>\
<metadata fn="7">\
<cmd><![CDATA[3]]></cmd>\n\
<login><![CDATA['+document.getElementById('tcLogin'+thiz.uid).value+']]></login>\
<password><![CDATA['+document.getElementById('tcPassword'+thiz.uid).value+']]></password>\
</metadata>';
var request=new TRequest(thiz);
if(request.callServer(ScriptName,xs))
{
thiz.win.showProgressBar();
}
};
}(this);
}
}
};
//logout current user
this.Logout = function()
{
xs='<?xml version="1.0" encoding="utf-8"?><metadata fn="7"><cmd><![CDATA[1]]></cmd></metadata>';
var request=new TRequest(this);
if(request.callServer(ScriptName,xs))
{
this.showShadow();
}
};
//Checking the session without its extension, if it is completed, we display the authorization window.
this.checkSession = function()
{
$.getJSON('../session',{},function(thiz){return function(data){ if(data.result=='ERROR'){thiz.showLoginForm();} };}(this));
setTimeout(function(thiz){return function(){thiz.checkSession();};}(this), 10000);
};
this.showShadow = function(visible)
{
if(visible)
{
this.divsh=document.createElement('div'); //Тень для модального окна
this.divsh.style.cssText="display: block; position: fixed; z-index:9999; top:0; left:0; height: 100%; width: 100%; background: rgba(0,0,0,0.3);";
document.body.appendChild( this.divsh );
}else
{
deleteHTML(this.divsh);
}
};
//Check whether the already authorized (+ attempt to log in through "hash").
this.isLogined=function()
{
var xs='<?xml version="1.0" encoding="utf-8"?><metadata fn="7"><cmd><![CDATA[2]]></cmd></metadata>';
var request=new TRequest(this);
if(request.callServer(ScriptName,xs))
{
this.showShadow(true);
alert(ScriptName+" = "+xs);
//m_winPP.showProgressBar();
}
};
this.divsh=null;
this.id=null;
this.name='';
this.surname='';
this.patronymic='';
this.temp=false;
this.role='';
//Запрашиваю данные о текущем пользователе с сервера
//this.LoadData();
};
/*
* Login form (not cross-source).
* [^\x00-\x7F]+
*/
function TLogin()
{
this.showLoginForm = function()
{
this.win.TWin(10,10);
this.win.shadow=true;
this.win.setCaption(document.createTextNode("Enter"));
var str='<div style="width: 100%; height: 100%; padding: 3px; text-align: left;">\n\
<table border="0" cellpadding="0" cellspacing="0" style="width: 100%; height: 100%;">\n\
<tbody>\n\
<tr><td>\n\
<table border="0" style="width: 100%; height: 100%;">\n\
<tr>\n\
<td style="padding: 2px; width: 30%; white-space: nowrap"><b>'+_('Login')+' (E-mail):</b></td>\n\
<td style="padding: 2px;"><input type="text" maxlength="50" style="width: 100%; padding: 2px; display: inline;" id="tcLogin'+this.uid+'" name="login"><br></td>\n\
</tr>\n\
<tr>\n\
<td style="padding: 2px;"><b>Password:</b></td>\n\
<td style="padding: 2px;"><input type="password" maxlength="33" style="width: 100%; padding: 2px; display: inline;" id="tcPassword'+this.uid+'" name="password"><br></td>\n\
</tr>\n\
<tr>\n\
<td style="padding: 2px;" colspan="2"><table cellspacing="0" cellpadding="0" border="0" style="width: 100%;"><tr><td><label for="save0" style="white-space: nowrap;"><input id="save_'+this.uid+'" type="checkbox" style="display: inline;" checked/>&nbsp;Remember&nbsp;(<a href="#" onclick="showRestoreForm();">Forgot your password?</a>)</label></td></tr></table></td>\n\
</tr>\n\
<tr><td colspan="2" style="text-align: right;"><input class="button-secondary" id="TLogin_E'+this.uid+'" type="button" style="display: inline;" value="'+_('Log_in')+'"></td></tr>\n\
</table>\n\
</td></tr>\n\
</tbody>\n\
</table>\n\
</div>';
this.win.setContent(str);
var e=document.getElementById('TLogin_E'+this.uid);
e.onclick=function(obj){ return function(){obj.onEnter(); };}(this);
e=document.getElementById('tcLogin'+this.uid);
e.onkeydown=function(obj){ return function(e){ if(e.which==13) obj.onEnter(); return true; };}(this);
e=document.getElementById('tcPassword'+this.uid);
e.onkeydown=function(obj){ return function(e){ if(e.which==13) obj.onEnter(); return true; };}(this);
this.win.setSize("300px","155px");
this.win.setCenter();
this.win.obj=this;
this.win.hide(false);
};
this.onEnter=function()
{
var login=document.getElementById('tcLogin'+this.uid).value;
var password=document.getElementById('tcPassword'+this.uid).value;
if(login=='' || password=='')
{ str="Not filled in the required fields: ";
if(login=='') str+='"'+_('Login')+' (E-mail)"';
if(login=='' && password=='') str+=', ';
if(password=='') str+='"Password"';
str+='!';
alert(str);
}else
this.Login(login,password,document.getElementById('save_'+this.uid).checked);
};
this.applyReq=function(req,fn,node)
{
// alert(getXMLNodeSerialisation(node));
if (fn==-1)
{
alert(findFirstNode(node,'#cdata-section').nodeValue);
}else if (fn==4)
{
//nodeToTable(node);
}else if (fn==7)
{
var cmd=getCdataValue(findFirstNode(node,"cmd"));
//alert('cmd='+cmd);
if(cmd==='0')
{
this.m_lo=getCdataValue(findFirstNode(node,"login")) == '0' ? false : true;
if(!this.m_lo)
{ this.showLoginForm();
}else
{
var name=getCdataValue(findFirstNode(node,"name"));
var user_name=document.getElementById('user_name');
if(user_name!=null) user_name.innerHTML=name;
//Информируем слушатеелй о логине
for(i=0;i<this.m_ls.length;i++)
if(this.m_ls[i]!==null)
this.m_ls[i].OnLogin(true); //0 - authorized, 1 - an incorrect username or password, 2 - left.
}
}else if(cmd==='1')
{
location.reload();
}else if(cmd==='2')
{
var login=getCdataValue(findFirstNode(node,"login")) == '0' ? false : true;
if(!login)
{ alert('Не удалось авторизоваться.\nНеверный логин и/или пароль.');
}else
{
this.m_lo=true;
this.win.Close();
var name=getCdataValue(findFirstNode(node,"name"));
var user_name=document.getElementById('user_name');
if(user_name!=null) user_name.innerHTML=name;
//Информируем слушатеелй о логине
for(i=0;i<this.m_ls.length;i++)
if(this.m_ls[i]!==null)
this.m_ls[i].OnLogin(true); //0 - authorized, 1 - an incorrect username or password, 2 - left.
}
}
/*
this.m_lo=getCdataValue(findFirstNode(node,"login")) == '0' ? true : false;
if(this.m_lo && this.win.div!==null) this.win.hide(true);
this.m_UserName=getCdataValue(findFirstNode(node,"name"));
*/
}else
alert("Not known function! fn=\""+fn+"\"" );
this.win.hideProgressBar();
};
//l - login, p - password, s - allow or disallow auto-login!
this.Login=function(login,password,save)
{
if(save)
{ setCookie('GUID', guid(), 60, '/','','');
}else
{ setCookie('GUID', '', 60, '/','','');
}
var xs='<?xml version="1.0" encoding="utf-8"?><metadata fn="7">\n\
<cmd><![CDATA[2]]></cmd>\n\
<login><![CDATA['+login+']]></login>\n\
<password><![CDATA['+password+']]></password>\n\
</metadata>';
//alert(xs);
if(this.request.callServer(ScriptName,xs))
{
this.win.showProgressBar();
}
};
//Check whether the already authorized (+ attempt to log in through "hash").
this.Logined=function()
{
var xs='<?xml version="1.0" encoding="utf-8"?><metadata fn="7"><cmd><![CDATA[0]]></cmd></metadata>';
//alert('xs='+xs);
this.request.callServer(ScriptName,xs);
};
//logout current user
this.Exit=function()
{
if(this.request.callServer(ScriptName,'<?xml version="1.0" encoding="utf-8"?><metadata fn="7"><cmd><![CDATA[1]]></cmd></metadata>'))
{
setCookie('GUID', '', 60, '/','','');
showProgressBar(document.body);
}
};
this.addListener=function(l)
{ if(l.OnLogin==null) alert('Object does not have the function "OnLogin()"!');
this.m_ls[this.m_ls.length]=l;
};
this.remListener=function(l)
{ for(i=0;i<this.m_ls.length;i++)
{ if(this.m_ls[i]==l)
this.m_ls[i]=null;
}
};
TLogin.LoginIsOk=0; //login in
TLogin.LoginIsError=1; //Invalid password and / or login.
TLogin.LoginIsExit=2; //Exit
this.m_lo=false; //login in?
this.name='Login';
this.uid=getUID();
this.win=new TWin();
this.win.shadow=true;
this.m_ls=new Array(); //Listeners called OnLogin function.
this.guid='';
this.m_UserName=''; //Member Name
this.m_html=false;
this.request = new TRequest(this);
}
//Display password recovery form
function showRestoreForm()
{
var win=new TWin(true);
win.TWin(10,10);
win.setCaption(_("Password_recovery"));
str='<div id="TWin_DT_'+win.tWinId+'" style="width: 100%; height: 100%; padding: 4px; text-align: left;">\n\
<table border="0" cellpadding="0" cellspacing="0" style="width: 100%; height: 100%; padding: 0px;">\n\
<tr>\n\
<td style="padding: 2px; white-space: nowrap"><b>'+_('Login')+' (E-mail)</b></td>\n\
<td style="padding: 2px;"><input type="text" maxlength="40" style="width: 100%; display: inline;" id="'+win.uid+'_email" name="login">\n\
<table id="'+win.uid+'_phone" style="width: 100%; display: none;" cellpadding="0" cellspacing="0"><tr><td style="white-space: nowrap;"><b>+7 ( </b><input type="text" maxlength="3" onkeydown="this.value = this.value.replace(/[^0-9]/g, \'\')" onkeyup="this.value = this.value.replace(/[^0-9]/g, \'\')" style="width: 35px; display: inline;" id="'+win.uid+'_phone0" value=""><b> ) </b></td><td style="width: 90%;"><input type="text" onkeydown="this.value = this.value.replace(/[^0-9]/g, \'\')" onkeyup="this.value = this.value.replace(/[^0-9]/g, \'\')" maxlength="7" style="width: 100%;display: inline;" id="'+win.uid+'_phone1" value=""></td></tr></table><br></td>\n\
</tr>\n\
<tr><td colspan="2" style="text-align: right; padding: 2px;"><input class="button-secondary" id="'+win.uid+'_restore" type="button" style="display: inline;" value="'+_('Restore')+'"></td></tr>\n\
</table>\n\
</td></tr>\n\
</div>';
document.getElementById('TWin_Co_'+win.tWinId).innerHTML=str;
win.setSize("300px","100px");
//Центрируем окно и отображаем тень
if(win.tbl.offsetHeight>win.div.offsetHeight) win.div.style.height=win.tbl.offsetHeight+"px";
if(win.tbl.offsetWidth>win.div.offsetWidth) win.div.style.width=win.tbl.offsetWidth+"px";
win.setCenter();
win.shadow=true;
win.hide(false);
//Click on restore button
var obj=null;
obj=document.getElementById(win.uid+'_restore');
if(obj!=null)
{
obj.onclick=function(win)
{ return function()
{
win.showProgressBar();
//showProgressBar(document.getElementById('TWin_DT_'+win.tWinId),win.uid);
var em=document.getElementById(win.uid+'_email').value;
if(em==''){ document.getElementById(win.uid+'_email').select(); alert(_('Not_filled_Email_address')); win.hideProgressBar(); return; }
if(! isEmail(em)){ document.getElementById(win.uid+'_email').select(); alert(_('Please_enter_a_valid_email_address')); win.hideProgressBar(); return; }
//Send AJAX reqwest to server
var xml='<?xml version="1.0" encoding="utf-8"?>\
<metadata fn="7">\
<cmd><![CDATA[0]]></cmd>\
<login><![CDATA['+em+']]></login>\
<captcha><![CDATA[]]></captcha>\
</metadata>';
//Anonymous object
obj=new function(win)
{
this.processReqChange = function(xmlHttpRequest, url, xmlString)
{
if(typeof(xmlHttpRequest.status)=='undefined' || xmlHttpRequest.status == 200)
{
if(typeof(xmlHttpRequest.responseXML)=='undefined' && xmlHttpRequest.contentType.match(/\/xml/)) //For IE XDomainRequest
xmlHttpRequest.responseXML=CreateXMLDOC(xmlHttpRequest.responseText);
//загрузился xml документ начинаем его разбирать (по id функции в документе)
var xmldoc = xmlHttpRequest.responseXML
if(xmldoc==null) alert(_('Wrong_XML_document')+"!\n"+xmlHttpRequest.responseText);
var node = xmldoc.documentElement;
if((node==null)||(node.getAttribute("fn")==null)) alert(_('Error')+"\n "+_("No_data")+"!\n"+xmlHttpRequest.responseText);
else
{
//alert("Принятый браузером XML=\n"+getXMLNodeSerialisation(node));
var fn = node.getAttribute("fn");
if (fn==-1)
{
alert(findFirstNode(node,'#cdata-section').nodeValue);
this.win.hideProgressBar();
}else
if(fn==7)
{
alert(findFirstNode(node,'#cdata-section').nodeValue);
this.win.Close();
}
}
}else
{
if(confirm(_('Failed_to_get_data')+"\n URL: "+url+"\n"+xmlHttpRequest.statusText+"\nRedo the request?"))
{
var call=new myXMLHttpRequest(this);
call.callServer(url,xmlString);
}
}
return null;
};
this.win=win; //For close after showing message.
}
(win);
var call=new myXMLHttpRequest(obj);
call.callServer(ScriptName,xml);
};
}(win);
}
}