diff --git a/db.js b/db.js index 63a7fae..5c69272 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, @@ -68,6 +68,7 @@ module.exports.gav = (table,limit = "0",callback,prevs = false) => { module.exports.ggv = (table,ekey,key,value,callback,prevs = false) => { // console.log('SELECT * FROM `'+table+'` WHERE `'+key+'` = '+value); db(prevs).query(`SELECT ${ekey} FROM ${table} WHERE ${key} = ${value}`, (err, rows, fields) => { + // console.log(`SELECT ${ekey} FROM ${table} WHERE ${key} = ${value}`); if (err) { console.log("sql err"); throw err; @@ -78,8 +79,9 @@ module.exports.ggv = (table,ekey,key,value,callback,prevs = false) => { } // set value where -module.exports.sv = (table,key,value,ekey,evalue,callback,prevs = false) => { - db(prevs).query(`UPDATE ${table} SET ${key} = '${value}' WHERE ${ekey} = '${evalue}'`, (err , rows) => { +module.exports.sv = (table,key,value,ekey,evalue,callback,prevs = false,no_srt = false) => { + value = (no_srt)? value:`'${value}'`; + db(prevs).query(`UPDATE ${table} SET ${key} = ${value} WHERE ${ekey} = '${evalue}'`, (err , rows) => { // console.log("UPDATE `"+table+"` SET `"+key+"` = '"+value+"' WHERE `"+ekey+"` = '"+evalue+"'"); if (err) { console.log("sql err"); @@ -90,13 +92,14 @@ module.exports.sv = (table,key,value,ekey,evalue,callback,prevs = false) => { }) } // new record -module.exports.nr = (table,keys,values,prevs = false) =>{ +module.exports.nr = (table,keys,values,prevs = false,callback) =>{ // console.log('INSERT INTO `'+table+'`('+keys+') VALUES ('+values+')'); db(prevs).query(`INSERT INTO ${table} (${keys}) VALUES (${values})`,(err,res) =>{ if (err) { console.log("sql err"); throw err; }else{ + if(callback)callback(); return true; } }) diff --git a/func.js b/func.js index afcdecd..88ed931 100644 --- a/func.js +++ b/func.js @@ -120,8 +120,8 @@ module.exports.logs_file = (res)=>{ } -module.exports.get_uuid = (name = "") =>{ - name = (name != "")? this.encrypt(name,"name"):""; +module.exports.get_uuid = (name = "/") =>{ + if (name != "/") name = this.encrypt(name,"name"); let unid = uuid.v4() + '%%'+name+'#e'+(621); return unid; } diff --git a/index.js b/index.js index c9a8c5e..8a02e90 100644 --- a/index.js +++ b/index.js @@ -166,6 +166,18 @@ app.post("/get_obj", (req,res) => { func.log("router single object getting error - "+error); } }) +app.post("/get_groups", (req,res) => { + try{ + let inp = req.body; + let cook = req.cookies; + // func.log(inp["name"]); + func.sid(cook,res,()=>{ + obj.load_groups(inp,cook,res); + }) + } catch (error) { + func.log("router single object getting error - "+error); + } +}) /// admin app.get("/admin", (req,res) =>{ try { @@ -211,6 +223,28 @@ app.post("/new_obj", (req,res) => { func.log("router object creating error - "+error); } }) +app.post("/admin/new/group", (req,res) => { + try{ + let inp = req.body; + let cook = req.cookies; + func.sid(cook,res,()=>{ + obj.new_group(inp,cook,res); + },true,true) + } catch (error) { + func.log("router object creating error - "+error); + } +}) +app.post("/admin/delete/group", (req,res) => { + try{ + let inp = req.body; + let cook = req.cookies; + func.sid(cook,res,()=>{ + obj.del_group(inp,cook,res); + },true,true) + } catch (error) { + func.log("router object creating error - "+error); + } +}) app.post("/admin/users/get", (req,res) => { try{ let inp = req.body; diff --git a/object.js b/object.js index 9194230..1a50bbd 100644 --- a/object.js +++ b/object.js @@ -1,10 +1,11 @@ +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",0,(odata)=>{ + db.ggv("objects","`name`,`id`,`height`,`width`,`description`,`gid`","gid",`${inp["gid"]}`,(odata)=>{ // func.log(odata); res.send({out:"good",body:odata}); }) @@ -27,16 +28,63 @@ module.exports.load = (inp,cook,res)=>{ module.exports.new = (inp,cook,res)=>{ try { - db.ggv("objects","id","name",`'${inp["name"]}'`,(db_name)=>{db_name= db_name[0] - if(db_name != null){ + db.ggv("object_groups","name","id",`'${inp["gid"]}'`,(gname)=>{gname = gname[0] + db.ggv("objects","name","gid",`'${inp["gid"]}' AND name = '${inp["name"]}/g/${gname["name"]}'`,(db_name)=>{ + if(db_name[0] != null){ res.send({out:"bad",err:"name"}); } - else if (db_name == null){ - db.nr("objects","`name`,`img`,`height`,`width`,`description`",`'${inp["name"]}','${inp["img"]}','${inp["height"]}','${inp["width"]}','${inp["desc"]}'`,true); - res.send({out:"good"}); - } - },true) + 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.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"}); + } + // console.log(db_name); + // db.ggv("objects","gid","name",`'${inp["name"]}'`,(db_name)=>{ + // }) + },true) + }) } catch (error) { func.log("backend object creating error - "+error); } +} + +module.exports.load_groups = (inp,cook,res)=>{ + try { + db.gav("object_groups","0",(gdata)=>{ + // func.log(odata); + res.send({out:"good",body:gdata}); + }) + } catch (error) { + func.log("backend object groups loading err0r - "+error); + } +} +module.exports.new_group = (inp,cook,res)=>{ + try { + db.ggv("object_groups","id","name",`'${inp["name"]}'`,(gdata)=>{gdata = gdata[0] + // func.log(odata); + if(gdata != null){ + res.send({out:"bad"}); + } + else if (gdata == null){ + db.nr("object_groups","`name`,`count`",`'${inp["name"]}','0'`,true,()=>{ + res.send({out:"good"}); + }) + } + }) + } catch (error) { + func.log("backend single object loading err0r - "+error); + } +} +module.exports.del_group = (inp,cook,res)=>{ + try { + db.ggv("object_groups",`name`,`id`,`'${inp["gid"]}'`,(gname)=>{gname = gname[0]["name"] + db.dl("object_groups",`id`,`'${inp["gid"]}'`,()=>{ + func.log(`admin group deleted ${gname}`); + res.send({out:"good"}); + },true); + }) + } catch (error) { + func.log("backend single object loading err0r - "+error); + } } \ No newline at end of file diff --git a/public/img/img_placeholder.webp b/public/img/img_placeholder.webp new file mode 100644 index 0000000..2249b5c Binary files /dev/null and b/public/img/img_placeholder.webp differ diff --git a/public/lib/fn.js b/public/lib/fn.js index 9100862..f8dda21 100644 --- a/public/lib/fn.js +++ b/public/lib/fn.js @@ -90,6 +90,29 @@ function get_sid(){ }); } +function load_groups(callback){ + let select = document.getElementById("group_select"); + // let name = select.options[select.selectedIndex].text; + $.post( "/get_groups") + .done(function( res ) { + if(res["out"] == "good"){ + select.innerHTML = ""; + res["body"].forEach(group => { + let group_div = document.createElement("option"); + group_div.innerText = group["name"].replace("$"," "); + group_div.setAttribute("group_count",group["count"]); + group_div.setAttribute("gid",group["id"]); + group_div.id = `obj_group_${group["id"]}`; + select.append(group_div); + if(group["id"] == res["body"].at(-1)["id"]){ + if(callback)callback(); + } + }); + } + // callback(res); + }); +} + // redirect function goto(url) { location.href = url; diff --git a/public/lib/inter.js b/public/lib/inter.js index dd75afc..bd18017 100644 --- a/public/lib/inter.js +++ b/public/lib/inter.js @@ -15,44 +15,47 @@ function create(clas,x,y,body,id,size){ obj.classList.add(cl); }); get_obj(main_clas,(db_data)=>{ - if ($.cookie("cache") == "true"){ - if (localStorage.getItem(`${main_clas}`) == null){ + // console.log(db_data); + // db_data.forEach(db_data => { + // }); + if (db_data == null) { + delete objs[main_clas][id]; + if(proj_from == "cloud"){ + save(()=>{ + goto("/proj/"+proj_name); + },false); + } + else if (proj_from == "local"){ + save_local(); + load_proj_local(); + } + } + else if (db_data != null){ + if ($.cookie("cache") == "true"){ + if (localStorage.getItem(`${main_clas}`) == null){ + load_obj(main_clas,"`img`",(odata)=>{ + localStorage.setItem(main_clas,odata["img"]); + make(odata["img"]); + }) + } + else{ + make(localStorage.getItem(main_clas)) + } + } + else{ load_obj(main_clas,"`img`",(odata)=>{ localStorage.setItem(main_clas,odata["img"]); make(odata["img"]); }) } - else{ - make(localStorage.getItem(main_clas)) - } - } - else{ - load_obj(main_clas,"`img`",(odata)=>{ - localStorage.setItem(main_clas,odata["img"]); - make(odata["img"]); - }) } function make(img){ - if (db_data == null) { - delete objs[main_clas][id]; - if(proj_from == "cloud"){ - save(()=>{ - goto("/proj/"+proj_name); - },false); - } - else if (proj_from == "local"){ - save_local(); - load_proj_local(); - } - } - else if (db_data != null){ - obj.src = img; - obj.title = `${db_data["name"]}\n${db_data["description"]}\n${lang("width")}:${db_data["width"]}см ${lang("height")}:${db_data["height"]}см`; - // 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`; - obj.style.height = `${db_data["height"] * 2}px`; - } + 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"]}см`; + // 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`; + obj.style.height = `${db_data["height"] * 2}px`; } } }) @@ -136,7 +139,7 @@ function load_proj_cloud(){ console.log("bad"); save(()=>{ goto("/proj/"+proj_name); - }); + },false); } }) } @@ -174,9 +177,9 @@ function save(callback,with_pic = true){ }); } else{ - make_save("none"); + make_save(); } - function make_save(src = "none"){ + function make_save(src = "img/img_placeholder.webp"){ $.post( "/save_proj", {proj:JSON.stringify(objs),name:proj_name,img:src}) .done(function( res ) { if(res["out"] == "good"){ @@ -189,7 +192,8 @@ function save(callback,with_pic = true){ } function load_objs(callback){ - $.post( "/get_objs") + let select = document.getElementById("group_select"); + $.post( "/get_objs",{gid:select.options[select.selectedIndex].getAttribute("gid")}) .done(function( res ) { if(res["out"] == "good"){ // console.log(res["body"]); @@ -333,7 +337,6 @@ function drag_start() { Object.entries(zones).forEach(([key, zone]) => { let x = zone.getBoundingClientRect().left - document.getElementById("drags").getBoundingClientRect().left; let y = zone.getBoundingClientRect().top - document.getElementById("drags").getBoundingClientRect().top; - // console.log(x,y); create(`${zone.classList[0]} spawn drag`,x,y,`${zone.classList[0]}`,`none`); }); } diff --git a/views/admin.ejs b/views/admin.ejs index 818629b..543288f 100644 --- a/views/admin.ejs +++ b/views/admin.ejs @@ -10,6 +10,8 @@