From 5b47a9d0bac864de98559af46bfcd6bd7512041e Mon Sep 17 00:00:00 2001 From: JBthePenguin Date: Fri, 4 Jun 2021 10:47:13 +0200 Subject: [PATCH] ok Add Modify Delete for location, next entry --- materiels.tar.gz | Bin 16553 -> 17756 bytes src/lib/Location.php | 43 +++++++++++++++++ src/templates/_nav.tpl | 1 + src/templates/localisations/index.tpl | 38 +++++++++++++++ .../materiels_par_localisation.tpl | 5 ++ .../localisations/modifier_localisation.tpl | 20 ++++++++ .../localisations/supprimer_localisation.tpl | 11 +++++ .../categories/materiels_par_categorie.php | 1 + .../admin/categories/modifier_categorie.php | 2 +- .../admin/categories/supprimer_categorie.php | 2 +- src/www/admin/localisations/index.php | 39 ++++++++++++++++ .../materiels_par_localisation.php | 20 ++++++++ .../localisations/modifier_localisation.php | 44 ++++++++++++++++++ .../localisations/supprimer_localisation.php | 36 ++++++++++++++ 14 files changed, 260 insertions(+), 2 deletions(-) create mode 100644 src/lib/Location.php create mode 100644 src/templates/localisations/index.tpl create mode 100644 src/templates/localisations/materiels_par_localisation.tpl create mode 100644 src/templates/localisations/modifier_localisation.tpl create mode 100644 src/templates/localisations/supprimer_localisation.tpl create mode 100644 src/www/admin/localisations/index.php create mode 100644 src/www/admin/localisations/materiels_par_localisation.php create mode 100644 src/www/admin/localisations/modifier_localisation.php create mode 100644 src/www/admin/localisations/supprimer_localisation.php diff --git a/materiels.tar.gz b/materiels.tar.gz index fd267ddd6996d9ba49a7d23e94e7a41ae4f3a4db..73fa49a86da17b29d29ad0ddeb51de18fffe8783 100644 GIT binary patch literal 17756 zcmV)OK(@ahiwFRr<+)%01MPk7R@>OQaQ~vK*!9X3bCv_P!El-cW)b4d_$`6dz)WYg zT`Xa3gBn?KB^koW$qk&VIDdQ2CG=nC#@^>^Z*AE!kPMKV)@mn!E$xqIKi^-<^=KUV zxz5%G@b7t&hVbjJ?)Pdon_F8Q1wUI`ou>QKUaGax>}<9>8(Uj#)oeF6+MQpi&ONWA z@|tA1pTbi9a+Y7{v5wCtVO(|JZQsj2?9cxrR}`Mz_i@i$cRv61&1QQY&cD@Zt}o92 zQLd}2t2I9uh4EUH4E!j}{5(wJY;BYT;V{(csr&Kj_+tDSa{xRxH#X*;e`~X~Y0tm8 z-URyJY_;J0oAlfJ^O4h5{n1-mT3W`lSXSFRYBCsxX_n)p^cf7XwDf0K^wJW6`Ps7+ z9#8ckufN?t`L1_xdeYxVAeTuwj063i;Ej)dgvnudg9}yvQ-2cY;YeGMsV8~`m$$Tp zd(Co~Jgq;`bO>*BmigzpzS2<3CkMUXpLEp#M$c0p4o40BFwz095T9R?{rf>c`>!uo z9EKc4@blmP^7DVM((0BzDnKqhZI!7OnEjo?D_#GVO-9UoKmX87cewKyj zaea`CfDH2baC8=G0Ax8e!#CM!>|fI0rJGOT zlVZdYGS+5Ck#!D}B&VT1egV??r??9G2e_wNXQzQ4hH;pOmpc1&Qm?#_{x@%=|1F~b z&gRzUW^)VZe;pXcg8m=l`bz1)0vQ)v;32Mg_Mg>|?qQDG>_0>QApbX8%}t>H_U6`t z{vYMK!T$TA2B2$`!5ycARKv{6_iKiMfk8$X*cbK3vAvf5Nlh;pIJYJ{{;?ZH^_98C zm1|ew-M_@3Vi12Z1M2_yRq%hu|9_v%|5vx_f35ZAmhu0$HrLmY|F=2||KForpU?mI z7+5k9fXLPBl-fzRx)@{@=M%{J+!LXk-3ItF^wdi2pyv6@n_^N74N$`xV!1{J+&~ zv;Vi#T;FP8{>SFV#)AJp%5@X}e-fNM-3dqIB+ctC2hTv&9{H=;U%y6%wzxj&n#cdM z$#|TCjq*!lzj)mi|J~Z!u=?NnCguNZbT$|C{}|U-8vnU1{`*Y^n%XFd*8&~sT%V%F zT0N$>6zOvv2ivtHgVJg+>kx&JN2n)~=BB=_c}rJ*8i(=ucJ1f?0`hoznM^X3{rvY7 zZ-qaiButg15*7L7@&56@>YGgcxE zWN7TejbS>q!f`T5@t;dv#?Swgr`jy$=fCOIns?V=S*87V&p6ing#6zQFp6foxsLLG zq5nPnRh<7lJAIw&HvSLC&idaL+_;YMe@p{i@c+lSZqonI#uiTcbSKt2I2oVAcUqjN z_N$5cnC$7fhJVTGzoT8faPmFyHJkr4PLsm9QHTkZ7){XfR_ zmC`>U3T3C~xabf=#Q+M-F zNkF&6e_9)x8Cgm?@c^by&^!cB8pvhSj z4%BcG4~WxYCjXPb&wU*5&%*Uyy?pizxLglY-GKGfSAf^XAS!@4iSAkCY?{^|z^G^( z=7<$DapMl`+A%dB_4WwP;DecYpPMf+W(H5`J1n5V_g`J;RFnK`AY6r0S1rs)6u4>b z_T`=%XNS2^B%%al$y5mj6wfr3QoQw4=aV#^-TTuWE~r>O>h5>VTX(=)p1%lO@12)$*nidStCv41LfmB|9ltcq-sj~=*UE&N z`+;#?p`A$*(6y8d|z>QnJe%Y>5Io8v`xH_Ac8v+5rXv4LM@|-5O=TDU*ttRG9Qk2f z`$)X-1M0Xkv^>5W$CJo;Sii^g+M2pZ^>EwOx{eJ~Aq7(38n3Qsu)EmKgNewN01_jfi+k=RIfq}z# zJjsP)T^(+Qiltr;rT`W&>U>x%l!(k!vAZ$a`!*St@$4tw*IT#+1Nz;e{+4&|Lsw(8|!~E zon^pepY8|;+Z_zxle+o**|Q@sqk4x2rzc0<{t=jH_KV%Uz3$P`>5u*1ad)N`e7WHG zVAsv}_bt464}Z<(f4TXeUm*XhP5Ga|6BhLU7}ulce@&$qFKGPBUVDdcf9f54_n>p! zNdK+oI+%M*|E=|{E#L*sR%d;EQUCWSm#VnFJ2+9huU~ijhw8iTLASrVuil=#-0$rv z_^*3#)b*;Kg6jvJqWD+q4b}RsI!G?{=nQPCcC)$Vd1@~iUz4Gs>U%5np?VE0K^-N- z{K`+YdYw$-z~`E{9&i}-;v&z-*|W8^VK!V%((^Sijk=dQy-s4S!c2{I3RVt=5%NS0 zV0h)nfeO&L3BhR53hq6F0Y~^H*pi+~hAO{+C!=tn;|%NU29pu6riOz1)!@R9K`}X3 zVUEMcNv`}TO0IOU>do6TU2jwEkIo{EcO747hTw3h(?orzW1aeuddnW`eVG`B_tg-# z-=Kv@dYIcqfw|;m1}M0r1W+$k@4`69a0gdO`YvmzY^(=hv<_g2*DBDcS}`PGkV&e& zL6QJ~*pqz~<`=MYuxyjjXcC9{wF+bYz=s)O&{*d?w^JeA)C?dKb{t}RV3{st^{^;pb7-)nGN2nrd zq#7;cjD{-?3gLo-gn6bW0L6?z_v3{I=xaPI{~eBt4_VMP@GE>6Y-gQfYztQ{%WNP5 zdgBx}2QWCiW!o+S6syfI{2cf0UHF#_QwQb_p)h^StWVViLg_i9C5$jq;Sh%eoXRd% z8g>fU!$60Z#=!wYf~5~I8Tb?>BATKHy(>5p_|th5?{UuEP7jY`%n{Z$;ML(ESRi}l z(K_XbfEaL{cDQ$Oa%IO25*#zbkpaGZDzEgVj*vPseh4SI39lqx$yh`@Ec2M8t^jp& z4NOYaTPq3-9G&Jw(ahij2xMYAc0k?$}jR5s8 z{V?)@aT4_~4+)&JNj%UrlXRQ_8$%*^}g<`YHi zqPepRrWC#%1eBkZWDBe;0h9?$CAHQ?A8Xa(AjvqCmKjY7~8BL7Ncpg$fH0Z(b0 zp3ydui~$!iJqi(4lL1oR$j{!{=r#0CAtfJ@{EoK%qlfFv!5z&MAlO3{RtbqVvet7RbPj$NssGk@9Ic2ZSc1 zpRuI^(v0PY$T81_-c>S*0@iU+MdCDBKwVgeQFKE1GYXAj0f#fh(;ziQ5Du{&h#2oE z&IpL1p){q3hicK;1$l5?zZWHE8IUKI_nUW^ZMmhzJt!$}BtaO6;Ug zn@tLF?eZ2-t&K8ZwIq>AEF@T&LXV+SFk^diegT5Q z!c?R;pEw8$1=e1i4Yde&)_KJy=k)_*jL@_5TxyVmL>8}26Lfly3D(T4(Kv>67Q z5wm2d(ik*u!I+I$;gw#1ZG}=P1gXpiW4$T`1MdydRCLY(1a3w~gipD8_y}zh^*f&= z4V*M(t2?sB_kdz24YtJ@;&3o%fijDskw#kQ8P7jRL(Jh5ZK$=Xj#%s41I5XT{+go- z*4SzROIM~Me6pC|7Jlch_nL=0h$Lh11AFPbk28b%CB}P{ z`^dTi)iXdV9(MrA^vDc3r0>9#3D^N}=@bC7wcamx*vI!gker)1XH zu@hxRv1cgY86epYCaCd=oi{=-L}0d0z`jB?SBuq{k--PlK_-(wO5i@nY{P96XBGBh zhA7VH=sLr5-Ve`GpRzz$Ito`V)CiMNV8n;WR?o^-x(iVW^u#36g86lS1%W3|2L=c+ z91QRUIUnG2gLnQpGx<0EUjPVuz^;J?m4#;ji0Ts#t+yYv#!OA z)z}Vp!Q!q1P|nPYqz|YDDmaTXU(F&89T+bTGzxpK$fRsWpct!zWJzHsQ4T2JrdOL< zMNQBql=furVO@f%Kpc20>T1Av0GI>wkXL`F(^yBy;^P3ANJeMOpaJz1B%XnRF)78u z!xP|}y?TgfaJ_;OnK#IcyNnfJ$Yl-IOK|!y(kWvi8-<{|7XC%P52&ahTc$Q(0(tQq zj)??rF?25h29b>ucA+q%DY28VJf@^D5s;$Do3=@@y^{DWNu|# zO|Q_x$QpJgBX3yZdW3kZjPL|c;FaT?TrA{TO(M80K||2$4JDUI4oaG4L^m{NhF#9Q zX>ui?@W>yS8f5GUbeOMQmBJ zdKndlVAO*3lwWBbGmt%Z4UWSfpqrJzYY3zYu7u?!9I|S^al@vWhfdp68!}M-Bu`+; zvO%`SX6G(V=katmucb_?(|pf*Kr?^j?5w@2UiukurnlB0VKZ_U>_T=7t8)rD1QiMt zA*K1+C~@e5Kxs4MG=6KGsR(Y0Y``uq6E<3mF2{J4BN}>+3j=Q->D)MF%>4R2T0J4^ ztv+ZC==&g-_9TwNQHW!dUCoBK%vyb7oPyDUS&(!p#(jpCQei`q!76`~1J+p%NkMiM z%Sh}Bi^);RoiFnSzwaW)5OG3Ukm3I{5(WpNxim};Uu=s>(CSa^m4vS}j%iP9Q+ zi~$0@Qhp=0Cpl7W8kxoj3aO!jcB)_gJR==Ihi=L zLvri$d0m8K7D4bN;p(1+n>agQd`9^}m<}c*E{Dp>A#}tM)Y!#os!KRZ3^!YdKK<9DOh(PFhV5QHw$o0CJ4rWqx{13tV4CK7t`N9N~mxPi&O;nP6Wdcy>Wr zJ>8=vUvjftwJ+p&kdzJ&MJb@j8OmwUbptE*QDYhoHTwo&!izYGl5-R$U|aeWsVHFN zIE8@h)o>DlG>-^xV8iD^9dbV!L!gAUT1Eu@*n4~EFpeDGSOjARVAgWnsNGbr01T89 z(faLgH<6}1<3uM%tU(cjsv4a|45UE`3@{~1b+ZR2*31M(T%pV>8yvLt5fHdp2`$2* zkwpQ>e-?ranVzNuGiByeWtR!Zc-%+P24ui9Lj|=p9fX81!jdb*BOx(LYE)!FGo2<; z7KQBe%Lb7jj%X(o@y|tMkswn=<^zDZ`-$hkeu#RZj0HN$miv(q|&f( zvEkT|Lvsi`AeL}4s%F!1HU@(~nPd@V)_9H^3qFx>5n{GRf4wB&-019j?!D7`j3RNY#N-yN?Utb6*=Nl~320JJEpgB)bAleP7WaqT#7oFHe5IXAZAFHZ7>&> z##${Dx-0*heUXlbhLJM{(HBN{Gd_h240>cY{b7*5?<3Y$%d?Fnn;8#D>KvlSy*P%5VQ;HgCN6)baB%4 z#ShO8L#r#4btuLkhP;8CMBxHV4i3=IDRxiU4aK=fptZ*wCL+bDlsi>Ybcnx~M}UQ$ zkyqbDNR3;E)r}EGR#2W;?|cIdMl^OYG<}&wlaVB-WO;%KQTSac9BEVmC&V0kHUIn^ z5gOyRp;>7GBHDbOm6EEA$d{FS#)ZnN83|cVZ-E7r6sKfn{AJ0d^v*P}1O$nAzlylN z7`<%BVCX3(ldbCbC`u3iH#;hPngf5r8G>1f54qYy5&JB31v3!g&Za9<4?tNFarzn# zXO1i_J4z}X##RC{Gx7=vm;q--;CJQT8`d5Q^m#PcdWVpEe%t2B&Hu`UEF zFds*x?%DaKoav+(fY}4mhIBOw=v`cAqyw{Vz&xv7_@|vaDsXhAA$drC9NNS_8lu|O z7rtk0#aF>3W&fEOod;wI2AnGyarOY=Ecs|n_8;*dPEsvI`xo7_&rB^v`#okYu%U?S zv$h9v7*q$O7tE2o)_%&aTjv&*oR0s=D3fEBR)p-SK*mur*|Ee<4Z9UkCosH&F$^&> zjT9HrZSwXUNJ%7IDs_}t0LIA%zJ~T{(lr(pd z;-iGK0mN$rq?aYJB%E*n+{}r#lpE6!eWvh!S+$t33e$&+{6H}eZo+<4xo7etebhX~ z1SvE)!DolNmaR+o=p>`VIj~uL#1*<}m{kjObvTn+Oh#&EoJ#B{P6h)%Bh8G>Q4FbL z1Opul_!;SAG>Y*nJ6Y*L_3~MUTH>*GB=3apI5P_3=2@W^%_00VvBrp;`HTeo9GM|M zJz;5tL8baRdMSv+7=!pcR#>%U2o_%Ia#ra40~d>mBNsj{lG1I84|#IJ02*aDN!dHd z*ua9y>Pcc4D97f#6W&c(zz&!wL4*U(v=Xr}%#dYPn$6&DV=gK&;c@04lebMo6|}Fj zXNdU$@jC>2;mx^Tp)okwmziDW9)TosIi7Dv{<1-iCQ`^&*8mu>;~fTF1N1(tP&m8H zd>Zx2WF8Mg4jImcE`YFKGBd7<^kh)0GfIh>|9C@a16OODn{M&Yv=v%T)CW;vL`D&} z#+R369Bs}@)?_ABqvul1g#3bIt<$G@@)Un^`j<`lGZ3b6aOGjl{sImJYDy|$*i}Tr z%dtTmLNK)C3rsN!ow@Ch1cn@wM5}FPwxt?z--xa4u!+EyU7&?P(goX@7tTj#foLaS zkivC)gc5Ez{DL`S=ZVH2YjyCCA?ID!3ztUzKUXV=A z^5G=nf`%gM07sKVmkj5jf5|loqY9SG)-#5TD8gi-eo0TRkw-CuWs= zMEX5C@kz1~I*&OL01K!3AI`F)g<*z~RU<3GKDBalSk4&aFhCN_eabrW3cUb@dN4t4 znn8tLWIF*bcM{Xkqzm9DFrTC=QUrpu3B)mSYO>o*O9G=)_(Xf5O!yw>?XZE|BThxX zoAe-;#GDL4?r)Se5H|)oz`#HQvmY*!R5I4F>kosM8DCh8ZJP{Hb{H>!oCusRG+Qu| zRd_c{K3-{o$br0ydL*jG%jRozy0kp>3VGQCQx)~Jn2}&(9>x=72GY|}6yL(3j3iD> z%QIXOO92y3U4#R}FblH*b`|lyI5metn`fHL{Bk@9G3N}^T(G*0&aXEt1<~ReR_VH8 z4bvBk52xd>o|~03lsZN>16}AAxj~M$KNw8VQp-FW#AI>ko2eX1l#G#~>m9`*3*7Wd zr-^ATl3DG@IIG%8e$`m#6RZ(7da1`2G^MK4E8Uyr6=ozH;V;mH|3eavwO1*^c;99J zwgD=+63?`2_j*#qH;=}!T6iJ>B-f*DJw4>p!Cv062sS+HIN<=WqX%LmQ>yaipb#p1 z*Dh^M;iOcSvF2TZI3@1cbTikP>Ji?_fGj)uhi_JF+LF6|$Bvq}_1O$P-JtBnWKDC@1A+aB#*@A2=98za1w$xJasv)T4&49;Zb9mdJC@8D}@ z5OqJ$9Kw;B;#ED6aVG#okXl<>k-6Ae?tc^pp=6qTNIItWn)o$ty;<)5X&$u^D*%{)jP7I(zC@rT)@0HqI3{Mo9i&DAH{hHRE^@;>F}B%3ZRTPcH(A|vWR-F; zJR?#$;KaVZnVKieY9mSKSFYV-&$r1^cXMcM+?L&c_>E8?sq#fU$ukT+G3CuXHixS! zpkUf6oTEy@dmLuHM1igcx>KRi(z@Hhih^=Ta14pQA+5WvZt!@oYbr z5+!7Fd}#VRkiWMw@1vMa^0sn3Myf#l~yd!o+4EVh~iubqhd`LR3%Nxc64-R?3EiCMLA80zAAzruOuOf ztVxr8f$=Sjc~O~6Xp{)+lQQYd#!)k!6t$@4I_#%+PKvizdrmcOqucF4Z7dpX0p+w>jrQyIcS=!(krGRJ#p z-7vfm-}Z_rwi2ws;mBd*ofGclBcc)y-uN)6-3~Tf!(TYOpQKYKVQqA?;9?@Zf@y>i z0~3QSh-_0?b@)DR+#csKiupldgpuGH-odMA6t}Z+DViX`CoAS1x|oIm?@?Szt1EUw zc@ge5dJditQrR}P^sj{6qM#;QcVJhUdK;(VEf{e*X#5OI*(b}h!(V>BL zeC^&Rl9N-0D#x|O#-Jc2l)*0UV*H~L0Jb`Sx!hC|+jO=G$!v5_fPRO3ttPH{&!&Qs zdV_lxN<{yGi4ob%+rq(agljngFreHeF?x)24>{GItsY+(L{(anBcRp1oHw71MWb-~ zs$wGr!xlNq2cW6y40V&4HeGgoo*hs*1CnM@)d_-2TS__6uIlH=|0=;!AZ2;yPEg*h zr*)c&l_T@`MAfR%ZlfIbYyyOLDG59C*6;c#Xt}KB&Mf){+kp1#k%~^*flb1*32bgL zQ-e}Q00eXb;#8PH+;R^ICJ1?)Oh-W{j4Tcaqr915M@dn(I{xlVLY6~6$uvbZj6x+T z>k=3)N^YHmC!=%O9wo^8a-)D3M!<8AeE^7}Zd^mQD}DqJ8noVjUnK)2jM*RI=6z5- znynZqS~g9coD_7^8c-N!piEm#noR>lyBHPJ9Gh+CPTdF_`F1u>X5;2|mq{pgCgsbO ztE_U_fOb1xx&2fO#k<)H#7c6f>C0>>lx7bLI<|cHZhTQS+Z~k&lS{3v2+dcvcDJfUr&wma3}az#E2f z8HnY=o}v~QvDW7{0*xZKN(T32aO@>T-LWkL#H zb7zf_LbwU9fuZMOjH#z({dA?UEg zKj61BG*))xShrq5l?X9QWa#{rjvS~>kzHm%VbVA31hi4y%`7#q8o6R`rm@H)XXg$i z^&)qV+QEQ^Q}(9*3i=b-rHSnjg3X*ty(CRmf@h^{DSH{U8HCwySIPS~rqU&}G(;Jd z@ZtAd(Kb~sVR9$k;D|rqb{SK(W*{gzUBxUE7$#Nul`@iw>c`!90DRNuRBqcXWj5uI zy!oUuOBBL4Aud>xsWiAH0PZ=LJX2uWkc0rzD@0%w zFqolxZZ{<9zNjhh8p$WOh%)^uxr*^68K67&ZQ=_(M9rxz=b2M$RgS8Zq^sdmnWNy& z+LzXtXh0c$lmT3Xq&eF67LldU#iR&^$g4&rI3n9*8 zbx60z*lw(9=*2_hsfhp7SmSpiLN?~a^KhvqH@tFNa7l{h+X!Wnx2Jtg($Q!Qbo%IG*UN1Rhw~JPPf}IVYOSibG<#OGoQv7(n4~q6 zcr&FkB28J3F4Y87nDJ9W+G$Kz>K0?ZhMB00jRlV<^ft+g-h@RVgh^45Wdb$2tG4a; zYz;~2&Y~HP3wDW8A%81Oj8%9!K z^E?U*IwwvFHz;#4s=Kx%+?!3A9!?_%xeK{QTEb$}KxugBl@W!|M5cMGbC*PcCu#sT zr6?KNuPW)Sn42lua~-d=p`w{fLk=>DYDL4hBC*1_S3NnR%v8QpQ5v;7LZGqBE~8s) z!fVM@K%s^y>DlG-&SKS$66TX%!?qv5u7_z9U{@{6b)It1oRZ1yu>LX<&cQ)cE~kR}b(Wuq-=FVrdrz*casx&>=b9v+PdQCExq-C{+aOaKx^u4joZZgs%bQfR!vob5$oXb%u=~ZZEkX^t1y@*5#=;u3ITYwr8%|o#=J>W7aiPMlB7&- zyYChKmF*-`B@b3eQ%N=Ok9IbGRNX_-O@Hj=~4^}^WBW%YGCL&N1r-W@p7Y#ITj5CnoLL==&0Hd%|P zC|Q?(T|$!MFgXP)kV{6enfbn{jWm&XcnKWqdBYFfJUd zs;%_OPqOr}2CJLu5n?$fh#5}dW}U?ZMLiin*_u1?yPzh^=n#eaQWr@WLUq_LJk2IP zCuFhO4BL!#sZA;h*QlIS2Xagfnt7Yk4Zt;!$#%mG(uuLP;102b8#AUem9JC$u!;|n zTHs~}>r9N-ss=h%L9?xeOt!CGn-LhE4QSwAO}9VSQkt=*;|eUH_b2f3Q6iLF*o?~J z^1jW9wJ?KG zFcs)&gMdy#rNja~i8Y;}1}RCTMY$vS$;`_#c!5RA35mh6e?6i+r=$od$PA^f6w;c; z_*bP#;58@a3tO4$(dW)LJvQrR4b#%xvg*R|%ACab>1L?II9?l6mgJ((G{dLvq_bS1 zT!~j=X*P*gl6UHyKNo6wX@}VBNoG1UudwjIAOx&~N*p=GGY+bzwj?Tf?wP0_rc66C zJdvWa6$C7S6kMAoA3?x99RxuOw&vNw(lSi&H3WjUjl%2R{&)4pPvNxiZBiz`=pr<& zWgWMlt<<1qa_Pjz_{5xcQgz5c#so;rJh0u^ir142t(&IQS6mWPfVWu{`AnBHC#~Dv zjdYrgN@J^5dlj2o9nqVR1MYu)h$Cjp^t!Ad85#X;s^1^GC<5tIrs~E%q;_@_>I}o- z3`c(~7Q3P(iwzSWf^cBd^34=gA-8MO-wptY;uhz%zM=Wgt`_PiC@T)5DU0|lk@g0r zv@8oplPLFN%`J&IQ*Wj-SIH${TBMjtG4xc>){DnPyv+FJUH6YH5O};#%}=IXMTRFL zXvu+B#KcW?9mU*9*9D6nTc{X2j#MC9f@w7#hi2g^U@#*`5P z!1?^_K!JUc0_j=65QfZDu5jXm)5D$ZUHcj&&$b?M-bawq7Neq?cD8vv#VF_p!!w-ASe=?y88M_u_An0c>f;(A9mBD|t;Owo+k z?G7^ah7l>=s?L$8ToJd5q|_pXGRbU>=ZqHMnZ)m6ueS7q8a3DkH>9sqZL*tjWvJ>7 zAYjh4ft(4>2p<1IyKgF+a>U_&=e>%ObEu`&T`Hr=8`qo{6N!iKE-%kw#*Xnr1RMOM zj+y`lcQ}uLfIbE34~Z?g#$g)T@^ML%E#5MP(8a}a)+#;_U0SF+Hm^+gXbeRV**4j#k4N{KTdl-{PD%K8d5pB=VVsdUm1w8j|T1sL~s=@@Xvc z3M`sU$h5X1gX`LPITlZEOpIF*s>og(TqGt)X2v4-r(LF3wM+-ujb`aCbmlk#f8Jm7 zs}KBT|9e>mh@@$ z?jPRvyGKW`02sUX23FjKFM9`j`zNnpEe-V&MmRV;R{K5J8QgY!*zj;Rxz~)2i-Gaq zbo+bX!=Jk^d;2|r7rx`|b?^89rXbku^2+y4_ILZ<+mrs=!=vu1Vi3Y00PueA=ywWs zAb|b-$*vs;pbKNX**)0n;#|(2Jvb)ZuKMZl1myfci8XaD2E4(Mw_c# z;$XvW`zCju8OH%)Q1=JKkCTIaghapl`xDqJVu>na368(}UB63!c5uS`u?Gvo)3b=7 z7%>|32z*f>#!rA^hw9DYtKMro7D1f7!-F5XKOK24Q~=He%I>~AM8Ld+h4g4WumXe< zp4+S4H@n|;j~vXvIX!t1c0(P#?e6vP7x*6V5fEUXL3MBhd&Q%L4`dLv3ulZYAae3K zdM7{#h=2zMabRxz%w24~n0po})&AiTVxaeG_jp&)is9$WF5cbm9sr<-#&-AiPWnJ^ zcn3ZKt2sIW3hW*5Y2bc|#C!c$o*^>A+t<6j{geJQ;^EAP074v+5YRaZzT;@6;o;${ z-fNg@?|V5mRU+k|)c0@{FS~Ht?yDbqM2<2KEV3ssf!)yv0!PNatyMNG@x?3_1CM4( zrCb>nl$f5a%fcI@5+WBxAhy*E=X;BT;!KM+6eZYlgG;EmzqMr93m49*Xpa-sJyaL< z6-qewK=vh6>k_fvvQ2TCHMovtjO)Uq#GXkv6ZZ=eL?TuiSRtJ#M3%#zSLX)km3%4NUF# z#U))Rv!;O0ngb>?wMW)e<_~dexMKVC$lMGX71#VwDw|X6!EX)1(5GpdA68)9AjZGub5ZMKJlSmUcJqXD(s#%?;hNiGM=hQeM#|V45Ob@5w#C90Q-3(Dh734a{ zd4b-Zj-$yr{NTJ{9c9w(%IHn?y%p7Nwp&X5zn3uNTa6}6%wv#WVq7Ewm5%P2eRp{2 zz{1?veG{J8u{}WyTj!B#S~F2?s8k`V6z(LjudC%*U{6v70{oYCNXv=!*|m7W6Y3( zJvxaVPUFgfU%WAs*UIm>zQM!k+1GPk7vSP<>ztY5bc_=L%3{X$zTvmIbJC}IH9@r# zJ$3OB#?WUbTEaAduLde!%f+5<(*)XAHS;Dm^0jeUp7w*xu7LxUz{D@LaUDua!ee4S z^yVb){C}M}&UERED&6zwMP1hNBjHS1h@p=&o#&E5RTL4M_h&sPEU@(r>&6nbQQFz= zc|T2o9RW$O(g3>T8k1DS4PLz1!n~wWrz@1EhsGk1EWbgI0-4y?eNwIVaa zcIwBbIrcR!uWgz{8AlQEOK%Egbq7BX6V=iaz4sen;oV9Rzgk=mb79ROwX|6~js45j zd>q~X9L;8Pb8|z%&(>C_>Hegv-RiVdYopoOT<>gbcG?QQ-r8vWN;U6)DYMrEbs<>F zU(Nt6$E+h%-FMsfyccDE{vWwsz^QYu!0lQNW=3ttTY52x;NPVeQE0yT0Hpt9Kq2W| zZEve(EdPJM{82vouoezK)^=X_>LS%cxSch#(@7e^$8Y@n=f9DHra%qI@?`Mt#hSnK z0tkGEq~=W%VNK6@f-gtB%WR~8Zr6&3)@Y%tnZIv7aAtk6hK%IJ8nBq1g#`aPuR{KF581T`m;>bD)>db({3m%y^1rpY-fXX< z{O@!&ex*7Ou$GzYUtInd=U>HK?nfQGMgMEAx3=i~JDXcu?RHZE4zxP$h5q*#*9Vh< z!+hNjMq#{mdI2Ug9)3;bVUC}FlhyvyPtUVwPgoSJ#+Vbv(qg+N;$h~dF!<RsFAL9Z#-mZP8Gww7(`QpY}t9kJEAPvcdJnyDwY|u3@U6fSyh7#JPR}q1& zB~4~(nA@Ny>2}Ta#@9U1DYt9J{c{f7#y?vHRb;Jvmw2tWYpvC0%^T@>vfZK|r#6cR z)YK>Fcj3H2Dwi$zTEv-!zA@#c)s2AfOniaH0=?jY<(23E zdZhMMUIqQn@p#CTI{{f?5LI00&IsU&QXo6)+DF%U0?T5d_6?EJAZ*8u#|F7NN=rr5F z|2yqgb8-HUaebx!p8^>x+&^aP-EafL-Z03jwG}xbw`{#t|)au5RACpWjaS1>FPo8SC z5U{<$#{Ogm?sJY$IR7p51vf$ZZ#Ea_{}>mZ|3lAl*YoeR+MV?+r2kHHvz`P2D#S{tqP4)Om*{P%ILy?z%fx{j#~uJ@X1&ANZ+9UUJj zQKM~ng)s)NRoz<(gNiC2Ov^q8jTi?xIN9G<>TSRG2FnY7*Zqn5bAfJ}N~518)QV?@ zxWwFSKdrZ#%@sQi+>G^g$Nk;j!Lgdyg`Cn5CkMUXpLA87-e#m$yp`vk_bJ;#!AFs; zFTE|Zko(ydI`76*HGMz(vOssonjQk~{@ zVR-Y52FX5Q#!p8*>Wo*NE#Yfz5j%LT2BWah z&AqD(>C)gggW2BtkZ?xhJxP5)Gz0PbAoNdw_g%rgLAA4%{=kIDF4;N{0rjzFFKDet&%RTN4yIEj}!lq zj(KkQ=a)nWZ?XScovlsr|7%d)C)L+l*%VDs*f+8av zs`{^=3|7^RrRlY|^nq&Lcyl;kou_E1KYB|`OUrl?%W8W^O$PLiJDik0gCUld{tSy=S|T7n zdxqT!@O88%>*A!pk07q9e#112rH?Q(d^xyK^*{CTeTE}#p{1Va6fuCFxIvRFXeMb{7U)yRGr>42Aq&o9a5{UD&t*OzC`K~5p~`EP&u`M+0b zZA%{&V3nRX#`H?~5!@0TA+`gHPO0R3TipQ~HgCnx0TTu6`p}N6Q>POE8|!~JH(HDQuSdCN^Z%xb3-4i$ z+s?m~|F=c;Kh4gf{`*m`N6-J8DlhvwxZuC;RUA-N#rpl#|J_jk({63FZT!Ez-lqKD z%|-m@QLe8v|Eq+Im;&~K-rzpc`9%`Igh`gy2J_ykoewxaO|5m$g<^Se-djsVE zW*hT=7V`h$uYWfAkFgW~=`a~gKvc9yNK8xgIqHF7)RG`RUqiSDeL(sMf;4nBgR(e= zzpC_v8`Xq6YYE*r)#upj^EORkTJjhzBaSDL^Q?Z4ud)%j$)eq@0ZSUccbqPGc7E>fAMQhgN}Qhr*(v&IbKK(pX?C`3|8L+E>p=fot<6RMhex??ivQl60JblM z1iv%^3~);lz={#!Q%nGZuWn8Ni|&#D<|1!(3Rq<-Q1of}K6fUcuPf+1kN)R}4nBR3 z+x)-l8%6yu7K%38o9mkk|L>z*pPm2tPelH12B@?Yv88yF0~(ccK>40ungzPF#2e(% z>O9FE(mUt8SwJ#8mu^q+yi0E7?Rk~+mN7TAGP<|a$~$qYuZzuowO16Lt(nB@he`sy z#r|t;Y+C82cx5nRH&fFA7AA?|OhHr|?G`yn0D>q-lH*Ul^$XJ^lOIF*@vXTb; z82r}Y{D-@)udmk_jGp|D(@4Kx9S_I%GshkD-`Z&I82R7Y-q-;8UvF(~J<|U}Trd6v z#~cJ{IMT&9>}mBT%=0jc)8|1jDcr{&Pl!r?d<$3tIFb}U9x%S#Jg?q&QN~FD59j*t zlQ`FxSqg(*UcTy_US6tIwY;{vx^@XGJD&e7$?=^^fK9vLm;b032x_^mfo^&d|sX&H}n`+ZN3%Q#Eb6TQOg!OayV zOq|!B=%;%FUB1;t5e{^HrJ)R*Ik`33UH-#_WCC}iftJiDe5E()DnrdqGfu)cIznBO=oR%wDXlRsu)B`m?Zb7?9I9EqW@NNo$bG^=EhEI9qj+@&CTW`{XfKYoBsDC>OS3z zN8>Cn>plq=plXf6)#C48B}PA9pL5NX|Mxt{=lFlOHaF4#yMgro=>PljmplJ^Hu}8_ z`TyoE{2z{8{J(JH2KxV+&5cL?{~*_G{2!Gp@yPu`my`eV z;(zy}4ctZl>rE^FTk!wr|KHhs^#4D|b({RZS4qAgy!Hk5luT=ieLB>b<|0S+Drq;dBaVPzQ%oqA^ZETVK-&)^zr2mJwzEb)pWPGIf zFMrMT{}z++IFCpA9%8?E-9i7Yjr9$i|FhXb`+uv|di4K2$n_Zi^)rnko#;|KtiN1_ zH9zS+-HRiadBiu}SMCvyR_95+cz)5Rr1o%HPcMX%OD>Z*eFu>Fgf%SA_`y^kKkdgG z`d5e9=dq|qbMo`Afe`Mc5!q>c?{nN0|JgM5Uu$z~eP@gGzs*Pg?}J>R$L-eM=z`cp zqzg4dc1bM07Qp9T9uo^$bkj3clv(dxL!p1?m!EafP-43^)K!=OT^1oewpt6qNvS9K zZtb660whlulC@xxC%d&_S&oZmYik40HpA{Ju#UCrT~|6UXcev1W-S=$bh6u`e=d7j z8pXWA4^Kc8<*Q?zk1p}A;-lKzRUh^b4%%mDm*1au&f6br0X)!;2fNJxl%7j(+}7%L z?SCKd@R(~h8fEF4h(MGR_hk&;W&dq&wM75h+}YYd`d{DLdCdQNkn05=v>NGhm_=a7 zWkp$2Ahm^_3Z3*XfkHplR1}us(|*>Q6hJJsy+ElC_~@l3-R2{Fe$fYp5EZ)I3zigo zO!Ppf(cXtA{Kv-^Yw`{KtX>Q^R4)N#VYhZ2=4qS`YH+Xo2{#Wn;6}Lf#n{}|O@Py= zFwuF5x6&VQ;~4IHvF1(go+u{WQ4BX@W;1CZbe94>WY;QdAMwZTq%48Al{aH;pHiq4 z@79PY}s-A<%U}9?s;_PeEI9(_~eJq(VH(i$F20=YHonKC;p#}ot-B2 zf7saAex(10xYV5M&C!M0fBm|BdaT~GkJ_jEhw9|w_pboO}4JjI`ey~Dcs@J*J>MZM*VD@SCI-8^sd5apV1HuSQ zMDYvti~ees57t06YG3L6CQG%73x%GZ81%JBm6__n@G49r6`^tygVLfE+}ni#NBAS? zl7Y(lsvN?TN!-(Ep;ZLB;s`X(hJyQ5Zy2V)m?4`A{Wxly9wzE!(uGOYp-c?JhpG?TZ_vUM-7oE;KwSz70~Fj*2B?>- zcX1jOxP$8~e}{gyvF?G=+JhzDpjQr9D?>LYNT-O?8RmszT=gHD%^sHCvL!6}UPz0u@}%S>iZHwH#K&YgG8FSy=!pE5mni z`*nDuZa@pB{YPL(z%QUo%1Cqwn$|{xtSa^L25X+nJS@safDg_GD$f_ECFtu6iNPey zL-?$x=L=@$11Ku-1`?1%*i1Ia!_m{HFwh7Wj!;F^$Te!n1r6s83gLo-#ATt#`$(Ys zey9QZ8V@UchvVWy7IY2#2_FXC8Eh0pJ(x_E*+2vg#yM;bU~qiLwtWO}t1X9NiF*%* zU;+?KJ(zoh!t^n-K2;Y8uRSZ`eb_&=-Psdlrz=0t_(+8Mty7K&hymAWhkKW1*LK_}!!ZjS z8Q{yO@=9On1gWFohj5bH@CxQBb+2SBA|6%*Oj6f?x}^ptrRuE}1qzPNOQLAzbXi*2 z5U;boz5;uJ0}pVG#E%SHxE{v6p&DSm6Kw#DPgoA|Int~QqicAF7r>ZnM3i8|-c;tJ z&F%wDqnA9)Z&VjH*asj2C?i0*G(wa^tR;+Hw%8FfV1jsr8Q2FZJ6HpH_YHG{%@$m99RI50stn^Fu)`a2k^1Wz{zznNlM(f$01?xZ-LRnh8k0x z(NQ?8Ji-&LvdW^tN65nhkZ!0e1D_P`v71fG)xd~_1@eGJ8N&D-9f=YjTx4KOn@My@ z3ny6f03qq*NEmpJVc&?HFs;H3!O9XH7A)6_z$ec#^M+deEa_$WO+^gBiLvw{^dV3d z6ToPMB>_sijrj{rE#Sc^cx=@A`Y_aDFFs6q2htauoRCe^{Wdp z5Y8uQD$vahYyu(-egqf=557up0-l{ANy|Y@SdPw~Tmw!f2<0|_5uaF$SkJ>Xgy3gS zRe->Y4{lpLQ+lehB!bP0um;@%P6cHGJaPMpB6iW-#gHk5ZwCPt78Th7E6cz@gZoqw zkKnL!HORuGAeaDN#0BgX)&@@l({L*xWy*qDc45|Za>xppd>)2Hz(|WkOsO3U9~72p z=m#F78SxxJo75<>oW5sK99U5=MwtMQ6|4rBI3jB}$Yfy*kIxz!WXSheuj*&0A1>Ao z&)cVO&(!|WD|K*u^s0l#@)_RTTm>1#sjV<0JzqQb1VN280>S{Z^$oN6JL!|hv-)-o zICcSAfevAFRyI9NV$c$j@LFVGI35!LPidQh(KeBc0T&8AiV;?m9#Y;YEZ*7WYtVy< z|NE;)j&0{8R!>wa2NLli5eE&->XmATFqz!Kx^ff&)e|}tss@s=26xru0bSJSWNLV* zpeul^su3UVqPU7;U;-0>0BRFpM1*Plub~6`d8TSCIbjf98w1Li6#X3JA?kKfI3{}l zKa4@dnB%}_0u+nD_lqGh65>)UVT>l=WOzd$3{Yo5BRn6OM;hq&phDAg%w;@rMT-Mq z2vLW!aE}YrWK98xzy#gd^aw7V|EhIEmSHuT*uP6ug<229eGd2FcQpZpj%C3h15-Pv z9JV(+jUI^3BR^Xp12-OrgAgNS({PRmO-MguO9iAE%MX!bfe*dwY?4H*#PBhRjbZ_Z)5p^wHAWB)u^osQ?{H@X#L!ThvZml4-J6tR3?k_V$oD|qLL?Gh zizPK^=vN`@(0FDivQI<=ad;P&odgwjQm4&kPF(xE1ypOJ3|K8mWD*MrRwhxxqM89( z4p>N}#M5D+A$ApGA_kJowN4Uy5&)wsJ&o>2r%3aNL1S+V#2a*q)638SB0r96ER8I; zx~cuux#_rA1$haA%!YY;s;dK*k6? zJI|Ho3FwPHx-%uI44B6L7`K(jcvOd^Rv%?xs{->dx`uvVB7)G4$? zI0oM7qp9ef0|?xLjEGQC!!US+Hi`OONRkFlnlg<%Srbx5&<7OuvCC8TaBa2?{d; zRn4#(7b0n91CV*Bamx*b>ShtpQ#Nbt*og|G*fSLH43O-56V&*`&Kn^Z5-{5*U|*q{ ztHo+8$lwF&Ad@K^WpJNow&AvkvkH4LL%1_KyD9LT594kgQWTh_qi|)XMwp1A5g#I3 z11nqUE<`2J6SG7M=GVg&1fDz{86c!^Fu)h&e1OmO-h~5Z@^8bR00;-buCmnn3t9CP zuH;k#n1F5%yxWP!yDO~m1GcBEYcXRrwu4=;xa$CvGxH+p1FC@v&f+Xovxq|n#)|`u z!rm(~shANc#_Awh;_M{K0R!9&YE!GI3ECjZWhn-~8wOQ@IPg}~)qwE;Fni{qp#Dzh zsZNl^rx7rbg3g#h1L`SAJOcw`Qi_F#C%`uc^%&9MW(6fOZ;%;x6)V7yD;lhq;Pi2# zbH+qA3PE>u{zbkIsK}8mQyVaW(mjV`B7s{BJ;;DT6yuCtD9mUo>?E#^DJcvDq$CNZ zZBlHnAwEk|=}V0;rrunFJbhlL+bgl@6tZz|PJ|JxyHf^o~G`3D`J%ag&B4cBcfGMuB{L(zT#5T7k6&7KQ=D zSJDWKIPId-zl^a%9c9WG=Ze^}Wc4yC^ueeF>#4lfI%OaS{u(@oKR~yrfY%VnJh&2; zS8&Lx{l*QO7XdnLb8W~#g_AOaCCdic8k?QFGF`ya-M*G8sZR4f>j5pok+-w;RrN9~ zfHR#~gM`h zszfvlJQoJuKGLOe%9#1}d$f9D)LTQ)8qoJaF6~L0#G@F;sJfaBZ<)3F#5e_`1+$>& zRE+x!EhT3|lEEsU$pPyvhom68ie)5rg{9=EB+-H*kNVxlCD;k9i@U+6_Xh$y&91>X z9rmGVfkD*kalmXHX$AG4`6Ddnv51tg8(Cz02{THWfd+I z0j4cRaag&w_N?!10@0VCeiX`Cm?$8v@fw{}5^q8u10W4WgUo6~X`h;0d^m;0u_8m1 zVLluHEQaBgI66mc!c}!yuqcvA0SA$=tpV#Ij&2;P6vRQE2b?iZnDgR&&Vh<-SsX_m zrkZFEIuLIN7J;FFV%ms6qO^t{xm~!kChKP+AsE7e7=^^T?8y;sklYzgtY5vd$f-jM zWUFd4DNx+u$@q`}lAr_X>S37l8$#do75gA!^z*VS5tq^+LZ-dZ)&UU1xJ#}L06US4 zG4R<(#u2!HMzq_|k=r<6P9YBMnB4k&Uc-3IA_$%&Ts^RG6K4mE&nVxE^WJ2Hb^vPl zl@L1O2x{!&G}RRxB?bdKM`x!}XQVEQm$e!we~vyF5+|)@fT%^G2>>}p@QN_Mp#^TN zA|Jt!8jf(mu_rdlPnlp}BY5^fT0K3WC10UB38NkgIUZ$|!$VODDAGka4Z3b*#Xf3G z{k~@308BVcvm_g!Fag^#q)3H>k>?ZwvRC~{0@6Goynzi5ggWGYG=@M4Yqg9B`o42= z>@kiKJC?(k5ty|cH(GD1R{#deiD>=tkK0I7fpMafBi5jZK~;^;A_h{g0tT28rMlUJ z7i(q$Bd$>8l?@Ksh6o7Utb`Wf(8!_yRMlm|F&_U>v;i6L%uqpX z&3iE+jIiW6;*pRTB{eFtpqWmSD2qaN`W3w-j7PK+iujizvPh6Am-zr7u6XQyGmGp( z*2&>(og#N7BNA9TD&M|}OS(ye$(^`roHLdI)h-J#WoH(eGlv$;hbEog=Bh`x-+YX)y+aKbsT@W!40q8wkEn`5$1Lm8HG%WCe!Cjg0W>0&=?Ll&0 z1x`a*9*9?ICV!(aa$xlj1r>?F5CV=vxdaL;Vl!lVxpNds-U3IeP~Gio){3`$WP59L zJJF0KjcYE}`JVn6MOCzoX~&qgxnt23D-Vh9#W=-$tTik`2UbNeN4q%>V5vD8fT-{$a z7bT$4^EM7T&zxY&@Fg|V1K%sKqG5K7sw`F^`Ho~ag``EeAJ8B&fW`yF5o!wvrzRWi ztuU_O9*qu5A_ACSZY^QY6X!+#@OiT-jv1ma5$;o*767vXU1Wvi7rU5%?5Z-rHOOrC zn`3;QSwO?5$0<>7xdr1!#GnNBOi0%-+=Eu_iw`l(B;|{&(S{t^Ak3o#1Nf+GqrZHJ zq=PPaaw+O)+Hm0nfRrI!wZVK?8f(=lbl2ex`yxFL4I^g?rcI29$kN#xRPwhdC9Ke} zaOUSC93tc9QYuHBN{Gd@5240>cY{b7*5nj_X$%d?Fnn;8# zD>KvLSy*P%5VQ;HgCN6)baB%4#ShO8L#r!PbtuLkhP;8CMByS#4vx^zDRxiQ4aK=f zptYwQCL+bDk~>vVbcnxKM}UQO$*XT7q{gko>c$8oD=1H_cfNrJBO1FHn!d`C$w(4Z ziZa85DEzGwjx?%(7h+C>S~wUWLSx)EHY;@?qRp2@C8^4Yd|7#5T&S#?k&xx|7Fa+< zamr@KUzS|TpsRr;AV|df<>LBc^s*s?p{JBgwt2@#QF{1)vm@uz?1dA~5G*Qu$k!fR z?9=HAW+1|yZC|DyfwCgv^fesL0$Eyhl+1A$TM5X_C~y+60M3lS-&!aLy@1{b2orGU zDJI|%&ztKJo0@D|rD1$ZwG*tsd_0kQVCS21rjud-W)Dak($y%SH@qoG2WH)Xc~;%| zr@cGo;OI(2@{qzbwuyZ-#C%s@{GPRyP(_oR{by!$9*`v%aIS2`*#m^LV~L#_b}OJxV0Z^(7-D1^DK4VhE)ndXb zOdodnfnpxqhW)5=&*VpjsCkMB;xstHXOFv9txNytB%{MSuvvV>75ZtI^A_mqa3-~w zjMTz7mDo|7^?G4Jni-p;7*fXw209k-JJQE!6ysO+veKjZ%V!yCiO1TJyc52oYZS!o zuG5Pa5PnyzF(PL^BLP20X2?%ZSejr^sXjn21(6tI5TC~itCkEw=cTS@g)TmDv8Xt5 z5#k~#-Nt>%lM@EeDE&#!-a*C&7F1SG62m}wHt#3l-IN9Ffr%1CIPgp>5evf%S!Jcg z4DL1-q7oAxXZ|sH+eB1B`#O7um>&?oL$Et<&dmyq!O6bN>AoAPHM zOyl6nE6A7=z25|_%(26fG$1HT_wtW&9a!eAfwwc+MYQ%jbwzkJ6 zB3pKW76M5ZY>DKYkKO{&PQW0A@Ail#0)rd2{*w75hQv_`z5^Gugxj@&?5G+|nPG)q z8WK9=(GEiyTBD_S5}I-ci^+(M47$Y_IyTcOD6xo+b`8fuhBR7c8feQ;n88dNU#^;) zL6(LikhqN?Lqvw(!S0Ss@TzbU&_s@H$eV<7!lSve5%NW&`v8~$WNw}cFMIGR1vgC^4+z+p~CV@1MkQnOgsSK*X%wxq9 zg0+y zK?D*~xu8q9nYuLqGks!K$w#E$qZ6Mb8=>=m15R;>5H9!zHm4FyqukI4}&eFdJZ35$}srb11ag)nw*Z<3Wfy zT}*Sq>NYyRPQMaFOJ`W6?}{}{Uo1YHj>CF>R!(2)7}*T;q3d#kJZ-<%o1mpu1U87t z;xIH*d6Xy_BYodHibFcw3@WFIX)Tgj?a4T++DU%ZSeFy55jJ{hz!o&6s?_JYH>)cw zNI1eL(1ib05{`8+SA_AttNv{RRB|PDwQu(ZQpC52#;{s=A^{}dqisDsu@6$Gv1 z8W#+J!luiJ6O$CfA{2N>2c;xGh^0l)+F4cmE-rJfjYGBOed_`oSPqtJKlKK2T=J!7 z+?%HC3~^TSakOciEY>?YJ#+Txh}d%>x7A?&B6#LdB2W@*GHDYW6EoosQX_#IaLx!9 zxnZ6d+w7n=b1{vdtnNFqD!CYe5vd$-Vqf1(%@by|k)#Xfu03GSx5-lXb7*bcmfe5& zi%=k`@-Chf7>1si@@5{J!&P&jVA?7SP$l8=gaGBEU0VGncn3@uKWnmI2S9 z5eIe@+U#t9T$>F}WqPl!xL^ahSb_!1M?N7;u_3Wz@r#hfREDz$zUs~LT_3@@=th#@FpmXRI%k3Q6sbx;6lW)l+?s||B~8h8 zbaZCym0KA_HBE_ra>0*Rl8{8!q)ETP_!h>zs7xj{N`&=EnRI63sF_Z3C{$~Um}zT! zdJWG}$238RQ(JCIW=no$#g{AL@!ZcGa^r-c zF4o=V?}(qu5Eeq$RJK=m-b3q#;e~{@SB%?Av;v1ChmChmxRZ~FN<4Vu!=QFM*l-R1 z;P8HyPo0Fd(anP0M0y3&2onY-23ru>rn2hreXO`W&SMnwgTe?S!8N>tSJ7~{vvDb! zAi<|_^Y(pA!+`fFt)$htolstczl~4=L>Blr)f^Ax&P8Rrs&1-mr;brFZ&sKJxh)WR zAFv=}G7_;(%ki}KDP^>8V4dFh_le}>l%cuf+G1mTEjneei@O*<%msk04qz@fmBcok zZ9*~|-4meSAz!PBYd)~4prqd5-h~p;e_&!nHuKgw*o|P5^W^_L!Qzmzx^pim@7L3MO~tB_d3<8ts?lzv9QI-Ygm)zgJB!xu`zUC+tme)v z`WD-O_8X9jPTGM@!m|l%elb&nQbqs-bOPd3m_giX4+$m+d7Ml~K_`qX_6VbbnP5jn zQMNk%{!BuaM?cv#MKz2a z&oDXEz*tG<>XDVIsx%7vaasjpwXnz40wdOj+(w|`a;s$UKnBNNQbgWJKz)f>^1Tim zz>cU1gr~!hUm3f{al!C*Q$?iJ^h-Gjs>iS>`W9^4jG$gALi!{i1|AT-JZzLxO*?sW-Derp&#d%*%FVmHAb9p6J7&DFT@yAPs{r0inHT_>E*hjgWf~}jBZp5 z-whwWfnmwh=0&k{&+!NRb%w^OjvVXOb5w~CvqXl@U+Kt!+7#Jk78E9Z!%jdO z#of$O^Qw_6_GTK3JaTsKNK!9K|EN6-Xn19B>hGXGkzJbE4k6ggsnSc*WF-Vv%2u+M zQJX=S{c)ANe`6|LLQ6xGQ3)S@%N1=?P`Yx7cCa2BC$L zSHO+x1w~6Mt%v*sWaQLLk=69$c@l(k&Zo*SwNzrW<;V?pJlYp#F4cN-4x!pq4V`he z#}1bsGLUBqOdFCAKzfA;EC+)by61L7lJ1L|^1hLLa*HU_ud?eDo8*J;d}TJQx8!0K z%*An$ToSUtG-us{$!PAO3^i6fX2%%me88CF_xmFLwuoH0>ka2Io2;!=&F)Up+&M@@ zpa!Ag?-iM_cf>yX;7k)t&b2pS-VTze}iy>K2AY<7`6Z39NB}`kYK~T~ehuU01O%Q0H&KqU(Y+p*j;x|4vE$p zDfzRaUibT$ay6qii@lAUXO0O~n8=%y8QR$AR7pOHe5!k2q)1m*#x*UN7Thx53^C#foF zwN}*$&0e^cb18crv%F>!Z>Cg6q$%ssrJ8^_X8e?p_8QYwy2Y5EVJ0eLW5E*$y-f<& zo6r?Pm=pzBCQzflYTJI#){s>0bj@&luuGH*`CH}d00fVYylxy`Jk=Yx;gXgTjGAFz zQBiW>bWo78s&Bq+7)gQ6^C&Fnoj57npvWv(4q5Zq=R=7Ls4XwjaQ*hj|iVS1rqRo^sEe ziplM<{wfkKz(G_l0&ZzRd0BXtLg<|BPE^h$?%KX^SBhIy5}sW)z6deck!7ksG1Hrw z2sQRL;)=Xawdy9BNu)Q%JrcmJTD(&neveD`ze#-=CI@6@?@e2x@+0!Nxn zBcK$5NHB$nBJs^8YZ19p0PJ}9=V@dyjSH=3Mj|P;IgjG*t|%Cc3t$ShlypJyQkH`m z_crT1IqP4>=fVr)!ohj9l|l7MmOj>C^;11!EawCZm)MObQ zl2~79mxLiyhyB9yViIyf7OTy$%~V&~q@r+5s!4Sq$K;@yw|U(Fd;^(mH_RZN7+VYO z5KFi*V>(m$I>is?@gY(R{On*|i19kFfsR$sY-=Ht?Q7R&1V&&38n{=}?a#NAW~}LS z4wlgS6L|S35h^ZhMrCpNU~?{4y;7Zm6+d!>Q>5CqHV}n%e;P0_RSo-(Y@fINu;jak^E%lWf{CcmvTa4a2(!@ zD9P|Y#6{?kZ6_#d`XeD{4&iQk(mX~&jy`B}OL-Ps?4-7)UI;g~vQ#{jX z-qe;vCC|MO)x(r&7ltQNbaoB_OCSZ;rpZSTaZd+9P{-B+TUc6!3BHCv@V4Q+?(6@g z-iA4x7QRi&ZFLX)jfW3}j4z#LNTRjm^EDq;K6cmA>MV zm;$`bs>oek&78DucR$i;HY$y+TI;LW-0Fth_TSfDPS-oPvi$v zshCowB5&4WU!VnBHzWNotGw@`0wrsLQ=p-rBN20UrpZyO7LWPej9MG3>Qs+1*x`}r z+a1^U{W)fPI}LR48*qMocA&uCr9cK2FoYp9l`EY1;Pr54d)K}ODX^_ay!R30w8g|# z)6O=pr@TX&Qf3Nl1u5BXUOW61sw<%%`E6`oglERc2%JIXk1mRy@q$<07&Esx_U=M( zXHSvpXB&#!762hgE88$lYG6a#_QTey%iE`<$<5rwFhllx2`{epmng0BO8Mz`Nl4ziq@s!z&KV-c17Up+zaAy6;WORJCw(W96I;2=#Lds!jGYt_)Ru0tlEhZ6araGlIvz)Bc;vrW|p&-$k#Y3m0$6e4-Y_#kGBXyrKkYJudCT;W z-DsBnLT8Q>@aO#vzgiJ~iOfq2`x9(z6>Hgb>IzOh*?Z2M4kIvOe`}A$+{Ji~2z5F5AKRG$< z9PGb5Y^%fl@A3Uze?4fQoU8A@Z6B#)9RB;xSzDc*@8biVBZcn;?;O3M0r3sgr=2(7 zo(JC^AHHgz((BUJV0L;?o$Q~UciLyTj_*3J+WwkUZT}3GT~pt8&c8jrIJb)rj$gwd zKd3)eX!=SWziFR&n1OQ!@*?bpIy-3}bnp-O9qHc(s4NuV}^a@5?scecC<( zKoO1Y9~@kq0=?lK_ynxx>;fpTbHt~C`y~?ZoW2SSkrCd$-tQbDjt0yfLXDvMU0yt!6miTO1T!E!t3$Vap9Jq2m75l4UPk zxTK;zPE-$2UDVfX9Zkp#B%_CQW*I5G7S9nj1?wdl*CS(j)q8qVM-iZBwOeEfc5$Hg z-K>nDA|7AGiMRGSp1X=UY|@!46>6@$r3wgFbkA}4nIuS@4vu1yPd68ya{*q`IWKq} zrn|o7w~Or)h&ZY6+!Q$cfFkb*G+0?c;l(lK?NTZrQOQF13OOdlOmT*oFOOLR6agX*h@Su4`!b@lvK6YrJV-n++bl+$=< z%&Yn+Q?Y@m{h_#|oib|*_^df#GE+NbO%-7uw}vaWPmj#apiyzn52dns#UA|DAPjw) zruoTDK>C;X)V<6*eNr<0GFV{b#3)(9rMbp z>9RT>4sN^lrD#KpTbb%FW0eA-zzK1?W3)Ss28KexXkpL&w@~v~#;fl557+ZeD^mdD zMY@!7y40CwQx8Y@1hd;x5014mPV{?nrSKejPo%TLJyad6r^# zGJGdZIK~Vq*rS)|;We)8h3<`+yjFh4^(`LGz`maI#(|5wt#f9I*D+26D2o}}`-b1< z&Pku<)dcgM=(&%NFoy1$XbIB*z8c8AmWw^zrU`VYYUWLB}Ryfr(#f z<2sayo`TwTyoaxdRRl4WVi@L1kN5Yx35JMkbU6ztU<%)>S`?H=C7TEfR z4P%MgDD7HN2L;0HYabwC3+|K>f+edqPR{QO`13C=hOs1d{%1?n5ouAc{{dDtb!2-M}} ztIp}=rCL?XYnO4_L)=(~o1T>8~S9Io;{l%RKagN0(QgKQi~< z@Nx%KWR%J@eL(jx$6fTl(b{49-`?3-UvDD)x3<Hi_F4<-VSru%M=)W<=CGxoA3qq&>Afi zb(I=Ca)2x0AKVIV->6YrOvTvMXDwvT(`GF%x_fQ-^_QQqU)nD}+uvWTb@x7ZaUPfa z6^olv_;GP|W!`U}x+ufCe;vf;JZ%+=@%>mW5xHJVz~uK-l8dqaGKjQ)(3 z*k{cAr{)W9))#9?z%SN-wD<0kh|d070Qr01F`s4sZKM9TzO%FS$p0VWdNBKM9(q06 zf4})PNu|H`J<n{2?{=co(MssI-3-!Nd^U?qFAeZO=bxISat>+j7xU^sXcPxXu z&VOfngZ2OQ_06s3I`IFk_12^Q{~*^_YX3WAoMZNXQ%I~L(upqhC5E5o4;U;ZdZ5#2 zw{~VwTJDgFa=-@^FMHt2zm@t=pd-1%2b zi+i2pF8<%zS$F#X#t!iR=JwX3{C|+^!SsKJUXNP;S9Br$f9W|smH%(G*0(lxTEPFe zKny(c|A)8=pvY0UTKxSB`2Edw2mjx~oDVwxt=4911MR=<^~d<%!(0caZOrIDr!t7n zYpOM9|Fv^=ex^i?w&}IT7`##SU@4B~WO-v+-T*XW9OUTY@KC9f)6QEgFZpx(2kOrP zf+Lqk4@)R>W`?-J+`KTax0=lrI}Y58^%du*`<$-s2GNqS79=-(8cn@QJA>(ziPkUzc@TsO*{rFqP)!d4kUASY@TRMpM{0qrN1A0 zCjOTz@a*g3({|_05dp5Qd{C{Z)AsB3Y5VA)eG5s|72SG#1S>jh!x5jhVJ)45bNuS! z29p`glFy<@|qM{6{(_`Qe}cj!*Ee{I9K@9f|*Jt;0vvT;JT@evJP=$aRbV4~t>V zryoy<$Nc!#@R%PDM01_G@1l&8;x^ym>T1<}2q>m@sc6@Y2;ahY_|wz9fiCNH;I1p` z?}Pes94)V)$cX!@{`)7r74;!l!g9518UbG{-8Qf7s@D#tBR%P|evdtI@h!xwH5lh3 zPF3XnOMDeECR9an>5%?%8CLwH_jE6gWXgVhxd^ZH@{0PyAJh|!J3Za&4R!Bb-3~)P z{a$_>hDAHiv%ILUtOU5!{3clXKuK@BJDjl2Q#91S1WQXx%Xk#aYIjdfdi0VboRq$U zA(oc@2CH6LA}Bw5hUKaFK0@Pmy*NEY7|%<8LyzmyN0=FY>%k-ztP+>^&jwm+Zg}b*={|a|3h3~Y5s>r#>c9UFMB!q|8jGDdj7}uMzgs|@gJoB z$N1luzh?8lf8+Y!9jgCpZawn<2e}?R|NF82_p7?*+AC})-J2SC2mPOa;uANBtSxxP~UubTh+f?nS~(&aFVV79C%Yx1hu-P(sI_$DPOH4Kz`0fu%G6}mLF zg_HoixBpW{t=cE4?}&J@CO^}?A8?vWO%9un{B)G;Nqaij28J8Tn=x#n)bC*l$TW9r z_}`jJ!mdtsYe(6rX5Tivi|?6`fz~3fsT`Yfuwv33#U++oE-if^hXXBKz0)_l)|vE? ze(g@m5*zE#)bgB6j@~Fcx$LoqZ3gjHX|*O3Vms{`4)|hiOn_Q*kb=Kq>w5s{lHN%n zk0fzHD|}HRLeTol;U4Vq#TxueAEQ0^JEEd9bJL5mn?*PHGXj+R!sXd$_X!TCV&FJ* zzO)v&IVTX%$RE%tM%mII%?vb$S&zJ4xVGoD4E%te8G(@OdooV4FtT7dWM31#3q`z_ zH7T%jA(L@92?wWDDe<>&6UGbmIZ7cuRH`aHs z{%d37QT{*3wNU?`iTHr7Uy1a*dI{eUW44i-07Dy~;Fr3G4J4mn++@l7jI%rss`p%? zSS!@7`WIq*7~#R-$8wyO%iLemMMRddIb}Ma@BhXFaSz7+B;{s$VHDM$L}3}?fPa&K z#;cdlo(*)_!9qtcW$G(W_u{nBd0Agxn2@#HP&5vQP3FwRksA!#OwC8Zou~_6%*^}T z{P=WlGR7ePCoG`B_fuz7ihnf_t}C*xISXU?fJ*b6*<9xgxugB~0y7%k<1I3q{>HsDI02 'int', + 'name' => 'string', + ]; + + public function add($data = []) + { + DB::getInstance()->insert('plugin_materiels_location', $data); + } + + public function edit($id, $data = []) + { + $db = DB::getInstance(); + $db->update('plugin_materiels_location', $data, $db->where('id', $id)); + } + + + public function delete($id) + { + DB::getInstance()->delete('plugin_materiels_location', 'id = ' . $id); + } + + public function get($id) + { + return DB::getInstance()->first('SELECT * FROM plugin_materiels_location WHERE id = ?;', $id); + } + + public function listAll() + { + return DB::getInstance()->get('SELECT * FROM plugin_materiels_location ORDER BY name;'); + } +} diff --git a/src/templates/_nav.tpl b/src/templates/_nav.tpl index 323a59a..151fd2f 100644 --- a/src/templates/_nav.tpl +++ b/src/templates/_nav.tpl @@ -2,6 +2,7 @@
  • Matériels en stock
  • Catégories
  • +
  • Localisations
  • Entrées définitives
  • Entrées provisoires
  • Sorties définitives
  • diff --git a/src/templates/localisations/index.tpl b/src/templates/localisations/index.tpl new file mode 100644 index 0000000..79b9717 --- /dev/null +++ b/src/templates/localisations/index.tpl @@ -0,0 +1,38 @@ +{include file="admin/_head.tpl" title="%s"|args:$plugin.nom current="plugin_%s"|args:$plugin.id} + +{include file="%s_nav.tpl"|args:$plugin_tpl current="localisations"} + +
    +
    + Ajouter une localisation + {form_errors} +
    + {input type="text" name="name" label="Nom" required=true} +
    +

    + {csrf_field key=$csrf_key} + {button type="submit" name="save" label="Ajouter" shape="right" class="main"} +

    +
    +
    + + + + + + + + {foreach from=$list item="loc"} + + + + + {/foreach} + +
    Nom
    {$loc.name} + {linkbutton shape="upload" label="Liste des materiels" href="materiels_par_localisation.php?id=%d"|args:$loc.id} + {linkbutton shape="edit" label="Modifier" href="modifier_localisation.php?id=%d"|args:$loc.id} + {linkbutton shape="delete" label="Supprimer" href="supprimer_localisation.php?id=%d"|args:$loc.id} +
    + +{include file="admin/_foot.tpl"} diff --git a/src/templates/localisations/materiels_par_localisation.tpl b/src/templates/localisations/materiels_par_localisation.tpl new file mode 100644 index 0000000..f16a6db --- /dev/null +++ b/src/templates/localisations/materiels_par_localisation.tpl @@ -0,0 +1,5 @@ +{include file="admin/_head.tpl" title="%s"|args:$plugin.nom current="plugin_%s"|args:$plugin.id} + +{include file="%s_nav.tpl"|args:$plugin_tpl current="localisations"} + +{include file="admin/_foot.tpl"} diff --git a/src/templates/localisations/modifier_localisation.tpl b/src/templates/localisations/modifier_localisation.tpl new file mode 100644 index 0000000..efd56cb --- /dev/null +++ b/src/templates/localisations/modifier_localisation.tpl @@ -0,0 +1,20 @@ +{include file="admin/_head.tpl" title="%s"|args:$plugin.nom current="plugin_%s"|args:$plugin.id} + +{include file="%s_nav.tpl"|args:$plugin_tpl current="localisations"} + +
    + {form_errors} +
    + Modifier cette localisation +
    + {input type="text" name="name" label="Nom" required=true source=$l} +
    +
    +

    + {csrf_field key=$csrf_key} + {button type="submit" name="save" label="Enregistrer" shape="right" class="main"} + {linkbutton label="Annuler" shape="export" href=$cancel_link} +

    +
    + +{include file="admin/_foot.tpl"} diff --git a/src/templates/localisations/supprimer_localisation.tpl b/src/templates/localisations/supprimer_localisation.tpl new file mode 100644 index 0000000..a6a1bb1 --- /dev/null +++ b/src/templates/localisations/supprimer_localisation.tpl @@ -0,0 +1,11 @@ +{include file="admin/_head.tpl" title="%s"|args:$plugin.nom current="plugin_%s"|args:$plugin.id} + +{include file="%s_nav.tpl"|args:$plugin_tpl current="localisations"} + +{include file="%scommon/delete_form.tpl"|args:$plugin_tpl + legend="Supprimer cette localisation de matériels ?" + warning="Êtes-vous sûr de vouloir supprimer la localisation « %s » ?"|args:$l.name + alert="Attention, la localisation ne doit plus contenir de matériels pour pouvoir être supprimée." +} + +{include file="admin/_foot.tpl"} diff --git a/src/www/admin/categories/materiels_par_categorie.php b/src/www/admin/categories/materiels_par_categorie.php index 0337b92..610d743 100644 --- a/src/www/admin/categories/materiels_par_categorie.php +++ b/src/www/admin/categories/materiels_par_categorie.php @@ -1,6 +1,7 @@ id; +$csrf_key = 'edit_category_' . $c->id; if (f('save') && $form->check($csrf_key) && !$form->hasErrors()) { diff --git a/src/www/admin/categories/supprimer_categorie.php b/src/www/admin/categories/supprimer_categorie.php index 73e609d..d59b8af 100644 --- a/src/www/admin/categories/supprimer_categorie.php +++ b/src/www/admin/categories/supprimer_categorie.php @@ -14,7 +14,7 @@ if (!$c) { throw new UserException("Cette catégorie n'existe pas."); } -$csrf_key = 'delete_categorie_' . $c->id; +$csrf_key = 'delete_category_' . $c->id; if (f('delete') && $form->check($csrf_key) && !$form->hasErrors()) { diff --git a/src/www/admin/localisations/index.php b/src/www/admin/localisations/index.php new file mode 100644 index 0000000..416a923 --- /dev/null +++ b/src/www/admin/localisations/index.php @@ -0,0 +1,39 @@ +check($csrf_key) && !$form->hasErrors()) +{ + try + { + $loc->add([ + 'name' => ucfirst(f('name')) + ]); + Utils::redirect(PLUGIN_URL . 'localisations/index.php'); + } + catch (\RuntimeException $e) + { + if (strstr($e->getMessage(), 'UNIQUE constraint failed')) + { + $form->addError('Cette localisation existe déjà.'); + } else + { + $form->addError($e->getMessage()); + } + } +} + +$list = $loc->listAll(); + +$tpl->assign(compact('csrf_key', 'list')); + +$tpl->display(PLUGIN_ROOT . '/templates/localisations/index.tpl'); diff --git a/src/www/admin/localisations/materiels_par_localisation.php b/src/www/admin/localisations/materiels_par_localisation.php new file mode 100644 index 0000000..10190e6 --- /dev/null +++ b/src/www/admin/localisations/materiels_par_localisation.php @@ -0,0 +1,20 @@ +get((int) qg('id')); + +if (!$l) { + throw new UserException("Cette localisation n'existe pas."); +} + +$tpl->assign(compact('l')); + +$tpl->display(PLUGIN_ROOT . '/templates/localisations/materiels_par_localisation.tpl'); diff --git a/src/www/admin/localisations/modifier_localisation.php b/src/www/admin/localisations/modifier_localisation.php new file mode 100644 index 0000000..fdf9d21 --- /dev/null +++ b/src/www/admin/localisations/modifier_localisation.php @@ -0,0 +1,44 @@ +get((int) qg('id')); + +if (!$l) { + throw new UserException("Cette localisation n'existe pas."); +} + +$csrf_key = 'edit_location_' . $l->id; + +if (f('save') && $form->check($csrf_key) && !$form->hasErrors()) +{ + try + { + $loc->edit($l->id, [ + 'name' => ucfirst(f('name')) + ]); + Utils::redirect(PLUGIN_URL . 'localisations/index.php'); + } + catch (\RuntimeException $e) + { + if (strstr($e->getMessage(), 'UNIQUE constraint failed')) + { + $form->addError('Cette localisation existe déjà.'); + } else + { + $form->addError($e->getMessage()); + } + } +} + +$cancel_link = PLUGIN_URL . 'localisations/index.php'; + +$tpl->assign(compact('l', 'csrf_key', 'cancel_link')); + +$tpl->display(PLUGIN_ROOT . '/templates/localisations/modifier_localisation.tpl'); diff --git a/src/www/admin/localisations/supprimer_localisation.php b/src/www/admin/localisations/supprimer_localisation.php new file mode 100644 index 0000000..5aa585f --- /dev/null +++ b/src/www/admin/localisations/supprimer_localisation.php @@ -0,0 +1,36 @@ +get((int) qg('id')); + +if (!$l) { + throw new UserException("Cette localisation n'existe pas."); +} + +$csrf_key = 'delete_location_' . $l->id; + +if (f('delete') && $form->check($csrf_key) && !$form->hasErrors()) +{ + try + { + $loc->delete($l->id); + Utils::redirect(PLUGIN_URL . 'localisations/index.php'); + } + catch (\RuntimeException $e) + { + $form->addError($e->getMessage()); + } +} + +$cancel_link = PLUGIN_URL . 'localisations/index.php'; + +$tpl->assign(compact('l', 'csrf_key', 'cancel_link')); + +$tpl->display(PLUGIN_ROOT . '/templates/localisations/supprimer_localisation.tpl');