From ee18a5de8f5b186faaf5d3fcfb107c973626597c Mon Sep 17 00:00:00 2001 From: Roland Haeder Date: Thu, 10 Sep 2015 22:15:37 +0200 Subject: [PATCH] =?utf8?q?Continued:=20-=20fixed=20handling=20of=20categor?= =?utf8?q?ies=20and=20products=20in=20admin=20area=20(a=20lot=20stuff=20ne?= =?utf8?q?eded=20to=20be=20fixed)=20-=20added=20stub=20page=20basket.xhtml?= =?utf8?q?=20+=20bye.xhtml=20-=20added=20add=5Fitem.xhtml=20for=20later=20?= =?utf8?q?confirmation=20of=20added=20item=20-=20added=20navigation=20rule?= =?utf8?q?s=20-=20updated=20translation=20keys=20-=20updated=20jars=20-=20?= =?utf8?q?added=20copyright=20notice=20:-)=20(and=20CSS=20improved)=20-=20?= =?utf8?q?many=20more=20I=20forgot=20...=20Signed-off-by:Roland=20H=C3=A4d?= =?utf8?q?er=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- install/install.sql | 52 ---------- lib/jcore-ee-logger.jar | Bin 8032 -> 8006 bytes lib/jcore.jar | Bin 28103 -> 27933 bytes lib/jcoreee.jar | Bin 13934 -> 13784 bytes lib/jshop-core.jar | Bin 24767 -> 24579 bytes lib/jshop-ee-lib.jar | Bin 7265 -> 7234 bytes .../localization/bundle_de_DE.properties | 21 ++-- .../localization/bundle_en_US.properties | 23 +++-- .../beans/basket/BasketWebBean.java | 83 ++++++++++++---- .../beans/basket/BasketWebController.java | 37 +++++++ .../beans/category/AdminCategoryWebBean.java | 6 +- .../category/AdminCategoryWebController.java | 2 +- .../beans/controller/ShopWebBean.java | 13 ++- .../beans/product/AdminProductWebBean.java | 18 ++-- .../product/AdminProductWebController.java | 6 +- web/WEB-INF/faces-config.xml | 11 +++ .../admin/admin_category_selection_box.tpl | 5 +- .../admin_parent_category_selection_box.tpl | 4 +- web/WEB-INF/templates/guest/guest_footer.tpl | 9 +- web/admin/category.xhtml | 4 +- web/admin/product.xhtml | 21 ++-- web/basket.xhtml | 27 ++++++ web/bye.xhtml | 64 ++++--------- web/index.xhtml | 90 +++++++++--------- web/item_added.xhtml | 27 ++++++ web/resources/css/cssLayout.css | 22 +++-- 26 files changed, 324 insertions(+), 221 deletions(-) delete mode 100644 install/install.sql create mode 100644 web/basket.xhtml create mode 100644 web/item_added.xhtml diff --git a/install/install.sql b/install/install.sql deleted file mode 100644 index d4bce3b6..00000000 --- a/install/install.sql +++ /dev/null @@ -1,52 +0,0 @@ -DROP TABLE IF EXISTS `category`; -CREATE TABLE IF NOT EXISTS `category` ( -`id` bigint(20) unsigned NOT NULL COMMENT 'Primary key', - `title` varchar(255) NOT NULL COMMENT 'Category title', - `parent` bigint(20) unsigned DEFAULT NULL COMMENT 'Parent category', - PRIMARY KEY (`id`), - INDEX `parent` (`parent`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Categories' ; - -DROP TABLE IF EXISTS `contacts`; -CREATE TABLE IF NOT EXISTS `contacts` ( -`id` bigint(20) unsigned NOT NULL COMMENT 'Primary key', - `own_contact` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Whether own contact', - `gender` varchar(10) NOT NULL DEFAULT 'UNKNOWN' COMMENT 'Gender', - `first_name` varchar(100) NOT NULL COMMENT 'First name', - `family_name` varchar(100) NOT NULL COMMENT 'Family name', - `company_name` varchar(255) DEFAULT NULL COMMENT 'Company name', - `street` varchar(255) DEFAULT NULL COMMENT 'Street name', - `house_number` smallint(5) unsigned DEFAULT NULL COMMENT 'House number', - `city` varchar(100) DEFAULT NULL COMMENT 'City name', - `zip_code` smallint(5) unsigned DEFAULT NULL COMMENT 'ZIP code', - `country_code` char(2) DEFAULT NULL COMMENT 'Country code', - `phone_number` varchar(100) DEFAULT NULL COMMENT 'Phone number', - `cellphone_number` varchar(100) DEFAULT NULL COMMENT 'Cellphone number', - `fax_number` varchar(100) DEFAULT NULL COMMENT 'Fax number', - `email_address` varchar(100) DEFAULT NULL COMMENT 'Email addres', - `birthday` date DEFAULT NULL COMMENT 'Birth day', - `comment` tinytext NOT NULL COMMENT 'Comment', - `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Entry created', - `updated` timestamp NULL DEFAULT NULL COMMENT 'Entry updated', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Contacts data' ; - -DROP TABLE IF EXISTS `products`; -CREATE TABLE IF NOT EXISTS `products` ( -`id` bigint(20) unsigned NOT NULL COMMENT 'Primary key', - `category` bigint(20) unsigned DEFAULT NULL COMMENT 'Category id', - `title` varchar(255) NOT NULL COMMENT 'Title of product', - `price` decimal(20,2) unsigned NOT NULL COMMENT 'Product price', - `available` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Whether product is available', - PRIMARY KEY (`id`), - INDEX `category` (`category`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Products' ; - -ALTER TABLE `category` -MODIFY `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Primary key'; - -ALTER TABLE `contacts` -MODIFY `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Primary key'; - -ALTER TABLE `products` -MODIFY `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Primary key'; diff --git a/lib/jcore-ee-logger.jar b/lib/jcore-ee-logger.jar index c65212243809f11f3ffb24a9b60a199155e03c07..6160458d2a2ce3da276e245a39698c4b05cd18cb 100644 GIT binary patch delta 786 zcmZ8e-)qxQ6u$Y@uCdcnS7m9MwsTU7xcXQ9z(O>Jq`2xf8 z2=yS;ZZ(2Ky-q7NotIzqR}n(hMs8ux(e%i|*qBl_>xOL>D~%@yX{Xh25@i2Agm;Kh z8VP5qED4XPJl$@=IyK{Joxf1fWC|e}M(J_5P9K6MeH=d0*I6lm-e++}m{iXFtrXLbT)ZXB*~I?jG`0<3Uh zd|KmjAoxzQyrSr^=#zT+KxVR9HO$L~UDE-4X;|@1WcffKqvkEMW>pLwQ`G+)oXuLL z5}^~;Y0Ii7D#lHtk{zhq#Y@J34k!G|VON0^-FC0TRb4EXZrH_o*)qGI=(Luf`bTLz zr{(v7A3Y?#4Qp<`E3(Ov`TY`(ZTA9l(IaHOx1-{|RcwxBm(=+JMfWj(?Zc&KQIXn& zH&HQ8T*Mr2MZHr9eVr8Gn<(wx(X5Ihbp{s(p(+N+MfWi92m`6%Zf1Lja(bKc8s=x+ z+dbd0_hFBNP;==3%*K*&qT{)YoyL#wR&(hNJc#ut$Sa0Vt#5q58syVF2GP0ihb?gg ze#RnXUO`EuUj|%6(3KH}dMxTfOp*%R!eu93%=%+pxEkyRhOg!X!ClKvF2@>2{ delta 906 zcmX?R_rQ)Pz?+$ci-CcIfuXf}B9A6-OSP8!VUhH?=?n}E=@Xse+069};?2w_Zct|e zD!8ctB7bWF$;oPr<{&Db(H2C_V{`^lj~TsqTY*N@=1OzxF)}ddO}1jPXXKq+$z%j1 zS2I}w$)`-Y0lZwC3JMBIsfl^IDVfE|`DLj^mAbk4DXF$fi8(n+cD!6R`XJe2APd=v zTJHDeOfevTL$xk=QGMenqq{R-@q^PUQJNX>5A~P=+@8l26u0ZQdSwLhJ zixZIC!=eI~dC1}byw|J4%P%x z7?hu1qL7nXmYQR$R8o|foC@^qWIc9W3y3iwX^0sJU0}o0GSf?o5=%1k^U%U%b3eNw z6EN^MAL9JN0it&ZnS=QsMc%W5BIS{kC2G7*){r&@NyJObh#dijVSZ7%et>-|*@~d$q zV_d~4)_7LIgo+<)h{b6IXH-1L#%Eddyz0p{RjJ~y31MP5B24Vkw@WcXO0{`P0!w5i z86lA1@H`nj0`WvQ@Q+odG2%^F9W_MEVe%8a8U4@rzC7kp;mW41{X zudD5ihWv#XFaJ_WbCNBcuH$#laS;c5w zkhqm?7LLr|m7i+J#L)mO#!~?>;h2J_6+EL6dEAV7IIfZ81TTN2;UvbHXHW+36faMa zo!FLH*{Z;!U{b};HALgQhL>=Gt$)FOUsmvnii;ZJ@v0fW#3cq(3|>?5I{UxOzAm%X zuQa@YUo-EDhBxt+f~yMN_BgWKvheS}pA)DUMa z(OHHB2(^fGSAtz%AwecTAoxQZHt>;e4~l2Vb;1*FFgj^e8 zs#ox^XHjjriBZYl=fhHg+iZu8y4;RxqMt6l0{Q;}JZn<1q~BaG^rHUROKv zI4kc`uv^C-d{4(p?A4J7CsX@$EJcz|gO(y8sI0WAq;zfDx++)In))i1m+3Ty>J?~sVGLttS3M18w4pRmB`oEG*U93TdZnyIaX0T zek`0MV>cGg6jiC5xH49g56<$-jTymSU5WNv#k&wcz1J#2nab4q zv@Kb9pN@Jo=rlKLbu=PQ=iyOMq0{Izi_>idwpIxt{baU$N7~Nlpnr8J(6g* z+md{BeIqUMi8N(67lUr|odN9KHu=9^=?$kUn!Al4ZsKOkydiPJ8Fr`5C6W$#rK5HJ z;;U{w`p(qYeZrrcQ4adQd*(jyKAg`RGe+U!c#l5!&vLHED(Cnad;3#QoDq3EXKP8G zOkZ(&m(KVgJTdmP)leLcu!z+gEu6pBjW&5bEBPg7WLZX zBR0;lXy~;WA-3ne|DOnQ&u_d>h)O#tCWwn(XIIJeY>W|e4{Wf{fH7ogvD^Tq3_qv+<2=my@ oJriTW)zb!1qGZ5g#GSnn=~m2})1}IEH_a-a9*FX9xu2!~1FR%}^8f$< delta 2988 zcmZuzYj9Q775>h-m%C5SJ%JEHAmKt1$U8T0o(XveLP!XKgpdc1+}zw;^5B9YAOax? z$U|%y$fim~@IfrJ)mG;sVwHlGidGbD5f$o;Kb-26vF%JdoepZ-wN4(xMbFIMYwxwb z_3eGuUTdFo@|JS-wqjIQSgbmr0oRL<8cD(L7blm!8Rk9d1>ikeyxul1Eo1%Mc}HJN zPzms9H22>mQ7_|_bQY_XTo%Waxh$?JIV?1F9*ZKigvEY!4vULw9*b|)Qtdjevb%K3 zX}QEwmF>jtAUM&-T|ajNI(2(=q+l^~FUud+;v7*tqZjQqlsryb|4Ja33;H0>|X8rGkP z3o+*}BwRId+mhCp@<#H>Uc898* z^q-jfn8l)Q&yeXkmz4M9-*dXH?;E%-J-M%2KM?p(#w}bD@<#)I!VLo-ad#6pWbeXh zVIK>8V&GHUGH?V(1#TPov;X;pgQ{{-78GS&L_Uh1 z{4~oBJHTzW9B9gvP1O_n4s*cjbgV|bK!!krj+toG(S$X2ti?Jz)}xs_7sseYz^$QG zz@wuLUL70IuEUNFX6a<&Zi+(!zOmy%<~5{#B1p0;T8=E8hU6r30pNJYS_l= z2L-kZJmmkj`i^2#+hY}k$-{Nw4#llN@hS+e>2bL`m$^3Ax>~wCv{!*0eoIZcV%dpZ zGNw6G_Safx^$P4Z(1(730Rwxmmrw>C#y$i4vCF_RRLL{7HGKyRisnIqM+_XoqXw4X zM+TCR%%dM0RAEj7sYp{0RqWd0DcR(s#e34c9$%}cJ8i44)3@nCUs{i6dk;I58&sNc z3LHOx-RSD_i~!>qGsDCb1`@V;?tvvR?1z?hZ`!!o<$K6v^KV^sM77VMgXfg6Q$kFr zkDYACe5BDl2n&!ymTVfoE0@$CTAoZ1o`GQGA`TWhvsqY(JTv8%A)oFNPN51EkX1n; z%|c-P4t9Yef#RsUP#wgXgpv`?H{_It{xartLLcFbpi&&>9FI(tBH3g~$095qjw&n{sP-qWu_?mU-A$>R zDVv+K$6LERKAI@yRHp5*GG*-{>k5Gc`Rdx&X0Jqz0#Q;_S-Ge*MxfT<%BP&~aBXv? zZ|!OCO0R79b$VJW+qd)xtTs@O26=Yf%$bb_m#0DHS!ZA!;tZ})ffWW^Xf`kv5%TNY z=`v`2q@zVaNEi9%?ab(nPK{nvUtUW~xec_!BQGbW$d2_B<>xbc{Ii;0Qk0eQBi9#w z`LGdd3?)be-I7k!aB9;*Pp4{+M*Ob_`sFqWukGaWJyWBH*SGDhzKBhfZ^eTIpbtin?c`o zxu(sbo;8*7NLvJJeo2}yhczKO@4*vs9qo8r)+!%d^22w3%?4|`zl4agdrfTv! z)WL95d)ONr#SxuY@~t*w81*GNG!P~~^cI*=zg>2*?iks*%?`kvjWo$9>hf=q zlfM`F^LPIJSDzK&##hzoGc<5m9^J5jw{&fTLoJPwipL>;t=Xi}Zf-QX-Jw1`%jD(* zS=XLrZe+@n2Od2~o8VSBN=9;MV1L{QIQ70m8SHSV#}mjnUFLR7=M@`C<4Q6${ZYDn zsw314gfge4WtR=$RuI5_Nq*2##h%ff#Fa^&N%F;%$#Pd`sJW}LKQQ_W<5C-ah6X;% zA~2n9u#C*L%ZzNB%k+Ps}oK!Z3+e9lP{tv8Ug~|W` diff --git a/lib/jcoreee.jar b/lib/jcoreee.jar index 935a2c95c4a2c3876bdb5fbc0aa3c28141edb024..3186bb61c16482959c3c7ad77a27adedc3b145e0 100644 GIT binary patch delta 2127 zcmaJ?du)?c6#so+*WLEpZM(Is+n{?eM!T-Cb+7KhV042$VRXDvaDW0b=9oMb6`3f4 zLj>pj%S6MB2nmT3X(UFX|CpHYhY66F5JOCikr)j4z(066@SLx1tZHm}?>YC}bIv{Y zob$Wi&Auz!WUSMYVgNSa^60P(IxdZtv^E!?%^3hNFx=GRsx1xoL?W}d_V3!Xqklu+ z@Tq`)X>|Bv0nfh&X;!&fIg^-H!(>RC!{jS%J`O}XC0^m`r-peag(kP6sGT=gu4Yda9P;X!k8f=&=Fpt?rf%yiUh#C}olYwTI zEHEIkP@qMiRiI6UJuUH1j8;ueFBnqyXQnEP^eUIXR{bh#Jfzev&_VtL{NzobQ`I|~ zoE;L2u$Wd7U09+HJBlqabStMf;E-5~WfB=!F0evA0sENm%5nVf|4y9io z+zbOHs6sCCC>~%KUSttvE*}NZOl~>~p_|+c6v1M0GvP-H@kbFrF{}_cj39YQg#!o3 zXC6t?u^%DKqHE74n=)7*zy~Q%Do`d67RV?Us1T?WsG`3{3zhHADXb=K9g&9x=geO_ z@7r@O4d5}4G9OT*)2FEGA=luW21VM&Q@eo{5j-leHVq!EW8q^w_1Li9zy>T8*qDYKJZ>j1Pq3>^0-Fs7 zWp9hXlLA`>dgEbFFIRD^3TI}RRg7jX^U~%vfj){wpjO~13QeF(oz84>_DS?(JIN#l z@U*&{**kRyc1rBRZb^B6M&en7CHCMs4Y}%4QFc~)|G@5D63=71#0%If@S?;%45|;k z(;P2hzr@RUg`FNy-*`jXt4hoAI}YNI#A`UhF5lpOurYU3qbB}1l&|)>bK=LdvMt)N z_@`6XX!Z)KnUkt8ralU0#>;%`G|K?e)Un*)APLQq(=Krps5F~ojGCz0Y?3iVsN~!v zW2iwbHHiy12^OW4a5sKNJwYNB4YVJH{Q>ofAxx+U6DR^vfhK`wVl?W$KhZ$z`wWr= z=EmIlLf*x++i>58)rp1VCxs%&rL$Xz*U^gCi5esuqH_+zKDmwJZ{=M}F@b!c`<7J^ zhfL~cTdIZHBLmeuMGU?LcT1f>y$y2&8hDjJcRCsk*csneLo+synero%2U6i>XHl%`S;0h)GIc zw~1>N4m4}aRZr=>_}Rc8n)aDG6})2>==~Bd&kdY29?}Ft0<#2WPl9ea;kztRAxcH~E@nL-dm#|{FJ0<^3UbJm za?+?IUPo0@WsZlwNYO8ks-AFN^3$$92v_ryd^POzeocnkcWfz(b!z$)OX6!lTh4Ny z_KOOY`&h4?7E{%5MYh^kE?IDd1dCZvzH!rr{+<6YE@>s76TkckE*&?b2g#~1lzdpS zeo>PCm!u!~UwzI(;>Z52>bHtQRi|eLCtoM|1pl}JJ*PLKE6BpkMscN2dz%(P)fh?r z*O96BPJVlio@^e02?xN5{XdXRwsKh9>O!R~;D`0z$%2~GgjXI9!(-j=C_ZbI3RWc) zlfHdPPOsQWF-x7%4Eh}AsAGQ{Bt6+l1|Ii>!PTk|7s+1j(`V*QNbB?|YHf9?8DJ7r iliWCFOc;!#cc{wE?(UGgv64x<1!{F9J@tGU+y4dKNvs(F delta 2240 zcmah~Sx}Q#6#ni{lAHYe2_#@pHbKLd011S!2nK>k*klzI*HX18Dw|T5sz6I^>w@6* zwKH_azVxBfHV^Ie!H&~Dw9^Ni&UCbWaM~Bg(bg^x9XF)s{wmMT;p>IcN*~}+73Mu}S zA@_%Qw2N$3BuNh|ljH)clw^+8NMcu7CFxaaCHYWkAQJgQxvxli+juX=Rz>mLf$Yg- z${^V+{K+!agVh%q? z2}gjVl%tHJoc@dsj3Pcn=pKwIaY!a31LdI6svus$su$rCRUf*w1l*V?ZBCw4i>YLH`ylGIByOgVFOioPYawjm88ILI-q;Sff}=S%vNU&mn$M{rc5 z_8rsk27DTh;{-#RxZ-p!>uziu7#cmK;Uo@f7{fTngoZcqmgsk;SSRtehEsS)x_wt% zaC+E#VmfD;xaPE4PveY+vzV5SXK1>->_Q|nsVjzw$Y^p8W9^Z-lw&Mr3O3P_mN(|a zH59{7ElcmFxGB>$j0(?G}!Djxcd@d>)~S&X47}L4Q!kwFgMK z2M0}+4UObS4pkb(ZX#Zxi*TN(O0shlX9|`Vhb&T*e$!x=FcCc6I`J(Bj2A zMJ%km_5a90!;(N25^u=AjvPUP5b<|bD7HnzIuLxcp_!EOmVmFlGsaBw)l5uy_arWM`+S>jhNtLb7g>*pQA`4ljp~qi7K%=(b9f zpuzGlww6j-@&Ne@*#>@4OY(s1J^a^94#| zugU1y&+v?k$M2zU=rlOe=WTChN@C2@PnS62ORc*3)i$OQ46LLIt|SvMfKwBPtzh!WiQ@Wb(aTw*07ehj45uy$g@?<_7i`?RW9{~>t2ZBh zwoqrwPjiI+7Gz4ZwNhb^=t1(%^dxwshqR@l`$(%6ma5mpS(r+CO**6-@r_l&PU{h7 zcD5@&Nq9tUbodLNA%|Pu!@BPj-){7aDX-sKpgXwlE*%3cD@bhCNh2GdKHoG>dSrg?-r1n=RadDhp${ zlRjBi={%(=zI;ONdd_s@)RX|-YjYeH;a#$1Lkjq(FUxmLBtF5-^b za2+djv|nD4_SV1_msG>Id0tnFWdBU;SznB+HD=K9va4w%XwXxI7M%^J*0z{PMTHwF zSR!PpkV=JR2Ck9ZFE{zS$^#2kCc~^Y1*t+*#Da`rDb#byip{)>FTVHIA->y28m-H; zzbx3KB~4qub_ca(XVHO z9K>$qAlHFc>d-PQc6j;aV2kTd`wxD#jUyy8UfO30edH~fb>-=+>2%3^5|^XlzjWb` zmnu#8Gi4R=SF&beWbX+#AT#W|lGdm}85QZVK9kcNQK&HlyN(qmC$rYWQK&Uhhk8@; z>1J7@kR~C`LRJZBQHY6st3sQ?bqehqu%Lak;+$?jQ|Z!DIxKWLFU~>_dhHX-{*XvK zUtLf>8Hs!pIM|mvw2D(9X|GO<#OP;_dD4=AH1b7iv~uc*u&CRW(_a+2q*&~0>OR+L{>nd7x*f<0eHQvL zU@vUEAkgQ=3g%5hFF;`&tV6l{93H(Ky1g%U$mw^<9or?dG}g5=u_@ELU5iEWZ^3pW)~HQorCee55^G|jx%vvtLp^?dT%+UR z04?va#7PrN-q+}4e*ulhB^Ov?>1-2BPCQ%`t)j@`CZ8^w<(wlT2~cZv+Wf>@6xTC` zsgXam^5U1sXYoxrm2UdF*CVdZ_WJc1F1a%I%zTRVIky|^^XpZLrA;CUNSfFE_;laj z+}dO|OgROPjXg&f`ntteW4~W_dmT*YeLi}sKh4>h@PA3z`8a*rAI%Z(;{%I+&t=at z!wEJk0_-qI0|Ob3v+p~G9(_XxWR@iu+VtQ++}Wj;25!ff#<8(?@;PWlPJ_E|FwHqR zp+#J>Wn4FM%V*=TX>iB5ipB?>&^$5d*XM;>_f>Jh=v>DVq zlr1sZFyz-u%BG|fLvtJ#3Ed^(78}ahSn_Pp^x+wf@zh)9_bfk|$#HCKbM^nmsdVdb z9N*OQFJTot6u4pgZ=}uSsvH` delta 2476 zcmZ`)du&r>6#w1ZZC`tP+qGrG4O_bnwsjM>!k#=fx`w<+9CAE{94**R{#Sl_-tL&3To$=i~( zyQjDBtnHlMI+dKBoT8Tt+tnV0JNTH?Uxi<3jyp}nk|PVj&t8_L{g0 z`>4LCbl%;FiEzfmejH$D6ZfFi#J#wW&MhusJQSUn>-Cwq9}g((G4UWCGSS8A*NPhQ z4w^W`fjov-TFBWI4x4xwt@L+iVXD2j*QTAL$Nl$LRU-#AoM{u9VZ+s^LmS!|SRjGL zSi;3hN& zeCY<*ncOu|8{fQR>z3)|sgFZ$&D~|98|xI-n}{LKm06q$RI41Vh01FxB6BUk9VkJm z1%-plP|vXF434DV$mJ2@6YpXOtrYU@07rvxUS^MSn zO}a~v+BbE2+ZPVt3z}(+ghmXm?ka`Vc1c&q8iQ-t;pD_S46H?`A!T&HL$T;wuR@Qg zHz;gW*rd?QkW{6bntss#Klk9WT+Q8QqTjlsCWbJaTC)5%$@`YrTxyAUR$t7$92J?| zThMCdzS7D$!ZnfH+p}~3tHF@>vwONHW~P^$+*v>n|rL#sdwAGy47sO zzvga!l_8YXNT0+)R5

SKJXF7dWM5>{u&sGJYO(37lPql;4n>z;GfiBq5|n$Oa(- zs@V4`Yq%*4NXw;;M?d?2d}+_x^X@?lR)rB0qZmugbpDctx1!-9v=yk#Kr3KMTeVw| za-Ul~dL^`}H)BVvS=_U6N_vRi?p^B2`csgzuc1ep$qJewT!zf!!P&Oc{60A~QJd)2 z^a9((e@?cC>!JfEeYWjen(gz;aWC}wH7|Ml=ee_;>EM80Tf>UQ!GE6}$cpp;CHogj zq(}Sx+9}>x1EvJy)Ahq54RWL9()(%Y=PZ3+ zr{u;E1qYpCw{Xy}yKQV&Oh4yV(~&`+NS|S8gUU#qbhoOc{X2cJ$LVY#5?* zb~}AIVtwG55x@Re*pg0$3nhdg&^7AUkJhm?U4f&c^F;a_OP{FENDFADK98Qx9C>M~ z@s$i`ecPvv>>wqxQ@A;oUTn;x?}yUgnKePOoPLjFobu_7u{2~^mp;pQTa?RR$ul5e t!4&mOp(>6pJ&>$jc4@E>Is5R6=QK(Rf zc(6#*xp~xrmm1Wbq@XBX#n=i$FU6Y&gW}1H)Hko%nhGw=`*`2Xd^7K3KV@HM)lyNh zxd7S$mg_Y&=~=3$3ImB}Mg;&Wwf+$;yEi@3+uL0p9ltO(dhT-VQJgQ;YmFG4-;?6R zZLEjjINMKfn;jx}!v+alJVS7V_YvISM+M9(X?*Nz|7$dH{Zufh^{?Jaq^Ow2R6xz@|ZBv0-PP(}EA&4<#17=NaAS zwRiG98FQ?Bj5WhNhv8PmIJgBUjFW%nNE%p^%A&ZPi2rwCz z3>}9KcLxscq)S_UAgA)|^{6Ullz$g~sBH z&zWj*DplB?nTvm902KL+$pCXxRXkywiv9EJwA8$46S@O<(^NaDaA@&^ZB+w)Ay1T6!Rmrk*G~ct+q6@q!epW3m)2oND!^I>ZRl$ zrRNmGfL;^|=IEhNgo1*iUMi>;L3*-Yyofh%qByg$KdB3|AM?%c&d%$?*Me_yTyvQK z9)PK8-Ir-QU(Jrb2~{3f0H9JIp4Iz$aT4-U4qM%P|H{yfM@28gv^dGIB2F{B z7b6UvGS4t3`x%zySq4MP;fm?O-_mTV!weJJ5W)I=tssL_RD5&fMY*T}unYk%*hw7p zB=C%_<2}D&CfpEnLzf$D%;}dxjsW+yJEgh#yNd#}bmp=f;_DCfyu{Ujjqg0Eivo0d ziVFmoE&*Qfks_cC{KT}AMM4MZ0SGF-6GDo!)E$Nhp-!Grfc=wNA23Ri+g|oQQJD5$ z5vvKmR)6bA@v5cf^~iF?pQZeiF_mVSpcw|OL@. -BaseContact.gender.unknown.text=Unbekannt -BaseContact.gender.male.text=Herr -BaseContact.gender.female.text=Frau -BaseContact.gender.company.text=Firma + +# Unknown gender +GENDER_UNKNOWN=Unbekannt +GENDER_MALE=Herr +GENDER_FEMALE=Frau +GENDER_COMPANY=Firma MiniBasketTag.basket_is_empty=Der Warenkorb ist leer. -MiniBasketTag.last_item=Zuletzt hinzugefügt: {0} +MiniBasketTag.last_item=Zuletzt hinzugefuegt: {0} MiniBasketTag.additional_items=Es befinden sich noch {0} weitere Produkte im Warenkorb. MiniBasketTag.to_basket=Zum Warenkorb MiniBasketTag.header=Warenkorb -Category.has_no_parent_category=Keine Elternkategorie -Generic_YES=Ja -Generic_NO=Nein +CATEGORY_HAS_NO_PARENT=Keine Elternkategorie +YES=Ja +NO=Nein +PARENT_CATEGORY_CANNOT_BE_NULL=Elternkategorie darf nicht leer sein. +CATEGORY_MUST_BE_SELECTED=Es muss eine Kategorie ausgewaehlt werden. +ITEM_AMOUNT_IS_REQUIRED=Bestellmenge wird benoetigt. diff --git a/src/java/org/mxchange/localization/bundle_en_US.properties b/src/java/org/mxchange/localization/bundle_en_US.properties index 99889ee9..9554539c 100644 --- a/src/java/org/mxchange/localization/bundle_en_US.properties +++ b/src/java/org/mxchange/localization/bundle_en_US.properties @@ -1,26 +1,29 @@ # Copyright (C) 2015 Roland Haeder -# + # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# + # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# + # You should have received a copy of the GNU General Public License # along with this program. If not, see . -BaseContact.gender.unknown.text=Unknown -BaseContact.gender.male.text=Mr. -BaseContact.gender.female.text=Mrs. -BaseContact.gender.company.text=Company +GENDER_UNKNOWN=Unknown +GENDER_MALE=Mr. +GENDER_FEMALE=Mrs. +GENDER_COMPANY=Company MiniBasketTag.basket_is_empty=The basket is empty. MiniBasketTag.last_item=Last added item: {0} MiniBasketTag.additional_items=There are {0} items in the basket. MiniBasketTag.to_basket=To basket MiniBasketTag.header=Basket -Category.has_no_parent_category=No parent category -Generic_YES=Yes -Generic_NO=No +CATEGORY_HAS_NO_PARENT=No parent category +YES=Yes +NO=No +PARENT_CATEGORY_CANNOT_BE_NULL=Parent category cannot be empty. +CATEGORY_MUST_BE_SELECTED=You have to select a category. +ITEM_AMOUNT_IS_REQUIRED=Order amount is required. diff --git a/src/java/org/mxchange/pizzaapplication/beans/basket/BasketWebBean.java b/src/java/org/mxchange/pizzaapplication/beans/basket/BasketWebBean.java index f2b30cb7..58697239 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/basket/BasketWebBean.java +++ b/src/java/org/mxchange/pizzaapplication/beans/basket/BasketWebBean.java @@ -16,7 +16,6 @@ */ package org.mxchange.pizzaapplication.beans.basket; -import java.rmi.RemoteException; import javax.annotation.PostConstruct; import javax.enterprise.context.SessionScoped; import javax.faces.FacesException; @@ -24,10 +23,9 @@ import javax.inject.Named; import javax.naming.InitialContext; import javax.naming.NamingException; import org.mxchange.jcoreee.beans.BaseFrameworkBean; +import org.mxchange.jshopcore.exceptions.BasketItemAlreadyAddedException; import org.mxchange.jshopcore.model.basket.AddableBasketItem; -import org.mxchange.jshopcore.model.basket.Basket; import org.mxchange.jshopcore.model.basket.BasketSessionBeanRemote; -import org.mxchange.jshopcore.model.basket.ShopBasket; import org.mxchange.jshopcore.model.item.BasketItem; import org.mxchange.jshopcore.model.product.Product; @@ -51,9 +49,14 @@ public class BasketWebBean extends BaseFrameworkBean implements BasketWebControl private final BasketSessionBeanRemote basketBean; /** - * Item basket ("cache") + * Ordered amount */ - private final Basket basket; + private Long amount; + + /** + * Current item + */ + private AddableBasketItem currentItem; /** * Default constructor @@ -66,9 +69,16 @@ public class BasketWebBean extends BaseFrameworkBean implements BasketWebControl // Try to lookup this.basketBean = (BasketSessionBeanRemote) context.lookup("ejb/stateless-basket"); //NOI18N + } - // Init basket "cache" - this.basket = new ShopBasket(); + @Override + public Long getAmount () { + return this.amount; + } + + @Override + public void setAmount (final Long amount) { + this.amount = amount; } @Override @@ -76,16 +86,16 @@ public class BasketWebBean extends BaseFrameworkBean implements BasketWebControl // Must not be null if (null == product) { // Abort here - throw new NullPointerException("product is null"); + throw new NullPointerException("product is null"); //NOI18N } // Has the "cache" some entries? - if (!this.basket.isEmpty()) { + if (!this.getBasketBean().isEmpty()) { // Generate fake instance AddableBasketItem item = new BasketItem(product); // Then ask it about it - if (this.basket.isAdded(item)) { + if (this.getBasketBean().isAdded(item)) { // Found it return true; } @@ -95,18 +105,13 @@ public class BasketWebBean extends BaseFrameworkBean implements BasketWebControl AddableBasketItem item = new BasketItem(product); // Ask bean about it - return this.basketBean.isAdded(item); + return this.getBasketBean().isAdded(item); } @Override public boolean isEmpty () { - try { - // Call remote bean - return this.getBasketBean().isEmpty(); - } catch (final RemoteException ex) { - // Continued to throw - throw new FacesException(ex); - } + // Check local "cache" + return this.getBasketBean().isEmpty(); } @Override @@ -129,4 +134,46 @@ public class BasketWebBean extends BaseFrameworkBean implements BasketWebControl private BasketSessionBeanRemote getBasketBean () { return this.basketBean; } + + @Override + public String addItem (final Product product) { + // Generate item instance + AddableBasketItem item = new BasketItem(product); + + // Is amount set? + if (this.getAmount() == null) { + // No amount specified?! + return null; + } + + // Set amount + item.setAmount(this.getAmount()); + + try { + // Handle it to bean + this.getBasketBean().addItem(item); + + // Add item to local basket, too + //this.basket.addItem(item); + + // Remove amount + this.setAmount(null); + + // Added + return "item_added"; //NOI18N + } catch (final BasketItemAlreadyAddedException ex) { + // Throw unchecked exception + throw new FacesException(ex); + } + } + + @Override + public AddableBasketItem getCurrentItem () { + return this.currentItem; + } + + @Override + public void setCurrentItem (final AddableBasketItem currentItem) { + this.currentItem = currentItem; + } } diff --git a/src/java/org/mxchange/pizzaapplication/beans/basket/BasketWebController.java b/src/java/org/mxchange/pizzaapplication/beans/basket/BasketWebController.java index f014025f..72bf7db8 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/basket/BasketWebController.java +++ b/src/java/org/mxchange/pizzaapplication/beans/basket/BasketWebController.java @@ -17,6 +17,7 @@ package org.mxchange.pizzaapplication.beans.basket; import java.io.Serializable; +import org.mxchange.jshopcore.model.basket.AddableBasketItem; import org.mxchange.jshopcore.model.product.Product; /** @@ -46,4 +47,40 @@ public interface BasketWebController extends Serializable { * @return Whether the product is added */ public boolean isProductAdded (final Product product); + + /** + * Adds given product instance to basket by adding amount from form data to it. + * + * @param product Product instance to add + * @return Redirect target or null + */ + public String addItem (final Product product); + + /** + * Getter for item amount property + * + * @return Item amount property + */ + public Long getAmount (); + + /** + * Setter for item amount property + * + * @param amount Item amount property + */ + public void setAmount (final Long amount); + + /** + * Getter for current item + * + * @return Current item + */ + public AddableBasketItem getCurrentItem (); + + /** + * Setter for current item + * + * @param currentItem Current item + */ + public void setCurrentItem (final AddableBasketItem currentItem); } diff --git a/src/java/org/mxchange/pizzaapplication/beans/category/AdminCategoryWebBean.java b/src/java/org/mxchange/pizzaapplication/beans/category/AdminCategoryWebBean.java index 81e7d0fa..2be39da7 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/category/AdminCategoryWebBean.java +++ b/src/java/org/mxchange/pizzaapplication/beans/category/AdminCategoryWebBean.java @@ -16,7 +16,7 @@ */ package org.mxchange.pizzaapplication.beans.category; -import javax.enterprise.context.SessionScoped; +import javax.enterprise.context.RequestScoped; import javax.faces.view.facelets.FaceletException; import javax.inject.Named; import javax.naming.InitialContext; @@ -33,7 +33,7 @@ import org.mxchange.jshopcore.model.category.ProductCategory; * @author Roland Haeder */ @Named("admin_category") -@SessionScoped +@RequestScoped public class AdminCategoryWebBean extends BaseFrameworkBean implements AdminCategoryWebController { /** * Serial id @@ -100,7 +100,7 @@ public class AdminCategoryWebBean extends BaseFrameworkBean implements AdminCate } @Override - public void setTitle (final Long parentId) { + public void setParentId (final Long parentId) { this.parentId = parentId; } } diff --git a/src/java/org/mxchange/pizzaapplication/beans/category/AdminCategoryWebController.java b/src/java/org/mxchange/pizzaapplication/beans/category/AdminCategoryWebController.java index 10e8b5f4..545550ad 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/category/AdminCategoryWebController.java +++ b/src/java/org/mxchange/pizzaapplication/beans/category/AdminCategoryWebController.java @@ -58,5 +58,5 @@ public interface AdminCategoryWebController { * * @param parentId Parent id to set */ - public void setTitle (final Long parentId); + public void setParentId (final Long parentId); } diff --git a/src/java/org/mxchange/pizzaapplication/beans/controller/ShopWebBean.java b/src/java/org/mxchange/pizzaapplication/beans/controller/ShopWebBean.java index d2b33be9..32eb722f 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/controller/ShopWebBean.java +++ b/src/java/org/mxchange/pizzaapplication/beans/controller/ShopWebBean.java @@ -40,6 +40,7 @@ import org.mxchange.jshopcore.model.product.ProductSessionBeanRemote; @Named("controller") @SessionScoped public class ShopWebBean extends BaseFrameworkBean implements ShopWebController { + /** * Serial id */ @@ -57,7 +58,7 @@ public class ShopWebBean extends BaseFrameworkBean implements ShopWebController /** * Default constructor - * + * * @throws javax.naming.NamingException Something happened here? */ public ShopWebBean () throws NamingException { @@ -86,7 +87,7 @@ public class ShopWebBean extends BaseFrameworkBean implements ShopWebController Deque deque = this.getAllCategories(); // Create fake entry - Category fake = new ProductCategory(0L, this.getMessage("Category.has_no_parent_category"), 0L); //NOI18N + Category fake = new ProductCategory(0L, this.getMessage("CATEGORY_HAS_NO_PARENT"), 0L); //NOI18N // Add it deque.addFirst(fake); @@ -97,9 +98,13 @@ public class ShopWebBean extends BaseFrameworkBean implements ShopWebController @Override public Queue getAvailableProducts () throws FacesException { - return this.getProductBean().getAvailableProducts(); + // Get queue from bean + Queue queue = this.getProductBean().getAvailableProducts(); + + // Return it + return queue; } - + @PostConstruct public void init () { // Call super init for getting resource bundle diff --git a/src/java/org/mxchange/pizzaapplication/beans/product/AdminProductWebBean.java b/src/java/org/mxchange/pizzaapplication/beans/product/AdminProductWebBean.java index c3de01c0..1e098fd3 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/product/AdminProductWebBean.java +++ b/src/java/org/mxchange/pizzaapplication/beans/product/AdminProductWebBean.java @@ -17,7 +17,7 @@ package org.mxchange.pizzaapplication.beans.product; import java.util.Deque; -import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.context.RequestScoped; import javax.faces.view.facelets.FaceletException; import javax.inject.Named; import javax.naming.InitialContext; @@ -34,7 +34,7 @@ import org.mxchange.jshopcore.model.product.ProductSessionBeanRemote; * @author Roland Haeder */ @Named ("admin_product") -@ApplicationScoped +@RequestScoped public class AdminProductWebBean extends BaseFrameworkBean implements AdminProductWebController { /** @@ -51,7 +51,7 @@ public class AdminProductWebBean extends BaseFrameworkBean implements AdminProdu /** * Category id */ - private Long categoryId; + private Long id; /** * Property price @@ -89,7 +89,7 @@ public class AdminProductWebBean extends BaseFrameworkBean implements AdminProdu // Add all product.setAvailable(this.getAvailable()); - product.setCategoryId(this.getCategoryId()); + product.setId(this.getId()); product.setPrice(this.getPrice()); product.setTitle(this.getTitle()); @@ -98,7 +98,7 @@ public class AdminProductWebBean extends BaseFrameworkBean implements AdminProdu // Set all to null this.setAvailable(Boolean.FALSE); - this.setCategoryId(null); + this.setId(null); this.setPrice(null); this.setTitle(null); } catch (final ProductTitleAlreadyUsedException ex) { @@ -119,13 +119,13 @@ public class AdminProductWebBean extends BaseFrameworkBean implements AdminProdu } @Override - public Long getCategoryId () { - return categoryId; + public Long getId () { + return id; } @Override - public void setCategoryId (Long categoryId) { - this.categoryId = categoryId; + public void setId (Long id) { + this.id = id; } @Override diff --git a/src/java/org/mxchange/pizzaapplication/beans/product/AdminProductWebController.java b/src/java/org/mxchange/pizzaapplication/beans/product/AdminProductWebController.java index 23fc5c65..a2ab4167 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/product/AdminProductWebController.java +++ b/src/java/org/mxchange/pizzaapplication/beans/product/AdminProductWebController.java @@ -89,12 +89,12 @@ public interface AdminProductWebController { * * @return Product's category id */ - public Long getCategoryId (); + public Long getId (); /** * Setter for product's category id * - * @param categoryId Product's category id + * @param id Product's category id */ - public void setCategoryId (final Long categoryId); + public void setId (final Long id); } diff --git a/web/WEB-INF/faces-config.xml b/web/WEB-INF/faces-config.xml index 24e7d72b..4a8b5573 100644 --- a/web/WEB-INF/faces-config.xml +++ b/web/WEB-INF/faces-config.xml @@ -57,5 +57,16 @@ admin_index /admin/index.xhtml + + basket + /basket.xhtml + + + /index.xhtml + + item_added + /item_added.xhtml + + diff --git a/web/WEB-INF/templates/admin/admin_category_selection_box.tpl b/web/WEB-INF/templates/admin/admin_category_selection_box.tpl index 2ae89974..040e4e7f 100644 --- a/web/WEB-INF/templates/admin/admin_category_selection_box.tpl +++ b/web/WEB-INF/templates/admin/admin_category_selection_box.tpl @@ -4,7 +4,8 @@ xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets"> - - + + + diff --git a/web/WEB-INF/templates/admin/admin_parent_category_selection_box.tpl b/web/WEB-INF/templates/admin/admin_parent_category_selection_box.tpl index c3251221..7faf2c46 100644 --- a/web/WEB-INF/templates/admin/admin_parent_category_selection_box.tpl +++ b/web/WEB-INF/templates/admin/admin_parent_category_selection_box.tpl @@ -4,7 +4,7 @@ xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets"> - - + + diff --git a/web/WEB-INF/templates/guest/guest_footer.tpl b/web/WEB-INF/templates/guest/guest_footer.tpl index 64627481..b2853eac 100644 --- a/web/WEB-INF/templates/guest/guest_footer.tpl +++ b/web/WEB-INF/templates/guest/guest_footer.tpl @@ -5,10 +5,11 @@ xmlns:ui="http://java.sun.com/jsf/facelets">

diff --git a/web/admin/category.xhtml b/web/admin/category.xhtml index 53d89251..b965c810 100644 --- a/web/admin/category.xhtml +++ b/web/admin/category.xhtml @@ -22,7 +22,7 @@ Auswählen: - #{cat.categoryId}: + #{cat.id}: @@ -62,7 +62,7 @@
- +
diff --git a/web/admin/product.xhtml b/web/admin/product.xhtml index 2d8f6df0..9e482ad3 100644 --- a/web/admin/product.xhtml +++ b/web/admin/product.xhtml @@ -13,33 +13,36 @@ - Diese Produkte wurden eingestellt + Diese Produkte sind erstellt worden:
- + Produktnummer: - #{pro.id}: + #{product.id}: Produktbezeichnung: - #{pro.title} + #{product.title} + Einzelpreis: - #{pro.price} + #{product.price} + Kategorie: - #{pro.categoryId} + #{product.categoryId} + Verfügbar: - #{pro.available} + #{product.available} @@ -106,8 +109,8 @@
- - + +
diff --git a/web/basket.xhtml b/web/basket.xhtml new file mode 100644 index 00000000..184cf2d1 --- /dev/null +++ b/web/basket.xhtml @@ -0,0 +1,27 @@ + + + + + Warenkorb + + + + + + + Warenkorb + + + + Hier wird der Warenkorb angezeigt. + + + + + + + diff --git a/web/bye.xhtml b/web/bye.xhtml index c8ba5d94..b293326b 100644 --- a/web/bye.xhtml +++ b/web/bye.xhtml @@ -1,49 +1,27 @@ -<%-- - Document : bye - Created on : 05.08.2015, 10:51:14 - Author : Roland Haeder ---%> + + -<%--<%@page errorPage="errorHandler.jsp" %>--%> + + Sitzung beenden - - - - - - Pizza-Service - Sitzung beenden - + + + - - + + Sitzung beenden + - + + Offenes TODO! + -
-
-

Situng beenden:

-
- -
- <% - synchronized (session) { - if (!session.isNew()) { - // Not new session - session.invalidate(); - out.println("Sitzung beendet."); - } else { - // New session - out.println("Sitzung bereits beendet."); - } - } - %> -
-
- - - + + + +
diff --git a/web/index.xhtml b/web/index.xhtml index 05ae23e3..3e50f8c6 100644 --- a/web/index.xhtml +++ b/web/index.xhtml @@ -61,52 +61,56 @@ + - - - - - - - - - - - #{basket.currentItem.amount} - - - - #{product.title} - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + +
+ + + #{basket.currentItem.amount} + + #{product.title} + + + + + + + + +
+
+ + + + + @@ -116,7 +120,7 @@ @@ -124,11 +128,11 @@ - - - - - -
- - - + - + - + - +
+ + +
+
+
diff --git a/web/item_added.xhtml b/web/item_added.xhtml new file mode 100644 index 00000000..a80b6826 --- /dev/null +++ b/web/item_added.xhtml @@ -0,0 +1,27 @@ + + + + + Produkt zum Warenkorb hinzugefuegt + + + + + + + Produkt zum Warenkorb hinzugefuegt + + + + Das Produkt wurde zum Warenkorb hinzugefuegt. + + + + + + + diff --git a/web/resources/css/cssLayout.css b/web/resources/css/cssLayout.css index 27d10449..608c9402 100644 --- a/web/resources/css/cssLayout.css +++ b/web/resources/css/cssLayout.css @@ -1,3 +1,9 @@ +/** +div { + border: 1px solid #ff0000; +} +/**/ + #top { position: relative; background-color: #036fab; @@ -57,12 +63,6 @@ text-decoration : underline; } -/** -div { - border: 1px solid #ff0000; -} -/**/ - table, .table { margin: 0px; padding: 0px; @@ -115,16 +115,22 @@ table, .table { ul.footer_nav { text-align: center; - width : 500px; + width : 100%; list-style: none; margin: 0px; } -ul.footer_nav li { +ul.footer_nav li.footer_link { float: left; width: 100px; } +ul.footer_nav li.footer_copyright { + float: right; + width: 300px; + margin-right: 10px; +} + .menu ul { list-style: none; padding-left: 5px; -- 2.39.5