diff --git a/admin.js b/admin.js index e161b25..85b86fe 100644 --- a/admin.js +++ b/admin.js @@ -88,7 +88,7 @@ module.exports.set_obj=(inp,cook,res)=>{ } } -module.exports.reg = (inp,cook,res)=>{ +module.exports.new_user = (inp,cook,res)=>{ try { let uuid = func.get_uuid(inp["login"]); let admin = inp["admin"]; @@ -131,4 +131,19 @@ module.exports.reg = (inp,cook,res)=>{ } catch (error) { func.log("backend user registration error - "+error); } +} + +module.exports.find_user = (inp,cook,res)=>{ + try { + db.fva("users","login",inp["login"],`${inp["from"]},${inp["load_interval"]}`,(data)=>{ + if(data["length"] > 0){ + res.send({body:data,out:"good"}); + } + else{ + res.send({out:"bad"}); + } + },true) + } catch (error) { + func.log("backend single object loading err0r - "+error); + } } \ No newline at end of file diff --git a/db.js b/db.js index b64e727..2c778ad 100644 --- a/db.js +++ b/db.js @@ -1,6 +1,6 @@ const mysql = require('mysql'); const vars = require('./vars'); -const db_host = "db"; +const db_host = "localhost"; const admin = mysql.createConnection({ host: db_host, @@ -39,7 +39,7 @@ module.exports.dl = (table,key,value,callback,prevs = false) => { // get values where module.exports.gv = (table,key,value,callback,prevs = false) => { - // console.log('SELECT * FROM `'+table+'` WHERE `'+key+'` = '+value); + // console.log(`SELECT * FROM ${table} WHERE ${key} = ${value}`); db(prevs).query(`SELECT * FROM ${table} WHERE ${key} = ${value}`, (err, rows, fields) => { if (err) { console.log("sql err"); @@ -52,7 +52,7 @@ module.exports.gv = (table,key,value,callback,prevs = false) => { // get all from table module.exports.gav = (table,limit = "0",callback,prevs = false) => { - // console.log('SELECT * FROM `'+table+'` WHERE `'+key+'` = '+value); + // console.log(`SELECT * FROM ${table} WHERE 1 ${limit}`); limit = (limit != "0")? `LIMIT ${limit}`:""; db(prevs).query(`SELECT * FROM ${table} WHERE 1 ${limit}`, (err, rows, fields) => { if (err) { @@ -92,6 +92,31 @@ module.exports.sv = (table,key,value,ekey,evalue,callback,prevs = false,no_srt = }) } +module.exports.fv = (table,key,value,callback,prevs = false) => { + // console.log(`UPDATE ${table} SET ${key} = ${value} WHERE ${ekey} = '${evalue}'`); + db(prevs).query(`SELECT * FROM ${table} WHERE ${key} LIKE '%${value}%'`, (err , rows) => { + if (err) { + console.log("sql err"); + throw err; + }else{ + if(callback)callback(rows); + } + }) +} + +module.exports.fva = (table,key,value,limit = "0",callback,prevs = false) => { + // console.log(`UPDATE ${table} SET ${key} = ${value} WHERE ${ekey} = '${evalue}'`); + limit = (limit != "0")? `LIMIT ${limit}`:""; + db(prevs).query(`SELECT * FROM ${table} WHERE ${key} LIKE '%${value}%' ${limit}`, (err , rows) => { + if (err) { + console.log("sql err"); + throw err; + }else{ + if(callback)callback(rows); + } + }) +} + module.exports.uv = (table,keys,values,ekey,evalue,callback,prevs = false,no_srt = false) => { values = values.split("."); keys = keys.split("."); diff --git a/index.js b/index.js index 7ea4ece..12231fd 100644 --- a/index.js +++ b/index.js @@ -212,7 +212,7 @@ app.get("/get_logs", (req,res) => { try{let cook = req.cookies;func.sid(cook,res,()=>{func.logs_file(res);})} catch (error) {func.log("router logs download error - "+error);} }) -app.post("/admin/obj/new", (req,res) => { +app.post("/admin/objects/new", (req,res) => { try{ let inp = req.body; let cook = req.cookies; @@ -223,7 +223,7 @@ app.post("/admin/obj/new", (req,res) => { func.log("router object creating error - "+error); } }) -app.post("/admin/obj/edit", (req,res) => { +app.post("/admin/objects/edit", (req,res) => { try{ let inp = req.body; let cook = req.cookies; @@ -234,7 +234,7 @@ app.post("/admin/obj/edit", (req,res) => { func.log("router object creating error - "+error); } }) -app.post("/admin/obj/del", (req,res) => { +app.post("/admin/objects/delete", (req,res) => { try{ let inp = req.body; let cook = req.cookies; @@ -245,7 +245,18 @@ app.post("/admin/obj/del", (req,res) => { func.log("router object creating error - "+error); } }) -app.post("/admin/new/group", (req,res) => { +app.post("/admin/objects/find", (req,res) => { + try{ + let inp = req.body; + let cook = req.cookies; + func.sid(cook,res,()=>{ + obj.find(inp,cook,res); + },true,true) + } catch (error) { + func.log("router object creating error - "+error); + } +}) +app.post("/admin/groups/new", (req,res) => { try{ let inp = req.body; let cook = req.cookies; @@ -256,7 +267,7 @@ app.post("/admin/new/group", (req,res) => { func.log("router object creating error - "+error); } }) -app.post("/admin/delete/group", (req,res) => { +app.post("/admin/groups/delete", (req,res) => { try{ let inp = req.body; let cook = req.cookies; @@ -278,12 +289,12 @@ app.post("/admin/users/get", (req,res) => { func.log("router object creating error - "+error); } }) -app.post('/admin/users/reg', (req, res) => { +app.post('/admin/users/new', (req, res) => { try{ let inp = req.body; let cook = req.cookies; func.sid(cook,res,()=>{ - admin.reg(inp,cook,res); + admin.new_user(inp,cook,res); },true,true) } catch (error) { func.log("router registration error - "+error); @@ -300,18 +311,7 @@ app.post("/admin/users/edit", (req,res) => { func.log("router object creating error - "+error); } }) -app.post("/admin/users/get/user", (req,res) => { - try{ - let inp = req.body; - let cook = req.cookies; - func.sid(cook,res,()=>{ - admin.get_users(inp,cook,res); - },true,true) - } catch (error) { - func.log("router object creating error - "+error); - } -}) -app.post("/admin/users/del/user", (req,res) => { +app.post("/admin/users/delete", (req,res) => { try{ let inp = req.body; let cook = req.cookies; @@ -322,6 +322,17 @@ app.post("/admin/users/del/user", (req,res) => { func.log("router object creating error - "+error); } }) +app.post("/admin/users/find", (req,res) => { + try{ + let inp = req.body; + let cook = req.cookies; + func.sid(cook,res,()=>{ + admin.find_user(inp,cook,res); + },true,true) + } catch (error) { + func.log("router object creating error - "+error); + } +}) diff --git a/object.js b/object.js index d85c982..218683c 100644 --- a/object.js +++ b/object.js @@ -1,11 +1,10 @@ -const { name } = require('ejs'); const db = require('./db'); const func = require('./func'); const vars = require('./vars'); module.exports.loads = (inp,cook,res)=>{ try { - db.ggv("objects","`name`,`id`,`height`,`width`,`description`,`gid`","gid",`${inp["gid"]}`,(odata)=>{ + db.ggv("objects","`name`,`id`,`height`,`width`,`description`,`cost`,`gid`","gid",`${inp["gid"]}`,(odata)=>{ // func.log(odata); res.send({out:"good",body:odata}); }) @@ -34,7 +33,7 @@ module.exports.new = (inp,cook,res)=>{ res.send({out:"bad",err:"name"}); } else if (db_name[0] == null){ - db.nr("objects","`name`,`img`,`height`,`width`,`description`,`gid`",`'${inp["name"]}/g/${gname["name"]}','${inp["img"]}','${inp["height"]}','${inp["width"]}','${inp["desc"]}','${inp["gid"]}'`,true); + db.nr("objects","`cost`,`name`,`img`,`height`,`width`,`description`,`gid`",`'${inp["cost"]}','${inp["name"]}/g/${gname["name"]}','${inp["img"]}','${inp["height"]}','${inp["width"]}','${inp["desc"]}','${inp["gid"]}'`,true); db.sv("object_groups","count",`(count + 1)`,"id",inp["gid"],()=>{},true,true) func.log(`admin object created name:${inp["name"]} group:${gname["name"]}`); res.send({out:"good"}); @@ -91,11 +90,12 @@ module.exports.save = (inp,cook,res)=>{ module.exports.del = (inp,cook,res)=>{ try { let name = inp["name"].split("/")[0]; - let group = inp["name"].split("/").at(-1); - db.dl("objects",`id`,`'${inp["id"]}' AND gid = '${inp["gid"]}'`,()=>{ - func.log(`admin group deleted ${name} from ${group}`); - res.send({out:"good"}); - },true); + db.ggv("object_groups","name","id",inp["gid"],(gname)=>{let group = gname[0]["name"] + db.dl("objects",`id`,`'${inp["id"]}' AND gid = '${inp["gid"]}'`,()=>{ + func.log(`admin group deleted name:${name} group:${group}`); + res.send({out:"good"}); + },true); + }) } catch (error) { func.log("backend single object loading err0r - "+error); } @@ -139,4 +139,14 @@ module.exports.del_group = (inp,cook,res)=>{ } catch (error) { func.log("backend single object loading err0r - "+error); } +} + +module.exports.find = (inp,cook,res)=>{ + try { + db.fv("objects",`SUBSTRING_INDEX(name,'/',1)`,inp["name"],(db_res)=>{ + res.send({out:"good",body:db_res}); + },true); + } catch (error) { + func.log("backend single object loading err0r - "+error); + } } \ No newline at end of file diff --git a/public/lib/fn.js b/public/lib/fn.js index f8dda21..678d282 100644 --- a/public/lib/fn.js +++ b/public/lib/fn.js @@ -67,7 +67,7 @@ function check_sid(redirect = true){ } function logout(redirect = true) { - let dialog = confirm(`${lang("logout")}?`); + let dialog = confirm(`выйти?`); if(dialog){ clear_ck(redirect); } diff --git a/public/lib/inter.js b/public/lib/inter.js index df5d971..700ebb0 100644 --- a/public/lib/inter.js +++ b/public/lib/inter.js @@ -32,27 +32,20 @@ function create(clas,x,y,body,id,size){ } } else if (db_data != null){ - if ($.cookie("cache") == "true"){ - if (objs_imgs[main_clas] == null){ - load_obj(main_clas,"`img`",(odata)=>{ - objs_imgs[main_clas] = odata["img"]; - make(odata["img"]); - }) - } - else{ - make(objs_imgs[main_clas]) - } - } - else{ + if (objs_imgs[main_clas] == null){ load_obj(main_clas,"`img`",(odata)=>{ objs_imgs[main_clas] = odata["img"]; make(odata["img"]); }) } + else{ + make(objs_imgs[main_clas]) + } } function make(img){ obj.src = img; - obj.title = `${db_data["name"].replace("$"," ").split("/g")[0]}\n${db_data["description"]}\n${lang("width")}:${db_data["width"]}см ${lang("height")}:${db_data["height"]}см`; + obj.title = `${db_data["name"].replace("$"," ").split("/g")[0]}\nцена:${db_data["cost"]}\n${db_data["description"]}\nширина:${db_data["width"]}см высота:${db_data["height"]}см`; + obj.setAttribute("cost",db_data["cost"]) // drag.transform = `translate(${drag.getAttribute("data-y")}px, ${drag.getAttribute("data-y")}px) scale(${db_data["width"] * 2} ${db_data["height"] * 2})`; if(size){ obj.style.width = `${db_data["width"] * 2}px`; @@ -68,6 +61,7 @@ function resize_drags(){ document.getElementById('drags').setAttribute("data-x",document.getElementsByClassName("wall")[0].getBoundingClientRect().left.toString()+"px"); document.getElementById('drags').style.left = document.getElementsByClassName("wall")[0].getBoundingClientRect().left.toString()+"px"; document.getElementById('drags').style.width = document.getElementsByClassName("wall")[0].style.width; + document.getElementsByClassName("zones")[0].style.height = document.getElementsByClassName("wall")[0].style.height; drag_start(); } @@ -96,6 +90,23 @@ function wall_size_change(type,value){ } } +function calc_total(){ + let total=0; + Object.entries(objs).forEach(([key,value]) => { + if(key != "height"&&key!="width"&key!="total"){ + // console.log(key,value); + // console.log(Object.keys(value).length); + // console.log(objs_store[key]); + if(objs_store[key] != null){ + total += parseInt(parseInt(objs_store[key]["cost"]) * Object.keys(value).length); + } + } + // console.log(Object.keys(objs).at(-1)); + }); + // return total; + document.getElementById("proj_cost").innerText = total; +} + function load(objss){ // objs = JSON.parse($.cookie("objs")); // console.log(objs); @@ -120,12 +131,13 @@ function load(objss){ } }); resize_drags(); + calc_total() } function load_proj_cloud(){ proj_from = "cloud"; document.getElementById("drags").innerHTML = ""; - document.getElementById("top_panel_center").innerText = `${lang("loading")} ${proj_name} ${lang("from")} ${lang("cloud")}`; + document.getElementById("top_panel_center").innerText = `загрузка ${proj_name} из облака`; $.post( "/load_proj",{name:proj_name}) .done(function( res ) { if(res["out"] == "good"){ @@ -134,7 +146,7 @@ function load_proj_cloud(){ // console.log(JSON.parse(res["body"])); // $.cookie("objs",res["body"]); load(JSON.parse(res["body"])); - document.getElementById("top_panel_center").innerText = `${proj_name} (${lang("cloud")})`; + document.getElementById("top_panel_center").innerText = `${proj_name} (облако)`; } else if(res["out"] == "bad proj"){ console.log("bad"); @@ -151,7 +163,7 @@ function load_proj_local(){ if(localStorage.getItem(proj_name) == null){ save_local() } - document.getElementById("top_panel_center").innerText = `${proj_name} (${lang("local")})`; + document.getElementById("top_panel_center").innerText = `${proj_name} (локальное хранилище)`; document.getElementById("drags").innerHTML = ""; load(JSON.parse(localStorage.getItem(proj_name))); } @@ -199,7 +211,7 @@ function load_objs(callback){ if(res["out"] == "good"){ // console.log(res["body"]); res["body"].forEach(element => { - objs_store[`${element["name"]}`] = {description:element["description"],height:element["height"],width:element["width"],id:element["id"],name:element["name"]} + objs_store[`${element["name"]}`] = {description:element["description"],height:element["height"],width:element["width"],id:element["id"],name:element["name"],cost:element["cost"]} }); callback(res["body"]); } @@ -254,22 +266,22 @@ interact('.trash').dropzone({ accept: '.drag', overlap: 0.2, - ondragenter: function (event) { - var drag = event.relatedTarget; - var zone = event.target; - console.log(drag.classList); - if(objs[drag.classList[0]] != null&&objs[drag.classList[0]][drag.id] != null) delete objs[drag.classList[0]][drag.id]; - zone.classList.add('drop-target'); - drag.classList.add('can-drop'); + ondragenter: function (event) {var drag = event.relatedTarget;var zone = event.target; + + // console.log(drag.classList); + if(objs[drag.classList[0]] != null&&objs[drag.classList[0]][drag.id] != null) { + delete objs[drag.classList[0]][drag.id]; + } + calc_total() + + zone.classList.add('drop-target');drag.classList.add('can-drop'); drag.remove(); }, ondragleave: function (event) {var drag = event.relatedTarget;var zone = event.target;zone.classList.remove('drop-target');drag.classList.remove('in_zone');drag.classList.remove('can-drop');}, - ondrop: function (event) { - var drag = event.relatedTarget; + ondrop: function (event) {var drag = event.relatedTarget; // console.log(drag.id); // console.log(objs); - drag.classList.add('in_zone') - drag.classList.remove('can-drop') + drag.classList.add('in_zone');drag.classList.remove('can-drop'); }, ondropdeactivate: function (event) {var zone = event.target;zone.classList.remove('drop-active');zone.classList.remove('drop-target');} }) @@ -278,23 +290,25 @@ interact('.dropzone').dropzone({ accept: '.drag', overlap: 0.5, - ondragenter: function (event) { - var drag = event.relatedTarget; - var zone = event.target; + ondragenter: function (event) {var drag = event.relatedTarget;var zone = event.target; + + if (objs[drag.classList[0]] == null){ + objs[drag.classList[0]] = {}; + } if(drag.id == "none") drag.id = get_id(drag.classList[0]); - zone.classList.add('drop-target'); - drag.classList.add('can-drop'); + if (objs[drag.classList[0]][drag.id] == null){ + objs[drag.classList[0]][drag.id] = {}; + calc_total() + } + + zone.classList.add('drop-target');drag.classList.add('can-drop'); }, ondragleave: function (event) {var drag = event.relatedTarget;var zone = event.target;zone.classList.remove('drop-target');drag.classList.remove('in_zone');drag.classList.remove('can-drop');}, - ondrop: function (event) { - var drag = event.relatedTarget - // console.log(drag.classList[0]); - if (objs[drag.classList[0]] == null) objs[drag.classList[0]] = {}; + ondrop: function (event) {var drag = event.relatedTarget + objs[drag.classList[0]][drag.id] = {y:drag.getAttribute('data-y'),x:drag.getAttribute('data-x'),body:drag.innerHTML}; - // console.log(objs); - // $.cookie("objs",JSON.stringify(objs)); - drag.classList.add('in_zone') - drag.classList.remove('can-drop') + + drag.classList.add('in_zone');drag.classList.remove('can-drop'); }, ondropdeactivate: function (event) {var zone = event.target;zone.classList.remove('drop-active');zone.classList.remove('drop-target');} }) @@ -303,14 +317,11 @@ interact('.createzone').dropzone({ accept: '.spawn', overlap: 0.2, - ondragenter: function (event) { - var drag = event.relatedTarget; - var zone = event.target;zone.classList.add('drop-target'); - drag.classList.add('can-drop'); + ondragenter: function (event) {var drag = event.relatedTarget;var zone = event.target; + zone.classList.add('drop-target');drag.classList.add('can-drop'); }, - ondragleave: function (event) { - var drag = event.relatedTarget; - var zone = event.target; + ondragleave: function (event) {var drag = event.relatedTarget;var zone = event.target; + if(drag.classList[1] == "spawn" && drag.classList[0] == zone.classList[0]){ get_obj(drag.classList[0],(db_data)=>{ // drag.transform = `translate(${drag.getAttribute("data-y")}px, ${drag.getAttribute("data-y")}px) scale(${db_data["width"] * 2} ${db_data["height"] * 2})`; @@ -321,12 +332,15 @@ interact('.createzone').dropzone({ let x = zone.getBoundingClientRect().left - document.getElementById("drags").getBoundingClientRect().left; let y = zone.getBoundingClientRect().top - document.getElementById("drags").getBoundingClientRect().top; create(`${zone.classList[0]} spawn drag`,x,y,`${zone.classList[0]}`,`none`); + drag.classList.remove('spawn'); } zone.classList.remove('drop-target'); }, - ondrop: function (event) {var drag = event.relatedTargetdrag.classList.remove('in_zone');drag.classList.remove('can-drop');}, - ondropdeactivate: function (event) {var zone = event.target;zone.classList.remove('drop-active');zone.classList.remove('drop-target');} + ondrop: function (event) {var drag = event.relatedTarget; + drag.classList.remove('in_zone');drag.classList.remove('can-drop');}, + ondropdeactivate: function (event) {var zone = event.target; + zone.classList.remove('drop-active');zone.classList.remove('drop-target');} }) function drag_start() { diff --git a/views/admin.ejs b/views/admin.ejs index 543288f..a646cfd 100644 --- a/views/admin.ejs +++ b/views/admin.ejs @@ -7,22 +7,24 @@ } -
Option1
Option2
Option3
Option4
" // document.body.appendChild(menu) @@ -104,7 +102,7 @@ hide_menus(); let menu = document.getElementById("project_menu"); menu.style.display = 'block'; - menu.style = `top:${e.target.getBoundingClientRect().top+30}px;left:${e.target.getBoundingClientRect().left}px`; + menu.style = `top:${e.target.getBoundingClientRect().top + 25}px;left:${e.target.getBoundingClientRect().left - 20}px`; // menu.onmouseleave = () => menu.style.display = 'none'; // menu.innerHTML = "Option1
Option2
Option3
Option4
" // document.body.appendChild(menu) @@ -117,10 +115,10 @@ menu.setAttribute("login_pass",document.getElementById(`pass_${e.target.classList[0]}`).innerText); menu.setAttribute("login_admin",document.getElementById(`admin_${e.target.classList[0]}`).innerText); menu.style.display = 'block'; - menu.style = `top:${e.target.getBoundingClientRect().top+30}px;left:${e.target.getBoundingClientRect().left-40}px`; + menu.style = `top:${e.target.getBoundingClientRect().top + 25}px;left:${e.target.getBoundingClientRect().left - 20}px`; // menu.onmouseleave = () => menu.style.display = 'none'; // menu.innerHTML = "Option1
Option2
Option3
Option4
" - // document.body.appendChild(menu) + // document.body.appendChild(menu)s } else if(e.target.id == "object_menu"){ @@ -133,8 +131,11 @@ menu.setAttribute("obj_height",obj.getAttribute("height")); menu.setAttribute("obj_width",obj.getAttribute("width")); menu.setAttribute("obj_id",obj.getAttribute("obj_id")); + menu.setAttribute("obj_cost",obj.getAttribute("cost")) + menu.setAttribute("obj_gid",obj.getAttribute("gid")) menu.style.display = 'block'; - menu.style = `top:${e.target.getBoundingClientRect().top+30}px;left:${e.target.getBoundingClientRect().left-40}px`; + // menu.style = `top:${e.target.getBoundingClientRect().top+27}px;left:${e.target.getBoundingClientRect().left-13}px`; + menu.style = `top:${e.target.getBoundingClientRect().top + 40}px;left:${e.target.getBoundingClientRect().left - 5}px`; // menu.onmouseleave = () => menu.style.display = 'none'; // menu.innerHTML = "Option1
Option2
Option3
Option4
" // document.body.appendChild(menu) diff --git a/views/login.ejs b/views/login.ejs index 0be5c95..53242af 100644 --- a/views/login.ejs +++ b/views/login.ejs @@ -10,16 +10,18 @@ -wrong password or login
"; + if(login!=""&&pass!=""){ + $.post( "/back_login", { login:login,pass:pass,sid:sid }) + .done(function( res ) { + if (res["out"] == "bad"){ + console.log(res["err"]); + if (res["err"] == "user" || res["err"] == "pass"){ + document.querySelector("#res").innerHTML = "wrong password or login
"; + } } - } - else{ - if(res["out"] == "goto"){ - // postForm(res["url"], res["args"]); - goto(res["url"]); + else{ + if(res["out"] == "goto"){ + // postForm(res["url"], res["args"]); + goto(res["url"]); + } + // if(res["out"] == "logged"){ + // // postForm(res["url"], res["args"]); + // // document.querySelector("#res").innerHTML = `user already logged in from sid - ${res["sid"]}
user already logged in from sid - ${res["sid"]}