From 9c96652c6ab89f334dda6718f8fa127b0f2abda4 Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Sat, 27 Jun 2020 19:06:25 -0600 Subject: [PATCH] Add automatic event on machine creation for easier sorting, add deletemachine action --- action.php | 12 ++++++++++++ database.mwb | Bin 19268 -> 19395 bytes langs/en/messages.json | 3 ++- langs/messages.php | 4 ++++ lib/Machine.lib.php | 12 +++++++++++- pages/addevent.php | 4 ++++ pages/machines.php | 4 ++-- pages/viewmachine.php | 4 +++- public/index.php | 6 +++++- update.sql | 6 ++++++ 10 files changed, 49 insertions(+), 6 deletions(-) diff --git a/action.php b/action.php index 9f79d52..d90214e 100644 --- a/action.php +++ b/action.php @@ -53,6 +53,18 @@ switch ($VARS['action']) { $machine->save(); returnToSender("machine_saved", $machine->getID()); + case "deletemachine": + $user = new User($_SESSION['uid']); + if (!$user->hasPermission("MACHINEMANAGER_DELETE")) { + returnToSender("no_permission"); + die(); + } + + $machine = new Machine($VARS['id']); + $machine->setDeleted(true); + $machine->save(); + + returnToSender("machine_deleted"); case "editcomponent": $user = new User($_SESSION['uid']); if (!$user->hasPermission("MACHINEMANAGER_EDIT")) { diff --git a/database.mwb b/database.mwb index 71c7d85cf9136ef26f163e817af63badcaf6e7ed..5e7e03b538dab677b00559799468f24d8004ed02 100644 GIT binary patch delta 17492 zcmbTdV~{6L&^0=?y<=NDwr$(Ct>4(Tv18k|ZF|Q%w%*bjr-|FM`U+bbaZuf zb!DD&GJ7Z$crXnZOF2lp_CpDB;Hx0df@w+pFqgC|K?mM`qIOq0qFn7;6K8XqR(8$6u1V7P?gjJd<(YOS z!)9bvLU?3V-g4wX5ipR|z@jCuZ!z}KLG4R+foGNTI3qd~MY$VNhLzY#6~>HFUnK#H zm%7{2>O1@BleWyNFc#mHNsqW5s?~FZQSQkeJ?fp19R#0~BvbSI?H3u@(9fL44nq9V z*FqR>+L*h?uJrfHT5*CIJBD68%f6~fQj^|P|DKmFTwi6)W`JJYa4;$E#lodxCZhv1 z3?k;Zb`QC6f+rGI`|@!)bOswWxsYFxy&@k@5_9?S8R0BR?1_!HXHRb5i5nncsR&cr zitm_dgTB1FvG#PoMv9qR+fO5zHS@=Lu#8d*ilLV@BrTpPtKNEbIukr?K1xU8SGTXy zS08Dpt>R(ZCmm11E#)!Gg&(o6gDrPzO}#DbA)UCVY{h5UqXzfdPep@;OgGyaqdJSe z1{k5FTu2PiWBBu=R!Dj*t4ON71$n!~o&+1U=r_B4MgADQDH%_~q)$j3K(WJt#xx9U z?@UVUoaG2d$^j1PE4TV4LX%Cm-Z_5;IwbXYnd)XsyW`$U)t=El8$!#u7_oWM8J@U) z2-$}Si71QOD*7TdnRAdo;o=1*nRDH?xRhFKGh#9vWd;Wssz$!RxPPK;k;!f?{rB6a zP(}igE_%=(73`)WGqLM(K!&kGzS(EKS+$BgEUxU)pL}iHX*Q&v(C0+rl_MKgyeob4 zMVy&$(?_{~?J>SXQ_ydVH1!iqz-7)a+n(``s6qWOpVX1tDVI9v;A(Y%PxB2QxS@jBIEl;$xgiGaq2KgkD*@tB`OUB``x@lEMLY2uY|6NE9|x z-7qzH$Q@20G?LI zz1?HxLy*jSD>aX{?)wgwhC#Tk7nH9*4?3fdi7JK`YBC82Z%HOu%OLKz4)V3xCRO~2 zqaftG0f^z0e{8Ja(}b+xBf<|pOII9(EBS$ku>`GR5RSEED3s|kFhY(b^r9mi{B=*3 z92C)r7w>?8A%p#Mje$U(kb!wA0H??xLU+Dp{LDa54?oQe(S8602nY6!fkIu9fW1Kp ztCi;x5!x^J%-6mMjzTEN%*4;dwdIO#0nOP9oSt|i=j$`f&pz)%p*;blh)l7CeGs4^ zp`9p&_;7;}pdnx3KoFjgAtNFPC;es}>Lgs#Mp4}`uY8%u%(NO{qsD(A0iZ(J9A)!7 z6|Br82(f~J0=vNk&xNS$*5D^NhvKRBtq&A~q@(kTi2CynAq5RU;Siu9K!@9e{rh?Q z4Gft51^orvh3AP^#0CS(!qb6)^REca#1S|R$=xQ-H+xPFQH?UxPMJa9V2mgSw>v}O|O0SRZBse z@BH=pUUp3i#!93=zq~O{WSCxcL4`4;{hq0&HF&6*=ICYD7BR6C_o}7z#{>Meu5Wck zy279M&bCrjX*kF07#Y=u0SgXc*(c z@i|paDx)$jQ%QWlz3J3J$B zQQxU`wWDoK035uuy4o?#yIxfVF4Zn)S_w`tIrO?T4Fc%Ws}+{6qWP2-kAIr9d?y)w zszU>(gz3jVuHNn@!!7`nX(nuF&{ay@p^Dy~f@2CEr_E{2wqdP0-kKuDu6Qgpb}W=5 zxrPtcg@zE z^z7v~zU|@tT2Ow8M#Uljy2qfp^0PZOiEMuwWk^Zf3$h5BQ7#Y^$kyBgQn~e2BnjMj zKwE4=8^tbHzCG@gP`-V4k^O;I6}Q`C@pdxGPomzM#XRQqQcX6aH0aip_Q>FC$)xcb zWF!h0Jc+g158;e7A*F%jxiF^4W?zp#$tIpUeao6$_EHh`^XhAGEDn4BuK-XEc|KB> z=tz{>UTE3&;sNm30q_uxdsYUg+)z>(v%P1SJ$8xn#9A&JdTSBeA)6PU-nO*A{)iZC zeE0li#Gh+2g$70`BbfU2k!*%aYz;8u95)XEZ!=4dE{{yMr_H(rUlVy}BWs})*@`EA z9b#vq)_F__j`t)qR9s2 zDD27}-cYxhgdZg?xYYn94uwE!pFWrmzi+FMJk}>RsP9;A8$St1{&O!*@Oqvl!RIsi zYM9At=X4JJTc{6Swp3}IYlxl12iVuqa*10X9A>;fMRc+4WQ#D7MQQ#`fuB+|7Fj)zmf*t;h%VIC z`L-xsgH3@DMd(ZMYVoaB*JP!yi1o36#6=+|(%K=Fq%vEQ@)~n(+%jnJ2OOj~O%9NM z{!X)Gm*9aJ3FPHMu0G`;>>vpr2`yoX7b`fp;|=wEgM+ChN8!2E?dsMm-lmL4jZvW& z7mZHJ`!ru8rWqI^veQ{XWp<*&98xp^90nnBFCWTM^KC!YLh*iX8@bu^i~wM!g)v)% z1{u4^AZ3=Mr_|t7rTcGf3{hqDfq+XvBv)NnYEEdAN=z#4W8O66-Y_|Khx8#q!Oi1h z8D))y^~D=PhL+{D3mQOyg$n#LOZo_6NLWk{eMs_RKPBp}`r=z`x7-XQj8k~S5iDa7 zEU`qUiHMWe@E=KGfS&CnSVX&K9{O?(5FF#@?uo8fNZBUur=%BL^ugf* z;S$gkkpM3&f0mrw&+oJEG{lCc0 zu_%d6CDH;?FFXKnoIw7dAOc1tKz)25g!PgDwg4c1SfHu(+U~qSxyBdBRzbD+ru#iYsEnt{u@DTWR7~sF#s?h%504Icr5(#^Ok0b=MOjo4f z3Sz!VrII2!UGab}PO;z>cTIdCx+FA8Ep{wwvQ+6K4mfVT7PeYngRXN@i(y|x=dhw` z-T1xk#f^V0x;2H(MG=-CP)VU1^~J;QgV&I)I~&#B`{wnqfBAHGkpl7Il>(g((2MP< z>FA*$$|c=zOKXvPe-R2C7{o^1xk=F0&CQH2m;1>|Ke0N#xIsV5Xq1XB=CL_>{|Ls{ z`W{t84(QfUy0>(6*mjb%&50I8bXN_Y-X7?!fa_;%O76F#(^$>uxAv$$u+%W$Uv`pR z72w+(kU|*m*;ggawB){-fb(BG~Cb*5pN@Ro$ZrR9&-re%=)mSiO^@R+-0$s9#y21%&1h2qGucSgA+pzwxI46K2k> zi+Kt}j>w4Z3F~6@DTAmqZ1cpbiX`8p&KIM^gcuf$@`pl04W@&a)D0ACHU<)g7?DDw zA3&i|t)de=mi&NgSul3wZEU`x9wHWE)a(FPcDogsV?)rnX|nP@ivLM&p6%uCUvv@X zmoO%(YtF4>)uh`2aYS{TxWIRevLJ}iW?dmiVs9J9B)2=)YZTb>Z*z@kJ5u|AZ* z0J6Ryutrrkq|87dTXap6ai&v`B7$!EBAr8knQuuF_+F{uwL?@gQx%8(l*%~9 z>RBI6-*u`YGF?H~MpFYGf}{}hl2Ooobhi>{Fm_($(tdEup96Tl=jq=16zc6yK+F(P3NiI6aUancS6 zP6gG)8-|6H<#Y&YKm~^g{4-1Xh)hth0d?`LkwoqSThz2B%`x5xuvE%-0yg0fd}W3} zu8`q`>?R3<@{z^~MgpHnK>IgfidOBxNT|w8*+9rPp`TDlj=ouSfcWNIbSR{=njl&; zV2-h;c|iH?TuoM9hf-?ADn+~!9AgT>Y&;|yodVz zMfdJ6QAw1lko?G0K^@Rd(4xuy#;5W5aRajXU=IZd2KpWvj)B7dJsh5weZS)-_vwDS zN#KEmh{B%%fLJKCj)nY(;vMFk_o(aAv;}5a_khq^{IBE%{vYrA8xe&U(w4|pKq1`L zMudI@N$Mw}p^ctVvjeq%z_MaD4j`#E=Jd(}uxh@R;Z+9!2 zvOzDuc~g(NuG0S`A-m_?*(+hS5JkqChw+n^E^TRLT;su^Ri@Wny_n#yh|^TntwEOA z6bc6BTV~!h7CfooeO=>=F-x*`ZOnV7Qo+PPo0!}% zuZXVc7k(mJ7Gg~}lo}qFG%OvYh8Dj@ zX8wX*KRESpwgqN_*nh8@iKV%ayi_a*7mKV0M-q zDN|eIUH@=fK1QYw)T2Cui!sJsB7L!+(F$fH#68fOP4fa2Py|0_xHl~T{8oWDD2i#? z=%lrqv+22bSa8xM`U+ck6eX&EVh^fVoOo&AA~(mz`fO*U=r-$V zZQ>8z@W}YZeA4Q9$Wt^nR8fyO{F@|iAT$6P>^e`R>$G%7z4j|kdTyU zF2n^eU)cx^7?9`U-h%wsLL(3HDme5$)bT(>i{PNX;`g&Ko-F3cQTObzZp_mm`t%9* zXBmUOR50p*KDmPZ7T;OsfdE2Af8!&YJt{rQDbN=@Hhpya9s0y*hwsr9x>)Gt6;ylI=&Ev&%{7_joRWTeR z9fo{@a*;M$qWVcG0*nz@qS`J*3>g~2l@ET0qh2jq(W$3=3l9w@^&Kt3+y z5Za*&o*f5V^7HG;fcFXEe>e%lf+GA?0W%;u)}(Qx8J8A-2$Sz8q=ezehyME#Wkx6w zWNR&wKyTRLUha8e_iE#APQ2lqB0xVR2la0Y@uB{QYkmN|-GjE#H?#n92m~?~s-*Ne zw_CKX&;LnTcLIiGci=xNQOfv+W!iJr}SsB#0v8vkaL=m8EbD?bue>W;M?ia-hvF z=}iB!2W;2}$ub53AY`CYE00CWo=-qON^|!n!L(KowaBYlwD-)2*$uZ3&5}8JkIa@e zK-q&1nH=p({8Zt$F7w;hkC$JE3A{_qvaU_94{lZq@(Sh|!5RQ7hz%wAWASuo4Ix%D z80Q@jAvOhrGZ+7b(vJ0F>*NBD7IGrh-rx}}MeXufwGX%X7I9Y^(Td|nOaJlm1J;j8fGOmrs zcwlwMa5oymUjYav2z1H83@WK-V_7Rg=|`d&P^fFJ=jmg6*0YRwW7%wkxY4)-4s~%H zSncFRv1d3)Zlta;yi-&#T?CB2s8Q(p z{l)Yq&k2bs#Qo$m7XrpKl&I?FR>+&unMi5|<4p6c5GvU6m zI#97Cxm`j7Fc7i-%y}&|2^7{3ufA}i0xUzUOBMsLYdV9Yhza4Q@C`K!^8#Y1PC)EF z^HN8wK7p_(PxPl=aHL9OU_r-$gN_L=u98E-RY6o$7!FFMU>Q_!>8Uwz!c*(cL3Ai@+oS_JpUZiV8xh9VfxyoT!x`*tr8`( zPMXu(YvTT&T%OW%-B&&Nal_^3Q!a%ypdL5#{?-5JvvOHuw`I<|op|5sI`7LHTwg1; zFJfP-@SgP6AOBk0m$e9+3IlH-AF{q@D#I_e0`*HeDGDs>rxQEG1`2@6V6s*s|cRo?nX%LjKd4=*aH>&0x|mlbmw8O%E6-RWr^8PGH6s zKSnk>>TX^s@i$SxnNHSY+5))1+1_OvT``Hkng0TO(n9r%3UE11-86*Ks<+arSUC|5 zu1UyZHu}t9Dx~IqXb!sE)falhfS?-37|h>>^KF73CLuUpY86S2kuZn)Fy zj>MZoL?)w_NrAsm*Bxy@GxUVWn*OE@5t7zu$l zF)@TnIHonmWUUM~uvbFta8 zA233&pu885yw=q{NP^JF$zCLszN7v0A_@rHfl60k2*i{`fhhk>1B6KWBu{ugt_>KO zTP)mnj$w;h^jzuKwk%k&2Tm)Rpk~5r=K+DhP0@s3nIRPWN8Q;4;1PqSP8g5O@*ATu zPnE&%CeGR>C7586C$8&lr|hlX1{Y2L3hLtk(pyWd>Sc?C(AG9>VSIc<&s&y)9R6nq z1NL18PMI~|4;J|-dwb~Jyx$BD-a;sHb4*mccE-rt1H{D2A_g?plorr99p!cqifcP? z)ae4A_Y`(-=OZ@LfV7LAjiMus(W@2sNx!;FW`Z@cEWfvdWu@IU1Z8n<49Dw6a9!Q~ z+9(E*%>Wf+kG$z8Z2P;_Ro{#Amuh!sx}qr!KkT8xX09zgrLnS7ag-dd5X1%q#b;$% zTQ3P?hDDMJftjH>O4y48*7tE8-o&x!k$QZ^d%y^@?Dir#;4ByX$9uWB8vZP9mE`(* zHlNAcl5dUp5@laWfuyMT4`alR=;#1f%?!nxd`HgB4vhUGjnK?X{dVm+;)t0#wrmGn z*|!;dP}{2m+9)R5Uk%BNtiFAbtX373j#Sv#rkvQOmgmMu6r|ouCUzQJlft$plkD|u zAFn4aOpE3Y0P=uh+4Ox2)MmS`jmrdurQdZ*^5Kc0BzOh+++MTpX$)lQyOO!ocDSM> zN*kKGrSh)Z%wM>tFCE7o4; z=gsXsAO!5s>(DmapKTqV9*)i{oQI4sC|^D{2r%EMs4`_fY{Q9TAP6^L(5owB!ui&- zlzxH0Zau?%=Nl{uY?SnC5Kwj=cTZPmN4ndstHbxI!z)xLP?AgZBQMCmXZE=GM|K{7oA=gx#8%9!Jnj>`D&LwUq-%WQAxKIr z+#zQ{N3hOwIf1TT-|*70U5X)P&}W!~aRb7yw~Ob^Ntz$=rMZo^@x3pH2bbR80(1N# zNJUWaP+*NNxuekBroC7>CvXl56bLPjXv}zI24&;^Js(PZ{zp{uT~?f!alMMJI=7p*i#vBQX#5?iS&1|sTt%F2>c zf0@aL$i@A^t_|htI~eBVM*R-805Qd4_ytObY;uwu-D48W=tY6F)KgT|*le+Y;W10J z=UL6n(+0cj^S`3GC5AhuC0d#6E;$!K)biqhWYLT&%5B<-DdRk~w7QWbRZgR3`b|#R z*Cdp`Un;h`+VOBSp(UjQxBb_Ps;0SET60$1y~c?EJ(v~2bVUYN7)!XTYX;eUL`@FV zg0jd)${AeHVr4m?yjER=i%M?6MxJ%mFLLa?ZxUW3?vQLtjZDM zMe%Y(0vL-GEVk?I{yAd`btIs^&YN1**{mKkg{zmN^W$#+9)NucAknOTb9o&dehoNR zaV#@)l`m(*f4UMV=JWk}+gAgqr9_%ngRYR(20>UILSNBeF0Ni@=~e|djdRP`9?%X0 zeKqCsYc@!X60jktH~8Gx)*FndO;c%t`!#C|+J__%vd z6DsxrPhmn-E9R0IelC@XDg+T0jH?P-E<{+knVuo!Rw#~3>&4s%P6!0B;n5?TM=7Bg zq&NL2iJDFz2VE^0;NBmnE2;djOnM)hfm#}!)#sP8T0N;%?yp$thpE8YXCsq;`ASB|un<3^215Z$wZoBzMG$T_+v_o8BbwJHzkDRPW@4l_$ikbfd|pAzFOAQf3S`jeyl3us)j# z66W1wKNa}Pn-yrevMcQ=#g<0XLll?z<|_!0Fcb({sq3Z2n{-&_2k~0D7FnpIruhIi z)P!BsZBP|{R8MiWiYjY=l%IN$64CGCo`kg2RCbntQiB2JTwHgw;>`?~>bVJx$Jx#H zV-tswx>^aOYgE9AU;j!Tq`n65)8O7-qn?)s1eDs<*<1>FTssX5g@hyR>U6v$IF!eo z=z=<_C54Q0r_It6^4J$0b+iY19F3%;U#Re>nV+iWmv^tX359a^CyqmsJRXf4QW@Mi z+M%FgS^zJ1X^dL+*vMvDD=SD=V)@8|Hx?^P$>d(DOQY3lBjoIxp&X4Oyel`)1f6dI0raKGa#Ef z4Gc8<978T-si7V<-MgPk$|lY$0hptiB0G{2aOXSO_!OpGmjM!gjv$e8(QgW*^xw&Z zS>*Fl;TRXR=1^q7jXX&3AgV~Y>I-Xndg7J;QnWPei7^BvIOTG2wMso9NDqb;23Y=* zVS!4xP7S;mWihJ1(m5r1<_91>0o7>J?I+R^sl$|RK3XgPL%_GlD{cQ3nt*CrKA=Ji zU2VGpsEn%)9(@4$o>OJ~6igt6ONHo?D|8kEb?*|b0%lcwV4f;#dppUzO6wKh0M@|z zyH2$lsn9M2$mR;SCEYr-z&2A`BzC$^^$aX!0otF=wr;osRJ(2!WbPc-VjW29zauD% z_JBjC=*y%&<|!wT@Z&XZplZM>CHRa#kg9G#g_UZ4hbpi_vvXO)KeWuAn2DiUwgD`M zfL5XPn;L38+RQO$dmVQlw?d4gH~rhEq%U%b-^keT$CaX79e)~a0Cqd7e`%s zswwB|@X4{1Ikr0P>h*m1^{n>u2YNSF=@#(^;_my)*@y6Efw8SQ0G#~K>(Q?BqFt^L z0)obJAAmegKEiw?YF3&V^W4Q2w=ukR-OB3zZ6CYzK~PGRf;1!PR`%oC=zw&DOTP4@ zURk|so(AzddhkPU4{+NLyx_!LAH=(aBTbJo3z6!BnA(+zRd;kj>v;{=?tK0{AAiq= zbLY0j$H@JaJ!U|Vszd4vsd2}vac59*ORSdpc%~rpZllRk zyZMB;U(sOp*O!f%fpNATc;m3s2FJBVv610?ScfMrH z$_dq)9$-+T6^M!*tJJ-rZB>vt~B>SD}>d-?wi3a=5_?y^p!C>myVCwIXCph8z z(%nf^#!mBowyMfcnO>e+NiFfy+_@UA^r0gTd}ZoZLbwc!x6r`?U0&=2|P zP8dN2HanYHN+~otQDhKb*}T5^CtGwTS#6IzV~;gL_g`DAae8dA+n^4ZHjA11Qmv?i z*rRORKC&zjLY*WS=xgGr;Vsr*_R4R!4j3pnb5cVN^jn2w(0kFoeapj3%poC!tI-u< z`YQKz048=wb*k0{n^5pkC^Tgq3B{Irk=4am7XkvonN3p_^^SZIXZ1Np%Nmui9jLXZ zHGCDFN3DMX`8uRe&*+bD^oGKUmS4`McdNN8EB|D>!)PXKWCF*!N1E+D)8@$2&@fW- z^$G@U3)-XFS4{^sdq$VZZRJh}%~}_92Jl5T0eqR=A9TBzI-rd00%S*<=_ZHB#ais! zbFJTNjJY2VJ24Zfq<U_^8deHDc$c8^fI{{mYNV z$@N|gGi`BAKv!dA^71Qe^&=fWdwq@*0k^(fle-z@PCMO|PhF^q@$*@_L*(HNE6;v1 zX0Q4vcD}RxdbfPjT9=YY4S%zMXwi%tOXH#(FX_j$Hnsp{Vp`e-N2X0j_6c)Ijr7*1 z1^C^jI&tgL)6WM!SyB_&EyQNdcss8I#c$$b6p9#z(ZKF#;dS=(NBb8y-`C?oz$3p& z@#aF%YO+P|?XuiwCC%#{=t;Tz6+HrAyeIcmLAo7c&Br-HSgp6M9Xw|A%9MNU7Gz3p zD?Xh}^s#yj;0gE8!+{VBHO+}Pw$VGl?2EC{v~wr>nkhASaQnnS7)ubkR8Ejbi0>>y zkia;#CNsdHxM-$UCoza&$Hm|c;GZ_y=mFKqjM7a*YdAAozc;{L1i!cZhG2I2Wkf;D z2zeEv4KbSAS4;3M#EU+%OGtkYT5E_*8KbC>4b$F~3w-nAs~=hG5Bl1O*b(v84NQn! zI(_peWxlr0;6Weus-0C{mGAKRMsM)XNa00mp~HAdO}K>1w&^nt_NdZSz#%s9e&uw@ z<~%8lP(r{Jge-O2k#2Ty74PX}UexpR#Y;W%nqQ|zQyqRh-Nis2mJ zLMv{J)1n{nCCiLL%yLSS?=i9eYJo6FU2&3Vlx#$Q87UmX0%FXViD)*GucDUl)k)ba z9N0!;>~G`cr+`>B_$8sJLvSp(N5%*JOt7moHi*_aXo!-ya~@=*9QQbgK}oE$c{T^4 zkv2XMs7&tv)%vo+eIKNoLEE`kys30Au0`^x4#XIhvGP<;s3>i2Zt(Sx}YsL5M-_ed>WFPs9brQKCuAt5CUSxrY|TMaSect=Ac z#9lsxl7ADJ!M}~~?+wGK^|hXdxFuC54Yx}5P;3%Wg~R@=J~kyp&7UMGE&%dn%<^MoA|q5-=KhSdQ{`6(RNJsmaR^x5 zL6`GlNYW&ulN1+y4;K@72@@?2IEOlT7!=K#!=FnIv866gNb5c5YidD?3`sx}W$^+F zvm>}ctP2s7<&gASIX5H5z~eNbV}&KgIEtXIvPq2exD}g|6y&W~33GE}(LPi=6#z_z zZVyniPB>ULJuh3uqxV!AJC);c<;MyOZOF7@AH>${NL&uaO`$cL^t_npLRmQIQNrF8 z?|1v3@18TiI3iXdH|;J(hzcC^`A=4^UUoHcA6tONo~lJ-`qLJ zX@&)9iaH);wfDwpC_aOh*TFi~p#Z;CP8mtC=c;!pKBT@Ip4DGb%g6M-gwPFH#-Sk~ zz$Hz4!M}ikX!g4@L4X)r<-{bcxu5kAnBDhHJKevRY&%d>JLXyWdvo8%+Si=nD;1>p zH_DPVxl(^*;Ca@D^u)Ax{iYv__M^&Pflb5z9J_zv>$A4&$j(c%d`U%bCkBv^T-k#4 zn0P-u!GPMu<6zt*no;{1AJcR=W45TlkNpJE1rqkS_43_Ir0NQH|TNaxc2bK zTQRqC7gOVfRbAuV9Q=4Y9RXdyX~;Jrr$@eDE!Ug-Gg|vInIXy8J^E#}((JhtY7hDc z)GN`^WA*37lb1Qv<8s|5XOm6c`b5$@c=nHP%P~IZbThaY6v}T-j+@V&4xXCEWE@cou6VoMVrV9#VO%|CH(O*SS7^p7Kn-M5XFWp}%b|X@*t9$CfzT zO^|OfA|;#~$Q@OxoxKY+gq32)CJhr9g^VMi&}MIKP*a{)Qt~x0X?~0?y>O4C)C@Pkw@dMV9xG?^#zYk%?ZnwU zeYYL>{*N4)-c;8s=e0|cM%LW|o@v zJ!_5l#q)}Ov#}KnAt4`oUQHg=j?{Mc(%Nq^+HiJ&1NJcOPNNo-x38G!HTcQI7)R!&c8WRkBw%3)*HU?eM7g0157(|4|#f_o4poY zc{+CIEA3#1HU^^fPQ4t}5^1ACHd zB7z6vI$hCOAkxj@Z)gXgiN?|?v0N31#zRoT6afV1@woW&QIdi2d~DCp~ww z@c5iKuDgFY?VnW&N}=;dT63tfl#5fN71dHk0!Sr+-?_Xzt*Uy5=cf%V~xpLesJ`$iNCM^mPoLTB{0eQ%B>P^ zkjBd@j?dfwR7>K5%3Ld#5&0|rHYK9n ztXeT=l(f$hO&v3fo`#O!C)<&M#G`n}qGW@#i?Y#WtLgRC1|B2gWeX#1I_+6qjse8c5p6@hwU8BPk0fO_5}SWY-TJmcvtg~8OnHd(T z4a$p&@OTCdj`vDftk@UTzrwsU=MP7k#jrg%Y*MIDl^2)Ka2A)N7ERp%-8VkDE^v%H z#v5q%A3C_6Q%;IH_=%n&7Jg1@85ZkhK1F?z_@Rx+?A~rI(tEv$v=oWi{;kF0#hnXp zsZqB(>$yGq7pt(d>dKeDeVIo~1HIW{eFqB*LomIScOY{!v@^4M*_OZLb2IZYbg~sO zC>Zo|6gNVo$~DRF*ALLVaqFW>Pt7!23j!D zRQVC-J?T~Q{rVl~1u9jtDbZ8lDuH#iD;nRib~Up-&2G0sivo;wv|%(qH_2w{czjjY z1;T6R!zBnGPch5>Sh!t_EhpSTS|Y}J*1QP*dr&3joOI`uyS$f zBm{HjPBtw0wqy!z0Oht*WNTjo6hK}LAH5Hmq}>p2MUIx2%uX>~M?se}_c>N>1FlJz zLU=4Xx~-xrb~LE1X?8S~98al^K63500+1O!`&Ttho#AU>0vKx59 zae||kiCfMQ$6SApDMz#VR@|jCF`v0vW`x1HsXICf$cBdyK3QQ5%h8L8z*ZSa=At7% zw}4QOoJ2wVn>@#wrIg`xbMXbiTon%Zd6Ucqt)OM@wLJ7bH`S{Abo4UkfYyP5#0z*y z>N^&|h@%A$dU4Z`GPv;*&m-kw5{f)pwB{;~yO9hfXTLM3s&j5A8ifpZOtQ7LD|VVk zputpnDg4wuHCgTu*5XO|t_eOr)m>9xog1@-f>SsJXl!8!CFv&*G$RP6<-o@J-8X+? zQC#{r1JG-$et6}6F=+MF$fP2MetIaZ?&TE#8!Ftvi~A53Ii==hz(rO6S!ds)UnzsT z{H%p>*Nt`&t#(&19A!6bz{h5tt3^kVPfb={6>tB^Sen^4x|}i(OJ=a3#ezpjX4F+z zI9px?lPi^a!kx#)6aPu%6ELV!zMs`5#ES7?;xp=ohb^!U^vzyGC0QnBcj z$up$;G|F1D^xKXx#a|Qy+IlRAyIDc_(9aj>oSc&=%T;8ow_uMh`u|1%A`@E=`PhuhsExs=MF!iExA^im?IA^hv!hEff}Y z#KUK=zrJ_Uy5Ij;*}H}8cBbm?r(RUDHM#Ld5od$usJDent)kmiBCP1Ba_rQ@<0(cD z{|<8c<`<9k&HYY;1sELiZ$@8B(0s74FP|Vi&tR})I)p5d4!Nr2#*xPM4lcDonLB7_ zDhm{IPiIgeySf+C_dEfhUrUgBecT`CR&ICe;%xG5pl#Zc_p!FP!?Yka_WZ?A+$ID~SI zqW=9bZi6*q1E>mqT`a%&8+P_EOs(c$7#zXe^NI_%&~4$Xvep4gy);-rL3HiNr8$fP z;lO;QMSuA$HrvjI3_Mm+H}WYh!?4Oo2isdCkcCoAgkk^mokcy|CHNNX>7fvhWnc+) zkNhrHFB*8aX>|Tz=>GbSP`6KRFuV`xUl9q4^f|xmNfr!tHrf;k@|SuR0c|M|)g^7J zBF;+Bw^^GHc@+T|eYKdxK|UBdY}^hJi%rk_=_ul@SD_XnFb$C1Cvj&^3U zPBy_)_)AaBI-H)u^7F=`zHIL8?%zu;H|eE4-v5xZ_x~mvg~old>Hq7C-bmkxwcTOL z>(=?)@%Y2ZtFIlqWVS|1cBP8oxrgU&w{&=Y&vm+7^J4a|cV5xER2OkL9$J1-XOlQE z&bH>iZWQ)6pYZaX)oPtXnt9#VSweO_Hl6><>SJsAj+K2nXUj9~{!dqS@7w#izViS1 ziOK)J)hq11{^|ey*HJM)ex+}@*;*exUt?{-w-eVg3l4Am>1S%mmf+%2pc8zhR~3v8L`B8-HGDb7;!U3kzT6S+WV9^H{#nC1e-R z)i5WgpMAdjG^fe$+--G1@JED{V%xUtPi`&7dvret2E62}3CT&24ZL_{0>9?Q1!>RD z*Z+TVVq)_9kM$1wR2%IZw;!1OAhkf+r-`$`LHWSPmS(f4Y${bM%8r@hjQd*1eEaGS*K z&7Y=nTXLeY;I1w`=`&5afivFrh|TDj+xc=@sdesO`v7l7CVOUVM}AC>_wqA706hI8 lCqFqGSsA=t&dtEUkiozJqF`WKosMlzGO=xYV%wN_;!NyJ-kJaX-XET-=hIWCYMs+v zU0tTy);e zsjie%+KaqH=4Yy5Uj~}0c5oA?MYncV{pFTb-pJt%^To|??QHh-Y|o_dY|p%f*x{m3 zE_3Vt+}^pwHwX1snV-ZelHY`Rv%ZQhwdwqzewvkI>w7)T1q=I9M`p1d z<-mP9k`^yoOkblet2v&QFr}LsC8)z&^H7j9!e-%!^P4x>f%1g)%7?hmxdUH%ZG%1h z0i&e1eB)mEgBIT!tFqBTmWTb!LAO;u8?qZZ$%*z`3%~JKZ8W%6agbaaM#19*FxcGl zly_(*pt6!?cR|r1xi`s9Blgu{Pgy9=U`o!Lx z<&XOOV!06Eyj)#>eXe)Pkz*07O4}=vEacvLDLlDyUh*eJ+c`fuR;R`OJ3h3-G#nF_ z!+}wi1BDA`=1=E)b*%wK4i#}z_ifG^6*evy0EVq6K$#7C)4$m4Nb5~_JTN&*l`RMo zE){`h{j1F5$JuS&4s$9l?t(h|o zf$zd=uOe$07}{;bo3iJ$lqRA9`ej0vjfzcnLrmxntge`_J1JCy`s5@E7`%z~hA$Bd zV)`lrsdEtvMKwKDKU2+K$ao&Kc^zHicf5EU&)bFnwAzjH#O#~hoVw%Z0qeV=dR$-A zV&Ped|CH|SAAIb2!v|3u*Pv+x7Z=B_Yg|}nEjJN6KmAZgjrGPf_C7D!`%0CJ zyyFu6%_2@W$0xo6#Yt?jBK5fUIY8WwIXG!AhvXQ7PZFkwoe+0eSjF>w-xn>GrED5`M!fV06buOl zRA3YY;({E^M`4Z}BJ_R`NDKl%P)_CPO5nw+e&$WjTK|Y{D1A4JRUmwsu{D|X)jX%pUR7zQgjsu+%Ng~J&2SrX2 zof2nBc8!Rg6TiXSB0M2L$EbOF^Ba54|Ktj>8@WsjpUzLr1`RR-tk75QGoi;HBOroB zU`W>&wc~_VO*{gjK1q6zj0p>z#gi zXO~k78?7~QMSv!Csy~CGJ4uh$aiZ=>pm0F`ddzfJ>*Gl{OjYQy|8bD)YTI zs33;2?=97Wfd~`VDue3c6dqCfTBD@yP*}L;>6wYlK%CL7+C;;^Ox8~wtK|K$2VZ=Q zT~E?+`^}^i_-1`x<*QgyxgBGcKc{>dAiwjFy1ihC6j~>i-gNHG`lM-?Aeg;v5YV#_ zXjB*7c{e*b&-G>5Sxfp}1})yt`W&v8nSzGDx&aA_xMTUK0yfhIV{xIK#&A{3ri)+T z5S?AvZgcYP0Yb3tEvA^NM@!|-8ns~2McO_mUIN(@kXY#9*c-5zC7y(%)QQfMie7aO zzJ{`y423UlQmU${o!(TJpXw2-5$=q+6lNp^X<0sD58OZ!u{ZL7wpoT(17Cs@y<`LL zEx=psa|(Q*FRFvW7Lq#46k{VIo+V!?iP=a@=vQ}9N}ckCQ7fZ8QE|YSW)WK z=yaw<$!)VD;#)zjI`i$wmU5e4aACU z7I0t~r6jUIfJ_r?Qj1Vi_F>Zim>#>#h?>L%SNilbm|da&cQjoLG6$(7zkPgM%-UBe z(J}tSdfIc|W-=-J`C6HU1_#X}+7o#L2ujTAGyWMhaXkw1_>XJ@YH6Q8%7DR)$t8X3 zQMhT+oL4m{su+0Wmc@hhZ^Zg$Q(<+cK}65z9v{Y##Jqeg3fkUnQ^m$ z!7lN@L!VOUt6y0Izi67)Pj&QSuim&!B+mt`(XC`_NQnhmVVxfVC78|fJ0Z=%ChO3= zX&Q5!us@A;M8Fr|Y^3PNbX%U17vCeaB*(2ud6G3vDy5fNlhjt57y+cEP_S1-m=6Ym zzv&$HgJJPE@+&S3=(~H_n#_&ZjWjY$wA2|9f~cte2duk20q&+k`I~OnqnCgbry3DG zPPrjcG**d#n^N`21_<=7hm&M;x%bIcI@Uegv%l2k2h@F=Swf|B%RRn=vzt?~hiTu>dDpUKAyz zxxnk$2S9$11N<|T`Jmh?1wbPq$R&|s%s??QkpcPi2?qp60s;RaA>u{CePWeCp-HIs zbERI8ufLCVTz*Bu;-Nr=W4St=kgkCv!GePmv(#tcw4*)4`t}DHk$m>wdJS9^`VSh- zqq!qsB(W7w3QxN8hZBJGgMyMYpn@0?gC?#O147@0LHZ#fEP#g{4s%C_Aq_jj zQYq&RYP!UzoG7+Xe~m6ex9%DBM7<%iDKNz>x+P;fQ|~Rh-FzZ#vAclK;;9<>ehNnb zw500V-`VvLCOnZjSRm%4h|Tpcr_@RSxx~Fl+B3Ds!&`>_0L{Q@?&ac-|(=H&JV5aGc0jfC*jDuFOOb) z!16XfBveui7%ECmQ|3BAmr`fYh$iJ-hLQM%a{2)$YmiTRS``9SNe+OKsWudPNj zSSw^KQEWZdjFF>*)uJe>1I+VFk_d0{x69`qWG9fm-SRa>=^N?ow7&Ws^!|1<{= zX~p*w*8;Q*g%#g7_QCdTDsge}()G&A65ToHj6~AZ{}8ZR)&iFdF=cm-FTL7?A-K%v**IE$87B5Ev%>d#`M0_h z5EnO~tm!DOWmRK22DL|VAGs&AOEf18)!^BpN8)eo!=rP#*J+bD2ybFjNcn)$Z6iWge0FTu@TCYijCj<04NRlX0QFSrMfB? z0}{H-nOAuvpAfo|;V(0sj~ZUz5h^8lWVilSA!AOQg8beG{gr+Y(Quec`GD;zQ5!UEQ)N+DK*^K~ z!p?>1lq1hdBAac5L)2Mj=o8@`eZBAxM$|1dQbbwicND@w@`$U5@|wmWmc@D&f({Jh zI?L4RJks9(Rc;Z_a12WMX2Rp0x#1<9Qo$4qlz}3EmZM>$HvDi{Jqir`JOS1|$uAMD zvHC&LC53Gg28aRC|H4@vG;U~^u+|vfa3UXx1147E#)v>fSSqbI38%OZ@e)g5C%AYb ze&bj^^>Bj}YyKbUKqs$Ynif6L$S7J|g+Lh2!2pQJ_Fj3dF`ZdBh)B0p5v(Q<0<*Uh zfFy<-A55G?xR{YJ>!t*EW>iixHnN@JR0U$1-{{zwEPL8p1mhAOl2pzNp2o@tg=$?E zgTuc_h$fO$rdUjwOnrrmP?(0nMwt5qB3Ck`Q66=7m&Ivrfa+iIKR2+48{~Mi?TR9_kbL@76|h z?EY9A7)DM~EI2{irC@`>B1V};`qIGF%A{lKrOEA-Q3my?8-J>7K(AN2&L}#lNrhxr-As1-}eC za*jL8|CxOYW$ZJ`?4Q@7>?)0Xi>az3{ST~!On z(+KW5D+bkQ@;YK*!GcTd24(~1Ex_AlL*vyK)=) z!PFUY%e2rMDHLJ;r(oCrSFlSt7Ie80Z{buo8=J zcWC@ePUMZOot&tq7MAKNgGvZFWV^a~`<_jIQ`lb~UFZ}1;k^&xuu&zk{UEV*;q8W8 zu#li(t7k+_saIUU(osg1{yq)8D5~(*0JT7+xB+34;+EAM#h^q2*b8s)Dr~?V|LBsa zLdq!#O9yADA!d+QvThTew4*mEKz)c!XKhNTP4gH#O`D~eYuuh^OS;g?DK#g9$FRbk zYm8rPEQ=NIpOygu*KE#pYU0eQ;tPK%@lQo#CGD$S%wu0K)8;hEfNhKFhz|WNonl>! zib4%XD79AiE|!@Ci2sLc*s?nOzdfd!dF%Br{KYjgv5l4m$5TNf-_!v;n!f|$?|Q^ZIkL=um)C>NP&uFRK^D0H~}9a0-#pl{F@={zN! zHSjueF`a!73xSYMM`aS%EMt5lCA#d_Ar5)0mOM=P zC`v>rh6JF(##By|GjKUGLUWGYY)05Enf5AWM-l>&Rs zh49QS2fkaEaBcZb1fYZ03Jf3=?K}0)vI-O;W&OK+es6=thIIq^3=aV~ApWhSVGh7G zax0JnCd^5CqeTc3HiQ5R5_J$k>J9<|4H38&gx_xfM&cn)!??=+elBX=K|*u~6)S~< zMWsv#xjBxHLIB{U8yhoUgCapgL{J5v_ZtipM3DuG1rDw_X9!Fl@}>ftd}QTMO%f71yFLyc9BEbf<~i zve7xOAiRB6(RyTGImyr1dLXyA9C-%VB-%U^;kl-RTecw%X&TK=tHpd|P4oJ);_){* zWv4Ch&`T6n^W`+Dm<5T>$c$;jhNalX8EH1EyPWVo%k5WA`Rso)_zU$uObjx-GlPX_}f&j{X4$W>`)R8Dja2t6(Lr!E}A%y5X z#Fs6pce#al8!1NQJVuV>J#@|t13pGBc*4K`$hVlPjBt3xl+dn)-val$_Gf3Y{gfj?-ToA|{&hiOlY6_zeAnRJUJfw(vitGV9@! zDn&&-hU9FS(G{tCG)m0#F@8pnr<@>YkO6A^t~-27r9Lfa+muZ_Xg+ z%US;gUD*!0HJ%UuK$mxfI>Q7!cA(}D{-d_vjH_;lhwMDaF`cJm;X0APCP`!4!HvP8 zLqUP7%ky}Ik}L%f{D%bV|DrU!dSqOG{8bt|syH8ry|NU0`5CS8)&c)1jRpe0Lye3w zDzi#exwx2HcQd2SBWrv?53=ucYeW^WehyFA((*nH#lKXUiY}8kcoAcWt|lfA&D5^T z*Y(}Y1=*LP{%d43ha*7%0#dW89iA=JAii;s$B5^~41ed-r9LbPmL4yb-jIL8V#6*O zyc#Q(o_rNO-cjIxnt%&waMfna2}HV#zj0$)h;d(l|dgT zo{0F{KMJ)0{dc`Xbe5s27Y<4Wr9AgpsNnYvj8#>C6H8vTY*pt53Upcc+ zWD~hG*;EI8|KXg;&86B`3FY81w{>xQ_P(FcquMn6)adE_d_FfjXN3c%eGaXys$@2X z1-CBx#S-3KKSZ>3&e#%Oy^AHxt{{;SqcQC72_KXniHvT6>!Pf@A__@S=m(yyYNZ2# z_I$c0F`PPp?{P)NNzWJo9_fH?EUp<6q0$(C z5ozeu6RTNn7?T;&rS^~?G+P9g%m6msq}!pqEvejXp#KMHzYF!d=#Xw z@yOh3k_54O=qjW4h%kJ~yi~i>bIJVjN=i?{C}^XA9jP9SNOi>R>6@FBP($@c zuW@bkN9z&_$cRP)m_;QjwSOq-J99HN5+TvHk3G&wtPCPXEt9B0h)TQ?(~%88co5R5 zw2Xri5TGDs)k6RKV*n0;Enxo2}9HE=>~m1(SQR;es!=TSCQ->FHP zid!qo^Wit{c;g#?{1P_Q#yF|uX6fbh;ypf3xM>Z?Y^b509AAJk60z>v0vU?+o0FcE0643`>fY2 z%X8zLk;NYV!cv`tFQI4B5oZ;7-WNP-ihnhB_?h**4R*87vCd_nh8W0SC7v&;kf;!r zb9=d15Rn7eY|JReud=6L`EE`gTj>j^`EJ6e;nJrXewBesm}?f`73TsKwna;c zm`IHS)-!O&#*-n{PJ=UWWgee!+IuAQ1ZH6&K(*7uRRTie0HOdrLAnw`{FjJy%&S@z zmoX&j7Ihoe_^hU(_5V7v3ShG=vRUE`qeLd@?PJa0d5>hW*&+N1+_{TB8XV@MtR#H# zzb?3w?DtU`51OS#=A$mSTZ824NRc7UqCyy)zq21;^x00ulT#_&^2&!IUht}Bhe!iB ziGi2!@T98Q77T|}Us&uBwAREJ5D;WuL&7-CqR*8|+xH{(Q+P3=|2ARZ!gD1=FF@ds zpdkg~Ljr>Z#6_6zaq>y>^AX@i^i-EnmBeM9=8zkU&t{VGGKrA3?JcE0YNm0!tP_dM z!YUNjdLI33fZPv}&;da#r@DU_9$493XTDr#b_rRso(=d*Epk70*O6b?JAb!3;)ln* z^q%$;KK*;Y?kv@?gicT?W9&wP>-$n;|6_&e$&mm5L;9_m0el2BJXuX*=VEx$#px`t z7aiXtKo*1rO z5)x-H8lPnN=M0N3{nr!K!z-#_mF_s*==|!jcl{e=5-$~Vp(U13{D8Il2cH7kivT~8@` zN;u9oHsZ?^fVlJ}4GSr+82!GP{eIDt`HhK zM<`6W{O%WYE`N8^)?btEhW08h)dwEu;pReGkD169$?`(}H#QZHb`cdtgfZ<;>%q0P z*Q>+Wg_pvWtlhH~zHwYH=jXld?(ZvI9at(B3_^(ez`PEj12e7J(js}3LeBuSc0~DG zMJcC1aYM!_syd0KiB)RY!&ugbSuK&Y+1CTDgz^`mgUr$^>lC-y;Mk8Pa{2^Iq?O_e zI|X7k|1-f=avKbz#ku0bqSyv#{jVeaoz+t`UUTi)_WChSDhy)sk9Av&R!QQPTKEdw z@l^hnKtfQfhjY3_Ca1FY#A%kG(Jht^#JEO+xJHf#)=2bZ0UI_hhMc1U&c>tf zTKIq7U3oK4*|}5t7pSJ3nxk~M4D27JXlz`yDyYS!2b1EJ<_LR^yCyS|tA0}`Vsgb7 zqS9Vg*DjWIUg3T|TToN(GiXoHypvb;;=23m0_VimDmuk9qoXFHQc1^|t+fG*Z(alj z%)Fo9pU*RI&-=`861=9qUc8`ny!(1E{2hAQQX1}$OUt1$QW1|eHf4QOF1$osdgSB@ ziF?CO_g6!gyXnoJ^e?xe&7C2qgyIj-zEYZXJ{dx?V9W~4AKmKk}7dVTD zaJ?Py{QM#c_T;zkfdAycBxsnu{fPKFB^D}3j1L~%J1nt8OB}~?$fvwn{fZ!8$Qv^j6yW3G?eZuMVN7*)opa3a-P!pO=mAJh zh{<47LZKjnwRvX`LUS4oV`p5UxXaO@H@TxTk;RCJw^Sw9ytU z(AkL2(MOk=a~1E$7pZ9@C0|1&4pL8&hii7VQp#C!TzP9`af)ulbr(5H9y3tVtWwog z-GocceTGl3jSVgg=3Kei2_) z2tBef7EIq5-h0BGG`QUUMQ2tgoqbwE9J((t+mupz&@$?in-CJ2dD8wc-(NaS zTkw({8#dv(Y{z&0cy8|8^7!WW=PE5b<+meq-5+Of_qV)}&s2WXm*} zh=+x51y}>e>&{Zmg#rtonrNhcW1^JRIKhBh)t)DF{6A8-~MkjaR?FXbpz9VHsHc8OJ zvdC>9EDryYN(r)6-OIT?#9CDU(>(5PVhM3}a9l@B*>ZljTD6n#=W*}#;Ar`m&u~P6 zS(vVtrn+5<oWcD9M#)WIJ9P;TiX7%U&bx-HtHyQ)92@3>7*w>!m2o^ zOL~g6UtO_)66;>+8QUsRy}vyhsv_wCpU0(CE_+{N3(hYCQ5Y&_?{ZBMft2@u+na!1Wllg8P;h`+4LCcIksYErk=0}_)0GS;?l5%O{k<~k-=3Gs`#@c7mJ=dqBz z_B6#!28TH1c}qGpScEgnTo~kM|J)`vc~;BFFz`Tmf^M2tiJ1;l*2!MHZjN;pMu|n9 z5GN*z0j3^=dLPEy=qe4J-4pGbAJKKy25Oj5B$kKd`B+qqq@TtF(prNtybkzHZd z0i^%XPopScowZ<}8k_xo%3aH7yu-~}Livu7@C(;><>c)5lLHFrtkco$fONMHEB9mu zU$!1Z=vQ687g?MdtvHwq*wg(xy^lysXO>_7Y!nxw_5chvG zpxlt$EkL#o18fF}f;(Ip!#`yz8K@coM5@MqEgdfu*j*CX@hV+EAbh)N&H>8?%ia)D zNRtf)Rd9zd6SY}igPrQx#h`4J>=^^e-auE7_}hs*(taDHU6TWqa)&OSc-UnF`JV%G z_F>;MWwV@629sgoXKK)aJ=nq}x_3M|xp5C+n~{>RJ67;iu+*~!jY=&P0Mrov3p|+8 zS-ldSIMXT=dFleJFs*wkoctf5sWI3F`z{<97c}l)OiIz4#IOB8pS zT$O`5h#KKqINV<33qhrs8(6*!VI_(O;h<#a2hg>cQ16OQQ!7POXD{F<-Tj-RwD?!RPc+~!@l<}qIW9ZZ_L8zhO z)EQkdL+!pcwa;AH#XBLXlV=-F0nN{1s%CeLdt$v9eJ}tPwo-Y^oGn!NFb!gS7z)pxj9TilN0AMs4ynLIs&)C^?Gzl|oIoYf2z5Y!cvS%<0=t0D{-H2#jt9j>@LjTA__vm*YbM}a{& z^+Gh|{e=~0>V*VpYPyG)QYOn)GVPo0%8wVIk%67zV(?pxxO52XP6+GYA=8#|fSCS_ zQz9(_Mz%BrSUr)J(|6RJ^L-mm$r`4N7N3k3tD=l28a~DN9a;IEICtWdHDf=Uvj-7C z?0>H;Wak)N%CHC=Zl1h+GHkjqt~Mtf^Q4>Nh97U%+CR5i?~+AM+GUJ`=vHPT{A2(c z*KZsPX>le?Gb4?@aDTx0sO58ZTDqJV8UR`qw4_oouFtXx7Igcc2PT9CSM z*Q9olevO(i2XYPund8V6-u{%ycjac!sSPg)8I8(S#upR`#)J56qaHP!v)&+kx( z9?(7V-3^?GE5BF^d7XVZkp=6*uAp9N79OX!<~?sFPRL?AAUO$FTN%*5Qx4c1(VdvG&`?(=xCQ zn7#eZKdm*U+h}G8`}sVO8=0LV_ci7Ho)>|tiPBTwkIBSOkvgFXh*QKiOwBW_o1E6a zJL($2cW*Lko*b@!J}@8U?8yM=ud_bJFIWq98abjz>)NgF0*rY?xn{{GYQRdk+eVde_?SDwPjoyjl#3=Ig6R3 zV=T9keIBvSz3p>zlW_pYZX~v!aI^Q?R*OE9Tt~Kah%uv^eSzEoI4WfUe!*T-sQ%&u zET-(R2jcSIwSSNy>b9SDUwm-HSid1TSu=U)tBjR?H=hl0mcyPZ`@o-?i;B*P>?df( zcEBa@1?vlVhksDR0YciRkh{Yr@;SbWIMW?2_(1hrK0`}db!Y-c`1naNPJ{FqyvChN zk41qFH;6Idwt8I^{*8~ARkojKBQ!|zb+B<_ROYPW$p@Te2U`reI`Os;p>>?!9VAn# zVI-hh@i{7XlRcf$8Xxmb|AAOtyDUoKp5z@C$VR)dRx&I+R4lW*M$? zUBB65j0LuuL;zj;f-jeWYRv%!Wk@q{?Rm$)uk-!b)d>ToJ7en^3EG>;nP2jR zaQF`GOs!|I3W%uYRbL3f5=hKJflgr|5g81{K*s8NeB6g@9FL}`-+B)Qk-$RC{)Ig@ zZRo}v*a-G7JI z-u%IVeZ%!lV-RMVTblBci?`MhuT(p6$zHBjss=MESR{^_BWpUe+Df&RS;bc`X{&r- z9fzxTSWJ)=e97p8g0vjNA^#GGdbSt?I-Y#NP5W+d9m^tg?w6;OaY6zsd{Mb^AQm*O z>~n`|4sdgpGooS9jpjh-CS}v`JapvI%g>DBU-y1v@X%_c%NHagm~s}k^{o8Qx{B2h z`_JFYWrUl-;F=+c?;o}nNK9;YQ_sM`=$vy zk9un#eqQz?OIuacQZ9YWEvbo&eu~g{u!Yi65zt^)eww% zUE@=*ZFX*UQOOdnD4Kl*dqjZ z4x?7~U9WXS*VrnKsz%A|Fz5~}c*T}tzEf zNVvJml0+I?;M71ZE~H#Oy2_hb(ghwsHvj(JP}m>c*B}IHR612AGF~pF;a83IF#457 zbtLIqs}Y|?aq>*@D_ILanYf*aF%|b6nm^r+QQ>9%=a^A}?Kg#<`#>|5i|*tr_=Nas z&?q_h2vDR}5fQR~b}zh{o75R1vduQIO&gXo^DIGJOf;#<^>2{%UwNH*9{PbWF|?mv z3?$yLDBeqMcH}nswbp1OVUw=DFGGh|RD-AI1&vzSBfA2l&CxJs-=)!zQylYBwZjQR$#W`Gk)%;|%5SsmK2)%iAT8qn} zp};`;b-dL{*f$DOgzf;};A#du|CT!^{K|M!)({}ccmT^C#%OF^8qaE6; z1!PjPznI!5)QkwWh6!qhXele;rV(H&)ypcbt399QWXeb1nd~5opz-io5;0i;SkfA3 zw3p41R@6v67?9Pty9fd%x(~<@&>T*};QzvA7`P5}_u%1U@TThqnoD^l(gM;U#7aS-s(`Bvc-a9=FUMRm$~>3!Jx$Y| zrQ6&1BUyZ@Jv$7Y>F7!k$fd{L%a`i?i3JB1^Zrlqc$ZgLx_ zFMm4-_#igXJ%8Vl7dOMZKEVKV;MFx8(+(HbYR0^`{2WoS~)>CRUU;=Ina=u z{WIBeny`ibvZWS`IL8tfn7@^+Q1ScDdtTr2W8Q5>emxYxhaywyn~d^X=Jhd@dc0OM z|7&#+t9HW?4K9h()rFMse;6t|9LiG=BGxq9pwSro*si{no6+J zGEs@3e;z9!0Si!T5432tl4_oo_4&y(l{qJ247?>x{~^}wcGP|+Cu%}X$xv6ybTk!R z_vb}|hbN&vIj5*y6Ky~#7T@9@T2utIPiox&EVh69y$+fEB+E#Scyo>k^syQ0SXe8A z)i(Y)Ae8U6y6fwiOXkA#+Yg$rW)g>ZLZ}-RBieH*;DD0T*`;+hg+NHd?)D2H*4NoUQUstnZs{|sJ z0%zM@b|j8`dVCWN>*0Cs*0U69LLTt~L`oMI?^0)|v)T2rkizJPh>})@1Ysi23;L_@ zfR6!*hF|e!xjSWkQjSDKqZE9dQ+J1PiiX?f!_C!gzQX}T{@SkLs;&gOERnv+vC#`- z^yBUXFV94}9R`HsGfp!-Ka}{tmG9_Y^zp>^*0)G*!Rd zAl0i7pY|jv;(qz|%Ue5XqcM9KZ}UB8tpV}Ec&8sqQ^AgGlCx%?`S81gvPIVlRFC)a zu|$;baq6VjhtO!F-USa8C&JFL5GnReo!qKx_Ayt1hGS>EN(4Msy>+fLJ$dJ(lE|-i}$c%GD8@fpt z67h^G9G3+WiC8pn#em2>5$~YBwoVPDd|kpWmU=PhT;YKOI#fGMGZq zw%qC*6_Ruq#muzP0EKkwM@}l|HQ3wvx*C&ISBT6p(MJIDTO)Dz>?C!6-w&Z5qq}Xp zv%BQiZyM(D1U!PS1dI*S{erDL3$vUN(RQwOLYwzbX5h*8uVyo}frio-Dddvz5nu;l zy~ftb{uO%^CC;K^XC)IU(ZrHpD7{(DRR5UBs!ff23Q;_c14-ng2EwQa*gAuK{l}k3 zb%K)d1inx&&$CIU$O*uU|EbxYF4{BvGvYJu8uCxDx)9!Hwr@}iryj5Tm1MwWMHRPdI56L9~S zNFezjt3^gI2gojQqZcX4nT5Qw)9T3G(An!0GGhx9Z_;koEozi=1}XZjF*LEWn5r0s z0%Dz+NxeFLT9r;<=)>|?#u^sbI)s|4KJ zte5&7qJG5*nW3ni$I*2B%cZE}>v>@=r7yy($JedWfRSa|?EPD8WcG1$t8D}mnN&;b zPQ2mCiD!dlAj1nP|NV}%hGt^N8};viul-K*$lMo z%~->>C1_RnK^tm`9HQM&0b~yZghuM-<+EHg1{TUr?uF99CnrCuvE=tdHOkHna44t0 z<(`}-0Z?B)7B1Y)-&JDqWrH%zeD#s@uWIhm3tao{aTC&+LI zHNQ0!%l5NT`9T>#0F%;E9EDx)8u&{m+}0sSqlDC1euB2RtL!!F=2wpxd6P+Ph- zJ!%m@3-RQD^&0;5D_q@UsUHHrP!~6!r+wo`9zPG4Km$t+gPdMFZ%s3Ono5I;GFE!9 zI54h;!EBKs;6doTnraJMvjdZiG0XKLilw5?XR6pr8)`pGUm1W@=&DyP{L#Ia9idUd zZ9qqds{z*8sb#s!YM}KkAYkvJvpC39PZvS^O_!2+TF6sfTQVY431D43PZp1J!;ivV zwrS24%x_umm}EzHZA+zJY)gG3{JC`W093kEXw{Crg;RZnQ&FP6FY(Ai=31noXKsz_ zfY~&B1`}3H|IGNARO~67$3YbrpfFppDwn8V(d*2}C*mgClz%oCeN^rMDQct1!uAkd z_g#FMRo#9NW$)fCJFZPa&4K=)4cn2Pp8GM~$xoxhUKl#Fcki;g`G=?ag?6buTuO!* z66jk>sTdIe9Td4X>gHBXW}!F`uQ%f9wzJ+Vgw-mCO*%3v6O z%)uuC&!fkm-zbS@*Id_<*Pvd=?-+jAe$al1-$+1!*$~-XSS2t+(2fEZ{_Gd5TxXnM zi*!dG*2EI#ds@6kDLw<$Up;@(5GmzT6FkR|Z7RZT;AgXIM=iq;KVLG^ZSeqYB-KLd z3Le81&c!U9Q5UU-@)X_DdcUrP@%TeH1*SLN0S-rQoQlqVMX<7Oyie+lbQCq**P8P< zK2|CqmEgD|sFFugEE>Hu=j%kvGH;wLzX*%X)I8KL?=&<;lh`xYB}cY|JPdCgBdIQ2 z4jP{R6wuK*KaAvnTnL@IyR(ug+MoF;{*mm z{9^Q7s~6bR^t|mC=Y~!R{>llM8dBh2SSc;)Nk-1r{rTKTDSEq-ar6k^v8^H2uC3dc z+qj{Lc6xNr-6NyZw`{NB)pAwe^BU!J6KBQJ-5LM*HyOSD7&5)bPk-96w=&jTA8e`R ziEZ(zZnX!|7gLee7Tx+$IKSJcS4wb)=q_Y~(QRAL$VHX&(YxQYC<5bLVb4ch^w6BM zpW$J4@MnBiNibzg)->ulXw+|~rvT8BIJ9C?-xy-0DdowTM;w83!_r;nT$&{abSo#gr>+fLyvYm5h zaS40LEh62-x=N_TTLV-D7_vZvn7C3Xvsp!;f_qEIlzUG%T8~Bd9@W#di7RZv@JcBM z+P*}f4Wb{3#eM5Nj=K3h`?;(5l0ThvU_3JCanpAnuJ#;h-w4R``r*e^77!yg!RscV1y;wCP%{{@3OL!J|kseH;-o$y7z=ns?3_vfWK^KhFtH| z-*d>fG$nJN_vf$sWq^@3@BiuJ^}r@c`5)$&ho}AjpLqRjYyQ9aW%auYUI#A~JtuQ( z4^N(jSv^PFyDu$UIG#V5b~To9>bul}tJ@6gZ^Z*QIh}K#vE#7V$YY;}HAF)BT+-=DQj0bDrAgHjTqFGNtA6@&&sboa@yd z^j7awJ~s8@+jvwKp^}@+trO`R@|XTn??>*YgdzAPNSyH8xC+_m*RHom}Vb F3IHVqN*MqE diff --git a/langs/en/messages.json b/langs/en/messages.json index d34aeaf..17aa86e 100644 --- a/langs/en/messages.json +++ b/langs/en/messages.json @@ -4,5 +4,6 @@ "Event logged!": "Event logged!", "Client saved!": "Client saved!", "Client must be edited in Invoice Ninja.": "Client must be edited in Invoice Ninja.", - "That ID does not exist in the system.": "That ID does not exist in the system." + "That ID does not exist in the system.": "That ID does not exist in the system.", + "Machine deleted.": "Machine deleted." } diff --git a/langs/messages.php b/langs/messages.php index 0563225..7180d06 100644 --- a/langs/messages.php +++ b/langs/messages.php @@ -41,6 +41,10 @@ define("MESSAGES", [ "string" => "Client must be edited in Invoice Ninja.", "type" => "danger" ], + "machine_deleted" => [ + "string" => "Machine deleted.", + "type" => "success" + ], "404_error" => [ "string" => "page not found", "type" => "info" diff --git a/lib/Machine.lib.php b/lib/Machine.lib.php index f4f8e5d..0183c2b 100644 --- a/lib/Machine.lib.php +++ b/lib/Machine.lib.php @@ -20,7 +20,7 @@ class Machine implements JsonSerializable { $this->machineid = $machineid; if (Machine::exists($machineid)) { $this->exists = true; - $this->machine = $database->get('machines', ['type [Int]', 'model', 'condition [Number]', 'price [Number]', 'os', 'serial', 'manufacturer', 'clientid [Int]', 'privatenotes', 'publicnotes'], ['machineid' => $machineid]); + $this->machine = $database->get('machines', ['type [Int]', 'model', 'condition [Number]', 'price [Number]', 'os', 'serial', 'manufacturer', 'clientid [Int]', 'privatenotes', 'publicnotes', 'deleted [Bool]'], ['machineid' => $machineid]); $typeinfo = $database->get("machine_types", ["machinetypeid (id) [Int]", "typename (label)", "icon"], ["machinetypeid" => $this->machine["type"]]); $this->icon = $typeinfo["icon"]; $this->typeid = $typeinfo["id"]; @@ -130,6 +130,8 @@ class Machine implements JsonSerializable { $data["machineid"] = $this->machineid; $database->insert("machines", $data); $this->exists = true; + // Insert event for machine creation + Event::create($data["machineid"], date("Y-m-d H:i:s"), 99); } } @@ -273,6 +275,14 @@ class Machine implements JsonSerializable { return $this->components; } + public function setDeleted(bool $deleted = true) { + $this->machine["deleted"] = $deleted; + } + + public function isDeleted(): bool { + return $this->machine["deleted"] == true; + } + public function addEvent(string $date, int $event, string $techuid = "", string $publicnotes = "", string $privatenotes = "") { $evt = Event::create($this->machineid, $date, $event, $techuid, $publicnotes, $privatenotes); diff --git a/pages/addevent.php b/pages/addevent.php index 7dad845..e2d5818 100644 --- a/pages/addevent.php +++ b/pages/addevent.php @@ -31,6 +31,10 @@ $form->addHiddenInput("machine", htmlspecialchars($_GET['id'])); $events = $database->select("event_types", ['eventid', 'eventname']); $eventselect = ["" => ""]; foreach ($events as $e) { + // Skip automatic-only/internal events + if ($e['eventid'] > 99) { + continue; + } $eventselect[$e['eventid']] = $e['eventname']; } diff --git a/pages/machines.php b/pages/machines.php index d746bb3..288320c 100644 --- a/pages/machines.php +++ b/pages/machines.php @@ -19,11 +19,11 @@ $machines = $database->query("SELECT machines.machineid, machines.clientid, mach FROM machines LEFT OUTER JOIN events ON events.machineid = machines.machineid LEFT OUTER JOIN event_types ON event_types.eventid = events.eventid -WHERE date=(SELECT MAX(s2.date) +WHERE (date=(SELECT MAX(s2.date) FROM events s2 WHERE machines.machineid = s2.machineid ) -OR NOT EXISTS (SELECT * FROM events WHERE events.machineid = machines.machineid)")->fetchAll(); +OR NOT EXISTS (SELECT * FROM events WHERE events.machineid = machines.machineid)) AND deleted = 0")->fetchAll(); $clients = Clients::getAll(); ?> diff --git a/pages/viewmachine.php b/pages/viewmachine.php index 07daea4..5177422 100644 --- a/pages/viewmachine.php +++ b/pages/viewmachine.php @@ -150,7 +150,9 @@ $machine = new Machine($machineid); foreach ($history as $h) { echo "
\n"; echo "" . $h->getName() . " on " . date($SETTINGS["datetime_format"], strtotime($h->getDate())) . "
\n"; - echo "Technician: " . htmlspecialchars((new User($h->getTechUID()))->getName()) . "
\n"; + if (!empty($h->getTechUID())) { + echo "Technician: " . htmlspecialchars((new User($h->getTechUID()))->getName()) . "
\n"; + } if (!empty($h->getPublicNotes())) { echo "
Public Notes:
" . str_replace("\n", "\n
", htmlspecialchars($h->getPublicNotes())) . "
"; } diff --git a/public/index.php b/public/index.php index 9cda17e..5d81521 100644 --- a/public/index.php +++ b/public/index.php @@ -276,8 +276,12 @@ if (isset($_GET["backgroundcolor"]) && !empty($_GET["backgroundcolor"]) && preg_ getEvents(); + $events = []; + foreach ($history as $h) { + $events[] = $h; + } - if (count($history) > 0) { + if (count($events) > 0) { ?>
Events:
diff --git a/update.sql b/update.sql index e279c5d..001adcc 100644 --- a/update.sql +++ b/update.sql @@ -186,6 +186,12 @@ ADD CONSTRAINT `fk_machines_machine_types1` ON UPDATE NO ACTION; +INSERT INTO `event_types` (`eventid`,`eventname`) VALUES (99, 'Device ID Generated'); + +ALTER TABLE `machines` +ADD COLUMN `deleted` TINYINT(1) NOT NULL DEFAULT 0 AFTER `publicnotes`; + + SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;