From 3df8fc53b82e2acee784d6e03fc84cbfb4a48f75 Mon Sep 17 00:00:00 2001 From: Developer Date: Mon, 17 Dec 2018 17:50:23 +0100 Subject: [PATCH] initializing git repo --- .gitignore | 4 + documentation/German/DeveloperGuide.odt | Bin 0 -> 14420 bytes documentation/German/DeveloperGuide.pdf | Bin 0 -> 89203 bytes includes/globals.php | 31 ++ includes/java_scripts.php | 19 + includes/language.php | 68 +++ includes/load_config.php | 39 ++ includes/lock.php | 65 +++ includes/log.php | 60 +++ includes/message.php | 41 ++ includes/mysql.php | 28 ++ includes/nested_list_functions.php | 173 ++++++++ includes/other_functions.php | 132 ++++++ includes/prepare_template.php | 158 +++++++ includes/user.php | 175 ++++++++ index.php | 110 +++++ languages/English.lng | 158 +++++++ languages/German.lng | 158 +++++++ pages/add_part.php | 125 ++++++ pages/add_part_package.php | 73 ++++ pages/add_part_storage.php | 73 ++++ pages/add_part_type.php | 75 ++++ pages/add_part_values.php | 107 +++++ pages/consistency_check.php | 4 + pages/consistency_check_databse.php | 146 +++++++ pages/consistency_check_incorrect_types.php | 81 ++++ pages/edit_config.php | 165 ++++++++ pages/edit_packages.php | 299 +++++++++++++ pages/edit_stores.php | 299 +++++++++++++ pages/edit_types.php | 310 ++++++++++++++ pages/edit_users.php | 261 ++++++++++++ pages/edit_vendors.php | 199 +++++++++ pages/home.php | 5 + pages/parts_by_store.php | 155 +++++++ pages/parts_by_type.php | 241 +++++++++++ pages/repeat_order.php | 73 ++++ pages/show_part.php | 398 ++++++++++++++++++ pages/show_part_delete_part.php | 22 + pages/show_part_edit_downloads.php | 63 +++ pages/show_part_edit_package.php | 72 ++++ pages/show_part_edit_storage.php | 72 ++++ pages/show_part_edit_type.php | 74 ++++ pages/show_part_edit_values.php | 119 ++++++ pages/show_part_show.php | 178 ++++++++ pages/user_settings.php | 121 ++++++ pages/version_history.php | 66 +++ templates/GreenPartstock0/Error.png | Bin 0 -> 713 bytes templates/GreenPartstock0/Ok.png | Bin 0 -> 643 bytes templates/GreenPartstock0/Warning.png | Bin 0 -> 607 bytes templates/GreenPartstock0/icons/.directory | 3 + templates/GreenPartstock0/icons/1license.txt | 17 + templates/GreenPartstock0/icons/About.png | Bin 0 -> 686 bytes .../GreenPartstock0/icons/AdminGuide.png | Bin 0 -> 742 bytes .../GreenPartstock0/icons/Administration.png | Bin 0 -> 742 bytes templates/GreenPartstock0/icons/Cancel.png | Bin 0 -> 957 bytes templates/GreenPartstock0/icons/Config.png | Bin 0 -> 628 bytes .../icons/ConsistencyCheck.png | Bin 0 -> 711 bytes templates/GreenPartstock0/icons/Delete.png | Bin 0 -> 764 bytes .../GreenPartstock0/icons/DeveloperGuide.png | Bin 0 -> 727 bytes templates/GreenPartstock0/icons/Edit.png | Bin 0 -> 598 bytes templates/GreenPartstock0/icons/Help.png | Bin 0 -> 744 bytes templates/GreenPartstock0/icons/Home.png | Bin 0 -> 738 bytes .../GreenPartstock0/icons/LockActive.png | Bin 0 -> 620 bytes templates/GreenPartstock0/icons/Login.png | Bin 0 -> 705 bytes templates/GreenPartstock0/icons/Logout.png | Bin 0 -> 621 bytes templates/GreenPartstock0/icons/New.png | Bin 0 -> 603 bytes templates/GreenPartstock0/icons/Packages.png | Bin 0 -> 559 bytes .../GreenPartstock0/icons/PartStatistic.png | Bin 0 -> 658 bytes templates/GreenPartstock0/icons/Parts.png | Bin 0 -> 665 bytes .../GreenPartstock0/icons/RepeatOrder.png | Bin 0 -> 696 bytes templates/GreenPartstock0/icons/SortDown.png | Bin 0 -> 519 bytes templates/GreenPartstock0/icons/SortUp.png | Bin 0 -> 493 bytes templates/GreenPartstock0/icons/Stores.png | Bin 0 -> 529 bytes templates/GreenPartstock0/icons/Tools.png | Bin 0 -> 879 bytes templates/GreenPartstock0/icons/Types.png | Bin 0 -> 511 bytes templates/GreenPartstock0/icons/UserAdmin.png | Bin 0 -> 610 bytes templates/GreenPartstock0/icons/UserGuide.png | Bin 0 -> 705 bytes .../GreenPartstock0/icons/UserSettings.png | Bin 0 -> 458 bytes templates/GreenPartstock0/icons/Vendors.png | Bin 0 -> 584 bytes .../GreenPartstock0/icons/VersionHistory.png | Bin 0 -> 637 bytes templates/GreenPartstock0/menu.css | 67 +++ templates/GreenPartstock0/message.css | 49 +++ templates/GreenPartstock0/partview.css | 56 +++ templates/GreenPartstock0/style.css | 137 ++++++ templates/GreenPartstock0/template.php | 21 + todo.txt | 4 + 86 files changed, 5649 insertions(+) create mode 100644 .gitignore create mode 100755 documentation/German/DeveloperGuide.odt create mode 100755 documentation/German/DeveloperGuide.pdf create mode 100755 includes/globals.php create mode 100755 includes/java_scripts.php create mode 100755 includes/language.php create mode 100755 includes/load_config.php create mode 100755 includes/lock.php create mode 100755 includes/log.php create mode 100755 includes/message.php create mode 100755 includes/mysql.php create mode 100755 includes/nested_list_functions.php create mode 100755 includes/other_functions.php create mode 100755 includes/prepare_template.php create mode 100755 includes/user.php create mode 100755 index.php create mode 100755 languages/English.lng create mode 100755 languages/German.lng create mode 100755 pages/add_part.php create mode 100755 pages/add_part_package.php create mode 100755 pages/add_part_storage.php create mode 100755 pages/add_part_type.php create mode 100755 pages/add_part_values.php create mode 100755 pages/consistency_check.php create mode 100755 pages/consistency_check_databse.php create mode 100755 pages/consistency_check_incorrect_types.php create mode 100755 pages/edit_config.php create mode 100755 pages/edit_packages.php create mode 100755 pages/edit_stores.php create mode 100755 pages/edit_types.php create mode 100755 pages/edit_users.php create mode 100755 pages/edit_vendors.php create mode 100755 pages/home.php create mode 100755 pages/parts_by_store.php create mode 100755 pages/parts_by_type.php create mode 100755 pages/repeat_order.php create mode 100755 pages/show_part.php create mode 100755 pages/show_part_delete_part.php create mode 100755 pages/show_part_edit_downloads.php create mode 100755 pages/show_part_edit_package.php create mode 100755 pages/show_part_edit_storage.php create mode 100755 pages/show_part_edit_type.php create mode 100755 pages/show_part_edit_values.php create mode 100755 pages/show_part_show.php create mode 100755 pages/user_settings.php create mode 100755 pages/version_history.php create mode 100755 templates/GreenPartstock0/Error.png create mode 100755 templates/GreenPartstock0/Ok.png create mode 100755 templates/GreenPartstock0/Warning.png create mode 100755 templates/GreenPartstock0/icons/.directory create mode 100755 templates/GreenPartstock0/icons/1license.txt create mode 100755 templates/GreenPartstock0/icons/About.png create mode 100755 templates/GreenPartstock0/icons/AdminGuide.png create mode 100755 templates/GreenPartstock0/icons/Administration.png create mode 100755 templates/GreenPartstock0/icons/Cancel.png create mode 100755 templates/GreenPartstock0/icons/Config.png create mode 100755 templates/GreenPartstock0/icons/ConsistencyCheck.png create mode 100755 templates/GreenPartstock0/icons/Delete.png create mode 100755 templates/GreenPartstock0/icons/DeveloperGuide.png create mode 100755 templates/GreenPartstock0/icons/Edit.png create mode 100755 templates/GreenPartstock0/icons/Help.png create mode 100755 templates/GreenPartstock0/icons/Home.png create mode 100755 templates/GreenPartstock0/icons/LockActive.png create mode 100755 templates/GreenPartstock0/icons/Login.png create mode 100755 templates/GreenPartstock0/icons/Logout.png create mode 100755 templates/GreenPartstock0/icons/New.png create mode 100755 templates/GreenPartstock0/icons/Packages.png create mode 100755 templates/GreenPartstock0/icons/PartStatistic.png create mode 100755 templates/GreenPartstock0/icons/Parts.png create mode 100755 templates/GreenPartstock0/icons/RepeatOrder.png create mode 100755 templates/GreenPartstock0/icons/SortDown.png create mode 100755 templates/GreenPartstock0/icons/SortUp.png create mode 100755 templates/GreenPartstock0/icons/Stores.png create mode 100755 templates/GreenPartstock0/icons/Tools.png create mode 100755 templates/GreenPartstock0/icons/Types.png create mode 100755 templates/GreenPartstock0/icons/UserAdmin.png create mode 100755 templates/GreenPartstock0/icons/UserGuide.png create mode 100755 templates/GreenPartstock0/icons/UserSettings.png create mode 100755 templates/GreenPartstock0/icons/Vendors.png create mode 100755 templates/GreenPartstock0/icons/VersionHistory.png create mode 100755 templates/GreenPartstock0/menu.css create mode 100755 templates/GreenPartstock0/message.css create mode 100755 templates/GreenPartstock0/partview.css create mode 100755 templates/GreenPartstock0/style.css create mode 100755 templates/GreenPartstock0/template.php create mode 100755 todo.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7ab0e71 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +config.php +downloads/ +pictures/ +log/ diff --git a/documentation/German/DeveloperGuide.odt b/documentation/German/DeveloperGuide.odt new file mode 100755 index 0000000000000000000000000000000000000000..c1479c76b371fc8adbb1b5a408b8b3e135d29561 GIT binary patch literal 14420 zcmb7L1zeO%*C(VykQ61PLAtxUyL)$m1(t=~r6fd*Z=aYN=NiDA}prD=looS~yRczV^ zSX6OCC`hiRJATOhkD(yv1%&%v*Y(&Ld$; zTl#oWo_3MgrVoA22i27)J&{d*M4z5j-P+{o9A#pe`F#gRB#n?vQ*28C89!)qMC7f z>y+MNR33T|^r;V@k_eAT5;xpmMHg@_RL;6H72v&+Qa@0h5zFVoE==JUz`Ikls_(}S zoujK*H&t8VAaI-$Bz7HcF@M?M-DJ@U@$ayCrm2vTtX1sSEM|FvM#`7S0LCeV-8B|4 z;4K`edy!zP1q$@^XRVI{9g7^mqaNw2w%W*9CDC~}_L#3WrFMd~Kz!M+MWw8lA5N>k zj^e~?tK)MKadlJZZz(T(d~*1$yy-2n2~qrf2P0O4)W;bfH4*F5!b|*i)m}N<6yqa* ztOXd46At0&Y)Dg?y7ET<5vww?MjfgwHF~C({O2vQavA!U`vfbI_&M*ED;UF>w|8z` zY`*WcCn8$fX0VlWi1wNG>h}-K$&npiqn~UfS2T8+kI2}O8%u-0=E$`;Hq5m_b} z^=gQx;c(FlT6|1A2u5cvTRO%v(fNLcZf-WkgI&hZBHaDJ6Jr@w^|YKNNv@ti`XvEf z$@Y%_SK{|2395Z{&(TeAXoG{OT`17JtPWT_Saz0=!2IXH? z-@yUGC9&V(DY;tTHP*>Qs-DUF=&4pU(D4dN%A$bUboCIDKe$I(Jij*^D3a|C9oycb zyWB!j@=oF}3!0&v5%(>!JHa0ZM|TDKQR>-^QSMlezZh@tLR9WUX@hdb2JU9C#gcIr zm(`9_3g4kl&|o>@;`J3HDp9yQy)?#@d4QvO*)z(`V~J#~B%97jikQwnPQZTf!qAkt z#@vI;d+uJx3k|%Edw$$Fqs^WW`2qZb%qOzXgjMe+oYK0ga_~UV0&IcUJ0sYQu__nty9%^mn z^UF$fQw*s}IH6n$7swEaly&Wqcz96HL9H`3AFP8Pgmf00K?K?|5nj_m-JGVl>m6+> z7!6pv264qu=UTn<-$7b;j#ccf0yfO37J!%MmJwelm`4~AilR~&0|G$LU% zvXSJ=Ff$#z)7GfZnDa51W0TGerv}HqLCsd3q`i3%k-m=_}jQSM~I-zC6c=RowZ3P^$sj--Sstx zhWM?O?WfrdIf~s|$bd;%Iy|eDXzpcad((Xf^Jh~N8ESFCr0<^H+88i-&06gJLEyR4 zJQMHK0Ior}h{CL6S59i%L|&cfy=b?gUH+F-L>ZBVEeF-Dx{Q1j6!!taF&}W!CEVR{ zOP?yp2DUKXzW7Su@##yGD2l9FUQU|@xH-FR!rI|#wRe}FM93eu@V-5evbU3uqIWmZ z?{@ZFnIPQ5i=%K@%lRd7E7V?Uz@_;iUk4vW>39oIg&DYgC#Sy5ehHOt_cnwQ;k}Q# z^F(9O-J4-S1u@I$svA69Al%8@`wA#I`8*H&Ld5PR&{r<9S~u&p;h{vX!VD3s-5a3B zQ=bo%lNh1x0YeE|qnAwY>cf>^GJG?M9A%vr5LTyKJfbw%xEy&iau)OItLhvK)o?~+ zKI5#IseZuk;i^3=zSGjP!_xaPIe-e|!5aQM1M*&|7Mj_$!3F-M54GS;N4dneYtS@8 zlmIB6+SrDT64k*Io<$E{5kEwrIdHt?RMD0)w7QK~85LY`P{N|+adei;_hFnw2*zG^ z@O^{bT^_sxXQoG7eiirP*kIg=T|ISbE=?2&wX7>m&uI4Y027DDC(ZXJeu(vPRDUNn z6PK?pKXx#Gj8c#tVNzIz<>M1{$ro30%b_E&%FJ3j`b_IWC6<9G?o>|CoeR?_MGWPc zWgp~=nYB-sDv#RnVA$Za6OnOaJ2ZEQ_e>{q3#$l&*@rL4p(c+xx?I0D!f1xQj7zx&8lH{2(27Maqg}tlJG#eQcODr%>Z_j7Fd?Mg?^$sEisM{5M&_{X zlk<^fV_4Tw6VJ_@U##S1V|1&EFUV22SE4ZaQM5&GbM;q6S;fvZ#UuTzVM9mD&Bm>w zObW3_4!bNL#6Z--nt0T{iRZn;umrdoXCzfif|s(Orm*6G?uw#ixo^RCN!}wBs_&i% z{VmoHa%*#%xxM;=)6*`sdroR}i`}`O7O_txbb(F2r4(Ia>SwM~@e_})zC=e)G#NBW zQhY_62rM&RJQ5Pf3~nl^72I2@c=P>;&V90|bhjeEXLwG(rrj08<8sZCy1Z$pwm`J8 zict}6IBwA0jvMUWRQfaTe3P&B+pCJsyrvPOa^M;pF#kGyjjXt-iSpZnMcvd$QrU7L zzQB{=U#^)^54i$!^0J!J^EN7aAu%Bocs23KaLb<3W}-X$vF~rMuY|V{oE`YkJuqJM zj+?tjV?-aF1HA97qtc1oFWufCm!6<9{9>0=W2oJJQ(U7r>4uXc=Lr31uQHeY}cYD@0cWA63hR|#9c3`Z){eT*ka>k-ln@p4*#`bsVb6sxA@vwGOL$65@*1vx%%XQZZg*5R=3 zJJrop-9K0r-q0{V&Tf6AX9^MZC`O-FE*C-ee#FS19NT%yNK2)`7r7l50urAX>mB|= z>E2nqA2u0^g&DF3a;VEML4MQ3a)NAl!XwJAZB+3FNwihDoKtzLxVwC`w5#Lo^Y=|- zj0!7^)9dwO(U^d@2&mazPjsx1NE^ylZ-0Mc4VsQ(BtS1xs@%z;I4{qTXc8o~7Vj~U za>05?*S1UtNkWDN8;uiu#arzi+HuQMZ4=X_S$iOT4OJ9p1*)6XsX{;#j#Km1J>c!A zP6+V;k+WAL9`du2obyrsf{nyF4gup`Yf^I7wimP z>6q!-KR08nNo>5-!()#`A4J^qDVSYydX1b{iibaS;;2_OX-G*c`Oek{18r416}CmY z_sZ=YL#<;bFGIapvE4QE*|EZivcxSjO}fhLoy?f@d9Y1iw%AAXd{ymI7|3mZ$Der zV3w}(J}RzgU3;FvWvP>#+IUQq*EODKT-?O}(Dxok4Cg6{ZCy(JvzX6jHaf433a~Rk zf~Cn*Ow<#hZQQI&gx)f_G3ssd>EU2Uwgm71W+lLT_6O;;d{yqUTd@FWZ zm%HZQvGZ2}8L8zeu#ePD(^dvm#x1x_n4IgMIEHkrCW?#V&=S`=y_0JfD~O>-)u#Gt zu&j}OQY+Df)B!@t&ITL);dc1C3oP-Rpy7c*b-L$i8P8i(P1&(fiwLheJF-0 z(oCqgd*z2B`e*w(tDc*_03JG!jhAD4AD6ycsA%c!_v~b_PGoyuXLsvfXK)vBJI|vB zxWumQfE4mUu6U}>kNHpLX|!9UhIQyI0XEf<`>XPW+uefX!KmGMMs6O>!v5!WNc)sY z6<$|%uSDV|`K{wUP2-?vR_6^jpiq|1Pt6I-1=ujynJ%`0bCm~dD@iZ8`R~H$E z?CjYy<^dplWgo#qKNV>7;O%P80jsP)r(wdp0-X69A9O%-efg+ad<||hG&uA8Vk<^) zP-;5Ap^~^jD1x+w9JT;nS>jw>eA1Kl6@!hB%U***w>%Zt1^hDvQBt(0g z@|mHnmHY7(pa?UPKyk{GDk%A|2I(*iiPRNGiseFaVF1j;k_{E)Vg=6a>jt9%h=mGt z;OlQ9r!KDQldY`JIAp5}u)FFS6dX)(Xh;+$OLR!di!$pDo7i*)D|4P4m+~Qb3f(bc zCiCT-|H^vky9B#e{7MGk z|tPb+ThB`Vfsv5@uOIPurK4+ zZ5MntQj9xHZ|HV!6Fi()ruA~DK-Creyp9|sVVE`3-|>9`S8edrR)+DLMbJ#;kYGai zWGLM0(u?tR?PHn#dx&9ATWh{_jc&To_4WfRkx!8aMT_^Q^DHD6O?8Jdq7D`%FCk=h z=q~ieYt7rvj2d!egH>(`gfw41guZciYg!rg+HmY*4lEH6yZ>%6Y%KZH`TcjOgZZ;b zZYkVPJMU&H93^w@JFPn?5e%-4TkC&s)&z1wPj7$6>78s@c)@Wvp;;SFS)!0;KNWYcTA#eL%_}4=RSZm%K9A!X0wkn6zDU>ko2`?7+U>x- z-tBO*_JX=0*a6l6dk_F<1!NuqT3KN(U4IZh<^E!gi$mUi@BIx424}`M)7XrPGmT$N(3=B ztXw$go;GSnhtNF(E3#&)_+eY?AsvZ56DIm(s&ph4l5vYAK1J!%a)1O=RBiJNmw}MV zxNiNIq$qQ!pmRLJim#}8ZyR?R9Wbfio(Wl-HhtG~&lDEOA-7?dXgMnRsC{yIn?AMi z%71~4{o-V#RiEAJa@pYs{olJB`?`1F2rnlP{Kx*1*?jb@z@5i$-pIHNd&h&OEne>0 z*43+WwxFm}@Xc-nB-y8t851i#Y8kM6+|C&m$71?*kD@cz3)5yG=KlBf!1f1;9+DD} zswF~R4ST=IXBUAM{zp#>=`H7vzk8k%Xn0F5T&+-=b0`OFu&CGGOMe#g%s1EzDFZGs z+0nF+v<43s`gn97!j<(5sDYC{s{v2;t|%N~cX(AXPx5-!bct!W=Jjg%vHY_=-iNkz z9=$^qj&?mbDUI{V)s7oXnL(-)j0jyCX$l=N5dGDoNmCr{{yh7-*<+792~a6><_Fu@ z+$0nx2FprN>at2ark#;SS6)4}VvC(hRk{XeqtNzTax9&}uhDl2^;66S;H{7KQ8X7rH8{ z+8~VGY?Zl>R$NhEpdsEK3BKK-Z~Lt^qpFygRaH7RyD%s|cM`fhJ=K0*yk-jMl-;SVu&hxn;L7ucd}G|Uf!@g37-`+jVG5D#0xO4|FK9d!QylQA={1UT4p2^a_LLRs~+d_bYXGM4>_ zIFz9sb2%y0zVUt)VmgGn#k(n%jm3#pHDQUXQ@Lw@aT7^P0OPz)Z`6EWko>&Q?{&66 zpHS1l(=%eU*M=@4kv^L@;X!Ay}>r#*2pPq@Qjk@{Mp`HMRS?}<5w1$eQ7 zDW{dHZHkQI^XgTFMF*xQ}UC%1jd8UGG&`$d&n=LdZ=3Heba=M_-;Jaa(6w5 zEop*@4LEe3)1S#!ljv!nOi1ad@jvVh=dU7S7AD1|Q{t;fTEkI|9k#%(%V9wb8Zndd z2hwMLI9Ey;kpq(PM`55OA zCUk}#*VQglRExV-%5Ea9TatRG@dFxa>FK8A+F_+XJNvhA;|jS+RFTpIKrjJ%Y{c`x z@9NsifRMT|sG}S1~>KRfTVm&iDOnN$JX)Ak1BXyqMqOJ zuU#N>OfUWLpkM1biit{6lZA%#{ym-W#o^^}NM>j`l?w*Yh@tG>kR&8-BH>+vKXe@y zC;eFL-hv*!Zru#ZP+9XD$|&s1MAdk6;Xw~eIZ5L1H-3n&y3uo^*#u6T<_d`QJ>KW& z-Jj88#S*ZZYZ^Zy>sGF9qxbQO$!-{GeC~ba$a`K?pRFbmz{i6*W5s=!wVv{yG}L!Aitx^GgtWqqW*j4N4ZQ9y-|s-(5WdTnuwB7z zTrQ1w@L|bYv4ZIE8(H2M7E1ZDl&ogOg=Taf{=0N-XA_kY9LGAO-bFrM>f$d9@ulcH^unr+!VIYQgF^iXHRNO+IOxF;Z z9+FbeP%71$r+TSkF-jJPWHBN>**iG5=sloRH_)Baak|1SZ3o#4XLZMgR2bVOvPg=1 ztae~Qe00-d%zWDMw;k&u+ITgnA}i+WhFC{?KI_~E=BO#+%$D>g7U`sc z$7K8BEsf|JF$L&G{(31@}rNJSj4{j07Qjg0CE8MGz(T4$sprE~+{!v9AEJR`jks!QcaRoGwAX2x!HVgVRWBF>ssbaoBS zV5?jl^Tt;t^n=Oq#e!l2WKC9P)Ls;3cd&IgXO^iB<5Vlk?hQ}O_AbYRfl&eEFiR=X zX1V;hw}R@9<_d2j4D|C;O)U=E01CxcF(v$baZGByCiJ5s8!Yt{<&Tg#`V0@-1L&)t z)`oX=50WhozFCG?*S#C;9&A?y3cB^eff#9C+HKVMQj#Xbtdb6?yc$-GZ8R29@j}jN z+KD{8)fk)=gQiZ)nIW6m6RmNYaNV=E@oLF*HHetu)5BEjxuRo!r|Eu_R$7@}O#3#U zP1-jPY(hg9q$6t|i?%@0PfKUMJt*)0e4F{}ULif$I!dB^@*~q+_6t~8m57<|wl%p> zEl3kJmTh~XYn<(CETaA`Qpi?zio)yS5G;0(@oZn94%lgC)(v-P7dN*i)!V3rjC=nD zM1R`%cwe{Ld~&8i$Dx`%F^})r77{c}Q`L9HN&cWG@jeOCQhheMId&mfAi;G5kdF@1Oa+6V*x-xxbDbY~?(+b@wS8&+u{W zSp7RV=&O^2iG92wiNJQrSNqf?@{&h*ZddXB+G`_$S#|WCjOydnQoI3^YnicDFI#S- zj!GZSWdSE~*Oe32xyi&l#N#u10-x+yA2qF~wR_{d$FB}TH7fJjL&XBTF(OkS=WX*< z7r5NdB|O-ABpy6F6uv)aMrkyYEjI@jEe*&S z00n}b?Zj#I^%U5JXeA}E#h|vfU;s$uXY`i+I?QWLb1mu&7x|+~oYoEIEb=4HE8=Vo z0l`HO0FmDVz9PS)MSe8&M~SBs*x6B>)*gXy5#i+Y@bKX9;N^hA>^QlFg@rkP)YAUh z6cF$i&czMp^aBM1aDtpbHz8#>CpQN-=TGd7hW}TkZm_?r1cgHXYUsv>KTQ1591j;4 zALk$WpDo$JfIz3e@V^;wjpgOE;{;kGtl8bcAP+iPnm_yTw+`o_rTIZ1f`C~&!)>83 z$d9o3UwqeHejPc#iJ!CIsPaRJKUl8K<>B;%J0UosKwF;c6&}ZRhF0R|Slt*UA@;*G zurn9|wsv9%z(CdrC`>}n9tyFB(-?xl&h}6zpcv;rqW+NmA#;6kuwR=2lHlRu=3?jO zzW&qW;t}Bz5aHqeQ~K|?KV1Eu&PC#~HelGq$8~H`}M*|?>wPDV7>_E5cX0DZ#(9+}LQsU)N=NHob zQ{=xOf0qP!0j}485(58${rsNyD7t}xpdY9|YHlz<5F7vlyZq2o4&;V_U$69O+S6^WZ$1#>k(;yK5B%?_ zA5#C>?Yttq{33kU3g1xPRNkQeb!305`@`_RZecj$y361QFo5RA=p(FcoIvaVsGBq5 zdLE$tqYwsLK)-Lux!TdjoJ)kh)&q5yI z>wDk_Gr;~@0Du6&{;J~T;-=-45c~6v6S+bC%Kc@^kK%t{>yuxv_4VxCAU4j{U?(^y z;^$Wm7iYV11F+caG=)a8sv}rIbOk?L8vxF$mL2ZWQ5mmbEvAy1zD_w5RMn_Ap&p^V8QyDb1_gG?{^JL|c>ts}TLwLhuVbLpV!*?Nm zZDlRDB)|9;$`d_vPT?~YI=ovms3Nb(QmiR^;ZoUw#}yj*eqo?x?hb|&qZfuI>lYkc zBTS~*GTA$m*qtGnFdXrhk9Rt-3LcyH7SUr?&0tNhb#?WcSWAA(adPSXP(HSr^Nu7y z*pWV!zv^4H_ndq+%DBZ>IG9d+M-jg;3MRUC=Xu0Mib7sSbJMGO{*QR?jNk8zY@PS- z>Z%A|iB5TfGz-noVwNYb-ejYF*o*nvP!BnCn30gzC7y4;ctG{oyV;e|P>vx!FDTFL z?RJ3<*u-QefAyT6xAQW#rz?24!p756MG9_49!-VS8G3$xUgGE|Ze~tc?cyHh6>1gp zbar~?Gi|15Db#qw0(d@__H=MyqPnvJ$vP=1X|L1)>(r;Un?ZAs_^g*qTJk|0F%c2! zlSu_8dagqoI}DBU_?NqTPOqn(>M`zwb=a)AF?Y3mLFBUXNmq^Yq%QFC&`JjNG%S5O ztvt5dV%HF7s5k89Xeh2aL@(_<3eD*@(p3vOi!KXw{bt4{f(ff0J5?Y4+xl@&y$G^3npst2y(bc`#;dt1$kbc? z@v?OivcU(N+7xNi+{N8auO5!awJwjg5$>F#?`oFH;L}Bn!)*uXW_o&hRw_UAm6T+* z^Rox7^e51hM_jKWEt+Y|Jny4@&C*(7Tia|x+|2~C&P@^S3%=u&tJt5g>lsnfxKgKX zFF!2&R6L2+{gRpGVV~TJ;@J2{E^^#3C-fmE&CIeeFT;~fnw$rhwrxy~$k7;`?#Us=9MBYC`6T$^DX0;5TkaW+DkMjpF+&=-;kMK(_oizq- zC2KT0xyR5?B(ZZycz%9MLB~2lx;bSdIXDmyZE~BEH(0936`OU@&+YVcoX>F*X#xH# z)c&p!T&?Nv-bj+!-`ab7!k-g$~rapO|&k91BH#@qcQ>Vty0u^y_ zsKl2IK7VC$Q`fvw3hlkO|FrF6u!4fJ(T*j?0!gYl1T$ZlJ}6kK+F~KKr*^kFrO|Z8 z=kZ#js`#td!S8!|b6;VEYF%`6x{Kxn2cy#fxsz)fu%4V-Q_RfF=ru&Owzjr-LZkrA zU1@tU?#H3JTFm=Gqd5jH zArZlJK^rE%trbU?P?8kU7E`@WNy+J@8|YDeRXS}|&RnXi>{%V7ilrTEUJh1D+ARyC z4RO}lvz&9!j9sdC1az#Sc|`s)_vaHe&OAMqmCQN`O*&*$cc94Ofp#KQtn~YpyPg;8f?<@ieGR5=3 z!!M+tB-HM{Uwp6yYTV2`O;5kg36PD8uOnw4H2LB_Q0iA)RL);nSvfqKcISxv0V;?g zDb~#4efFoPiDAkRFR!NbvK{=4?tE}bu{l0&LVy3;ZN zLnXt`N)c%*L2WIbPaoRa5ZRNCkB^hN^5=N$zf?j#S?A6rCLyttd~C5em6DozcRyQ_ z`UH__+wx6yw ze)zDQ05=%y&-19Lf5lz?SYG|f@Z;b8f1tVcYwchlINZh>#`!a1^WTy;e#(C;VCw|E z_VNBVDT;rPa)G+Ixm>S_-2R`f-H81Ebwog+PXD_U^*`wN!?%QU%776NYZv(cqUb*v zc;mdf{nnlT7FE0UtZxXg4Ueb zM8?~(t4LR^5AVWY_0`w=mqdZ=`zqdNUuSEe5^Mn1LlhNwLY?&Sys--kPe*9qG~_d6 zPPheMV(!u{aFpeC4xx2Q7tM!abbx)BL{4{sGq4UCsMmwe^TAEFiX74Y6i-dcnaZ)* zeBPzE>Y-}e+7X0HkP)oM`mA$#e)$_^iE)9+%gKj(d$!=mbIo$cuJs^p!Vf)hql&@ z?-%_ZCX0G+yHakYiP|O(Q9gl@&gqwu*(KMc^;V>>fKIF&zG6#0WIPE|v~4wX**(7; z*XRD2^<;4UqRzafBx7Ul+&=2r136;*p-f(3)RqG40A~N5rGX;i!_7~Tu)-RysQjv!>K%M2TOP&hB{(xvA`os0nDyr%c#Hvf`AEBzB*t6F zvckczVa-8;P|L4TsM3#TE{uvwjU+8}AE(DThnswV@yx5nU=W-@9eR)ggecD6Ph`2J zCSLn)tXez2a!zBf=8J>&CVR)mNR{^_2PG+m-o;7g zV=Y!DzN6_eM{|}>2kCLk2Ayj%j-24+FtAFKn4@eS zaauJ%z-Ib%7m&dCxF6F)JjE}2h~O4N3$o&M*L0uI>ncgEe}_(@GiK7bAo3O;bMsVC zN8n7_Yqj<@`Ddzy2GVOv+SDr@Wnu-{)DKk!5MNaciEQuoOy>P@{at!JtOX z)oC^neTUSfJ*nbpBPHm0aT}YwI6|B^3|qtuEUScM&U!I|SexX_^gr*6?R}rA~aFk4`p|Ws#Z^pZ0LmMI?wSAY0`^rbT@nYH1B};|Go1 zQIl{iu@rbWqxQ7;v&pA4om^K6{N(C%pSjMr1Z207Bs_Cx{X*E^?7=QqUO%9tdpe8S zCXE#(~1k1$tfKVQ+Ic~f{AI>FaF&WVF;Y9EHB=>}FX8$8xkduC+L!Qv-#ii|DE zQEYA#OD%6~Sgge)H`j8^>+Z7}_R?gbP3Dj_NG(@t_JQ{%oZ2H?GokCqQtmNw0OP6J z9jj3eMU&8y6jmCaiZtnT@U@^nRj= z!n9LEI^+7J?ra>LJ7gs@+J@P4WbEbpiG&9^WOAC}NhMK64Okh;tPwJ=4#j=Vk zudaORL^u}GJxRGjA=dqA27TMhGOxh9lhnD)qS4dPcZQ9-7^O7GO7Wzi6LQ;~PLzM1 zSae$z>r>fXyCm9A6+5oGc?-rd7n#0_L&=aQGu=H^?hCB|a@q7yv+~O}L+-?keJa+F zR?LPAtef9kmbF!ETQnpjUD}_&xBoOhlU)BOsLSg~vny*TaQ<~t;d)cBCUIV)orc(d z-#0w?`nZXCs_pz8b)SGUB)c!wbU9K>ugajD=5q#a6o#{+G$H$+DXg7`8H5UE{l^ ze0n}noR3DgIGX$&3%E6(wDxiElo79v3A5c5dXacb#Vfp}_;k241Y5(C#ywTM$bp-@ zB5$GrbtX}b%T*V@MJivWVlg;tvsS~TEaXb-w50W_GJKR= zQ#+nRGg|{dUMcbhU`kJp+=4&5W7EW+jUYfc!0etEe~kZZQC6%^bm^+wF5{n2#O+p2 z#`8#Wk8NS^x%^TyL@fAKQ0lFkS}7sJuM_gg3;9B~TbTxHxq#)Fcoio0T%mUI?DeU8 zZ6N?scbaUWbuGWkRvEs_wN-6bVZ=A~NHDc6y~^U{8Q3Bm`sQ+r@@A+KZ!rPwk&%#? zuXlyDRFP4Lk^cSZp6l`YE&Y7f=cm-qA^!cy%gtjvzmod(*WVuM`A@;$kG0$!Uipr`*p6pZ;?{{g+%Z z<#mhK+f+BZ>p!J_w)VRpdgJWmvd`-}9y z{m>f^_E*Au_}`>|_hKce`Q(!2bN#{@V~R%c*MWbeYXGZ6%BcF6xmM=N zRb&bxVzi8OEHGq%Vn8>b6_5wRM8rU3Z)63-!$U7)YG>|ZLB#yejS{_>rHzZJ6TO&? zp^K@AsjUZ_Jfve3ru@?ef$7!H@_2buyjI;CG^oa&%!T}!Mn6h)KS^HVe~H77nBH9(*iDvFS>T(ku+f|Q7ME&R=}a^bD^iC z?zyC-k!)Rk4b%)7nY$BMkP#pz!Q-?Sa5vpml-{c^FeWlmC^>f1-c$5A$!@{|%U#nErkJ zpLeYPQ5?4ahvLMlNk?xn!1aErzjfDFn2x%E5Z6CaKed|XhnKYVQsxM~F7)YZ`jMlW zP70~vXy+BrHj*s|e$o6$g!;QR>(YnoO|I5GECzq&_^CfUcX8;1LM*~Bd=l8!>K}DQ zC*~hNZ%%^Q`7I?cFw0EL@t>K04GfT3jlMf(ER`?YP~1`f4jL|*T}3?bL7%mjFA^qv z%|$Zm{n={8!j5LPHePB?PnQJ1&B;@_nNoFSBtB$>)$-5bz%gpepl%hzr>DCH3e<2D z;s=Ew2{}~AH9Zd${YeqWg3HdvJF^CDO25M%%gdZxz@`Nn3vzoGU}ah2n?wq6#^4Pl zX&pn#Dj) zuNnzTdf0tUUX9I_USxelE5TGk;wT&+Ipk7=cR1=&`V4N2%&s* zqPZQwq-K&J%^&KS1&7arX6`270LL(s_RB`!W}cbD)?JkIXCM&Ym`?Je(VCoe&r%AdQ8ISb=U6F z4KA%n>s7$Ye(hZ6%4O{^qZVRqZiE(0+BP?{$gMzF5Ff&5QpaT$8I!e@o^YePbtyE} zw3C6G3#$ixLLeB@6GSv8vw=NK(v0*KLAxgR40RMgiv6JUsC`GC#XHs8UvOl`zWzM# zX_1E|ii-+^hS3j_t%3xH&yiUv-;5?e+6>$YC(?!oS!QM`*p^1na|18Do!w*0p$u{0 zZY`JBP+Z`{!^JT!G{D$Mf2`GYN(T7gD6)a`nwUU@@=sT?qD=}0&kj6Krr+>k;QpLd zlj$8w*yf>3ieqg;g5jhpFP$Blv!NbM6TIc|xj>CeEVt-s8_~}}mUw7N&;et!O!gb}6feHAx^oX>Y}V~(E5t=Ea0T`VVqP-4X&KlrAhs9E@ERIE`hkNfsFENxc_qCa4C@|yaNgp zc%BRP6Qy}*JFF@sjP8;a2d18Bw<2~qJpF>!_tz3CA}1-su!*{hf{_|=}fXD;(|SBQ=tlngq~~} zvPMXhY)^Y`|LpVg67@UmgkYfAPkUA~JE{{e3@M|qgRIewTbOPOo=GQR3%Q03a?N@5 zb}j#5qUK4*i_UCYvQGjOZtb5wMK?cVSrXCGzOaU9ZreNkI=#8b_&&_mSn4h@Oh$z( z8)zMbh7ilqkE!7GI49)dBatL{g7KvAxGJk)vK$fo%&)RImGr6_vg}Ua!d+f2=)tjU zCDvcMpc+G_lbS>$Bty=D=8Rr6sGoYYR%~^2Q^3O@=7U~TPPD$p6iS40mgmL`K?Ym| zBP)>TgE`sa{UGJ`1-*z)v(<~y*Yt;p@@wQE4|RZw3uYp~c(1|KjJF4EUr|@|`Dsp_ zhD7gpsH>awMunC-E#5?P-fFm042$E=)9|5xW{t3K?;!ubjqMUm$!HpOq~6)OJ5B@fuFe6L_G>qy zwva%)u&qYqB!L|=fBu$o(&xe($3akj_jsww%G)YgHB8@+)9c&hAphQ1O!tdyPT%+U zCxCic--5U6$HV33+mD%wd(?d3(5HM^UEWLa^!aysd=&y>F<; z@o)ZZB|FUOdHG%42H=x$x6e0gXSY|IV5us4o8zMLWB>cr7J4%wBa=zZHt)fa)oX6T ze3eLOGXyi9CXw z54;EM4==zX*E^7+QiMrf7f#4d|0%hb+!T=ixdh$Z%^Y|{UArKS5*gBp*U_{ESveJ- z(%m;)?KLa!gj&xFktm9bgnbX5tTvOW*G6Fa{CuUg5>!99cM-Bf&RP`~gXy?_93QV% zXqVd+kji=3q?l_NIO5(sXf|x-ZnB6bp+u^&XAO!1S3{VHj8@-l&K~Q~30}t$$-M^A zXwquqqZcl!$^(oJ!E?$NqQc8NJ)i?%I|X!upoVI(g5t+a>BUzsgz+lzRRB(pWPvVR z9qPxx?KO{sA}zMFHMY;ooSuqnt!_hAj*5>f=ccIp6_&n96>iudC8Py5RYZ)mRN4=z zg@*bWP0`PZM^!sPkN)@xV}f3#iY0+YiwbVu<{;V=dL1z5E%=)t!9U9TG2JUg_BEyApJSG2sh0zP!QG$^pHgQNe2ybFB?Xco_gwqcIRD;1O{zq;JLY8`fcn_+Zntu5$nbaZym6ETr z%EGi@DfxU<;CIUNA|aX%zRIQ4J7PKGd$CxV>M<~vRkH^8hTxfU#*MkWacvm0CIZiL zRBL}i;G=^QeYYn1qhr9}Rvg!nyG{6(pxO&L2r=eVV{j8q9dsl82?c~l>38>*of({6 z&<5p-Xh9`*R!byG0NO0~5l(S#Bxk&OONkWQxM$?q0*vq)zuu%To_h33K~4*AX*fE$ z_?0qnX8GTN-X4MduXm863{uL5W=E^l7go7(S8a_y*ea7J&34o<7q<0T%X>g9kcVB{ z{r{Y+@5?eCYglnjoJB@Dj23DVj=usNZobs0Zr-#44#XZ@o%sKzN4u8#gRAn4{hoOq zJm{&&f*pwM-GQJ`eok%@!9jN{4DPd})*2%m1#r;gLSiqr&;vSYvXDI&?ON7qKfH=C zlVYbbiFpFB{T(6|Wi?Rv)HIQx)vL_$FWqX;3@&}CRs^^hl9Yy8X6LP=%2H#fbm{U? zyw-qrO;wG6#NsmL1*X^ex$bbMNU9dzfhujpLAIl-Mfs2l6Ego9huX6GuB$|mLQe8@ z&?R(7tj4K=HykdrU;KH?Zl_LCR0Ttq$pX3X1eQ&@dEk9#1OZKueA+{i@o}%jmP#WlBz3BSe$h(kTC z+Z6t&CH~;8YOfD)oFTOlS(kW2OuefXfe*cEbTV9WOR16vR0@b54&DZ6lgr$r&)JZ(8y5nOYZs_Yi?IFeL zMEFopHDgV>z@9GMi_&0exDPZ_18tbmHr#e&(RZ;(;A(L&<^s8p*{$hrs4%fR{)S^B zG;m#dx)(`f3Nb>#cD>U>a;u+fVBl)W$|#?kmitTjBD4y>!6JppSheB%+2So)t|^03 zEmG+bEz=5ob_hT$XZHiVsbPQM>$1Gel6&z8>(t&)EE3+kYWVx8sP!w31o@Lx1O4t3P;%B&jbocwAFpso8 zlf}>ig}18HCyT7$7&~t23~Ur6;EYBJEEM1T_u;Gi`ft)QA=n_?y zJ5<0xj61x|*1iZ*1?&IMF-zcAYE6*SeE*_Xw8n?0G}lb3M9jF%9O~-7!># z<4!BHLdtB8MsM=z`bcjDBSsOg670l=daP|ke$cvUYU6E4C=9($>eo#*v3>wNaX|yx|bEX88>vyO)p3_~nkr50Zap^Y(YP?e2`!E$|`p zJ+QqcxJTw^j!pL+{@OU`TI>r&ho<>28sdM7gMUQ?69W_T|F0rg{!>N#yK(;CR78!s zboAyw!uRx_{SryNs0@4{fkUpKjW&=VZRew~IrOH)zwa@@hOD8{S_?#ubk?HRJ~zs$ z;JxX6oARsuOl#9cjeRyR3lVX;uDLGrv@Q$a2}<1B2|Z9a^RE1OVuCX_{XV&f;M2Fv zUE;k)1<*I}-nw(RXcN@y&o5LXg%q6Ec4+^5|7FLV%O0;@+8n+@o3T-`me)sby%sg1 zu?jt@mg^?=svWY0EMtb=A6O4$J~f09=C>J{T^~P1-KQ|GajeQf6eHdfj!O9?73vNN zMV1jzkCiYH(oj8IXbq;zBkHv)u za6w5LGg?8Gy|l!>O$JHt`I1s<8pKgjbB>yqcShrczztzK04JNmM^zVRog3vc5e(ld z+b^;M;NXM~!o!a*h7N8Bct|mwCuFo-7Em|U%AiBrU==dtRv(yv4!uW1d zU51J;Izz{4INOMPC5ub4rxtuY*xp$7|6U z0%nL6jo+?DwNXA@F1l88(L3#Q-7Z!rAH-0Zx`o zC^~03vJe8mXFrNL?$j@%=I|qFi6Rmy1S)RkibFxGI)}xsL3#LUcek(q3CcaC(DyBLmM=;#ESP4OVH$p_Dq1|4cITsvPQKm3bV z7o2-;2OZ`ri;l*0ue3c{&)`=Ju7XPx-blXk%L6Gn)VK`$YXXS1Cwz6N2o2n$t;_|x z4)m|MvCA17pH`hM8B|(sWGqxRH=z*T4@iV{)?pvR!YhLAvO|0@)5TEIYso$?S`K=A zj3#wJhI-R2y5ugBPs|{p~>m zK9vi)quafG-QC^VYTA04~mH1>ewDv2RY!nYSa6}oSqGMCOkBsS#P&|o_LHEKLM@R?mx|IH#>gz zJq^Ld)*%GA-s95LbvV7t!`<$GgaZ|~KG}Anq!2Dt;sIrZA_P4xba(0K;0eNEi} zBH9^~kB;rp=+v_NBIsqpum9=n>va*uEM3PsF^yg zy1I07d4XFhYoB61Wn*Rcht+##Yo*om`jMLpGvM#;cZT;pAL85HO~DPQ9Z*!?=%;13 zzm^4Ut~pzP!2ZPn)kF;aPuVzr0Fnn#OaKuFC{4fh9+(BVd;oSn>K3F~u=@aTKIG=! zW&i~699%94@fj%86o}hc0Ph}&11A=cKTw$fT65s8AgZ4n>=`Iq0=-|@BAbKyJyx$2 zd}cplzhgTx9hjv~ZZHZ%+-`T52gsUW^V{M4?G8z>wGVi0Hh6Es5*)EaOvxXhl_ zUGjnF)&h|Rcy0*$z-$1R*TA+*8UeK((DR<>9iI)L#H~K|UE!H$E#mfruNi3Pg=74E;PwW6vQciA0h$M(51Nt~1-+2SdhR_#)pBfO~Z}Rx${9+EK!tg)GZ~)EKjz8G(M&W^s8-URW zyc&!1oP|mWX@A*@a-45=*k8`K%fbxaccIe)|+XwVF;Mn7nw-fuCl8%;7^$XMv7SSgk z<2TS`KY2a64rFh*_%rJr*BcE_xXRmv`#F0CZU*zP{b4VB@SpZ;{I`qHw{`bJMJ}+B zyBFXeDH61M^`*i0JEnGwn=r(F#y8|Is0In4@3Y+s#S7buHWyX^+T~rcO@H(*E|By9 z7Y_*g;m!}+&rVrC?jEg0sA0yC{u6NTUul*2%=;JLC%O-OSICwuzS%8J4%N4AhguFW z4jI!XM}8aN**(2C*yeqTa zA6Djc&2gT|n%_P}caKKe_ih61V9}fCz|aZctQmf_gGATr;@KWbyBhbH3z$# z{CtXh^St+6Ae8MeldyBl0I$>?84(K}JZTJpIJ23XaZ2&oj3IWAdu-*1Tt?IrMy zISmcIFm@XpZXeZXj@Xdcmi`XvfXOWod9&sasVQSa>yw`r`kT)-Kz4?HR^}sv?~2|I ziMHQ#_ImdFgTyv8dd{3d${)5jfK5?0LiO!}-jc=__mK+dOg$gLHk@J(cgc3ib~s%S zzX{WC>PnO!@|Q2npMg;iwObLygDk(Wm7*>|%pB91z~}beJhR%-Z(jUu@X3nTvz|Rf z6`*hY+(1Nw+I!_SDad(rO2oWjJa-VU0gfw3-#b4d0Oo#QKO@k-@=~$`!NS2jjwqK# zu;{Kl6?Ct7g&?~n2^d^W@Vg)PNghI|Ve57O!(iA~24-!){Ws*vU;Y7|KKLJO9Y|50CbLdO^r$P=V;so{R~9*xG)k)7`sI-F)CSdu)#w zxjnV$4CdEE?q2N-P?PR$=$$Yqn^D``xKmFGUP$L1$SCzgdYyRFC7$1?yC9d*h(Y8$ zZt3XuG&}HWXoNI+2rEIM!(|MAx3ze{DhK3BacKJNVI4hghEOU^7E;NO^U+Blb>6;w0g5iraZ zeKmx9;V{thet+cSRMXfEWxtZu=NU8HVuR_K_5GfVT`Xf=T0OS5u5@0noQRU)N|hO! zG@h5>K!bZDn?I#}Y}b_w-!@~+iU|^|TeMoD&Nar)6hb1^0%`IZo_DyV#7CI=lT7;D zFXdx!EDGr*F6v{kQnDHo)iYswP@+EZHc|C6nd)>d^*)%YfP^a`%tYJ@HZ-5d206so zZX<|E=ikIRM;jMMbL>{aQ=Q`4{#)`5qG7n9RueC@$7u4by5=%W%PZ^t5W#9mHn5at zc^r(Rd}Xf?B32Z=;s3sa5oV^ed3)4fat!zpRC8P9W(~k1ne0pX%={sPew= zZx0h2Fx@N`rc3v!_JC>E8Y&Rg1-5LS$3N3szv8q27EZV2zDf~2Eiq4u3=V2os)2kC z8xK-*cif+VJxxh+;-qTPbt}*(wp28rBM(<}Y>CibK=0pGkxrtq9+g%_c8F^toc;?NEUUv*cbl^Ln@~<) zlWVt?VXoCcGkuL|iF>`xHkz&?b!JtMgIzPI1hpL?evWig(E%*ul}>y43-XQ-H51)J zbC(-Zo^@+P(ODVuSZuol#YuUhh~Zn$Z-2aap@eL07CVPR(A zLz==p!Zf2%!BrrINLXBAu8O+CzO+5c0Dd(dzcz1|72fSPl9ho@QjALz8?0`_=?u_o zNMs-6Z=^#pgdQg-h9|6#ePoz&P9+Zl5QxtNs&I@{{LjhU4*4}Mv$ z_IAgNXG6Rk>z+ch{p-0u9^Dm}SQ5(Pvs+SZJF(oV{kU?YqoIz)ZKwD$!35&OAIPmGCFcw8m2!ZXYeH6P|14l0V$cu=y7Jx)A{^N`^@^S3Y| z@9ow|BopA@0LVqdc2$*)QXQ32zx!j?B{-1ABvaY4mIs~Y%$fjF+Nxw2*ZTo^#w&)! zc~vN`dIPAr=~*5PR+3{EkT7Ci>6~d@91;~8 za>LfxmpX2ko#ERR_$W7&pL|{`_ucQjPl@}hgPKq76E=g35ttl-x5r-Ze0B+&C0?nY z4f}9qCB$W2_==T>8X675%1+8HRv4Kz7k9Km(JEE-2o00nlO3a9?H7*ESbw{%RK7`` z#9gGk)ol0Wosb+TI7yvCUc@*vH|4YiM$E`;S+gEW(O2+SkS|BoHmqF#CWSp|+>;V; zW&3)K$uuG!bC&Yx7R>A1gxw@09`5YhD!T6&1ZUZB+jQBcTvrb>jRD~Jr;6bEvi@e2 zf$5#xQ`{AOQRN=z&1+lMN9XHO6K64bY3^2(1?bI1dtJm3Tu4f*v@<`;?v%2H79M_s zf?lJ3!w-tc`ym9Y!4e65Z-0Z{FCfBEf=%qFTY`AjWKUh*%_LJ{PCJ*xkp1aWaZaC+U0Ev0>{L;v zV%4mh&}Ovd7B$ujcSjmcfj_|f?wqd9nX`?}88(S?(o|M0nZ`*POk^N8d0BOs&diy- zk@%?Q_q6zX>d*Uemxao`uNgqwQQp5QpQt! zM)TC___Q)}nKlmNRA<%er|XMgxu`aLo8+f#K>5pW`89jjnfLgIxU{(Fq9_hCdsLUc zQ~qt&-KXMb!Eq)PPf_q84UpQSNfxi3;$&Z)GMlSAL6WFM0F~lYq&RN6em;)##U2RE z5%7_bHKd)v9n^@g!s4a0=3C!T-gZ%o!vw*8m zsEYAjYEcj&!iRKEVBN2G#b8bv-mXbxcNj;R5p!=S{C0A@JPyW0u9?meNxr@Qp)CcY z>5N;P>-U_Bc7n%)9JrJ5VkCE$waMp?fPkQr4$ z*_}X5`rJON>~SmST+C@t_8kgNdeUMlO-5)fTDK6>%D~a% z?}1l1fe$jg10k&4`x0{if@`=}un3T^;Im-ZjBD5;Op-w`jH+g--L17L6wD<&NJ>te z$1bM$jCCE$bMKX zvYz|V_m6kc9(ahMOb|$q6dVDesA(Q%Vzai>A)i4pnabkJ4Lg;+l>^i(3ak*Ko)l?v_Ln;= zeFQ$dPgVVp1Mw(%b9rEV(0*xi891oCk@lo*6mEcR3wBlud>8mmNZzibE@duI79!S? zg+>C`gVCQhknZqCO&J31Kg=g`SBlq){J;Dt?sD=+&{joJYa-(+(N$MRYvs2p{HY!C zFO)A(b;R9NTsVAjA2rr>acU?#4%c>*)){&5GO>?>z*5*)1#2ZDq?6Z zng{fR@d4@snPLX4*0CKqmH7xBA`_vmVxL4INK&xIMHG%W&;-fQ5YxaA2<~6*1Dm4y z{}2_HP#VrB$scyOmP0uvLgg*KeR&iKVU~qD7LDhIlUiOREe{9~l`m?zaKVeIPJrEv zpuWkQk9tGoGx)i6tEfexV+Yj~GUicYY0j9Z@Fc|E6A;1ZA?_8%KvFw_fzrU$I4GMe zbKXerOCNSnZZE<^3h)y_=8!mm#VU|whPwh*3|H&D*P2HE8W@mPT%X@W0{j>R>hr55 zAr}U^P~*V}B^mzFT-GMWDlR9gisl3p7d(SqU8JizCR!ZJ?`V7}3T~=;G#;|CUWue& za~+RTCsUBpdqfHo%^ciTGZc6y3r#X5=GZcC=;U88%6!C`W4z`j!NB@vW6D7Yed6K- z4q|NQcit{V9@!c=cLfXL?U}z~9qo!Y&`AKM5OgpAZK3wdzUv!puv7QwHcdhFL5^ED~Qp3~(aa;$M+km)UT1*Vr~X z4Auo}+;0R4c`>b9=s|7o!Se5KXmZPIYOd`ryrA35rK+_x%O_?-X16d^8`1(&A!JTq za?}7!$`XWP#PS;WMgXy3(INc{lmgjMX#|AyDK5bfI~WSJSY0qV2#RC?%QJu)g!Fd{ zA&Ln(Zd*R>75oM66MIH&o2{eG{auC`@I0YOsyM^Rw#Vq*)0AMW5cGDv61Ki+z`cjs z=J#&`w`8V~LCv~-1 z^X;#tgqVJ9w|TQWi_+b=TGh=zkOXbiW0S6&9Xz9_UiT3uPB|SrI{J1Tqoj^~G{=HE zxYG?q9m$+5nZZ48{gHU8Bb!Eg04&pl*dL84T$|@d#=2fs1&l|C5z3xy7!{ETbCYiL zX#%A3>H{6Mm$A>oX9H^v zHY{R+8A!s6;J>tO)-~*3BJo8;hVKnf_qY`&%9gtCM<9&(_^FB`G6sz;oH(e`5ICv2 zAepLz9X$>3jILwL?RY&T7=!~o9Efr$*|z3I(3?_K8mvSyNs=!Pf{zp=%T)(jM|-zh z6`Rjl(V1bN%{ruHXD#~ds>Jl?)ymtZDjD8%awCAX4lKS}TFKzq(OYSsIU9VUL*Vi6 zInb0W-dGLlXfc z%Kb#zRGO*ytv5}-E~Od3@b)l~DA_`Dn+~H|1tPGFi=~GiMNKJ7%%&vvc@uLPlaH3l zm4-h%sQp~4rf0NWA__dPSo9b-w;1+JKwL*M2B#9EdY8LGXzom0y8J9YI{KVwPxzfshmlc~O zySvO&xohkr_n7@ddqVpek59PH@05+wSJ>C6T~i<9#$;Euc+#BC$&spiIG19Y)0ES7 z)g?N!FEV!HWR+7L=k$w5draKPOp6_2b(}iYW}Xef$cIx*bzCdZ@!D+=`4pJKiJ+_! z2)xe|>sO6CoS*Uv@QXh86wOrD6!%oKC!ABG<_O_2Na1gUD3!W)d6B|LQJw{~IYG_V zYJsddgl62HpdC@dqCO%5PT$e}9*sb%{p6QL_`}E40&D)wA_aEZ9EMnf7h~Z;p=oidro1^twN(n za~owDQ`fG_)toj^mV*do_{>m| zY_%YKD=jcuPwgg)2TDj$Rry(?k&^YbAabm7bP^R#ru6iE!`ZCMlpX^Xf>G@i$Wm(s znM9u8diCYcxzm$gecp>C?%z(!)@?eEUedjNUQO(&&?m;O(;b|e&9BO9j_War>@bi& zDjZ&a3H83?2g@LD^*QhGru;v~TCgoQ1_#|4sj>&2rVj|30wGPKug-?4$EYCT@ftyG z!QDZM^9;i-_u=w`KI>mZs7wjcK|P$lK(Y3`3;^OlUs=`R5THuLW91&Sg$!kHh(7N+ z>&2_a`ze!HZU!vfvjVu;FNc&+^73wW-N4Kti$cMLTa-h|keDgBGR)t+Ckp8ErdJu4 z^5U2(f0*l4nb>vo1bSN7STUVK%@+8*uC`_Zwdi3&6*Pz8&)Qy7qxA^?0ATltE`;1< z4r3c5G6ou1m$|Wcx-$UEXaXQtAw3RQH^CId(W)U=j|K^P%`pyl&{GvS0+|N3p`pg6 zs#*~lkJpTwpcR|I-Xhg)9XY9Q7@{G}?hX53I* zMQJvM!X6B60kk|>Tt{vsx2R-?=Ct&*_#P$bz={%FZjPV~Nse?Us`YW5px2+^KZZ#o zQD90=k9j#yE5xXPDx~FeZuu1{DsbZqF4yD4RTc>-6L@(Wy% zez%v!F8`$&RP;CiAMPpr_!R@X$-d2H?3cG$t!{oa=u)LqQR*}OC#p)j=3O(i(-Jru zvQ(bI@n)s~`Q`Mts0obOIADbGb#j+%kT~5gNE~ z9T(Vu87rJFbh?pZGUw_iIu_?DY{ZU<&k-N*W&}Vq(jCX>@)OZVep1s9u6dY;`8Z?u zjBBjNO%O>E=rNUrUF0GT!fdpo*-j*n_&ct7R^v!_YiiVLSaug`PHH;L@W4C1tPp9qfkxzyGvorcqRgq>Zcb0p4vN;C@?>ZIKu5d(@~e38yKtGDr=o0 z&4x+!u)xL?co)*+9h{jS1+oRn26Guh7m_Hb5!pUcoh-`c%T$QCVj*D*fJr{BgZ6`N)+GdT*(6Pa>%@fS= ze@0s)Xn#Cioepc6^lDB;_VQpimz-Ihoo!iVU7gElm#dez3OaRtyGH8A+_K=`anxA~ z^?G4UaFrTN(lR7lL>hQ1C#;KbjKDdFyDpr9T9uIZ%u;eZq}H zjgy0=xZOAs4$bm_LKD&_S;pYYi3MNDAd@NoM3XTMjTslSR-j5|T)_uY=cr{(tMx#w z8u=g((l?$x5*@+9hlL3@<8h%11ruX=A+rJ_XfT4l7=9zyruN*p^adqAdnR5UL2yd# z?O`LhIVD(U?mWd(0TAbNX5&WD^@=!9r8d)fGp@69IJQY*UfJUi_nI7y^%~$t77sH- zpx2ZnoZV`7Pz|P7Tb5fQRPU__NRax@#BJn~F#{W>u7Js#2Fe}<{PT0iy#;9V&<*LT z7(KycCj7FO8sG^)#BtEdaO9wL(~Sk3q6@i#{X%0|UGc401cUmdXJSau-xigI=4dF_ z6@7cfh6tsnn6#2|l2|jlg@@L#ZwZWS94#NLcr;iQld2qRM>=3mEB~6goI~&yP`SjL ztICeQj%Zz{!A9)rWf~1_1(~O}9E}5B4X*JBg_`=Xt8-fq#O$xG`Du06uwaT@I8q4k zI}H7LMvGf-V6$hJSDHYH|rR=?0Y&Z3g17-26WZmzau+UOxZe2I8L&# z`-<*XY@adYRuw)49^DP(gPG^E@|uFi*xc`5x7=dD9?q!ND~w#T)6}atTDSlwoXIO5vWW7^lIcqrQxkn2rTnsnTtgo#%AR$<%C9Bkv*Pm9d#cwHaMJI2Gk)kF_>t zY@1UpmM86)4Z1p*yEQipZXKOW(bOwV*6p#GuC=Z=@T%J9HCJkORUcl{u^YI$t6gp0 zwU}+ixB0jG;XLjow-Z;DZ)|PikNA)7c-}gQ9kEP8|hQsaPS7Oz6=gYVbHu(?x5y zW)_`ia9b_lY?nr`U&S5KSZ%*I80{LiiN%haC)||ASYMB{XRwM(*KU1 zKI|$Z&}i`Nw4<=(d<7B=TSYHJ7t(7NDrVKrOQSFbqvipMEr0)UjeN0rmjBRtap%AvbL-U*XMF-fi8ddRcY>Y zF)Lfd6Bepx%L-u;iDc6Dz+t9Gn}M+7fBn_+@m2Js%DxFGP@p_S+~OH1$N`@iyE0*8ota3|shwOkFZfQd zlXWe_pLmh;uIriQv)K)&KWb*AU%d!tq{oHU_|=JRR#&nP12kF*40q9-98V<~r{n9U z0n6P|ufAD^zjCvfJI}Ns+!~F?M25GvcGm(6VNE5KZcN}=v6nk&$IjK%1REPmmA-T8 zAR0S2w&iU%lC;4z3=kTRpHefxN-LQjUStXGTYyYraD^+D)|+CnT%Yow-puNa?2W`O zgj|GNpjgPxCXgXXXie2VjQ%tHRrm&q#~vPR)G5ZR-6Qgi^lkFq%i{jampo1cIReFT z)0%wwFge{~^$}F3WaO>Bz(FUhgivA z6K4w6P-d!DL)XqK)AzHHV{3C+?$;4q2e;2fvSObbeS)lOMu?ByAVRj+WA2sjH;O)x zVJF%#4~rwMn^s;zxo@?VGlV9aN9-c@wHfrEK&Ym+fOw z#oXtPz@t+iyBxH7X*qqBx>aKHB{R_OvH}2Dpd>?NX^bQrV`&F)s0gmJ6HpZJ8YYn$ zFE!Enz4`TXosKUtOqniG%7^JJP=h9tIr2`!AXB6vFJ0XLb;xhSx`8IJ&T0-S=8rUi zw)GB^M*mcV5&X?XeOF7$7>TTEkWne*t;l{#po6pWK^P)vZ$ZV3z(qaZo8`f@-7Ad; zs_NfgS5uAF!mJA|OC$J3zgSe>_UU2$-}b$$cpNaAg(+<4NSJZa<&{yFe2KvPXig16 zEbxp%-p0g8T-1~gt58qhP9kEW+1)+x69bm^;YC4wz-IQkeVWRlQ}2!IMcJwtBe`-A zT7MU;R<;@#%>T&9sn3~Qupnm56Um89qcOmmA!EvA$Y*Lg z+rPEoE0+pU9E zzzHQRpS*<#8hfvPG(6L*O?Z_Ie}TvPq4PBw~p#rm|~j;kXHUF73M)oW_C8gOcoZ7xqk z>V|q)VU_i1R`f_cE|GJ?$W5bkwR5L}fbL`0U8S*)80iZ!nPAsNb<(>g0X3$rOu+^U zTnB!_JXEZFNvbF4cBa9SD&*9<$<4%p}Ml%qT z07OqdB3!Vd14uRqwG&XFd9CaAiBJw5$3ajnV|l8qxdxO*Ao@BSO%vSakv&&fuWI8O z{L?@7D%_L&(`)t(Arbk!N4KL-xBj2sW#akz{XvukfC42z|FYQ^W%4<3aXsPk~z(8)H=BF^vgIOcdfU6F#Cx){N)l$-m#ei z1|ON0umqbeR(`S=dOu(M!Y_x21%B?{9Qdtv&z{=qyf1GZrAurIzfsml@l5iB4I4WV zocclI0oH-)7)UnN*X5!u1+2~oNCjJrPk0fDcPY6#2#XO;geSLDXB-er8ojAyP1wIq zhw_sqqiu3+QfiD(8#duwD3PL6AgD=b1JlNSpfID4NXnU;G@Xm~_s3`w{X^CvcyFCa z#%~`xa+3PCPQ#S?ubjDy0~YuDmEl4Qxl}!4@->pBh9@_8=-E$1_y8n3CEfBiQ_$FJ z>Fep()7cYq*m-B{f7~+m$(dQW7tQUd2BMrtty@)9(j!9Y-DYw zyiEwh$JwLo^W4AtXeLZJix}QQZKdy|cG6E!&+^=C4%YEg;M8H)0@`f@c>YV>h;xTj z8gGS<8D>x~GsqlZDCTpm4FE?_s}*#ex<1{ojvmCxsEz_UK_}`mxOhT$Qpf2C3~R{g zdPA>GhBRJ~X+)|GlzbWk1c!Z%zoJf&(r{ss@`})dlsOP_{ps$JO#BVFBe*DVl%Wg}_nv7n+oI460mp6$> zG*qHWgN$Uutu!Z>!xiPw7sG%-u}g_tpfb?`H1DT9Y%L*&79LhkXHoS|NM&%MgtX{z!61`b(3Urh z6@PowmZzf@QvC3!B~SO6NOAb6DNj4Br1w>wGZ0r~4{6tm#<3sb)*KZ~1O| zH*=f)cE|4A(Dd6{cDLQxalie3$DWQc`WSP>e#G%s_N}%P%TF#pwfxL-w@b8E2{}u( zZ#nZM-&)=11~#f%YIOr=)7NX!RA#e9#Sey{DMVzPMcYVnS!2>Pj)V?`UI|g5F}PRO zcf|)KXd00YNUxBnx6-9bj<1x+C8pt4*h+lWtt3>awbKGEV~{_}=h!_>uxX5{khRWM zb=nC#or6x~d>Q=$us}t%g9dy`&2r8Ka6uwrX#XLV!O+Ev(>!RWGO_~;zfGClnUM^Y z$>mej;3Bvv6X=j<;mE9eM9nrq%iRj5F9o-@>&n%ah@57zIEGJjkG}`QP{q6^5 z!C4ie4H|5Hws&omji?6ZJ&mxjB13gjsFQ+#5-3DX2Gx@MD87?gzijz&cs&M;>Vt%4 zzl;->su*U+2Tlv|ehh5m0~ipUK8x9_Fg_VCKJf{O9&f}fLO6?ed=myvJxyIlNZ26i z=^i*c-a|s=j=UTCI7I4%t4=!9FF4hwOuaX>Ev;(_<~(I~2V}yb%8IIrYz4*62zP{2 zq4MyO&>|1?)O$UkE!QrBnXpj=)0jpN=uEbIz-948B5Zcd^1#KBr5?CsX<3~cU+%64 z^D0_J*w&h>mQj;Pyqk1`2hL9~@PLJ}1tMs%H+dA6U$P8;oy0Gh6Xi1r=4|J@RV`J8f21>YYhFI`Y*qH*-^2N_?{wewy3DXDyGzZmbNU94TEcmYQRHZf zQR(_F>tFrtrIpnVM`)&MwXeb#xB~6mdc)qOGY4)MSvK?hEmd8iOmO;+Ia!;HW-%`K zs?bUu$Fn>F@{pEqR@W0OkQe3(%Y|J=`pyKbPc+uIC6*_yHeQ{$mfvRFmbjhY&wa*! zrP5{UyQ;dg8?&@r57RsqjhW11%N>wew3Qg*Q^=8T=O6Vg_g{rL8 ziV=TmkRww@v?|+0E>NZR&Kogz41qOSPjX-XIE5tLm_C>RIH&^b!Qy<9ffB$ z1?sxyUv=yk{qr5lQ*(GP2Ks;Zn|yA&6v(>4 z7-SA3H^hp_VJrjM1fyDkQp}&*nimVvt1U?jv#3JPp ziq(dLA%kSBhoVm~a&dJM=mIzqM14I_MOdr|g!IW0;+uke<;plJm`_pm`b)6`0g)(d zrYWmN_-icyPj7K*7EeWL)zF_|Jz>$d9~LHd_CN6V!M1y5_-0&&bk6x@mTOP#DqQ!@ zo+Vcuy8rFgZJTP%W;exbC@k8yV9QVc=`XJpPTU_3!Mm<%l)~X`=$gXH>2>E{{*S|t z|MU8#j+ix2g-6hYNAL$ELIeJjY*ZUqA2MN7ZR0ihr)^MK=;lxsx*e{{WtBXUR&x14 zF_8Vc>74J3L>;#ubG+ypmA>Mbr=8EaUSf{2$2d$EPqI&Q&sd+dF^_P=hGEmgwqc1` zZ(U>GOm9;UO3X6bQhTR#CA*$umUG?wa`hGZZYv{8onR5Qlv&6!qLig;t+T*fJriPM zT$GPmqc#R$RX>AOeLM>R1Kq%272F0ruXF2tcCXtvR@^BYZ5%7|9OuV#1~W&7Wr?zw zv)M_UjL%@u>jC0e)j2z~|1o2eZNs)RHrn=S#wuGot)td6Rz|e;TKlYnR@yp-K0hi- z50pF@SZQ=(+|>gdQ_Dh#!{YzCBILrlkp7;pf2Fk{rG+7~O6|b7N;WAAx{eBYo;Q;v zOdlRK=he~D`mT$xmExS3S_49C0AxwX#V&|Qj`_iyP%c)8gbH*-aL%2M%CD$R!EPw0 z>slBsGcTl*Dy}?tGySb)7GHn~g;c3v<<;l^Kp8hD%W@j1Sjvdq_EAh5E#OCTf8XqV zvro=GHJdii-s_R8J8===X{wR@ezKs_pY^#@lE200o-X;3&#hK;cDED=`P@k@f!2M{ePA$eW8PuG~#6`PK?Mq}b6E9^JhMf~b%BhNp7c+~(j?x*_ zQjv-K9Ozf@_H~leXJu2CBbOvM)_G4 zK??f#{V`FXvIRR>P0gXNa)vQ~w1E+wG024%G@3rP|JqLA_iS|G*$ZgE)fK*4---Fr8>jpoFt3 z`!tDJA$kyI;ir50Pfwif!Bet-(mc`FK5;reIr@`}K1igjGCijj(PEhRzfMrh?Hl-p zlEaGd?D+q@_DY#}>_y&n!lY|p$seeN&svj7>EoXoIo=9ARnJl{Pn;JIs{XSSbonxR-aD%-f_5J<3oKMHQ>8 zpY$l+0X$(F6~Od~sWd_*MU@0IWAv^ZxhT{wK2WlbYV)A9R9QV%{Kr9y!U(&eqDtB) z)k`Jx?&0%ypv2&=oFtzcrLHQ>-?*~M8ul>r&ar*ZvV}b%`h#@$4RB#e|EFKTJt=}a zWw!tXC;}16{-tOwx(*GAd&H;3W1<%N$Kbtkm3~e2VsyC|seEoq^4n_M#%X>viBt@T zK2fn6Q{aytqkudCMDgG`xDkz^*JX{(?#CUuS6bOK>3YH+e)g;q6pTCJbPsVkDfSP- zn#hM-;!CoIC)pF`MU~an^aIl7bDvDDp+;A2Tq+9M%G*|d_vUr*I<7Drsued=8;Bz* z1k2@Z=bu~XvszMH00Mset#Ks^GXdux11U^1->J)`Q(GLH-J3l(Mf+0sd$?_m7lOy5 zzj6P@^Xnk%j0mY{I3LPK>Z6&|vdH>KUurO=c@sdFC+2DM{L1+oH}g~!{v`O3{nx>d zA|FOS53(LPP!{F&J~uD(qlOq7>J8v`8y6bNwE@+g+ci060{a0#xA zOLq0S7}wm?r1K7>pqv^_p^?;y)X5Z;NOJ>!a2I2E1d3C8RmM<^PO*~3*Z=)pHr*=@>>1xE8>ZDZ_1)a5IKC@6K>Bc>)QM}IN= zn;%yU%*b6w=b&dL^l?;T)G0j?a&QRoYc=&s~;Qeda%u0ibkZh%)Oun)yqXg z-j_!vR)F~LJF5HD!42~lE;W22d?7G%jdOgjsa{k6o0_q!Y=W=M=W9VT4Xnm!FzZ~}GJ{v|V;543>4i+U zu*kT`%sLHaWnSMxL<LaQa+cXDa56MEq)`@~TPTY9vq{Nzcf6tD8X@Xv~5T z6nz#EBGG3MgbYL$2oagGKG|S~bOagHg5Xfs0AMGsws{WiI~ZZGm}5Jg4z(tu9n_*T zT6j`>N{jlmCy2MlZXa<#hs&3Tc`29z!E_p=1Wb2?=$OtF983+TP^z~!KL)QqED@U~ zF~1EEr@^=|K3^F4k`&L9mA)4N4<$O%Nl1?n9u`7a`%`3(B82$K0w7XoQbR2LKL;h< zNzT2_afBlb^b-%!z+~VG=m-6Zy-p~8DqFBX^+hrJ#Cw^H$3JSwBPE_WuOXR{nBqvL zDrF>a6MQAiYyRWY{U}H0|=<<$J{Nh_J`_h?fZ3 zmtDuaZySCh{J88V-rpEL6h1e6Dtzkw%J2{2tFo`W36-JEjeK4ReO?60yk3t=uXd|! z9=qGdBhJlZ4)3;J?==WyVX4P&6fDL*BP7;FJyBYW$ZJ8!>nqz2Kpz}b*62PjYk9#y zS#35VhCO5OKV_8x--Gt+W#bsi9PaQ!?-=@%tQX1ua5$r<^iPUJe-Xayak?gY#vLxQ zzG(bwvOU{FWHMP3OO_Sw>>(7pliB`%P-b=t+h1?s8t|W@)_lF{a{z;E#UDvXM{zk< z!4e%QRHZ@G(-VKc++V+{uz0bvYC8Ov0Q@lDvvA_G1^MVVKKT=T^Mj6vFU^HQ21n*Q z^yTLsx@!SePw14CSOIk?IPqJ8hp|LsKEx8O3CZ$bZ`A)#k2V6h18hMz>bGXLMc+>m3UsdW%8c698ir;7k>JORIt_RB}n zQT6D|pMu|llkh$C0rfff9G-z+sLyEsrgPY;Y}ssOCc6mk0r%-1sJuT*f*{>2v3E%R zw9g%t{0%dvxf>Xob~6UW{^9evBT}F~Tj#Ea0QmJfi(apr0RW+kMVYK6lgR?8%g$h0 zGGIoQuG2w84AdN_@6*4cNBS^FbDYiQe9qBOUmuM|rq$KOV&Uf^4!fOYnFwO|hVRh& zOeReaGO&+<%owVbwX&{LhX!?UR0nlq=&Kjf2EWg{x4Gpd*Z?H3Qu%K-lOmW{zewnZ z5~Oe%G&WAg5Rw^oT6YS_9AC_=BYrH`Y~|bA^PW|D`5=c#-}$GnG#G9F{FG zHr-ub>4Seu%vm?j_B=XMFx=S9hC&gCBb`R0wBw? zLKiQs1Zi1WOZi%9MP*thv#T8Aiz9e;Re`_Ai{;!}&vl+hGEY06%emqGv~;00`&IY_kO$|$ex*R z_T`)HoB8HD1F`}69>pHzh-^eYsu)!&y-s_f%MFx%*yT~UbULTfu8_MJ#woMQ3k-H3 z7+~@)jH5@w5%PwFDVbt^&Mz%44l{YVj}+S9E+{BeC=V(WvV-;VJ#q%g4f19=E8h`0 zSR8hiL?J?-?I368?XTNe`2XO82&SrJv_X6zi$8`FQ?y!l)m zeST+n&p=6z89K!YrviiuyyR9)d`tyvqKm9{aij3W$3;(C>GPASxVSyPxXH`$Q0@zS z5El&w$^nZyooV&DnO6+K>bEjIvH1yXIL3~5+7oIBALReBd?RjfmRV@nUDi37;&Ys zFkx$D=FjA{;CH28`e?oMNrL-0BzP^Q6|UzuyZB&*)s=t=RN%<4IPE5v+e$eyfEF^k zJSHQMg9?k)tsGE{D9$L@3q-P2#p*?_i*VTY8N)AoTEkp>+40I6zm*O)*`zf^vv{6m!-mE#8G9?x}=C%wnL zCn7(JyzY73_ivFuxZm+Re7&;XP2*~!x}9GhaxkFrujKF*)Q2aXo<;b?i` z6ka%K(1wC1aSzHxO6GUGx`i9znEmv9=@c8E9M@pY6y6W+g@IJj8r^_VKCkXn6DX4~TXaC{DtEL>Ngo)91s2 ztbj<=;aBM;GQ!T{b@^NpnbfEA`&C>!j!H_}u|p4#OC4y(DrH0#YsXG)A$f&4dyz%n zJKR9u9;VUua5!i7dP2B}a?Ku$xEWKgN*Loz&_kHD>=1uoJRC?_C@f#j*3=|eCr1diOLw(In z)rG+ZhwAE^n!EQrO88tjgxKSNT@})zU-H3xE!Lw&T3*lcdR(Nzd2-CiFsqcxutcNQ z0tKa&$TV6ldE{-9D{|#>g@TpHWf}!?!pe6NKZs;VjSuizDV8Y}GMPdu(P$(m@iG{V z3f#r3l}bH}53q;H9Vq^gx8QnuLPI2*jOowlS-p&xW4To~=Y23Nl>|d|D?cEs=3A8E zsJgID;hDcapUJu{^TDLUJ zu#EROb4XiS$W@ydpq<4TzAwU0i?*6>{{cI!Ks99>gnY~#feL#YvC3{@^W&7m^ z6bFIalrAsgK-$WJ~Ixt7_cE$ z6fzlQ3c1Q)$Mz|_dUCV`!@}^_30xGO!UkR&3}KVrXt+zS$6g|QY;wz%a%$Gr3TA!1 zV0ufb$>$fi%J=Iq5n0v-TcA_A(>j^XT6_X#L%BFa1Sw-HVQu(;ZcFOGcx&@nfj^~= za#BniVW*On$>0m*=KFnleqVmD00nZr1^6;)dUFo|$lBnkh!fct!hoQ>m-Ho@EH5vf zhaWBQ&0jP9>rilkbz)-U(e1q(Ys($x_;RPyAK?q$V^>T+I^r(&dV`Ja%%-Jv`<@$W zEU9)>xVGiwly<+eU@72by?W=3hOox+Rx z)0NegHr6g_v$R>;Y;AU#R4dh?qEoe!LG_?^P`5)r;23ZYLum1`|)t!r(qWmm)4OI##U?<*4l;kD9BU7mC%U zP3fF{-uvYDMemP29z7NOZqX0Jr)uA?&0VFawxbkdKa5`jl4lRb_yn3_n|N)-1EmG_ z!j#kQaGWS4F6Gt-a*M*@I*l$@qtS&mMLLOJNe!6?Pa`A?ma?8;u97*3d560k=rBL_ zPhk&lh#H?aGOrskXFP0t-N*vvwD%e3K}Xm?4m=@%^FRbYANgbCLWGU*ODg!tOJHG9 zgp0%?ry`Qbvv@J8!Hcm)>|2||f^;JC;6FW`u8D>P?y5a*Af_`+qvd;ZNn;rZ`8cYD(xpPg6k{Jzav2!xz%-we6lOA9!6Ut#?H6%XfWw%T1fgx{4j&AG~Aj zT|cj|I-~S;^o6t1r`dZ@G3!2JqKAbA^%eO6&cGRc0WQ)O=~WIy-toN?{G0D@K@ABo zkyAm#y=ZrqyCRWLXJw%kHZLASM56K+`iuQF{&nWZ%#T?f^DET8DsNSw8Lhx8<;xUH zyo&=XgDXR~%0~<%#yfqt25$|GL>@5QLjwCw8jkyp2cM6;=zB5vs_)g{>4+0aVd=<| zn3XB_;g(57Fu+Y+*v<16pO;g} z6-v1`6wD2Uf`AfVAf`~}Dilgfp2eEyRrzvNDxb&ejajU@7K=6H_gF1vB28O`g07SJ zJyys)xg^xUa3ME4xa=DYo+oLU3JZ8n;vA$$|-O5_;@LN#D~U1r$VPg^3ax&Sq}PhgrU=FJ2!n6#@KdIt{*trzyZ81XKm*U9}ty2 z46zAEc!V)2OTY^7Ibjsf-uDv9Rgt~;Rm^qyhaaeAZ<~m8A3?ZJ7*n$LsNayQsVAbi z2+vp!p<@ec%yW!fV!S_LuJI8gkJ^spUF5wZQUhhe#TC7k5<~`OFS0~C_OOBsK`kDs za2a3tLAfQ6Ux%Mw>c~}`{%&rd2D>(dW_}iWbLKC;nb!)d>)3mI5=Vivc=}KH(B3+; zj`jIiv%!;_H~nY)aV3{SL`!IU&%eton|_96mc_Nud6r*zL#l`M%8Nec7bqQMF^RHK z=e_#-9S`dtHXYMHV^S*|INywSv)AWcn|~*JTmIMCdu<2VldMw1>Lg6zQnry3=j#>4!ttm7ma1$z@zT!Y(04kb=f!**?rNiNNV$@(MF3P?(aJ zozD4hePi!yyLX(s@1`FQJG*AyKRI*w_-)5<{devjEi&12ZEBb{<1ZcCH}kKrPtE*! z|Mtgok3Rm`eKI4jtdk2DQT4II!Gix7rz*%; zWj=cIB{H)cFW!R5bvpMG_61DjN4?Ln+(c3MWfyrOOE?!qw)j;B!n3gQ10c^0=QbmOagbnG zqyV$RHH4RQ1rD9Q&{v>$7GQ_YPS{LwmI?uEzyx!tXwx~&3HkBMB%B7rb#>vQy1J1U z$G)(!)Mc|96D~_6|Dv4JQR-b3uAAY`cfEUdfyYy(m2dEE_%d_HSHo1S1yGUnc80zc zDiYrc?ZX-5<@12H4DAoS6k_*>aL7ZmgiWIu zGkkN!D1%Lf3=S|QIn_DW=G@1;&Rk&RIc~SfKv;_0F2YjeX36OGVuo>> z+_@%`+dYN9$?F3Lu}Z1LjNPU%DOrY`mg`Jwj7H87Gw=r1@DLT#XQ;2>LzoNUvCx?i z6Uxb@;askm8=rDxw>6j$p9yWJ=*r$U1Mn85+66YFbLaMoqS#C|xW+=p2YqmkHk0$} zpweVDg>XHpF*T#*rZ%+6ltR~-t}}fNKY>r;qo$wWkFe>F3?^rft!R4~3%7jCg~uly zrh0OzH<_=kHxZsNARzdH8Ujv;hMgM6tTk9+A>glwEKgIusfID+QDN>mRMa%N8$2x- ze><96!|)dccV@>qqGBXi7oKH35DwcsmtSvFYSxYi*eeQrEm8a{BHPG&{zkjMIW`lF zZt&*MyJBA9Jn4$_a#oj>aP;v$N#ptNWNqx>Ma4NvvY%f&vz*x_{SwMSwY=wE<6}nV z7R^2*qqoy zUO7wXc`qRaF|Hv0lGcxZ${skMkd!lb&P3MZyYRhVm?`@FCEx$oFZnQvz=&B-M@$Xx z4M~a=OQkFf6(bCp9N6Y6RWMuxrYu%AlDF|&pByrHb4~>;+on7Nl2=q#nkvcz5hik9 za`eHOmp;7yz)F|3X_vIKsHy9&nVr9w`SA?y_bqxCZ~eh9#&3I+j2AmX?C*gFuV$0{ z1=AuG9@UQOMvZ&@d&^%@zhZtZ@LF7{kN8zSwO5l?4XNKMlNZ!R^qVRrk$P#pq25^S zuMgIg$7+|Un+?sz#g1kE6~U%*zIMHJy|1NqNWMqC$FRq^Cx4ImEAj(|1IEWJC;bkc zRBzB5^~Fwu)95S?sY2#xtqOLL%1xCmwGuy2wy?|v%F8QMYK8@Cz(nV zM{?XfQ4t9MJw1uyIDV4(E~-Jb%*sjOAsD&kI%k*;Zw_x4FLuZ)@vNkJB0|DI(Y~2J z2P2Qf#j__WQbi}qR>2li&F-k>J;T|}WK(&TX!M?TGq@P2)v)V5faD58ovv=L&QQ1e zg%^nNg5m`^7z%Ku_p_A6J1C*09zz@XQ@TJX?P z7qSHUIiifljE^fg9M#e5!FHwjUlFBm4u zDMEy0zt897)l@3-YJ#!cnh+?XBA?tKL1OteAy`*K5V?#f$k|MC2W6VWee=oR<n{yjt_@i9(8_0(^9t|SC)E9*X=&Lc4^H_ zONljyzvb@6l9HKUcwbb z|IAbPKJ+5QTf+xhnO5@)`K;2s#d_MxDlw8vBzlDj9W(J7wWL;`=gb?)WAmnP5wCXY z+w_dyYI*Qm*~iJ7smOPcnN;B2%@J5l=p&d}skg8_?(g0XQ-j)P$}O#Js$9@LI`dSq zd$c7-tISo_#!DAx+PaUBdQpjO(i*6jiGF>zU=X1oZ-t%hl946*m$2hYPAxgTgk9oT zOLw=87i&j%w?N(@3HeTK2}VbP(JAcUt9+f6N{Lc69%b(fp9udj{3`qN@H>)sR3A$| zRw)Oh1F}8xJ&Fe zyFB6Iph}^UNC{^yOmyZFbxElOS^Wv1V4 zO3hR>FZa!?zl2|c!ZWY5wFX5VA=#e+3o-m%{%ySl>yW~%vucC-kiJL~lbf!OFbaWf z9;!8yue4Oe>dTtTdeC)fhh^A07`qMav)mlJAAL3U1bQ?!RyJPtQ}d53r^^1_{Ho=2 z**WtcEPt?`Df=t>$oyf*R7Ys}YLe`xtZ>=nx^u{SMm#&p6d21n=| zcZ6~XF@(9+Bb;lvD0dKf3`Mr37AwNAsUlmc`9#u}#T<)TU<5+h%{Hsm%qSHKgkrHk zP!anAkjd6)#LaPYWM#-)5AkKV3=?|km_h$gDZQefm6t;(A6Qb1HPIO~E3HddZ^+fg ztVn9Q;Us|N;=_y0+u?`km#27plpJkhK{M1?EXEp(0cc$yVa!0M95vUNV*-CS5(yJ> zHtPBmK3g&wVmya0V2(Ft7f*j+_q703LP(TcUDF!aiNA->!mI>T3L##mPsKKP@~8hI z89KjXmN?n5DOecref)0{YCV73tjBF1-%j2j_g&~@@0UIYbVD(!z}-g*s;2N)_|}}> z%786eb*uS~=)Rb=w!Eplt-Pyv*u29!R808M_DSz8JS00LKb(6w@4N9IR{W>*qlz4r z74wRKUn-HfDoU&t374N&<|~m@_^nb2&dJZSXac(D@t08^V?}zT!v}y`?s!_S*GTcR z_#l$t4&=i3KkarqwLnYWNj|`b@0>hL9}(~8^UHoa2HO%Fs={0qU$v#`OqHZc$5Apy zi>Ra&)-}bLCW?NmoWg&Ay$H}6M8>lOSu2S=@>%K5AHWWyPS{=lb@R$|S+UlJv**YL zdm3zK>2XC36+|PPU6_f5o?H|~N`s+7he{nQjg~U9h@-3>2h~OGsI;)89XXtll8`C@ zP64$BU2=UTFd2|pB%Bk6)z0XrUlpjTi02VLRq|PhfKmAHSe~cCPgu9;i`X0@Ta=t} z_Z6$}{mL6n70*1$udXh9IH0}#_Vc4JpWv_lW;<^0Ol&;V6s&G&{yJW@?=Bs)^!BYQ zwp~A!bJbN+oqYbxFAm(Tn~{t^w(GY4Wf&Qec!I1AzpUwAwQSG%{aTA>JHKE@AK^Lh z;eV4{#b)T2^>!VR$)S0VNt-2Y5=QbIyMlZ~j}4G-BVHKc=hapqpy8Mn(8kbdp!1|i zCX>RXZNT_6#xcy}G0Y-tz#L}rRZ3U|*^3lkR@fz-kLiXUX4g8xf=55ZM+7gEKcA%P z;~x>lW>$Z&8VYbT>tUXiZbe#TLk~VPWqr~5p@!AK-i&;)hngj^a>6h-SyWMurY^k5 z7Xo0lfM%-(?L!TgYs?x(RdBPeyHbm$@Y+c^Ytw-_k;|efw&H26RwdB^z~|d+W}|AG z(eQj;&x{jHD!@=u{`PzA*@O3g8ghJ2$ScZyxbI~}}5&GLGsQ^_bR?S@*t%jp_{ z5%Qwl>LpcxkwCT@2D;gv23jggq%UQkoa616$U|X2WB-9|;)e{bzI-FX9^r-W81Nr` z^vNv=28s_!pP+R4y-!OKHc{I6@%jorcD3bdYfDU0Y`)$+>>m!?Zr&G=S*2DPgJOB| zydW2AiAkkW*fR$67>NsU*eeePyg^?i7F&$@*p+yre3N5iuqBp}W#pM)rf48Gf=6UG z$!`jd6ph3V6g`X|X2xPK6#k;{OpLo(wpYG4$YMET$AYMCr=PPsQ7~dhg3xY)9D~WzRme=UZFh5(Kllz zZ3X%K4}(I z>l4${GY7M45pH0rJIg#OpRc&sd-Y5c{^r$@f?_N5`HdIeW{*gFkOc+NIlgE}xkI&6 zccb!E-#b2;jK#az>m=9Z-)xrDDS|R7>#+u{GL~yoV8s+(c#QKyS@n1d)({Jlk`Dt+ z>a`f1z&!ab2GC_?-PYV>$91Yv|(V0nWn~ z{jB(XfDeR2nRE1EPCCmHL6?c*0-w@USl}pNWJaIX?^Al(vD090M=l*eUX{Nc7nrzq zo_z1LZTKFINKX^EkA%8CGQtAHP2Es`QucR|AqB$*^>{;yUF{&9&O$oSoe5iZAA< zl#0<1GfyE6SX=>%ly&$dNG?4A3%CXIPX}7)_In|(jQUbO#^*y0@;L^b6mW6J(`GZ$ zT1ZRVu>KiA*dc40!bxa#*v5~9SU$8RM2@f}Axv=Pf?&Mrc@?9w1~1_aJSQ**P77ZY zsTYx8_&|`6ERG&w$+mkHMvdR#EAV^#POYmQ73#^S8596*dL!!^wD8&@UXxOVKJpYL2>4D%xS4(KB=FRIa@ z<4AJh%w&#zzLXH;VF0WOEM<$73lOi}q8-!z82^a*75)`-MhjgTt1;5@T9$$B*A%{+ zx3NqvOAdauQhrH=^tV_BhU~ZGyS7vK{$pcmthQ>TCz!Vp%lw|#Ac;XjKKC>xkxHIr z-a;C&zmxN}v%;>4Jo1AXCR{%&(^mY>2TU^LVJY@t7ZGz5_!;xdnYsb|m6_YO$JWLR zr7Qd&Jtz5rJ+ehjcAUFlOy36m%!>Rdj<4fSv|_A`JL5%xRQx*khfk_34`M9r%mdn{`hh9ndhi z2{qwm!8ZJbz*X^U&^5T1>God}=!svCcLjD7?}`%%IwSHC#f`=rO{2M^`S(fgRor8| z*YvggNBxHahvHL`V~Tgwf6%<6dnfQtSxBx`25M0at}c@{Dv-t&kWkHFrr#QoNlS>4 zqb+PuVm(qqk0mMwumN}R22{aUFyw<0qB746O9yiyj9I^4#5i6YPEl6u;aQ(oAPi*sTB88OA66HB;u z>>!^T3FpIhG-@mn`t&USl+dZkC4N>E3*B+%&wj}a+(3O4P*!80y*qa_m-j?xe!uvUEjN7ax(!Qfu7SB{A=}NafjwP5DnU2$L5y?~ zi`i#)2HgsyI>@_^nT@>q7&5bnjhf9iJ(a*tq!JbJdVB2{RPOtFol`fWV|Bz$DXAq? zgEbPJ!h@48BKM8lQ<95ma(uj5d|X|>5+;l6d~tEHg zI-Ox&xO8cHUGE_(3wUO^1hI!vAvt;Bzirdo9P14%E}@@f;4Fcb5{54sDfw1#tV9yC z#a#78)!}9XZ{uCfMN7jQ^)0qmM~iDyQCm1=Xt%YyQboHA+iiOs+g*FYH{0$EKd8Ug z_Mqcl*L_6~g&)s<)b>=tq44qi=feLIel7f7_~UR9SCa8%f}=TK&G~BXsS^2`9PC!; zLJoOA6s2sp=p9bhV+-L>t4Zzg6XJWIafcOrsS4*^KbD6bIe||pF_bM(0utG4hM3H zc;M_kF}bkco~{m~i!zwS*9_uIc0|9&P{kUvvot{*yVVk3K2w%cU6^b6!mZ10ei`R} zzh;ZSw&II{&ia9|hcol8Vh?}ZwXv+g=QF5lR^!|Hn*aQhcd(D+3cS-%{OzXob}2=!?;JqO$9BL+0Cbur;w*3xHsf=v|5;jpbMo z?^O%OfTi^XwJjxBU*ZImvL&=Dj|Fhx`+ngpJ(mHpxo|3AU z^xf^7KkKwm`Wfz-WW7qQRpsaB7uBt-TCjC5?%1$WrP64DD1|Ov+1PjU%nL;|o3DTl zt5DR1V@uN;dcW;0DoM`s=(GyO{BUgX5OiwNhtFO(i+>0sSp$2vo|DXzFwHB;C*&%t z%Ms5vl+(`_=Q>>FD%;P*2&p6nKEGVWOa5jh z?>(}#*13AaTa-kh=P7t`BlgTCuI3KS9{)z!!f3QX(k~J!xSK7iu+^_v(PRmqk2RDK z=MwTcBLt;?`MtL>z+j8lL>Xl)GjYp$*wk zvp(71YFP~~kgi7__D-}yf{>A^L3L~)>I8TZC=J-h83+h)JE&q%Fb|;jq4Cy8euw4* ztd-RuBg9`OzZ2OZ{1xEVDE(*T0h0lHF8D15yP7D7S0h0eJ_b_@?jZ;R;V=9r_$>ux z660wgZ5ybNB!k?fT;Og1<%Y6+8QhB?T^7=agWnoZ94Rl@n<4xNgwsNumVlZyCzc}uaqP5=2=$ZlLtK}9DQ0mlWs<3ku(Gyy?7+L)_c$FL-*r@A)jgU;Fd@ zHw7|*^Fdqit)h`v6=4P&s#6TT6R<3J`vWTh~;-s5-cIDuCW>^EF~DR7E)M7-AgDer|vZrR#12ug_Q(H z)>aV)9N9LAFyP2GB*K6r+ZRO`aAf<72m_AnIU)==vWG<&aAaR8!hoX!p9lkv3YtV1 za8&TJ2m_AX0TBiqx$hTYz>)ic2m_8nlN45wdKKv@tR{6SvQtqY%02v!nrg|2Zi%|y=7EfLDMdZySqzphr!+5-66QULvRbh8C(Z;)7E@+2*>J=f>C39hFQ^C`^LiXHFe(@x z`A}zIKyl?Dy=Y(BE{tLo;WAM+tVo;?CS=xm%wOB`;?BPoV6Q2_IMp79J}l(s*OFYU zk)Q7J^VeAMo%LZ#5{&68f_w2ULZQoII=Dn)gjlu3vmI#%$zq!c7AAw_3W-5pVkF(x zgdY2I^sHVBtaQ%uA}^Hg+y@)5Eq64wDzC;vN6gX2pYXfmyzKhwY74e=CZjOrk7E7{ zzkuLBq1(g$M&AiDG)LEm@!*;@iOAPLee~vCwbCuaDe?6?5i-4MIa3tB1TYjv`VnJB|+yzh8t)kfIF(lctwN;hw!j|(# zYRx@RFs&({OT1WTo0dn8V60PZOu#QGsUKO&d$|}Sxfa=+e;&9##Oc`J-ng0> z?E)UpVC};%Np!!MIwg_`pXr#nTqIvLsHC@yGAG*+x8k;@@<+-oGsRYM7K-Y0S}iboV`{3CTZ!OV*B%m^9S1g1E^7@MlF* z8lM}s^pnPLJ3`90U&BGKTUOkl6W#YT3VB7E)<4lD8djzWkFc(!vgv$#??FS;FH0+# zXS0%MTAT~)&4Z)(1$@fd7!V`8kEXiJ^Pp%PL(946aiNwgusba~FI`<1UA({^&7YGB z*#L{pa?s4jy#zJ>j$30BUFTyu%E=v`TV50LdVa!K-z6n96T8Hj%cZzGU$TD=51?xj z@8!ueUf&bTJ1<(r^?gKhFd;7{*YhHu#mU5xbwS(2bURAH;nROy08(LAX#g=z>0kg*y6KAD<$2NU-o2ToeFP3&HCo;B>8 z#}nTYdRACWh+`)pajZvPoU>FKS&|weY%+6!=F*6~2j|cYKH#xH6fw+|$)DG>*rq?+ zfWRc72O?bZ;6OU1b2~;@SPAF+s&Xf52#EAt_{-@IkJCs;bCR8#3Dl!;=mq})+?5ye zT)>fAY?HcjihY?e~zBhHFJ!Q`QE6M9I*paE-gx0#12k}TW_I4sHl(U zG4Ph2Ye+%S$o8>w)CM&D!cSu~Wq}=&)XaK@8>$EAM+m_k%78BzeR?6fi5omgFgJc> z1z&X%{mY5U!!Ww(PO-~&rsH-ToBDj4-HI6xP2b1c)AH}A)>?Gi8FoG6UG>EUx5BF( zm$KSEv70Bfo7I}VPuO*n!wf+xs8IAo_ucdiUhfB`p?Wxp)QeALIw5`z|Il-9&dhfA z-UQXbtu7OA3wVj8Z2(C1J)R17v+^;a^oZ&{TwG_MT8?hgxk<|4;I|acFfQc*7M+ff zX6CT1OHNH0@(cUJ^fVQRH6H-G_kg^QKg^OtQ|0IUpN0+PLTWH&`B?mYw~OvqqU?(5 zN{|8}a3OM;w=fadO+r$wgIersd7|Gac#em9(sM>Tj}PRJ;*{1G27DQ-{+{x>i(T8F z++_#&xftI(>Q}_i5Ok+apW-e~)}-ODe=uJmG`MXKC(yw$T!132qk(sRmgf}7c8+ChO zT)jA@JeV>B0wPgdK9-r+k5XyrYQjS69?aFr?$jYMXj8~kLJ!LjPGnH-)ap{eQVin8 zyuOT;kMk{2M#Ka=(LE(cJ7dqGX>w>$Re=2np-p-TbgF*MtBuj^J+Y|f?j)%pCXw-^ z;!E1Z++5G4Yz6$xBY>iDG@%zvkfVX|Q-9wSF_sRqQ$V8r8!e)mg!hTc!7X6`*lY;+ zuC1qz$pBu>IKX*#?^5a4=?BBUd1g+Xv7LBfu+hnsv8zSp)s^{hHX0bEgNM5g-}j1URyuK?^MvT1-zgr-l1x>t`vsQ@2tr z=(lUE>{QdFDS19x!T?XrX;wC7k;Udb?AlU?$c~SfYYs9yJH8kc^aAA{ERy*B$aKuP zsI2ofy!hDW*acST#yLwc`TbryWjBpPq~KdES?71sh#~+*e(dFcO&$H6M!(WeSIZRf z1K&gEs;(QF1-tQS5$RkDx>?4NEnU`rX3ZeEMg<3(i!oBbD=DZkaG8W@CvhG}YPL$+hy)?|f9^_e zplD_qFMa`13NE1WtDpAFAhj|~agBQy4uSoh3 z)4Dua*YZxc62s)E;kCdCWJ+aJ^P@bAUOdqh+>wjPJu@||8Eo1adq7BeA#7ugqF*2# za=x63>x<#PC2OFwt<;2rn+joG-;80x)u-z?1gA{y3+;moeH%yf~-8z6upu-`-f^ z=Rv|pMZOaS<#dM%8hFt|3t~}H@*g%>H|8M7P(|pVBgskrOd;;|AwM_QNPM47pZD-)*7~WuMI>r zPiAVnOh>n4PvS7^HCv*u)S2HGNHXA7>s4ynXu4lap?n@TIcEe`7K#%(^F}A0x?F)< zfmAKovEyv}edt2w5~LnHXCccMRO;X!M%5-{T@?VAd!j@GEb9Maz#wrh3)Y}^847Q0 z(zi_&PR_ojgx6-!koF*wKM9%C0n%koMbz_S{h5QsN7sL0FCa4TwF9>UjuLqoOZqq) zg%JlqYTRCZN(zRj|5D}-d7h3cahwwNcqGpG{Hw%(4F1eA#2MvG*c?2jfhF16Jfh(N zknwlJM05dlc>|La0Z)IH8ph+-BoyF zYisJNs;d@i`j3>oc7`Ud7MNb2@IaaJN{%at;h=qS!Lu_tcR{un-OeXWt1^E0Q>)I? zW=8rozHY}P57r}Fu%G1Z&Ghg#I%SqcOQ=^zG|#x|TR{EI^YFwmF2nyf^I>dMW#Iba zg03|8C-3NS#KI*hEjt>H|F^PoWBkJ(Ue73THF}#Q#zX^f-)Sn|1m34cHC@S3qzu2X z^~YZ>Z^$_FF7sgd3+~et7B3fALd3a;+|sxP32&uuamGBuJ#6jPs`$dtmONt9QD4hq zd=*v^CVB>Y`ia6k2H;U@l@B(`XPu~V7}0_!Y{AnR>FNBsMTh^wyrW|c{*CY_e!-9B z#E(ht-T^_wPW{DPFpJ5yj(O)KfE^~w^>gAA=4J)%62B*PwEUTiJB;iPl1_QGGG zu=av`nv$Sh8bbn~gvmN~P#?ar{>GfH4e2DF^6OWcs{Q^ze1R6rO`BQPWm zV**^_<}F`BTRAAIR$(PyT81Is2(E!01{utCgC;~dLz3!(d2Gw3HTV0A_kTjE*k3qh7(+55tkMmqaC{|v1pF+e{VDurIcQGqO|wO^(oj0_9R zdkR7bszosv-w$R7^(vF8O!k*RXW`iE!FgozqEc}L%>>(m539AZgFq`mx%bggfAvMi z%RXK?6qe&@TrzIIeQ~A_8;x>S?-CAs?s$m+Y$Iomo7>(tJ+Fs2#LKAVCbM8G2!647 z;CRgposO3|6TI(v`T9excd-#^YNRQk`KT)sV3R++C z;HP4knZ=U(>vtdb0b7R31#W|WqKLDm-~h0tbC6CE>=rydLIsHiLUJ;%f+1?~Ik~f7 zSf*%maFSS+xcLw8ExH%b%`+zip_q2pzVq^dJ&crlw6aIvFaw=W&qc$wHD@eB}G@p41wy2*nfb;=G8iC@k zP%?CR!z4>$jc!Wb)>Mdzk<_X|0!?$C2Zbdl=Qg{|V~UEyVaG5sk`GP4t8NE7fJJ*J zEIPv13AbLeV(-hL_pRP*L+UeW@xY@@=N=7#aR1S4;oEHYzkU4SE6O~|*vfQ$`_FrH zFr*$N!BQlVbx1--0tTCx0tfj$@!oy7D*m9Fp=Zun>f?8zI%OUw+JICnNQY2@TG-#q zd(Si29?HD9uO+PBw;l=jwXVy)3o``HHMs+m)OoI{zMu0o(}WTA(QL_t!X5GGhMF@d z_22{V?<}dP6B~!;huRazeg8F;bP?KGFUMXbgtzJur~qB z+LmMy3S#c?;mAny_`7uEq1Z?FCsj2ti!gFPZL__+C9txEu;fV3MmPd)) z5&{$IcxJTZJ#>i!;g8Bf5e$0$77ufVvv4DZlc0sjMuxX9Vw9Ph_PNb@jx=oO&JA;s ztg1BXl=C~amIws#^)s1FeLNJe+F>Y|^f%3=*YfCXl021ct%JhnCufFf*!^ge5HY+H zXj42Xa1$ZJ%%hJ#X$F6G;9_VnKepHEX-{>Vh8t<&Z6}{D`F$DpDK3e;if(tJV7X^r zTARG?(AX1+KD?A0T)Gw)$B1R!zy0uny;kxjhzG?<+HsSd{sP8g!VA@p0j=$GzPZm1 zl*r$#b7!p#2<9cNk|eE)C9M=H=Iw1sbdgf|a3*$T${5Ap#4mJZYO(YwG7-kp&V?+8 zYr`K=7Hai-ubO%_Gmmj2O_he4yF``1ILLNetqPboO zZZx`Ucv}=mdxr`zxB~<=&NqUECt9dF?Oy~^1Mw+st!a^7ekFu=AP;~%s%;32za5su z?tAQeM2|c(#a3%bjV3(lw!5K+T%9qpY9 zQC9CwSM$?AL@FdIE-H2+vh$CkAG~Ed!7r#P7ogoT@#tBtd}lk0z2B@+h=775XRF9r=82MaeP3okV%2NOpXbwv#X z7AboZD>pKZPvX;5Ow7q!pNW%;hm47xm5U6(3g9MVV`b$sWRZ0@v9~c3b+od#AY(;f z5p^@OaC9f*;blW$`Pbe*h6%vNg}@?i;w)ofV`c6BA43Edb$1H~Ei#@@n|}>R+1OhE z$k@0)!&Va#`k#IPSpT;l3Kou5?$%_ST-+?5+U^#gy|6cNw~(+fb27L1wE3@3#yi_^ zX*w>86$|>8pmM)!2VU?cqCyd^8a2Ec&bunRKNy74k0r1#=83Jfvx1Hc9&Ck!!(4ez zeQQ^3!YJ=a{#m0B2WfW;s9P7m_styreIHf=WMULMdkptd{yI5LC!3pGo%$HRUGf-= z-1Ck1MEX5i1eCCBI10Qf%RYEqy=|hd+#QZyVbv(d+q@h)1?VgYtl2Nj7!UB}Wu3~q z-Db@A3VQB(_6iseCI>u(>+ZQeJLwDYQNzX5B`eSuH;ufL6&_mXdm z-`A#0%HYLsyXvwMs*f5(JTogXbajl$ajWWuXSOI-+~vloj~llWPFdJSB!rI$UZN3rU%bZd(mGJy3o`y9aES*Nd%VbB ztjzVUc$~28a^GoZp4QfRi3gU$yf9qMFR+wttOnk#EwHSn#lB0=GQC4DH{Bs3rT!IL ziFpr{E-{{imG8CA35ebq`_!o|-r4hNx{DS{3yAF2eb2X4yIWX3U_l2opF0ijLEFjp} z^y8Wt{#|Qy?st zKq0BeoA0&H{@b&gebJ>^?qFhmWO6Px57kTmhu~<5%K+p1EAqS?<@Nu|*aEQq@6Go= zgNQ}l!_@uXh|+NNu=tNu%*4&&-!1(AHKE;&nLovV)?Y?`R_h|>T$60{Ez*A zwe#QY{ZH)w>^^-V82+Cu^1m65jO||rR6}6VaME`lHP}LT>Aa>L@P~kon~o`Lc``i)1&slrk+H>~twn;(!rc4ylg|>o)5nHZP{F z9vk*?w|X@GijXfk8GgFiMIJBPAFqFVf4@TeSk6pk^ST|`yIrN!7w*oZE#w=1mo%Mi z`So4r*WTyJ=Hy|Dg8T(t56C}L!15$y3Qq~wx-L^t+xgMtd@;!nZ>B@d{HbRHVx`=k z{{bOJ7e9y>f%-fTUiQU5LX%e0R#ENq*gO*(b10GLja5@WmeU#ZS0bLnhZ?%tgRgD=`hD zQ0kuh_FeC=c{YGg2;YJ@DX$_IH9#aBaY}oWf3Sd+0yW=+U3dZg&k%j5B<{j5{2^in-2sPO@Y|Fd=X$vAfpALc$ksAjaOkg8Vl5A_ zOhF)8V+^%z1tk5;Kv=vMq%CSZ-G=?~qdhZ6C4kNa`p>!ayYr9pIj=dBJ8-Q%%Bn$| z^ihj82qjPG+<{&TSG?f0KF>zjWNxYv4DLdMx)dd>kQDv7<`dsLD83&7k=vrBE;v

v`T0LIc{&JWE1%E)noK_7o%S04$01C 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 W?dIHWPOX$TSNPmV&z@Cp>gYePOJ0Hi literal 0 HcmV?d00001 diff --git a/includes/globals.php b/includes/globals.php new file mode 100755 index 0000000..b3ab2f7 --- /dev/null +++ b/includes/globals.php @@ -0,0 +1,31 @@ + diff --git a/includes/java_scripts.php b/includes/java_scripts.php new file mode 100755 index 0000000..710bceb --- /dev/null +++ b/includes/java_scripts.php @@ -0,0 +1,19 @@ + + diff --git a/includes/language.php b/includes/language.php new file mode 100755 index 0000000..5158a55 --- /dev/null +++ b/includes/language.php @@ -0,0 +1,68 @@ + diff --git a/includes/load_config.php b/includes/load_config.php new file mode 100755 index 0000000..49b521c --- /dev/null +++ b/includes/load_config.php @@ -0,0 +1,39 @@ + diff --git a/includes/lock.php b/includes/lock.php new file mode 100755 index 0000000..572abb0 --- /dev/null +++ b/includes/lock.php @@ -0,0 +1,65 @@ + diff --git a/includes/log.php b/includes/log.php new file mode 100755 index 0000000..9d6a969 --- /dev/null +++ b/includes/log.php @@ -0,0 +1,60 @@ +$GlobalLogfileMaxLength) ? $Length-$GlobalLogfileMaxLength:0); $i<$Length;$i++) + fputs($FileHandler,$ExistingFileArray[$i]); + fclose($FileHandler); + } +} + +function LogClose () +{ + LogWriteToFile(); +} + +function LogFormatMessage ($Msg) +{ + global $GlobalTimeZone; + global $GlobalTimeFormat; + date_default_timezone_set($GlobalTimeZone); + $NewMsg = ""; + $NewMsg .= "[".date($GlobalTimeFormat,time())."]"; + $NewMsg .= $Msg . "\n"; + return $NewMsg; +} + +?> diff --git a/includes/message.php b/includes/message.php new file mode 100755 index 0000000..11acaaf --- /dev/null +++ b/includes/message.php @@ -0,0 +1,41 @@ + diff --git a/includes/mysql.php b/includes/mysql.php new file mode 100755 index 0000000..c104a27 --- /dev/null +++ b/includes/mysql.php @@ -0,0 +1,28 @@ + diff --git a/includes/nested_list_functions.php b/includes/nested_list_functions.php new file mode 100755 index 0000000..50d8955 --- /dev/null +++ b/includes/nested_list_functions.php @@ -0,0 +1,173 @@ +=$Id) && (strtolower($IdArray[$Id])=="true")) ? 1:0; + $Ret = (isset($IdArray[$Id]) && (strtolower($IdArray[$Id])=="true")) ? 1:0; + return $Ret; +} + +function NestedListVisibilityUnsetAllSubelements ($ParentId, $ListIdentifier, $TableName) +{ + if (!$TableName) return 0; + $ReturnValue=1; + global $GlobalMysqlHandler; + + $Query = "SELECT * FROM `$TableName` WHERE `ParentId` =$ParentId"; + $Query = mysqli_query($GlobalMysqlHandler, $Query); + while ($Item = mysqli_fetch_array($Query)) + { + NestedListVisibilityUnset ($Item['Id'], $ListIdentifier); + } + + return $ReturnValue; +} + +function NestedListVisibilityUnsetAllElements ($ListIdentifier) +{ + if (!$ListIdentifier) return; + if (!isset($_SESSION[$ListIdentifier])) + { + $EmptyArray = array(); + $_SESSION[$ListIdentifier] = $EmptyArray; + } + + $IdArray = $_SESSION[$ListIdentifier]; + for ($i=0; $i < count($IdArray); $i++) $IdArray[$i] = "False"; + $_SESSION[$ListIdentifier]=$IdArray; +} + +?> diff --git a/includes/other_functions.php b/includes/other_functions.php new file mode 100755 index 0000000..94b4280 --- /dev/null +++ b/includes/other_functions.php @@ -0,0 +1,132 @@ +=0; $i--) + { + if ($Integer[$i]=="E") break; + $Exponent = $Integer[$i] . $Exponent; + } + $Exponent = substr($Exponent,0,strlen($Exponent)-1); + //set si prefix + if ($Exponent>=18) return ($Integer/1000000000000000000)." E"; + if ($Exponent>=15) return ($Integer/1000000000000000)." P"; + if ($Exponent>=12) return ($Integer/1000000000000)." T"; + if ($Exponent>=9) return ($Integer/1000000000)." G"; + if ($Exponent>=6) return ($Integer/1000000)." M"; + if ($Exponent>=3) return ($Integer/1000)." k"; + if ($Exponent<3 && $Exponent>=0) return ($Integer/1)." "; + if ($Exponent<-15) return ($Integer*1000000000000000)." a"; + if ($Exponent<-12) return ($Integer*1000000000000000)." f"; + if ($Exponent<-9) return ($Integer*1000000000000)." p"; + if ($Exponent<-6) return ($Integer*1000000000)." n"; + if ($Exponent<-3) return ($Integer*1000000)." µ"; + if ($Exponent<0) return ($Integer*1000)." m"; +} + +function OtherGetIcon ($IconName,$CssClass) +{ + global $GlobalTemplate; + $IconDirectory='./templates/'.$GlobalTemplate.'/icons/'; + $Error = 0; + $RetVal = ""; + + if (file_exists($IconDirectory.$IconName.".png")) $IconFile=$IconName.".png"; + elseif (file_exists($IconDirectory.$IconName.".jpg")) $IconFile=$IconName.".jpg"; + elseif (file_exists($IconDirectory.$IconName.".gif")) $IconFile=$IconName.".gif"; + else + { + $Error = 1; + //log if template directory is existing - if not, anyone else will report this + if (file_exists("./templates/".$GlobalTemplate)) ErrorLog("Icon '$IconName' +[.png|.jpg|.gif] not found!"); + } + + if (!$Error) + { + $RetVal = ""; + } + + return $RetVal; +} + +?> diff --git a/includes/prepare_template.php b/includes/prepare_template.php new file mode 100755 index 0000000..654260f --- /dev/null +++ b/includes/prepare_template.php @@ -0,0 +1,158 @@ +'."\n"; +$TemplateMainMenu .= '

'."\n"; +$TemplateMainMenu .= ' '."\n"; +$TemplateMainMenu .= "\n"; + +$TemplateLogin = ""; +$TemplateLogin .= '
'."\n"; +if (!UserIsLoggedIn()) +{ + $TemplateLogin .= '
'."\n"; + $TemplateLogin .= ' '."\n"; + $TemplateLogin .= ' '."\n"; + $TemplateLogin .= ' '."\n"; + $TemplateLogin .= '
'."\n"; +} +$TemplateLogin .= '
'."\n"; + +/********** + messages +***********/ +$ShowMessageError = (MessageGetErrors()) ? 1:0; +$ShowMessageWarning = (MessageGetWarnings()) ? 1:0; +$ShowMessageSuccess = (MessageGetSuccess()) ? 1:0; + +$TemplateMessage = ""; +if ($ShowMessageError || $ShowMessageWarning || $ShowMessageSuccess) +{ + $TemplateMessage .= '
'; + if ($ShowMessageError) + $TemplateMessage .= '
'.nl2br(htmlentities(MessageGetErrors())).'
'; + if ($ShowMessageWarning) + $TemplateMessage .= '
'.nl2br(htmlentities(MessageGetWarnings())).'
'; + if ($ShowMessageSuccess) + $TemplateMessage .= '
'.nl2br(htmlentities(MessageGetSuccess())).'
'; + $TemplateMessage .= '
'; +} + +/*********************** + include java scripts +************************/ +$JSInclude = ""; +$JSFileArray = file ("./includes/java_scripts.php"); +foreach ($JSFileArray as $JSFileArrayLine) + $JSInclude .= $JSFileArrayLine; +$GlobalContent = $JSInclude.$GlobalContent; + + +/********** + Content +***********/ +$TemplateBody='
'."\n".$GlobalContent.'
'; + +?> diff --git a/includes/user.php b/includes/user.php new file mode 100755 index 0000000..0874dc4 --- /dev/null +++ b/includes/user.php @@ -0,0 +1,175 @@ +0) + { + global $GlobalMysqlHandler; + $RightsQuery = "SELECT `$Right` FROM `UserRights` WHERE `Id` =".$_SESSION['Id']; + $RightsQuery = mysqli_query($GlobalMysqlHandler, $RightsQuery); + if ($RightsQuery && mysqli_num_rows($RightsQuery)) + { + $RightData = mysqli_fetch_array($RightsQuery); + $Ret=(strtolower($RightData[$Right])=="true")? 1:0; + } + else + { + ErrorLog("[user.php] User with id '".$_SESSION['Id']."' not found in table 'UserRights' while asking for right '$Right'!"); + } + } + return ($Ret); +} + +function UserLoadSettings() +{ + $Ret=0; + global $GlobalMysqlHandler; + + global $GlobalTemplate; + global $CfgStdTemplate; + + global $GlobalLanguage; + global $CfgStdLanguage; + + if (isset($_SESSION['Id']) && $_SESSION['Id']>0) + { + $LoadQuery="SELECT `Template` , `Language` FROM `User` WHERE `Id` =".$_SESSION['Id']; + $LoadQuery=mysqli_query($GlobalMysqlHandler, $LoadQuery); + if ($LoadQuery) + { + $LoadValue=mysqli_fetch_array($LoadQuery); + $GlobalTemplate=($LoadValue['Template'])? $LoadValue['Template']:$CfgStdTemplate; + $GlobalLanguage=($LoadValue['Language'])? $LoadValue['Language']:$CfgStdLanguage; + $Ret=1; + } + else + { + ErrorLog("[user.php] Not able to load vars for user with id = ".$_SESSION['Id']."!"); + } + } + return $Ret; +} + +?> diff --git a/index.php b/index.php new file mode 100755 index 0000000..e1448a8 --- /dev/null +++ b/index.php @@ -0,0 +1,110 @@ +$StartTime s
\n"; + echo "Stop time: $StopTime s
\n"; + } + echo "Script execution time: $TimeSpan ms
\n"; +} +?> diff --git a/languages/English.lng b/languages/English.lng new file mode 100755 index 0000000..e2bb76c --- /dev/null +++ b/languages/English.lng @@ -0,0 +1,158 @@ +MenuHome = Home + +MenuParts = Parts +MenuPartsByType = Party By Type +MenuPartsByStore = Parts By Store +MenuPartsAddNewPart = Add New Part + +MenuAdmin = Administration +MenuAdminStores = Stores +MenuAdminTypes = Types +MenuAdminPacks = Packages +MenuAdminVendors = Vendors +MenuAdminUsers = Users +MenuAdminConfig = Config + +MenuTools = Tools +MenuToolsRepOrder = Repeat Order +MenuToolsPartStat = Part Statistic +MenuToolsConsCheck = Consistency Check + +MenuHelp = Help +MenuHelpUserGuide = User Guide +MenuHelpAdminGuide = Admin Guide +MenuHelpDeveloperGuide = Developer Guide +MenuHelpVersionHistory = Version History +MenuHelpAbout = About + +MenuUserSettings = User Settings +MenuUserLogout = Logout + +MenuLogin = Login +MenuLoginName = Login Name +MenuLoginPassword = Password + +ScentenceNoLoginSpecified = No login specified! +ScentenceLoggedAsRoot = Logged as root user. +ScentenceLoginFailed = Login failed! +ScentenceLoginTimeoutExpired = Login Timeout expired! +ScentenceLoginSucceeded = Login successfull. +ScentenceNoUserRights = You have not the required rights for this! +SentencePageNotFound = Page not found! +SentenceLoginForbidden = This login was not allowed! +SentencePasswordForbidden = This password was not allowed! +SentenceDatabaseError = Databse error! +SentenceNewUserAdded = New user has been added. +SentenceUserUpdated = User entry has been updated. +SentenceUserDeleted = User has been deleted. +SentencePasswordChangedWarning = User password has been changed! +SentenceTemplateNotFound = Template not found! +SentenceLockIsActive = Item is locked by another user. +SentenceUnknownError = Unkown error! +SentenceNestedListMoved = Element was moved. +SentencePleaseSelectPartType = Please select the type of the part. +SentencePleaseSelectPartStorage = Please select the store of the part. +SentencePleaseSelectPackage = Please select the package of the part. +SentencePleaseSpecifyPartValues = Please specify the values of the part. +SentenceNoNameOrValueOrDescriptionGiven = No name, value or description given! +SentenceNewPartAdded = New part was added to database. +SentencePartHasBeenUpdated = Part has been updated. +SentenceNoFileGiven = No file given! +SentenceNotEnoughDiskSpace = There is not enough free disk space! +SentenceFileAlreadyExist = File already exist! +SentenceCanNotCopyFile = Can not copy file! +SentenceFileHasBeenUploaded = File has been uploaded. +SentenceDownloadEdited = Download has been edited. +SentenceDownloadDeleted = Download deleted. +SentenceShureToDeletePart = Are you shure to remove the part from the database? +SentencePartDeleted = Part was removed from database. + +TagTitleEditUserLogin = Edit this users login name. +TagTitleEditUserPassword = Edit this users password or leave untouched to keep the old. +TagTitleEditUserRight = Check or uncheck to set or reset this users right. +TagTitleDeleteUser = Delete this user. +TagTitleDeleteEntry = Delete Item +TagTitleEdit = Edit Item +TagTitleDelete = Delete Item +TagTitleCancel = Cancel +TagTitleMove = Move Item +TagTitleMoveUp = Move Item Up + +ButtonEdit = Edit +ButtonSave = Save +ButtonNew = New +ButtonProceed = Proceed +ButtonUpload = Upload + +UserSettingsTableHead = user settings +UserSettingsSetNewPassword = set new password +UserSettingsConfirmNewPassword = confirm new password +UserSettingsLanguage = language +UserSettingsTemplate = template +UserSettingsDefault = default + +EditVendorsId = id +EditVendorsName = vendor +EditVendorsHomepage = homepage +EditVendorsMinBill = minimum bill +EditVendorsShippingCost = shipping cost +EditVendorsEdit = Edit +EditVendorsSentenceVendorNameRequired = Name of the Vendor is required! +EditVendorsSentenceVendorNewAdded = New vendor added. +EditVendorsSentenceVendorDeleted = Vendor deleted. +EditVendorsSentenceVendorUpated = Vendor updated. + +EditStoresNoStoreNameGiven = You need to give a name for the store! +EditStoresNewStoreAdded = New store added. +EditStoresStoreDeleted = Store deleted. + +EditPackagesNoPackageNameGiven = You need to give a name for the package! +EditPackagesNewPackageAdded = New package added. +EditPackagesPackageDeleted = Package deleted. + +EditTypesNoTypeNameGiven = You need to give a name for the type! +EditTypesNewTypeAdded = New type added. +EditTypesTypeDeleted = Type deleted. +EditTypesName = Name +EditTypesShortName = Abbr. +EditTypesNameValue1 = Value1 +EditTypesNameValue2 = Value2 +EditTypesNameValue3 = Value3 +EditTypesUnitValue1 = Unit1 +EditTypesUnitValue2 = Unit2 +EditTypesUnitValue3 = Unit3 + +PartsName = Name +PartsShortDescription = Short Description +PartsLongDescription = Long Description +PartsVendor = Vendor +PartsManufactorLink = Manufactor Link +PartsNotSpecified = not specified +PartsVendorLink = Vendor Link +PartsPackageUnit = Package Unit +PartsPrice = Price +PartsMinOrderQuantity = Minimum Order Quantity +PartsQuantity = Actual Quantity +PartsMinQuantity = Minimum Quantity +PartsPackage = Package +PartsObsolete = Obsolete +PartsObsoleteOnly = Only Obsolete +PartsObsoleteNon = Non Obsolete +PartsObsoleteAll = All Parts +PartsType = Type +PartsStorage = Store +PartsValues = Values +PartsDownloads = Downloads +PartsPicture = Picture + +DownloadsName = Name +DownloadsPath = Path +DownloadsSize = Size +DownloadsType = Type + +RepeatOrderPackagesToOrder = Packages To Order +RepeatOrderSumPrice = Sum Price + +ConsCheckCreateDatabaseStructure = Create Database Structure +ConsCheckRepairIncorrectType = Repair incorrect parts type +COnsCheckIncorrectTypeParts = Number of parts with incorrect types diff --git a/languages/German.lng b/languages/German.lng new file mode 100755 index 0000000..7682433 --- /dev/null +++ b/languages/German.lng @@ -0,0 +1,158 @@ +MenuHome = Startseite + +MenuParts = Bauteile +MenuPartsByType = Teile nach Typ +MenuPartsByStore = Teile nach Lager +MenuPartsAddNewPart = Neues Bauteil + +MenuAdmin = Administration +MenuAdminStores = Lager +MenuAdminTypes = Typen +MenuAdminPacks = Gehäuse +MenuAdminVendors = Lieferanten +MenuAdminUsers = Benutzer +MenuAdminConfig = Config + +MenuTools = Werkzeuge +MenuToolsRepOrder = Nachbestellung +MenuToolsPartStat = Bauteil Statistik +MenuToolsConsCheck = Konsistenz Prüfung + +MenuHelp = Hilfe +MenuHelpUserGuide = Benutzerhandbuch +MenuHelpAdminGuide = Administrationshandbuch +MenuHelpDeveloperGuide = Entwicklerhandbuch +MenuHelpVersionHistory = Versionsgeschichte +MenuHelpAbout = Über + +MenuUserSettings = Benutzer Einstellungen +MenuUserLogout = Logout + +MenuLogin = Login +MenuLoginName = Login Name +MenuLoginPassword = Passwort + +ScentenceNoLoginSpecified = Kein Login angegeben! +ScentenceLoggedAsRoot = Eingeloggt als root! +ScentenceLoginFailed = Login fehlgeschlagen! +ScentenceLoginTimeoutExpired = Login Zeitlimit überschritten! +ScentenceLoginSucceeded = Login erfolgreich. +ScentenceNoUserRights = Sie besitzen nicht die nötigen Benutzerrechte! +SentencePageNotFound = Die Seite wurde nicht gefunden! +SentenceLoginForbidden = Dieser Login ist nicht erlaubt! +SentencePasswordForbidden = Dieses Passwort ist nicht erlaubt! +SentenceDatabaseError = Datenbank fehler! +SentenceNewUserAdded = Neuer Benutzer wurde zugefügt. +SentenceUserUpdated = Benutzereintrag wurde gespeichert. +SentenceUserDeleted = Benutzer wurde gelöscht. +SentencePasswordChangedWarning = Benutzer Passwort wurde geändert! +SentenceTemplateNotFound = Das Template wurde nicht gefunden! +SentenceLockIsActive = Dieser Posten ist durch einen anderen Benutzer gesperrt. +SentenceUnknownError = Unbekannter Fehler! +SentenceNestedListMoved = Das Element wurde verschoben. +SentencePleaseSelectPartType = Bitte wählen sie den Typ des Bauteils. +SentencePleaseSelectPartStorage = Bitte wählen sie den Lagerort des Bauteils. +SentencePleaseSelectPackage = Bitte wählen sie den Gehäusetyp des Bauteils. +SentencePleaseSpecifyPartValues = Bitte geben sie die Werte des Bauteils ein. +SentenceNoNameOrValueOrDescriptionGiven = Kein Name, Wert oder Beschreibung angegeben! +SentenceNewPartAdded = Neues Bauteil wurde der Datenbank hinzugefügt. +SentencePartHasBeenUpdated = Bauteil wurde gespeichert. +SentenceNoFileGiven = Keine Datei angegeben! +SentenceNotEnoughDiskSpace = Nicht genügend Speicherplatz! +SentenceFileAlreadyExist = Die Datei existiert bereits! +SentenceCanNotCopyFile = Datei kann nicht kopiert werden! +SentenceFileHasBeenUploaded = Datei wurde hochgeladen. +SentenceDownloadEdited = Download wurde bearbeitet. +SentenceDownloadDeleted = Download wurde gelöscht. +SentenceShureToDeletePart = Sind sie sicher, dass sie das Bauteil aus der Datenbank löschen wollen? +SentencePartDeleted = Bauteil wurde aus der Datenbank gelöscht. + +TagTitleEditUserLogin = Benutzer login bearbeiten. +TagTitleEditUserPassword = Passwort ändern oder frei lassen. +TagTitleEditUserRight = Markieren setzt dieses Benutzerrecht. +TagTitleDeleteUser = Benutzer löschen. +TagTitleDeleteEntry = Eintrag löschen. +TagTitleEdit = Eintrag bearbeiten. +TagTitleDelete = Eintrag löschen. +TagTitleCancel = Abbrechen +TagTitleMove = Eintrag verschieben. +TagTitleMoveUp = Eintrag nach oben verschieben. + +ButtonEdit = Bearbeiten +ButtonSave = Speichern +ButtonNew = Neu +ButtonProceed = Fortfahren +ButtonUpload = Hochladen + +UserSettingsTableHead = Benutzer Einstellungen +UserSettingsSetNewPassword = Neues Passwort setzen +UserSettingsConfirmNewPassword = Neues Passwort bestätigen +UserSettingsLanguage = Sprache +UserSettingsTemplate = Template +UserSettingsDefault = Standart + +EditVendorsId = Id +EditVendorsName = Händler +EditVendorsHomepage = Homepage +EditVendorsMinBill = Mindestbestellwert +EditVendorsShippingCost = Versandkosten +EditVendorsEdit = Ändern +EditVendorsSentenceVendorNameRequired = Name des Händlers wird benötigt! +EditVendorsSentenceVendorNewAdded = Neuer Händler eingetragen. +EditVendorsSentenceVendorDeleted = Händler gelöscht. +EditVendorsSentenceVendorUpated = Händler geändert. + +EditStoresNoStoreNameGiven = Sie müssen einen Namen für das Lager angeben! +EditStoresNewStoreAdded = Neues Lager angelegt. +EditStoresStoreDeleted = Lager gelöscht. + +EditPackagesNoPackageNameGiven = Sie müssen einen Gehäusenamen angeben! +EditPackagesNewPackageAdded = Neues Gehäuse hinzugefügt. +EditPackagesPackageDeleted = Gehäuse gelöscht. + +EditTypesNoTypeNameGiven = Sie müssen einen Typennamen angeben! +EditTypesNewTypeAdded = Neuer Typ zugefügt. +EditTypesTypeDeleted = Typ gelöscht. +EditTypesName = Name +EditTypesShortName = Abk. +EditTypesNameValue1 = Wert1 +EditTypesNameValue2 = Wert2 +EditTypesNameValue3 = Wert2 +EditTypesUnitValue1 = Einheit1 +EditTypesUnitValue2 = Einheit2 +EditTypesUnitValue3 = Einheit3 + +PartsName = Name +PartsShortDescription = kuzre Beschreibung +PartsLongDescription = lange Beschreibung +PartsVendor = Händler +PartsManufactorLink = Hersteller Link +PartsNotSpecified = nicht angegeben +PartsVendorLink = Händler Link +PartsPackageUnit = Verpackungseinheit +PartsPrice = Preis +PartsMinOrderQuantity = Mindestbestellmenge +PartsQuantity = Aktuelle Anzahl +PartsMinQuantity = Mindest Anzahl +PartsPackage = Gehäuse +PartsObsolete = Obsolet +PartsObsoleteOnly = nur Obsolet +PartsObsoleteNon = keine Obsolete +PartsObsoleteAll = alle Bauteile +PartsType = Typ +PartsStorage = Lager +PartsValues = Werte +PartsDownloads = Downloads +PartsPicture = Bild + +DownloadsName = Name +DownloadsPath = Pfad +DownloadsSize = Größe +DownloadsType = Typ + +RepeatOrderPackagesToOrder = Bestellmenge +RepeatOrderSumPrice = Gesamtpreis + +ConsCheckCreateDatabaseStructure = Datenbank Struktur erzeugen +ConsCheckRepairIncorrectType = Kaputte Bauteiltypen reparieren +COnsCheckIncorrectTypeParts = Anzahl kaputter Bauteiltypen diff --git a/pages/add_part.php b/pages/add_part.php new file mode 100755 index 0000000..9f8f030 --- /dev/null +++ b/pages/add_part.php @@ -0,0 +1,125 @@ + diff --git a/pages/add_part_package.php b/pages/add_part_package.php new file mode 100755 index 0000000..2b984b5 --- /dev/null +++ b/pages/add_part_package.php @@ -0,0 +1,73 @@ +\n"; + else + $GlobalContent .= "
    \n"; + + if (mysqli_num_rows($ListQuery)) + { + while ($ListData=mysqli_fetch_array($ListQuery)) + { + $GlobalContent .= "
  • \n"; + if (LockIsActive('Types',$ListData['Id']) || $ParentIsLocked) + { + $GlobalContent .= OtherGetIcon('LockActive.png',0); + $ParentIsLocked = 1; + } + else + { + $GlobalContent .= ' '; + } + $GlobalContent .= " ".LangStr2Html($ListData['Name']).""; + $GlobalContent .= " (".NestedListCountSubElements($ListData['Id'],'Packages').")"; + $GlobalContent .= " \n
  • \n"; + + WritePackageList($ListData['Id'],$ParentIsLocked); + } + } + $GlobalContent .= "
\n"; +} + + +if (UserHasRight('EditParts')) +{ + /////////////// + // open sublist + if ($ToDo=="OpenSublist") + { + if (isset($_GET['SublistId']) && $_GET['SublistId']) + { + NestedListVisibilityToggle($_GET['SublistId'], 'AddPartPackage'); + } + else + { + ErrorLog("[add_part1.php] No SublistId to open type!"); + MessageError(LangSpell('SentenceUnknownError')); + } + $ToDo=""; + } + + $GlobalContent .= '

'.LangSpellHtml('SentencePleaseSelectPackage').'

'; + $GlobalContent .= '
'; + WritePackageList(0, 0); + $GlobalContent .= ''; + $GlobalContent .= '
'; +} +else +{ + MessageError(LangSpell("ScentenceNoUserRights")); +} +?> diff --git a/pages/add_part_storage.php b/pages/add_part_storage.php new file mode 100755 index 0000000..2f0b463 --- /dev/null +++ b/pages/add_part_storage.php @@ -0,0 +1,73 @@ +\n"; + else + $GlobalContent .= "
    \n"; + + if (mysqli_num_rows($ListQuery)) + { + while ($ListData=mysqli_fetch_array($ListQuery)) + { + $GlobalContent .= "
  • \n"; + if (LockIsActive('Types',$ListData['Id']) || $ParentIsLocked) + { + $GlobalContent .= OtherGetIcon('LockActive.png',0); + $ParentIsLocked = 1; + } + else + { + $GlobalContent .= ' '; + } + $GlobalContent .= " ".LangStr2Html($ListData['Name']).""; + $GlobalContent .= " (".NestedListCountSubElements($ListData['Id'],'Storages').")"; + $GlobalContent .= " \n
  • \n"; + + WriteStorageList($ListData['Id'],$ParentIsLocked); + } + } + $GlobalContent .= "
\n"; +} + + +if (UserHasRight('EditParts')) +{ + /////////////// + // open sublist + if ($ToDo=="OpenSublist") + { + if (isset($_GET['SublistId']) && $_GET['SublistId']) + { + NestedListVisibilityToggle($_GET['SublistId'], 'AddPartStorage'); + } + else + { + ErrorLog("[add_part1.php] No SublistId to open type!"); + MessageError(LangSpell('SentenceUnknownError')); + } + $ToDo=""; + } + + $GlobalContent .= '

'.LangSpellHtml('SentencePleaseSelectPartStorage').'

'; + $GlobalContent .= '
'; + WriteStorageList(0, 0); + $GlobalContent .= ''; + $GlobalContent .= '
'; +} +else +{ + MessageError(LangSpell("ScentenceNoUserRights")); +} +?> diff --git a/pages/add_part_type.php b/pages/add_part_type.php new file mode 100755 index 0000000..f1ab74a --- /dev/null +++ b/pages/add_part_type.php @@ -0,0 +1,75 @@ +\n"; + else + $GlobalContent .= "\n"; +} + + +if (UserHasRight('EditParts')) +{ + /////////////// + // open sublist + if ($ToDo=="OpenSublist") + { + if (isset($_GET['SublistId']) && $_GET['SublistId']) + { + NestedListVisibilityToggle($_GET['SublistId'], 'AddPartType'); + } + else + { + ErrorLog("[add_part1.php] No SublistId to open type!"); + MessageError(LangSpell('SentenceUnknownError')); + } + $ToDo=""; + } + + ////////// + // Content + $GlobalContent .= '

'.LangSpellHtml('SentencePleaseSelectPartType').'

'; + $GlobalContent .= '
'; + WriteTypeList(0, 0); + $GlobalContent .= ''; + $GlobalContent .= '
'; +} +else +{ + MessageError(LangSpell("ScentenceNoUserRights")); +} +?> diff --git a/pages/add_part_values.php b/pages/add_part_values.php new file mode 100755 index 0000000..9a84bd7 --- /dev/null +++ b/pages/add_part_values.php @@ -0,0 +1,107 @@ +'.LangSpellHtml('SentencePleaseSpecifyPartValues').''; + $GlobalContent .= '
'; + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + if ($TypeValues[0][0]) + { + $GlobalContent .= ''; + $GlobalContent .= ''; + } + + if ($TypeValues[1][0]) + { + $GlobalContent .= ''; + $GlobalContent .= ''; + } + + if ($TypeValues[2][0]) + { + $GlobalContent .= ''; + $GlobalContent .= ''; + } + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= '
'.LangSpellHtml('PartsObsolete').''; + $GlobalContent .= '
'.LangSpellHtml('PartsName').''; + $GlobalContent .= '
'.$TypeValues[0][0].''; + $GlobalContent .= ' '.$TypeValues[0][1].'
'.$TypeValues[1][0].''; + $GlobalContent .= ' '.$TypeValues[1][1].'
'.$TypeValues[2][0].''; + $GlobalContent .= ' '.$TypeValues[2][1].'
'.LangSpellHtml('PartsShortDescription').''; + $GlobalContent .= '
'.LangSpellHtml('PartsLongDescription').''; + $GlobalContent .= '
'.LangSpellHtml('PartsVendor').''; + $GlobalContent .= '
'.LangSpellHtml('PartsVendorLink').''; + $GlobalContent .= '
'.LangSpellHtml('PartsManufactorLink').''; + $GlobalContent .= '
'.LangSpellHtml('PartsPackageUnit').''; + $GlobalContent .= '
'.LangSpellHtml('PartsPrice').''; + $GlobalContent .= '
'.LangSpellHtml('PartsMinOrderQuantity').''; + $GlobalContent .= '
'.LangSpellHtml('PartsQuantity').''; + $GlobalContent .= '
'.LangSpellHtml('PartsMinQuantity').''; + $GlobalContent .= '
'; + $GlobalContent .= ''; + $GlobalContent .= '
'; + $GlobalContent .= '
'; +} +else +{ + MessageError(LangSpell("ScentenceNoUserRights")); +} +?> diff --git a/pages/consistency_check.php b/pages/consistency_check.php new file mode 100755 index 0000000..9c73705 --- /dev/null +++ b/pages/consistency_check.php @@ -0,0 +1,4 @@ + diff --git a/pages/consistency_check_databse.php b/pages/consistency_check_databse.php new file mode 100755 index 0000000..9450915 --- /dev/null +++ b/pages/consistency_check_databse.php @@ -0,0 +1,146 @@ +".LangSpellHtml('ConsCheckCreateDatabaseStructure').""; + $GlobalContent .= ''.LangSpellHtml('ButtonProceed').''; + } +} +?> diff --git a/pages/consistency_check_incorrect_types.php b/pages/consistency_check_incorrect_types.php new file mode 100755 index 0000000..1fe0dbe --- /dev/null +++ b/pages/consistency_check_incorrect_types.php @@ -0,0 +1,81 @@ +".LangSpellHtml('ConsCheckRepairIncorrectType').""; + $GlobalContent .= LangSpellHtml('COnsCheckIncorrectTypeParts') . ": " . $IncorrectTypes . "
"; + $GlobalContent .= ''.LangSpellHtml('ButtonProceed').''; +} +?> diff --git a/pages/edit_config.php b/pages/edit_config.php new file mode 100755 index 0000000..ef6e622 --- /dev/null +++ b/pages/edit_config.php @@ -0,0 +1,165 @@ +\n"); + fclose($ConfigFileHandler); + } + include("./includes/load_config.php"); +} + + +if (UserGetLogin()=="root") +{ + ////////////////// + //global content + include ("config.php"); + $GlobalContent.='
'."\n"; + $GlobalContent.=''."\n"; + + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + + $GlobalContent.='
CfgStdTemplate'."\n"; + $GlobalContent.='
CfgStdLanguage'."\n"; + $GlobalContent.='
CfgStdTimeZone'."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '.OtherGetIcon('Help',"Button")."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.='
CfgStdTimeFormat'."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '.OtherGetIcon('Help',"Button")."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.='
'.LangSpellHtml('UserSettingsSetNewPassword').'
'.LangSpellHtml('UserSettingsConfirmNewPassword').'
CfgLogfile
CfgLogfileMaxLines
CfgSetDebugMode
CfgMysqlHost
CfgMysqlUser
CfgMysqlPwd
CfgMysqlDatabase
CfgLoginTimeout
CfgLockAutoReleaseTime
'.LangSpellHtml('ButtonSave').'
'."\n"; + $GlobalContent.='
'."\n"; +} +else +{ + MessageError(LangSpell("ScentenceNoUserRights")); +} +?> diff --git a/pages/edit_packages.php b/pages/edit_packages.php new file mode 100755 index 0000000..a5b71e8 --- /dev/null +++ b/pages/edit_packages.php @@ -0,0 +1,299 @@ +\n"; + else + $GlobalContent .= "
    \n"; + + if (mysqli_num_rows($ListQuery)) + { + while ($ListData=mysqli_fetch_array($ListQuery)) + { + if ($EditPackagesEditId + && ($EditPackagesEditId==$ListData['Id']) + && !( LockIsActive('Packages',$ListData['Id']) || $ParentIsLocked) + ) + { //edit entry + $GlobalContent .= "
  • \n"; + $GlobalContent .= ' '.OtherGetIcon('Delete',"Button").''; + $GlobalContent .= '
    '; + $GlobalContent .= ' '; + $GlobalContent .= ''; + $GlobalContent .= '"; + $GlobalContent .= ''; + $GlobalContent .= '
    '; + $GlobalContent .= ' '.OtherGetIcon('Cancel',"Button").'' ."\n"; + $GlobalContent .= "
  • \n"; + } + else + { //just show entry + $GlobalContent .= "
  • \n"; + if (LockIsActive('Packages',$ListData['Id']) || $ParentIsLocked) + { + $GlobalContent .= ' '.OtherGetIcon('LockActive'); + $ParentIsLocked = 1; + } + elseif (UserHasRight('EditPackages')) + { + $GlobalContent .= ' '; + $GlobalContent .= OtherGetIcon('Edit',"Button"); + } + $GlobalContent .= " ".LangStr2Html($ListData['Name']).""; + $GlobalContent .= " (".NestedListCountSubElements($ListData['Id'],'Packages').")"; + $GlobalContent .= " \n
  • \n"; + } + + WritePackagesList($ListData['Id'],$ParentIsLocked); + } + } + if (!$EditPackagesEditId && UserHasRight('EditPackages')) + { + $GlobalContent .= "
  • \n"; + $GlobalContent .= '
    '."\n"; + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + $GlobalContent .= '
    '."\n"; + $GlobalContent .= "
  • \n"; + } + $GlobalContent .= "
\n"; +} + +if (UserHasRight('EditPackages')) +{ + ///////////////// + //edit package save + if ($ToDo=="EditpackageSave") + { + if (isset($_POST['Id']) && $_POST['Id'] && isset($_POST['Name']) && $_POST['Name']) + { + global $GlobalMysqlHandler; + $Id = $_POST['Id']; + $Name = $_POST['Name']; + $MoveId = (isset($_POST['MoveToId']))? $_POST['MoveToId']:0; + + if ($MoveId) + { + $MoveQuery = ""; + if ($MoveId=="#MOVE#ITEM#UP#") + { + $FirstParentId = NestedListGetParentId($Id,'Packages'); + $MoveId = NestedListGetParentId($FirstParentId,'Packages'); + } + else + { + $FirstParentId = NestedListGetParentId($Id,'Packages'); + } + + $MoveQuery="UPDATE `Packages` SET `ParentId` = '$MoveId' WHERE `Id` =$Id LIMIT 1 ;"; + + if (mysqli_query($GlobalMysqlHandler, $MoveQuery)) + { + MessageSuccess(LangSpell('SentenceNestedListMoved')); + NestedListVisibilityUnset($FirstParentId,'EditPackages'); + NestedListVisibilitySet($MoveId,'EditPackages'); + } + else + { + MessageError(LangSpell('SentenceDatabaseError')); + ErrorLog("[edit_pacakges.php] Db error on moving element with id $Id to parent id $MoveId"); + } + } + + $ChangeNameQuery="UPDATE `Packages` SET `Name` = '$Name' WHERE `Id` =$Id LIMIT 1 ;"; + if (!mysqli_query($GlobalMysqlHandler, $ChangeNameQuery)) + { + MessageError(LangSpell('SentenceDatabaseError')); + ErrorLog("[edit_pacakges.php] Db error on naming element with id $Id"); + } + } + else + { + if (isset($_POST['Name']) && !trim($_POST['Name'])) + MessageError(LangSpell('EditPackagesNoPackageNameGiven')); + else + { + ErrorLog("[edit_pacakges.php] No Id to move down!"); + MessageError(LangSpell('SentenceUnknownError')); + } + } + + $ToDo=""; + } + + ///////////////// + // delete package + if ($ToDo=="DeletePackage") + { + if (isset($_GET['Id']) && $_GET['Id']) + { + $Id = $_GET['Id']; + if (!LockIsActive('Packages',$Id)) + { + global $GlobalMysqlHandler; + $DeleteQuery="DELETE FROM `Packages` WHERE `Id` = $Id LIMIT 1"; + if (mysqli_query($GlobalMysqlHandler, $DeleteQuery)) + { + MessageSuccess(LangSpell('EditPackagesPackageDeleted')); + } + else + { + MessageError(LangSpell('SentenceDatabaseError')); + } + } + else + { + MessageError(LangSpell('SentenceLockIsActive')); + } + } + else + { + ErrorLog("[edit_pacakges.php] No Id to delete package!"); + MessageError(LangSpell('SentenceUnknownError')); + } + $ToDo=""; + } + + //////////////// + // add new package + if ($ToDo=="NewPackage") + { + if (isset($_GET['ParentId']) && isset($_POST['NewPackageName'])) + { + $ParentId = $_GET['ParentId']; + $NewPackageName = $_POST['NewPackageName']; + if (LockActivate('Packages',$ParentId)) + { + if (trim($NewPackageName)!="") + { + global $GlobalMysqlHandler; + $InsertQuery="INSERT INTO `Packages` ( `Name` , `ParentId` ) VALUES ( '$NewPackageName', '$ParentId' );"; + if (mysqli_query($GlobalMysqlHandler, $InsertQuery)) + { + MessageSuccess(LangSpell('EditPackagesNewPackageAdded')); + } + else + { + MessageError(LangSpell('SentenceDatabaseError')); + } + } + else + { + MessageError(LangSpell('EditPackagesNoPackageNameGiven')); + } + } + else + { + MessageError(LangSpell('SentenceLockIsActive')); + } + } + else + { + if (!isset($_GET['ParentId'])) + ErrorLog("[edit_pacakges.php] No ParentId to add new package!"); + if (!isset($_POST['NewPackageName'])) + ErrorLog("[edit_pacakges.php] No NewPackageName to add new package!"); + MessageError(LangSpell('SentenceUnknownError')); + } + $ToDo=""; + } + + /////////////// + // edit package + if ($ToDo=="EditPackage") + { + if (isset($_GET['Id']) && $_GET['Id']) + { + $EditId = $_GET['Id']; + if (LockActivate('Packages',$EditId)) + { + $EditPackagesEditId=$EditId; + //NestedListVisibilityUnset($EditId, 'EditPackages'); + } + else + { + MessageError(LangSpell('SentenceLockIsActive')); + } + } + else + { + ErrorLog("[edit_pacakges.php] No Id to edit package"); + MessageError(LangSpell('SentenceUnknownError')); + } + $ToDo = ""; + } + + ////////////////////// + // cancel edit package + if ($ToDo=="CancelEditPackage") + { + if (isset($_GET['Id']) && $_GET['Id']) + { + $EditId = $_GET['Id']; + if (LockRelease('Packages',$EditId)) + { + $EditPackagesEditId=0; + } + else + { + MessageError(LangSpell('SentenceLockIsActive')); + } + } + else + { + ErrorLog("[edit_pacakges.php] No Id to release loack on package"); + MessageError(LangSpell('SentenceUnknownError')); + } + $ToDo = ""; + } +} + +if (UserHasRight('EditPackages') || UserHasRight('ViewSTPV')) +{ + /////////////// + // open sublist + if ($ToDo=="OpenSublist") + { + if (isset($_GET['SublistId']) && $_GET['SublistId']) + { + NestedListVisibilityToggle($_GET['SublistId'], 'EditPackages'); + } + else + { + ErrorLog("[edit_pacakges.php] No SublistId to open package!"); + MessageError(LangSpell('SentenceUnknownError')); + } + $ToDo=""; + } + + /////////////// + // sow packages + if ($ToDo=="") + WritePackagesList(0,0); +} +else +{ + MessageError(LangSpell("ScentenceNoUserRights")); +} +?> diff --git a/pages/edit_stores.php b/pages/edit_stores.php new file mode 100755 index 0000000..8b05798 --- /dev/null +++ b/pages/edit_stores.php @@ -0,0 +1,299 @@ +\n"; + else + $GlobalContent .= "
    \n"; + + if (mysqli_num_rows($ListQuery)) + { + while ($ListData=mysqli_fetch_array($ListQuery)) + { + if ($EditStoresEditId + && ($EditStoresEditId==$ListData['Id']) + && !( LockIsActive('Storages',$ListData['Id']) || $ParentIsLocked) + ) + { //edit entry + $GlobalContent .= "
  • \n"; + $GlobalContent .= ' '.OtherGetIcon('Delete',"Button").''; + $GlobalContent .= '
    '; + $GlobalContent .= ' '; + $GlobalContent .= ''; + $GlobalContent .= '"; + $GlobalContent .= ''; + $GlobalContent .= '
    '; + $GlobalContent .= ' '.OtherGetIcon('Cancel',"Button").'' ."\n"; + $GlobalContent .= "
  • \n"; + } + else + { //just show entry + $GlobalContent .= "
  • \n"; + if (LockIsActive('Storages',$ListData['Id']) || $ParentIsLocked) + { + $GlobalContent .= ' '.OtherGetIcon('LockActive'); + $ParentIsLocked = 1; + } + elseif (UserHasRight('EditStores')) + { + $GlobalContent .= ' '; + $GlobalContent .= OtherGetIcon('Edit',"Button"); + } + $GlobalContent .= " ".LangStr2Html($ListData['Name']).""; + $GlobalContent .= " (".NestedListCountSubElements($ListData['Id'],'Storages').")"; + $GlobalContent .= " \n
  • \n"; + } + + WriteStoreList($ListData['Id'],$ParentIsLocked); + } + } + if (!$EditStoresEditId && UserHasRight('EditStores')) + { + $GlobalContent .= "
  • \n"; + $GlobalContent .= '
    '."\n"; + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + $GlobalContent .= '
    '."\n"; + $GlobalContent .= "
  • \n"; + } + $GlobalContent .= "
\n"; +} + +if (UserHasRight('EditStores')) +{ + ///////////////// + //edit store save + if ($ToDo=="EditStoreSave") + { + if (isset($_POST['Id']) && $_POST['Id'] && isset($_POST['Name']) && $_POST['Name']) + { + global $GlobalMysqlHandler; + $Id = $_POST['Id']; + $Name = $_POST['Name']; + $MoveId = (isset($_POST['MoveToId']))? $_POST['MoveToId']:0; + + if ($MoveId) + { + $MoveQuery = ""; + if ($MoveId=="#MOVE#ITEM#UP#") + { + $FirstParentId = NestedListGetParentId($Id,'Storages'); + $MoveId = NestedListGetParentId($FirstParentId,'Storages'); + } + else + { + $FirstParentId = NestedListGetParentId($Id,'Storages'); + } + + $MoveQuery="UPDATE `Storages` SET `ParentId` = '$MoveId' WHERE `Id` =$Id LIMIT 1 ;"; + + if (mysqli_query($GlobalMysqlHandler, $MoveQuery)) + { + MessageSuccess(LangSpell('SentenceNestedListMoved')); + NestedListVisibilityUnset($FirstParentId,'EditStorage'); + NestedListVisibilitySet($MoveId,'EditStorage'); + } + else + { + MessageError(LangSpell('SentenceDatabaseError')); + ErrorLog("[edit_stored.php] Db error on moving element with id $Id to parent id $MoveId"); + } + } + + $ChangeNameQuery="UPDATE `Storages` SET `Name` = '$Name' WHERE `Id` =$Id LIMIT 1 ;"; + if (!mysqli_query($GlobalMysqlHandler, $ChangeNameQuery)) + { + MessageError(LangSpell('SentenceDatabaseError')); + ErrorLog("[edit_stored.php] Db error on naming element with id $Id"); + } + } + else + { + if (isset($_POST['Name']) && !trim($_POST['Name'])) + MessageError(LangSpell('EditStoresNoStoreNameGiven')); + else + { + ErrorLog("[edit_stores.php] No Id to move!"); + MessageError(LangSpell('SentenceUnknownError')); + } + } + + $ToDo=""; + } + + /////////////// + // delete store + if ($ToDo=="DeleteStore") + { + if (isset($_GET['Id']) && $_GET['Id']) + { + $Id = $_GET['Id']; + if (!LockIsActive('Storages',$Id)) + { + global $GlobalMysqlHandler; + $DeleteQuery="DELETE FROM `Storages` WHERE `Id` = $Id LIMIT 1"; + if (mysqli_query($GlobalMysqlHandler, $DeleteQuery)) + { + MessageSuccess(LangSpell('EditStoresStoreDeleted')); + } + else + { + MessageError(LangSpell('SentenceDatabaseError')); + } + } + else + { + MessageError(LangSpell('SentenceLockIsActive')); + } + } + else + { + ErrorLog("[edit_stores.php] No Id to delete store!"); + MessageError(LangSpell('SentenceUnknownError')); + } + $ToDo=""; + } + + //////////////// + // add new store + if ($ToDo=="NewStore") + { + if (isset($_GET['ParentId']) && isset($_POST['NewStoreName'])) + { + $ParentId = $_GET['ParentId']; + $NewStoreName = $_POST['NewStoreName']; + if (LockActivate('Storages',$ParentId)) + { + if (trim($NewStoreName)!="") + { + global $GlobalMysqlHandler; + $InsertQuery="INSERT INTO `Storages` ( `Name` , `ParentId` ) VALUES ( '$NewStoreName', '$ParentId' );"; + if (mysqli_query($GlobalMysqlHandler, $InsertQuery)) + { + MessageSuccess(LangSpell('EditStoresNewStoreAdded')); + } + else + { + MessageError(LangSpell('SentenceDatabaseError')); + } + } + else + { + MessageError(LangSpell('EditStoresNoStoreNameGiven')); + } + } + else + { + MessageError(LangSpell('SentenceLockIsActive')); + } + } + else + { + if (!isset($_GET['ParentId'])) + ErrorLog("[edit_stores.php] No ParentId to add new store!"); + if (!isset($_POST['NewStoreName'])) + ErrorLog("[edit_stores.php] No NewStoreName to add new store!"); + MessageError(LangSpell('SentenceUnknownError')); + } + $ToDo=""; + } + + ///////////// + // edit store + if ($ToDo=="EditStore") + { + if (isset($_GET['Id']) && $_GET['Id']) + { + $EditId = $_GET['Id']; + if (LockActivate('Storages',$EditId)) + { + $EditStoresEditId=$EditId; + //NestedListVisibilityUnset($EditId, 'EditStorage'); + } + else + { + MessageError(LangSpell('SentenceLockIsActive')); + } + } + else + { + ErrorLog("[edit_stores.php] No Id to edit store"); + MessageError(LangSpell('SentenceUnknownError')); + } + $ToDo = ""; + } + + //////////////////// + // cancel edit store + if ($ToDo=="CancelEditStore") + { + if (isset($_GET['Id']) && $_GET['Id']) + { + $EditId = $_GET['Id']; + if (LockRelease('Storages',$EditId)) + { + $EditStoresEditId=0; + } + else + { + MessageError(LangSpell('SentenceLockIsActive')); + } + } + else + { + ErrorLog("[edit_stores.php] No Id to release loack on storage"); + MessageError(LangSpell('SentenceUnknownError')); + } + $ToDo = ""; + } +} + +if (UserHasRight('EditStores') || UserHasRight('ViewSTPV')) +{ + /////////////// + // open sublist + if ($ToDo=="OpenSublist") + { + if (isset($_GET['SublistId']) && $_GET['SublistId']) + { + NestedListVisibilityToggle($_GET['SublistId'], 'EditStorage'); + } + else + { + ErrorLog("[edit_stores.php] No SublistId to open store!"); + MessageError(LangSpell('SentenceUnknownError')); + } + $ToDo=""; + } + + /////////////// + // sow stores + if ($ToDo=="") + WriteStoreList(0,0); +} +else +{ + MessageError(LangSpell("ScentenceNoUserRights")); +} +?> diff --git a/pages/edit_types.php b/pages/edit_types.php new file mode 100755 index 0000000..b2c6ec9 --- /dev/null +++ b/pages/edit_types.php @@ -0,0 +1,310 @@ +\n"; + else + $GlobalContent .= "
    \n"; + + if (mysqli_num_rows($ListQuery)) + { + while ($ListData=mysqli_fetch_array($ListQuery)) + { + if ($EditTypesEditId + && ($EditTypesEditId==$ListData['Id']) + && !( LockIsActive('Types',$ListData['Id']) || $ParentIsLocked) + ) + { //edit entry + $GlobalContent .= "
  • \n"; + $GlobalContent .= ' '.OtherGetIcon('Delete',"Button").''; + $GlobalContent .= '
    '; + $GlobalContent .= ' '; + $GlobalContent .= LangSpellHtml('EditTypesName').': '; + $GlobalContent .= LangSpellHtml('EditTypesShortName').':'; + $GlobalContent .= '"; + $GlobalContent .= ''; + $GlobalContent .= ' '.OtherGetIcon('Cancel',"Button").'
    ' ."\n"; + $GlobalContent .= LangSpellHtml('EditTypesNameValue1').': '; + $GlobalContent .= LangSpellHtml('EditTypesNameValue2').': '; + $GlobalContent .= LangSpellHtml('EditTypesNameValue3').':
    '; + $GlobalContent .= LangSpellHtml('EditTypesUnitValue1').': '; + $GlobalContent .= LangSpellHtml('EditTypesUnitValue2').': '; + $GlobalContent .= LangSpellHtml('EditTypesUnitValue3').':
    '; + $GlobalContent .= '
    '; + $GlobalContent .= "
  • \n"; + } + else + { //just show entry + $GlobalContent .= "
  • \n"; + if (LockIsActive('Types',$ListData['Id']) || $ParentIsLocked) + { + $GlobalContent .= ' '.OtherGetIcon('LockActive'); + $ParentIsLocked = 1; + } + elseif (UserHasRight('EditTypes')) + { + $GlobalContent .= ' '; + $GlobalContent .= OtherGetIcon('Edit',"Button"); + } + $GlobalContent .= " ".LangStr2Html($ListData['Name']).""; + $GlobalContent .= " (".NestedListCountSubElements($ListData['Id'],'Types').")"; + $GlobalContent .= " \n
  • \n"; + } + + WriteTypeList($ListData['Id'],$ParentIsLocked); + } + } + if (!$EditTypesEditId && UserHasRight('EditTypes')) + { + $GlobalContent .= "
  • \n"; + $GlobalContent .= '
    '."\n"; + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + $GlobalContent .= '
    '."\n"; + $GlobalContent .= "
  • \n"; + } + $GlobalContent .= "
\n"; +} + +if (UserHasRight('EditTypes')) +{ + ///////////////// + //edit type save + if ($ToDo=="EditTypeSave") + { + if (isset($_POST['Id']) && $_POST['Id'] && isset($_POST['Name']) && $_POST['Name'] + && isset($_POST['ShortName']) + && isset($_POST['NameValue1']) && isset($_POST['NameValue2']) && isset($_POST['NameValue3']) + && isset($_POST['UnitValue1']) && isset($_POST['UnitValue2']) && isset($_POST['UnitValue3']) + ) + { + global $GlobalMysqlHandler; + $Id = $_POST['Id']; + $Name = $_POST['Name']; + $MoveId = (isset($_POST['MoveToId']))? $_POST['MoveToId']:0; + + if ($MoveId) + { + $MoveQuery = ""; + if ($MoveId=="#MOVE#ITEM#UP#") + { + $FirstParentId = NestedListGetParentId($Id,'Types'); + $MoveId = NestedListGetParentId($FirstParentId,'Types'); + } + else + { + $FirstParentId = NestedListGetParentId($Id,'Types'); + } + + $MoveQuery="UPDATE `Types` SET `ParentId` = '$MoveId' WHERE `Id` =$Id LIMIT 1 ;"; + + if (mysqli_query($GlobalMysqlHandler, $MoveQuery)) + { + MessageSuccess(LangSpell('SentenceNestedListMoved')); + NestedListVisibilityUnset($FirstParentId,'EditTypes'); + NestedListVisibilitySet($MoveId,'EditTypes'); + } + else + { + MessageError(LangSpell('SentenceDatabaseError')); + ErrorLog("[edit_types.php] Db error on moving element with id $Id to parent id $MoveId"); + } + } + + //$ChangeItemQuery="UPDATE `Types` SET `Name` = '$Name' WHERE `Id` =$Id LIMIT 1 ;"; + $ChangeItemQuery="UPDATE `Types` SET `Name` = '$Name', `ShortName` = '".$_POST['ShortName']."', `NameValue1` = '".$_POST['NameValue1']."', `NameValue2` = '".$_POST['NameValue2']."', `NameValue3` = '".$_POST['NameValue3']."', `UnitValue1` = '".$_POST['UnitValue1']."', `UnitValue2` = '".$_POST['UnitValue2']."', `UnitValue3` = '".$_POST['UnitValue3']."' WHERE `Id` =$Id LIMIT 1 ;"; + if (!mysqli_query($GlobalMysqlHandler, $ChangeItemQuery)) + { + MessageError(LangSpell('SentenceDatabaseError')); + ErrorLog("[edit_types.php] Db error on updating element with id $Id"); + } + } + else + { + if (isset($_POST['Name']) && !trim($_POST['Name'])) + MessageError(LangSpell('EditTypesNoTypeNameGiven')); + else + { + ErrorLog("[edit_types.php] No Id to move down!"); + MessageError(LangSpell('SentenceUnknownError')); + } + } + $ToDo=""; + } + + /////////////// + // delete type + if ($ToDo=="DeleteType") + { + if (isset($_GET['Id']) && $_GET['Id']) + { + $Id = $_GET['Id']; + if (!LockIsActive('Types',$Id)) + { + global $GlobalMysqlHandler; + $DeleteQuery="DELETE FROM `Types` WHERE `Id` = $Id LIMIT 1"; + if (mysqli_query($GlobalMysqlHandler, $DeleteQuery)) + { + MessageSuccess(LangSpell('EditTypesTypeDeleted')); + } + else + { + MessageError(LangSpell('SentenceDatabaseError')); + } + } + else + { + MessageError(LangSpell('SentenceLockIsActive')); + } + } + else + { + ErrorLog("[edit_types.php] No Id to delete type!"); + MessageError(LangSpell('SentenceUnknownError')); + } + $ToDo=""; + } + + //////////////// + // add new type + if ($ToDo=="NewType") + { + if (isset($_GET['ParentId']) && isset($_POST['NewTypeName'])) + { + $ParentId = $_GET['ParentId']; + $NewTypeName = $_POST['NewTypeName']; + if (LockActivate('Types',$ParentId)) + { + if (trim($NewTypeName)!="") + { + global $GlobalMysqlHandler; + $InsertQuery="INSERT INTO `Types` ( `Name` , `ParentId` ) VALUES ( '$NewTypeName', '$ParentId' );"; + if (mysqli_query($GlobalMysqlHandler, $InsertQuery)) + { + MessageSuccess(LangSpell('EditTypesNewTypeAdded')); + } + else + { + MessageError(LangSpell('SentenceDatabaseError')); + } + } + else + { + MessageError(LangSpell('EditTypesNoTypeNameGiven')); + } + } + else + { + MessageError(LangSpell('SentenceLockIsActive')); + } + } + else + { + if (!isset($_GET['ParentId'])) + ErrorLog("[edit_types.php] No ParentId to add new type!"); + if (!isset($_POST['NewTypeName'])) + ErrorLog("[edit_types.php] No NewTypeName to add new type!"); + MessageError(LangSpell('SentenceUnknownError')); + } + $ToDo=""; + } + + ///////////// + // edit type + if ($ToDo=="EditType") + { + if (isset($_GET['Id']) && $_GET['Id']) + { + $EditId = $_GET['Id']; + if (LockActivate('Types',$EditId)) + { + $EditTypesEditId=$EditId; + //NestedListVisibilityUnset($EditId, 'EditTypes'); + } + else + { + MessageError(LangSpell('SentenceLockIsActive')); + } + } + else + { + ErrorLog("[edit_types.php] No Id to edit type."); + MessageError(LangSpell('SentenceUnknownError')); + } + $ToDo = ""; + } + + //////////////////// + // cancel edit type + if ($ToDo=="CancelEditType") + { + if (isset($_GET['Id']) && $_GET['Id']) + { + $EditId = $_GET['Id']; + if (LockRelease('Types',$EditId)) + { + $EditTypesEditId=0; + } + else + { + MessageError(LangSpell('SentenceLockIsActive')); + } + } + else + { + ErrorLog("[edit_types.php] No Id to release loack on storage"); + MessageError(LangSpell('SentenceUnknownError')); + } + $ToDo = ""; + } +} + +if (UserHasRight('EditTypes') || UserHasRight('ViewSTPV')) +{ + /////////////// + // open sublist + if ($ToDo=="OpenSublist") + { + if (isset($_GET['SublistId']) && $_GET['SublistId']) + { + NestedListVisibilityToggle($_GET['SublistId'], 'EditTypes'); + } + else + { + ErrorLog("[edit_types.php] No SublistId to open type!"); + MessageError(LangSpell('SentenceUnknownError')); + } + $ToDo=""; + } + + /////////////// + // sow types + if ($ToDo=="") + WriteTypeList(0,0); +} +else +{ + MessageError(LangSpell("ScentenceNoUserRights")); +} +?> diff --git a/pages/edit_users.php b/pages/edit_users.php new file mode 100755 index 0000000..525fc45 --- /dev/null +++ b/pages/edit_users.php @@ -0,0 +1,261 @@ +'."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' Id'."\n"; + $GlobalContent.=' Login'."\n"; + $GlobalContent.=' Password'."\n"; + for ($i=1;$i'."\n"; + } + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + + //existing users + while ($UserRecord=mysqli_fetch_array($UserQuery)) + { + $GlobalContent.=' '."\n"; + $GlobalContent.='
'."\n"; + $GlobalContent.=' '.$UserRecord['Id'].''."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + + $RightsQuery="SELECT * FROM `UserRights` WHERE `Id` = ".$UserRecord['Id']." LIMIT 1"; + if (!$RightsQuery=mysqli_query($GlobalMysqlHandler, $RightsQuery)) + ErrorLog('[edit_users.php-$RightsQuery] Database error or user id '.$UserRecord['Id'].' not found in UserRights'); + $RightsRecord=mysqli_fetch_row($RightsQuery); + for ($i=1;$i<(mysqli_num_fields($RightsQuery));$i++) + { + $GlobalContent.=' '."\n"; + } + $GlobalContent.=' '."\n"; + $GlobalContent.=' '.OtherGetIcon('Delete',0).''."\n"; + $GlobalContent.='
'."\n"; + $GlobalContent.=' '."\n"; + } + + //new user entry + $GlobalContent.=' '."\n"; + $GlobalContent.='
'."\n"; + $GlobalContent.=' '.$UserRecord[$i].''."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + for ($i=1;$i<(mysqli_num_fields($RightsQuery));$i++) + { + $GlobalContent.=' '."\n"; + } + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.='
'."\n"; + $GlobalContent.=' '."\n"; + + $GlobalContent.=''."\n"; +} +else +{ + MessageError(LangSpell("ScentenceNoUserRights")); +} +?> diff --git a/pages/edit_vendors.php b/pages/edit_vendors.php new file mode 100755 index 0000000..aa2850a --- /dev/null +++ b/pages/edit_vendors.php @@ -0,0 +1,199 @@ +'."\n"; + + $GlobalContent.=' '."\n"; + $GlobalContent.=' '.LangSpellHtml('EditVendorsId').''."\n"; + $GlobalContent.=' '.LangSpellHtml('EditVendorsName').''."\n"; + $GlobalContent.=' '.LangSpellHtml('EditVendorsHomepage').''."\n"; + $GlobalContent.=' '.LangSpellHtml('EditVendorsMinBill').''."\n"; + $GlobalContent.=' '.LangSpellHtml('EditVendorsShippingCost').''."\n"; + if (UserHasRight('EditVendors')) + $GlobalContent.=' '.LangSpellHtml('EditVendorsEdit').''."\n"; + $GlobalContent.=' '."\n"; + + $VendorQuery = "SELECT * FROM `Vendors`"; + $VendorQuery = mysqli_query($GlobalMysqlHandler, $VendorQuery); + while ($Vendor=mysqli_fetch_array($VendorQuery)) + { + if ( ($EditVendorId==$Vendor['Id']) ) + { + $GlobalContent.='
'."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '.$Vendor['Id'].''."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '.OtherGetIcon('Cancel',"Button").''."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.='
'."\n"; + } + else + { + $GlobalContent.=' '."\n"; + $GlobalContent.=' '.$Vendor['Id'].''."\n"; + $GlobalContent.=' '.$Vendor['Name'].''."\n"; + $GlobalContent.=' '.$Vendor['Homepage'].''."\n"; + $GlobalContent.=' '.$Vendor['MinBill'].''."\n"; + $GlobalContent.=' '.$Vendor['ShippingCost'].''."\n"; + if (LockIsActive("Vendors",$Vendor['Id'])) + $GlobalContent.=' '.OtherGetIcon('LockActive.png').''."\n"; + elseif (UserHasRight('EditVendors')) + { + $GlobalContent.=' '."\n"; + $GlobalContent.=' '.OtherGetIcon('Delete',"Button").''."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.='
'."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.='
'."\n"; + $GlobalContent.=' '."\n"; + } + $GlobalContent.=' '."\n"; + } + } + + if (!$EditVendorId && UserHasRight('EditVendors')) + { + $GlobalContent.='
'."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '.$Vendor['Id'].''."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.=' '."\n"; + $GlobalContent.='
'."\n"; + } + + $GlobalContent.=''."\n"; +} +else +{ + MessageError(LangSpell("ScentenceNoUserRights")); +} +?> diff --git a/pages/home.php b/pages/home.php new file mode 100755 index 0000000..736132b --- /dev/null +++ b/pages/home.php @@ -0,0 +1,5 @@ + diff --git a/pages/parts_by_store.php b/pages/parts_by_store.php new file mode 100755 index 0000000..e39b6b3 --- /dev/null +++ b/pages/parts_by_store.php @@ -0,0 +1,155 @@ +\n"; + else + $GlobalContent .= "\n"; +} + + + /////////////// +// open sublist +if ($ToDo=="ToggleTypeSelectorVisibility") +{ + if (isset($_GET['SublistId']) && $_GET['SublistId']) + { + $ParentId = NestedListGetParentId($_GET['SublistId'], 'Storages'); + NestedListVisibilityUnsetAllElements('PartStoreSelector'); + NestedListVisibilitySetAllParents($_GET['SublistId'], 'PartStoreSelector', 'Storages'); + NestedListVisibilitySet($_GET['SublistId'], 'PartStoreSelector'); + $_SESSION['PartsByStoreStoreId'] = $_GET['SublistId']; + } + else + { + ErrorLog("[parts_by_type.php] No SublistId to open type!"); + MessageError(LangSpell('SentenceUnknownError')); + } + $ToDo=""; +} + + + /////////// +// Selector +$GlobalContent .= '
'; +$GlobalContent .= WriteTypeSelector (0); +$GlobalContent .= '
'."\n"; + + //////////////// +// Sort Partlist +if (!isset($_SESSION['SortPartListBy'])) $_SESSION['SortPartListBy']="Name"; +if (!isset($_SESSION['SortPartListOrder'])) $_SESSION['SortPartListOrder']="ASC"; +if (isset($_GET['SortBy'])) +{ + if ($_SESSION['SortPartListBy']==$_GET['SortBy']) //set order direction + { + if ($_SESSION['SortPartListOrder']=="ASC") $_SESSION['SortPartListOrder']="DESC"; + else $_SESSION['SortPartListOrder']="ASC"; + } + else //set order by + { + $_SESSION['SortPartListBy']=$_GET['SortBy']; + $_SESSION['SortPartListOrder']="ASC"; + } +} + + ////////////////// +// Part List Begin +$GlobalContent .= '
'; +$GlobalContent .= ''."\n"; + + ////////////////////// +// PartList Table Head +$GlobalContent .= ''; + +//Name +$GlobalContent .= ''; +//Package +$GlobalContent .= ''; +//Quantity +$GlobalContent .= ''; +//Price +$GlobalContent .= ''; +//Obsolete +$GlobalContent .= ''; +$GlobalContent .= ''; + + ////////////////////////// +// generate Partlist query +$PartListQuery = "SELECT * FROM `Parts` WHERE `StorageId` = ".$_SESSION['PartsByStoreStoreId'].""; +$PartListQuery .= " ORDER BY `".$_SESSION['SortPartListBy']."` ".$_SESSION['SortPartListOrder']; +//echo $PartListQuery; + + ///////////////// +// Part List List +$PartListQuery = mysqli_query($GlobalMysqlHandler, $PartListQuery); +while ($Parts = mysqli_fetch_array($PartListQuery)) +{ +$GlobalContent .= ' '; +$GlobalContent .= ' '; + ////////// + // Package + $PackageQuery = "SELECT `Name` FROM `Packages` WHERE `Id` = ".$Parts['PackageId']; + $PackageQuery = mysqli_query($GlobalMysqlHandler, $PackageQuery); + if (mysqli_num_rows($PackageQuery)) + { + $Package=mysqli_fetch_array($PackageQuery); + $GlobalContent .= ''; + } + else + { + $GlobalContent .= ''; + } +$GlobalContent .= ''; +$GlobalContent .= ''; +$GlobalContent .= ''; +$GlobalContent .= ' '; +} + +$GlobalContent .= '
'; +$GlobalContent .= LangSpellHtml('PartsName')." "; +if ($_SESSION['SortPartListBy']=="Name" && $_SESSION['SortPartListOrder']=="ASC") $GlobalContent .= OtherGetIcon('SortUp',0); +if ($_SESSION['SortPartListBy']=="Name" && $_SESSION['SortPartListOrder']=="DESC") $GlobalContent .= OtherGetIcon('SortDown',0); +$GlobalContent .= ''; +$GlobalContent .= LangSpellHtml('PartsPackage')." "; +if ($_SESSION['SortPartListBy']=="PackageId" && $_SESSION['SortPartListOrder']=="ASC") $GlobalContent .= OtherGetIcon('SortUp',0); +if ($_SESSION['SortPartListBy']=="PackageId" && $_SESSION['SortPartListOrder']=="DESC") $GlobalContent .= OtherGetIcon('SortDown',0); +$GlobalContent .= ''; +$GlobalContent .= LangSpellHtml('PartsQuantity')." "; +if ($_SESSION['SortPartListBy']=="Qty" && $_SESSION['SortPartListOrder']=="ASC") $GlobalContent .= OtherGetIcon('SortUp',0); +if ($_SESSION['SortPartListBy']=="Qty" && $_SESSION['SortPartListOrder']=="DESC") $GlobalContent .= OtherGetIcon('SortDown',0); +$GlobalContent .= ''; +$GlobalContent .= LangSpellHtml('PartsPrice')." "; +if ($_SESSION['SortPartListBy']=="Price" && $_SESSION['SortPartListOrder']=="ASC") $GlobalContent .= OtherGetIcon('SortUp',0); +if ($_SESSION['SortPartListBy']=="Price" && $_SESSION['SortPartListOrder']=="DESC") $GlobalContent .= OtherGetIcon('SortDown',0); +$GlobalContent .= ''.LangSpellHtml('PartsObsolete').'
'.$Parts['Name'].' '.$Parts['ShortDesc'].' '.$Package['Name'].'-'.$Parts['Qty'].(($Parts['MinQty'])? "/".$Parts['MinQty']:"").''.OtherFormatPrice($Parts['Price']).''.((strtolower($Parts['Obsolete'])=="true")? LangSpellHtml('PartsObsolete'):"").'
'."\n"; +$GlobalContent .= '
'."\n"; + +?> diff --git a/pages/parts_by_type.php b/pages/parts_by_type.php new file mode 100755 index 0000000..4be3350 --- /dev/null +++ b/pages/parts_by_type.php @@ -0,0 +1,241 @@ +\n"; + else + $GlobalContent .= "\n"; +} + + ////////////// +// Delete Part +if ($ToDo=="ToggleTypeSelectorVisibility" && UserHasRight('EditParts') + && isset($_POST['DeletePartId']) && $_POST['DeletePartId'] + && isset($_POST['DeletePartShure']) && $_POST['DeletePartShure']=="True" + && isset($_GET['SublistId']) && $_GET['SublistId'] + ) +{ + if (LockIsActive('Parts',$_POST['DeletePartId'])) + { + MessageError(LangSpellHtml('SentenceLockIsActive')); + } + else + { + if (mysqli_query($GlobalMysqlHandler, "DELETE FROM `Parts` WHERE `Id` = ".$_POST['DeletePartId']." LIMIT 1")) + { + MessageSuccess(LangSpellHtml('SentencePartDeleted')); + } + else + { + MessageError(LangSpellHtml('SentenceDatabaseError')); + } + } +} + + /////////////// +// open sublist +if ($ToDo=="ToggleTypeSelectorVisibility") +{ + if (isset($_GET['SublistId']) && $_GET['SublistId']) + { + $ParentId = NestedListGetParentId($_GET['SublistId'], 'Types'); + NestedListVisibilityUnsetAllElements('PartTypeSelector'); + NestedListVisibilitySetAllParents($_GET['SublistId'], 'PartTypeSelector', 'Types'); + NestedListVisibilitySet($_GET['SublistId'], 'PartTypeSelector'); + $_SESSION['PartsByTypeTypeId'] = $_GET['SublistId']; + } + else + { + ErrorLog("[parts_by_type.php] No SublistId to open type!"); + MessageError(LangSpell('SentenceUnknownError')); + } + $ToDo=""; +} + + ///////////// +// Type Array +$TypeQuery = "SELECT * FROM `Types` WHERE `Id` = ".$_SESSION['PartsByTypeTypeId']; +$TypeQuery = mysqli_query($GlobalMysqlHandler, $TypeQuery); +$TypeValues = array(); +if (mysqli_num_rows($TypeQuery)) +{ + $TypeItem = mysqli_fetch_array($TypeQuery); + $TypeValues[0][0] = $TypeItem['NameValue1']; + $TypeValues[0][1] = $TypeItem['UnitValue1']; + $TypeValues[1][0] = $TypeItem['NameValue2']; + $TypeValues[1][1] = $TypeItem['UnitValue2']; + $TypeValues[2][0] = $TypeItem['NameValue3']; + $TypeValues[2][1] = $TypeItem['UnitValue3']; +} + + /////////// +// Selector +$GlobalContent .= '
'; +$GlobalContent .= WriteTypeSelector (0); +$GlobalContent .= '
'."\n"; + + ///////// +// Filter +$GlobalContent .= '
'."\n"; +//Obsolete Filter +if (!isset($_SESSION['FilterObsolete'])) $_SESSION['FilterObsolete']="NonObsolete"; +if (isset($_POST['FilterObsolete'])) $_SESSION['FilterObsolete']=$_POST['FilterObsolete']; +$GlobalContent .= '
'."\n"; +$GlobalContent .= ' '.LangSpellHtml('PartsObsoleteNon')."\n"; +$GlobalContent .= ' '.LangSpellHtml('PartsObsoleteOnly')."\n"; +$GlobalContent .= ' '.LangSpellHtml('PartsObsoleteAll')."\n"; +$GlobalContent .= '
'."\n"; +$GlobalContent .= '
'."\n"; + + //////////////// +// Sort Partlist +if (!isset($_SESSION['SortPartListBy'])) $_SESSION['SortPartListBy']="Name"; +if (!isset($_SESSION['SortPartListOrder'])) $_SESSION['SortPartListOrder']="ASC"; +if (isset($_GET['SortBy'])) +{ + if ($_SESSION['SortPartListBy']==$_GET['SortBy']) //set order direction + { + if ($_SESSION['SortPartListOrder']=="ASC") $_SESSION['SortPartListOrder']="DESC"; + else $_SESSION['SortPartListOrder']="ASC"; + } + else //set order by + { + $_SESSION['SortPartListBy']=$_GET['SortBy']; + $_SESSION['SortPartListOrder']="ASC"; + } +} + + ////////////////// +// Part List Begin +$GlobalContent .= '
'; +$GlobalContent .= ''."\n"; + + ////////////////////// +// PartList Table Head +$GlobalContent .= ''; + +//Name +$GlobalContent .= ''; +//Value 1 +if (isset($TypeValues[0][0]) && $TypeValues[0][0]) +{ + $GlobalContent .= ''; +} +//Value2 +if (isset($TypeValues[1][0]) && $TypeValues[1][0]) +{ + $GlobalContent .= ''; +} +//Value3 +if (isset($TypeValues[2][0]) && $TypeValues[2][0]) +{ + $GlobalContent .= ''; +} +//Package +$GlobalContent .= ''; +//Quantity +$GlobalContent .= ''; +//Price +$GlobalContent .= ''; +//Obsolete +$GlobalContent .= ''; +$GlobalContent .= ''; + + ////////////////////////// +// generate Partlist query +$PartListQuery = "SELECT * FROM `Parts` WHERE `TypeId` = ".$_SESSION['PartsByTypeTypeId'].""; +if ($_SESSION['FilterObsolete']=="OnlyObsolete") $PartListQuery .= " AND `Obsolete` LIKE 'TRUE'"; +if ($_SESSION['FilterObsolete']=="NonObsolete") $PartListQuery .= " AND `Obsolete` LIKE 'FALSE'"; +$PartListQuery .= " ORDER BY `".$_SESSION['SortPartListBy']."` ".$_SESSION['SortPartListOrder']; +//echo $PartListQuery; + + ///////////////// +// Part List List +$PartListQuery = mysqli_query($GlobalMysqlHandler, $PartListQuery); +while ($Parts = mysqli_fetch_array($PartListQuery)) +{ +$GlobalContent .= ' '; +$GlobalContent .= ' '; +if (isset($TypeValues[0][0]) && $TypeValues[0][0]) $GlobalContent .= ' '; +if (isset($TypeValues[1][0]) && $TypeValues[1][0]) $GlobalContent .= ' '; +if (isset($TypeValues[2][0]) && $TypeValues[2][0]) $GlobalContent .= ' '; + ////////// + // Package + $PackageQuery = "SELECT `Name` FROM `Packages` WHERE `Id` = ".$Parts['PackageId']; + $PackageQuery = mysqli_query($GlobalMysqlHandler, $PackageQuery); + if (mysqli_num_rows($PackageQuery)) + { + $Package=mysqli_fetch_array($PackageQuery); + $GlobalContent .= ''; + } + else + { + $GlobalContent .= ''; + } +$GlobalContent .= ''; +$GlobalContent .= ''; +$GlobalContent .= ''; +$GlobalContent .= ' '; +} + +$GlobalContent .= '
'; +$GlobalContent .= LangSpellHtml('PartsName')." "; +if ($_SESSION['SortPartListBy']=="Name" && $_SESSION['SortPartListOrder']=="ASC") $GlobalContent .= OtherGetIcon('SortUp',0); +if ($_SESSION['SortPartListBy']=="Name" && $_SESSION['SortPartListOrder']=="DESC") $GlobalContent .= OtherGetIcon('SortDown',0); +$GlobalContent .= ''; + $GlobalContent .= $TypeValues[0][0]." "; + if ($_SESSION['SortPartListBy']=="Value1" && $_SESSION['SortPartListOrder']=="ASC") $GlobalContent .= OtherGetIcon('SortUp',0); + if ($_SESSION['SortPartListBy']=="Value1" && $_SESSION['SortPartListOrder']=="DESC") $GlobalContent .= OtherGetIcon('SortDown',0); + $GlobalContent .= ''; + $GlobalContent .= $TypeValues[1][0]." "; + if ($_SESSION['SortPartListBy']=="Value2" && $_SESSION['SortPartListOrder']=="ASC") $GlobalContent .= OtherGetIcon('SortUp',0); + if ($_SESSION['SortPartListBy']=="Value2" && $_SESSION['SortPartListOrder']=="DESC") $GlobalContent .= OtherGetIcon('SortDown',0); + $GlobalContent .= ''; + $GlobalContent .= $TypeValues[2][0]." "; + if ($_SESSION['SortPartListBy']=="Value3" && $_SESSION['SortPartListOrder']=="ASC") $GlobalContent .= OtherGetIcon('SortUp',0); + if ($_SESSION['SortPartListBy']=="Value3" && $_SESSION['SortPartListOrder']=="DESC") $GlobalContent .= OtherGetIcon('SortDown',0); + $GlobalContent .= ''; +$GlobalContent .= LangSpellHtml('PartsPackage')." "; +if ($_SESSION['SortPartListBy']=="PackageId" && $_SESSION['SortPartListOrder']=="ASC") $GlobalContent .= OtherGetIcon('SortUp',0); +if ($_SESSION['SortPartListBy']=="PackageId" && $_SESSION['SortPartListOrder']=="DESC") $GlobalContent .= OtherGetIcon('SortDown',0); +$GlobalContent .= ''; +$GlobalContent .= LangSpellHtml('PartsQuantity')." "; +if ($_SESSION['SortPartListBy']=="Qty" && $_SESSION['SortPartListOrder']=="ASC") $GlobalContent .= OtherGetIcon('SortUp',0); +if ($_SESSION['SortPartListBy']=="Qty" && $_SESSION['SortPartListOrder']=="DESC") $GlobalContent .= OtherGetIcon('SortDown',0); +$GlobalContent .= ''; +$GlobalContent .= LangSpellHtml('PartsPrice')." "; +if ($_SESSION['SortPartListBy']=="Price" && $_SESSION['SortPartListOrder']=="ASC") $GlobalContent .= OtherGetIcon('SortUp',0); +if ($_SESSION['SortPartListBy']=="Price" && $_SESSION['SortPartListOrder']=="DESC") $GlobalContent .= OtherGetIcon('SortDown',0); +$GlobalContent .= ''.LangSpellHtml('PartsObsolete').'
'.$Parts['Name'].' '.$Parts['ShortDesc'].' '.OtherFloatToSiPrefix ($Parts['Value1']).$TypeValues[0][1].''.OtherFloatToSiPrefix ($Parts['Value2']).$TypeValues[1][1].''.OtherFloatToSiPrefix ($Parts['Value3']).$TypeValues[2][1].''.$Package['Name'].'-'.$Parts['Qty'].(($Parts['MinQty'])? "/".$Parts['MinQty']:"").''.OtherFormatPrice($Parts['Price']).''.((strtolower($Parts['Obsolete'])=="true")? LangSpellHtml('PartsObsolete'):"").'
'."\n"; +$GlobalContent .= '
'."\n"; + +?> diff --git a/pages/repeat_order.php b/pages/repeat_order.php new file mode 100755 index 0000000..31d1fd3 --- /dev/null +++ b/pages/repeat_order.php @@ -0,0 +1,73 @@ +'; + $GlobalContent .= ' '; + $GlobalContent .= ' {'.$VendorId.'} '.$VendorName.''; + $GlobalContent .= ' '; + $GlobalContent .= ' '; + $GlobalContent .= ' '.LangSpellHtml('PartsName').''; + $GlobalContent .= ' '.LangSpellHtml('PartsQuantity').''; + $GlobalContent .= ' '.LangSpellHtml('PartsMinQuantity').''; + $GlobalContent .= ' '.LangSpellHtml('PartsPackageUnit').''; + $GlobalContent .= ' '.LangSpellHtml('PartsPrice').''; + $GlobalContent .= ' '.LangSpellHtml('PartsVendorLink').''; + $GlobalContent .= ' '.LangSpellHtml('RepeatOrderPackagesToOrder').''; + $GlobalContent .= ' '.LangSpellHtml('RepeatOrderSumPrice').''; + $GlobalContent .= ' '; + $ShowTable = 1; + } + + $AllSumPrice=0; + while ($Part = mysqli_fetch_array($RepOrdQuery)) + { + if (!$Part['PackageUnit']) $Part['PackageUnit']=1; + $Price=OtherFormatPrice($Part['Price']); + $VendorLink=($Part['VendorLink'])? '':'-'; + $OrderPackages = ceil(($Part['MinQty']-$Part['Qty'])/$Part['PackageUnit']); + $SumPrice = OtherFormatPrice($OrderPackages * $Part['Price']); + $AllSumPrice += $OrderPackages * $Part['Price']; + + $GlobalContent .= ' '; + $GlobalContent .= ' '.$Part['Name'].''; + $GlobalContent .= ' '.$Part['Qty'].''; + $GlobalContent .= ' '.$Part['MinQty'].''; + $GlobalContent .= ' '.$Part['PackageUnit'].''; + $GlobalContent .= ' '.$Price.''; + $GlobalContent .= ' '.$VendorLink.''; + $GlobalContent .= ' '.$OrderPackages.''; + $GlobalContent .= ' '.OtherFormatPrice($SumPrice).''; + $GlobalContent .= ' '; + } + if ($ShowTable) + { + $GlobalContent .= ' '; + $GlobalContent .= ' '.OtherFormatPrice($AllSumPrice).''; + $GlobalContent .= ' '; + $GlobalContent .= ''; + } +} + +global $GlobalMysqlHandler; + + +$VendorQuery = "SELECT * FROM `Vendors` ORDER BY `Name` ASC"; +$VendorQuery = mysqli_query($GlobalMysqlHandler, $VendorQuery); +RepeatOrderTableByVendor(LangSpellHtml('PartsNotSpecified'),0); +while ($Vendor = mysqli_fetch_array($VendorQuery)) +{ + RepeatOrderTableByVendor($Vendor['Name'],$Vendor['Id']); +} + + +?> diff --git a/pages/show_part.php b/pages/show_part.php new file mode 100755 index 0000000..0af0ba2 --- /dev/null +++ b/pages/show_part.php @@ -0,0 +1,398 @@ +'."\n"; + + if ($ToDo=="EditType" && UserHasRight('EditParts') && LockActivate('Parts',$PartId)) + { + include "./pages/show_part_edit_type.php"; + } + elseif ($ToDo=="EditPackage" && UserHasRight('EditParts') && LockActivate('Parts',$PartId)) + { + include "./pages/show_part_edit_package.php"; + } + elseif ($ToDo=="EditStorage" && UserHasRight('EditParts') && LockActivate('Parts',$PartId)) + { + include "./pages/show_part_edit_storage.php"; + } + elseif ($ToDo=="EditValues" && UserHasRight('EditParts') && LockActivate('Parts',$PartId)) + { + include "./pages/show_part_edit_values.php"; + } + elseif ($ToDo=="EditDownloads" && UserHasRight('EditParts') && LockActivate('Parts',$PartId)) + { + include "./pages/show_part_edit_downloads.php"; + } + elseif ($ToDo=="DeletePart" && UserHasRight('EditParts') && LockActivate('Parts',$PartId)) + { + include "./pages/show_part_delete_part.php"; + } + else + { + include "./pages/show_part_show.php"; + } + + $GlobalContent .= ''."\n"; +} +else +{ + MessageError(LangSpell("SentenceDatabaseError")); + ErrorLog("[show_part.php] Part Id '$PartId' not found!"); +} +?> diff --git a/pages/show_part_delete_part.php b/pages/show_part_delete_part.php new file mode 100755 index 0000000..f841ae7 --- /dev/null +++ b/pages/show_part_delete_part.php @@ -0,0 +1,22 @@ +".LangSpellHtml('SentenceShureToDeletePart').""; + $GlobalContent .= "".$Part['Name']." ".$Part['ShortDesc']."

\n"; + $GlobalContent .= '
'; + $GlobalContent .= ''; + $GlobalContent .= LangSpellHtml('SentenceShureToDeletePart').': '; + $GlobalContent .= ' '; + $GlobalContent .= '
'; + +} +else +{ + MessageError(LangSpell("ScentenceNoUserRights")); +} +?> diff --git a/pages/show_part_edit_downloads.php b/pages/show_part_edit_downloads.php new file mode 100755 index 0000000..755cc29 --- /dev/null +++ b/pages/show_part_edit_downloads.php @@ -0,0 +1,63 @@ +'; + + $GlobalContent .= ''; + $GlobalContent .= ''; + $GlobalContent .= ''.LangSpellHtml('DownloadsName').''; + $GlobalContent .= ''.LangSpellHtml('DownloadsPath').''; + $GlobalContent .= ''.LangSpellHtml('DownloadsSize').''; + $GlobalContent .= ''.LangSpellHtml('DownloadsType').''; + $GlobalContent .= ''.LangSpellHtml('ButtonEdit').''; + $GlobalContent .= ''; + + $DownloadQuery = "SELECT * FROM `Downloads` WHERE `PartId` = $PartId"; + $DownloadQuery = mysqli_query($GlobalMysqlHandler, $DownloadQuery); + while ($Download = mysqli_fetch_array($DownloadQuery)) + { + $Size="-"; + if (file_exists($GlobalDownloadDir."/".$Download['Path'])) $Size=sprintf("%.2f",filesize($GlobalDownloadDir."/".$Download['Path'])/(1024*1024))." MB"; + + $GlobalContent .= '
'; + $GlobalContent .= ''; + $GlobalContent .= ''; + $GlobalContent .= '{'.$Download['Id'].'}'; + $GlobalContent .= ''; + $GlobalContent .= ''.$Download['Path'].''; + $GlobalContent .= ''.$Size.''; + $GlobalContent .= ''.$Download['Type'].''; + $GlobalContent .= ''; + $GlobalContent .= ''.OtherGetIcon('Delete',"Button").' '; + $GlobalContent .= ''; + $GlobalContent .= ''; + $GlobalContent .= ''; + $GlobalContent .= '
'; + } + + + $GlobalContent .= '
'; + $GlobalContent .= ''; + $GlobalContent .= ''; + $GlobalContent .= ''; + $GlobalContent .= ''; + $GlobalContent .= ''; + $GlobalContent .= ''; + $GlobalContent .= ''; + $GlobalContent .= '
'; + + $GlobalContent .= ''; +} +else +{ + MessageError(LangSpell("ScentenceNoUserRights")); +} +?> diff --git a/pages/show_part_edit_package.php b/pages/show_part_edit_package.php new file mode 100755 index 0000000..f7dce23 --- /dev/null +++ b/pages/show_part_edit_package.php @@ -0,0 +1,72 @@ +\n"; + else + $GlobalContent .= "
    \n"; + + if (mysqli_num_rows($ListQuery)) + { + while ($ListData=mysqli_fetch_array($ListQuery)) + { + $GlobalContent .= "
  • \n"; + if (LockIsActive('Types',$ListData['Id']) || $ParentIsLocked) + { + $GlobalContent .= ' '.OtherGetIcon('LockActive'); + $ParentIsLocked = 1; + } + else + { + $GlobalContent .= ' '; + } + $GlobalContent .= " ".LangStr2Html($ListData['Name']).""; + $GlobalContent .= " (".NestedListCountSubElements($ListData['Id'],'Packages').")"; + $GlobalContent .= " \n
  • \n"; + + WritePackageList($ListData['Id'],$ParentIsLocked); + } + } + $GlobalContent .= "
\n"; +} + + +if (UserHasRight('EditParts')) +{ + /////////////// + // open sublist + if (isset($_GET['OpenSublistId']) && $_GET['OpenSublistId']) + { + NestedListVisibilityToggle($_GET['OpenSublistId'], 'EditPartPackage'); + } + else + { + NestedListVisibilityUnsetAllElements ('EditPartPackage'); + NestedListVisibilitySetAllParents ($Part['PackageId'], 'EditPartPackage', 'Packages'); + NestedListVisibilitySet ($Part['PackageId'], 'EditPartPackage'); + } + + $GlobalContent .= '

'.LangSpellHtml('SentencePleaseSelectPackage').'

'; + $GlobalContent .= '
'; + WritePackageList(0, 0); + $GlobalContent .= ''; + $GlobalContent .= '
'; +} +else +{ + MessageError(LangSpell("ScentenceNoUserRights")); +} +?> diff --git a/pages/show_part_edit_storage.php b/pages/show_part_edit_storage.php new file mode 100755 index 0000000..6830716 --- /dev/null +++ b/pages/show_part_edit_storage.php @@ -0,0 +1,72 @@ +\n"; + else + $GlobalContent .= "
    \n"; + + if (mysqli_num_rows($ListQuery)) + { + while ($ListData=mysqli_fetch_array($ListQuery)) + { + $GlobalContent .= "
  • \n"; + if (LockIsActive('Types',$ListData['Id']) || $ParentIsLocked) + { + $GlobalContent .= ' '.OtherGetIcon('LockActive'); + $ParentIsLocked = 1; + } + else + { + $GlobalContent .= ' '; + } + $GlobalContent .= " ".LangStr2Html($ListData['Name']).""; + $GlobalContent .= " (".NestedListCountSubElements($ListData['Id'],'Storages').")"; + $GlobalContent .= " \n
  • \n"; + + WriteStorageList($ListData['Id'],$ParentIsLocked); + } + } + $GlobalContent .= "
\n"; +} + + +if (UserHasRight('EditParts')) +{ + /////////////// + // open sublist + if (isset($_GET['OpenSublistId']) && $_GET['OpenSublistId']) + { + NestedListVisibilityToggle($_GET['OpenSublistId'], 'EditPartStorage'); + } + else + { + NestedListVisibilityUnsetAllElements ('EditPartStorage'); + NestedListVisibilitySetAllParents ($Part['StorageId'], 'EditPartStorage', 'Storages'); + NestedListVisibilitySet ($Part['StorageId'], 'EditPartStorage'); + } + + $GlobalContent .= '

'.LangSpellHtml('SentencePleaseSelectPartStorage').'

'; + $GlobalContent .= '
'; + WriteStorageList(0, 0); + $GlobalContent .= ''; + $GlobalContent .= '
'; +} +else +{ + MessageError(LangSpell("ScentenceNoUserRights")); +} +?> diff --git a/pages/show_part_edit_type.php b/pages/show_part_edit_type.php new file mode 100755 index 0000000..7498e2d --- /dev/null +++ b/pages/show_part_edit_type.php @@ -0,0 +1,74 @@ +\n"; + else + $GlobalContent .= "\n"; +} + + +if (UserHasRight('EditParts')) +{ + /////////////// + // open sublist + if (isset($_GET['OpenSublistId']) && $_GET['OpenSublistId']) + { + NestedListVisibilityToggle($_GET['OpenSublistId'], 'EditPartType'); + } + else + { + NestedListVisibilityUnsetAllElements ('EditPartType'); + NestedListVisibilitySetAllParents ($Part['TypeId'], 'EditPartType', 'Types'); + NestedListVisibilitySet ($Part['TypeId'], 'EditPartType'); + } + + ////////// + // Content + $GlobalContent .= '

'.LangSpellHtml('SentencePleaseSelectPartType').'

'; + $GlobalContent .= '
'; + WriteTypeList(0, 0); + $GlobalContent .= ''; + $GlobalContent .= '
'; +} +else +{ + MessageError(LangSpell("ScentenceNoUserRights")); +} +?> diff --git a/pages/show_part_edit_values.php b/pages/show_part_edit_values.php new file mode 100755 index 0000000..8ca7bee --- /dev/null +++ b/pages/show_part_edit_values.php @@ -0,0 +1,119 @@ +'.LangSpellHtml('SentencePleaseSpecifyPartValues').''; + $GlobalContent .= '
'; + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + if ($TypeValues[0][0]) + { + $GlobalContent .= ''; + $GlobalContent .= ''; + } + + if ($TypeValues[1][0]) + { + $GlobalContent .= ''; + $GlobalContent .= ''; + } + + if ($TypeValues[2][0]) + { + $GlobalContent .= ''; + $GlobalContent .= ''; + } + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= ''; + + $GlobalContent .= '
'.LangSpellHtml('PartsObsolete').''; + $GlobalContent .= '
'.LangSpellHtml('PartsName').''; + $GlobalContent .= '
'.$TypeValues[0][0].''; + $GlobalContent .= ' '.$TypeValues[0][1].'
'.$TypeValues[1][0].''; + $GlobalContent .= ' '.$TypeValues[1][1].'
'.$TypeValues[2][0].''; + $GlobalContent .= ' '.$TypeValues[2][1].'
'.LangSpellHtml('PartsShortDescription').''; + $GlobalContent .= '
'.LangSpellHtml('PartsLongDescription').''; + $GlobalContent .= '
'.LangSpellHtml('PartsQuantity').''; + $GlobalContent .= '
'.LangSpellHtml('PartsMinQuantity').''; + $GlobalContent .= '
'.LangSpellHtml('PartsPackageUnit').''; + $GlobalContent .= '
'.LangSpellHtml('PartsMinOrderQuantity').''; + $GlobalContent .= '
'.LangSpellHtml('PartsPrice').''; + $GlobalContent .= '
'.LangSpellHtml('PartsVendor').''; + $GlobalContent .= '
'.LangSpellHtml('PartsVendorLink').''; + $GlobalContent .= '
'.LangSpellHtml('PartsManufactorLink').''; + $GlobalContent .= '
'; + $GlobalContent .= ''; + $GlobalContent .= '
'; + $GlobalContent .= '
'; +} +else +{ + MessageError(LangSpell("ScentenceNoUserRights")); +} +?> diff --git a/pages/show_part_show.php b/pages/show_part_show.php new file mode 100755 index 0000000..f6ce0e0 --- /dev/null +++ b/pages/show_part_show.php @@ -0,0 +1,178 @@ +'."\n"; + //Part Head + $GlobalContent .= '

{'.$Part['Id'].'} '.$Part['Name'].'

'."\n"; + //Type + $TypeId = $Part['TypeId']; + $TypeString = ""; + while ($TypeId) + { + $LocalTypeString = ""; + $LocalTypeString = NestedListGetName($TypeId,'Types'); + $LocalTypeString = ''.$LocalTypeString . ""; + $TypeId = NestedListGetParentId ($TypeId,'Types'); + if ($TypeId) $LocalTypeString = " > " . $LocalTypeString; + $TypeString = $LocalTypeString . $TypeString; + } + $GlobalContent .= ''.LangSpellHtml('PartsType').": ".$TypeString."
"."\n"; + //Storage + $StorageId = $Part['StorageId']; + $StorageString = ""; + while ($StorageId) + { + $LocalStorageString = ""; + $LocalStorageString = NestedListGetName($StorageId,'Storages'); + $LocalStorageString = ''.$LocalStorageString . ""; + $StorageId = NestedListGetParentId ($StorageId,'Storages'); + if ($StorageId) $LocalStorageString = " > " . $LocalStorageString; + $StorageString = $LocalStorageString . $StorageString; + } + $GlobalContent .= ''.LangSpellHtml('PartsStorage').": ".$StorageString."
"."\n"; + //Package + $PackageId = $Part['PackageId']; + $PackageString = ""; + while ($PackageId) + { + $LocalPackageString = ""; + $LocalPackageString = NestedListGetName($PackageId,'Packages'); + $PackageId = NestedListGetParentId ($PackageId,'Packages'); + if ($PackageId) $LocalPackageString = " > " . $LocalPackageString; + $PackageString = $LocalPackageString . $PackageString; + } + $GlobalContent .= ''.LangSpellHtml('PartsPackage').": ".$PackageString."
"."\n"; + //Edit Button + if (UserHasRight('EditParts')) + { + if (LockIsActive('Parts',$PartId)) + { + $GlobalContent .= ''.LangSpellHtml('ButtonEdit').': '; + $GlobalContent .= OtherGetIcon('LockActive')."\n"; + } + else + { + $GlobalContent .= ''.LangSpellHtml('ButtonEdit').': '."\n"; + $GlobalContent .= ''.LangSpellHtml('PartsType').' '."\n"; + $GlobalContent .= ''.LangSpellHtml('PartsPackage').' '."\n"; + $GlobalContent .= ''.LangSpellHtml('PartsStorage').' '."\n"; + $GlobalContent .= ''.LangSpellHtml('PartsValues').' '."\n"; + $GlobalContent .= ''.LangSpellHtml('PartsDownloads').' '."\n"; + $GlobalContent .= ''.LangSpellHtml('PartsPicture').' '."\n"; + $GlobalContent .= ''.OtherGetIcon('Delete',"Button").' '."\n"; + } + } + $GlobalContent .= ''."\n"; + + /////////// + // Pictures + $GlobalContent .= '
'."\n"; + if ($ToDo=="EditPicture" && UserHasRight('EditParts') && LockActivate('Parts',$PartId)) + { + $GlobalContent .= '
'; + $GlobalContent .= ''; + $GlobalContent .= ''; + $GlobalContent .= ''; + $GlobalContent .= '

'; + } + $GlobalContent .= '

'; + echo "IMAGE: " . $Part['PicturePath'] . "
\n"; + $GlobalContent .= '
'."\n"; + + //////////////// + // Detail Values + $GlobalContent .= '
'."\n"; + $GlobalContent .= ''; + //Obsolete + if (strtolower($Part['Obsolete'])=="true") + $GlobalContent .= ' '; + //Value1 + if ($TypeValues[0][0]) + $GlobalContent .= ' '; + //Value2 + if ($TypeValues[1][0]) + $GlobalContent .= ' '; + //Value3 + if ($TypeValues[2][0]) + $GlobalContent .= ' '; + //Empty Row + $GlobalContent .= ' '; + + //Quantity + if (UserHasRight('EditParts') || UserHasRight('EditPartQuantity')) + { + $GlobalContent .= ' '; + } + else + { + $GlobalContent .= ' '; + } + //Minimum Quantity + $GlobalContent .= ' '; + //Empty Row + $GlobalContent .= ' '; + + //Package Unit + $GlobalContent .= ' '; + //Min Order Quantity + $GlobalContent .= ' '; + //Price + $GlobalContent .= ' '; + //Vendor + $VendorQuery = "SELECT `Name` FROM `Vendors` WHERE `Id`= ".$Part['VendorId']; + $VendorQuery = mysqli_query($GlobalMysqlHandler, $VendorQuery); + if (mysqli_num_rows($VendorQuery)) + { + $Vendor=mysqli_fetch_array($VendorQuery); + $GlobalContent .= ' '; + } + else + { + $GlobalContent .= ' '; + } + //Vendor Link + $GlobalContent .= ' '; + //Manufactor + $GlobalContent .= ' '; + //End + $GlobalContent .= '
'.LangSpellHtml('PartsObsolete').'
'.$TypeValues[0][0].''.OtherFloatToSiPrefix($Part['Value1']).$TypeValues[0][1].'
'.$TypeValues[1][0].''.OtherFloatToSiPrefix($Part['Value2']).$TypeValues[1][1].'
'.$TypeValues[2][0].''.OtherFloatToSiPrefix($Part['Value3']).$TypeValues[2][1].'
'.LangSpellHtml('PartsQuantity').''; + $GlobalContent .= '
'; + $GlobalContent .= ' '; + $GlobalContent .= '
'.LangSpellHtml('PartsQuantity').''.$Part['Qty'].'
'.LangSpellHtml('PartsMinQuantity').''.$Part['MinQty'].'
'.LangSpellHtml('PartsPackageUnit').''.$Part['PackageUnit'].'
'.LangSpellHtml('PartsMinOrderQuantity').''.$Part['MinOrderQty'].'
'.LangSpellHtml('PartsPrice').''.OtherFormatPrice($Part['Price']).'
'.LangSpellHtml('PartsVendor').''.$Vendor['Name'].'
'.LangSpellHtml('PartsVendor').'-
'.LangSpellHtml('PartsVendorLink').''; + if ($Part['VendorLink']) $GlobalContent .= ''; + $GlobalContent .= substr($Part['VendorLink'],0,(strlen($Part['VendorLink'])<=20)? strlen($Part['VendorLink']):20); + if ($Part['VendorLink']) $GlobalContent .= ''; + $GlobalContent .= '
'.LangSpellHtml('PartsManufactorLink').''; + if ($Part['ManufactorLink']) $GlobalContent .= ''; + $GlobalContent .= substr($Part['ManufactorLink'],0,(strlen($Part['ManufactorLink'])<=20)? strlen($Part['ManufactorLink']):20); + if ($Part['ManufactorLink']) $GlobalContent .= ''; + $GlobalContent .= '
'; + $GlobalContent .= '
'."\n"; + + ///////////////////////// + // Description, Downloads + $GlobalContent .= '
'."\n"; + $GlobalContent .= LangStr2Html($Part['ShortDesc']).'

'; + $GlobalContent .= LangStr2Html($Part['LongDesc']).'

'; + $GlobalContent .= ''.LangSpellHtml('PartsDownloads').':'."\n
    "; + $DownloadQuery = "SELECT * FROM `Downloads` WHERE `PartId` = $PartId"; + $DownloadQuery = mysqli_query($GlobalMysqlHandler, $DownloadQuery); + while ($Download = mysqli_fetch_array($DownloadQuery)) + { + $Size="-"; + $FileExist = (file_exists($GlobalDownloadDir."/".$Download['Path']))? 1:0; + if ($FileExist) $Size=sprintf("%.2f",filesize($GlobalDownloadDir."/".$Download['Path'])/(1024*1024))." MB"; + + $GlobalContent .= "
  • "; + if ($FileExist) $GlobalContent .= ''; + $GlobalContent .= $Download['Name']." (".$Size.")"; + if ($FileExist) $GlobalContent .= ''; + $GlobalContent .= "
  • "; + } + $GlobalContent .= '
'."\n"; + +?> diff --git a/pages/user_settings.php b/pages/user_settings.php new file mode 100755 index 0000000..ba9c596 --- /dev/null +++ b/pages/user_settings.php @@ -0,0 +1,121 @@ +'."\n"; + $GlobalContent .= ''."\n"; + + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + $GlobalContent .= ' '."\n"; + + $GlobalContent .= '
'.LangSpellHtml('UserSettingsTableHead').'
Id'.$UserRecord['Id'].'
'.LangSpellHtml('MenuLogin').'
'.LangSpellHtml('UserSettingsSetNewPassword').'
'.LangSpellHtml('UserSettingsConfirmNewPassword').'
'.LangSpellHtml('UserSettingsLanguage').'
'.LangSpellHtml('UserSettingsTemplate').'
'."\n"; + $GlobalContent .= ''."\n"; +} +else +{ + MessageError(LangSpell("ScentenceNoUserRights")); +} +?> diff --git a/pages/version_history.php b/pages/version_history.php new file mode 100755 index 0000000..5ba01cc --- /dev/null +++ b/pages/version_history.php @@ -0,0 +1,66 @@ +'."\n"; +$GlobalContent .='
  • '."\n"; +$GlobalContent .=' Version 0'."\n"; +$GlobalContent .='
      '."\n"; +$GlobalContent .='
    • '."\n"; +$GlobalContent .=' Subversion 5'."\n"; +$GlobalContent .='
        '."\n"; +$GlobalContent .='
      • 2010-11-11 Consistency check - repair incorrect parts type, Guide download (only german DeveloperGuide.pdf at this stage).
      • '."\n"; +$GlobalContent .='
      • 2010-11-10 Repeat order list, creating only one ErrorLog() out of LogShort() and LogLong().
      • '."\n"; +$GlobalContent .='
      • 2010-11-09 OtherGetIcon() for better icon control.
      • '."\n"; +$GlobalContent .='
      • 2010-11-05 Changed milestones, building helpsection as last milestone.
      • '."\n"; +$GlobalContent .='
      • 2010-11-05 Milestone 3 reached, gradation to subversion 5.
      • '."\n"; +$GlobalContent .='
      '."\n"; +$GlobalContent .='
    • '."\n"; +$GlobalContent .='
    • '."\n"; +$GlobalContent .=' Subversion 4'."\n"; +$GlobalContent .='
        '."\n"; +$GlobalContent .='
      • 2010-11-05 Consistency check - create database structure - ready for first testing.
      • '."\n"; +$GlobalContent .='
      • 2010-11-04 Handling downloads and parts picture, parts by store view.
      • '."\n"; +$GlobalContent .='
      • 2010-11-03 View and edit part (type, package, store and values).
      • '."\n"; +$GlobalContent .='
      • 2010-11-02 Adding new parts is possible, first partlist view (parts by type.
      • '."\n"; +$GlobalContent .='
      • 2010-10-04 Added ViewSTPV Rights.
      • '."\n"; +$GlobalContent .='
      • 2010-09-20 Milestone 2 reached, gradation to subversion 4.
      • '."\n"; +$GlobalContent .='
      '."\n"; +$GlobalContent .='
    • '."\n"; +$GlobalContent .='
    • '."\n"; +$GlobalContent .=' Subversion 3'."\n"; +$GlobalContent .='
        '."\n"; +$GlobalContent .='
      • 2010-09-20 Edit Stores, Types and packages.
      • '."\n"; +$GlobalContent .='
      • 2010-09-08 Add new stores, delete stores.
      • '."\n"; +$GlobalContent .='
      • 2010-08-31 Vendor editing.
      • '."\n"; +$GlobalContent .='
      • 2010-08-26 Milestone 1 reached, gradation to subversion 3.
      • '."\n"; +$GlobalContent .='
      '."\n"; +$GlobalContent .='
    • '."\n"; +$GlobalContent .='
    • '."\n"; +$GlobalContent .=' Subversion 2'."\n"; +$GlobalContent .='
        '."\n"; +$GlobalContent .='
      • 2010-08-26 Config editing.
      • '."\n"; +$GlobalContent .='
      • 2010-08-17 User settings.
      • '."\n"; +$GlobalContent .='
      • 2010-08-16 User management.
      • '."\n"; +$GlobalContent .='
      • 2010-08-15 Definition of milestones.'."\n"; +$GlobalContent .='
          '."\n"; +$GlobalContent .='
        1. Basic system administration (config editing, user management, user settings).
        2. '."\n"; +$GlobalContent .='
        3. Part administration (stores, types, vendors, packages).
        4. '."\n"; +$GlobalContent .='
        5. Parts handling (view, edit, add, downloads, pictures).
        6. '."\n"; +$GlobalContent .='
        7. Tools (repeat order, stats, check).
        8. '."\n"; +$GlobalContent .='
        9. Global test by creating own partstock.
        10. '."\n"; +$GlobalContent .='
        11. Build final Templates. Guide for publishing.
        12. '."\n"; +$GlobalContent .='
        13. Help section / User Guides.
        14. '."\n"; +$GlobalContent .='
        '."\n"; +$GlobalContent .='
      • '."\n"; +$GlobalContent .='
      • 2010-08-14 Creation of the Version History
      • '."\n"; +$GlobalContent .='
      • before: Basic system like template design, login functionality, language functionality, message logging, etc.
      • '."\n"; +$GlobalContent .='
      '."\n"; +$GlobalContent .='
    • '."\n"; +$GlobalContent .='
    • '."\n"; +$GlobalContent .=' Subversion 1'."\n"; +$GlobalContent .='
        '."\n"; +$GlobalContent .='
      • A simple GUI for to the database (some primary testings).
      • '."\n"; +$GlobalContent .='
      '."\n"; +$GlobalContent .='
    • '."\n"; +$GlobalContent .='
    '."\n"; +$GlobalContent .='
  • '."\n"; +$GlobalContent .=''."\n"; +?> diff --git a/templates/GreenPartstock0/Error.png b/templates/GreenPartstock0/Error.png new file mode 100755 index 0000000000000000000000000000000000000000..7640cd5f78e4ac283c79ac9be28640ea93efddf9 GIT binary patch literal 713 zcmV;)0yh1LP) zw53{*2K3q+MFegEzPgS^xjHiL2?sfp2G-`R3c1Wrou<4SI{Ztq$T&5$qz^PGBIISwVOxDW&y% zPA?E~TQ8a{Z4;e)ys&NRg{7|t9M3^oTtb%kfqxc$*7Y--r1dw~(Hm4ew7%qcmrvk9!@q3$ATj0v_KGYOn4fdh;U& zkM;lQQ_3S2ied2h05%`lO(p%Lrf~3Qew@GCVe8_}ZRh$Ac~P2vgts3|@WoS@nKwg~ zRR;RbVsmRydK1OQeLG>aw+C6Rs=?p2*Nf`hODI(t!w+NZqtwrSu`%dlN=-%O{R?z@ zcYxOND!2m{3m_MYL_k3*bf(!kEoc-|qdCfvi)C2tMv&UWyrRLwl`=$GVaUIJg2Yq+ z{~C?aT!V*P0;IN|c2Fy)(vYe03f?{a)FMD*dQL?YX$K$zSSaSJP%1LRQn~xDw)NxC zT!UB6Rfzz;(Gl)vB{W;p7k@o}l0h%h;AJI^ju4?Egp-LPYGsA}pwAO07@2zES%g6! zV?VK?;QNmv9U;s%G3>NY+HJ;Q?*;?@$ClG7gq(8OFJ#A>t9;FAziu~k{%)rMWc^pQ zI-$nJI)p+!91yajEyr}l>6kPbxS-3dp?w{&*7!S4b_cmKkSTGfDcYsef_Qe-Yor!( vIC_Zl6C5RI9K<5QZFv{}NyTe<)!33K*Df00000NkvXXu0mjfS&>A7 literal 0 HcmV?d00001 diff --git a/templates/GreenPartstock0/Ok.png b/templates/GreenPartstock0/Ok.png new file mode 100755 index 0000000000000000000000000000000000000000..b9e2389e39accbc7e04732a78337195354ddea97 GIT binary patch literal 643 zcmV-}0(||6P)j`&3 z*=%n%T$+J$`78`<6Woo$7~X%r&A`g^i@`}ZfZ^}&zuUnE6ijig19EH7>1UtVGO@#7~0^DCac6~esYEg_Dn41a$Aa(w#ozW&x@ z^FMf7CEdyDvCU^^;hf-O70vMc{bhzP-`_L*{_~6B`RnHlmv3DLs{d`vnA&RbKg>Oq z;qjXb4ALT64Bx;1Vc2zS4a1LL-zs^y_}cv);~1X2xybPS*JrSc-oAg&aPQ$G24L9P z&aF9hgjvH<@aMg!S6$e-m>FJwe8j*6j39FzcZN@2KDyYOcro04aS|A4Zy0_7ZGQ3k zHN%~|4;X#}ZC==L?g%^u+1Od ze`a|6@CDfBH9a?vz`_U~jea@uUEDmJrLxN6U_+3>$M;_to;`dG*1T!T!z0LYDCxi> zRkDkVm$Ot_NrZusi4iRJ`TbXh7Z2ZoHSd`H{0Mp!V>I__unAR4u_Y2I*2ogf(*chEkigBfS4JVJPb2Z dnwuC#1hEh+3(=fcot>EU@du(NBAAGH(JDW8 z);F`+WjD!VA2U1izHh#H^PcqYmm3YHk}Kpgnk`Nq=995lRV*~3RsWZtk%7=UB+1o; zzB>M`zpJ`aaPE3)dd*zmMZi!qb>V}hdu tt~53iPj!?6c#wkDCcxwsbKzZp0RU+71as8u_Q3!E002ovPDHLkV1ha76WRa( literal 0 HcmV?d00001 diff --git a/templates/GreenPartstock0/icons/.directory b/templates/GreenPartstock0/icons/.directory new file mode 100755 index 0000000..6ddf3ab --- /dev/null +++ b/templates/GreenPartstock0/icons/.directory @@ -0,0 +1,3 @@ +[Dolphin] +ShowPreview=true +Timestamp=2010,8,30,23,22,50 diff --git a/templates/GreenPartstock0/icons/1license.txt b/templates/GreenPartstock0/icons/1license.txt new file mode 100755 index 0000000..c76165e --- /dev/null +++ b/templates/GreenPartstock0/icons/1license.txt @@ -0,0 +1,17 @@ +The icons are free for personal use and also free for commercial use, but we require linking to our web site. + +http://creativecommons.org/licenses/by-sa/3.0/ + +You are free: +* to Share — to copy, distribute and transmit the work + +Under the following conditions: +Attribution — You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). + +Attribute this work: +What does "Attribute this work" mean? +The page you came from contained embedded licensing metadata, including how the creator wishes to be attributed for re-use. You can use the HTML here to cite the work. Doing so will also include metadata on your page so that others can find the original work as well. +Share Alike — If you alter, transform, or build upon this work, you may distribute the resulting work only under the same, similar or a compatible license. + +led24.de +31/05/2009 \ No newline at end of file diff --git a/templates/GreenPartstock0/icons/About.png b/templates/GreenPartstock0/icons/About.png new file mode 100755 index 0000000000000000000000000000000000000000..466be2a403c193c42838efe4236d7cd116c39d4e GIT binary patch literal 686 zcmV;f0#W^mP)VM~`wErtPJ#XEZxWCXIDY*aX2e*Vk&;oDz^Pv8GCfMoeNnHl(jSc;G3 z|Dluje%!wQcE+||_ae9f?)lqlmF0yhO-+?KFFg9j@cS>s&}+}1f@v*DX)w(KbdSCq z7sJI1_rKq~`=)p2M6X&#r>u=q9PF$&y*%`}FFyUjh#Vxdla#=8>b!d>;iNCa`G5DG zOJBcy{i)9M_xGPC3yU|{<7>o0}@`zox#boAsK7;-Pa zFf#%5DgjOT{rmO%AOHU|GBPsY06%|Wy6zWH45*g@YW2lNUDw#o7shhOW5TUIT(llKOR5)@$1d&Nw@dsm&22?qHS*H9&v?0L=AG U${qL#>;M1&07*qoM6N<$f@H4Ov0u0vH-7@Dj{BC=Q5+FD2#ppgaA z>0wBWvV{dMBHWqW7$T^u}+OUBkvRau0qt>D*Ufux&L^U8+J8f02foWhuYm zgbk0c|6bTvfMEE~%3IJ59!ZKN##sK}^+_w2P2RnQbbK6OpB7bKx>?|Ew&JbtAF#PP zK74LK@7ebdckp0y?VXpHZzuK>>;E4yV}knnwnnmawX}FTIve6R=DA?)|5%^Kiz#4Y zVr7(sBeSzFr!oY*-qs4@-*7tZx7=$+4lPrUIVj8E`z0r6Z>>H@8e)WfFEf z2SE^wVDM+$G|gsPVd3%ql9J-H48t;^P#ChTARgD?_kTr8lMl|)5^f}ug0Q`t3x`3bWK*?`3>l-CC?SzZ zWIhm@LTqgnn#%>#G)U*@o;;~7ph@9~L4I9IAl-atJkT~appakZ^PSw2Hw-hij{Fl~ Y01a46@)R#zsQ>@~07*qoM6N<$g8Q&iWdHyG literal 0 HcmV?d00001 diff --git a/templates/GreenPartstock0/icons/Administration.png b/templates/GreenPartstock0/icons/Administration.png new file mode 100755 index 0000000000000000000000000000000000000000..0ac1ddb0864aeb4f05c2a047533063feb672b6ec GIT binary patch literal 742 zcmVH4Ov0u0vH-7@Dj{BC=Q5+FD2#ppgaA z>0wBWvV{dMBHWqW7$T^u}+OUBkvRau0qt>D*Ufux&L^U8+J8f02foWhuYm zgbk0c|6bTvfMEE~%3IJ59!ZKN##sK}^+_w2P2RnQbbK6OpB7bKx>?|Ew&JbtAF#PP zK74LK@7ebdckp0y?VXpHZzuK>>;E4yV}knnwnnmawX}FTIve6R=DA?)|5%^Kiz#4Y zVr7(sBeSzFr!oY*-qs4@-*7tZx7=$+4lPrUIVj8E`z0r6Z>>H@8e)WfFEf z2SE^wVDM+$G|gsPVd3%ql9J-H48t;^P#ChTARgD?_kTr8lMl|)5^f}ug0Q`t3x`3bWK*?`3>l-CC?SzZ zWIhm@LTqgnn#%>#G)U*@o;;~7ph@9~L4I9IAl-atJkT~appakZ^PSw2Hw-hij{Fl~ Y01a46@)R#zsQ>@~07*qoM6N<$g8Q&iWdHyG literal 0 HcmV?d00001 diff --git a/templates/GreenPartstock0/icons/Cancel.png b/templates/GreenPartstock0/icons/Cancel.png new file mode 100755 index 0000000000000000000000000000000000000000..b622e16c10238f8d16747e9edada5b2e3e64a785 GIT binary patch literal 957 zcmV;u148_XP)-PEqjmVSxg@}o10)=x)_!vZcsFZ|qOJJisvVZ>$ zXVXe(XN@^fFIg;r6z4HHng;QG8_#qz*LJn9p=g7@{;k(w!3+hEE~BRM>X;6N0!@r;+7%|OaZ06V3{ zR?$R7%uF+o1X)wmXjDjMPwQ3`ivNNe3LLNkx8Pex$~2 zfVrwh|4pfp5FSJ%@Vx9L?k96?{ieIIVOOO?MS64?!7&+PMy%5t$>*^3*sR9(#pMQF zfR_x2<*eYMF{p})64x_uty~U!kpT(+H9TZ;m|^7;FL&>MUl$lZ-HXfnj(lx1Q*ADX z0j5efidU@0f-)!RV;bW06!>reT%DB*(E-kU$` f7@0rL{|PVv+@G1>*Fs_a00000NkvXXu0mjfo|VFK literal 0 HcmV?d00001 diff --git a/templates/GreenPartstock0/icons/Config.png b/templates/GreenPartstock0/icons/Config.png new file mode 100755 index 0000000000000000000000000000000000000000..a01513db01feaee578b095cfeb0ca02f20b2086f GIT binary patch literal 628 zcmV-)0*n2LP)u&H5UzytpM`=9AwFau2EQp1Ss0wf!W0bp057_hLw_qq6%@_9Qicpc#j_X|*2iX|8t~ye!-w~u7#KK};bPiW z3Jf1UzG3+M{x!pwkFOd2{Qkut`0^*i*-4YZE0I@}7RT*T|4H+a= z^ceVsB^dsEf6wsi(^G~|H#ac+5Rhm1@%=XgNHa(+*nmk1ntC9c?Lspnm2@o`et-YS z@aywShA$6}FdSHPjKRXqoq>s&je&tpg5lZ2#|+=T{X7P<7;M1zFF!M_1Ct{8csUua zZtZ5^5|U$J<>CiMGB<;&kvYTl3s)FkJbuLR_QeYZpqD|Kr=u7EH1XS;CwCdx8NV_x zaLY41xc8Ld<&zT(ubw_-VCUdu`2O`X!{5LEoPkOYG;VwP4bE>*#F`*L2EcHkm7pv#zs6ni|JfDQ|3NgeI5I}b z3w=l5Jx1pL{qq;(bTEwz;LS{b|NH}GBrr{$0e}BZUp;dcn8u|BAiw~c6#`G=A}I&} O0000t_ z_7hVN@4)Tja1@5x@;rK8;iS`!k-(4;i9}GTREFQjeJBm2OeBS7w*$8abuWB1v|Qe(A#&Y|6r&`wM9mk zha#KJ4vF&{tB1==`eoyV_qva}&TCLObM~L_v%P1#UwR+9H%@-C*7?8QEH!++pk>ss tdSBR|V!BfAf3qG7@|>vcQO|Dy1_0CH8ClRNO`QM$002ovPDHLkV1grFKqCME literal 0 HcmV?d00001 diff --git a/templates/GreenPartstock0/icons/Delete.png b/templates/GreenPartstock0/icons/Delete.png new file mode 100755 index 0000000000000000000000000000000000000000..f9aaf5c462844aa89832a7b5ec6a9bcacfa7ce4a GIT binary patch literal 764 zcmV}-S8=ypXXny6gR?kchxz8eeE;{K;XiYj*w76uU&BqD({qdeiWSyM9BVkwnm7xA zKh=>lPVK+q|8cCQYM>wwzqZcfbD#FYR$10Tmm7;8Uw~|>)2S{GUSGL`_-wdQ5LnpzNcUcbmOp}uaN7(CL(+j7&rg)W<^2{f3+ zAA$%^M}_*{3!Gk}$|@-8u6A%UQxReOorpwCh8!pOBSDTyx=(Xo-iiqRiVC#W(529q zv1Bk{ZMjHDQR1nlW7J57vDzVv0cE*{RY*W_k89^06=hy$Z6)MIvSZu~MN&~xzXdsE z8+@eJZ|GQ+9OFRC8Na>4&?$*lT9XPRfHB)VPEGdj-`L%-t%q8MN&L5qe7MxP#cVB z0?Bg})SnOumrxK86^IL356x3;@-8%-ZRKX8+U2onfLa=xIMU=3;lv085+5@-=7-Q} uI$8l}v<4J) zT4~52)$5;RRKI=g@$IAT;g!GPB{X)qe!;WDSH3Mh>RG-Vk(s!Iq3gc2WXC7_|r zFzzm@Rymq#fQe;66lz!jab#{v(w%nvUj$;UHqCaW#D&l@%r8!YKj4NcUnImt$+?aM zG7|cFO$nA(DQF-8M#lzWc4-bMsDaXK*gFw$Qe6N=QHrRN1r?8J8Vw_3{V+U~DH8rp z1jorzDjnG_=Qp9N#}0INACwDUfiGDyaELK&xrZ$I-DCaf*bCr#hVN)Ri}S z(Y(HLv|dhl-+w&y{lEVJO$6tQqf_xG@k>9qdvAa!)4InESK-mt#W*vwxN-K@+IZ`X zeiA(%&q=S>`>;?bT(DZLU^bgURaFRw!#XGw3IW3~P%f8&=Xr3u-7llj=uOXr) z)G!FiX)rMUy3L^B62~B{q?ZqK2_wi9Vl@Bzw4LG4j}Hug{z)+W`XkA3_uz7dPfxE+ z#A*O8%|E|>V)*j@3&XF!3Jm|488Ut@TGb2Bgo{<^`vFn8`;W=2NFKTJ$a3^wMR42mL`82)^{gQ@w+ zb%yshHi0!eHT>QUcR_M;^55^@zaMdNabehZ_#?xOhjI+Re{-Q|200t5*%PE0qz}al zKYsks{PX7zgR`?U!~PS$8Lm9kV)*`D0IvDn^$j4+K0wVoV0z$Qn9$pq!pOog8)Sg1 zt1AO1Cnv+EO`90Bq`xpoGTi`bUJui}71>fIXvll~`*MFa$oWc2N??s2K73&C@$q4} z_<)_^`L*33&Hm_`!7czMOAjVy*6sgwav6?ZO!TdHKSRKjK-FCQUj{OhyB{07z#7u^$jm k2jUu_ZSNR}1ONdB0IJ<--%Qgiw*UYD07*qoM6N<$g7%;i{r~^~ literal 0 HcmV?d00001 diff --git a/templates/GreenPartstock0/icons/Help.png b/templates/GreenPartstock0/icons/Help.png new file mode 100755 index 0000000000000000000000000000000000000000..1d15c7ba219401076d1d51a27c3e63a6aabe928d GIT binary patch literal 744 zcmVP)x^&bLH>hd; z*jiSSd)sa=GrN2O$SQ%KGt-Hag56pQIy#T7I1}71uQ)Na^6 z(w603kf+fF1IRJDD9L&f{FcbmmbJ`auZ5k6YZsj_mlvSN?HH7B4bRsqYZ zCa!-z8HWX{v2To#SsqoC6&RRSr^rf;YB1{}5hcD_U5^LS1ruwTJ+d>I_OwpHN<~lt z4r4W~=$+$$md|yLC)ERy4326`sf#QxuStX;gi^)*PMel%+uhrz!3t0vtJlg*4FJLC*P3TWNq%(a>&^x3D0Bbn1a3OdJEWyR$HwR|FZdTQ=Eazz z#DF0SVoY50x z!lICA^S0gHd$(QJcRrga)2BW-d_R8Ycg}at`Myt+&1T_$){gBQJ=b2|BAc6-O6<<~ zP1}Ia=Nlr}Lu}aPa`mCEV5{Kc1JAs5RVAMO^R2~wy_OP!`;ki~lOCtj3Ak@t!O=?- zUaqc;H=4?s;gK+C2xsr)m`p0eN51Po6h#mOVe1x-xJSKQJuRxrW944kvq!in~B>Px3m@PKeudkaK9EkJa! zXgvX)L5t(A*I2!WuQ2MF$?4?!B43Q!BG#&#|NQH)nO)Xh@pM5V zk)Q#OrmB`G6Gg9QtrtAk2B-dtPu2V_}> z6d4%4&Z&DUL=r_Pz+Dj~hzTQaiZQeV;{_uoc1<8a6zgO0Vi8xmQ8fxQ6)9CsUuYqN0?Io5LE`p)>+s0Qv?DzZWZ~QC301_){ U^NZk4hyVZp07*qoM6N<$g4y<6IRF3v literal 0 HcmV?d00001 diff --git a/templates/GreenPartstock0/icons/LockActive.png b/templates/GreenPartstock0/icons/LockActive.png new file mode 100755 index 0000000000000000000000000000000000000000..3a52863904eef13d7e290d3b694c75c3869019ef GIT binary patch literal 620 zcmV-y0+aoTP)JVVR!;Dwwdc{3 z+FSfVscq3g98MR}u^{N;CQj$#CJGLMii4BO)uDpx;o#Dt5Ij(hS`;0c6U6FC<2Bb- zxRThUO`0aYUueqL*5Q2M;d}GG&-?TJL~vaf4EcN>9OjA3#H+*ahheDyPY&MH# zvk6I(plKQ+kqFZ1G@{Wc3WWk}+dh1zbFa?w0{l3JVJs(;Nz`gJh@!aKXf)1~P*4=* zaL%8!<00RJH`6lwJ1#Lh80000qBW^5fQ_nundO@Z4F(c z)XjWrbMxiiy!Y;UJNGJK8%X});d#z;{^xfd&b^c2 zc#Z>2(>{i#Z$I~X->>#bqS65ttF1@s0?+ecSr#dd;pgU<%6KdmSPf7i zP2{F}c2TL8z!D%O2#}^=7Z=qW%ibXt$7+8DfMb%i+AIM#To+MpP=QYg_%h0(xuqSP zAe>0|E7BW@B$Ivlsv8z_AsL$kwIpEg?qXcI=EA~nL7VPZHFenkX*8V)4_geZiA#=S ziRa{=Nb3D&C0Z{`1l*7H%f6L!850nBCPOcw$k_;yQj<{0_4E&~yq9jK8lRoZAXEiA z+P4%PcjlW8%j?)kH>ScbJiR+l*JS|4eIeudJ{VrA8};Cx_5C_!hJD%tP17##=HV6zxIl)B5(}ZRO5`6~{0=`yEMo0(lz> zut{fHeuLRj#OI^P)o#URT@l_5yh1qo)#EW{Nx!M*j{pMzFop+aEaMdd00000NkvXXu0mjf!}dJh literal 0 HcmV?d00001 diff --git a/templates/GreenPartstock0/icons/Logout.png b/templates/GreenPartstock0/icons/Logout.png new file mode 100755 index 0000000000000000000000000000000000000000..3120f55a0d09b7a1042272b44627c03231c2b230 GIT binary patch literal 621 zcmV-z0+RiSP)-Xwjl+Kq?cL=6l;`T@?_O z&^B@PVbHd4U|?bR&cN{V1xQK@Y{1{Ye>0t&oEU!p{>||7=TC<3-@k+Lj~_q4_|v0n z+69xBGJJdcfZ@^6`3zi~3=CpwmSDq~pa#Hg6BHC=5ET{0aK+Or2N)ilT+8t1=NA-l zumNgnY79I)JPdq%d|<)Frz#mFBqWFm8+lUVMDb!1@0-1IwompBP@edy3V0P1CX%s-l)NEZFRT z2s9=}1|3Z)20cM_hVuuuf?Y8E=%LdnX+T9+hT+cTCk)-WyKshqh^P<)BO@>jwoH3` zVdKV)3^q14;OPAG=MO`4g$~24+LH_q9y}lz3!rG6b?n$NhA&^fFnj`r2M8=^KF{#t z#S7x15j`QjfBznw3b6rERSO1oHYNsEhA*fF0G&O(zrP=6USJfExw>o38f{4#Nd_r- z83svNX$BsMrQaEe&CbBws0hrBX25K02F%XJAR3gN0RjvF2ky+ml|_Wd00000NkvXX Hu0mjfwA2qU literal 0 HcmV?d00001 diff --git a/templates/GreenPartstock0/icons/New.png b/templates/GreenPartstock0/icons/New.png new file mode 100755 index 0000000000000000000000000000000000000000..9883e31125d6cc1ee33176c238ea4740052bf9d3 GIT binary patch literal 603 zcmV-h0;K(kP)UIAJFIj_n+&--+yf1fNV~Z4fyl>e+UDwF#{vF0f_BKvH`z;{f}kl(_~;0 z&MdVshBjGJ*o}{xY2|AUhL?d0-NJDxM5n z!h9el4By^oCKs+6YYZ!0L)r#VgHCrlT7{kEC!VXvQ@7ryLzd#HE%v`Dr zOh60+|Ns4Aczwt#=3>e}J9JFTvrVY%a*aC#%VDeBl{}pPxU;_)NO_6eP!jl=7TJ)Z`ehY(32I z;`Z0Gpm+|PaceF}ZheMY!kb6mGes5OoAF60F+96`)gCCk3?mR%C#!~oqCIr(?Pb_v p0Vp2`q&Sh~8S!OjVgNvZ0RV?d+O5xHL^A*Y002ovPDHLkV1m=u7b5@w literal 0 HcmV?d00001 diff --git a/templates/GreenPartstock0/icons/Packages.png b/templates/GreenPartstock0/icons/Packages.png new file mode 100755 index 0000000000000000000000000000000000000000..e24a47c170e4ee973ecf4fc8848f8a325b76001e GIT binary patch literal 559 zcmV+~0?_@5P)RCwBA+*{8wje&t7lYw|J-Kk({ z7L3Dqaf#=DF%>Na33W5LieKM8F?@J>gF!^eh=GZj1)-IZjp6o@%?yuEFX{stQVbGe zdUJdCzn?$Z7=C)h|UKa0KyVF z?hH5g&S&`l?+08hm!KpA3p*#nrx$lo+|S7Hlff{!j)9qtYXZ;^dyoMP%*?+SgjBp4 zUS3;=qL^P&mEqU-&kWx_yg(6WVfoEq6xk1AWYbUoWPhD1QI!4FiLe2$DaT8Q3Lq zAg%#x2Zz%?L|Fa%hZ=D}1t?;Sj6k9P2m^q!FqKgCf6?^+!w`e1Wx*nbWFQhBMT`;6 z0H|~R!(H$X&D{TJVrX9YkDOS*!SN51j}`_nEueI8`~AZUa95x>8IJ#Bia|{P88G?w z-l+_Ketu?P_8tHL literal 0 HcmV?d00001 diff --git a/templates/GreenPartstock0/icons/PartStatistic.png b/templates/GreenPartstock0/icons/PartStatistic.png new file mode 100755 index 0000000000000000000000000000000000000000..cd273e8284bcfaf883fd76d377f1205aabd9c115 GIT binary patch literal 658 zcmV;D0&V??P)C*(DTpSQ@1R7$1tbq}h5`hvtK6Nt@FpWnR~;S~~m s!vxe+^yS?Lc~Ufky#mw>q5%R70FQwC;IBm3i~s-t07*qoM6N<$fkn}xvEcAG|sg<6SVqo80Rhz}IsdNXs` zdv}*CAsP7YnK}2HIrE(d`2GItKp?=<$g(W_FGN0{j}3>z&~CS3y|5Sk5 zFq_Ta5nr$nSS%Kp&1Nu}Oh6`+amCK(Gfbyb;=k*3IzK6gH!*#1_04|22cyvlHk*xN zpm?|2!FIdlh&r7PE|<%L*XzA{E`ck6D=>${0Y;+{3j3HRi|XT-43l*i;gjuN~PpD9g9YzP%4#( zQWW#8ptf6-@tIF1%^Hmc8jS`7gFz^l%kplw8%JI-olZkCnWUVU&;f5srINw;#^G?l zVzGcwCKFYClHtACH4!7`n!v5Wi^5WHJQ=yIQSS8Yw0Y&;O?v zhuRAWmh5qSdX3NT_1`R!NC<7?F~<4%-vSH(hFzfURkfcG00000NkvXXu0mjf?Xn|G literal 0 HcmV?d00001 diff --git a/templates/GreenPartstock0/icons/RepeatOrder.png b/templates/GreenPartstock0/icons/RepeatOrder.png new file mode 100755 index 0000000000000000000000000000000000000000..3eae92df3d29fbf25f71b14bf71944fb95aeaf29 GIT binary patch literal 696 zcmV;p0!RIcP)|n>RIURFYs&Up?B60)aM~Lmcc4>utf(!;}VLM=lI!L$GPhdykOXp(i+BC zh~_e#G>~n<6dXaZ3%>agru7N&42dcMuQFZoUHlPH67U$bEMS#^rzyc;q=u3Mz$UP+ zh$z64>OP->4F#lB(3(;ai8|1N1K~JS-UILEu+bPSosFXZo+*lb zO8&?QLW;5~&r?LVNI{5PTpY6-PK$fuNC$=#~5t0jFpggBN%Zy%ff?$U57Q zd;rFLsG>mU$13s2BdrfQ81cZ6FF9S}X}_G6=UuopF+$M;X^bB`jc_6%qvc@_oU3lB z+Rar=)oOG(hbS_z$j4;k3_Yo!ss$vC6Y=8kE4X(R{SM;kDkf*=AhR7LQ#0@*L+xjP zZ>h3H$Q;)k?7_$;<|NR#xIktya{DM)7?CFlEfX(C@dElD$56fg;Z4*^Eq!?X>K6V# emfX*80R{m1lAJp8>0>JZ000037k3N%EPriUAh9Da3fgUWSAv7W}K~1WOhjIl%+BBrZ zVz8~Pv!?urOK(o{C9^ZT-#0V6OQEGP04_ufk;c$2^iei*{ z72IdQ7l{A|pKe9*%(iW!`d~09fouG_+O>T!AG0h7g0~v5o|V_2-^FjP9nf&+0!Y1!}F85x>&E*zmKr% zj0>T#i$GqIBoADdiCiv6EX#U^u(Ez972|$knWh`LM{pd65k;{Bp}0*T4?TN^VQjn> z&-3Kkwx7^oVYDHD$#c^%?l_K%ovdx!1loJVPaG#877B$ z?)ORV5p-QAa=Gk9vxo%JFrX{FUf+5dfBVT~LaM5&t_!fTEN91~QCO6OAPC4{Fd(19 zVUK0ma5v~;nf3)iID;AB08eMLS$h34)S&XW@B6)ezyCg+PCwv0rYqZsLpi{9w*2D3 jVk?n9%f9}DUjYUHsvTQmuAQdf00000NkvXXu0mjfCe_!i literal 0 HcmV?d00001 diff --git a/templates/GreenPartstock0/icons/Stores.png b/templates/GreenPartstock0/icons/Stores.png new file mode 100755 index 0000000000000000000000000000000000000000..1b5cd0caa5fef88742d3acb69d9515bc97777e60 GIT binary patch literal 529 zcmV+s0`C2ZP)}3ww}rT6O*Q~;c8nWvh(usetVqIAg{=Vn))W39_)yYozkqc{?8El zr;jBQr5ZZA`*60m0l)v{cZHk=F!C#cVG2$Hb#OQwaJ${e@vR|EjtWE_ z;Rn(m0}|#P5Q^Y)2=`vUagy?`V0?T6D!d2~pOF`JG)y6MMhAj}*_@5d^`p4k9wEXR zym1DXaoMtR3nW>I>p&Q23?-%cFk7+`Ld;B0*Xv^pXcXepb1-R$;m=RKYvT$`OAR86 zhsa+dM5F|fMm13bzTxj0YH?Xo5G$-!$ch4?(?8Qti+SezC#E`FQ=WkHOMn3YpuPy< T(jC}O00000NkvXXu0mjfG^Fk- literal 0 HcmV?d00001 diff --git a/templates/GreenPartstock0/icons/Tools.png b/templates/GreenPartstock0/icons/Tools.png new file mode 100755 index 0000000000000000000000000000000000000000..013f021d78818dba4bbee60ee6512b6fc9a26216 GIT binary patch literal 879 zcmV-#1CacQP)vFF zn59B)sbyxCWaU!kl0gz!O54;!36d49v`GXl^biC-L_y?3lr4r>%;Yi^31x=kjF7pF zO&LQtY;@~!XT9M1W^^ZV9ABuT>mh{ChDTuuy|&7f%|dV4=GAS4eG z*(|GyCAcF+NmLL?>~y=xwMEH^_uMWKNy$lG0J&VNuc>cgPi3x|!$kY@7ZM`ASIhSf zH$;H~VId-J#mWq&Ixrah1AQ18H0wdRi?(g85Ig|t_WgIKluH&d>$4Lu;#8gOvxZ*p zw}vhlvWCSBSmz|$?QE1zs}pEKurxIdvGEJ@IJ=|GWHNdqpdh<&j(^3~rZMEMj`Kp~ zs?^9j+G8-z^7_P-WM;xX0h{dy;$q`LD6;x>dwXEF(E$3`@zeCX*3K+CSWUmNFxZ|S z3DfXoP9W_f`E#E{T5R-g|A1hHI!FzRWf+ee8tjWxQkgGbJ|FD;*hkU%C7PFMDUmZm zIM@6wdy2yqy0&&$M<>x^GJX|BakJ&KWn)H0dPslYU^?}?8|O7!mtW)z9fEUgL{4Yi zn@+zY6gQex$cY)jl9VI}yfdn-tgM~qx%d}){gg1pRZu=H^+NdWw{Bku?J$7n*aDS* z5ZSS_LR2yg_V2H>b1a`&Rdqn?3qb1BHPz|u{?`1u)SZ`G)+t(8Jk{~+=2gGhVaK!9 z6ruOU9r^JXSWYO+DnG0HZA0qo>!HzTW`t1ckcgve*Oj8D^$xm*C%{cQigPQ@Jda7u z^R*+5jg2TTFaHCX22m_K34`tyy3FGcIKFWGt{QFZvcj37C0eZ(rKP2i>+$zD+HBvJ zkB(9o;1tdk?LGHCaaGB*GBY#tA4*G03jzWHrq4eG7yz0BQtT(-2<`v?002ovPDHLk FV1n^@p9=s0 literal 0 HcmV?d00001 diff --git a/templates/GreenPartstock0/icons/Types.png b/templates/GreenPartstock0/icons/Types.png new file mode 100755 index 0000000000000000000000000000000000000000..be0efda6acb6cb982a033bf6b5f2e8479e9812a4 GIT binary patch literal 511 zcmVtksjh77T zI$XeVK^1!#{{8*WfYSi?!d+m^d5Pw{n=iZviy?a!#QqC3fDv05xa95tYtBywYCiuS zF8<}^8;0*6K7rYs0(=awp1%8x;R46ZZ4k{V7QAauy+x5@6A}Vr82J0}4XPLHQZ|D% z7o=P9u0HV^Z{R*Yf9o?S7T{j6O4tb2T$o|SyNZD3rx$L6H6L5xUj#P5JbFDubG9|_ z@}n>DYJPFy4p{TarGZ5tKBH0SYKZ1s8{Q>{Uf|XI`XWU0*;OG$Ffo=tfBvm5%CqI2 zxA!St&2KN=1#7;zF02SyoKf3nc^{BY5!6%S#ijZErF&q_S2jl!q0528K+|(6*bqKl zWeh_;U540veS35fHpAhupys+5YzVI|!X=+CLu|gaJGKay>rhgnveP24Aw0T@yk9Qg z2W!5&FRln**kB}OMf(L{LqMAEA517Blv@D;3;?%7k*K zJ2m{yf=hx7z=!wNvrGfx|KDD30%H&xBnFdbVjv7MEz+hk{QvbFj6rN9*D$aUVF1Iw zZ?|#EF`@evi2sA|l~oZBpf*iEwPXUrzwdXz7{msN!Spb~0udHamO1Od{Nq!C7zDI} zKfhFQ=Y4;qlR@I$U9k8IA!UYpl15-dYC@M~Asg@?>OVL*F)N$Fy80c%yU!0WoIY(! zJ=hQyLVo@D^(DjkyPGk@lie#BCatZ>gd4yoV|D=OKL?XwA29#S+AR#?Mu`kRe*R_P z=Tc<2_4F8A^YL?M7+xAZXZZ5z6C@VOXP(`4_i3w*J>$fG3~RT51C~uSp5ZuC3B&7M zPZqX|Dr=sCmdD|i2h>L{ZGDoAYcCuNo&-~aw`F!NvUu;^VFx&Px#07*qoM6N<$f>tOHDF6Tf literal 0 HcmV?d00001 diff --git a/templates/GreenPartstock0/icons/UserGuide.png b/templates/GreenPartstock0/icons/UserGuide.png new file mode 100755 index 0000000000000000000000000000000000000000..c4b84e2ec8a63baf55e25c2bdefcc23210f0b397 GIT binary patch literal 705 zcmV;y0zUnTP)qBW^5fQ_nundO@Z4F(c z)XjWrbMxiiy!Y;UJNGJK8%X});d#z;{^xfd&b^c2 zc#Z>2(>{i#Z$I~X->>#bqS65ttF1@s0?+ecSr#dd;pgU<%6KdmSPf7i zP2{F}c2TL8z!D%O2#}^=7Z=qW%ibXt$7+8DfMb%i+AIM#To+MpP=QYg_%h0(xuqSP zAe>0|E7BW@B$Ivlsv8z_AsL$kwIpEg?qXcI=EA~nL7VPZHFenkX*8V)4_geZiA#=S ziRa{=Nb3D&C0Z{`1l*7H%f6L!850nBCPOcw$k_;yQj<{0_4E&~yq9jK8lRoZAXEiA z+P4%PcjlW8%j?)kH>ScbJiR+l*JS|4eIeudJ{VrA8};Cx_5C_!hJD%tP17##=HV6zxIl)B5(}ZRO5`6~{0=`yEMo0(lz> zut{fHeuLRj#OI^P)o#URT@l_5yh1qo)#EW{Nx!M*j{pMzFop+aEaMdd00000NkvXXu0mjf!}dJh literal 0 HcmV?d00001 diff --git a/templates/GreenPartstock0/icons/UserSettings.png b/templates/GreenPartstock0/icons/UserSettings.png new file mode 100755 index 0000000000000000000000000000000000000000..041e71a618c5bb995382dcf68271f95371130405 GIT binary patch literal 458 zcmV;*0X6=KP)L-|G2WmyqHAyOn*1l_kYWB)VaqNSo8`0bfJGxMLb=gcmg zo_Lao1PDPubDCpJPx!}!dM^WbQ0$N=9zAdCf&9GewKD?`su9a4BHvxtI-f(YWX z00B+w8!N<~Df|2EA)@6VHVsGN(Lx4Mq+&|tJwjXn$@9~IfT7j33@L1^oLyVbl#X_> zz(B-EUNZ?tMVi{JE=AwGQA6a$j+tU{hhqXro*Rc1$mLS800^t+%~+&R*q$ol@HfA{ zd<@qh0AaP#jALFQ&t3pITr0+Akj*aPv=QZiGpSW>ZJhDE@tN2ncHTa%+OGlyAgtH! z;?rC&|EI9Fjp=lBP~wwWq9v?Q6{@+Cnp&%9vH8?x_lJ& zXX5LaT29hD_n&dSEqm<~cnL2W4}$(@;g0|V04Vug$7CT=ZU6uP07*qoM6N<$g1w%} ADgXcg literal 0 HcmV?d00001 diff --git a/templates/GreenPartstock0/icons/Vendors.png b/templates/GreenPartstock0/icons/Vendors.png new file mode 100755 index 0000000000000000000000000000000000000000..07e238fbe3aa5f322bd800dd0720bfa6e7ddaf87 GIT binary patch literal 584 zcmV-O0=NB%P)PbXFRCwBA{Qv(y10{fofkMEtXwjl+ zKspnjqVLSFuck*A>tK^(oHuXY|LEvwhJXM5VRs@E6GPkD7=!@C%hMa8R%d}-@aNAT zhR>frGhDoQ5vu|E`uYsNfBj-;jo$zltD5hh3B(L-i5s(6e*gZ>@a@|-25D(&tOkJO ze*OG~A_mmRP(0lu6NnkW27vILJ9n@epsA_J@bkwH4DsH~9Sqrh_L(fdfX)M9F)=Z$ z27u%~zWcy%@!oC>xgXzuFn|pJx!~#3r&tY8R#pZpY@3rCU;{t_$;Zcs z)c}y(PoM$%Ch817etpMu0mybxYTUhhH#opRfQyTZK}}5!%zpd!EjSE5efh%h^9?sx zj9ug_10(Z4hA_``umRJTEnAie^1}7&*Wm#NGFV1N1|AD{_wX=0y7wF`FQ+8Q@PYj( z!I8b~$&{P`2^zb{|Dlue&L-3P>ujeVnjmEr0QWO*?r z3vFOdy2hxZ14-f%5)$1&+wwtdAt9lOz%VIA4lq|&R}}ddFJ6=y7#J`xQktCs0t^7U W?E2quUz~*i0000JMlH0l zQMM4DIOYL1u8+n-K}0N6gs_T+B(m8*z{+MH(F9^(!NN*JEz}|)Y0@asQb81TMV57O z3^8G6GMSk>*K^M7>{^BO4j*@zdw%D9_sqQstu^jEy!OJypVJ|H16_vUezL*WE#l!|5K z@?*GLo&+5gS!LZA8=^!}LT1H*EK?Mj7nO=730L$!nj4nN>}2|0MPMavA_vJJ2m}_3 zT%G1z{+3jWZ3{eE!S&IrZJ5`X6$fFfGK=@GBoW#$&xnh(V3zbCa?pac65BjS4){I5 z%+v#9N3L|>FmlT*Z=vD&ZVQaysflSxzA1$RA!fa?3qoOrn&iNy>Wcc-ZWja zgxKvHG;w6`5X^yt0vzt!-+`%!A9(oi<_D_PYB9kL%x1IWRPrV%-Q`vILYg5>{1spT XP4K00000NkvXXu0mjfAJQzs literal 0 HcmV?d00001 diff --git a/templates/GreenPartstock0/menu.css b/templates/GreenPartstock0/menu.css new file mode 100755 index 0000000..7181648 --- /dev/null +++ b/templates/GreenPartstock0/menu.css @@ -0,0 +1,67 @@ +/*********** + MainMenu +************/ +div#MainMenu { + margin-bottom:0px; + padding:1px; + white-space:nowrap; + display:inline-block; +} + +#MainMenu ul { + margin:0px; + margin-left:4px; + padding:0px; + list-style-type:none; + list-style-position:inside; +} + +#MainMenu li { + padding-top:0px; + display:inline-block; + margin:0px; +} + +#MainMenu ul li ul { + margin:0px; + margin-top:1px; + position:absolute; + visibility:hidden; + padding-top:2px; +} + +#MainMenu li ul li { + display:block; +} + +#MainMenu ul li:hover ul { + visibility:visible; +} + +#MainMenu a { + border:1px solid #198533; + padding:1px 3px 1px 3px; + background-color:#cded9d; + font-weight:bold; + color:#198533; + text-decoration:none; +} + +#MainMenu a:hover { + background-color:#629e1f; + color:#cded9d; +} + +#MainMenu ul li ul li a { + border-bottom:1px solid #198533; + display:block; + width:100%; +} + +#MainMenu img { + border:0px; + vertical-align:middle; + margin-right:4px; + margin-left:2px; + /*display:none;*/ +} diff --git a/templates/GreenPartstock0/message.css b/templates/GreenPartstock0/message.css new file mode 100755 index 0000000..4637c6b --- /dev/null +++ b/templates/GreenPartstock0/message.css @@ -0,0 +1,49 @@ +/***************** + Message +*****************/ +#Message { + padding:4px; + border-bottom:2px solid #198533; +} + +#Message #Error{ + margin:0px; + background-image:url(./Error.png); + background-repeat:no-repeat; + background-position:7px 2px; + padding-left:30px; + border-width:2px; + border-style:solid; + border-color:#bb2222; + color:#bb2222; + background-color:#ffaaaa; + font-weight:bold; +} + +#Message #Warning { + margin:0px; + background-image:url(./Warning.png); + background-repeat:no-repeat; + background-position:7px 2px; + padding-left:30px; + border-width:2px; + border-style:solid; + border-color:#ffbb00; + color:#ffbb00; + background-color:#ffffaa; + font-weight:bold; +} + +#Message #Success { + margin:0px; + background-image:url(./Ok.png); + background-repeat:no-repeat; + background-position:7px 2px; + padding-left:30px; + border-width:2px; + border-style:solid; + border-color:#00bb00; + color:#00bb00; + background-color:#aaffaa; + font-weight:bold; +} diff --git a/templates/GreenPartstock0/partview.css b/templates/GreenPartstock0/partview.css new file mode 100755 index 0000000..c3ee38b --- /dev/null +++ b/templates/GreenPartstock0/partview.css @@ -0,0 +1,56 @@ +div#PartSelector { + float:left; + padding:0px; + font-size:0.8em; + border:1px solid #198533; + background-color:#cded9d; + margin:0px; + margin-right:10px; + font-weight:bold; +} + +div#PartSelector a { + font-weight:normal; +} + +div#PartSelector ul { + list-style-type:none; + padding:2px; + margin:0px; +} + +div#PartSelector ul ul{ + margin-left:10px; +} + +div#PartFilter { + font-size:0.8em; +} + +div#PartList { + float:none; +} + +div#PartList img { + border:0px; +} + +div#PartList th a { + color:#cded9d; +} + +div#PartList th a:hover { + color:#141; + text-decoration:none; +} + + +div#ShowPartHead { + margin-bottom:10px; + font-size:0.8em; +} + +div#ShowPartDownloads { + margin-left:20px; + margin-right:20px; +} diff --git a/templates/GreenPartstock0/style.css b/templates/GreenPartstock0/style.css new file mode 100755 index 0000000..f752d8d --- /dev/null +++ b/templates/GreenPartstock0/style.css @@ -0,0 +1,137 @@ +/***************** + Global Design +*****************/ +body { + background-color:#bddd8d; + color:#198533; + font-size:1.0em; + color: #198533; +} + +table { + background-color:#cded9d; + text-align:center; +} + +th { + background-color:#a26e1a; + color:#cded9d; + margin:1px; + padding-left:2px; + padding-right:2px; +} + +td { + padding:2px; + border-bottom:1px dashed #629e1f; +} + +form { + display:inline; +} + +input { + background-color:#cded9d; + border:1px solid #198533; + color: #198533; + text-align:center; +} + +textarea { + background-color:#cded9d; + border:1px solid #198533; + color: #198533; +} + +img { + vertical-align:middle; +} + +li { + padding-top: 2px; +} + +a{ + color: #198533; + text-decoration: none; +} + +a:hover{ + color: #198533; + text-decoration: underline; +} + +h1 { + font-size:1.4em; +} + +/*submit buttons are in Button-class */ +.Button { + background-color:#cded9d; + color:#198533; + text-decoration:none; + border:1px solid #198533; + padding-left:2px; + padding-right:2px; +} + +.Button:hover { + background-color:#629e1f; + color:#cded9d; + text-decoration:none; +} + +div#HeadContainer { + border-bottom:2px solid #2f8f00; + white-space:nowrap; + display:block; + margin:0px; + padding:0px; +} + + +/***************** + Login +*****************/ +div#Login { + margin:0px; + margin-left:20px; + padding:0px; + white-space:nowrap; + display:inline-block; + height:20px; +} + +#Login input { + max-width:70px; +} + +#Login img { + border:0px; + vertical-align:middle; + margin-right:4px; + margin-left:2px; +} + +#Login a { + border:1px solid #198533; + padding:1px 3px 1px 3px; + background-color:#cded9d; + font-weight:bold; + color:#198533; + text-decoration:none; +} + +#Login a:hover { + background-color:#629e1f; + color:#cded9d; +} + +/***************** + Body +*****************/ +div#Body { + padding:4px; +} + + diff --git a/templates/GreenPartstock0/template.php b/templates/GreenPartstock0/template.php new file mode 100755 index 0000000..4d0f63b --- /dev/null +++ b/templates/GreenPartstock0/template.php @@ -0,0 +1,21 @@ + + + + ldPtartstock + + + + + + + + +
    + + +
    + + + + + diff --git a/todo.txt b/todo.txt new file mode 100755 index 0000000..ab1d538 --- /dev/null +++ b/todo.txt @@ -0,0 +1,4 @@ +-LED Icons credits ins template einbauen http://led24.de/iconset/ +-Delete Storages, überlegen ob das immer geht +-EditStorages - MoveDown über dropdown selector ??? +