This commit is contained in:
2020-07-08 23:19:53 +06:00
parent dfd5a1ba05
commit 0781e51bc2
10 changed files with 276 additions and 108 deletions

View File

@ -48,34 +48,36 @@
{
global $db_connstr;
if($t=='object')
{ if (($v=='-1')||($v=='')) $v='NULL';
if($t=='object' && gettype($v)=='string'){
$t='string'; //Если id шники uuid
}
if($t=='object'){
if (($v=='-1')||($v=='')) $v='NULL';
}else
if($t=='i1' || $t=='i2' || $t=='i4' || $t=='integer')
{ if($v=='') $v='NULL';
if($t=='i1' || $t=='i2' || $t=='i4' || $t=='integer'){
if($v=='') $v='NULL';
}else
if($t=='f8' || $t=='f4' || $t=='real' || $t=='double')
{ if($v=='')$v='NULL';
if($t=='f8' || $t=='f4' || $t=='real' || $t=='double'){
if($v=='')$v='NULL';
$v=str_replace(',','.',$v); //Разделитель целой и дробной части точка
}else
if($t=='b')
{ if($v=='') $v='NULL'; else
if($t=='b'){
if($v=='') $v='NULL'; else
if($v=='1') $v='true'; else
if($v=='0') $v='false';
}else
if($t=='string' || $t=='text' || $t=='dateTime' || $t=='time' || $t=='date' || $t=='file')
{ if($v=='')
{ $v='NULL';
}else
{
if($t=='string' || $t=='text' || $t=='dateTime' || $t=='time' || $t=='date' || $t=='file'){
if($v==''){
$v='NULL';
}else{
if(strpos($db_connstr, 'pgsql')!==false)
$v=str_replace("'","''",$v); //так как в SQL строку вставляется
else
$v=str_replace('\'','\\\'',$v); //так как в SQL строку вставляется
$v='\''.$v.'\'';
}
}else
{
}else{
$v='\''.$v.'\'';
}
return $v;
@ -83,24 +85,27 @@
function getValue($t,$v)
{
if($t=='object' && gettype($v)=='string') $t='string'; //Если id шники uuid
if($t=='object')
{ if (($v=='-1')||($v=='')) $v=null;
if($t=='object' && gettype($v)=='string'){
$t='string'; //Если id шники uuid
}
if($t=='object'){
if (($v=='-1')||($v=='')) $v=null;
}else
if($t=='i4' || $t=='integer')
{ if($v=='') $v=null;
if($t=='i4' || $t=='integer'){
if($v=='') $v=null;
}else
if($t=='f8')
{ if($v=='')$v=null;
if($t=='f8'){
if($v=='')$v=null;
$v=str_replace(',','.',$v); //Разделитель целой и дробной части точка
}else
if($t=='b')
{ if($v=='') $v=null; else
if($t=='b'){
if($v=='') $v=null; else
if($v=='1') $v=true; else
if($v=='0') $v=false;
}else
if($t=='string' || $t=='dateTime' || $t=='date')
{ if($v=='') $v=null;
if($t=='string' || $t=='dateTime' || $t=='date'){
if($v=='') $v=null;
}
return $v;
}
@ -150,14 +155,14 @@
//Функция для перевода текста без применения GetText
function __($text)
{
global $db,$lng;
global $db,$lng,$Schema;
$language_id=1;
if($lng=='kz') $language_id=2;
if($lng=='en') $language_id=3;
$result='';
$sql='select translation from main._translations where del=false and language_id='.$language_id.' and identifier=\''.$text.'\';';
$sql='select translation from '.$Schema.'_translations where del=false and language_id='.$language_id.' and identifier=\''.$text.'\';';
$res = NULL;
try
{
@ -213,6 +218,16 @@
}
set_exception_handler('special_handler'); //чтоб не пойманные исключения посылались в виде XML
//Схема базы по умолчанияю
if(!isset($Schema)) {
$Schema="";
}
//Тип идентификаторов
$idType="object";
if(!isset($idType)) {
$idType="object";
}
try
{
if(strpos($db_connstr, 'sqlite')!==false)
@ -228,16 +243,16 @@
}
//Пытаемся автоматически залогинется по GUID из COOKIE
if($_SESSION['USER_ID']==null && $_COOKIE['GUID']!=null)
/*if($_SESSION['USER_ID']==null && $_COOKIE['GUID']!=null)
{
$res = $db->query("select * from main.p__Login(null,null,null,'".$_COOKIE['GUID']."');");
$res = $db->query("select * from ".$Schema."p__Login(null,null,null,'".$_COOKIE['GUID']."');");
//$res = $db->query("select * from \"p__Login_1\"(null,null,null,'".$_COOKIE['GUID']."');");
if($res->rowCount()>0)
{
$result = $res->fetch(PDO::FETCH_ASSOC);
$_SESSION['USER_ID']=$result['id'];
}
}
}*/
$fn=filter_input(INPUT_GET, 'fn', FILTER_VALIDATE_INT, array('options'=>array('default'=>-1)));
$reqid=0; //id запроса "уникальный".
@ -283,7 +298,7 @@
$name=findFirstNode($reqNode, "type")->getAttribute("n");
$xmls='';
$sql='select xml from main._metadata where del=false and name=\''.$name.'\';';
$sql='select xml from '.$Schema.'_metadata where del=false and name=\''.$name.'\';';
$resX = $db->query($sql);
while ($rowX = $resX->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов
{
@ -309,7 +324,7 @@
//$allow=true;
$allow=false;
//$sql_query='select a.*,at.name from "_Access" a, "_Actions" at where a.del=false and at.id=a.action_id and at.name=\'Insert_'.$name.'\' and a.group_id in (select group_id from "_UsersGroups" where user_id='.$_SESSION['USER_ID'].');'
$sql_query='select main.p_getaccess('.getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID']).',\'Insert_'.$name.'\') as allow;';
$sql_query='select '.$Schema.'p_getaccess('.getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID']).',\'Insert_'.$name.'\') as allow;';
$res = $db->query($sql_query);
while ($row = $res->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов
@ -322,7 +337,7 @@
$allow=false;
//$sql_query='select a.*,at.name from "_Access" a, "_Actions" at where a.del=false and at.id=a.action_id and at.name=\'Update_'.$name.'\' and a.group_id in (select group_id from "_UsersGroups" where user_id='.$_SESSION['USER_ID'].');';
$sql_query='select main.p_getaccess('.getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID']).',\'Update_'.$name.'\') as allow;';
$sql_query='select '.$Schema.'p_getaccess('.getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID']).',\'Update_'.$name.'\') as allow;';
$res = $db->query($sql_query);
while ($row = $res->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов
{
@ -334,7 +349,7 @@
$allow=false;
//$sql_query='select a.*,at.name from "_Access" a, "_Actions" at where a.del=false and at.id=a.action_id and at.name=\'Delete_'.$name.'\' and a.group_id in (select group_id from "_UsersGroups" where user_id='.$_SESSION['USER_ID'].');';
$sql_query='select main.p_getaccess('.getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID']).',\'Delete_'.$name.'\') as allow;';
$sql_query='select '.$Schema.'p_getaccess('.getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID']).',\'Delete_'.$name.'\') as allow;';
$res = $db->query($sql_query);
while ($row = $res->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов
{
@ -372,7 +387,7 @@
$typename=findFirstNode($reqNode,"type")->getAttribute("n");
$xmls='';
$resX = $db->query('select xml from main._metadata where del=false and name=\''.$typename.'\';');
$resX = $db->query('select xml from '.$Schema.'_metadata where del=false and name=\''.$typename.'\';');
while ($rowX = $resX->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов
{
$xmls='<?xml version="1.0" encoding="UTF-8"?><metadata>'.parseGT($rowX['xml']).'</metadata>';
@ -493,7 +508,7 @@
$node_properties=findFirstNode($nodeType,"properties");
$xmls='';
$resX = $db->query('select xml from main._metadata where del=false and name=\''.$typename.'\';');
$resX = $db->query('select xml from '.$Schema.'_metadata where del=false and name=\''.$typename.'\';');
while ($rowX = $resX->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов
{
$xmls='<?xml version="1.0" encoding="UTF-8"?><metadata>'.parseGT($rowX['xml']).'</metadata>';
@ -617,7 +632,7 @@
$obj_id=$nodeType->getAttribute("id");
$xmls='';
$resX = $db->query('select xml from main._metadata where del=false and name=\''.$typename.'\';');
$resX = $db->query('select xml from '.$Schema.'_metadata where del=false and name=\''.$typename.'\';');
while ($rowX = $resX->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов
{
$xmls='<?xml version="1.0" encoding="UTF-8"?><metadata>'.parseGT($rowX['xml']).'</metadata>';
@ -672,7 +687,7 @@
$pagepos=$nTypeR->getAttribute("pp"); //текущяя страница page pos
$xmls='';
$resX = $db->query('select xml from main._metadata where del=false and name=\''.$typename.'\';');
$resX = $db->query('select xml from '.$Schema.'_metadata where del=false and name=\''.$typename.'\';');
while ($rowX = $resX->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов
{
$xmls='<?xml version="1.0" encoding="UTF-8"?><metadata>'.parseGT($rowX['xml']).'</metadata>';
@ -839,7 +854,7 @@
$idval=$node->getAttribute("id"); //Значение идентификатора
$xmls='';
$resX = $db->query('select xml from main._metadata where del=false and name=\''.$typename.'\';');
$resX = $db->query('select xml from '.$Schema.'_metadata where del=false and name=\''.$typename.'\';');
while ($rowX = $resX->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов
{
$xmls='<?xml version="1.0" encoding="UTF-8"?><metadata>'.parseGT($rowX['xml']).'</metadata>';
@ -883,7 +898,7 @@
}
$xmls='';
$resX = $db->query('select xml from main._metadata where del=false and name=\''.$typename.'\';');
$resX = $db->query('select xml from '.$Schema.'_metadata where del=false and name=\''.$typename.'\';');
while ($rowX = $resX->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов
{
$xmls='<?xml version="1.0" encoding="UTF-8"?><metadata>'.parseGT($rowX['xml']).'</metadata>';
@ -955,7 +970,7 @@
//if($propid==-1 || $propid=='') $propid='NULL';
$xmls='';
$resX = $db->query('select xml from main._metadata where del=false and name=\''.$typename.'\';');
$resX = $db->query('select xml from '.$Schema.'_metadata where del=false and name=\''.$typename.'\';');
while ($rowX = $resX->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов
{
$xmls='<?xml version="1.0" encoding="UTF-8"?><metadata>'.parseGT($rowX['xml']).'</metadata>';
@ -1051,7 +1066,7 @@
}elseif($cmd==1) //Logout
{
//filter_input(INPUT_COOKIE, 'S_HASH', FILTER_VALIDATE_INT, array('options'=>array('default'=>-1)));
$sql='delete from main._Logins where sessionid='.getSQLValue('string',$_COOKIE['GUID']).' and user_id='.getSQLValue('i4',$_SESSION['USER_ID']).';';
$sql='delete from '.$Schema.'_Logins where sessionid='.getSQLValue('string',$_COOKIE['GUID']).' and user_id='.getSQLValue('i4',$_SESSION['USER_ID']).';';
try
{ $db->exec($sql);
} catch (Exception $e)
@ -1082,7 +1097,7 @@
}else
{
$xs.=' <![CDATA[1]]><cmd><![CDATA['.$cmd.']]></cmd>'."\n";
$res = $db->query('select * from main.p__Login('.getSQLValue('i4',$_SESSION['USER_ID']).',null,null,null,null,null);');
$res = $db->query('select * from '.$Schema.'p__Login('.getSQLValue($idType,$_SESSION['USER_ID']).',null,null,null,null,null);');
if($row = $res->fetch(PDO::FETCH_ASSOC))
{
$xs.=' <name><![CDATA['.$row['name'].']]></name>'."\n";
@ -1103,7 +1118,7 @@
$name='';
$surname='';
$patronymic='';
$sql="select * from main.p__Login(".getSQLValue('i4',$_SESSION['USER_ID']).",'$login','$password',null,null,null);";
$sql="select * from ".$Schema."p__Login(".getSQLValue($idType,$_SESSION['USER_ID']).",'$login','$password',null,null,null);";
$res = $db->query($sql);
if($res->rowCount()>0)
{ $result = $res->fetch(PDO::FETCH_ASSOC);
@ -1139,7 +1154,7 @@
//Выбираем информацию о текущем пользователе
$name='';
$sql="select Coalesce(surname,'') || ' ' || Coalesce(name,'') || ' ' || Coalesce(patronymic,'') as name from main._users where id=".$_SESSION['USER_ID'].";";
$sql="select Coalesce(surname,'') || ' ' || Coalesce(name,'') || ' ' || Coalesce(patronymic,'') as name from ".$Schema."_users where id=".$_SESSION['USER_ID'].";";
$res = $db->query($sql);
if($res->rowCount()>0)
{ $result = $res->fetch(PDO::FETCH_ASSOC);
@ -1152,7 +1167,7 @@
$ext=$nTypeR->getAttribute("ext");
$xmls='';
$resX = $db->query('select xml from main._metadata where del=false and name=\''.$typename.'\';');
$resX = $db->query('select xml from '.$Schema.'_metadata where del=false and name=\''.$typename.'\';');
while ($rowX = $resX->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов
{
$xmls='<?xml version="1.0" encoding="UTF-8"?><metadata>'.parseGT($rowX['xml']).'</metadata>';
@ -1409,7 +1424,7 @@
$idval = $_REQUEST['i']; //Идентификатор поля в базе
$xmls='';
$resX = $db->query('select xml from main._metadata where del=false and name=\''.$typename.'\';');
$resX = $db->query('select xml from '.$Schema.'_metadata where del=false and name=\''.$typename.'\';');
while ($rowX = $resX->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов
{
$xmls='<?xml version="1.0" encoding="UTF-8"?><metadata>'.parseGT($rowX['xml']).'</metadata>';
@ -1437,7 +1452,7 @@
if($fnode->getAttribute("vt")=="blob") //Отправить файл клиенту из базы данных
{
$stmt = $db->prepare("SELECT \"$field\",length(\"$field\"),substring(\"$name\", position('_' IN \"$name\")+1) as name FROM main.\"$typename\" WHERE id='$idval'");
$stmt = $db->prepare("SELECT \"$field\",length(\"$field\"),substring(\"$name\", position('_' IN \"$name\")+1) as name FROM $Schema\"$typename\" WHERE id='$idval'");
$stmt->execute();
$stmt->bindColumn(1, $blob, PDO::PARAM_LOB);
$stmt->bindColumn(2, $size, PDO::PARAM_INT);