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:/home/republicofchicken.in/www/wp-content/plugins/sms-alert/
Upload File :
Current File : //home/republicofchicken.in/www/wp-content/plugins/sms-alert/SMSAlert-wc-order-sms.php
<?php
/**
 * Plugin Name: SMSAlert - WooCommerce
 * Plugin URI: https://wordpress.org/plugins/sms-alert/
 * Description: This is a WooCommerce add-on. By Using this plugin admin and buyer can get notification after placing order via sms using SMS Alert.
 * Version: 3.5.4
 * Author: Cozy Vision Technologies Pvt. Ltd.
 * Author URI: https://www.smsalert.co.in
 * WC requires at least: 2.0.0
 * WC tested up to: 6.4.1
 * Text Domain: sms-alert
 * License: GPLv2
 */

/**
 *
/**
 *
 *
 * Released under the GPL license
 * http://www.opensource.org/licenses/gpl-license.php
 *
 * This is an add-on for WordPress
 * http://wordpress.org/
 *
 * **********************************************************************
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 * **********************************************************************
 */

// don't call the file directly.
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}
if ( ! defined( 'SMSALERT_TEXT_DOMAIN' ) ) {
	define( 'SMSALERT_TEXT_DOMAIN', 'sms-alert' );
}
if ( ! defined( 'SMSALERT_PLUGIN_NAME' ) ) {
	define( 'SMSALERT_PLUGIN_NAME', 'SMS Alert Order Notifications – WooCommerce' );
}
if ( ! defined( 'SMSALERT_ABANDONED' ) ) {
	define( 'SMSALERT_ABANDONED', 'smsalert_abandoned' );
}
if ( ! defined( 'SMSALERT_PLUGIN_NAME_SLUG' ) ) {
	define( 'SMSALERT_PLUGIN_NAME_SLUG', 'sms-alert' );
}
if ( ! defined( 'SA_CART_TABLE_NAME' ) ) {
	define( 'SA_CART_TABLE_NAME', 'sa_captured_wc_fields' );
}
if ( ! defined( 'CART_CRON_INTERVAL' ) ) {
	define( 'CART_CRON_INTERVAL', 10 );// run ab cart cron every 10 min.
}
if ( ! defined( 'BOOKING_REMINDER_CRON_INTERVAL' ) ) {
	define( 'BOOKING_REMINDER_CRON_INTERVAL', 10 );// run booking reminder cron every 10 min.
}
// In minutes. Defines the interval at which msg function is fired.
if ( ! defined( 'CART_STILL_SHOPPING' ) ) {
	define( 'CART_STILL_SHOPPING', 10 ); // In minutes. Defines the time period after which an msg notice will be sent and the cart is presumed abandoned.
}
if ( ! defined( 'CART_NEW_STATUS_NOTICE' ) ) {
	define( 'CART_NEW_STATUS_NOTICE', 240 ); // Defining time in minutes how long New status is shown in the table.
}

if ( ! defined( 'CART_ENCRYPTION_KEY' ) ) {
	define( 'CART_ENCRYPTION_KEY', 'SgVkYp3s6v9y$B&M)H+MbQeThWmZq4t9' );
}

/**
 * Sanitizes Array of vaues.
 *
 * @param array $arr Values to be sanitized.
 */
function smsalert_sanitize_array( $arr ) {
	global $wp_version;
	$older_version = ( $wp_version < '4.7' ) ? true : false;
	if ( ! is_array( $arr ) ) {
		return ( ( $older_version ) ? stripcslashes( sanitize_text_field( $arr ) ) : stripcslashes( sanitize_textarea_field( $arr ) ) );
	}

	$result = array();
	foreach ( $arr as $key => $val ) {
		$result[ $key ] = is_array( $val ) ? smsalert_sanitize_array( $val ) : ( ( $older_version ) ? stripcslashes( sanitize_text_field( $val ) ) : stripcslashes( sanitize_textarea_field( $val ) ) );
	}

	return $result;
}

/**
 * Creates a cookie.
 *
 * @param string $cookie_key Cookie Key name.
 * @param string $cookie_value Cookie Value.
 */
function create_smsalert_cookie( $cookie_key, $cookie_value ) {
	ob_start();
	setcookie( $cookie_key, $cookie_value, time() + ( 15 * 60 ) );
	ob_get_clean();
}

/**
 * Clears a cookie.
 *
 * @param string $cookie_key Cookie Key name.
 */
function clear_smsalert_cookie( $cookie_key ) {
	if ( isset( $_COOKIE[ $cookie_key ] ) ) {
		unset( $_COOKIE[ $cookie_key ] );
		setcookie( $cookie_key, '', time() - ( 15 * 60 ) );
	}
}

/**
 * Gets a cookie.
 *
 * @param string $cookie_key Cookie Key name.
 */
function get_smsalert_cookie( $cookie_key ) {
	if ( ! isset( $_COOKIE[ $cookie_key ] ) ) {
		return false;
	} else {
		return sanitize_text_field( wp_unslash( $_COOKIE[ $cookie_key ] ) );
	}
}

/**
 * Gets key value from database.
 *
 * @param string $option Option.
 * @param string $section Section.
 * @param string $default Default value.
 */
function smsalert_get_option( $option, $section, $default = '' ) {
	$options = get_option( $section );

	if ( isset( $options[ $option ] ) ) {
			return $options[ $option ];
	}
	return $default;
}

/**
 * Gets a template.
 *
 * @param string  $filepath File path.
 * @param array   $datas Values to be used in template.
 * @param boolean $ret Return as string.
 */
function get_smsalert_template( $filepath, $datas, $ret = false ) {
	if ( $ret ) {
		ob_start();}
		extract( $datas );
		include $filepath;
	if ( $ret ) {
		return ob_get_clean();}
}

/**
 * Main class for plugin.
 */
class smsalert_WC_Order_SMS {

	/**
	 * Constructor for the smsalert_WC_Order_SMS class
	 *
	 * Sets up all the appropriate hooks and actions
	 * within our plugin.
	 *
	 * @uses is_admin()
	 * @uses add_action()
	 */
	public function __construct() {
		// Instantiate necessary class.
		
		$this->instantiate();
		
		add_action( 'init', array( $this, 'register_hook_send_sms' ) );

		add_action( 'woocommerce_checkout_update_order_meta', array( $this, 'buyer_notification_update_order_meta' ) );
		add_action( 'woocommerce_order_status_changed', array( 'WooCommerceCheckOutForm', 'trigger_after_order_place' ), 10, 3 );
		add_action( 'woocommerce_new_order', array( $this, 'sa_wc_order_place' ), 10, 1 );
		add_filter( 'sa_wc_order_sms_customer_before_send', array( 'WooCommerceCheckOutForm', 'pharse_sms_body' ), 10, 2 );
		add_filter( 'sa_wc_order_sms_admin_before_send', array( 'WooCommerceCheckOutForm', 'pharse_sms_body' ), 10, 2 );
		add_action( 'woocommerce_new_customer_note', array( 'WooCommerceCheckOutForm', 'trigger_new_customer_note' ), 10 );
        add_filter( 'default_checkout_billing_phone', array( $this, 'modify_billing_phone_field' ), 1, 2 ); 
		add_action( 'user_register', array( $this, 'wc_user_created' ), 1, 1 );
		add_action( 'smsalert_after_update_new_user_phone', array( $this, 'smsalert_after_user_register' ), 10, 2 );
		
		if ( is_plugin_active( 'gravityforms-master/gravityforms.php' ) || is_plugin_active( 'gravityforms/gravityforms.php' ) ) {
			require_once 'handler/forms/gravity-form.php';
		}

		require_once 'helper/formlist.php';
		require_once 'views/common-elements.php';
		require_once 'handler/forms/FormInterface.php';
		require_once 'handler/smsalert_form_handler.php';
		require_once 'helper/shortcode.php';

		if ( is_admin() ) {
			add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
			add_filter( 'plugin_row_meta', array( $this, 'plugin_row_meta_link' ), 10, 4 );
			add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), array( $this, 'add_action_links' ) );
		}

		/*code to notify for daily balance begins */
		add_action( 'smsalert_balance_notify', array( $this, 'background_task' ) );
		self::sa_sync_grp_action();
		add_filter( 'sa_before_send_sms', array( $this, 'replace_common_token_name' ), 100, 1 );
		//commented later we use for redirect after install , plugin.
		add_action('admin_init', array($this, 'smsalert_plugin_redirect'));
		add_action( 'sa_addTabs', array( $this, 'addTabs' ), 10 );
		add_filter( 'sAlertDefaultSettings', array( $this, 'addDefaultSetting' ), 1 );
		//add_action( 'activated_plugin', array($this, 'cyb_activation_redirect') ); //testing part
	}
	
	//testing part
	//commented later we use for redirect after install the plugin.
	// public function cyb_activation_redirect( $plugin ) {
		// if( $plugin == plugin_basename( __FILE__ ) ) {
			// exit( wp_redirect( admin_url( 'admin.php?page=sms-alert' ) ) );
		// }
	// }
	
	/**
	 * Onpage modify billing phone at checkout page when country code is enabled
	 *
	 * @param string $value Value of the field.
	 * @param string $input Name of the field.
	 */
	public function modify_billing_phone_field( $value, $input ) {
		if ( 'billing_phone' === $input && ! empty( $value ) ) {
			return SmsAlertUtility::formatNumberForCountryCode( $value );
		}
	}
	
	/**
	 * This function is executed after a user is created.
	 *
	 * @param int   $user_id User id of the user.
	 */
	public function wc_user_created( $user_id ) {
		$billing_phone = ( ! empty( $_POST['billing_phone'] ) ) ? sanitize_text_field( wp_unslash( $_POST['billing_phone'] ) ) : null;
		$billing_phone = apply_filters( 'sa_get_user_phone_no', $billing_phone, $user_id );
		$billing_phone = SmsAlertcURLOTP::checkPhoneNos( $billing_phone );
		update_user_meta( $user_id, 'billing_phone', $billing_phone );
		do_action( 'smsalert_after_update_new_user_phone', $user_id, $billing_phone );
	}
	
		/**
	 * This function is executed after a user has been registered.
	 *
	 * @param int    $user_id Userid of the user.
	 * @param string $billing_phone Phone number of the user.
	 */
	public function smsalert_after_user_register( $user_id, $billing_phone ) {
		$user                = get_userdata( $user_id );
		$role                = ( ! empty( $user->roles[0] ) ) ? $user->roles[0] : '';
		$role_display_name   = ( ! empty( $role ) ) ? self::get_user_roles( $role ) : '';
		$smsalert_reg_notify = smsalert_get_option( 'wc_user_roles_' . $role, 'smsalert_signup_general', 'off' );
		$sms_body_new_user   = smsalert_get_option( 'signup_sms_body_' . $role, 'smsalert_signup_message', SmsAlertMessages::showMessage( 'DEFAULT_NEW_USER_REGISTER' ) );

		$smsalert_reg_admin_notify = smsalert_get_option( 'admin_registration_msg', 'smsalert_general', 'off' );
		$sms_admin_body_new_user   = smsalert_get_option( 'sms_body_registration_admin_msg', 'smsalert_message', SmsAlertMessages::showMessage( 'DEFAULT_ADMIN_NEW_USER_REGISTER' ) );
		$admin_phone_number        = smsalert_get_option( 'sms_admin_phone', 'smsalert_message', '' );

		$store_name = trim( get_bloginfo() );

		if ( 'on' === $smsalert_reg_notify && ! empty( $billing_phone ) ) {
			$search = array(
				'[username]',
				'[email]',
				'[billing_phone]',
			);

			$replace           = array(
				$user->user_login,
				$user->user_email,
				$billing_phone,
			);
			$sms_body_new_user = str_replace( $search, $replace, $sms_body_new_user );
			// do_action( 'sa_send_sms', $billing_phone, $sms_body_new_user ); //commented on 25-08-2021
			$obj             = array();
			$obj['number']   = $billing_phone;
			$obj['sms_body'] = $sms_body_new_user;
			SmsAlertcURLOTP::sendsms( $obj );
		}

		if ( 'on' === $smsalert_reg_admin_notify && ! empty( $admin_phone_number ) ) {
			$search = array(
				'[username]',
				'[store_name]',
				'[email]',
				'[billing_phone]',
				'[role]',
			);

			$replace = array(
				$user->user_login,
				$store_name,
				$user->user_email,
				$billing_phone,
				$role_display_name,
			);

			$sms_admin_body_new_user = str_replace( $search, $replace, $sms_admin_body_new_user );
			$nos                     = explode( ',', $admin_phone_number );
			$admin_phone_number      = array_diff( $nos, array( 'postauthor', 'post_author' ) );
			$admin_phone_number      = implode( ',', $admin_phone_number );
			// do_action( 'sa_send_sms', $admin_phone_number, $sms_admin_body_new_user ); //commented on 25-08-2021.
			$obj             = array();
			$obj['number']   = $admin_phone_number;
			$obj['sms_body'] = $sms_admin_body_new_user;
			SmsAlertcURLOTP::sendsms( $obj );
		}
	}
	
	/**
	 * This function adds tabs.
	 *
	 * @param array $tabs Default tabs.
	 */
	public static function addTabs( $tabs = array() ) {
		$signup_param = array(
			'checkTemplateFor' => 'signup_temp',
			'templates'        => self::getSignupTemplates(),
		);

		$new_user_reg_param = array(
			'checkTemplateFor' => 'new_user_reg_temp',
			'templates'        => self::getNewUserRegisterTemplates(),
		);

		$tabs['user_registration']['nav']  = 'User Registration';
		$tabs['user_registration']['icon'] = 'dashicons-admin-users';

		$tabs['user_registration']['inner_nav']['wc_register']['title']        = __( 'Sign Up Notifications', 'sms-alert' );
		$tabs['user_registration']['inner_nav']['wc_register']['tab_section']  = 'signup_templates';
		$tabs['user_registration']['inner_nav']['wc_register']['first_active'] = true;

		$tabs['user_registration']['inner_nav']['wc_register']['tabContent'] = $signup_param;
		$tabs['user_registration']['inner_nav']['wc_register']['filePath']   = 'views/message-template.php';

		$tabs['user_registration']['inner_nav']['wc_register']['icon']   = 'dashicons-admin-users';
		$tabs['user_registration']['inner_nav']['wc_register']['params'] = $signup_param;

		$tabs['user_registration']['inner_nav']['new_user_reg']['title']       = 'Admin Notifications';
		$tabs['user_registration']['inner_nav']['new_user_reg']['tab_section'] = 'newuserregtemplates';
		$tabs['user_registration']['inner_nav']['new_user_reg']['tabContent']  = $new_user_reg_param;
		$tabs['user_registration']['inner_nav']['new_user_reg']['filePath']    = 'views/message-template.php';
		$tabs['user_registration']['inner_nav']['new_user_reg']['params']      = $new_user_reg_param;

		return $tabs;
	}
	
	/**
	 * Gets signup template.
	 */
	public static function getSignupTemplates() {
		$wc_user_roles = self::get_user_roles();

		$variables = array(
			'[username]'      => 'Username',
			'[store_name]'    => 'Store Name',
			'[email]'         => 'Email',
			'[billing_phone]' => 'Billing Phone',
			'[shop_url]'      => 'Shop Url',
		);

		$templates = array();
		foreach ( $wc_user_roles as $role_key  => $role ) {
			$current_val = smsalert_get_option( 'wc_user_roles_' . $role_key, 'smsalert_signup_general', 'on' );

			$checkbox_name_id = 'smsalert_signup_general[wc_user_roles_' . $role_key . ']';
			$textarea_name_id = 'smsalert_signup_message[signup_sms_body_' . $role_key . ']';
			$text_body        = smsalert_get_option( 'signup_sms_body_' . $role_key, 'smsalert_signup_message', SmsAlertMessages::showMessage( 'DEFAULT_NEW_USER_REGISTER' ) );

			$templates[ $role_key ]['title']          = 'When ' . ucwords( $role['name'] ) . ' is registered';
			$templates[ $role_key ]['enabled']        = $current_val;
			$templates[ $role_key ]['status']         = $role_key;
			$templates[ $role_key ]['text-body']      = $text_body;
			$templates[ $role_key ]['checkboxNameId'] = $checkbox_name_id;
			$templates[ $role_key ]['textareaNameId'] = $textarea_name_id;
			$templates[ $role_key ]['token']          = $variables;
		}
		return $templates;
	}

	/**
	 * Gets new user registration template.
	 */
	public static function getNewUserRegisterTemplates() {
		$smsalert_notification_reg_admin_msg = smsalert_get_option( 'admin_registration_msg', 'smsalert_general', 'on' );
		$sms_body_registration_admin_msg     = smsalert_get_option( 'sms_body_registration_admin_msg', 'smsalert_message', SmsAlertMessages::showMessage( 'DEFAULT_ADMIN_NEW_USER_REGISTER' ) );

		$templates = array();

		$new_user_variables = array(
			'[username]'      => 'Username',
			'[store_name]'    => 'Store Name',
			'[email]'         => 'Email',
			'[billing_phone]' => 'Billing Phone',
			'[role]'          => 'Role',
			'[shop_url]'      => 'Shop Url',
		);

		$templates['new-user']['title']          = 'When a new user is registered';
		$templates['new-user']['enabled']        = $smsalert_notification_reg_admin_msg;
		$templates['new-user']['status']         = 'new-user';
		$templates['new-user']['text-body']      = $sms_body_registration_admin_msg;
		$templates['new-user']['checkboxNameId'] = 'smsalert_general[admin_registration_msg]';
		$templates['new-user']['textareaNameId'] = 'smsalert_message[sms_body_registration_admin_msg]';
		$templates['new-user']['token']          = $new_user_variables;

		return $templates;
	}

	/**
	 * This function Adds default settings in configuration.
	 *
	 * @param array $defaults Default values.
	 */
	public static function addDefaultSetting( $defaults = array() ) {
		$sms_body_registration_admin_msg = smsalert_get_option( 'sms_body_registration_admin_msg', 'smsalert_message', SmsAlertMessages::showMessage( 'DEFAULT_ADMIN_NEW_USER_REGISTER' ) );

		$wc_user_roles = self::get_user_roles();
		foreach ( $wc_user_roles as $role_key => $role ) {
			$defaults['smsalert_signup_general'][ 'wc_user_roles_' . $role_key ]   = 'off';
			$defaults['smsalert_signup_message'][ 'signup_sms_body_' . $role_key ] = $sms_body_registration_admin_msg;
		}
		return $defaults;
	}

	
	/**
	 * This function gets role display name from system name.
	 *
	 * @param bool $system_name System name of the role.
	 */
	public static function get_user_roles( $system_name = null ) {
		global $wp_roles;
		$roles = $wp_roles->roles;

		if ( ! empty( $system_name ) && array_key_exists( $system_name, $roles ) ) {
			return $roles[ $system_name ]['name'];
		} else {
			return $roles;
		}
	}
	
	/**
	 * Instantiate necessary Class
	 *
	 * @return void
	 */
	public function instantiate() {
		spl_autoload_register( array( $this, 'smsalert_sms_autoload' ) );
		new smsalert_Setting_Options();
	}

	/**
	 * Autoload class files on demand.
	 *
	 * @param string $class requested class name.
	 */
	public function smsalert_sms_autoload( $class ) {

		require_once 'handler/smsalert_logic_interface.php';
		require_once 'handler/smsalert_phone_logic.php';
		require_once 'helper/sessionVars.php';
		require_once 'helper/utility.php';
		require_once 'helper/constants.php';
		require_once 'helper/messages.php';
		require_once 'helper/curl.php';

		if ( stripos( $class, 'smsalert_' ) !== false ) {

			$class_name = str_replace( array( 'smsalert_', '_' ), array( '', '-' ), $class );
			$filename   = dirname( __FILE__ ) . '/classes/' . strtolower( $class_name ) . '.php';

			if ( file_exists( $filename ) ) {
				require_once $filename;
			}
		}
	}

	/**
	 * Initializes the SMSAlert_WC_Order_SMS() class
	 *
	 * Checks for an existing SMSAlert_WC_Order_SMS() instance
	 * and if it doesn't find one, creates it.
	 */
	public static function init() {
		static $instance = false;

		if ( ! $instance ) {
			$instance = new SMSAlert_WC_Order_SMS();
		}
		return $instance;
	}

	/**
	 * Sends an SMS.
	 *
	 * @param string $number Number to send SMS.
	 * @param string $content Text of SMS to be sent.
	 * @param string $schedule SMS schedule time.
	 */
	public function fn_sa_send_sms( $number, $content, $schedule = null ) {
		$obj             = array();
		$obj['number']   = $number;
		$obj['sms_body'] = $content;
		$obj['schedule'] = $schedule;
		$response        = SmsAlertcURLOTP::sendsms( $obj );
		return $response;
	}

	/**
	 * Replaces common variables in SMS Text.
	 *
	 * @param string $fields Array containing text key.
	 */
	public function replace_common_token_name( $fields ) {

		$search = array(
			'[store_name]',
			'[shop_url]',
		);

		$replace = array(
			get_bloginfo(),
			get_site_url(),
		);

		$fields['text'] = str_replace( $search, $replace, $fields['text'] );
		return $fields;
	}

	/**
	 * Registers the send SMS hook.
	 */
	public function register_hook_send_sms() {
		add_action( 'sa_send_sms', array( $this, 'fn_sa_send_sms' ), 10, 3 );
	}

	/**
	 * Enques scripts to be loaded in admin section.
	 */
	public function admin_enqueue_scripts() {
		wp_enqueue_style( 'admin-smsalert-styles', plugins_url( 'css/admin.css', __FILE__ ), array(), SmsAlertConstants::SA_VERSION );
		
		wp_enqueue_style( 'admin-modal-styles', plugins_url( 'css/sms_alert_customer_validation_style.css', __FILE__ ), array(), SmsAlertConstants::SA_VERSION );
	
		wp_enqueue_script( 'admin-smsalert-scripts', plugins_url( 'js/admin.js', __FILE__ ), array( 'jquery' ), SmsAlertConstants::SA_VERSION, true );
		wp_enqueue_script( 'admin-smsalert-taggedinput', plugins_url( 'js/tagged-input.js', __FILE__ ), array( 'jquery' ), SmsAlertConstants::SA_VERSION, false );
		$user_authorize = new smsalert_Setting_Options();
		wp_localize_script(
			'admin-smsalert-scripts',
			'smsalert',
			array(
				'ajaxurl' => admin_url( 'admin-ajax.php' ),
				'whitelist_countries' => smsalert_get_option( 'whitelist_country', 'smsalert_general' ),
				'sa_default_countrycode' => smsalert_get_option( 'default_country_code', 'smsalert_general' ),
				'islogged' => $user_authorize->is_user_authorised(),
				'pattern' => SmsAlertConstants::PATTERN_PHONE,
			)
		);
	}

	/**
	 * Adds a meta row to plugin.
	 *
	 * @param string $plugin_meta Array of plugin meta.
	 * @param string $plugin_file plugin base file.
	 * @param string $plugin_data Array containing information about plugin.
	 * @param string $status status.
	 */
	public function plugin_row_meta_link( $plugin_meta, $plugin_file, $plugin_data, $status ) {
		if ( isset( $plugin_data['slug'] ) && ( 'sms-alert' === $plugin_data['slug'] ) && ! defined( 'smsalert_DIR' ) ) {
			$plugin_meta[] = '<a href="https://kb.smsalert.co.in/wordpress" target="_blank">' . __( 'Docs', 'sms-alert' ) . '</a>';
			$plugin_meta[] = '<a href="https://wordpress.org/support/plugin/sms-alert/reviews/#postform" target="_blank" class="wc-rating-link">★★★★★</a>';
		}
		return $plugin_meta;
	}

	/**
	 * Adds an action link in admin section.
	 *
	 * @param array $links Array of action links.
	 */
	public function add_action_links( $links ) {
		$links[] = sprintf( '<a href="%s">Settings</a>', admin_url( 'admin.php?page=sms-alert' ) );
		return $links;
	}

	/**
	 * Returns the credit in users account.
	 */
	public static function only_credit() {
		$trans_credit = array();
		$credits      = json_decode( SmsAlertcURLOTP::get_credits(), true );
		if ( is_array( $credits['description'] ) && array_key_exists( 'routes', $credits['description'] ) ) {
			foreach ( $credits['description']['routes'] as $credit ) {
					$trans_credit[] = $credit['credits'];
			}
		}
		return $trans_credit;
	}

	/**
	 * This function is executed on plugin activate.
	 */
	public static function run_on_activate() {
		if ( ! get_option( 'smsalert_activation_date' ) ) {
			add_option( 'smsalert_activation_date', date( 'Y-m-d' ) );
		}
		if ( ! wp_next_scheduled( 'smsalert_balance_notify' ) ) {
			wp_schedule_event( time(), 'hourly', 'smsalert_balance_notify' );
		}
		if( !wp_next_scheduled( 'smsalert_followup_sms' ) )
		{
			$time_value = esc_attr( smsalert_get_option( 'followup_sms_time', 'smsalert_wc_renewal', '10:00' ) );
			wp_schedule_event( strtotime(get_gmt_from_date($time_value)), 'daily', 'smsalert_followup_sms');
		}
		self::sa_cart_activate();
		
		//commented , use later for after plugin install.
		add_option('smsalert_do_activation_redirect', true);
	}
	
	//commented , use later for after plugin install.
	function smsalert_plugin_redirect() {
		if (get_option('smsalert_do_activation_redirect', false)) {
		delete_option('smsalert_do_activation_redirect');
			wp_redirect("admin.php?page=sms-alert");
		}
	}								  

	/**
	 * This function is executed on plugin activate to create table for abondoned cart functionality.
	 */
	public static function sa_cart_activate() {
		global $wpdb, $table_name;

		$table_name      = $wpdb->prefix . SA_CART_TABLE_NAME;
		$tabl_name = $wpdb->prefix . "smsalert_renewal_reminders";													
		$reminder_table_name = $wpdb->prefix . "smsalert_booking_reminder";													
		$charset_collate = $wpdb->get_charset_collate();

		$sql = "CREATE TABLE IF NOT EXISTS $table_name (
			id BIGINT(20) NOT NULL AUTO_INCREMENT,
			name VARCHAR(60),
			surname VARCHAR(60),
			email VARCHAR(100),
			phone VARCHAR(20),
			location VARCHAR(100),
			cart_contents LONGTEXT,
			cart_total DECIMAL(10,2),
			currency VARCHAR(10),
			time DATETIME DEFAULT '0000-00-00 00:00:00',
			session_id VARCHAR(60),
			msg_sent TINYINT NOT NULL DEFAULT 0,
			recovered TINYINT NOT NULL DEFAULT 0,
			other_fields LONGTEXT,
			PRIMARY KEY (id)
		) $charset_collate;";

		$sql1 = "CREATE TABLE IF NOT EXISTS $tabl_name (
			id mediumint(9) NOT NULL AUTO_INCREMENT,
			subscription_id mediumint(9) NOT NULL,
			subscription_text text NOT NULL,
			next_payment_date date DEFAULT '0000-00-00' NOT NULL,
			notification_sent_date date DEFAULT '0000-00-00' NOT NULL,
			PRIMARY KEY  (id)
        ) $charset_collate;";

        $sql2 = "CREATE TABLE IF NOT EXISTS $reminder_table_name (
			id mediumint(9) NOT NULL AUTO_INCREMENT,
			booking_id mediumint(9) NOT NULL,
			phone VARCHAR(20),
			source VARCHAR(50),
			msg_sent TINYINT NOT NULL DEFAULT 0,
			start_date DATETIME DEFAULT '0000-00-00 00:00:00',
			PRIMARY KEY  (id)
        ) $charset_collate;";		
		require_once ABSPATH . 'wp-admin/includes/upgrade.php';
		dbDelta( $sql1 );		   
		dbDelta( $sql2 );		   
		dbDelta( $sql );

		// Resets table Auto increment index to 1.
		$sql = "ALTER TABLE $table_name AUTO_INCREMENT = 1";
		dbDelta( $sql );

		$ab_cart_fc_captured_abandoned_cart_count = get_option( 'ab_cart_fc_captured_abandoned_cart_count' );
		if ( $ab_cart_fc_captured_abandoned_cart_count ) {
			update_option( 'cart_captured_abandoned_cart_count', $ab_cart_fc_captured_abandoned_cart_count );
		}
		delete_option( 'ab_cart_fc_captured_abandoned_cart_count' );

		$user_settings_notification_frequency = smsalert_get_option( 'customer_notify', 'smsalert_abandoned_cart', 'on' );
		$wcbk_reminder_frequency = smsalert_get_option( 'customer_notify', 'smsalert_wcbk_general', 'on' );
		$bc_reminder_frequency = smsalert_get_option( 'customer_notify', 'smsalert_bc_general', 'on' );

		if ( 'off' === $user_settings_notification_frequency ) { // If SMS notifications have been disabled, we disable cron job.
			wp_clear_scheduled_hook( 'ab_cart_notification_sendsms_hook' );
		} else {
			if ( ! wp_next_scheduled( 'ab_cart_notification_sendsms_hook' ) ) {
				wp_schedule_event( time(), 'sendsms_interval', 'ab_cart_notification_sendsms_hook' );
			}
		}
		if ( ('off' === $wcbk_reminder_frequency && 'off' === $bc_reminder_frequency ) ) { // If SMS notifications have been disabled, we disable cron job.
			wp_clear_scheduled_hook( 'booking_reminder_sendsms_hook' );
		} else {
			if ( ! wp_next_scheduled( 'booking_reminder_sendsms_hook' ) ) {
				wp_schedule_event( time(), 'sendremindersms_interval', 'booking_reminder_sendsms_hook' );
			}
		}
	}

	/**
	 * Executes on plugin de-activate.
	 */
	public static function run_on_deactivate() {
		wp_clear_scheduled_hook( 'smsalert_balance_notify' );
		wp_clear_scheduled_hook('smsalert_followup_sms');
		wp_clear_scheduled_hook('booking_reminder_sendsms_hook');
	}

	/**
	 * Executes on plugin uninstall.
	 */
	public static function run_on_uninstall() {
		global $wpdb;

		$main_table = $wpdb->prefix . 'sa_captured_wc_fields';

		$wpdb->query( "DROP TABLE IF EXISTS $main_table" );

		delete_option( 'cart_captured_abandoned_cart_count' );
	}

	/**
	 * Background scheduler function to send email for low balance, etc.
	 */
	public function background_task() {
		$low_bal_alert   = smsalert_get_option( 'low_bal_alert', 'smsalert_general', 'off' );
		$daily_bal_alert = smsalert_get_option( 'daily_bal_alert', 'smsalert_general', 'off' );
		$user_authorize  = new smsalert_Setting_Options();
		$islogged        = $user_authorize->is_user_authorised();
		$auto_sync       = smsalert_get_option( 'auto_sync', 'smsalert_general', 'off' );
		if ( $islogged ) {
			if ( 'on' === $auto_sync ) {
				self::sync_customers();
			}
		}
		if ( 'on' === $low_bal_alert ) {
			self::send_smsalert_balance();}
		if ( 'on' === $daily_bal_alert ) {
			self::daily_email_alert();}
	}

	/**
	 * Syncs contacts to SMS Alert group.
	 */
	public function sa_sync_grp_action() {
		if ( array_key_exists( 'option', $_GET ) ) {
			switch ( trim( sanitize_text_field( wp_unslash( $_GET['option'] ) ) ) ) {
				case 'smsalert-group-sync':
					self::sync_customers();
					exit;
			}
		}
	}

	/**
	 * Syncs contacts to SMS Alert group.
	 */
	public static function sync_customers() {
		$group_name = smsalert_get_option( 'group_auto_sync', 'smsalert_general', '' );
		$update_id  = smsalert_get_option( 'last_sync_userId', 'smsalert_sync', '' );
		$username   = smsalert_get_option( 'smsalert_name', 'smsalert_gateway' );
		$password   = smsalert_get_option( 'smsalert_password', 'smsalert_gateway' );
		if ( empty( $group_name ) ) {
			return;
		}

		$update_id = ! empty( $update_id ) ? $update_id : 0;
		global $wpdb;

		$sql = $wpdb->prepare(
			"SELECT ID FROM {$wpdb->users} WHERE {$wpdb->users}.ID > %d order by ID asc limit 100",
			$update_id
		);

		$uids = $wpdb->get_col( $sql );
		if ( 0 === count( $uids ) ) {
			wp_send_json(
				array(
					'status'      => 'success',
					'description' => array( 'cnt_member' => 0 ),
				)
			);
			exit;
		} else {
			$user_query = new WP_User_Query(
				array(
					'include' => $uids,
					'orderby' => 'id',
					'order'   => 'ASC',
				)
			);
			if ( $user_query->get_results() ) {
				$cnt = 0;
				$obj = array();
				foreach ( $user_query->get_results() as $ukey => $user ) {
					$number                      = get_user_meta( $user->ID, 'billing_phone', true );
					$obj[ $ukey ]['person_name'] = $user->display_name;
					$obj[ $ukey ]['number']      = $number;
					$last_sync_id                = $user->ID;
					$cnt++;
				}
				$resp = SmsAlertcURLOTP::create_contact( $obj, $group_name );
				update_option( 'smsalert_sync', array( 'last_sync_userId' => $last_sync_id ) );
				$result = (array) json_decode( $resp, true );
				if ( 'success' === $result['status'] ) {
					wp_send_json(
						array(
							'status'      => 'success',
							'description' => array( 'cnt_member' => $cnt ),
						)
					);
					exit();
				}
			} else {
				wp_send_json(
					array(
						'status'      => 'success',
						'description' => array( 'cnt_member' => 0 ),
					)
				);
				exit();
			}
		}
	}

	/**
	 * Sends SMS Alert balance.
	 */
	public static function send_smsalert_balance() {
		$date            = date( 'Y-m-d' );
		$update_datetime = smsalert_get_option( 'last_updated_lBal_alert', 'smsalert_background_task', '' );

		if ( $update_datetime == $date ) {
			return;
		}

		$username     = smsalert_get_option( 'smsalert_name', 'smsalert_gateway', '' );
		$low_bal_val  = smsalert_get_option( 'low_bal_val', 'smsalert_general', '1000' );
		$to_mail      = smsalert_get_option( 'alert_email', 'smsalert_general', '' );
		$trans_credit = self::only_credit();

		if ( ! empty( $trans_credit ) ) {

			foreach ( $trans_credit as $credit ) {
				$params       = array(
					'trans_credit' => $credit,
					'username'     => $username,
					'admin_url'    => admin_url(),
				);
				$emailcontent = get_smsalert_template( 'template/emails/smsalert-low-bal.php', $params, true );

				if ( $credit <= $low_bal_val ) {
					wp_mail( $to_mail, '❗ ✱ SMS Alert ✱ Low Balance Alert', $emailcontent, 'content-type:text/html' );
				}
			}

			update_option( 'smsalert_background_task', array( 'last_updated_lBal_alert' => date( 'Y-m-d' ) ) );// update last time and date.
		}
	}

	/**
	 * Sends SMS Alert balance daily job.
	 */
	public function daily_email_alert() {
		$username        = smsalert_get_option( 'smsalert_name', 'smsalert_gateway', '' );
		$date            = date( 'Y-m-d' );
		$to_mail         = smsalert_get_option( 'alert_email', 'smsalert_general', '' );
		$update_datetime = smsalert_get_option( 'last_updated_dBal_alert', 'smsalert_background_dBal_task', '' );

		if ( $update_datetime == $date ) {
			return;
		}

		$daily_credits = self::only_credit();

		if ( ! empty( $daily_credits ) ) {

			foreach ( $daily_credits as $credit ) {
				// email content
				$params            = array(
					'daily_credits' => $credit,
					'username'      => $username,
					'date'          => $date,
					'admin_url'     => admin_url(),
				);
				$dailyemailcontent = get_smsalert_template( 'template/emails/daily-email-alert.php', $params, true );
				update_option( 'smsalert_background_dBal_task', array( 'last_updated_dBal_alert' => date( 'Y-m-d' ) ) );// update last time and date.
				wp_mail( $to_mail, '✱ SMS Alert ✱ Daily  Balance Alert ', $dailyemailcontent, 'content-type:text/html' );
			}
		}
	}
	/**
	 * Update Order buyer notify meta in checkout page
	 *
	 * @param  integer $order_id Order id.
	 * @return void
	 */
	public function buyer_notification_update_order_meta( $order_id ) {
		if ( ! empty( $_POST['buyer_sms_notify'] ) ) {
			update_post_meta( $order_id, '_buyer_sms_notify', sanitize_text_field( wp_unslash( $_POST['buyer_sms_notify'] ) ) );
		}
	}

	/**
	 * Executes on order place event from woocommerce.
	 *
	 * @param  integer $order_id Order id.
	 */
	public function sa_wc_order_place( $order_id ) {
		if ( ! $order_id ) {
			return;
		}
		WooCommerceCheckOutForm::trigger_after_order_place( $order_id, 'pending', 'pending' );
	}
} // SMSAlert_WC_Order_SMS

/**
 * Loaded after all plugin initialize
 */
add_action( 'plugins_loaded', 'load_sa_wc_order_sms' );

/**
 * Sets cron schedules.
 *
 * @param integer $intervals Interval at which cron to be executed.
 */
function additional_cron_intervals( $intervals ) {
	$intervals['sendsms_interval'] = array(
		'interval' => CART_CRON_INTERVAL * 60,
		'display'  => 'Every 10 minutes',
	);
	$intervals['sendremindersms_interval'] = array(
		'interval' => BOOKING_REMINDER_CRON_INTERVAL * 60,
		'display'  => 'Every 60 minutes',
	);
	return $intervals;
}

add_filter( 'cron_schedules', 'additional_cron_intervals' );

/**
 * Executed on plugin load.
 */
function load_sa_wc_order_sms() {
	$smsalert = SMSAlert_WC_Order_SMS::init();
}
register_activation_hook( __FILE__, array( 'smsalert_WC_Order_SMS', 'run_on_activate' ) );
register_deactivation_hook( __FILE__, array( 'smsalert_WC_Order_SMS', 'run_on_deactivate' ) );
register_uninstall_hook( __FILE__, array( 'smsalert_WC_Order_SMS', 'run_on_uninstall' ) );

global $wp_version;
if(version_compare($wp_version, '5.0.0', '>')) {
	add_action('enqueue_block_editor_assets', function () {
	   wp_enqueue_script( 'smsalert-block', plugins_url( 'js/block.js', __FILE__ ), array( 'jquery' ), SmsAlertConstants::SA_VERSION, true );
	   
		$forms = array((object)[
			'id'    => '',
			'title' => __('-- Select a form --', 'smsalert')
		],(object)[
			'id'    => '[sa_signupwithmobile]',
			'title' => __('Signup With Mobile', 'smsalert')
		],(object)[
			'id'    => '[sa_loginwithotp]',
			'title' => __('Login With Otp', 'smsalert')
		],(object)[
			'id'    => '[sa_sharecart]',
			'title' => __('Share Cart Button', 'smsalert')
		]);

		wp_localize_script('smsalert-block', 'smsalert_block_vars', [
			'logo'  => esc_url( SA_MOV_URL )."images/www.smsalert.co.in.png",
			'forms' => $forms
		]);
	});

	add_action('init', function () {
		 register_block_type('smsalert-blocks/smsalert', array(
			'render_callback' => function ($atts) {

				if(empty($atts['sa_shortcode'])) {
					return '';
				}
				return do_shortcode($atts['sa_shortcode']);
			},
			'attributes'      => array(
				'sa_shortcode'    => array(
					'type' => 'string'
				)
			),
			'example' => array(
			)
		));
	});
}