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/cloudtechtree.com/www/wp-content/plugins/wp-rss-aggregator/includes/
Upload File :
Current File : /home/cloudtechtree.com/www/wp-content/plugins/wp-rss-aggregator/includes/admin-metaboxes.php
<?php

add_action('add_meta_boxes', function () {
    // Remove some plugin's meta boxes because they're not relevant to the wprss_feed post type.
    $post_type = 'wprss_feed';
    remove_meta_box('wpseo_meta', $post_type, 'normal');                 // WP SEO Yoast
    remove_meta_box('ta-reviews-post-meta-box', $post_type, 'normal');   // Author hReview
    remove_meta_box('wpdf_editor_section', $post_type, 'advanced');      // ImageInject

    // Remove the default WordPress Publish box, because we will be using custom ones
    remove_meta_box('submitdiv', 'wprss_feed', 'side');
    // Custom Publish box
    add_meta_box(
        'submitdiv',
        __('Save Feed Source', 'wprss'),
        'post_submit_meta_box',
        'wprss_feed',
        'side',
        'high'
    );
});

/**
 * Set up the input boxes for the wprss_feed post type
 *
 * @since 2.0
 */
add_action('add_meta_boxes', function () {
    global $wprss_meta_fields;

    add_meta_box(
        'preview_meta_box',
        __('Feed Preview', 'wprss'),
        'wprss_preview_meta_box_callback',
        'wprss_feed',
        'side',
        'high'
    );

    add_meta_box(
        'wprss-feed-processing-meta',
        __('Feed Processing', 'wprss'),
        'wprss_feed_processing_meta_box_callback',
        'wprss_feed',
        'side',
        'high'
    );

    if (!defined('WPRSS_FTP_VERSION') && !defined('WPRSS_ET_VERSION') && !defined('WPRSS_C_VERSION')) {
        add_meta_box(
            'wprss-like-meta',
            __('Share The Love', 'wprss'),
            'wprss_like_meta_box_callback',
            'wprss_feed',
            'side',
            'low'
        );
    }

    add_meta_box(
        'custom_meta_box',
        __('Feed Source Details', 'wprss'),
        'wprss_show_meta_box_callback',
        'wprss_feed',
        'normal',
        'high'
    );
}, 99);

/**
 * Set up fields for the meta box for the wprss_feed post type
 *
 * @since 2.0
 */
function wprss_get_custom_fields()
{
    $prefix = 'wprss_';

    // Field Array
    $wprss_meta_fields['url'] = [
        'label' => __('URL', 'wprss'),
        'id' => $prefix . 'url',
        'type' => 'url',
        'after' => 'wprss_after_url',
        'placeholder' => 'https://',
    ];

    $wprss_meta_fields['limit'] = [
        'label' => __('Limit', 'wprss'),
        'id' => $prefix . 'limit',
        'type' => 'number',
    ];

    $wprss_meta_fields['unique_titles'] = [
        'label' => __('Unique titles only', 'wprss'),
        'id' => $prefix . 'unique_titles',
        'type' => 'select',
        'options' => [
            ['value' => '', 'label' => __('Default', 'wprss')],
            ['value' => '1', 'label' => __('Yes', 'wprss')],
            ['value' => '0', 'label' => __('No', 'wprss')],
        ],
    ];

    $wprss_meta_fields['enclosure'] = [
        'label' => __('Link to enclosure', 'wprss'),
        'id' => $prefix . 'enclosure',
        'type' => 'checkbox',
    ];

    if (wprss_is_et_active()) {
        $wprss_meta_fields['source_link'] = [
            'label' => __('Link source', 'wprss'),
            'id' => $prefix . 'source_link',
            'type' => 'boolean_fallback',
        ];
    }

    $wprss_meta_fields['import_source'] = [
        'label' => __('Use source info', 'wprss'),
        'id' => $prefix . 'import_source',
        'type' => 'checkbox',
    ];

    $wprss_meta_fields['use_guids'] = [
        'label' => __('Use GUIDs', 'wprss'),
        'id' => $prefix . 'use_guids',
        'type' => 'checkbox',
    ];

    // for extensibility, allows more meta fields to be added
    return apply_filters('wprss_fields', $wprss_meta_fields);
}

/**
 * Set up the meta box for the wprss_feed post type
 *
 * @since 2.0
 */
function wprss_show_meta_box_callback()
{
    global $post;
    $meta_fields = wprss_get_custom_fields();
    $field_tooltip_id_prefix = 'field_';
    $help = WPRSS_Help::get_instance();

    // Use nonce for verification
    wp_nonce_field('wpra_feed_source', 'wprss_meta_box_nonce');

    // Fix for WordPress SEO JS issue
    echo '<input type="hidden" id="content" value="" />';

    // Begin form table
    echo '<table class="form-table wprss-form-table">';

    foreach ($meta_fields as $field) {
        $meta = get_post_meta($post->ID, $field['id'], true);

        // Add default placeholder value
        $field = wp_parse_args($field, [
            'desc' => '',
            'placeholder' => '',
            'type' => 'text',
        ]);

        $fieldId = $field['id'];
        $fieldLabel = $field['label'];
        $fieldType = $field['type'];
        $fieldDesc = $field['desc'];
        $placeholder = isset($field['placeholder']) ? trim($field['placeholder']) : '';

        $tooltip = isset($field['tooltip']) ? trim($field['tooltip']) : null;
        $tooltip_id = isset($field['id']) ? $field_tooltip_id_prefix . $field['id'] : uniqid($field_tooltip_id_prefix);

        // Begin row
        echo '<tr>';

        // Label
        printf('<th><label for="%s">%s</label></th>', esc_attr($fieldId), esc_html($fieldLabel));

        // Begin field
        echo '<td>';

        if (isset($field['before']) && !empty($field['before'])) {
            call_user_func($field['before']);
        }

        switch ($fieldType) {
            // text/url
            case 'url':
            case 'text':
            {
                printf(
                    '<input id="%1$s" type="%2$s" name="%1$s" value="%3$s" placeholder="%4$s" class="wprss-text-input />"',
                    esc_attr($fieldId),
                    esc_attr($fieldType),
                    esc_attr($meta),
                    esc_attr($placeholder)
                );

                echo $help->tooltip($tooltip_id, $tooltip);
                echo wprss_render_option_desc($fieldDesc, $fieldId);
                break;
            }

            // textarea
            case 'textarea':
            {
                printf(
                    '<textarea id="%1$s" name="%1$s" cols="60" rows="4">%2$s</textarea>',
                    esc_attr($fieldId),
                    esc_textarea($meta)
                );

                echo $help->tooltip($tooltip_id, $tooltip);
                echo wprss_render_option_desc($fieldDesc, $fieldId);
                break;
            }

            // checkbox
            case 'checkbox2':
            case 'checkbox':
            {
                $trueValue = $fieldType === 'checkbox' ? 'true' : '1';
                $falseValue = $fieldType === 'checkbox' ? 'false' : '0';

                printf('<input type="hidden" name="%s" value="%s" />', esc_attr($fieldId), esc_attr($falseValue));
                printf(
                    '<input type="checkbox" name="%1$s" id="%1$s" value="%2$s" %3$s />',
                    esc_attr($fieldId),
                    esc_attr($trueValue),
                    checked($meta, $trueValue, false)
                );

                echo $help->tooltip($tooltip_id, $tooltip);
                echo wprss_render_option_desc($fieldDesc, $fieldId);
                break;
            }

            // select
            case 'select':
                printf('<select name="%1$s" id="%1$s">', esc_attr($fieldId));

                foreach ($field['options'] as $option) {
                    printf(
                        '<option %1$s value="%2$s">%3$s</option>',
                        selected($option['value'], $meta, false),
                        esc_attr($option['value']),
                        esc_html($option['label'])
                    );
                }

                echo '</select>';

                echo $help->tooltip($tooltip_id, $tooltip);
                echo wprss_render_option_desc($fieldDesc, $fieldId);
                break;

            // A select with "On" and "Off" values, and a special option to fall back to General setting
            case 'boolean_fallback':
            {
                $options = wprss_settings_get_feed_source_boolean_options();
                if ($meta === '') {
                    $meta = -1;
                }
                echo wprss_settings_render_select($field['id'], $field['id'], $options, $meta);
                echo $help->tooltip($tooltip_id, $tooltip);
                break;
            }

            // number
            case 'number':
            {
                printf(
                    '<input id="%1$s" name="%1$s" class="wprss-number-roller" type="number" min="0" value="%2$s" placeholder="%3$s" />',
                    esc_attr($fieldId),
                    esc_attr($meta),
                    __('Default', 'wprss')
                );

                echo $help->tooltip($tooltip_id, $tooltip);
                echo wprss_render_option_desc($fieldDesc, $fieldId);
                break;
            }
        }

        if (isset($field['after']) && !empty($field['after'])) {
            call_user_func($field['after']);
        }

        // End field
        echo '</td>';

        // End row
        echo '</tr>';
    }

    echo '</table>';
}

/** @deprecated There shouldn't be any options that still use a description. All help text was moved to tooltips. */
function wprss_render_option_desc($desc, $id)
{
    if (strlen($desc) === 0) {
        return '';
    }

    ob_start();
    ?>
    <br />
    <label for="<?= esc_attr($id) ?>">
            <span class="description">
                <?= esc_html($desc) ?>
            </span>
    </label>
    <?php
    return ob_get_clean();
}

/**
 * Renders content after the URL field
 *
 * @since 3.9.5
 */
function wprss_after_url()
{
    ?>
    <i
        id="wprss-url-spinner"
        class="fa fa-fw fa-refresh fa-spin wprss-updating-feed-icon"
        title="<?= __('Updating feed source', 'wprss') ?>">
    </i>

    <div id="wprss-url-error" style="color:red"></div>

    <a href="#" id="validate-feed-link" class="wprss-after-url-link">
        Validate feed
    </a>

    <span> | </span>

    <a
        href="https://kb.wprssaggregator.com/article/55-how-to-find-an-rss-feed"
        class="wprss-after-url-link"
        target="_blank"
    >
        <?= __('How to find an RSS feed', 'wprss') ?>
    </a>

    <script type="text/javascript">
        (function ($) {
            // When the DOM is ready
            $(document).ready(function () {
                // Move the link immediately after the url text field, and add the click event handler
                $('#validate-feed-link').on('click', function (e) {
                    // Get the url and proceed only if the url is not empty
                    var url = $('#wprss_url').val();
                    if (url.trim().length > 0) {
                        // Encode the url and generate the full url to the w3 feed validator
                        var encodedUrl = encodeURIComponent(url);
                        var fullURL = 'https://validator.w3.org/feed/check.cgi?url=' + encodedUrl;
                        // Open the window / tab
                        window.open(fullURL, 'wprss-feed-validator');
                    }
                    // Suppress the default link click behaviour
                    e.preventDefault();
                    e.stopPropagation();
                    return false;
                });
            });
        })(jQuery);
    </script>
    <?php
}

/**
 * Save the custom fields
 *
 * @since 2.0
 */
add_action('save_post', function ($post_id, $post) {
    $meta_fields = wprss_get_custom_fields();

    /* Verify the nonce before proceeding. */
    if (!isset($_POST['wprss_meta_box_nonce']) ||
        !wp_verify_nonce($_POST['wprss_meta_box_nonce'], 'wpra_feed_source')) {
        return;
    }

    /* Get the post type object. */
    $post_type = get_post_type_object($post->post_type);

    /* Check if the current user has permission to edit the post. */
    if (!current_user_can($post_type->cap->edit_post, $post_id)) {
        return;
    }

    /** Bail out if running an autosave, ajax or a cron */
    if (
        (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) ||
        (defined('DOING_AJAX') && DOING_AJAX) ||
        (defined('DOING_CRON') && DOING_CRON)
    ) {
        return;
    }

    $postType = class_exists('WPRSS_FTP_Meta')
        ? WPRSS_FTP_Meta::get_instance()->get($post_id, 'post_type')
        : 'wprss_feed_item';

    if ($postType === 'wprss_feed_item' && isset($_POST['wpra_feed_def_ft_image'])) {
        $def_ft_image_id = $_POST['wpra_feed_def_ft_image'];

        if (empty($def_ft_image_id)) {
            // Does not actually delete the image
            delete_post_thumbnail($post_id);
        } else {
            set_post_thumbnail($post_id, $def_ft_image_id);
        }
    }

    // Change the limit, if it is zero, to an empty string
    if (isset($_POST['wprss_limit']) && strval($_POST['wprss_limit']) == '0') {
        $_POST['wprss_limit'] = '';
    }

    // loop through fields and save the data
    foreach ($meta_fields as $field) {
        $old = get_post_meta($post_id, $field['id'], true);
        $new = trim($_POST[$field['id']]);
        if ($new !== $old || empty($old)) {
            update_post_meta($post_id, $field['id'], $new);
        } elseif (empty($new) && !empty($old)) {
            delete_post_meta($post_id, $field['id'], $old);
        }
    } // end foreach

    $force_feed = filter_input(INPUT_POST, 'wprss_force_feed', FILTER_VALIDATE_BOOLEAN) ? 'true' : 'false';

    $state = filter_input(INPUT_POST, 'wprss_state', FILTER_SANITIZE_STRING);
    $state = strtolower(trim($state)) === 'paused' ? 'paused' : 'active';

    $activate = filter_input(INPUT_POST, 'wprss_activate_feed', FILTER_SANITIZE_STRING);
    $activate = $activate ? : '';

    $pause = filter_input(INPUT_POST, 'wprss_pause_feed', FILTER_SANITIZE_STRING);
    $pause = $pause ? : '';

    $age_limit = filter_input(INPUT_POST, 'wprss_age_limit', FILTER_VALIDATE_INT);
    $age_limit = (is_int($age_limit) && $age_limit > 0) ? (string) $age_limit : '';

    $age_unit = filter_input(INPUT_POST, 'wprss_age_unit', FILTER_SANITIZE_STRING);
    $age_unit = $age_unit ? strtolower($age_unit) : '';
    $age_unit = in_array($age_unit, wprss_age_limit_units()) ? $age_unit : '';

    $update_interval = filter_input(INPUT_POST, 'wprss_update_interval', FILTER_SANITIZE_STRING);
    $update_interval = $update_interval ? $update_interval : wprss_get_default_feed_source_update_interval();
    $old_update_interval = get_post_meta($post_id, 'wprss_update_interval', true);

    // Update the feed source meta
    update_post_meta($post_id, 'wprss_force_feed', $force_feed);
    update_post_meta($post_id, 'wprss_activate_feed', $activate);
    update_post_meta($post_id, 'wprss_pause_feed', $pause);
    update_post_meta($post_id, 'wprss_age_limit', $age_limit);
    update_post_meta($post_id, 'wprss_age_unit', $age_unit);
    update_post_meta($post_id, 'wprss_update_interval', $update_interval);

    // Check if the state or the update interval has changed
    if (get_post_meta($post_id, 'wprss_state', true) !== $state || $old_update_interval !== $update_interval) {
        // Pause the feed source, and if it is active, re-activate it.
        // This should update the feed's scheduling
        wprss_pause_feed_source($post_id);
        if ($state === 'active') {
            wprss_activate_feed_source($post_id);
        }
    }

    // Update the schedules
    wprss_update_feed_processing_schedules($post_id);

    // If the feed source uses the global updating system, update the feed on publish
    if ($update_interval === wprss_get_default_feed_source_update_interval()) {
        wp_schedule_single_event(time(), 'wprss_fetch_single_feed_hook', [$post_id]);
    }
}, 10, 2);

/**
 * Generate a preview of the latest 5 posts from the feed source being added/edited
 *
 * @since 2.0
 */
function wprss_preview_meta_box_callback()
{
    global $post;
    $feed_url = get_post_meta($post->ID, 'wprss_url', true);

    echo '<div id="feed-preview-container">';

    if (empty($feed_url)) {
        echo '<p>' . __('No feed URL defined yet', 'wprss') . '</p>';
    } else {
        $feed = wprss_fetch_feed($feed_url, $post->ID);

        // Check if failed to fetch the feed
        if (is_wp_error($feed)) {
            $message = wprss_rewrite_feed_error($feed_url, $feed->get_error_message());
            printf( '<span class="invalid-feed-url">%s</span>', $message);

            echo wpautop(
                sprintf(
                    __(
                        'Not sure where to find the RSS feed on a website? <a target="_blank" href="%1$s">Click here</a> for a visual guide.',
                        'wprss'
                    ),
                    'https://kb.wprssaggregator.com/article/55-how-to-find-an-rss-feed'
                )
            );
        } else {
            ob_start();
            // Figure out how many total items there are
            $total = @$feed->get_item_quantity();
            // Get the number of items again, but limit it to 5.
            $maxItems = $feed->get_item_quantity(5);

            // Build an array of all the items, starting with element 0 (first element).
            $items = $feed->get_items(0, $maxItems);
            ob_clean();
            ?>
            <h4>
                <?php
                printf(
                    __('Latest %1$s feed items out of %2$s available from %3$s'),
                    $maxItems,
                    $total,
                    get_the_title()
                )
                ?>
            </h4>
            <ul>
                <?php
                foreach ($items as $item) {
                    $date = $item->get_date('U');
                    $has_date = !!$date;

                    // Get human readable date
                    $item_date = ($has_date)
                        ? human_time_diff($date, current_time('timestamp')) . ' ' . __('ago', 'wprss')
                        : sprintf('<em>[%s]</em>', esc_html(__('No Date', 'wprss')));

                    printf(
                        '<li>%s<div class="rss-date"><small>%s</small></div></li>',
                        esc_html($item->get_title()),
                        $item_date
                    );
                }
                ?>
            </ul>
            <?php
        }
    }

    echo '</div>';
    echo '<div id="force-feed-container">';

    wprss_render_force_feed_option($post->ID, true);

    echo '</div>';
}

/**
 * Renders the Force Feed option for the Feed Preview.
 *
 * @since 4.6.12
 *
 * @param bool $echo (Optional) If set to true, the function will immediately echo the option,
 *                                   rather than return a string of the option's markup. Default: False.
 * @param int|string $feed_source_id (Optional) The ID of the feed source for the option will be rendered. If not given
 *     or its value is null, the option will not be checked.
 *
 * @return string|null               A string containing the HTML for the rendered option if $echo is set to false,
 *                                   or null if $echo is set to true.
 */
function wprss_render_force_feed_option($feed_source_id = null, $echo = false)
{
    if (!$echo) {
        ob_start();
    }

    $force_feed = $feed_source_id !== null
        ? get_post_meta($feed_source_id, 'wprss_force_feed', true)
        : '';

    echo '<p>';
    echo '<label for="wprss-force-feed">' . __('Force the feed', 'wprss') . '</label>';
    echo '<input type="hidden" name="wprss_force_feed" value="false" />';

    printf(
        '<input type="checkbox" name="wprss_force_feed" id="wprss-force-feed" value="true" %s />',
        checked($force_feed, 'true', false)
    );

    echo WPRSS_Help::get_instance()->tooltip('field_wprss_force_feed');
    echo '</p>';

    return $echo ? null : ob_get_clean();
}

/**
 * Renders the Feed Processing metabox
 *
 * @since 3.7
 */
function wprss_feed_processing_meta_box_callback()
{
    global $post;

    // Get the post meta
    $state = get_post_meta($post->ID, 'wprss_state', true);
    $activate = get_post_meta($post->ID, 'wprss_activate_feed', true);
    $pause = get_post_meta($post->ID, 'wprss_pause_feed', true);
    $update_interval = get_post_meta($post->ID, 'wprss_update_interval', true);
    $update_time = get_post_meta($post->ID, 'wprss_update_time', true);

    $age_limit = get_post_meta($post->ID, 'wprss_age_limit', true);
    $age_unit = get_post_meta($post->ID, 'wprss_age_unit', true);

    // Set default strings for activate and pause times
    $default_activate = 'immediately';
    $default_pause = 'never';

    // Prepare the states
    $states = [
        'active' => __('Active', 'wprss'),
        'paused' => __('Paused', 'wprss'),
    ];

    // Prepare the schedules
    $default_interval = __('Default', 'wprss');
    $wprss_schedules = apply_filters('wprss_schedules', wprss_get_schedules());
    $default_interval_key = wprss_get_default_feed_source_update_interval();
    $schedules = array_merge(
        [
            $default_interval_key => [
                'display' => $default_interval,
                'interval' => $default_interval,
            ],
        ],
        $wprss_schedules
    );

    // Inline help
    $help = WPRSS_Help::get_instance();
    $help_options = [
        'tooltip_handle_class_extra' => $help->get_options('tooltip_handle_class_extra') . ' ' . $help->get_options('tooltip_handle_class') . '-side',
    ];

    ?>

    <div class="wprss-meta-side-setting">
        <label for="wprss_state">Feed state:</label>
        <select id="wprss_state" name="wprss_state">
            <?php foreach ($states as $value => $label) : ?>
                <option value="<?= esc_attr($value) ?>" <?php selected($state, $value) ?> >
                    <?= esc_html($label) ?>
                </option>
            <?php endforeach; ?>
        </select>
        <?= $help->tooltip('field_wprss_state', null, $help_options) ?>
    </div>

    <div class="wprss-meta-side-setting">
        <p>
            <label for="">Activate feed: </label>
            <strong id="wprss-activate-feed-viewer">
                <?= empty($activate) ? $default_activate : esc_attr($activate) ?>
            </strong>
            <a href="#">Edit</a>
            <?= $help->tooltip('field_wprss_activate_feed', null, $help_options) ?>
        </p>
        <div
            class="wprss-meta-slider"
            data-collapse-viewer="wprss-activate-feed-viewer"
            data-default-value="<?php echo $default_activate; ?>">
            <input
                id="wprss_activate_feed"
                class="wprss-datetimepicker-from-today"
                name="wprss_activate_feed"
                value="<?= esc_attr($activate) ?>"
            />
            <span class="description">
                Current UTC time is:
                <br />
                <code>
                    <?= date('d/m/Y H:i:s', current_time('timestamp', 1)) ?>
                </code>
            </span>
        </div>
    </div>

    <div class="wprss-meta-side-setting">
        <p>
            <label for="">Pause feed: </label>
            <strong id="wprss-pause-feed-viewer">
                <?= empty($pause) ? $default_pause : $pause ?>
            </strong>
            <a href="#">Edit</a>
            <?= $help->tooltip('field_wprss_pause_feed', null, $help_options) ?>
        </p>
        <div
            class="wprss-meta-slider"
            data-collapse-viewer="wprss-pause-feed-viewer"
            data-default-value="<?= esc_attr($default_pause) ?>">
            <input
                id="wprss_pause_feed"
                class="wprss-datetimepicker-from-today"
                name="wprss_pause_feed"
                value="<?= esc_attr($pause) ?>"
            />
            <span class="description">
                Current UTC time is:
                <br />
                <code>
                    <?= date('d/m/Y H:i:s', current_time('timestamp', 1)) ?>
                </code>
            </span>
        </div>
    </div>


    <div class="wprss-meta-side-setting">
        <p>
            <label for="">Update interval: </label>
            <strong id="wprss-feed-update-interval-viewer">
                <?php
                if ($update_interval === '' || $update_interval === wprss_get_default_feed_source_update_interval()) {
                    echo $default_interval;
                } else {
                    echo wprss_interval($schedules[$update_interval]['interval']);
                }
                ?>
            </strong>
            <a href="#">Edit</a>
            <?= $help->tooltip('field_wprss_update_interval', null, $help_options) ?>
        </p>
        <div
            class="wprss-meta-slider"
            data-collapse-viewer="wprss-feed-update-interval-viewer"
            data-default-value="<?= esc_attr($default_interval) ?>">
            <select id="feed-update-interval" name="wprss_update_interval">
                <?php foreach ($schedules as $value => $schedule) : ?>
                    <?php
                    $text = ($value === wprss_get_default_feed_source_update_interval())
                        ? $default_interval
                        : wprss_interval($schedule['interval']);
                    ?>
                    <option value="<?= esc_attr($value) ?>" <?php selected($update_interval, $value) ?>>
                        <?= esc_html($text) ?>
                    </option>
                <?php endforeach; ?>
            </select>
            <label>
                <input type="time" name="wpra_feed[update_time]" value="<?= esc_attr($update_time) ?>">
            </label>
        </div>
    </div>


    <div class="wprss-meta-side-setting">
        <p>
            <label id="wprss-age-limit-feed-label" for="" data-when-empty="Limit items by age:">
                <?= __('Limit items by age:', 'wprss'); ?>
            </label>
            <strong id="wprss-age-limit-feed-viewer">
                <?= __('Default', 'wprss'); ?>
            </strong>
            <a href="#">Edit</a>
            <?php echo $help->tooltip('field_wprss_age_limit', null, $help_options) ?>
        </p>
        <div
            class="wprss-meta-slider"
            data-collapse-viewer="wprss-age-limit-feed-viewer"
            data-label="#wprss-age-limit-feed-label"
            data-default-value=""
            data-empty-controller="#limit-feed-items-age"
            data-hybrid="#limit-feed-items-age, #limit-feed-items-age-unit">
            <input
                id="limit-feed-items-age"
                name="wprss_age_limit"
                type="number"
                min="0"
                class="wprss-number-roller"
                placeholder="No limit"
                value="<?= esc_attr($age_limit) ?>" />

            <select id="limit-feed-items-age-unit" name="wprss_age_unit">
                <?php foreach (wprss_age_limit_units() as $unit) : ?>
                    <option value="<?= esc_attr($unit) ?>" <?php selected($age_unit, $unit) ?> >
                        <?= esc_html($unit) ?>
                    </option>
                <?php endforeach; ?>
            </select>
        </div>
    </div>


    <?php
}

/**
 * Generate Like this plugin meta box
 *
 * @since 2.0
 *
 */
function wprss_like_meta_box_callback()
{
    printf(
        '<ul><li><a href="%s" target="_blank">%s</a></li></ul>',
        'https://wordpress.org/support/view/plugin-reviews/wp-rss-aggregator?rate=5#postform',
        __('Give it a 5 star rating on WordPress.org', 'wprss')
    );

    do_action('wpra_share_the_love_metabox');
}

/**
 * Remove meta boxes from add feed source screen that tend to appear for all post types.
 *
 * @since 2.0
 */
add_action('add_meta_boxes', function () {
    if ('wprss_feed' !== get_current_screen()->id) {
        return;
    }

    //remove_meta_box( 'wpseo_meta', 'wprss_feed' ,'normal' );
    remove_meta_box('postpsp', 'wprss_feed', 'normal');
    remove_meta_box('su_postmeta', 'wprss_feed', 'normal');
    remove_meta_box('woothemes-settings', 'wprss_feed', 'normal');
    remove_meta_box('wpcf-post-relationship', 'wprss_feed', 'normal');
    remove_meta_box('wpar_plugin_meta_box ', 'wprss_feed', 'normal');
    remove_meta_box('sharing_meta', 'wprss_feed', 'advanced');
    remove_meta_box('content-permissions-meta-box', 'wprss_feed', 'advanced');
    remove_meta_box('theme-layouts-post-meta-box', 'wprss_feed', 'side');
    remove_meta_box('post-stylesheets', 'wprss_feed', 'side');
    remove_meta_box('hybrid-core-post-template', 'wprss_feed', 'side');
    remove_meta_box('wpcf-marketing', 'wprss_feed', 'side');
    remove_meta_box('trackbacksdiv22', 'wprss_feed', 'advanced');
    remove_meta_box('aiosp', 'wprss_feed', 'advanced');
    remove_action('post_submitbox_start', 'fpp_post_submitbox_start_action');
}, 100);