From d2cce7482b529d1bcc79a37e12c1a926fe223e16 Mon Sep 17 00:00:00 2001 From: Ilia Date: Tue, 7 Jun 2022 15:03:54 +0300 Subject: [PATCH] Simply replace Gray Framed with Virtualmin Framed theme --- gray-theme/CHANGELOG | 22 -- gray-theme/acl/images/twofactor.gif | Bin 0 -> 2780 bytes gray-theme/cluster-copy/images/smallicon.gif | Bin 0 -> 1374 bytes gray-theme/cluster-cron/images/smallicon.gif | Bin 0 -> 1867 bytes .../cluster-passwd/images/smallicon.gif | Bin 0 -> 852 bytes gray-theme/cluster-shell/images/smallicon.gif | Bin 0 -> 972 bytes .../cluster-software/images/smallicon.gif | Bin 0 -> 1621 bytes gray-theme/config.cgi | 127 +++++++ gray-theme/config_save.cgi | 53 +++ gray-theme/dhcpd-2.0/images/group.gif | Bin 0 -> 800 bytes gray-theme/dhcpd-2.0/images/host.gif | Bin 0 -> 768 bytes gray-theme/dhcpd-2.0/images/icon.gif | Bin 0 -> 4954 bytes gray-theme/dhcpd-2.0/images/shared.gif | Bin 0 -> 585 bytes gray-theme/dhcpd-2.0/images/subnet.gif | Bin 0 -> 559 bytes gray-theme/edit_overlay.cgi | 24 ++ gray-theme/edit_right.cgi | 110 ++++++ gray-theme/escputil/images/icon.gif | Bin 0 -> 449 bytes gray-theme/favicon.ico | Bin 0 -> 1150 bytes gray-theme/fdisk/images/smallicon.gif | Bin 0 -> 2557 bytes gray-theme/file/images/image.gif | Bin 1561 -> 1086 bytes gray-theme/generate-acls/images/icon.gif | Bin 0 -> 2721 bytes gray-theme/gray-theme-lib.pl | 185 +++++++++- gray-theme/images/gohome.gif | Bin 1026 -> 1008 bytes gray-theme/images/gray-closed.gif | Bin 445 -> 0 bytes gray-theme/images/gray-open.gif | Bin 465 -> 0 bytes gray-theme/images/lang.png | Bin 0 -> 733 bytes gray-theme/images/logs.gif | Bin 571 -> 0 bytes gray-theme/images/refresh-small.gif | Bin 619 -> 585 bytes gray-theme/images/refresh-small.png | Bin 912 -> 0 bytes gray-theme/images/sig.gif | Bin 0 -> 1010 bytes gray-theme/images/stock_quit.gif | Bin 1073 -> 1084 bytes gray-theme/index.cgi | 150 ++++++-- gray-theme/iscsi-server/images/opts.gif | Bin 5346 -> 0 bytes gray-theme/iscsi-target/images/conn.gif | Bin 5346 -> 0 bytes gray-theme/jsample/images/icon.gif | Bin 0 -> 3365 bytes gray-theme/lang/af.auto | 76 ++++- gray-theme/lang/ar.auto | 76 ++++- gray-theme/lang/be.auto | 76 ++++- gray-theme/lang/bg.auto | 76 ++++- gray-theme/lang/ca | 9 - gray-theme/lang/ca.auto | 71 ++++ gray-theme/lang/cs | 30 +- gray-theme/lang/cs.auto | 46 +++ gray-theme/lang/da.auto | 76 ++++- gray-theme/lang/de | 49 ++- gray-theme/lang/de.auto | 31 ++ gray-theme/lang/el.auto | 76 ++++- gray-theme/lang/en | 82 ++++- gray-theme/lang/es.auto | 76 ++++- gray-theme/lang/eu.auto | 76 ++++- gray-theme/lang/fa.auto | 76 ++++- gray-theme/lang/fi | 23 ++ gray-theme/lang/fi.auto | 57 +++- gray-theme/lang/fr | 7 - gray-theme/lang/fr.auto | 73 +++- gray-theme/lang/he.auto | 76 ++++- gray-theme/lang/hr.auto | 76 ++++- gray-theme/lang/hu.auto | 76 ++++- gray-theme/lang/it.auto | 76 ++++- gray-theme/lang/ja | 3 - gray-theme/lang/ja.auto | 75 +++- gray-theme/lang/ko.auto | 76 ++++- gray-theme/lang/lt.auto | 76 ++++- gray-theme/lang/lv.auto | 76 ++++- gray-theme/lang/ms.auto | 78 ++++- gray-theme/lang/mt.auto | 76 ++++- gray-theme/lang/nl | 68 +++- gray-theme/lang/nl.auto | 8 + gray-theme/lang/no | 70 +++- gray-theme/lang/no.auto | 8 + gray-theme/lang/pl | 72 +++- gray-theme/lang/pl.auto | 6 + gray-theme/lang/pt.auto | 76 ++++- gray-theme/lang/pt_BR | 9 - gray-theme/lang/pt_BR.auto | 71 ++++ gray-theme/lang/ro.auto | 76 ++++- gray-theme/lang/ru.auto | 76 ++++- gray-theme/lang/sk.auto | 76 ++++- gray-theme/lang/sl.auto | 76 ++++- gray-theme/lang/sv.auto | 76 ++++- gray-theme/lang/th.auto | 76 ++++- gray-theme/lang/tr.auto | 76 ++++- gray-theme/lang/uk.auto | 76 ++++- gray-theme/lang/ur.auto | 76 ++++- gray-theme/lang/vi.auto | 76 ++++- gray-theme/lang/zh | 23 ++ gray-theme/lang/zh.auto | 57 +++- gray-theme/lang/zh_TW | 23 ++ gray-theme/lang/zh_TW.auto | 57 +++- gray-theme/left.cgi | 318 ++++++++++------- gray-theme/{gray-left.css => left.css} | 13 + gray-theme/lvm/images/smallicon.gif | Bin 0 -> 1755 bytes gray-theme/lvs/images/icon.gif | Bin 0 -> 559 bytes gray-theme/mailbox/images/attach.gif | Bin 0 -> 598 bytes gray-theme/mailbox/images/boxes.gif | Bin 0 -> 4869 bytes gray-theme/mailbox/images/error.gif | Bin 0 -> 3218 bytes gray-theme/mailbox/images/icon.gif | Bin 0 -> 2008 bytes gray-theme/mailbox/images/read.gif | Bin 0 -> 594 bytes gray-theme/mailbox/images/special.gif | Bin 0 -> 578 bytes gray-theme/nettools/images/icon.gif | Bin 0 -> 826 bytes gray-theme/phpini/images/manual.gif | Bin 0 -> 5031 bytes gray-theme/pngfix.html | 3 + gray-theme/pngfix.js | 28 ++ gray-theme/ppp-client/images/smallicon.gif | Bin 0 -> 929 bytes gray-theme/pptp-client/images/smallicon.gif | Bin 0 -> 1164 bytes gray-theme/pptp-server/images/smallicon.gif | Bin 0 -> 1157 bytes gray-theme/proc/images/smallicon.gif | Bin 0 -> 766 bytes gray-theme/procyonguide/images/icon.gif | Bin 0 -> 3474 bytes gray-theme/recollect.cgi | 11 + gray-theme/right.cgi | 109 +++--- gray-theme/save_overlay.cgi | 33 ++ gray-theme/save_right.cgi | 62 ++++ gray-theme/software/images/smallicon.gif | Bin 0 -> 1621 bytes gray-theme/squidguard/images/icon.gif | Bin 0 -> 501 bytes gray-theme/squidinfo/images/icon.gif | Bin 0 -> 4220 bytes gray-theme/squidreports/images/icon.gif | Bin 0 -> 4244 bytes gray-theme/squidstat/images/icon.gif | Bin 0 -> 626 bytes gray-theme/swell-wizard/images/icon.gif | Bin 0 -> 2721 bytes gray-theme/sysgraph/images/icon.gif | Bin 0 -> 4220 bytes gray-theme/sysgraph/images/mem.png | Bin 0 -> 4574 bytes gray-theme/sysinfo/images/connections.gif | Bin 0 -> 4989 bytes gray-theme/sysinfo/images/cpu.gif | Bin 0 -> 4401 bytes gray-theme/sysinfo/images/fs.gif | Bin 0 -> 2256 bytes gray-theme/sysinfo/images/icon.gif | Bin 0 -> 6222 bytes gray-theme/sysinfo/images/irq.gif | Bin 0 -> 3306 bytes gray-theme/sysinfo/images/mem.gif | Bin 0 -> 4574 bytes gray-theme/sysinfo/images/network.gif | Bin 0 -> 2974 bytes gray-theme/sysinfo/images/sockets.gif | Bin 0 -> 3027 bytes gray-theme/sysinfo/images/usockets.gif | Bin 0 -> 2535 bytes gray-theme/sysinfo/images/who.gif | Bin 0 -> 5453 bytes gray-theme/theme.info | 7 +- gray-theme/theme.pl | 320 ++++++++++++++++-- gray-theme/top.cgi | 15 + gray-theme/tsunamiguide/images/icon.gif | Bin 0 -> 3474 bytes gray-theme/uconfig.cgi | 101 ++++++ gray-theme/uconfig_save.cgi | 50 +++ ...et-fonts-base.css => reset-fonts-base.css} | 0 ...ds-base.css => reset-fonts-grids-base.css} | 0 gray-theme/unauthenticated/sorttable.js | 2 +- ...ver-style.css => virtual-server-style.css} | 17 + .../webmin-iptables/images/chain.forward.gif | Bin 0 -> 489 bytes .../webmin-iptables/images/chain.input.gif | Bin 0 -> 411 bytes .../webmin-iptables/images/chain.other.gif | Bin 0 -> 750 bytes .../webmin-iptables/images/chain.output.gif | Bin 0 -> 476 bytes .../images/chain.postrouting.gif | Bin 0 -> 476 bytes .../images/chain.prerouting.gif | Bin 0 -> 411 bytes gray-theme/webmin-iptables/images/icon.gif | Bin 0 -> 751 bytes gray-theme/webmin/images/twofactor.gif | Bin 0 -> 2780 bytes gray-theme/webmin/images/webmincron.gif | Bin 5038 -> 4812 bytes gray-theme/wpad-wizard/images/icon.gif | Bin 0 -> 2721 bytes 150 files changed, 4406 insertions(+), 588 deletions(-) delete mode 100644 gray-theme/CHANGELOG create mode 100644 gray-theme/acl/images/twofactor.gif create mode 100644 gray-theme/cluster-copy/images/smallicon.gif create mode 100644 gray-theme/cluster-cron/images/smallicon.gif create mode 100644 gray-theme/cluster-passwd/images/smallicon.gif create mode 100644 gray-theme/cluster-shell/images/smallicon.gif create mode 100644 gray-theme/cluster-software/images/smallicon.gif create mode 100755 gray-theme/config.cgi create mode 100755 gray-theme/config_save.cgi create mode 100644 gray-theme/dhcpd-2.0/images/group.gif create mode 100644 gray-theme/dhcpd-2.0/images/host.gif create mode 100644 gray-theme/dhcpd-2.0/images/icon.gif create mode 100644 gray-theme/dhcpd-2.0/images/shared.gif create mode 100644 gray-theme/dhcpd-2.0/images/subnet.gif create mode 100755 gray-theme/edit_overlay.cgi create mode 100755 gray-theme/edit_right.cgi create mode 100644 gray-theme/escputil/images/icon.gif create mode 100644 gray-theme/favicon.ico create mode 100644 gray-theme/fdisk/images/smallicon.gif create mode 100644 gray-theme/generate-acls/images/icon.gif mode change 100644 => 100755 gray-theme/gray-theme-lib.pl delete mode 100644 gray-theme/images/gray-closed.gif delete mode 100644 gray-theme/images/gray-open.gif create mode 100644 gray-theme/images/lang.png delete mode 100644 gray-theme/images/logs.gif delete mode 100644 gray-theme/images/refresh-small.png create mode 100644 gray-theme/images/sig.gif delete mode 100644 gray-theme/iscsi-server/images/opts.gif delete mode 100644 gray-theme/iscsi-target/images/conn.gif create mode 100644 gray-theme/jsample/images/icon.gif delete mode 100644 gray-theme/lang/ca create mode 100644 gray-theme/lang/ca.auto create mode 100644 gray-theme/lang/cs.auto create mode 100644 gray-theme/lang/de.auto create mode 100644 gray-theme/lang/fi delete mode 100644 gray-theme/lang/fr delete mode 100644 gray-theme/lang/ja create mode 100644 gray-theme/lang/nl.auto create mode 100644 gray-theme/lang/no.auto create mode 100644 gray-theme/lang/pl.auto delete mode 100644 gray-theme/lang/pt_BR create mode 100644 gray-theme/lang/pt_BR.auto create mode 100644 gray-theme/lang/zh create mode 100644 gray-theme/lang/zh_TW rename gray-theme/{gray-left.css => left.css} (68%) create mode 100644 gray-theme/lvm/images/smallicon.gif create mode 100644 gray-theme/lvs/images/icon.gif create mode 100644 gray-theme/mailbox/images/attach.gif create mode 100644 gray-theme/mailbox/images/boxes.gif create mode 100644 gray-theme/mailbox/images/error.gif create mode 100644 gray-theme/mailbox/images/icon.gif create mode 100644 gray-theme/mailbox/images/read.gif create mode 100644 gray-theme/mailbox/images/special.gif create mode 100644 gray-theme/nettools/images/icon.gif create mode 100644 gray-theme/phpini/images/manual.gif create mode 100644 gray-theme/pngfix.html create mode 100644 gray-theme/pngfix.js create mode 100644 gray-theme/ppp-client/images/smallicon.gif create mode 100644 gray-theme/pptp-client/images/smallicon.gif create mode 100644 gray-theme/pptp-server/images/smallicon.gif create mode 100644 gray-theme/proc/images/smallicon.gif create mode 100644 gray-theme/procyonguide/images/icon.gif create mode 100755 gray-theme/recollect.cgi create mode 100755 gray-theme/save_overlay.cgi create mode 100755 gray-theme/save_right.cgi create mode 100644 gray-theme/software/images/smallicon.gif create mode 100644 gray-theme/squidguard/images/icon.gif create mode 100644 gray-theme/squidinfo/images/icon.gif create mode 100644 gray-theme/squidreports/images/icon.gif create mode 100644 gray-theme/squidstat/images/icon.gif create mode 100644 gray-theme/swell-wizard/images/icon.gif create mode 100644 gray-theme/sysgraph/images/icon.gif create mode 100644 gray-theme/sysgraph/images/mem.png create mode 100644 gray-theme/sysinfo/images/connections.gif create mode 100644 gray-theme/sysinfo/images/cpu.gif create mode 100644 gray-theme/sysinfo/images/fs.gif create mode 100644 gray-theme/sysinfo/images/icon.gif create mode 100644 gray-theme/sysinfo/images/irq.gif create mode 100644 gray-theme/sysinfo/images/mem.gif create mode 100644 gray-theme/sysinfo/images/network.gif create mode 100644 gray-theme/sysinfo/images/sockets.gif create mode 100644 gray-theme/sysinfo/images/usockets.gif create mode 100644 gray-theme/sysinfo/images/who.gif create mode 100755 gray-theme/top.cgi create mode 100644 gray-theme/tsunamiguide/images/icon.gif create mode 100755 gray-theme/uconfig.cgi create mode 100755 gray-theme/uconfig_save.cgi rename gray-theme/unauthenticated/{gray-reset-fonts-base.css => reset-fonts-base.css} (100%) rename gray-theme/unauthenticated/{gray-reset-fonts-grids-base.css => reset-fonts-grids-base.css} (100%) rename gray-theme/unauthenticated/{gray-virtual-server-style.css => virtual-server-style.css} (94%) create mode 100644 gray-theme/webmin-iptables/images/chain.forward.gif create mode 100644 gray-theme/webmin-iptables/images/chain.input.gif create mode 100644 gray-theme/webmin-iptables/images/chain.other.gif create mode 100644 gray-theme/webmin-iptables/images/chain.output.gif create mode 100644 gray-theme/webmin-iptables/images/chain.postrouting.gif create mode 100644 gray-theme/webmin-iptables/images/chain.prerouting.gif create mode 100644 gray-theme/webmin-iptables/images/icon.gif create mode 100644 gray-theme/webmin/images/twofactor.gif create mode 100644 gray-theme/wpad-wizard/images/icon.gif diff --git a/gray-theme/CHANGELOG b/gray-theme/CHANGELOG deleted file mode 100644 index 749452643..000000000 --- a/gray-theme/CHANGELOG +++ /dev/null @@ -1,22 +0,0 @@ ----- Changes since 1.280 ---- -First version of this theme. ----- Changes since 1.290 ---- -The current category name is now underlined. -Reduced the thickness of border lines. -All icons are now shown half the usual size, with the titles to the right instead of below. ----- Changes since 1.300 ---- -Totally re-worked theme to use a new framed design, with a Javascript collapsing category menu. ----- Changes since 1.310 ---- -Added Webmin Servers link on the left menu, when accessed via the Webmin Servers Index module. ----- Changes since 1.320 ---- -Added a feedback link to the left menu, but only when a custom feedback address is set. ----- Changes since 1.330 ---- -Updated the color schema to match the new webmin.com, and made table borders and forms nicer (thanks to Joe). -Added a whole new set of icons from Virtualmin. ----- Changes since 1.340 ---- -Fixed bad table indentation on some browsers. -Changed link colors to be darker. ----- Changes since 1.400 ---- -Display system uptime in the right frame after logging in. ----- Changes since 1.430 ---- -Updated CSS and all UI elements to match the Virtualmin theme, except for colors and icons. diff --git a/gray-theme/acl/images/twofactor.gif b/gray-theme/acl/images/twofactor.gif new file mode 100644 index 0000000000000000000000000000000000000000..644446ad67a4a4fb03566e3a0335164e83c5147a GIT binary patch literal 2780 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 literal 0 HcmV?d00001 diff --git a/gray-theme/cluster-copy/images/smallicon.gif b/gray-theme/cluster-copy/images/smallicon.gif new file mode 100644 index 0000000000000000000000000000000000000000..01040059e2280afe18f3911d13d192b906225399 GIT binary patch literal 1374 zcmV-k1)=(hP)erk&uuy<>cgGU}k1wU}R(jVp_<4FCT9W4LzhAtO*-5IZ}k#`*KduYk-12p|@i(>XXeb$NODz=r+( z`v-^_P+SKy_|G4R;mpj;48MQ>VPI!xVc_OwXAl#UU=S1((fR)UE7)Lw0Ahj}%+1ZC z%gxON*7Wb+e~=Hrt^u(@^xwY-{O8YKB>WHPLoNn>egOsv2^n3Oc>nap*kDdhPJMfOLl#L%F<|of z3H9<{ApI9g|A+Ho!2y%||NkF2vOyN9tIKlo^9!rIdGqW6KmdUa78VvVk(ZYOrVKWq zC9H6RVc`ff1cLuTQw>ZG!Uq9qX)#~~O6dR%-UARoV1uQk#EjY5*}&loNf99LgS^ZD z3_m8I7%1IBA`lj#=rjoM^D{6gDk|$;xpIa9Ab`LIi-`%Vy?*_g;oG-w@Nh+rAoR#Y zR|5k=LP89hnp$d`H#0B*1Q0ZX{AYnh9LRQ1;zy*2f6$D=#DJ?@VFLS(85}e$EUchZ z!3YpQV1q%492kKNA3l6!`26`Z0~;F~Fs6Tl4Sn_M6);B$GU)2+g2mwJl$nKr9at1F zGcq%L`u>sO!?$+~VjNFn8?9H5Z+_3P&^Hb(YeJD#s+7qew&6%gfPkWvLXf{$TE@A{vA zxBs5Yz|Hm_Ab{ZE#>B)b!_3UC2E?jBtOUgJP%LNT>}|Jx>#;vmW^MS-!z+=&%)~Aw zlFUEr!vEd>AOAn||HS`g|5yL7`yaB+?mM%INDzaOJOe-gu^=Mp_Y)Y~$H#}`&!6Ai zAoh=cER5lDpP5Y=_Ax4RePl2b{=)dz$mQ2VvGW|S7;ZDX2CDh||0Bcq-`^PYP5C)K zR?96rHuGyTKmajgwuye0%~jK#}){k%K|wdI!6(r4kDRry#?d{m1{@R;>NG zP|Gt06=x9!TSqhRqtRJ*}t(g3ofN5*(i9e^;eihvD?(bV} z!GHWe-Yc`o*w)I{>KL%IZSH)2^UlPZzQ6>08z6ufNT^IXLG=NKsIfc)lZkYkNSN{= gpx-rN!Ts{djRLH>a=RZ*H zPnwagNP(Y&tfq!6KLZC70|WDah?2jI3z? zg8*b3qlkkRbbH77GwDS^$CNhC@X`ry)J{Y3_HX7 zhqo9G?LN;Sr>4PR>t>;G>B>L~n&tKeOu+SH0`1AG~ z!|j(043-{_(&x^9)A{-O$O@n<{{sXNGXsABkounznQT?~=N~77ozP1LX9sBpVNodt zSy@>IW@aV^R#u?LfL`b3=3-!C0!74s25D(o1_5DF24#6JhVRc_G2Hyb!yvC|sCMb# zvBwO59-jvYASQ<2e|go^MJw1P;VF8IVu`?*id}jCv3}PM`F$QJxq$*&t;sFRCW(F4bFpEHo9)_!)2kkjp`q{QLKh;m*Cg4BB!64Et_zGYE)D3Enxf=Mq2wG4qK8 zG>F-mYs&q5$&lzP$DpaB4)i(;!?9x*7#=@<0Ss3mpzAphCjJM;IwK<_VFBs?K)#HO zB7>9|55wUzZy4Tk$}qeKQ|IA=zD9Z5fKO<0~ID?Lk3d5T> z?->psKFjd^`ws>|5g`VaE0-C5U%t%nikqL|>Xq9JM~<8a8vdU_TwDYgG%P@ue`GlN zMv&qEotq2*0RUM5rvC#KB3^^@86*cU1JD2g{N(@+4-o(g3JCxM0|Njb9~uB6A{+qN z+Tj4l%h3SDzr+CA{RaT!=BJH1%iV74E|0g3|p3OV7RZW%%G;L&R}C{3=a+v`10i|IJ}ve z{)5f>3(N-q0mSnC%ilMWJpXxxL=_k;EEE`i{b2w{2s|bH{>|`b-FgNOcL#?5Qc?`8 zK%XFkzkmM$lOjJ*uQkKPM-Lf9J~J>p{`%<+KmaklfBoycAp3uYhj0HeeEs|l>}rr= z82Gbg3&THSV+IyrnnpJiW-v(4mrq|A9>4$3Ajrzd@bT5{%K!ny^y3S|x?e9pGJN3> zVK{Z_8pF|}hZz3+`Nse<`rp9=41cAi8Q8S6uqHW>p}&9s1xDgQhSR5SFns3}VfgX< z9mB5=C$|Cw5HMSDZoGNo=^YMH5r#u&UNH#r^E3QqWn=ht`Ygi_patw^W;hM~1q?S( zaueX=V>o#B4FkKV5W|hbNA5E)T-XW_K+Ft03BSI6`2Uqhg4f^NT9twA`)>xhpU)Zo zJbA{z;OGQQxBuW70%qW!KYzi7g36HJzkf2^y7`mgzq}#Colv>pFHO)UXsBY*$`Mm-xy-M>G-nc`;jKRkW@ zwIBnFl`X@mvu}Y#B?rTY_n*Ou@ABnKz^r~5?CSSGu^->L8IB)+%D^ct!*J@gIK!N_ z4d?znuZ;tF3Zw=gfEXD>=P)pE=>dyQE}(ybRh;8 zr%&$#lP(j3l%zZ`IQ}y50kir?PH~25z!G@l?0H)m9u)x#_K&Y&aR3lNz+3@zu^h0@ zVq=CF&IsiHVoc_j{8sGcrK0Hs%nNb?{~5U1{z5XtFBXPJ?->~Oo?&3vw)x!6&*ysk z8NRKU1x!Q#ks}u%fFLo#?ZLnx-2*Y0nGIZLF}zsF&G7N6Cxft!7rT_MKA(V~D5xC% z^#1+ZpU*E{WO#FMJHxjP+ZY(W1H+0LQaCXn(mz0e0RRurVmMLFAPN8g002ovPDHLk FV1h4GRrUY? literal 0 HcmV?d00001 diff --git a/gray-theme/cluster-passwd/images/smallicon.gif b/gray-theme/cluster-passwd/images/smallicon.gif new file mode 100644 index 0000000000000000000000000000000000000000..47a7d4ac996fa7e8f1d7a31110ad4b7f26090f27 GIT binary patch literal 852 zcmV-a1FQUrP)`-@m_4?!7tj;pOM!{~3NB=3w}Lk(USq{{rzMU`hiBAh5xLf_&{xPTJAB zHnOtnCQ=OIs#0JjA78#ydiCOE)P}Aj_m1yn{KM?l6KdcN4`=E|y00G(}KwyKp1en-&Ou6`N!K^nEi#sg}Ez4eVKy))Qe0%<%flc%e zgNDpEpec+Dpq$DGjPn2g7{Kz3Oh9-41v=vUF9vA^-jG>Meb3k+*h(9neoZiU5Ag9K_ zz{|mk84Lgc!~*634f+R`02vBZ@DIud;(!1C!`c5~Y@qzV|LAHV?7x5iFaQJ) z*kF)?w)s;S?tgf}z{JSJz{tdipqYR)BPxxd21tMU{)Hjc&XYlcR{(4QKmf78T=MY4 zONOe%6tW}hKtBZdOw0_-Y-|jF|FNJXJ%9jW zf;k@)6p;pz3_6@T4Cn5hV~~C#3)IZUpzvRdf$1$j1M3TM2G-|d49q|_!zXSA#(zKy zfCe(NvNAA%FbfMb(?Eg(Ab^-)2_9rH2ndJ^FkJg^k74(#Qw$tGg&9s%?`N1DH2Z#3}rLx7`h@_7&@aH!5V#g z;~2a&of$4R??V^}#9-G#T@1pE%upADbMb!$fB<6p2MY>dcP;d}{UCRP?F(WX%Vc8xafLLIG4GIc*ae0O|?<#PRM0aO0 zF!8c77?rs*{E!5?Mum%k85%i^z*O+>&mVY%f*tnz9|Jo(Cp;(s0*D1xIw)R00a;tttwN100RJ)j@;UWlak5+0000v!kRldJ__TbM?pVl!jG3;hyW_iT`G!z*C1P~)ADE1Vx zGyMPan-S}`!Nu_Z+iQlu-(E5N|N9FZUJRhHV`XFb zcj+XefgNbzKOmoj324b@p!0#2vI2wP&j+Ak`xzL%-3H17#aTEQ7`S;MW&wQ!5I|6a z*?_hKUGV=ekjD&k!CRmuj~N&~o`>)`fDy=V$iToO&%p5YBG9lKK!bs5n1QZk0s4Sh z6d2Y(HX8@SKL!?%xeNdS1UC2|Bh+AEx&?a^nB>6Lf)xLJ1M$VbKR|B-*&h!9)dGFN zAp((SW`WW`%*qKi7z6+U2;pK@0f=U>p->D;=^#EQFesQgz$t)%Lk#FjZeS3xF@V!9 z*kF*uIDuwxzzqfnAc%{>K>-Zo|40VI3Ey ztM4xv_*nQDE?vIEaOCDT25xo^aQ+1dAc(>Lff2;Q3k~DHh%km(@b4!iC9rcbJbe9) z;nb7Y3`)XE4C~%4VVHV#3WJrPB}1V^9mDw>9~oHQe_;gr`!_%UL4pEYzyS?s52_-`{^T{9yaZpsSwIRA1o zJbw3>q4h!&!&%0o34M_Ul~MzY1owCl;Pixe+*CFKVkUr{R0Eb z9~K6Eem#aC>^~Ufd1V=%Gyh}-2q17F#0Yey05gN0shU8Dhm&cLi;su4mZcrA%m8Kt z24L3x1k8m@91N3A9$*mRF=mh!lw{BlRbi+;S;;W}(gFq}K_iA$-m4iNy?YKW>}w~q zp8*IUxWPz(Rf3bj##&c8%*(^p$HBuvMoAl3X7EV>HN9fkd}<@Z{sZS3EG!Bcc7NHy zF!#t@1|3OlhFPu)860E0r~Z8UX&*2R9svj-xWS-I#SA2V|3#?-1(XGuogGY6!hC!j zUAcIe_>b;9ety%nngQ&VMt}e!WH1~6 z%Pd6>W(Jv$e;H0Om^1v8*U*?2?GPEl#>Bx4N}Ssd?z(zv;odM{ZhHw*4-jAgh2|rE TxVp3800000NkvXXu0mjfw@=5w literal 0 HcmV?d00001 diff --git a/gray-theme/config.cgi b/gray-theme/config.cgi new file mode 100755 index 000000000..7d1ae1718 --- /dev/null +++ b/gray-theme/config.cgi @@ -0,0 +1,127 @@ +#!/usr/local/bin/perl +# Display a form for editing the configuration of a module, one section at +# a time. + +require "gray-theme/gray-theme-lib.pl"; +require './config-lib.pl'; +&ReadParse(); + +$m = $in{'module'} || $ARGV[0]; +&foreign_available($m) || &error($text{'config_eaccess'}); +%access = &get_module_acl(undef, $m); +$access{'noconfig'} && + &error($text{'config_ecannot'}); +%module_info = &get_module_info($m); +if (-r &help_file($m, "config_intro")) { + $help = [ "config_intro", $m ]; + } +else { + $help = undef; + } +&ui_print_header(&text('config_dir', $module_info{'desc'}), + $text{'config_title'}, "", $help, 0, 1); +$mdir = &module_root_directory($m); +my $mdir_conf_file = "$mdir/config.info"; +if ($current_lang && $default_lang && + $current_lang ne $default_lang && + -r "$mdir_conf_file.$current_lang") +{ + $mdir_conf_file .= ".$current_lang"; +} + +# Read the config.info file to find sections +&read_file($mdir_conf_file, \%info, \@info_order); + +# Call any config preload function +if (&foreign_require($m) && + &foreign_func_exists($m, 'config_pre_load')) { + &foreign_call($m, "config_pre_load", \%info, \@info_order); +} + +foreach $i (@info_order) { + @p = split(/,/, $info{$i}); + if ($p[1] == 11) { + push(@sections, [ $i, $p[0] ]); + } + } +if (@sections > 1) { + # Work out template section to edit + $in{'section'} ||= $sections[0]->[0]; + $idx = &indexof($in{'section'}, map { $_->[0] } @sections); + if ($in{'nprev'}) { + $idx--; + $idx = @sections-1 if ($idx < 0); + } + elsif ($in{'nnext'}) { + $idx++; + $idx = 0 if ($idx >= @sections); + } + $in{'section'} = $sections[$idx]->[0]; + + # We have some sections .. show a menu to select + print &ui_form_start("config.cgi"); + print &ui_hidden("module", $m),"\n"; + print $text{'config_section'},"\n"; + print &ui_select("section", $in{'section'}, \@sections, + 1, 0, 0, 0, "onChange='form.submit()'"); + print &ui_submit($text{'config_change'}); + print "  \n"; + print &ui_submit($text{'config_nprev'}, "nprev"); + print &ui_submit($text{'config_nnext'}, "nnext"); + print &ui_form_end(); + ($s) = grep { $_->[0] eq $in{'section'} } @sections; + $sname = $s->[1]; + } + +print &ui_form_start("config_save.cgi", "post"); +print &ui_hidden("module", $m),"\n"; +print &ui_hidden("section", $in{'section'}),"\n"; +if ($s) { + # Find next section + $idx = &indexof($s, @sections); + if ($idx == @sections-1) { + print &ui_hidden("section_next", $sections[0]->[0]); + } + else { + print &ui_hidden("section_next", $sections[$idx+1]->[0]); + } + } +print &ui_table_start($sname, "width=100%", 2); + +# Load module config defaults (fill missing) +my $mdefconf = "$mdir/config"; +$mdefconf = "$mdir/config-$gconfig{'os_type'}" + if (-r "$mdir/config-$gconfig{'os_type'}"); +&read_file($mdefconf, \%newconfig); + +# Load module config custom +&read_file("$config_directory/$m/config", \%newconfig); + +# Load module config user custom +&load_module_preferences($m, \%newconfig); + +if (-r "$mdir/config_info.pl") { + # Module has a custom config editor + &foreign_require($m, "config_info.pl"); + local $fn = "${m}::config_form"; + if (defined(&$fn)) { + $func++; + &foreign_call($m, "config_form", \%newconfig); + } + } +if (!$func) { + # Use config.info to create config inputs + &generate_config(\%newconfig, $mdir_conf_file, $m, undef, undef, + $in{'section'}); + } +print &ui_table_end(); +print &ui_form_end([ [ "save", $text{'save'} ], + $s ? ( [ "save_next", $text{'config_next'} ] ) : ( ) ]); + +if ($m eq "virtual-server") { + &ui_print_footer("/right.cgi", $text{'config_return'}); + } +else { + &ui_print_footer("/$m", $text{'index'}); + } + diff --git a/gray-theme/config_save.cgi b/gray-theme/config_save.cgi new file mode 100755 index 000000000..dcc9419cc --- /dev/null +++ b/gray-theme/config_save.cgi @@ -0,0 +1,53 @@ +#!/usr/local/bin/perl +# config_save.cgi +# Save inputs from config.cgi + +require "gray-theme/gray-theme-lib.pl"; +require './config-lib.pl'; +&ReadParse(); +$m = $in{'module'}; +&error_setup($text{'config_err'}); +&foreign_available($m) || &error($text{'config_eaccess'}); +%access = &get_module_acl(undef, $m); +$access{'noconfig'} && &error($text{'config_ecannot'}); + +mkdir("$config_directory/$m", 0700); +&lock_file("$config_directory/$m/config"); +&read_file("$config_directory/$m/config", \%newconfig); +%oldconfig = %newconfig; + +$mdir = &module_root_directory($m); +if (-r "$mdir/config_info.pl") { + # Module has a custom config editor + &foreign_require($m, "config_info.pl"); + local $fn = "${m}::config_form"; + if (defined(&$fn)) { + $func++; + &foreign_call($m, "config_save", \%newconfig); + } + } +if (!$func) { + # Use config.info to parse config inputs + &parse_config(\%newconfig, "$mdir/config.info", $m, undef, $in{'section'}); + } +&write_file("$config_directory/$m/config", \%newconfig); +&unlock_file("$config_directory/$m/config"); +&save_module_preferences($m, \%newconfig); + +# Call any post-config save function +if (&foreign_require($m) && + &foreign_func_exists($m, 'config_post_save')) { + &foreign_call($m, "config_post_save", \%newconfig, \%oldconfig) + } + +&webmin_log("_config_", undef, undef, \%in, $m); +if ($in{'save_next'}) { + &redirect("config.cgi?module=$in{'module'}§ion=$in{'section_next'}"); + } +elsif ($m eq "virtual-server") { + &redirect("/right.cgi"); + } +else { + &redirect("/$m/"); + } + diff --git a/gray-theme/dhcpd-2.0/images/group.gif b/gray-theme/dhcpd-2.0/images/group.gif new file mode 100644 index 0000000000000000000000000000000000000000..b2d26e8b2c10ca3fd481776bce48b72fac145cb2 GIT binary patch literal 800 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 h*fw^++PMtdS@87>OXU;5Lx|Hu4gW!J#FE79U zcXOv@3cTIQU}Iymc=6&TOP0LZ!tiszNlAf~zJ7Umxn40yt^_EhmzusOUay)F`Zs}oq7>Ra0bI)lnNI4al;+t?DARm<2W zO_^3cb9Ol=XBA6zq|1_Jl`9%nEpD#bxM_36*4Y-uv&?oI?bTD_YCEKIgzcF6iBpG< zo;`m4)R_y)S1w;V%YFOK+3Q-(Ja_JFZ@#J7`tlX;o42pte|U9LhwJONuRL$x@O}UL z@9$Lx0||=)#{5pLCC3@LvXUn zhVJJdgDhk9%g6qDTU18xF{%k z;)-wR>YANRs@jv*&OR~0P}uE_#HNfVM;1;F%bl%T8<*6y`bDaOM|aG*(vWa|Wrq%t z%3Z;n$5aEG)CJj0&BevSmItvOj@B|-b5hA-Z^@j+PMtdS@87>OXU;5Lx|Hu4gW!LLy1Kfe zqM~!>&UtzH&Al-*YC&jPT3T3G*#En^(=r9#Ze_5su>qQZ2k0;W0mv=})_)2LeJPpq zGFGk2dA%=9;e3hi;XH*mHShTuWxStje`0G{VBl&ZHt~R}mcfds^${5%QCuSX9&Fg* zut96*;)cYtdAoV98%r&yljghXeA{Qn^6MNNIqarY1rE`5rJS63@hsILo^?v4Wo45( zyUgYoMHOYlB`@wzn^H1;dg1bEc@@lU*)?k#nzCC=+CoDX#B}%O_D}TK8?<(1&dddK z&lH_Co3C>GM7DX!k|n9T>#yW7a(P`ov3lx_#rL@%PG7&V-68$aN=ELNQ@1v^ZhHTL zhxgxq21cnF;rvq>-TF?rYzkXBzqwsN*{UKSLBY24?j*x4*ButQcZn$;s7_OEYwVNT zs@%lG;JCzOlCj?k$C;lVo|<;l!{ox{q%_|S^Vn54G8a5QIp0islgO;56@jx%^W9EZ z9(p-pGXJKmyR$+wTUKhXSvMn-@63UfOe>fKRx908m1I(zJHcVQ9`{6p^dqcAnND|i zmF-HA%yErwVD1oBUv^-}#z#jko$9*Crt)AvXRl=VhC2>XZe~w>d?ak64ux93`SvD= qd$FHF&CV}JmweGyRJpJ@vwq#SiDmchEZ6$W=eK7^p{ODQgEauMZ4WO1 literal 0 HcmV?d00001 diff --git a/gray-theme/edit_overlay.cgi b/gray-theme/edit_overlay.cgi new file mode 100755 index 000000000..59a67073d --- /dev/null +++ b/gray-theme/edit_overlay.cgi @@ -0,0 +1,24 @@ +#!/usr/local/bin/perl +# Show a form for changing the theme overlay + +require "gray-theme/gray-theme-lib.pl"; + +# Get the user and themes +&foreign_require("acl", "acl-lib.pl"); +@overlays = &list_virtualmin_theme_overlays(); +($user) = grep { $_->{'name'} eq $base_remote_user } &acl::list_users(); +$user || &error($text{'overlay_euser'}); +$overlay = $current_themes[1]; + +&ui_print_header(undef, $text{'overlay_title'}, ""); + +print &ui_form_start("save_overlay.cgi"); +print $text{'overlay_desc'},"

\n"; +print "$text{'overlay_msg'}\n"; +print &ui_select("overlay", $overlay, + [ [ "", $text{'overlay_none'} ], + map { [ $_->{'dir'}, $_->{'desc'} ] } @overlays ]),"
\n"; +print &ui_form_end([ [ undef, $text{'overlay_ok'} ] ]); + +&ui_print_footer("right.cgi", $text{'right_return'}); + diff --git a/gray-theme/edit_right.cgi b/gray-theme/edit_right.cgi new file mode 100755 index 000000000..8286fb1b1 --- /dev/null +++ b/gray-theme/edit_right.cgi @@ -0,0 +1,110 @@ +#!/usr/local/bin/perl +# Show a form for configuring what gets dislayed on the right frame + +require "gray-theme/gray-theme-lib.pl"; +require "gray-theme/theme.pl"; + +($hasvirt, $level, $hasvm2) = &get_virtualmin_user_level(); +$sects = &get_right_frame_sections(); +!$sects->{'global'} || + $hasvirt && &virtual_server::master_admin() || + $hasvm2 && !$server_manager::access{'owner'} || + &error($text{'edright_ecannot'}); + +&ui_print_header(undef, $text{'edright_title'}, "", undef, 0, 1, 1); + +print &ui_form_start("save_right.cgi", "post"); +print &ui_table_start($text{'edright_header'}, undef ,2); + +# Visible sections +print &ui_table_row($text{'edright_sects'}, + join("
\n", map { &ui_checkbox($_->{'name'}, 1, $_->{'title'}, + !$sects->{'no'.$_->{'name'}}) } + &list_right_frame_sections())); + +# Show list by default +print &ui_table_row($text{'edright_list'}, + &ui_radio("list", $sects->{'list'} || 0, + [ [ 0, $text{'edright_list0'} ], + $hasvirt ? ( [ 1, $text{'edright_list1'} ] ) : ( ), + $hasvm2 ? ( [ 2, $text{'edright_list2'} ] ) : ( ), + ])); + +# Alternate page +print &ui_table_row($text{'edright_alt'}, + &ui_opt_textbox("alt", $sects->{'alt'}, 40, $text{'edright_altdef'}."
", + $text{'edright_alturl'})); + +# Default tab +print &ui_table_row($text{'edright_deftab'}, + &ui_select("tab", $sects->{'tab'}, + [ [ "", $text{'edright_tab1'} ], + $hasvirt ? ( [ "virtualmin", $text{'edright_virtualmin'} ] ) : ( ), + $hasvm2 ? ( [ "vm2", $text{'edright_vm2'} ] ) : ( ), + [ "webmin", $text{'edright_webmin'} ] ])); + +# Left frame size +print &ui_table_row($text{'edright_fsize'}, + &ui_opt_textbox("fsize", $sects->{'fsize'}, 6, $text{'edright_fsizedef'}). + " ".$text{'edright_pixels'}); + +# Show search box +print &ui_table_row($text{'edright_search'}, + &ui_yesno_radio("search", !$sects->{'nosearch'})); + +if ($hasvirt) { + # Default domain + print &ui_table_row($text{'edright_dom'}, + &ui_select("dom", $sects->{'dom'}, + [ [ "", $text{'edright_first'} ], + map { [ $_->{'id'}, &virtual_server::show_domain_name($_) ] } + grep { &virtual_server::can_edit_domain($_) } + sort { $a->{'dom'} cmp $b->{'dom'} } + &virtual_server::list_domains() ])); + + # Sort quotas by bytes or percent + print &ui_table_row($text{'edright_qsort'}, + &ui_radio("qsort", int($sects->{'qsort'}), + [ [ 1, $text{'edright_qsort1'} ], + [ 0, $text{'edright_qsort0'} ] ])); + + # Show quotas as bytes or percent + print &ui_table_row($text{'edright_qshow'}, + &ui_radio("qshow", int($sects->{'qshow'}), + [ [ 1, $text{'edright_qsort1'} ], + [ 0, $text{'edright_qsort0'} ] ])); + + # Number of servers to show + print &ui_table_row($text{'edright_max'}, + &ui_opt_textbox("max", $sects->{'max'}, 5, + $text{'default'}." ($default_domains_to_show)")); + } + +if ($hasvm2) { + # Default Cloudmin server + @servers = &server_manager::list_available_managed_servers_sorted(); + print &ui_table_row($text{'edright_server'}, + &ui_select("server", $sects->{'server'}, + [ [ "", $text{'edright_first'} ], + map { [ $_->{'id'}, $_->{'host'} ] } @servers ])); + } + +if ($hasvirt && &virtual_server::master_admin() || + $hasvm2 && &server_manager::can_action(undef, "global")) { + # Allow changing + print &ui_table_row($text{'edright_global'}, + &ui_yesno_radio("global", int($sects->{'global'}))); + + # Show Webmin category + print &ui_table_row($text{'edright_nowebmin'}, + &ui_radio("nowebmin", int($sects->{'nowebmin'}), + [ [ 0, $text{'yes'} ], + [ 1, $text{'no'} ], + [ 2, $text{'edright_others'} ] ])); + } + +print &ui_table_end(); +print &ui_form_end([ [ "save", $text{'save'} ] ]); + +&ui_print_footer("right.cgi", $text{'right_return'}); + diff --git a/gray-theme/escputil/images/icon.gif b/gray-theme/escputil/images/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..6c8d0645a0b543a042bbbf5f36b926229dd34c50 GIT binary patch literal 449 zcmV;y0Y3gmNk%w1VK4wN0OJ4v|NsAHW@Z2Y0GXMYo!FW8adGJA=w6@T?X>{R%*_7) z01^KH4%Ptw|NsC0|NsC0A^8LW3IGoPEC2ui05AYB000F35XecZy*TU5yZ>Nl1%YT@ zq*R_~O09svcJ3$)gN*5>OZ1K zyu8h=zq$$2+SJCa&%n~#0Sm<$&feG2+2Y#_;NwU`$1u{35ArZ$y1b(ZA$GGox3M>;G*_p{c~kGCq3^x4asO^ZoIEcF@2YS64F r7J&>?$m_wV1$%)l>l7VYrHKq~Tsz~#Il6U0;LXdouiw9aBLDz9l_lZm literal 0 HcmV?d00001 diff --git a/gray-theme/favicon.ico b/gray-theme/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ccd7aa3e88c5344ba72ffc3c7157eacba3637908 GIT binary patch literal 1150 zcmeH_Jq`g;6orpOBjP6t5{;ii6cS5Ns_Aq}TM=83NF;Wkm7t^$D^N~!NLslzIpead(SCmMv8G~v*KCSATH%4)d30RsdN0Vh&SN-zFZ2cW(+#8fd#bPop(LE zX;_2rFsDzv^BJ9a4z`ZZ&RH@`MP;C8VE@4z=9v7Xn}Ig9ym#sy3}F=1Mhi2>wjaG4 z%x;_$sM>Q=qg7xG7ce=UKrc`qVFoqV=l1M`IUaQp`p|IqzV&#j(2MvbeoErg@c+MZ TYf0ylbjnDcCmpV@b9?^*$-zSF literal 0 HcmV?d00001 diff --git a/gray-theme/fdisk/images/smallicon.gif b/gray-theme/fdisk/images/smallicon.gif new file mode 100644 index 0000000000000000000000000000000000000000..741180dcba5c285d86488855eb1ec0491f5e0f6e GIT binary patch literal 2557 zcmV60d=V18z_b0>mpYIqxeZBkt{pU0PKmXYG|2M;N zpv=!@_Zb)tJO$!s3=DTZF)+Yl9Tfcl0mKL)% z#DVxO!(>*5-_d`pn7uWQGU{nEF#P%hG79245cvC#f#Jt*hX3!r{QZCH>D3EI9u+?R z_J7|Wppr*l7#QZC z+kXAQAogTlrUOvs1j{d=e?L58U}lg8h7cpdOCSJrHv>Bp1EaVA^Iy)-dJE?Lcbt5k zVINGI5iJS;0tk`@6zdrn{(Odr{QeKL_g{>O2Gf}cN7i*t`m9k3e2lUpoQ&*@0*Z+Y z4F4EDd}g@*@AkJx48PtmFmM1ZXZwr5tU%2EkKz4`Ck)?jJ!JU(li_1VW(9-1yb8qE zXbu1fAczD0LM{LGPefV#|JvdZp2hB_Tsj=U`2Pxwv+v)49tG;;(+LY?VB{72_M71o z<86kO|DQYuI^Zv=1GpF%zI=Me@Z;tqhQph_o|}Ju!BSTeHFGEO30!AVP2p~i* z`1McHLWgxvX{<;PHy<0rTcDf%`~@XY2nKqbfmcdVltIkV&+9bMQLh-5{5?9%2bQ(9P_?)XWOZ zflN$D4g#eyad8#~agXSbdkhS3-!p9Zy6@{dhHqaOo}7Kb@Ne&1hR&sbd*55S&xs0& zoy5t>;w2^~q$egOypWZZW%s{-|G+8n_wV08Gnv6g0t65^c+Nj!fNGh6a!iVW5&xdeZT|e{?_1vU3>)5Ud6@L=)^CP& zEB4%7 zIkMXdm@4jotOf`mhyxzv*fBidmSkX*P!SL_(D?jMMCC7=lokWGl-fTYF}d%2f*jxZ zc!3Fk4H(}*7ySnY2dkvUc{kO~ChJ!pTd|U1+AI#<$w8?F;uAQnUt`}&;W|J~)xvuMaOdc%EMUC;x*TG=peE3A1zaML23LF2%lKOG!=*~xJ^+}i5uCuL+L zgg_P{TaN4qP^j43J2`LOyvhS8xD_CPSkO~C8;4+6K!9r@H#Zlh5ZD2%tf0j53*rDaW&=JxE}$3-126?Mh>8jcDl01p z{xLQ*`tjozFfadL`1tYT&$n+sy?*uT&4Ul0zg}eg_fJG$U(1V=lLMH|elvg^0Zj2I zApk0f{{3Tu=PG%5C2f#>009JcKvq^Y!}I5l7~a2s3(B9opacWTwje|P0kZ&z1_diH zC4(^^A1}L%%zqhRaLRoD{?i5&tZZx`PyE4ZIV=Pqd`58Su&^+*gX{(fAg}}Y`2`t- zghZhh{{085qS1p9<``s0u>*4pD760mg#}vB2B!Q&FJ8QcT8bJHpsYoRW@d)ajEv}fkma1f(EiHs`0+D_d-rZ00htRBKunOJ z{|$1jJGZW@l#u`kWmY1Wp5|Pags*;$_g$F^06te*f9FZr#>uU?tKDECU$6 zeEAAYxvbz64{{VJZb1bKqlC<}wcKn{S2 zLmJEP-o0lydGf?vV6eA5e0X~SN-GPf03d)c8~_5bvH1+oo;_kXa9}gg^~^v+e=;d3 zsQX)6+a;QtTiPfqD+%)R^MgYHq#qO=5C?#K4{Qd1`~*s9-!EOdc<$7xqs#Byxwaf= z-8=Mp2c#DufUr7%hlh{B+}s)L05)Jn11hLM^##;t@{*D=mNGK(CK3{oDtvtWqU`MK zoWR8T>(i%??_R%t_2AjF#}{6_cya>R2E2@=C63|%fB<3~=-x3v01bHO6d=F=nu$s} TkK#CC00000NkvXXu0mjfLc^iQ literal 0 HcmV?d00001 diff --git a/gray-theme/file/images/image.gif b/gray-theme/file/images/image.gif index 2a764f0965942f68b1de4d9ae90499fc25c973b2..7cf408879c45885b70ecf1f75eacbe4a9ee12ff9 100644 GIT binary patch literal 1086 zcmV-E1i|}>P)aVY_78C{F-{|u4^xfU&tE;Q2si}mKsi&u>rKP1TcKg`Y*M5hi{P*{upP>5n z^*xIFQKtT#ot^UX_nVuWmzS4_%Kt7oN0XD2EGi__)YgfKiE6q3^6&5@BnX3pgXZS$ zq1e^dprD^jS6!T(o88{%nwpuS zsjdh>@mpJ4Sy@?ES69p9_nMlVkkJ42^72tpQE!*G?d|kFY@SU`P5%D={QUg-`ugSN z?D+Wj=;Y=0_V&@y)hskKLqkLK^z_fq)AI82IzmK0KR@vB@Y~zs?(XjF?Cb;t1?uYR z=;-J*H8tku<}yZ8@@Lbu%9+}hgOrP=={ zCnwn0*w)t8pP!&3BO@UpAtP!1^78nbo17mXAMo(@9UUF)?DE#u*~G-e)YR9)!opf= zbN2Q1z`($XiHZ#k4c^}55EdP6lda_B?Xt46;^OPz;OXAp=d7%(;o;z_s;YyIsGy*r zcftSF)6|}xo_N6aoSd8V^^Z@_>-U|<;; z7k|h9f5rdM?EG3W_xI!C>U(>7;^OJ`_4Uxu)bsQ6cXxI`KtS>F@$c{N?d|RD>+Ldw>+9?5>FMch zZEWY~=jG+)C1lYuGBV@i<1jEV;o;%(@%7x?<}NNS-{0S;sHxrE-6|?7+uPesp6=P% z+1Jg#{%bjUT3 zz)qKD9-Zz!BaZGq7ngRerCMD4KMqYee*+}2+qL~u&w6=bGyMq{5+?6g-CF!a6>yejG*NWk4QNk$`@Wqw1w$>lVVz(L=;YXg@Ap8T?B z^0jo3fah^;Hx<>^#q4t?$2|fG96iN3N4bfSiFL;6ge;JNZwT|@MJF_uExXu!=P^j& zc)MrCjbBd literal 1561 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 Yldchub_TE4*O<_zb-rtFdkIqi1G=oru>b%7 literal 0 HcmV?d00001 diff --git a/gray-theme/gray-theme-lib.pl b/gray-theme/gray-theme-lib.pl old mode 100644 new mode 100755 index bc0335cb2..4aa1d9c11 --- a/gray-theme/gray-theme-lib.pl +++ b/gray-theme/gray-theme-lib.pl @@ -1,9 +1,184 @@ -# Common functions for theme CGIs +# Functions used by theme CGIs -use strict; -use warnings; -BEGIN { push(@INC, ".."); }; -use WebminCore; +eval "use WebminCore;"; +if ($@) { + do '../web-lib.pl'; + do '../ui-lib.pl'; + } &init_config(); +&load_theme_library(); +%text = &load_language($current_theme); +$right_frame_sections_file = "$config_directory/$current_theme/sections"; +$default_domains_to_show = 10; + +# get_left_frame_width() +# Returns the width of the left frame in pixels +sub get_left_frame_width +{ +local $sects = &get_right_frame_sections(); +return $sects->{'fsize'} ? $sects->{'fsize'} : + &get_product_name() eq 'usermin' ? 200 : + &foreign_available("server-manager") && + &foreign_available("virtual-server") ? 280 : 260; +} + +# list_virtualmin_theme_overlays() +# Returns a list of overlay themes suitable for this theme +sub list_virtualmin_theme_overlays +{ +&foreign_require("webmin", "webmin-lib.pl"); +local @rv; +foreach my $tinfo (&webmin::list_themes()) { + if ($tinfo->{'overlay'} && + (!$tinfo->{'overlays'} || + &indexof($current_theme, + split(/\s+/, $tinfo->{'overlays'})) >= 0)) { + push(@rv, $tinfo); + } + } +return @rv; +} + +sub get_virtualmin_docs +{ +local ($level) = @_; +return $level == 0 ? "http://www.virtualmin.com/documentation" : + $level == 1 ? "http://www.virtualmin.com/documentation/users/reseller" : + $level == 2 ? "http://www.virtualmin.com/documentation/users/server-owner" : + "http://www.virtualmin.com/documentation"; +} + +sub get_vm2_docs +{ +local ($level) = @_; +return "http://www.virtualmin.com/documentation/cloudmin"; +} + +# get_right_frame_sections() +# Returns a hash containg details of visible right-frame sections +sub get_right_frame_sections +{ +local %sects; +&read_file($right_frame_sections_file, \%sects); +if ($sects{'global'}) { + # Force use of global settings + return \%sects; + } +else { + # Can try personal settings, but fall back to global + local %usersects; + if (&read_file($right_frame_sections_file.".".$remote_user, + \%usersects)) { + return \%usersects; + } + else { + return \%sects; + } + } +} + +# save_right_frame_sections(§s) +sub save_right_frame_sections +{ +local ($sects) = @_; +&make_dir("$config_directory/$current_theme", 0700); +if ($sects->{'global'}) { + # Update global settings, for all users + &write_file($right_frame_sections_file, $sects); + } +else { + # Save own, and turn off global flag (if this is the master admin) + if (&foreign_check("virtual-server")) { + &foreign_require("virtual-server", "virtual-server-lib.pl"); + if (&virtual_server::master_admin()) { + local %globalsect; + &read_file($right_frame_sections_file, \%globalsect); + $globalsect{'global'} = 0; + &write_file($right_frame_sections_file, \%globalsect); + } + } + &write_file($right_frame_sections_file.".".$remote_user, $sects); + } +} + +# list_right_frame_sections() +# Returns a list of possible sections for the current user, as hash refs +sub list_right_frame_sections +{ +local ($hasvirt, $level, $hasvm2) = &get_virtualmin_user_level(); +local @rv; +if ($level == 0) { + # Master admin + if ($hasvirt) { + push(@rv, 'updates', 'status', 'newfeatures', + 'quotas', 'bw', 'ips', 'sysinfo'); + } + if ($hasvm2) { + push(@rv, 'vm2servers'); + } + } +elsif ($level == 2) { + # Domain owner + push(@rv, 'virtualmin'); + } +elsif ($level == 1) { + # Reseller + push(@rv, 'reseller', 'quotas', 'bw'); + } +elsif ($level == 4) { + # Cloudmin system owner + push(@rv, 'owner', 'vm2servers'); + } +else { + # Usermin + push(@rv, 'system'); + } +@rv = map { { 'name' => $_, + 'title' => $virtual_server::text{'right_'.$_.'header'} } } @rv; + +# Add plugin-defined sections +if (($level == 0 || $level == 1 || $level == 2) && $hasvirt && + defined(&virtual_server::list_plugin_sections)) { + push(@rv, &virtual_server::list_plugin_sections($level)); + } +if (($level == 0 || $level == 4) && $hasvm2 && + defined(&server_manager::list_plugin_sections)) { + push(@rv, &server_manager::list_plugin_sections($level)); + } + +return @rv; +} + +# get_virtualmin_user_level() +# Returns three numbers - the first being a flag if virtualmin is installed, +# the second a user type (3=usermin, 2=domain, 1=reseller, 0=master, 4=system +# owner), the third a flag for Cloudmin +sub get_virtualmin_user_level +{ +local ($hasvirt, $hasvm2, $level); +$hasvm2 = &foreign_available("server-manager"); +$hasvirt = &foreign_available("virtual-server"); +if ($hasvm2) { + &foreign_require("server-manager", "server-manager-lib.pl"); + } +if ($hasvirt) { + &foreign_require("virtual-server", "virtual-server-lib.pl"); + } +if ($hasvm2) { + $level = $server_manager::access{'owner'} ? 4 : 0; + } +elsif ($hasvirt) { + $level = &virtual_server::master_admin() ? 0 : + &virtual_server::reseller_admin() ? 1 : 2; + } +elsif (&get_product_name() eq "usermin") { + $level = 3; + } +else { + $level = 0; + } +return ($hasvirt, $level, $hasvm2); +} 1; + diff --git a/gray-theme/images/gohome.gif b/gray-theme/images/gohome.gif index 45ba31eea2aad61eb33578de2d1f5cc2b6eef744..b0ef5ffac4de3c6876ed3ac9fd3dfa381811049e 100644 GIT binary patch delta 708 zcmV;#0z3VJ2=E7gM@dFFIbje05CG?w00TV^07nS`Q5r01JwtLvOK?>_dP_`pR8x0f zTXbJobZuLAZ(Mt38m2RMR$$qo9bU zn^n^|hpLZ@sFazYnN!y>fU$#C*EE%-mTkgnSl2g=tCWtcl$5HYg}H`t-c_TswxhbO zth}~~-FL2k$+on`!LrD=qSl_Z$-214!n(xCw#mG+%($B2j-KI_oaK(V(7vALkGRph zr{AEx&cM3SzM$xhyV1bO%E`Rf!Nt_Y!qm>n(bTB$lD^!+$<)u$(b2o%xxL`N$=J!# z($dP<%+u4;xazL4^PJb$*S7Jf&fU__+uG0G&%EzdvBl}Y!tA=p=f%_E*4y6U!S}D( z>DSoo*Wc*k-0R%Y^~m7p=h^Vs&-=gI@!8_<;p6Y)=JVw1@$T*L@8ta3^z!!g_4V!h z?D+cm`1|<#`}_I*__Lt_I{|+o`2+z90RI3i000005C9MW00_+hF9{q-u%JPKJS zcxjM>3z2d}v9!aG6U@h&gCL zR1%m6#iTSrbht1vLc@eFe>^z4RACV%F*b0tC?SGFgDH^CD7ZvqgAZgoPZ%XSBq-2_ zHVZPu7)V1;mnI1)AXt;ajf8?Q_-y%6=MtDJD%4;oIAc$iBXTZ{p~9j}hk`=-Xh8z! qQWz;kxSS}cgpi~gY%Y1hq6i9*f@UB@Aka6?fd>W1Fr0lUAOJg5#&~J~ delta 670 zcmV;P0%85|2Z9KHM@dFFIbje05CG?c0C_$ocR?z8K_(<)AyQIOflDomR4p%XDotri zKX5ycUpi=LXi;)bJAO8lWIUH-I6Htfo@g_1adAn5Lv(a>c6N53a71@^cX)Vsvv4hY zdwZgFM@f-Ee0+Shb1tTKJywlSetv$pb}+1YIJb8&fq{X4xOp*xf`YnwGP-&*Vv%03 zemI4Ng}Qz;vw%LXfK9u9Hiw6Yw}LsegF(B3H&&iaiHV82gFCW>P`ZRUxrIDdp-qd6 zi;atljEs!BheEoCL%fMWk&lgDq*bwuT*8Y;yNy-DjZ3_dRm6}@#*t8BuUVOynZ}b* z#*qZ6#+6jUmRH1=Rm7K8#Ftl`oSdGXp1qoDZM0%=v}U29p`@gw zrlzLHrFW^RseZh6(57mAzjCastkJ1%fWdUqs&LY(anq}F(yVmPtbNn1cGIqT)317u z%7moBqNvuP%*)Eq&&}1;(%ahE+}qjU-rVEi-{RsK;^pP#?d|RE?(XmJ@9^;O@$vEW z^z`=j_OsyuECG}70ZV@&{t-iRWnpw>WFU8GbZ8()Nlj1yA^8LW3IP8AEC2ui01yBW z000Qe0RIUbNU)&6e;GWGKyi?uhazLlG@;S(pNJ!9(yV!7MaDrBNz_2Op(6?#BqIu@ zP|{{fkUDi{7y*ML!oU_z+*J87hmW5-A6{tLVBjANDQ~U-q0@H9k5fAjED&)Z;9m|Z zF7Wtt>NHOQ1po%F5F*GAg$fri_zBb_KtUdW{9IsyrNi0^23h>^qajO|5^E(C+yNra zpAcTY=#{gi28Vx7xRBYRV$X>%Wo+mX1Lw?;13NfCNPu8L3>!Rr5MVH&!GQr44+aDP EJNF|#rT_o{ diff --git a/gray-theme/images/gray-closed.gif b/gray-theme/images/gray-closed.gif deleted file mode 100644 index 9dbd54dfa36893c909a2fa47ad41826f99dbc21c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=fvR*sn31Lb<`JMEdx@v7EBg%&ehx!(t;jhAKsj4a7sn8b(@QVg zdLIrDVSDg>&Ye4VX5A5s>qA=r` zCE8Da`k%kddrH@GW}}K>UuxmHUC&m}u`YH!Rc^#sm?XlW%d$KAbvO4Z-D{pdjcf(f z`51T|yfb&+mR`#IR7`qFjkRjR62oJ^9dl-H4Ay+Rv-M_oVS~iwCYA*ZPZ)h7&m=68 zIFP)Gi{S=?4a2P@HsePNMCX0CIy+gXAx$aMP}RIVaqsm^x#e<742~|hw%ue|`(e}d zTH8}w+!&lV9xeD;^7rGvq71f)Cs}HElMAcmS?_LtUTfSjX}?}!3isP~1D8AZO`9`j kJQH_gxSXG#R{1>tNI~?qZ;Nj=1H+cV)78&qol`;+06j{x0ssI2 diff --git a/gray-theme/images/gray-open.gif b/gray-theme/images/gray-open.gif deleted file mode 100644 index 99d61308eebce9925f9b37451c424d6843531c90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 465 zcmV;?0WSWDP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L00Arj00Ark1drLo00007bV*G`2iOP? z2r(tu;O#g700B`+L_t(I%jJ@>FGEojhky6pR;wl!n(00000NkvXX Hu0mjfA0oXd diff --git a/gray-theme/images/lang.png b/gray-theme/images/lang.png new file mode 100644 index 0000000000000000000000000000000000000000..ba765d997732db42721a32632e253dd84f6bee59 GIT binary patch literal 733 zcmV<30wVp1P)`I2jz=)UfHK z1IEb#2O|#$2aSURiHkKwg3(4&l&9rUsPw_@?fo1YMIsLPUrusz&hI=0|57k$-VTRr z8ygxL^J{AdOxv#T1Om~qiHX;}@p$T2n7Y;0c74Hh=leT5U#7fX_e?C-esXp7%>MfN z<8@tKHJ+-ffVH@Y%w%wP?jSxn`3Si58xZmNny(0P_w?{Ep+bRufVsCBf+6txp(+4w z8p<*lRVD(;|7=thJzA5ORIg>J#>GTJ(1KH~aP$!PEm&BEOahuFpwHeksS<4lp_`5P zU-?k3hL$iiw1T;_)Byry$xv2AYVB?UXa{h?YN`Z7g2#X#HdN|TgcRV>ET%Gicw;fz z5$x_hQTw2Js^-m|>7GF)M2YScAv#(l5^<2iLFgQ~IcAp~l5;Ht8_qJ2KE~3yZ;@=y zjC?(`>+1QZ7mq1D##foT;e|ELf)2uEQk zgKTEqk|L?a%8e<;4?jmHb5s-@toan>3oDdK6KP0X*G22UUqv8La|Qdu44^DUQLt^v zo>=UDM?4<6P*-;?@AWQh8vsBy`z6}j+h-ZZ^8WzwLZPqQ7)Z!Ri2I{cSyyP0&l(I@4)dE{u~#pwIFv9a;wzjp8w>$U9B8dT_e P00000NkvXXu0mjfd`L&~ literal 0 HcmV?d00001 diff --git a/gray-theme/images/logs.gif b/gray-theme/images/logs.gif deleted file mode 100644 index 7bab606f3176266624ed360ccbf0ce0707b2cdfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 571 zcmZ?wbhEHb6krfwI2O+^g@Iuz1H%jkhGh&4%NZC}FfgoSU|7Y#u$qBk4FkhkAe)hK z9gxe&xSoMw0|Uc$28Nvs4Es4bA2KjJVqiGH&HaIa;WHD{Zw7{+jEtX|nJ@G3{A6Of z!ozb=MC6dD=n)y2V{&q*6%@`WDgDsZ{iUb($=3FRo!vWo`?n4b?;IUJI5~ZGcK+t< z{Mps@r@Q;_*w~+OaSu~dAEu{&Pf7WalJc^k;A39itK#BMMMYDmPW{``vTWJ16)RT! znml>cs#U+HPF=r#{fC7M|IC~Bd%=RgOO`xcx9<1KmA_Z5`m=iV-o1PG@85s)=+QH0 z&ip=n`1jGH|BfF0d-CMJGiUDKzyJ5{-KS5UJbn7~@BRC)U%&qT=FP{CAOC&&^!@wy z|9}4c{rmSn?SbM?7Dg_HdIlW^AOOV)1N)4I`ljZV*0v@g(e`#DdVru73Wmiv8T?b~ZK+mb~3c)*)6_;nvFS>?Y3f8{%C|SGP(VM916O#zh*+wsMJk z#>abm#Y8zt@ij9F>&Kq+^@)lI)e~WC5|9iy7w2dn5fp{}MP ep~J%Q;DBQjGb@{hN&*98Gdmwkj+O`qgEasffhzz2 diff --git a/gray-theme/images/refresh-small.gif b/gray-theme/images/refresh-small.gif index 369ed0e282cfee7516240f125f4e249f49903e37..65a2a0e6913599ea6e7576799b51f7480c1738ee 100644 GIT binary patch literal 585 zcmV-P0=E4}Nk%w1VGsZi0LB0S%;&v(+%P=06hOTdKfW2m>#>d4Y*)HDGOr3Z#so^& z14`HfGQ0&!xGbXPgl^SDF|r6OtOhs11U$zCJ;(ztx&tGi14FAIh1Fbd+&DSyHw$BAEy%rU^sC z7h&2ac-cGg_wa$uWLCR3Sj;O{+z&?81UShAFuDUHr2-$H0Vu5lI>HCc-pIGqtyr}( zC#M25zXC|hAJy8Esnk}f-f*JGQNc~G&MFig*Z7nf;&7tK0iQ%K|(`BMMg(R zNlHsh*iBAPP*GA-R8>}2Sc6$wTU=dUUtnQkV`OE8X3n5Vqh<}8Hg4X)i9<-v96ELE X+`)4vkDfio_+;TDsE;2(fdBwIg17vY literal 619 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 diff --git a/gray-theme/index.cgi b/gray-theme/index.cgi index c91823ba7..e04fea4be 100755 --- a/gray-theme/index.cgi +++ b/gray-theme/index.cgi @@ -1,41 +1,131 @@ -#!/usr/bin/perl +#!/usr/local/bin/perl -use strict; -use warnings; -require 'gray-theme/gray-theme-lib.pl'; +require "gray-theme/gray-theme-lib.pl"; +require "gray-theme/theme.pl"; &ReadParse(); -our ($current_theme, %in); -our %text = &load_language($current_theme); -my $minfo; -if ($in{'mod'}) { - $minfo = { &get_module_info($in{'mod'}) }; +# Work out which module to open by default +$hasvirt = &foreign_available("virtual-server"); +$hasvm2 = &foreign_available("server-manager"); +if ($in{'dom'} && $hasvirt) { + # Caller has requested a specific domain .. + &foreign_require("virtual-server", "virtual-server-lib.pl"); + $d = &virtual_server::get_domain($in{'dom'}); + if ($d) { + $goto = &virtual_server::can_config_domain($d) ? + "virtual-server/edit_domain.cgi?dom=$d->{'id'}" : + "virtual-server/view_domain.cgi?dom=$d->{'id'}"; + $left = "left.cgi?dom=$d->{'id'}"; + } + } +if (!$goto) { + # Default is determined by theme or Webmin config, + # defaults to system info page + local $sects = &get_right_frame_sections(); + $minfo = &get_goto_module(); + if ($sects->{'list'} == 1 && $hasvirt) { + $goto = "virtual-server/"; + } + elsif ($sects->{'list'} == 2 && $hasvm2) { + $goto = "server-manager/"; + } + elsif ($minfo && + $minfo->{'dir'} ne 'virtual-server' && + $minfo->{'dir'} ne 'server-manager') { + $goto = "$minfo->{'dir'}/"; + } + else { + $goto = "right.cgi". + "?open=system&auto=status&open=updates&". + "open=common&open=owner&open=reseller&open=vm2limits&". + "open=vm2usage"; + } + $left = "left.cgi"; + if ($minfo) { + $left .= "?$minfo->{'category'}=1"; + } + } + +# Work out the title that includes the version +if ($hasvirt) { + %minfo = &get_module_info("virtual-server"); + $title = &text('index_virtualmintitle', $minfo{'version'}); + } +elsif ($hasvm2) { + %minfo = &get_module_info("server-manager"); + $title = &text('index_cloudmintitle', $minfo{'version'}); + } +elsif (&get_product_name() eq 'usermin') { + $title = &text('index_usermintitle', &get_webmin_version()); } else { - $minfo = &get_goto_module(); + $title = &text('index_webmintitle', &get_webmin_version()); } -my $goto = $minfo ? $minfo->{'dir'}."/" : - $in{'page'} ? "" : "right.cgi"; -if ($in{'page'}) { - $goto .= "/".$in{'page'}; +$title = &get_html_title($title); + +# Work out if we have a top frame +if ($hasvirt) { + %vconfig = &foreign_config("virtual-server"); + } +$upperframe = $vconfig{'theme_topframe'} || + $gconfig{'theme_topframe'}; +$upperrows = $vconfig{'theme_toprows'} || + $gconfig{'theme_toprows'} || 200; +if ($upperframe =~ /\$LEVEL|\$\{LEVEL/) { + # Sub in user level + $levelnum = &get_virtualmin_user_level(); + $level = $levelnum == 0 ? "master" : + $levelnum == 1 ? "reseller" : + $levelnum == 2 ? "domain" : + $levelnum == 3 ? "usermin" : + $levelnum == 4 ? "owner" : "unknown"; + $upperframe = &substitute_template($upperframe, { 'level' => $level }); } -my $cat = $minfo ? "?$minfo->{'category'}=1" : ""; # Show frameset -my $title = &get_html_framed_title(); -my $cols = &get_product_name() eq 'usermin' ? 180 : 230; -&popup_header($title, undef, undef, 1); +&PrintHeader(); +$cols = &get_left_frame_width(); +$frame1 = ""; +$frame2 = ""; +$fscols = "$cols,*"; +if ($current_lang_info->{'rtl'} || $current_lang eq "ar") { + ($frame1, $frame2) = ($frame2, $frame1); + $fscols = "*,$cols"; + } -print < - - - -<body> -<p>This page uses frames, but your browser doesn't support them.</p> -</body> - - -EOF -&popup_footer(1); +# Page header +print "\n"; +print " $title \n"; + +# Upper custom frame +if ($upperframe) { + print "\n"; + if ($upperframe =~ /^\//) { + # Local file to serve + print "\n"; + } + else { + # Absolute URL + print "\n"; + } + } + +# Left and right frames +print "\n"; +print $frame1,"\n"; +print $frame2,"\n"; + +# What if no frames? +print "\n"; +print "<body>\n"; +print "<p>This page uses frames, but your browser doesn't support them.</p>\n"; +print "</body>\n"; +print "\n"; + +# End of the frames and page +if ($upperframe) { + print "\n"; + } +print "\n"; +print "\n"; diff --git a/gray-theme/iscsi-server/images/opts.gif b/gray-theme/iscsi-server/images/opts.gif deleted file mode 100644 index 495a429284bd10b0ce73553799ddd5793513ad38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5346 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 L)#25j+jXLI;y diff --git a/gray-theme/iscsi-target/images/conn.gif b/gray-theme/iscsi-target/images/conn.gif deleted file mode 100644 index 495a429284bd10b0ce73553799ddd5793513ad38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5346 zcmW+)dpwiv8-I4NS;kg~In66V#AXUbn>QsdNhhh4Ilq;13OQ~|O(Mr+%3+mMQgn0( z8*^HY(HkO}Df&5|$4gayTYi zasR&ZFxmGMcs)tBKm+X$+XFy(o0Z({-?D$q)dL<^j|T@_jq(oj2kiZVef)KuE_(<1 zAM^M2iw@=b+X8^fRVN4g6W6}^h@?^?#|;L6jIfEC^7clzx?0m!NR63pH{qsiS7V?3 zWsPPortI`*jH;x%nb7ToJga3L-ACom?_Phuwaez(Txg-Hp2f&u@@dqWwZcQc`5A}( zye_^Z5GXZi{Xb~=;ZqXDfK+>V5WdCHsw)<5Y;gD3e3%zlo&&M9wMEkDbn^YYJWR2N z>g42w-rh~S!@_oG`S@%>dJfwnT~b|;M2dubZEbcZC)*IEu47jt9_1uiwdXMyhM<)? zs?E4?Ef@(`($eQHXlQ64V`5^EwY9ZmNB$B(0$%H0vb3=98RhdKm!QTQ!Zq_lmuT79 zMJbOTn+#yFelpu)-zd8x_Gv^%`xFSy|VSf8BnAEG<2AY;V-7v+I+e539PnukOx> z-mzl`DO^ezu8Bxt!bKvHdV+Z4=Gc4@k@6`tENm+feZQ>C)QL@vSIUOV>sG-X4jeeD zr34A=E-YACUvfOogp9?-{fYVVk3S9H0682ceHcyO%ow+3zvgsa22u|s&=ocBy&I_x z|4A@0nexl1X8M7`I%b9{L-*+1og+D^ad{Rb_yi*_uVir02C*-CkQ`ANtZgR0~n}{r=~&^zSl$;#`l$|QfTz;5+Syc`HDUd)kE3a>ghLem@i+-Bb#yb z924SdeS&yd1$QJLdb6~qW)DZWHisFhjZVz;wl@Y;jx&)c%Up%YLJePEzNM8_6q8k~ zUbrv5eSX5+F!9!{8{2zy{26cndvQj&y-D=I2Vv3GV(ZfN%XT%w4=&I$pDi)@1!_@(xrW@ne zlp-V3{OjvqNAIZ#AW*~`gYY*hCp4&k!sHW1>SE1fmwx5EtqeMiu$=y*0=fZSf$AsH zaQb`#u(V0dqx|~y5(6Bfn(cGi%?+LJ=?$Fd<+ioq;v^zWkP(xcr&FzNm*Hy+|y$T(5=HwYsWw( zyPTYys^G=N#p=}G`5hV!Mo@QoB^xz*9f@kej8gKE*@fXy{f`e&xRKUmH zV!+GZUbSrlZt7Hw(c3nLaksGed9LPaKE{Xv+2KROWbq_oA#3(~Y(}Mj`$aNU+U~QA z@a_3>0toaO*HapIb9Hrxojx7S%%^syV~cEPs^6nBte;(nerD=@<#G|8NA;q0T@D>$ z@Fn6?$Xv4@pq54y9fc+0J#8rhej*$dn7F9_=HK>^%gnUybU0wZHfZlJ|3NFv@R3I( z!%p9g|J{oZ&@DjxwIwJh2x%2OB8rzv5=8}j`xV+g?QnE*PD#{OFmd7ghFucdQ}{Z5+5`<=bF zJPk|iQF3`T@!46O3jDbUB&n;ZJxdLw8bS;V5OgYA-mRp)DuicbRQ=@A#f#VNK<@-7 zx0zpS*bxUY>=(oh2Fr11(*a%&4tQX!t*bp~E4QrS@QInIxe=O)GYW-*c|3$KLUGvv ziCV$IbBblv>AO;jI)#l?%r=^)ddGg%-51dU*Twjkgkgx`jd+S=#n z?YZWO&f15!zkx@xTKW!<|K8uxZVf!yo`KNJ-V zIUy2@*2U5!Sz)hhDSmQh4&1zFtsATG{d?U;*-JZW8WFfEdS}v_rVX-@XyFf|{>7MG z-ahw(brO_gWNMmfqys$hM}*qL0t17|7m6pBc>KLsW2e(0d1j^^3a*=UPjW$w}l5 zJ|#CgdOh-tM-}j3SV&DPO5h0=9_zMx=|B0o2~7&g9jS?k<EY?Ffd>g@CgVwbV=pG9yH8AJ7fRJlm1l2cesQ5_YWm?+hvKxqBu1XFW8u&rlw@?zLHMl*-Eqc*#CWTGGz8Tx4k5joepKm zR6sUe=<4p=d3th|*Uz7v>@Jp{&J6=noI;Y7=9-vWbID?M;g=+}Zp;l^?>3Z+kv1e^Q&`W}JaUx525$tUiy>wk4_+cyXR zy7B%v3aqEsn7n)U>Wur>D`OWg?qM@F1E)ODDQHzyqeuqraxp=ngkU@T=AQlkx})f) zf=BQnttEJ9?kR%SFbnc5{Z7NcK&E%+{eRd>Ty6T~q&2;WHGuhWd8jRfzw!Jed-pM9 z1w*W8p*;Rs)9MP&vnqsUgaV*w1v9zek=g>*<)M2iGI`k1YlT}mdAyIGos|XInnFqs zsYu)jjyOgth&gZXO*b!M;fz@EEg2PSXwG|MWz1Kz`&``5pT}YClOC}6b0*}802|JW z+$cEqU|c?%j9Q6&26)P^bz#huwxO^Jdk@u5CQYFTM9+S$M?r%+n}>!z}UB{M3Xw z-Pz_ha>%vN8_hNK5$Nf4&WnB@rVFYZLi)5$Koj@ulCccfojr#S8m!6Wt={RI$~*0$ zN1GKO!W5p>Mg07vN_WmR* zW9R5Ehj!zKYeHkTRlL^#Ef1qIVo9A*ZiUw2zmTr~6~OqwUNj5h?RG%!fBFo_-q9Vl zwO|%2KFV^`Kd|?9vcF(Mu$fc&u@X~n7ypU<_#v0PFeV4-%W+0N{aWVdcI-sJsNB~M zY39W%SIi<|ka#z>ew0TVe&a`dM9hj*n(9qL#lZ~>-G~}@^Ix5BK7UvSxG|p1Mx;i9 z$kn9{4GqjjE|=Zia%FvDD!001G3&mWoE*}$_YJbB+{;%WnZyrlV@t4{ej!Rdp*Ep4 zWb1%A`qp8;TSm{xqhsUL7O=9l`Rg|p1nPa9n%Ri=z=wDf&dh_Sl@MP&mC2HF-Kf`Z z--7Hy?(k#-mO5T$C{SN2cJgm~-LF1@fo|YETH}a}CtgxJ)ParrS$sH$pX2HdIXEGxDAQ# zBdvDUyU|CUu=NTf`Vkb?BJN|j!n6RJu455r8^38XIS@HFIDi>hShNtqKBN?aKW5Tf zwj%Sj@<)3Wz7Y18BdebQ4lXDYHS>_>Tr%rLtlDpE>FhkWiCIGXQY7%!{E=#nNiUm?CC35ngnt7Z$3)D+z}MpO^mMje7d!wd7$^^kt1i72i^gS@=|)* z%SV0(^f$~QD3qbKuT(gpv?aVIR=9kS=}amV0JrVj?EXv41G(zDLQ10iTBYl2Ka#}l zNzJr|5pcjcG1)N=e$SLeRg%g@inh_`qULa->Zl~1s+u`xv(iYbqmJDUsbr#i&~EQ; zV!*~)Aa4#UiEB9sVX%KrbhriWGY7hp&>;SYNZ|`8@de76*&U_l`@80sek#zhmBALGgJHHt2r+Drgi!H1 zGRtduqHDtZ6DbY;n<8BOPA}M7*#gRL_>)}M5bP7w#^!X=9xFqWZ&IWQkdNi5qde#R z5Y@lU(>||`6!bly{StuemX%60bg6E(Xt@p#&-pMKjn_ZN8uXFYA4z_`(>KHTmA4>T zYKH#dEfA|rUPC8{(D^qK?5Y&H7=dz6FdypU`xh36D&M#Lk_n+VzpG%#hx)KieG&jE zD{q6H*HIGm=$qQmZg+Hh?IYC2hzohbN-R6eG1K1V1bQ0bHi0m@950=%?j${-kwlw{ zWiHIn)X>m<+_Q5h@*5LRIplnY*Iz`*>y=Vm4o?U9WSExu2@t0K2}J519mWU+tSyC% z(~{QICGqQxA+#g;-rp;Kw0E&$&nj5XYQ|Ja1PlDHZv)fK-@cJ7`T6j8DxhD=N@Qo% zXv@UR&3p8~9pmO+@#JgE0=dNNwfYq{UCr$7Zb(o<2qA7`asO&xYp$tGhxXdX$V^uU zvYp8ba&uNzS)@ps4~e9^cGf>d4BRu8fwZ&(7Y@$m_O*@{FKKFQu&6)nlyOa0!Vvgr zL34$uB2sHZma>#DAFMXvDnV=)$<$n`i~hrwVnkE zElmo!x{S?$lhY`R88o@^Ymxit+R}k5v(YOSY6Eid4$pi<^E`gqxxJN+;HCdrkV{nX zR=ecV0}?lQ?5(@1bT?MTa9lA9*T(&eI+YT;R!GRVqbPW276n*G`Uyw+o_4!l&x4~$ zrhhByJFT)P_YM}{e4C=?P7u|{YjYPeGNg)1(HVRq-j>Ys8(1%zTK`~GPN0Z{&R3JP zCX>Ij8MlBIXpgeAnN$dLibNYLaIJ4lWLdFpv#zmm$NXr60$m|@7U%gfhRz%KJQJIy zV|O3q60k-Nkjdn2xXk*7rhFe7ygbnlGwYV_t7)HK8}y|UyQw-riI7N2O3Xq}RdyrO z^Q_e)MHA~4l9>n7=`6~e;rk;(*{oRi?*=S#A=%kg)p^E==!!3(p9mctvk>9L`cf1! zw|pe9DnU_w(J^XzPuTe1+ubBOZ)^Y%bd5bnk=Er@d+3?IC{>q;1>E_yk)3o_H|=uX zQ(fdHanh(d8MH@&fK*tmqzl{cug!&xh&J9A4reMb4Oi!eU+>gXS7@hkoqC5m^6edN zspaSIOAxU`_+R%k`Q11zyEpNzpC7lrp{B9YufRyaA1wzll3d1+2HxWNMH#vgIXrC7 zf|RNRvyq^1by6B#^jON?Hyhk_#AIJwTlDJGgvDQmrNsD+IJCMlkG=d6%t$IW?d+u8 zv2$ngu{ckblFRO-%3!;g>1#?o3#f|UvdfjN#Tp)7TNruj=lA&v;4T(YsuMgvj{1ib zb!)Jm;$J1sE%4@`K199Pm(UTvD(nvndfe<6Gd3?{`hHqR4tv>ro1R{Ci14co{jn@I zh#t2}vAqc)0S$KZ*)-k=U)eCVxp~4ulzoD(Uz8N3u1+f?gYRupqZZ6Zc;(HOOBeBL zGeyL+&+Gg~mnO_xsfF?o`f{9;lg&*9HP_2_k<%VL3fMqX7SS=;1cT|+U|@>8j*_L) z){`?*HIqCk*0Ngq!+mUn=#@IhB3gByzp{P%wln4Nz*kUdZLRHjCJc|Cg~{t)OD}`H zE2GjrGYaxTA7|sTEm0=Q9C1+xvbCOIJG8`KOKoRS4#O4Qk@pVh;G$$ileHT}2(Y&% z^>SI#-hsS4ze16e@^hBOdQdNwQto(XfEXV^;9H^3%qv0iI3W0((C~hM(jM6*CE#?x L)#25j+jXLI;y diff --git a/gray-theme/jsample/images/icon.gif b/gray-theme/jsample/images/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..a3b93ffca0faea6caccf30d919730804151e533b GIT binary patch literal 3365 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 -\n"; + +my $is_master; +# Is this user root? +if (foreign_available("virtual-server")) { + foreign_require("virtual-server"); + $is_master = virtual_server::master_admin(); + } +elsif (foreign_available("server-manager")) { + foreign_require("server-manager"); + $is_master = server_manager::can_action(undef, "global"); } -// Show the logs for the current module in the right -function show_logs() { - var url = ''+window.parent.frames[1].location; - var sl1 = url.indexOf('//'); - var mod = ''; - if (sl1 > 0) { - var sl2 = url.indexOf('/', sl1+2); - if (sl2 > 0) { - var sl3 = url.indexOf('/', sl2+1); - if (sl3 > 0) { - mod = url.substring(sl2+1, sl3); - } else { - mod = url.substring(sl2+1); - } - } - } -if (mod && mod.indexOf('.cgi') <= 0) { - // Show one module's logs - window.parent.frames[1].location = 'webminlog/search.cgi?tall=4&uall=1&fall=1&mall=0&module='+mod; - } +# Find all left-side items from Webmin +my $sects = get_right_frame_sections(); +my @leftitems = list_combined_webmin_menu($sects, \%in); +my @lefttitles = grep { $_->{'type'} eq 'title' } @leftitems; + +# Work out what mode selector contains +my @has = ( ); +my %modmenu; +foreach my $title (@lefttitles) { + push(@has, { 'id' => $title->{'module'}, + 'desc' => $title->{'desc'}, + 'icon' => $title->{'icon'} }); + $modmenu{$title->{'module'}}++; + } +my $nw = $sects->{'nowebmin'} || 0; +if ($nw == 0 || $nw == 2 && $is_master) { + my $p = get_product_name(); + push(@has, { 'id' => 'modules', + 'desc' => $text{'has_'.$p}, + 'icon' => '/images/'.$p.'-small.png' }); + } + +# Default left-side mode +my $mode = $in{'mode'} ? $in{'mode'} : + $sects->{'tab'} =~ /vm2/ ? "server-manager" : + $sects->{'tab'} =~ /virtualmin/ ? "virtual-server" : + $sects->{'tab'} =~ /mail/ ? "mailboxes" : + @leftitems ? $has[0]->{'id'} : "modules"; + +# Show mode selector +if (indexof($mode, (map { $_->{'id'} } @has)) < 0) { + $mode = $has[0]->{'id'}; + } +if (@has > 1) { + print "

"; + foreach my $m (@has) { + print ""; + if ($m->{'id'} ne $mode) { + print ""; + } + if ($m->{'icon'}) { + my $icon = add_webprefix($m->{'icon'}); + print "$m->{ "; + } + print $m->{'desc'}; + if ($m->{'id'} ne $mode) { + print "\n"; + } + print "\n"; + } + print "
"; + } + +print "
\n"; +print "
\n"; + +my $selwidth = (get_left_frame_width() - 70)."px"; +if ($mode eq "modules") { + # Only showing Webmin modules + @leftitems = &list_modules_webmin_menu(); + foreach my $l (@leftitems) { + $l->{'members'} = [ grep { !$modmenu{$_->{'id'}} } @{$l->{'members'}} ]; + } + push(@leftitems, { 'type' => 'hr' }); + } else { - // Show all logs - window.parent.frames[1].location = 'webminlog/search.cgi?tall=4&uall=1&fall=1&mall=0&mall=1' - } -} - - - -EOF - -# Show login -my @leftmenu; -push(@leftmenu, { 'type' => 'text', - 'desc' => &text('left_login', $remote_user) }); -push(@leftmenu, { 'type' => 'hr' }); - -# Webmin modules -push(@leftmenu, &list_modules_webmin_menu()); - -# Show module/help search form -if ($gaccess{'webminsearch'}) { - push(@leftmenu, { 'type' => 'input', - 'cgi' => &get_webprefix().'/webmin_search.cgi', - 'name' => 'search', - 'desc' => $text{'left_search'}, - 'size' => 15 }); + # Only show items under some title OR items that have no title + my ($lefttitle) = grep { $_->{'id'} eq $mode } @lefttitles; + my %titlemods = map { $_->{'module'}, $_ } @lefttitles; + @leftitems = grep { $_->{'module'} eq $mode || + !$titlemods{$_->{'module'}} } @leftitems; } -push(@leftmenu, { 'type' => 'hr' }); +# Show system information link +push(@leftitems, { 'type' => 'item', + 'id' => 'home', + 'desc' => $text{'left_home'}, + 'link' => '/right.cgi', + 'icon' => '/images/gohome.png' }); -# Show current module's log search, if logging -if ($gconfig{'log'} && &foreign_available("webminlog")) { - push(@leftmenu, { 'type' => 'item', - 'desc' => $text{'left_logs'}, - 'link' => '/webminlog/', - 'icon' => '/images/logs.gif', - 'onclick' => 'show_logs(); return false;' }); - } - -# Show info link -push(@leftmenu, { 'type' => 'item', - 'desc' => $text{'left_home'}, - 'link' => '/right.cgi', - 'icon' => '/images/gohome.gif' }); - -# Show feedback link, but only if a custom email is set -%gaccess = &get_module_acl(undef, ""); -if (&get_product_name() eq 'webmin' && # For Webmin - !$ENV{'ANONYMOUS_USER'} && - int($gconfig{'nofeedbackcc'} || 0) != 2 && - $gaccess{'feedback'} && - $gconfig{'feedback_to'} || - &get_product_name() eq 'usermin' && # For Usermin - !$ENV{'ANONYMOUS_USER'} && - $gconfig{'feedback'} - ) { - push(@leftmenu, { 'type' => 'item', - 'desc' => $text{'left_feedback'}, - 'link' => '/feedback_form.cgi', - 'icon' => '/images/mail-small.gif' }); - } - -# Show refesh modules link, for master admin -if (&foreign_available("webmin")) { - push(@leftmenu, { 'type' => 'item', - 'desc' => $text{'main_refreshmods'}, - 'link' => '/webmin/refresh_modules.cgi', - 'icon' => '/images/refresh-small.gif' }); +# Show refresh modules link +if ($mode eq "modules" && foreign_available("webmin")) { + push(@leftitems, { 'type' => 'item', + 'id' => 'refresh', + 'desc' => $text{'main_refreshmods'}, + 'link' => '/webmin/refresh_modules.cgi', + 'icon' => '/images/reload.png' }); } # Show logout link -my %miniserv; -&get_miniserv_config(\%miniserv); +get_miniserv_config(\%miniserv); if ($miniserv{'logout'} && !$ENV{'SSL_USER'} && !$ENV{'LOCAL_USER'} && $ENV{'HTTP_USER_AGENT'} !~ /webmin/i) { my $logout = { 'type' => 'item', - 'icon' => '/images/stock_quit.gif', - 'target' => 'window' }; + 'id' => 'logout', + 'target' => 'window', + 'icon' => '/images/stock_quit.png' }; if ($main::session_id) { $logout->{'desc'} = $text{'main_logout'}; $logout->{'link'} = '/session_login.cgi?logout=1'; @@ -126,25 +135,33 @@ if ($miniserv{'logout'} && !$ENV{'SSL_USER'} && !$ENV{'LOCAL_USER'} && $logout->{'desc'} = $text{'main_switch'}; $logout->{'link'} = '/switch_user.cgi'; } - push(@leftmenu, $logout); + push(@leftitems, $logout); } # Show link back to original Webmin server if ($ENV{'HTTP_WEBMIN_SERVERS'}) { - push(@leftmenu, { 'type' => 'item', + push(@leftitems, { 'type' => 'item', 'desc' => $text{'header_servers'}, 'link' => $ENV{'HTTP_WEBMIN_SERVERS'}, 'icon' => '/images/webmin-small.gif', 'target' => 'window' }); } -# Actually output the menu -print "
\n"; -print "
\n"; -&show_menu_items_list(\@leftmenu, 0); +# Show Webmin search form +my $cansearch = ($gaccess{'webminsearch'} || '') ne '0' && + !$sects->{'nosearch'}; +if ($mode eq "modules" && $cansearch) { + push(@leftitems, { 'type' => 'input', + 'desc' => $text{'left_search'}, + 'name' => 'search', + 'cgi' => '/webmin_search.cgi', }); + } + +show_menu_items_list(\@leftitems, 0); + print "
\n"; print "
\n"; -&popup_footer(); +popup_footer(); # show_menu_items_list(&list, indent) # Actually prints the HTML for menu items @@ -154,21 +171,26 @@ my ($items, $indent) = @_; foreach my $item (@$items) { if ($item->{'type'} eq 'item') { # Link to some page - my $t = !$item->{'target'} ? 'right' : - $item->{'target'} eq 'new' ? '_blank' : - $item->{'target'} eq 'window' ? '_top' : 'right'; + my $it = $item->{'target'} || ''; + my $t = $it eq 'new' ? '_blank' : + $it eq 'window' ? '_top' : 'right'; + my $link = add_webprefix($item->{'link'}); + if ($item->{'link'} =~ /^(https?):\/\//) { + $t = '_blank'; + $link = $item->{'link'}; + } if ($item->{'icon'}) { my $icon = add_webprefix($item->{'icon'}); - print "
". + print "
". "\n"; } my $cls = $item->{'icon'} ? 'aftericon' : - $indent ? 'linkindented' : 'leftlink'; + $indent ? 'linkindented'. + ($item->{'inactive'} ? ' inactive' : ''). + '' : 'leftlink'; print "
"; - my $link = add_webprefix($item->{'link'}); - my $tags = $item->{'onclick'} ? - "onClick='".$item->{'onclick'}."'" : ""; - print "". + print "". "$item->{'desc'}"; print "
"; if ($item->{'icon'}) { @@ -189,9 +211,13 @@ foreach my $item (@$items) { "$item->{'desc'}
"; print "
\n"; print "
\n"; - &show_menu_items_list($item->{'members'}, $indent+1); + show_menu_items_list($item->{'members'}, $indent+1); print "
\n"; } + elsif ($item->{'type'} eq 'html') { + # Some HTML block + print "\n"; + } elsif ($item->{'type'} eq 'text') { # A line of text print "