PNG  IHDRQgAMA a cHRMz&u0`:pQ<bKGDgmIDATxwUﹻ& ^CX(J I@ "% (** BX +*i"]j(IH{~R)[~>h{}gy)I$Ij .I$I$ʊy@}x.: $I$Ii}VZPC)I$IF ^0ʐJ$I$Q^}{"r=OzI$gRZeC.IOvH eKX $IMpxsk.쒷/&r[޳<v| .I~)@$updYRa$I |M.e JaֶpSYR6j>h%IRز if&uJ)M$I vLi=H;7UJ,],X$I1AҒJ$ XY XzI@GNҥRT)E@;]K*Mw;#5_wOn~\ DC&$(A5 RRFkvIR}l!RytRl;~^ǷJj اy뷦BZJr&ӥ8Pjw~vnv X^(I;4R=P[3]J,]ȏ~:3?[ a&e)`e*P[4]T=Cq6R[ ~ޤrXR Հg(t_HZ-Hg M$ãmL5R uk*`%C-E6/%[t X.{8P9Z.vkXŐKjgKZHg(aK9ڦmKjѺm_ \#$5,)-  61eJ,5m| r'= &ڡd%-]J on Xm|{ RҞe $eڧY XYrԮ-a7RK6h>n$5AVڴi*ֆK)mѦtmr1p| q:흺,)Oi*ֺK)ܬ֦K-5r3>0ԔHjJئEZj,%re~/z%jVMڸmrt)3]J,T K֦OvԒgii*bKiNO~%PW0=dii2tJ9Jݕ{7"I P9JKTbu,%r"6RKU}Ij2HKZXJ,妝 XYrP ެ24c%i^IK|.H,%rb:XRl1X4Pe/`x&P8Pj28Mzsx2r\zRPz4J}yP[g=L) .Q[6RjWgp FIH*-`IMRaK9TXcq*I y[jE>cw%gLRԕiFCj-ďa`#e~I j,%r,)?[gp FI˨mnWX#>mʔ XA DZf9,nKҲzIZXJ,L#kiPz4JZF,I,`61%2s $,VOϚ2/UFJfy7K> X+6 STXIeJILzMfKm LRaK9%|4p9LwJI!`NsiazĔ)%- XMq>pk$-$Q2x#N ؎-QR}ᶦHZډ)J,l#i@yn3LN`;nڔ XuX5pF)m|^0(>BHF9(cզEerJI rg7 4I@z0\JIi䵙RR0s;$s6eJ,`n 䂦0a)S)A 1eJ,堌#635RIgpNHuTH_SԕqVe ` &S)>p;S$魁eKIuX`I4춒o}`m$1":PI<[v9^\pTJjriRŭ P{#{R2,`)e-`mgj~1ϣLKam7&U\j/3mJ,`F;M'䱀 .KR#)yhTq;pcK9(q!w?uRR,n.yw*UXj#\]ɱ(qv2=RqfB#iJmmL<]Y͙#$5 uTU7ӦXR+q,`I}qL'`6Kͷ6r,]0S$- [RKR3oiRE|nӦXR.(i:LDLTJjY%o:)6rxzҒqTJjh㞦I.$YR.ʼnGZ\ֿf:%55 I˼!6dKxm4E"mG_ s? .e*?LRfK9%q#uh$)i3ULRfK9yxm܌bj84$i1U^@Wbm4uJ,ҪA>_Ij?1v32[gLRD96oTaR׿N7%L2 NT,`)7&ƝL*꽙yp_$M2#AS,`)7$rkTA29_Iye"|/0t)$n XT2`YJ;6Jx".e<`$) PI$5V4]29SRI>~=@j]lp2`K9Jaai^" Ԋ29ORI%:XV5]JmN9]H;1UC39NI%Xe78t)a;Oi Ҙ>Xt"~G>_mn:%|~ޅ_+]$o)@ǀ{hgN;IK6G&rp)T2i୦KJuv*T=TOSV>(~D>dm,I*Ɛ:R#ۙNI%D>G.n$o;+#RR!.eU˽TRI28t)1LWϚ>IJa3oFbu&:tJ*(F7y0ZR ^p'Ii L24x| XRI%ۄ>S1]Jy[zL$adB7.eh4%%누>WETf+3IR:I3Xה)3אOۦSRO'ٺ)S}"qOr[B7ϙ.edG)^ETR"RtRݜh0}LFVӦDB^k_JDj\=LS(Iv─aTeZ%eUAM-0;~˃@i|l @S4y72>sX-vA}ϛBI!ݎߨWl*)3{'Y|iSlEڻ(5KtSI$Uv02,~ԩ~x;P4ցCrO%tyn425:KMlD ^4JRxSهF_}شJTS6uj+ﷸk$eZO%G*^V2u3EMj3k%)okI]dT)URKDS 7~m@TJR~荪fT"֛L \sM -0T KfJz+nإKr L&j()[E&I ߴ>e FW_kJR|!O:5/2跌3T-'|zX ryp0JS ~^F>-2< `*%ZFP)bSn"L :)+pʷf(pO3TMW$~>@~ū:TAIsV1}S2<%ޟM?@iT ,Eūoz%i~g|`wS(]oȤ8)$ ntu`өe`6yPl IzMI{ʣzʨ )IZ2= ld:5+請M$-ї;U>_gsY$ÁN5WzWfIZ)-yuXIfp~S*IZdt;t>KūKR|$#LcԀ+2\;kJ`]YǔM1B)UbG"IRߊ<xܾӔJ0Z='Y嵤 Leveg)$znV-º^3Ւof#0Tfk^Zs[*I꯳3{)ˬW4Ւ4 OdpbZRS|*I 55#"&-IvT&/윚Ye:i$ 9{LkuRe[I~_\ؠ%>GL$iY8 9ܕ"S`kS.IlC;Ҏ4x&>u_0JLr<J2(^$5L s=MgV ~,Iju> 7r2)^=G$1:3G< `J3~&IR% 6Tx/rIj3O< ʔ&#f_yXJiގNSz; Tx(i8%#4 ~AS+IjerIUrIj362v885+IjAhK__5X%nV%Iͳ-y|7XV2v4fzo_68"S/I-qbf; LkF)KSM$ Ms>K WNV}^`-큧32ŒVؙGdu,^^m%6~Nn&͓3ŒVZMsRpfEW%IwdǀLm[7W&bIRL@Q|)* i ImsIMmKmyV`i$G+R 0tV'!V)֏28vU7͒vHꦼtxꗞT ;S}7Mf+fIRHNZUkUx5SAJㄌ9MqμAIRi|j5)o*^'<$TwI1hEU^c_j?Е$%d`z cyf,XO IJnTgA UXRD }{H}^S,P5V2\Xx`pZ|Yk:$e ~ @nWL.j+ϝYb퇪bZ BVu)u/IJ_ 1[p.p60bC >|X91P:N\!5qUB}5a5ja `ubcVxYt1N0Zzl4]7­gKj]?4ϻ *[bg$)+À*x쳀ogO$~,5 زUS9 lq3+5mgw@np1sso Ӻ=|N6 /g(Wv7U;zωM=wk,0uTg_`_P`uz?2yI!b`kĸSo+Qx%!\οe|އԁKS-s6pu_(ֿ$i++T8=eY; צP+phxWQv*|p1. ά. XRkIQYP,drZ | B%wP|S5`~́@i޾ E;Չaw{o'Q?%iL{u D?N1BD!owPHReFZ* k_-~{E9b-~P`fE{AܶBJAFO wx6Rox5 K5=WwehS8 (JClJ~ p+Fi;ŗo+:bD#g(C"wA^ r.F8L;dzdIHUX݆ϞXg )IFqem%I4dj&ppT{'{HOx( Rk6^C٫O.)3:s(۳(Z?~ٻ89zmT"PLtw䥈5&b<8GZ-Y&K?e8,`I6e(֍xb83 `rzXj)F=l($Ij 2*(F?h(/9ik:I`m#p3MgLaKjc/U#n5S# m(^)=y=đx8ŬI[U]~SцA4p$-F i(R,7Cx;X=cI>{Km\ o(Tv2vx2qiiDJN,Ҏ!1f 5quBj1!8 rDFd(!WQl,gSkL1Bxg''՞^ǘ;pQ P(c_ IRujg(Wz bs#P­rz> k c&nB=q+ؔXn#r5)co*Ũ+G?7< |PQӣ'G`uOd>%Mctz# Ԫڞ&7CaQ~N'-P.W`Oedp03C!IZcIAMPUۀ5J<\u~+{9(FbbyAeBhOSܳ1 bÈT#ŠyDžs,`5}DC-`̞%r&ڙa87QWWp6e7 Rϫ/oY ꇅ Nܶըtc!LA T7V4Jsū I-0Pxz7QNF_iZgúWkG83 0eWr9 X]㾮݁#Jˢ C}0=3ݱtBi]_ &{{[/o[~ \q鯜00٩|cD3=4B_b RYb$óBRsf&lLX#M*C_L܄:gx)WΘsGSbuL rF$9';\4Ɍq'n[%p.Q`u hNb`eCQyQ|l_C>Lb꟟3hSb #xNxSs^ 88|Mz)}:](vbۢamŖ࿥ 0)Q7@0=?^k(*J}3ibkFn HjB׻NO z x}7p 0tfDX.lwgȔhԾŲ }6g E |LkLZteu+=q\Iv0쮑)QٵpH8/2?Σo>Jvppho~f>%bMM}\//":PTc(v9v!gոQ )UfVG+! 35{=x\2+ki,y$~A1iC6#)vC5^>+gǵ@1Hy٪7u;p psϰu/S <aʸGu'tD1ԝI<pg|6j'p:tպhX{o(7v],*}6a_ wXRk,O]Lܳ~Vo45rp"N5k;m{rZbΦ${#)`(Ŵg,;j%6j.pyYT?}-kBDc3qA`NWQū20/^AZW%NQ MI.X#P#,^Ebc&?XR tAV|Y.1!؅⨉ccww>ivl(JT~ u`ٵDm q)+Ri x/x8cyFO!/*!/&,7<.N,YDŽ&ܑQF1Bz)FPʛ?5d 6`kQձ λc؎%582Y&nD_$Je4>a?! ͨ|ȎWZSsv8 j(I&yj Jb5m?HWp=g}G3#|I,5v珿] H~R3@B[☉9Ox~oMy=J;xUVoj bUsl_35t-(ՃɼRB7U!qc+x4H_Qo֮$[GO<4`&č\GOc[.[*Af%mG/ ňM/r W/Nw~B1U3J?P&Y )`ѓZ1p]^l“W#)lWZilUQu`-m|xĐ,_ƪ|9i:_{*(3Gѧ}UoD+>m_?VPۅ15&}2|/pIOʵ> GZ9cmíتmnz)yߐbD >e}:) r|@R5qVSA10C%E_'^8cR7O;6[eKePGϦX7jb}OTGO^jn*媓7nGMC t,k31Rb (vyܴʭ!iTh8~ZYZp(qsRL ?b}cŨʊGO^!rPJO15MJ[c&~Z`"ѓޔH1C&^|Ш|rʼ,AwĴ?b5)tLU)F| &g٣O]oqSUjy(x<Ϳ3 .FSkoYg2 \_#wj{u'rQ>o;%n|F*O_L"e9umDds?.fuuQbIWz |4\0 sb;OvxOSs; G%T4gFRurj(֍ڑb uԖKDu1MK{1^ q; C=6\8FR艇!%\YÔU| 88m)֓NcLve C6z;o&X x59:q61Z(T7>C?gcļxѐ Z oo-08jہ x,`' ҔOcRlf~`jj".Nv+sM_]Zk g( UOPyεx%pUh2(@il0ݽQXxppx-NS( WO+轾 nFߢ3M<;z)FBZjciu/QoF 7R¥ ZFLF~#ȣߨ^<쩡ݛкvџ))ME>ώx4m#!-m!L;vv#~Y[đKmx9.[,UFS CVkZ +ߟrY٧IZd/ioi$%͝ب_ֶX3ܫhNU ZZgk=]=bbJS[wjU()*I =ώ:}-蹞lUj:1}MWm=̛ _ ¾,8{__m{_PVK^n3esw5ӫh#$-q=A̟> ,^I}P^J$qY~Q[ Xq9{#&T.^GVj__RKpn,b=`żY@^՝;z{paVKkQXj/)y TIc&F;FBG7wg ZZDG!x r_tƢ!}i/V=M/#nB8 XxЫ ^@CR<{䤭YCN)eKOSƟa $&g[i3.C6xrOc8TI;o hH6P&L{@q6[ Gzp^71j(l`J}]e6X☉#͕ ׈$AB1Vjh㭦IRsqFBjwQ_7Xk>y"N=MB0 ,C #o6MRc0|$)ف"1!ixY<B9mx `,tA>)5ػQ?jQ?cn>YZe Tisvh# GMމȇp:ԴVuږ8ɼH]C.5C!UV;F`mbBk LTMvPʍϤj?ԯ/Qr1NB`9s"s TYsz &9S%U԰> {<ؿSMxB|H\3@!U| k']$U+> |HHMLޢ?V9iD!-@x TIî%6Z*9X@HMW#?nN ,oe6?tQwڱ.]-y':mW0#!J82qFjH -`ѓ&M0u Uγmxϵ^-_\])@0Rt.8/?ٰCY]x}=sD3ojަЫNuS%U}ԤwHH>ڗjܷ_3gN q7[q2la*ArǓԖ+p8/RGM ]jacd(JhWko6ڎbj]i5Bj3+3!\j1UZLsLTv8HHmup<>gKMJj0@H%,W΃7R) ">c, xixј^ aܖ>H[i.UIHc U1=yW\=S*GR~)AF=`&2h`DzT󑓶J+?W+}C%P:|0H܆}-<;OC[~o.$~i}~HQ TvXΈr=b}$vizL4:ȰT|4~*!oXQR6Lk+#t/g lԁߖ[Jڶ_N$k*". xsxX7jRVbAAʯKҎU3)zSNN _'s?f)6X!%ssAkʱ>qƷb hg %n ~p1REGMHH=BJiy[<5 ǁJҖgKR*倳e~HUy)Ag,K)`Vw6bRR:qL#\rclK/$sh*$ 6덤 KԖc 3Z9=Ɣ=o>X Ώ"1 )a`SJJ6k(<c e{%kϊP+SL'TcMJWRm ŏ"w)qc ef꒵i?b7b('"2r%~HUS1\<(`1Wx9=8HY9m:X18bgD1u ~|H;K-Uep,, C1 RV.MR5άh,tWO8WC$ XRVsQS]3GJ|12 [vM :k#~tH30Rf-HYݺ-`I9%lIDTm\ S{]9gOڒMNCV\G*2JRŨ;Rҏ^ڽ̱mq1Eu?To3I)y^#jJw^Ńj^vvlB_⋌P4x>0$c>K†Aļ9s_VjTt0l#m>E-,,x,-W)سo&96RE XR.6bXw+)GAEvL)͞K4$p=Ũi_ѱOjb HY/+@θH9޼]Nԥ%n{ &zjT? Ty) s^ULlb,PiTf^<À] 62R^V7)S!nllS6~͝V}-=%* ʻ>G DnK<y&>LPy7'r=Hj 9V`[c"*^8HpcO8bnU`4JȪAƋ#1_\ XϘHPRgik(~G~0DAA_2p|J묭a2\NCr]M_0 ^T%e#vD^%xy-n}-E\3aS%yN!r_{ )sAw ڼp1pEAk~v<:`'ӭ^5 ArXOI驻T (dk)_\ PuA*BY]yB"l\ey hH*tbK)3 IKZ򹞋XjN n *n>k]X_d!ryBH ]*R 0(#'7 %es9??ښFC,ՁQPjARJ\Ρw K#jahgw;2$l*) %Xq5!U᢯6Re] |0[__64ch&_}iL8KEgҎ7 M/\`|.p,~`a=BR?xܐrQ8K XR2M8f ?`sgWS%" Ԉ 7R%$ N}?QL1|-эټwIZ%pvL3Hk>,ImgW7{E xPHx73RA @RS CC !\ȟ5IXR^ZxHл$Q[ŝ40 (>+ _C >BRt<,TrT {O/H+˟Pl6 I B)/VC<6a2~(XwV4gnXR ϱ5ǀHٻ?tw똤Eyxp{#WK qG%5],(0ӈH HZ])ג=K1j&G(FbM@)%I` XRg ʔ KZG(vP,<`[ Kn^ SJRsAʠ5xՅF`0&RbV tx:EaUE/{fi2;.IAwW8/tTxAGOoN?G}l L(n`Zv?pB8K_gI+ܗ #i?ޙ.) p$utc ~DžfՈEo3l/)I-U?aԅ^jxArA ΧX}DmZ@QLےbTXGd.^|xKHR{|ΕW_h] IJ`[G9{).y) 0X YA1]qp?p_k+J*Y@HI>^?gt.06Rn ,` ?);p pSF9ZXLBJPWjgQ|&)7! HjQt<| ؅W5 x W HIzYoVMGP Hjn`+\(dNW)F+IrS[|/a`K|ͻ0Hj{R,Q=\ (F}\WR)AgSG`IsnAR=|8$}G(vC$)s FBJ?]_u XRvύ6z ŨG[36-T9HzpW̞ú Xg큽=7CufzI$)ki^qk-) 0H*N` QZkk]/tnnsI^Gu't=7$ Z;{8^jB% IItRQS7[ϭ3 $_OQJ`7!]W"W,)Iy W AJA;KWG`IY{8k$I$^%9.^(`N|LJ%@$I}ֽp=FB*xN=gI?Q{٥4B)mw $Igc~dZ@G9K X?7)aK%݅K$IZ-`IpC U6$I\0>!9k} Xa IIS0H$I H ?1R.Чj:4~Rw@p$IrA*u}WjWFPJ$I➓/6#! LӾ+ X36x8J |+L;v$Io4301R20M I$-E}@,pS^ޟR[/s¹'0H$IKyfŸfVOπFT*a$I>He~VY/3R/)>d$I>28`Cjw,n@FU*9ttf$I~<;=/4RD~@ X-ѕzἱI$: ԍR a@b X{+Qxuq$IЛzo /~3\8ڒ4BN7$IҀj V]n18H$IYFBj3̵̚ja pp $Is/3R Ӻ-Yj+L;.0ŔI$Av? #!5"aʄj}UKmɽH$IjCYs?h$IDl843.v}m7UiI=&=0Lg0$I4: embe` eQbm0u? $IT!Sƍ'-sv)s#C0:XB2a w I$zbww{."pPzO =Ɔ\[ o($Iaw]`E).Kvi:L*#gР7[$IyGPI=@R 4yR~̮´cg I$I/<tPͽ hDgo 94Z^k盇΄8I56^W$I^0̜N?4*H`237}g+hxoq)SJ@p|` $I%>-hO0eO>\ԣNߌZD6R=K ~n($I$y3D>o4b#px2$yڪtzW~a $I~?x'BwwpH$IZݑnC㧄Pc_9sO gwJ=l1:mKB>Ab<4Lp$Ib o1ZQ@85b̍ S'F,Fe,^I$IjEdù{l4 8Ys_s Z8.x m"+{~?q,Z D!I$ϻ'|XhB)=…']M>5 rgotԎ 獽PH$IjIPhh)n#cÔqA'ug5qwU&rF|1E%I$%]!'3AFD/;Ck_`9 v!ٴtPV;x`'*bQa w I$Ix5 FC3D_~A_#O݆DvV?<qw+I$I{=Z8".#RIYyjǪ=fDl9%M,a8$I$Ywi[7ݍFe$s1ՋBVA?`]#!oz4zjLJo8$I$%@3jAa4(o ;p,,dya=F9ً[LSPH$IJYЉ+3> 5"39aZ<ñh!{TpBGkj}Sp $IlvF.F$I z< '\K*qq.f<2Y!S"-\I$IYwčjF$ w9 \ߪB.1v!Ʊ?+r:^!I$BϹB H"B;L'G[ 4U#5>੐)|#o0aڱ$I>}k&1`U#V?YsV x>{t1[I~D&(I$I/{H0fw"q"y%4 IXyE~M3 8XψL}qE$I[> nD?~sf ]o΁ cT6"?'_Ἣ $I>~.f|'!N?⟩0G KkXZE]ޡ;/&?k OۘH$IRۀwXӨ<7@PnS04aӶp.:@\IWQJ6sS%I$e5ڑv`3:x';wq_vpgHyXZ 3gЂ7{{EuԹn±}$I$8t;b|591nءQ"P6O5i }iR̈́%Q̄p!I䮢]O{H$IRϻ9s֧ a=`- aB\X0"+5"C1Hb?߮3x3&gşggl_hZ^,`5?ߎvĸ%̀M!OZC2#0x LJ0 Gw$I$I}<{Eb+y;iI,`ܚF:5ܛA8-O-|8K7s|#Z8a&><a&/VtbtLʌI$I$I$I$I$I$IRjDD%tEXtdate:create2022-05-31T04:40:26+00:00!Î%tEXtdate:modify2022-05-31T04:40:26+00:00|{2IENDB`Mini Shell

HOME


Mini Shell 1.0
DIR:/var/softaculous/cube/
Upload File :
Current File : //var/softaculous/cube/index.php
<?php
/**
 * CubeCart v6
 * ========================================
 * CubeCart is a registered trade mark of CubeCart Limited
 * Copyright CubeCart Limited 2025. All rights reserved.
 * UK Private Limited Company No. 5323904
 * ========================================
 * Web:   https://www.cubecart.com
 * Email:  hello@cubecart.com
 * License:  GPL-3.0 https://www.gnu.org/licenses/quick-guide-gplv3.html
 */
require_once preg_replace('/setup/', '', realpath(dirname(__FILE__))) . 'ini.inc.php';
require_once CC_INCLUDES_DIR . 'functions.inc.php';

$error_log_path = ini_get('error_log');
if(!strstr($error_log_path, '/')) {
    ini_set('error_log', '../'.$error_log_path);
}

@set_time_limit('900');
define('CC_IN_SETUP', true);
define('CC_IN_ADMIN', false);

/*! Check cache folder is writable! */
@chmod(CC_CACHE_DIR, chmod_writable());
if (!is_writable(CC_CACHE_DIR)) {
    $cache_dir = str_replace(CC_ROOT_DIR, '', CC_CACHE_DIR);
    die('<p>Please make sure the following folders are writable in order to continue.</p><pre>' . $cache_dir . '</pre>');
}

$gitignore = CC_ROOT_DIR.'/images/source/.gitignore';
if (file_exists($gitignore)) {
    @unlink($gitignore);
    if (file_exists($gitignore)) {
        die('Please delete the images/source/.gitignore file before proceeding.');
    }
}

$global_file = CC_INCLUDES_DIR . 'global.inc.php';
$setup_path  = CC_ROOT_DIR . '/setup' . '/';

session_start();

if (isset($_GET['autoupdate']) && $_GET['autoupdate']) {
    $_SESSION['setup'] = array(); // remove any past upgrade/install data
    $_SESSION['setup']['method'] = 'upgrade';
    $_SESSION['setup']['autoupgrade'] = true;
    httpredir('index.php');
}
// Empty the cache before we start
$GLOBALS['cache'] = Cache::getInstance();
if (!isset($_SESSION['setup']) || (isset($_SESSION['setup']) && empty($_SESSION['setup']))) {
    $GLOBALS['cache']->clear();

    // Remove cached skins
    $skin_cached = glob(CC_CACHE_DIR . 'skin/*.*');
    if ($skin_cached) {
        foreach ($skin_cached as $cache_file) {
            unlink($cache_file);
        }
        unset($skin_cached);
    }

    // Remove all other cache
    $cached = glob(CC_CACHE_DIR . '*.*');
    if ($cached) {
        foreach ($cached as $cache_file) {
            unlink($cache_file);
        }
        unset($cached);
    }
}

$GLOBALS['debug'] = Debug::getInstance();

$proceed   = true;
$retry     = false;
$installed = false;
$restart   = true;

$domain        = parse_url(CC_STORE_URL);
$cookie_domain = strpos($domain['host'], '.') ? '.'.str_replace('www.', '', $domain['host']) : '';

$default_config_settings = array(
  'csrf' => '1',
  'update_main_stock' => '',
  'tax_number' => '',
  'recaptcha_public_key' => '',
  'recaptcha_secret_key' => '',
  'no_skip_processing_check' => '',
  'hide_out_of_stock' => '',
  'force_completed' => '',
  'dispatch_date_format' => 'M d Y',
  'disable_shipping_groups' => '',
  'disable_mobile_skin' => '1',
  'disable_checkout_terms' => '',
  'allow_no_shipping' => '',
  'cookie_dialogue' => '',
  'debug_ip_addresses' => '',
  'twitter' => 'https://x.com',
  'facebook' => 'https://facebook.com',
  'linkedin' => 'https://linkedin.com',
  'vimeo' => 'https://vimeo.com',
  'default_language' => '',
  'default_currency' => '',
  'email_address' => '',
  'store_title' => '',
  'store_name' => '',
  'email_name' => '',
  'admin_notify_status' => '2',
  'catalogue_mode' => '0',
  'debug' => '0',
  'admin_skin' => 'default',
  'skin_folder' => 'foundation',
  'skin_style' => 'default',
  'skin_change' => '0',
  'default_rss_feed' => 'https://forums.cubecart.com/forum/1-news-announcements.xml',
  'email_method' => 'mail',
  'seo_metadata' => '2',
  'store_meta_description' => '',
  'recaptcha' => '0',
  'time_format' => 'j M Y, H:i',
  'time_offset' => '0',
  'time_zone' => '',
  'download_expire' => '36000',
  'download_count' => '10',
  'email_smtp' => '0',
  'email_smtp_host' => '',
  'email_smtp_password' => '',
  'email_smtp_port' => '',
  'email_smtp_user' => '',
  'enable_ssl' => '0',
  'cache' => '1',
  'basket_allow_non_invoice_address' => '1',
  'basket_jump_to' => '0',
  'basket_order_expire' => '',
  'basket_out_of_stock_purchase' => '0',
  'basket_tax_by_delivery' => '0',
  'store_country' => '826',
  'store_zone' => '12',
  'catalogue_expand_tree' => '1',
  'catalogue_hide_prices' => '0',
  'catalogue_latest_products_count' => '9',
  'catalogue_latest_products' => '1',
  'catalogue_popular_products_count' => '10',
  'catalogue_popular_products_source' => '0',
  'catalogue_products_per_page' => '10',
  'catalogue_sale_items' => '10',
  'catalogue_sale_mode' => '1',
  'catalogue_sale_percentage' => '',
  'catalogue_show_empty' => '1',
  'product_weight_unit' => 'Kg',
  'product_size_unit' => 'cm',
  'proxy' => '0',
  'proxy_host' => '',
  'proxy_port' => '',
  'product_precis' => '120',
  'stock_warn_type' => '0',
  'stock_warn_level' => '5',
  'enable_reviews' => '1',
  'store_address' => '',
  'store_copyright' => '<p>&copy;'.date('Y').' '.$domain['host'].' -  All rights reserved.</p>',
  'store_postcode' => '',
  'standard_url' => preg_replace(array('#^https#i','#/setup$#'), array('http',''), CC_STORE_URL),
  'cookie_domain' => $cookie_domain,
  'show_basket_weight' => '1',
  'stock_change_time' => '1',
  'stock_level' => '0',
  'offline' => '0',
  'offline_content' => '<html><head><title>Store Offline</title></head><body><p>We are offline right now. Please visit again soon.</p></body></html>',
  'product_sort_column' => 'name',
  'product_sort_direction' => 'ASC',
  'bftime' => '600',
  'bfattempts' => '5',
  'fuzzy_time_format' => 'H:i',
  'feed_access_key' => randomString(12),
  'seo_add_cats'  => '2',
  'seo_cat_add_cats' => '1',
  'r_admin_activity' => '30',
  'r_admin_error' => '30',
  'r_email' => '30',
  'r_request' => '14',
  'r_staff' => '30',
  'r_system_error' => '7',
  'seo_ext' => ''
);

ksort($default_config_settings);

$GLOBALS['debug']->debugTail($_SESSION, '$_SESSION');

$GLOBALS['smarty']               = new Smarty();
$GLOBALS['smarty']->compile_dir  = CC_SKIN_CACHE_DIR;
$GLOBALS['smarty']->config_dir   = CC_SKIN_CACHE_DIR;
$GLOBALS['smarty']->cache_dir    = CC_SKIN_CACHE_DIR;
$GLOBALS['smarty']->template_dir = dirname(__FILE__) . '/';


$language  = Language::getInstance();
$languages = $language->listLanguages();

if (isset($_POST['language'])) {
    $_SESSION['language'] = $_POST['language'];
    httpredir('index.php', 'language');
} else {
    if (!isset($_SESSION['language'])) {
        $_SESSION['language'] = 'en-GB';
    }
}

$language->change($_SESSION['language']);

if (is_array($languages)) {
    foreach ($languages as $code => $lang) {
        $lang['selected'] = ($code == $_SESSION['language']) ? ' selected="selected"' : '';
        $GLOBALS['smarty']->append('LANG_LIST', $lang);
    }
}
$strings = $language->getStrings();
$GLOBALS['smarty']->assign('LANG', $strings);
$GLOBALS['smarty']->assign('VERSION', CC_VERSION);
$GLOBALS['smarty']->assign('ROOT', CC_ROOT_DIR);

if (isset($_POST['proceed'])) {
    $redir = true;
    if (!isset($_SESSION['setup'])) {
        $_SESSION['setup'] = array();
    } else {
        if (!isset($_POST['method']) && !isset($_SESSION['setup']['method'])) {
            $errors[] = $strings['setup']['error_action_required'];
            $redir    = false;
        }
        if (isset($_SESSION['setup']['method']) && !isset($_POST['licence']) && !isset($_SESSION['setup']['licence'])) {
            $errors[] = $strings['setup']['error_accept_licence'];
            $redir    = false;
        }
        if (isset($_POST['method'])) {
            $_SESSION['setup']['method'] = $_POST['method'];
        } elseif (isset($_POST['licence'])) {
            $_SESSION['setup']['licence'] = true;
        } elseif (isset($_POST['permissions'])) {
            $_SESSION['setup']['permissions'] = true;
        } elseif (isset($_POST['progress'])) {
            $redir = false;
        }
    }
    if (!isset($errors) && $redir) {
        httpredir('index.php');
    }
} elseif (isset($_POST['cancel']) || isset($_GET['cancel'])) {
    $_SESSION['setup'] = array();
    httpredir('index.php', 'cancelled');
}

if (!isset($_SESSION['setup'])) {
    $restart = false;
    $step    = 1;
    // Compatibility Test
    $checks  = array(
    'PHP' => array(
      'title' => 'PHP 7.4+ (8.2 Recommended)',
      'status' => version_compare(PHP_VERSION, '7.4', '>='),
      'pass' => PHP_VERSION,
      'fail' => PHP_VERSION
    ),
    'MySQL' => array(
      'title' => 'MySQL 5.6+',
      'status' => extension_loaded('mysqli'),
      'pass' => (function_exists('mysqli_get_client_info')) ? mysqli_get_client_info() : "Bad database extension",
      'fail' => "PHP mysqli extension not installed"
    ),
    'GD' => array(
      'title' => 'GD Image Library',
      'status' => detectGD(),
      'pass' => $strings['common']['installed'],
      'fail' => $strings['common']['not_installed']
    ),
    'XML' => array(
      'title' => 'Simple XML Parser',
      'status' => extension_loaded('simplexml'),
      'pass' => $strings['common']['installed'],
      'fail' => $strings['common']['not_installed']
    ),
    'cURL' => array(
      'title' => 'cURL',
      'status' => extension_loaded('curl'),
      'pass' => $strings['common']['installed'],
      'fail' => $strings['common']['not_installed']
    ),
    'Zip' => array(
      'title' => 'Zip (ZipArchive)',
      'status' => class_exists('ZipArchive'),
      'pass' => $strings['common']['installed'],
      'fail' => $strings['common']['not_installed']
    ),
    'mbstring' => array(
      'title' => 'mbstring (Multibyte String)',
      'status' => extension_loaded('mbstring'),
      'pass' => $strings['common']['installed'],
      'fail' => $strings['common']['not_installed']
    )
  );
  $status = true;
  foreach($checks as $check_type => $data) {
    foreach($data as $key => $value) {
        if($key=='status') {
            if(!$value) {
                $status = false;
                break;
            }
        }
    }
  }
  if(!$status) {
    $errors[] = 'Hosting not compatible. Please rectify or setup a hosted CubeCart store instantly at <a href="https://hosted.cubecart.com" target="_blank">https://hosted.cubecart.com</a>.';
    $retry = true;
    $proceed = false;
  }
  
  $GLOBALS['smarty']->assign('CHECKS', $checks);
  $GLOBALS['smarty']->assign('MODE_COMPAT', true);
} else {
    if (!isset($_SESSION['setup']['method'])) {
        $step = 2;
        // Select Install/Upgrade
        $GLOBALS['smarty']->assign('LANG_INSTALL_CUBECART_TITLE', sprintf($strings['setup']['install_cubecart_title'], CC_VERSION));
        // Check if upgrading is possible
        if (file_exists($global_file)) {
            include $global_file;
            $installed = (isset($glob['installed'])) ? (bool) $glob['installed'] : false;
            unset($glob);
        }
        if ($installed) {
            $GLOBALS['smarty']->assign('LANG_UPGRADE_CUBECART_TITLE', sprintf($strings['setup']['upgrade_cubecart_title'], CC_VERSION));
            $GLOBALS['smarty']->assign('SHOW_UPGRADE', true);
        }
        $GLOBALS['smarty']->assign('MODE_METHOD', true);
    } elseif (!isset($_SESSION['setup']['licence'])) {
        if (file_exists(CC_ROOT_DIR . '/docs/license.txt')) {
            $GLOBALS['smarty']->assign('SOFTWARE_LICENCE', file_get_contents(CC_ROOT_DIR . '/docs/license.txt'));
        }
        $GLOBALS['smarty']->assign('MODE_LICENCE', true);
    } elseif (!isset($_SESSION['setup']['complete'])) {
        if (in_array($_SESSION['setup']['method'], array(
            'install', 'upgrade'))) {
            require_once 'setup.' . $_SESSION['setup']['method'] . '.php';
        } else {
            require_once 'setup.install.php';
        }
    } else {
        // Install/Upgrade Complete
        // Upgrade Main Configuration
        include $global_file;
        $GLOBALS['db'] = Database::getInstance($glob);

        // Move to scripts folder?
        $config_string = $db->select('CubeCart_config', array(
      'array'
    ), array(
      'name' => 'config'
    ));
        $main_config   = json_decode(base64_decode($config_string[0]['array']), true);

        if ($_SESSION['setup']['config_update'] && is_array($main_config)) {
            // Remove unused keys
            $dead_keys = array(
        'cat_newest_first',
        'captcha_private',
        'captcha_public',
        'copyright',
        'currecyAuto',
        'currencyAuto',
        'dateFormat',
        'ftp_server',
        'ftp_username',
        'ftp_password',
        'ftp_root_dir',
        'gdGifSupport',
        'gdmaxImgSize',
        'gdquality',
        'gdthumbSize',
        'gdversion',
        'maxImageUploadSize',
        'imgGalleryType',
        'richTextEditor',
        'rteHeight',
        'rteHeightUnit',
        'sefprodnamefirst',
        'show_category_count',
        'sqlSessionExpiry',
        'taxCountry',
        'taxCounty',
        'uploadSize',
        'noRelatedProds'
      );
            // Rename existing keys
            $remapped  = array(
        'dirSymbol' => 'defualt_directory_symbol',
        'installTime' => 'install_time',
        'defaultCurrency' => 'default_currency',
        'defaultLang' => 'default_language',
        'dirSymbol' => 'default_directory_symbol',
        'latestNewsRRS' => 'default_rss_feed',
        'dnLoadExpire' => 'download_expire',
        'dnLoadTimes' => 'download_count',
        'mailMethod' => 'email_method',
        'masterName' => 'email_name',
        'masterEmail' => 'email_address',
        'disable_alert_email' => 'email_disable_alert',
        'smtpAuth' => 'email_smtp',
        'smtpHost' => 'email_smtp_host',
        'smtpPassword' => 'email_smtp_password',
        'smtpPort' => 'email_smtp_port',
        'smtpUsername' => 'email_smtp_user',
        'hide_prices' => 'catalogue_hide_prices',
        'cat_tree' => 'catalogue_expand_tree',
        'productPages' => 'catalogue_products_per_page',
        'showLatestProds' => 'catalogue_latest_products',
        'noLatestProds' => 'catalogue_latest_products_count',
        'show_empty_cat' => 'catalogue_show_empty',
        'noPopularBoxItems' => 'catalogue_popular_products_count',
        'pop_products_source' => 'catalogue_popular_products_source',
        'saleMode' => 'catalogue_sale_mode',
        'noSaleBoxItems' => 'catalogue_sale_items',
        'salePercentOff' => 'catalogue_sale_percentage',
        'productPrecis' => 'product_precis',
        'weightUnit' => 'product_weight_unit',
        'stockLevel' => 'stock_level',
        'add_to_basket_act' => 'basket_jump_to',
        'shipAddressLock' => 'basket_allow_non_invoice_address',
        'outofstockPurchase' => 'basket_out_of_stock_purchase',
        'priceTaxDelInv' => 'basket_tax_by_delivery',
        'orderExpire' => 'basket_order_expire',
        'offLine' => 'offline',
        'offLineContent' => 'offline_content',
        'proxyHost' => 'proxy_host',
        'proxyPort' => 'proxy_port',
        'sef' => 'seo',
        'sefserverconfig' => 'seo_method',
        'seftags' => 'seo_metadata',
        'storeAddress' => 'store_address',
        'storeName' => 'store_name',
        'postcode' => 'store_postcode',
        'siteCountry' => 'store_country',
        'siteCounty' => 'store_zone',
        'siteTitle' => 'store_title',
        'metaDescription' => 'store_meta_description',
        'metaKeyWords' => 'store_meta_keywords',
        'skinDir' => 'skin_folder',
        'skinStyle' => 'skin_style',
        'changeskin' => 'skin_change',
        'timeFormat' => 'time_format',
        'timeOffset' => 'time_offset',
        'timezone' => 'time_zone',
        'floodControl' => 'recaptcha'
      );

            ## Remap store country from id to numcode
            if (isset($main_config['siteCountry']) && $main_config['siteCountry'] > 0) {
                $country                    = $db->select('CubeCart_geo_country', array(
          'numcode'
        ), array(
          'id' => $main_config['siteCountry']
        ));
                $main_config['siteCountry'] = $country[0]['numcode'];
            }

            ## Parse
            $new_config = array();
            foreach ($main_config as $key => $value) {
                if (in_array($key, $dead_keys)) {
                    unset($main_config[$key]);
                    continue;
                } else {
                    if (isset($remapped[$key])) {
                        $new_config[$remapped[$key]] = $value;
                        unset($main_config[$key]);
                    }
                }
            }

            if ($new_config['recaptcha'] == 'recaptcha') {
                $new_config['recaptcha'] = true;
            }
            ## Set default RSS feed to correct value if not set, empty or our of date
            if (empty($new_config['default_rss_feed']) || !isset($new_config['default_rss_feed']) || $new_config['default_rss_feed'] == 'http://forums.cubecart.com/index.php?act=rssout&id=1') {
                $new_config['default_rss_feed'] = 'http://forums.cubecart.com/rss/forums/1-cubecart-news-announcements/';
            }
            if (file_exists('language/' . $main_config['default_language'] . '.xml')) {
                $default_language = $main_config['default_language'];
            } elseif (isset($_SESSION['setup']['long_lang_identifier']) && file_exists('language/' . $_SESSION['setup']['long_lang_identifier'] . '.xml')) {
                $default_language = $_SESSION['setup']['long_lang_identifier'];
            } else {
                $default_language = isset($_SESSION['setup']['config']['default_language']) ? $_SESSION['setup']['config']['default_language'] : 'en-GB';
            }

            if (!file_exists('language/' . $default_language . '.xml')) {
                $default_language = 'en-GB';
            }

            ## Redefine the default skin
            $reset      = array(
        'skin_folder' => 'foundation',
        'skin_style' => 'default',
        'default_language' => $default_language
      );
            $new_config = array_merge($main_config, $new_config, $reset);
            ## Set some defaults
            $defaults   = array(
        'admin_skin' => 'default',
        'enable_reviews' => true,
        'show_basket_weight' => true
      );
            $new_config = array_merge($defaults, $new_config);
            ksort($new_config);

            // Write new config to database
            $db->update('CubeCart_config', array(
        'array' => base64_encode(json_encode($new_config))
      ), array(
        'name' => 'config'
      ));
            $_SESSION['setup']['config_update'] = true;
        }

        $proceed = false;
        $restart = true;
        $step    = 6;
        switch ($_SESSION['setup']['method']) {
      case 'install':
        $GLOBALS['smarty']->assign('MODE_COMPLETE_INSTALL', true);
        break;
      case 'upgrade':
        $GLOBALS['smarty']->assign('MODE_COMPLETE_UPGRADE', true);
        break;
    }
        $GLOBALS['smarty']->assign('MODE_COMPLETE', true);
        // delete setup folder on admin login
        $date = new Datetime(date('r',time()+7200));
        $attributes = '';
        $attributes .= ';Expires='.$date->format(DateTime::COOKIE);
        if(CC_SSL) {
            $attributes .= ';SameSite=None';
            $attributes .= ';Secure';
        }
        $attributes .= ';HttpOnly';
        header('Set-Cookie: delete_setup=1'.$attributes);

        /* //Attempt admin file and folder rename
        if (!isset($_SESSION['setup']['admin_rename']) && (file_exists('../admin') || file_exists('../admin.php'))) {
            $adminFolder = 'admin_'.randomString(6);
            $adminFile   = 'admin_'.randomString(6).'.php';
            $update_config = false;

            rename('../'.$glob['adminFolder'], '../'.$adminFolder);
            rename('../'.$glob['adminFile'], '../'.$adminFile);

            if (file_exists('../'.$adminFolder)) {
                $update_config = true;
            } else {
                $adminFolder = $glob['adminFolder'];
            }

            if (file_exists('../'.$adminFile)) {
                $update_config = true;
            } else {
                $adminFile   = $glob['adminFile'];
            }

            if ($update_config) {
                $_SESSION['setup']['admin_rename'] = true;
                $config = array();
                if(is_array($glob) && !empty($glob)) {
                    foreach ($glob as $key => $value) {
                        if ($key=='adminFile') {
                            $value = $adminFile;
                        } elseif ($key=='adminFolder') {
                            $value = $adminFolder;
                        }
                        $value = is_array($value) ? var_export($value, true) : "'".addslashes($value)."'";
                        $config[] = sprintf("\$glob['%s'] = %s;", $key, $value);
                    }
                    // Config to string
                    $config = sprintf("<?php\n%s\n?>", implode("\n", $config));
                }
                ## Backup existing config file, if it exists
                if (file_exists($global_file)) {
                    rename($global_file, $global_file.'-'.date('Ymdgis').'.php');
                }
                if (!empty($config)) {
                    file_put_contents($global_file, $config);
                }
            }
            $adminURL = str_replace('/setup', '', CC_STORE_URL).'/'.$adminFile;
            if ($admins = $db->select('CubeCart_admin_users', false, array('status'=> 1))) {
                $headers = 'From: nobody@'.parse_url(CC_STORE_URL, PHP_URL_HOST);
                foreach ($admins as $admin) {
                    mail($admin['email'], "Store Admin URL", "Hi ".html_entity_decode($admin['name'], ENT_QUOTES).",\r\n\r\nYour store has been setup to CubeCart version ".CC_VERSION.".\r\n\r\nFor security reasons the administrator URL has been obscured to divert any possible unwanted attention. Please set your bookmark to ".$adminURL."\r\n\r\n\r\nThis email was sent automatically by the CubeCart setup tool.", $headers);
                }
            }*/
	$adminFile = '[[soft_adminFile]]';
            $GLOBALS['smarty']->assign('ADMIN_URL', $adminURL);
            $GLOBALS['smarty']->assign('STORE_URL', str_replace('/setup', '', CC_STORE_URL).'/');
            $GLOBALS['smarty']->assign('SHOW_LINKS', true);
        //}

        // secure global files
        $gfs = glob(CC_INCLUDES_DIR.'global.*.php');
        if (is_array($gfs)) {
            foreach ($gfs as $gf) {
                chmod($gf, 0444);
            }
        }

        /* Truncate CubeCart_system_error_log table. There are a number of failed SQL queries on upgrade depending
         * on to/from version. We need a clean slate to detect operational errors.
         */
        $db->truncate('CubeCart_system_error_log');
        include $global_file;
        if ($_SESSION['setup']['autoupgrade'] && !$update_config) {
            httpredir('../'.$glob['adminFile'].'?_g=maintenance&node=index', 'upgrade');
        }
    }
}

## Display error messages
if (isset($errors) && is_array($errors)) {
    $vars['errors'] = $errors;
    $GLOBALS['smarty']->assign('GUI_MESSAGE', $vars);
}

if (isset($step)) {
    $progress = (100 / 5) * ((int) $step - 1);
    $progress = ($progress >= 100) ? 100 : $progress;
    $GLOBALS['smarty']->assign('PROGRESS', array(
    'percent' => (int) $progress,
    'message' => sprintf($strings['setup']['percent_complete'], (int) $progress)
  ));
}

## Build Logos
function build_logos($image_name = '')
{
    global $db;

    $logo_path = empty($image_name) ? 'skins/foundation/images/default/logo/default.png' : 'images/logos/'.$image_name;

    $logo_config = array(
    'foundationdefault' => $logo_path,
    'emails' => $logo_path,
    'invoices' => $logo_path
  );

    $db->insert('CubeCart_config', array(
    'name' => 'logos',
    'array' => base64_encode(json_encode($logo_config))
  ));
}

## Controller elements
if ($proceed) {
    $vars['controller']['continue'] = true;
}
if ($retry) {
    $vars['controller']['retry'] = true;
}
if ($restart) {
    $vars['controller']['restart'] = true;
}
if (isset($vars['controller'])) {
    $GLOBALS['smarty']->assign('CONTROLLER', $vars['controller']);
}

$GLOBALS['smarty']->assign('COPYRIGHT_YEAR', date('Y'));
$GLOBALS['smarty']->display('skin.install.php');