diff --git a/server/SHServ/Models/Areas.php b/server/SHServ/Models/Areas.php index e0ff34c..503e76b 100644 --- a/server/SHServ/Models/Areas.php +++ b/server/SHServ/Models/Areas.php @@ -99,4 +99,8 @@ return $areas; } + + public function remove_obsolete(Array $real_exists, Array $exists_in_db) { + + } } \ No newline at end of file diff --git a/server/SHServ/config.php b/server/SHServ/config.php index cdf4627..1b332d4 100644 --- a/server/SHServ/config.php +++ b/server/SHServ/config.php @@ -8,10 +8,10 @@ "db" => [ "dblib" => "mysql", "host" => "localhost", - "dbname" => "shome", + "dbname" => "smart-home-server", "charset" => "utf8", - "user" => "u_shome", - "password" => "halloween" + "user" => "eugene", + "password" => "root" ], "app_file" => "App.php", "templates_folder" => "Templates", diff --git a/webclient/dist/js/main.js b/webclient/dist/js/main.js index 54836e2..2de33a5 100644 --- a/webclient/dist/js/main.js +++ b/webclient/dist/js/main.js @@ -117,7 +117,7 @@ type="button" >Reboot - `});return e}function pt(a,e,t){a.currentScreen.DOMObject.querySelector(".main-container").innerHTML=Helper.template.table("Devices list",{deviceName:"Device name",status:"Status",state:"State",ip:"IP",actions:"Actions"},e,`Total: ${t} devices`)}function mt(a,e){a.currentScreen.DOMObject.querySelectorAll(".reboot-btn").forEach(t=>{t.addEventListener("click",n=>{n.currentTarget.getAttribute("disabled")||_(e,n.currentTarget)})}),a.currentScreen.DOMObject.querySelectorAll(".details-btn").forEach(t=>{t.addEventListener("click",n=>{let s=b({status:""},JSON.parse(n.currentTarget.dataset.device));R(s,e).show()})})}function me(a){return{alias:"devices",renderer:()=>Helper.template.mainTemplate(I("devices")),initer:e=>{a.devices.list((t,n,s)=>{if(console.log("sh_api.devices.list",t,n,s),s.status_code!=200)return e.error("Server API ERROR","");pt(e,ut(n.data),n.data.total),mt(e,a),e.currentScreen.DOMObject.querySelectorAll(".device-state-container").forEach(i=>{i.append(y(a,i.dataset.deviceId,i.dataset.deviceType))}),e.ready()})}}}function fe(a,e){return a=Helper.unification.deviceFieldsUnification(a),Modals.create("device-setup",{title:`Setup new device ${a.ip}`,body:t=>{let n="";for(let i in a)i[0]!="_"&&(n+=` + `});return e}function pt(a,e,t){a.currentScreen.DOMObject.querySelector(".main-container").innerHTML=Helper.template.table("Devices list",{deviceName:"Device name",status:"Status",state:"State",ip:"IP",actions:"Actions"},e,`Total: ${t} devices`)}function mt(a,e){a.currentScreen.DOMObject.querySelectorAll(".reboot-btn").forEach(t=>{t.addEventListener("click",n=>{n.currentTarget.getAttribute("disabled")||_(e,n.currentTarget)})}),a.currentScreen.DOMObject.querySelectorAll(".details-btn").forEach(t=>{t.addEventListener("click",n=>{let s=b({status:""},JSON.parse(n.currentTarget.dataset.device));R(s,e).show()})})}function me(a){return{alias:"devices",renderer:()=>Helper.template.mainTemplate(I("devices")),initer:e=>{try{a.devices.list((t,n,s)=>{if(t||!n||s.status_code!=200)throw"Err";pt(e,ut(n.data),n.data.total),mt(e,a),e.currentScreen.DOMObject.querySelectorAll(".device-state-container").forEach(i=>{i.append(y(a,i.dataset.deviceId,i.dataset.deviceType))}),e.ready()})}catch(t){return console.error("sh_api.devices.list",t),e.error("Server API ERROR","")}}}}function fe(a,e){return a=Helper.unification.deviceFieldsUnification(a),Modals.create("device-setup",{title:`Setup new device ${a.ip}`,body:t=>{let n="";for(let i in a)i[0]!="_"&&(n+=` ${i}: ${a[i]} @@ -218,7 +218,7 @@ data-value="disable" >Disable`;e.push({alias:`${t.alias}
by ${t.created_by}`,name:`${t.name}
${t.description}
`,filename:`${t.filename}
${t.path}`,state:Helper.template.toogleStateBadge(t.state),actions:` ${n} - `})}return e}function _t(a,e,t){let n={};for(let s in e)n[e[s].alias]=e[s],e[s].code="";a.currentScreen.DOMObject.provideSciptsData=n,a.currentScreen.DOMObject.querySelector(".main-container").innerHTML=Helper.template.table("Regular scripts list",{alias:"Alias",name:"Script name",filename:"Filename",state:"State",actions:"Actions"},e,`Total: ${t} scripts`)}function wt(a,e){a.currentScreen.DOMObject.querySelectorAll(".change-state-btn").forEach(t=>{t.addEventListener("click",n=>{var r;let s=n.currentTarget;if(s.getAttribute("disabled"))return;let i=s.dataset.value=="enable"?"regular_enable":"regular_disable",c=(r=a.currentScreen.DOMObject.provideSciptsData[s.dataset.alias])!=null?r:{};Helper.states.btnLoadingState(s,!0),e.scripts[i](c.alias,(o,l,d)=>{Helper.states.btnLoadingState(s,!1),l?(setTimeout(()=>Screens.reinit(),250),Toasts.createSuccess("Request Success",`State of ${c.alias} was changed`).show()):Toasts.createError("Request failed","Regular script state not changed").show()})})})}function ge(a){return{title:"Scripts Regular",alias:"scripts-regular",renderer:()=>Helper.template.mainTemplate(E("regular")),initer:e=>{a.scripts.regular_list((t,n,s)=>{if(console.log("sh_api.scripts.regular_list",t,n,s),s.status_code!=200)return e.error("Server API ERROR","");_t(e,yt(n.data),n.data.total),wt(e,a),e.ready()})}}}function Se(a,e){return console.log("actionDetailsPopup",a),Modals.create("action-script-popup",{title:`${a.name}`,body:t=>{let n=a.area_id!=-1?'
':"";return` + `})}return e}function _t(a,e,t){let n={};for(let s in e)n[e[s].alias]=e[s],e[s].code="";a.currentScreen.DOMObject.provideSciptsData=n,a.currentScreen.DOMObject.querySelector(".main-container").innerHTML=Helper.template.table("Regular scripts list",{alias:"Alias",name:"Script name",filename:"Filename",state:"State",actions:"Actions"},e,`Total: ${t} scripts`)}function wt(a,e){a.currentScreen.DOMObject.querySelectorAll(".change-state-btn").forEach(t=>{t.addEventListener("click",n=>{var r;let s=n.currentTarget;if(s.getAttribute("disabled"))return;let i=s.dataset.value=="enable"?"regular_enable":"regular_disable",c=(r=a.currentScreen.DOMObject.provideSciptsData[s.dataset.alias])!=null?r:{alias:s.dataset.alias};Helper.states.btnLoadingState(s,!0),e.scripts[i](c.alias,(o,l,d)=>{Helper.states.btnLoadingState(s,!1),l?(setTimeout(()=>Screens.reinit(),250),Toasts.createSuccess("Request Success",`State of ${c.alias} was changed`).show()):Toasts.createError("Request failed","Regular script state not changed").show()})})})}function ge(a){return{title:"Scripts Regular",alias:"scripts-regular",renderer:()=>Helper.template.mainTemplate(E("regular")),initer:e=>{a.scripts.regular_list((t,n,s)=>{if(console.log("sh_api.scripts.regular_list",t,n,s),s.status_code!=200)return e.error("Server API ERROR","");_t(e,yt(n.data),n.data.total),wt(e,a),e.ready()})}}}function Se(a,e){return console.log("actionDetailsPopup",a),Modals.create("action-script-popup",{title:`${a.name}`,body:t=>{let n=a.area_id!=-1?'
':"";return`
@@ -354,7 +354,7 @@
- `),initer:e=>{a.areas.list((t,n,s)=>{if(console.log("sh_api.areas.list",t,n,s),s.status_code!=200)return e.error("Server API ERROR","");if(e.currentScreen.DOMObject.provideData={},typeof n.data!="undefined"&&typeof n.data.areas!="undefined")for(let c of n.data.areas)e.currentScreen.DOMObject.provideData[c.id]=c;At(e,Ht(n.data)),Dt(e,a);let i=e.currentScreen.DOMObject.querySelector(".create-new-area-modal");i.classList.contains("inited")||(i.classList.add("inited"),i==null||i.addEventListener("click",c=>{Ee(a).show()})),e.ready()})}}}var Ae={areasTree:He};function De(a,e){a.add("/",{alias:"home",renderer:()=>"",initer:t=>{document.location="/#!/areas/tree"}}),a.add("-",{alias:"not-found-screen",renderer:()=>'

404 NOT FOUND

',initer:t=>{t.ready()}}),a.add("/devices",V.list(e)),a.add("/devices/scanning",V.scanning(e)),a.add("/scripts/scopes",x.scopes(e)),a.add("/scripts/regular",x.regular(e)),a.add("/scripts/actions",x.actions(e)),a.add("/areas/tree",Ae.areasTree(e))}function Mt(a,e,t){return` + `),initer:e=>{a.areas.list((t,n,s)=>{if(console.log("sh_api.areas.list",t,n,s),s.status_code!=200)return e.error("Server API ERROR","");if(e.currentScreen.DOMObject.provideData={},typeof n.data!="undefined"&&typeof n.data.areas!="undefined")for(let c of n.data.areas)e.currentScreen.DOMObject.provideData[c.id]=c;At(e,Ht(n.data)),Dt(e,a);let i=e.currentScreen.DOMObject.querySelector(".create-new-area-modal");i.classList.contains("inited")||(i.classList.add("inited"),i==null||i.addEventListener("click",c=>{Ee(a).show()})),e.ready()})}}}var Ae={areasTree:He};function De(a,e){a.add("/",{alias:"home",renderer:()=>"",initer:t=>{document.location="/#!/areas/tree"}}),a.add("-",{alias:"not-found-screen",renderer:()=>'

404 NOT FOUND

',initer:t=>{t.ready()}}),a.add("/devices",V.list(e)),a.add("/devices/scanning",V.scanning(e)),a.add("/scripts/scopes",x.scopes(e)),a.add("/scripts/regular",x.regular(e)),a.add("/scripts/actions",x.actions(e)),a.add("/areas/tree",Ae.areasTree(e))}function Mt(a,e,t){return`
diff --git a/webclient/src/js/components/screens/devices/devices-list-screen.js b/webclient/src/js/components/screens/devices/devices-list-screen.js index 1abbcc5..e1bf9d0 100644 --- a/webclient/src/js/components/screens/devices/devices-list-screen.js +++ b/webclient/src/js/components/screens/devices/devices-list-screen.js @@ -85,26 +85,30 @@ }, initer: scr => { - sh_api.devices.list((err, resp, meta) => { - console.log("sh_api.devices.list", err, resp, meta); + try { + sh_api.devices.list((err, resp, meta) => { - if(meta.status_code != 200) { - return scr.error("Server API ERROR", ""); - } + if(err || !resp || meta.status_code != 200) { + throw "Err"; + } - renderingMainTable(scr, prepareData(resp.data), resp.data.total); - initMainTableInteractiveElements(scr, sh_api); + renderingMainTable(scr, prepareData(resp.data), resp.data.total); + initMainTableInteractiveElements(scr, sh_api); - scr.currentScreen.DOMObject.querySelectorAll(".device-state-container").forEach(container => { - container.append(deviceStatusComponent( - sh_api, - container.dataset.deviceId, - container.dataset.deviceType - )); + scr.currentScreen.DOMObject.querySelectorAll(".device-state-container").forEach(container => { + container.append(deviceStatusComponent( + sh_api, + container.dataset.deviceId, + container.dataset.deviceType + )); + }); + + scr.ready(); }); - - scr.ready(); - }); + } catch(e) { + console.error("sh_api.devices.list", e); + return scr.error("Server API ERROR", ""); + } } }; } diff --git a/webclient/src/js/components/screens/scripts/scripts-regular-screen.js b/webclient/src/js/components/screens/scripts/scripts-regular-screen.js index 66affb2..e69665b 100644 --- a/webclient/src/js/components/screens/scripts/scripts-regular-screen.js +++ b/webclient/src/js/components/screens/scripts/scripts-regular-screen.js @@ -66,7 +66,7 @@ ? "regular_enable" : "regular_disable" - const script = scr.currentScreen.DOMObject.provideSciptsData[btn.dataset.alias] ?? {}; + const script = scr.currentScreen.DOMObject.provideSciptsData[btn.dataset.alias] ?? { alias: btn.dataset.alias }; Helper.states.btnLoadingState(btn, true); sh_api.scripts[methName](script.alias, (err, data, meta) => { diff --git a/webclient/src/js/routes.js b/webclient/src/js/routes.js index f0862c3..c4fdb91 100644 --- a/webclient/src/js/routes.js +++ b/webclient/src/js/routes.js @@ -16,7 +16,7 @@ screens.add("-", { alias: "not-found-screen", renderer: () => { - return `

404 NOT FOUND

`; + return `

404 NOT FOUND

`; }, initer: scr => { scr.ready();