diff --git a/metadata/dbms/DBMSRecords.java b/metadata/dbms/DBMSRecords.java index caebcbd..c9df006 100644 --- a/metadata/dbms/DBMSRecords.java +++ b/metadata/dbms/DBMSRecords.java @@ -79,7 +79,7 @@ import tools.EmailUtility; import tools.User; @Controller -@SessionAttributes( { "user" }) //Сесионный объект +@SessionAttributes( { "user" }) //Сесионный объект! public class DBMSRecords implements ServletContextAware { //private static final Logger logger = LoggerFactory.getLogger(Translation.class); diff --git a/metadata/dbms/DBMSTree.java b/metadata/dbms/DBMSTree.java index 29e57c2..74ff483 100644 --- a/metadata/dbms/DBMSTree.java +++ b/metadata/dbms/DBMSTree.java @@ -40,7 +40,7 @@ import tools.User; import tools.XMLTools; @Controller -@SessionAttributes( { "user" }) //Сесионный объект +@SessionAttributes( { "user" }) //Сесионный объект! public class DBMSTree implements ServletContextAware { private static final Logger logger = LoggerFactory.getLogger(kz.goodssales.GoodsSales.dbms.DBMSTree.class); diff --git a/metadata/dbms/TCGallery.js b/metadata/dbms/TCGallery.js index 8fac1d7..916ac10 100644 --- a/metadata/dbms/TCGallery.js +++ b/metadata/dbms/TCGallery.js @@ -146,9 +146,31 @@ function TCGallery(parent) } //Галерея изображений на странице товара (Двигается в право в лево) -function TCGallery2(parent) +class TCGallery2 { - this.addImage = function(small) + constructor(parent) { + this.parent=parent; //Элемент который будем двигать в право в лево + + this.mas = new Array(); //Массим элементов с рисуночками + this.pos=0; + this.ower=true; + + this.iWidth=200; //Размер картинки по умолчанию + + // повторить с интервалом 2 секунды + setInterval(() => this.resize(), 1000); + } + + //Подстраиваюсь под размер родительского компонента + resize() + { + let pDiv = this.parent.parentElement; + + this.parent.style.width = pDiv.offsetWidth+'px'; + } + + //Добавляю кнопочки для переключения картинок + addImage(small) { this.mas.push({div: small, sell: false}); @@ -156,9 +178,9 @@ function TCGallery2(parent) { return function() { if(!thiz.ower) return; - - pos=-1; - for(i=0;i'; xml+=''; @@ -1004,7 +1014,7 @@ class EdtRec { this.showProgressBar(); } - } + }*/ } } } diff --git a/metadata/dbms/login.js b/metadata/dbms/login.js index 6f6c253..05129e1 100644 --- a/metadata/dbms/login.js +++ b/metadata/dbms/login.js @@ -1,22 +1,15 @@ function TUser() { - //Функция запрашивает информацию о текущем пользователе с сервера - this.LoadData = function() - { - var r = new TRequest(this); - var xs=''; - if(r.callServer(ScriptName,xs)) - { - this.showShadow(true); - } - }; this.applyReq=function(req,fn,node) { //alert(getXMLNodeSerialisation(node)); this.showShadow(false); - + if (fn==-1) + { + alert(findFirstNode(node,'#cdata-section').nodeValue); + }else if(fn==7) { var nCmd=findFirstNode(node, "cmd"); @@ -43,16 +36,29 @@ function TUser() //configGUIbyAccessLevel(); //var shadow=document.getElementById("shadow"); //if(shadow.parentNode!=null) shadow.parentNode.removeChild(shadow); + + //Информируем слушатеелй о логине + for(i=0;i'; + + //alert('xs='+xs); + + this.request.callServer(ScriptName,xs); + }; TLogin.LoginIsOk=0; //login in TLogin.LoginIsError=1; //Invalid password and / or login. @@ -396,7 +426,7 @@ function TLogin() this.m_html=false; this.request = new TRequest(this); -} +}*/ //Display password recovery form function showRestoreForm() diff --git a/metadata/dbms/records.php b/metadata/dbms/records.php index 0b5fdc3..b6f0f3f 100644 --- a/metadata/dbms/records.php +++ b/metadata/dbms/records.php @@ -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=''.parseGT($rowX['xml']).''; @@ -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=''.parseGT($rowX['xml']).''; @@ -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=''.parseGT($rowX['xml']).''; @@ -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=''.parseGT($rowX['xml']).''; @@ -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=''.parseGT($rowX['xml']).''; @@ -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=''.parseGT($rowX['xml']).''; @@ -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=''.parseGT($rowX['xml']).''; @@ -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.=' '."\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.=' '."\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=''.parseGT($rowX['xml']).''; @@ -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=''.parseGT($rowX['xml']).''; @@ -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); diff --git a/metadata/dbms/showrecord.js b/metadata/dbms/showrecord.js index 0f5d649..5073240 100644 --- a/metadata/dbms/showrecord.js +++ b/metadata/dbms/showrecord.js @@ -332,7 +332,7 @@ class SRec id=nodeProp.getAttribute("id"); value=findFirstNode(nodeProp, '#cdata-section').nodeValue; prop.value=id; - propvis=document.getElementById('filter_'+this.uid+'_'+prop_id+'_visible'); + let propvis=document.getElementById('filter_'+this.uid+'_'+prop_id+'_visible'); propvis.value=value; propvis.select(); }else @@ -345,7 +345,8 @@ class SRec { if (nodeProp.nodeName=="record") { - if (i%2==0) bgColor='white'; else bgColor='#e0e0e0'; + let bgColor='#e0e0e0'; + if (i%2==0) bgColor='white'; id=nodeProp.getAttribute("id"); value=getCdataValue(nodeProp); value=value.replace(/"/g, """); value=value.replace(/'/g, "\\'"); @@ -370,8 +371,8 @@ class SRec //Set the value for the object filter with a text field search setFilterVal(id,caption,prop_id) { - prop=document.getElementById('filter_'+this.uid+'_'+prop_id); - propvis=document.getElementById('filter_'+this.uid+'_'+prop_id+'_visible'); + let prop=document.getElementById('filter_'+this.uid+'_'+prop_id); + let propvis=document.getElementById('filter_'+this.uid+'_'+prop_id+'_visible'); if ((prop!=null)&&(propvis!=null)) { prop.value=id; @@ -944,7 +945,7 @@ class SRec let nodeFilter=findNodeOnPath(nodeType,"objects-list/filter"); if(nodeFilter!=null) //Create HTML elements by XML filter. { - columnNode=nodeFilter.firstChild; + let columnNode=nodeFilter.firstChild; while (columnNode != null) { if (columnNode.nodeName==="column") diff --git a/metadata/dbms/tools.js b/metadata/dbms/tools.js index 4bc9b13..cd1c1c7 100644 --- a/metadata/dbms/tools.js +++ b/metadata/dbms/tools.js @@ -1,5 +1,41 @@ //Copyright (C) Ivanov I.M. irigm@mail.ru +//Расширить плитку чтобы она занимала всю штртну области +function resizeDivTile(parent,minWidth) +{ + if(typeof parent == 'string') parent=document.getElementById(parent); + if(parent==null) return; + var margin=2; //С права и слева по одному пикселю то получается два + var dx=Math.floor(parent.offsetWidth/(minWidth+margin)); + + //console.log("parent.offsetWidth="+parent.offsetWidth+" minWidth="+minWidth+" margin="+margin+" dx="+dx); + + var addW=0; + for(var i=0;i=parent.offsetWidth/(minWidth+margin+i)) + { + addW=i-1; + console.log("addW="+addW+" parent.offsetWidth/(minWidth+margin+i)="+(parent.offsetWidth/(minWidth+margin+i))); + break; + } + } + + for(var i = 0; i < parent.children.length; i++) { + //console.log(parent.children[i].tagName); + if(parent.children[i].tagName.toUpperCase()=='DIV') + { + parent.children[i].style.width = (minWidth+addW)+"px"; + } + } + //console.log("minWidth+addW="+(minWidth+addW)); + + //Центрирую, путем добавления пространства с права + parent.style.paddingLeft = Math.floor((parent.offsetWidth-(dx*(minWidth+margin+addW)))/2) + "px"; + + //console.log("parent.style.paddingLeft="+parent.style.paddingLeft+" calc="+(Math.floor((parent.offsetWidth-(dx*(minWidth+margin+addW)))/2))); +} + //Получить уникальный идентификатор из глобальной переменной var UID=0; function getUID() diff --git a/metadata/include/captcha.php b/metadata/include/captcha.php new file mode 100644 index 0000000..947b27a --- /dev/null +++ b/metadata/include/captcha.php @@ -0,0 +1,57 @@ + \ No newline at end of file diff --git a/metadata/include/fonts/cour.ttf b/metadata/include/fonts/cour.ttf new file mode 100644 index 0000000..2c99e08 Binary files /dev/null and b/metadata/include/fonts/cour.ttf differ