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/oraclevmware.com/www/wp-content/plugins/wp-rss-aggregator/src/Modules/
Upload File :
Current File : /home/oraclevmware.com/www/wp-content/plugins/wp-rss-aggregator/src/Modules/FeedTemplatesModule.php
<?php

namespace RebelCode\Wpra\Core\Modules;

use Psr\Container\ContainerInterface;
use Psr\Log\NullLogger;
use RebelCode\Entities\Properties\Property;
use RebelCode\Entities\Schemas\Schema;
use RebelCode\Wpra\Core\Data\ArrayDataSet;
use RebelCode\Wpra\Core\Data\Collections\NullCollection;
use RebelCode\Wpra\Core\Entities\Collections\FeedTemplateCollection;
use RebelCode\Wpra\Core\Entities\Stores\BuiltInTemplateStore;
use RebelCode\Wpra\Core\Handlers\AddCptMetaCapsHandler;
use RebelCode\Wpra\Core\Handlers\FeedTemplates\AjaxRenderFeedsTemplateHandler;
use RebelCode\Wpra\Core\Handlers\FeedTemplates\CreateDefaultFeedTemplateHandler;
use RebelCode\Wpra\Core\Handlers\FeedTemplates\HidePublicTemplateContentHandler;
use RebelCode\Wpra\Core\Handlers\FeedTemplates\PreviewTemplateRedirectHandler;
use RebelCode\Wpra\Core\Handlers\FeedTemplates\RenderAdminTemplatesPageHandler;
use RebelCode\Wpra\Core\Handlers\FeedTemplates\RenderTemplateContentHandler;
use RebelCode\Wpra\Core\Handlers\FeedTemplates\ReSaveTemplateHandler;
use RebelCode\Wpra\Core\Handlers\NullHandler;
use RebelCode\Wpra\Core\Handlers\RegisterCptHandler;
use RebelCode\Wpra\Core\Handlers\RegisterSubMenuPageHandler;
use RebelCode\Wpra\Core\RestApi\EndPoints\EndPoint;
use RebelCode\Wpra\Core\RestApi\EndPoints\FeedTemplates\CreateUpdateTemplateEndPoint;
use RebelCode\Wpra\Core\RestApi\EndPoints\FeedTemplates\DeleteTemplateEndPoint;
use RebelCode\Wpra\Core\RestApi\EndPoints\FeedTemplates\GetTemplatesEndPoint;
use RebelCode\Wpra\Core\RestApi\EndPoints\FeedTemplates\PatchTemplateEndPoint;
use RebelCode\Wpra\Core\RestApi\EndPoints\FeedTemplates\RenderTemplateEndPoint;
use RebelCode\Wpra\Core\Templates\Feeds\MasterFeedsTemplate;
use RebelCode\Wpra\Core\Templates\Feeds\TemplateTypeTemplate;
use RebelCode\Wpra\Core\Templates\Feeds\Types\ListTemplateType;
use RebelCode\Wpra\Core\Wp\Asset\ScriptAsset;
use RebelCode\Wpra\Core\Wp\Asset\StyleAsset;
use WP_Post;

/**
 * The templates module for WP RSS Aggregator.
 *
 * @since 4.13
 */
class FeedTemplatesModule implements ModuleInterface
{
    /**
     * {@inheritdoc}
     *
     * @since 4.13
     */
    public function getFactories()
    {
        return [
            /*
             * The properties for feed template entities.
             *
             * @since 4.16
             */
            'wpra/feeds/templates/properties' => function () {
                return [
                    'id' => new Property('ID'),
                    'name' => new Property('post_title'),
                    'slug' => new Property('post_name'),
                    'type' => new Property('wprss_template_type'),
                    'options' => new Property('wprss_template_options'),
                ];
            },
            /*
             * The default values for feed template entities.
             *
             * @since 4.16
             */
            'wpra/feeds/templates/defaults' => function () {
                return [
                    'id' => null,
                    'name' => '',
                    'slug' => '',
                    'type' => '',
                    'options' => [],
                ];
            },
            /*
             * The schema for feed templates.
             *
             * @since 4.16
             */
            'wpra/feeds/templates/schema' => function (ContainerInterface $c) {
                return new Schema(
                    $c->get('wpra/feeds/templates/properties'),
                    $c->get('wpra/feeds/templates/defaults')
                );
            },
            /*
             * The store to use for built in templates.
             *
             * @since 4.16
             */
            'wpra/feeds/templates/builtin_store_factory' => function (ContainerInterface $c) {
                $settings = $c->get('wpra/feeds/templates/display_settings');

                return function(WP_Post $post) use ($settings) {
                    return new BuiltInTemplateStore($post, $settings);
                };
            },
            /*
             * The data set that contains the legacy display settings.
             *
             * @since 4.16
             */
            'wpra/feeds/templates/display_settings' => function (ContainerInterface $c) {
                if ($c->has('wpra/settings/general/dataset')) {
                    return $c->get('wpra/settings/general/dataset');
                }

                return new ArrayDataSet([]);
            },
            /*
             * The name of the feeds template CPT.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/cpt/name' => function (ContainerInterface $c) {
                return 'wprss_feed_template';
            },
            /*
             * The labels for the feeds template CPT.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/cpt/labels' => function (ContainerInterface $c) {
                return [
                    'name' => __('Templates', 'wprss'),
                    'singular_name' => __('Template', 'wprss'),
                    'add_new' => __('Add New', 'wprss'),
                    'all_items' => __('Templates', 'wprss'),
                    'add_new_item' => __('Add New Template', 'wprss'),
                    'edit_item' => __('Edit Template', 'wprss'),
                    'new_item' => __('New Template', 'wprss'),
                    'view_item' => __('View Template', 'wprss'),
                    'search_items' => __('Search Feeds', 'wprss'),
                    'not_found' => __('No Templates Found', 'wprss'),
                    'not_found_in_trash' => __('No Templates Found In Trash', 'wprss'),
                    'menu_name' => __('Templates', 'wprss'),
                ];
            },
            /*
             * The capability for the feed templates CPT.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/cpt/capability' => function () {
                return 'feed_template';
            },
            /*
             * The user roles that have the feed templates CPT capabilities.
             *
             * Equal to the feed sources' CPT capability roles, if available.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/cpt/capability_roles' => function (ContainerInterface $c) {
                if (!$c->has('wpra/feeds/sources/cpt/capability_roles')) {
                    return ['administrator'];
                }

                return $c->get('wpra/feeds/sources/cpt/capability_roles');
            },
            /*
             * The full arguments for the feeds template CPT.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/cpt/args' => function (ContainerInterface $c) {
                return [
                    'exclude_from_search' => true,
                    'publicly_queryable' => true,
                    'show_in_nav_menus' => false,
                    'show_in_admin_bar' => false,
                    'has_archive' => false,
                    'show_ui' => false,
                    'query_var' => 'feed_template',
                    'menu_position' => 100,
                    'show_in_menu' => false,
                    'rewrite' => [
                        'slug' => 'feed-templates',
                        'with_front' => false,
                    ],
                    'capability_type' => $c->get('wpra/feeds/templates/cpt/capability'),
                    'map_meta_cap' => true,
                    'supports' => ['title'],
                    'labels' => $c->get('wpra/feeds/templates/cpt/labels'),
                ];
            },
            /*
             * The handler that registers the feeds template CPT.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/register_cpt_handler' => function (ContainerInterface $c) {
                return new RegisterCptHandler(
                    $c->get('wpra/feeds/templates/cpt/name'),
                    $c->get('wpra/feeds/templates/cpt/args')
                );
            },
            /*
             * The handler that adds the feed templates CPT capabilities to the appropriate user roles.
             *
             * Resolves to a null handler if the WordPress role manager is not available.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/add_cpt_capabilities_handler' => function (ContainerInterface $c) {
                if (!$c->has('wp/roles')) {
                    return new NullHandler();
                }

                return new AddCptMetaCapsHandler(
                    $c->get('wp/roles'),
                    $c->get('wpra/feeds/templates/cpt/capability_roles'),
                    $c->get('wpra/feeds/templates/cpt/capability')
                );
            },
            /*
             * The admin feeds templates page information.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/submenu_info' => function (ContainerInterface $c) {
                return [
                    'parent' => 'edit.php?post_type=wprss_feed',
                    'slug' => 'wpra_feed_templates',
                    'page_title' => __('Templates', 'wprss'),
                    'menu_label' => __('Templates', 'wprss'),
                    'capability' => 'edit_feed_templates',
                    'callback' => $c->get('wpra/feeds/templates/admin/render_handler'),
                ];
            },
            /*
             * The handler that registers the feeds template submenu page.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/register_submenu_handler' => function (ContainerInterface $c) {
                return new RegisterSubMenuPageHandler($c->get('wpra/feeds/templates/submenu_info'));
            },

            /*
             * The default feed template's slug name.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/default_template' => function (ContainerInterface $c) {
                return 'default';
            },
            /*
             * The available template types.
             */
            'wpra/feeds/templates/template_types' => function (ContainerInterface $c) {
                return [
                    'list' => $c->get('wpra/feeds/templates/list_template_type'),
                ];
            },
            /*
             * The master feed template.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/master_template' => function (ContainerInterface $c) {
                return new MasterFeedsTemplate(
                    $c->get('wpra/feeds/templates/template_types'),
                    $c->get('wpra/feeds/templates/collection'),
                    $c->get('wpra/feeds/templates/feed_item_collection'),
                    $c->get('wpra/feeds/templates/container_template'),
                    $c->get('wpra/display/feeds/legacy_template'),
                    $c->get('wpra/feeds/templates/master_template_logger')
                );
            },
            /*
             * The generic template type template.
             *
             * @since 4.14
             */
            'wpra/feeds/templates/generic_template' => function (ContainerInterface $c) {
                return new TemplateTypeTemplate(
                    $c->get('wpra/feeds/templates/generic_template_default_type'),
                    $c->get('wpra/feeds/templates/template_types'),
                    $c->get('wpra/feeds/templates/feed_item_collection'),
                    $c->get('wpra/feeds/templates/container_template')
                );
            },
            /*
             * The default template type to use for the generic template.
             *
             * @since 4.14
             */
            'wpra/feeds/templates/generic_template_default_type' => function (ContainerInterface $c) {
                return 'list';
            },
            /*
             * The template for the HTML container that wraps all rendered templates.
             *
             * @since 4.14
             */
            'wpra/feeds/templates/container_template' => function (ContainerInterface $c) {
                $twigTemplates = $c->get('wpra/feeds/templates/file_template_collection');

                return $twigTemplates['feeds/container.twig'];
            },
            /*
             * The feed item collection to use with the master template.
             *
             * Uses the collection from the feed items module, if available.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/feed_item_collection' => function (ContainerInterface $c) {
                if (!$c->has('wpra/importer/items/collection')) {
                    return new NullCollection();
                }

                return $c->get('wpra/importer/items/collection');
            },
            /*
             * The logger to use for the master template.
             *
             * Uses the core plugin's loader, if available.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/master_template_logger' => function (ContainerInterface $c) {
                if (!$c->has('wpra/logging/logger')) {
                    return new NullLogger();
                }

                return $c->get('wpra/logging/logger');
            },
            /*
             * The collection of file templates.
             *
             * Uses the core plugin's Twig template collection, if available.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/file_template_collection' => function (ContainerInterface $c) {
                if (!$c->has('wpra/twig/collection')) {
                    return new NullCollection();
                }

                return $c->get('wpra/twig/collection');
            },
            /*
             * The list template type.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/list_template_type' => function (ContainerInterface $c) {
                return new ListTemplateType(
                    $c->get('wpra/feeds/templates/file_template_collection')
                );
            },
            /*
             * The collection of feed templates.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/collection' => function (ContainerInterface $c) {
                return new FeedTemplateCollection(
                    $c->get('wpra/feeds/templates/cpt/name'),
                    $c->get('wpra/feeds/templates/schema'),
                    $c->get('wpra/feeds/templates/default_template_type'),
                    $c->get('wpra/feeds/templates/builtin_store_factory')
                );
            },
            /*
             * The handler that creates the default template if there are no user templates.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/create_default_template_handler' => function (ContainerInterface $c) {
                return new CreateDefaultFeedTemplateHandler(
                    $c->get('wpra/feeds/templates/collection'),
                    $c->get('wpra/feeds/templates/default_template_data')
                );
            },
            /*
             * The data for the default feed template.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/default_template_data' => function (ContainerInterface $c) {
                return [
                    'name' => __('Default', 'wprss'),
                    'type' => $c->get('wpra/feeds/templates/default_template_type'),
                ];
            },
            /*
             * The slug to use for the default template.
             *
             * @since 4.14
             */
            'wpra/feeds/templates/default_template_slug' => function () {
                return 'default';
            },
            /*
             * The template type to use for the default template.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/default_template_type' => function () {
                return '__built_in';
            },
            /*
             * The handler that responds to AJAX requests with rendered feed items.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/ajax_render_handler' => function (ContainerInterface $c) {
                return new AjaxRenderFeedsTemplateHandler($c->get('wpra/feeds/templates/master_template'));
            },
            /*
             * The feeds template model structure.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/model_schema' => function (ContainerInterface $c) {
                return [
                    'id' => '',
                    'name' => '',
                    'slug' => '',
                    'type' => 'list',
                    'options' => [
                        'limit' => 15,
                        'title_max_length' => 0,
                        'title_is_link' => true,
                        'pagination' => false,
                        'pagination_type' => 'default',
                        'source_enabled' => true,
                        'source_prefix' => __('Source:', 'wprss'),
                        'source_is_link' => true,
                        'author_enabled' => false,
                        'author_prefix' => __('By', 'wprss'),
                        'date_enabled' => true,
                        'date_prefix' => __('Published on:', 'wprss'),
                        'date_format' => 'Y-m-d',
                        'date_use_time_ago' => false,
                        'links_behavior' => 'blank',
                        'links_nofollow' => false,
                        'links_video_embed_page' => false,
                        'bullets_enabled' => true,
                        'bullet_type' => 'default',
                        'custom_css_classname' => '',
                    ],
                ];
            },
            /*
             * Tooltips for feed template model fields.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/model_tooltips' => function (ContainerInterface $c) {
                return [
                    'name' => false,
                    'type' => false,
                    'options' => [
                        'limit' => __('The maximum number of feed items to display when using the shortcode. This enables pagination if set to a number smaller than the number of items to be displayed.', 'wprss'),
                        'title_max_length' => __('Set the maximum number of characters to show for feed item titles.<hr/><em>Leave empty for no limit.</em>', 'wprss'),
                        'title_is_link' => __('Check this box to make the feed item titles link to the original article.', 'wprss'),
                        'pagination' => __('Enable this option to show the pagination beneath feed items.', 'wprss'),
                        'pagination_type' =>  __('The type of pagination to use when showing feed items on multiple pages. The first shows two links, "Older" and "Newer", which allow you to navigate through the pages. The second shows links for all the pages, together with links for the next and previous pages.', 'wprss'),
                        'source_enabled' => __('Enable this option to show the feed source name for each feed item.', 'wprss'),
                        'source_prefix' => __('Enter the text that you want to show before the source name. A space is automatically added between this text and the feed source name.', 'wprss'),
                        'source_is_link' => __('Enable this option to link the feed source name to the RSS feed\'s source site.', 'wprss'),
                        'author_enabled' => __('Check this box to show the author for each feed item, if it is available.', 'wprss'),
                        'author_prefix' => __('Enter the text that you want to show before the author name. A space is automatically added between this text and the author name.', 'wprss'),
                        'date_enabled' => __('Enable this to show the feed item\'s date.', 'wprss'),
                        'date_prefix' => __('Enter the text that you want to show before the feed item date. A space is automatically added between this text and the date.', 'wprss'),
                        'date_format' => __('The format to use for the feed item dates, as a PHP date format.', 'wprss'),
                        'date_use_time_ago' => __('Enable this option to show the elapsed time from the feed item\'s date and time to the present time. <em>Eg. 2 hours ago</em>', 'wprss'),
                        'links_behavior' => __('Choose how you want links to be opened. This applies to the feed item title and the source link.', 'wprss'),
                        'links_nofollow' => __('Enable this option to set all links displayed as "NoFollow".<hr/>"Nofollow" provides a way to tell search engines to <em>not</em> follow certain links, such as links to feed items in this case.', 'wprss'),
                        'link_to_embed' => __('Tick this box to have feed items link to their embedded content, if they have any. This works especially well when links are set to <em>"Open in a lightbox"</em>.', 'wprss'),
                        'bullets_enabled' => __('Enable this option to show bullets next to feed items.', 'wprss'),
                        'bullet_type' => __('The bullet type to use for feed items.', 'wprss'),
                        'custom_css_classname' => __('You can add your own HTML class name to the template output. This lets you customize your template further using custom CSS styling or custom JS functionality.'),
                    ],
                ];
            },
            /*
             * Feed template's types options.
             *
             * @since 4.13.2
             */
            'wpra/feeds/templates/template_types_options' => function (ContainerInterface $c) {
                // The built in type, which appears as "List"
                $types = [
                    '__built_in' => __('List', 'wprss'),
                ];
                // Add all other template types
                foreach ($c->get('wpra/feeds/templates/template_types') as $key => $templateType) {
                    $types[$key] = $templateType->getName();
                }

                return $types;
            },
            /*
             * Whether template type selection is available or not.
             *
             * @since 4.13.2
             */
            'wpra/feeds/templates/template_type_enabled' => function (ContainerInterface $c) {
                return false;
            },
            /*
             * Feed template's fields options.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/template_options' => function (ContainerInterface $c) {
                return [
                    'is_type_enabled' => $c->get('wpra/feeds/templates/template_type_enabled'),
                    'type' => $c->get('wpra/feeds/templates/template_types_options'),
                    'links_behavior' => [
                        'self' => __('Open in same tab/window', 'wprss'),
                        'blank' => __('Open in a new tab', 'wprss'),
                        'lightbox' => __('Open in a lightbox', 'wprss'),
                    ],
                    'pagination_type' => [
                        'default' => __('Older/Newer', 'wprss'),
                        'numbered' => __('Numbered', 'wprss'),
                    ],
                    'bullet_type' => [
                        'default' => __('Bullets', 'wprss'),
                        'numbers' => __('Numbers', 'wprss'),
                    ],
                    'links_video_embed_page' => [
                        'false' => __('Original page link', 'wprss'),
                        'true' => __('Embedded video player link', 'wprss'),
                    ],
                ];
            },
            /*
             * The list of JS modules to load.
             *
             * @since 4.13.2
             */
            'wpra/feeds/templates/admin/js_modules' => function (ContainerInterface $c) {
                return [
                    'templates-app',
                ];
            },

            /*
             * The assets used on the admin templates page.
             *
             * @since 4.14
             */
            'wpra/feeds/templates/admin/assets' => function (ContainerInterface $c) {
                return [
                    $c->get('wpra/feeds/templates/admin/styles/main'),
                    $c->get('wpra/feeds/templates/admin/scripts/main'),
                ];
            },
            /*
             * The template style.
             *
             * @since 4.14
             */
            'wpra/feeds/templates/admin/styles/main' => function () {
                return new StyleAsset('wpra-templates', WPRSS_APP_CSS . 'templates.min.css', ['wpra-common']);
            },
            /*
             * The template script.
             *
             * @since 4.14
             */
            'wpra/feeds/templates/admin/scripts/main' => function (ContainerInterface $c) {
                $script = new ScriptAsset('wpra-templates', WPRSS_APP_JS . 'templates.min.js', [
                    'wpra-manifest',
                    'wpra-vendor',
                ]);

                $script = $script->localize('WpraTemplates', function () use ($c) {
                    return $c->get('wpra/feeds/templates/admin/states/main');
                });

                $script = $script->localize('WpraGlobal', function () use ($c) {
                    return $c->get('wpra/feeds/templates/admin/states/global');
                });

                return $script;
            },
            /*
             * The state for the templates script.
             *
             * @since 4.14
             */
            'wpra/feeds/templates/admin/states/main' => function (ContainerInterface $c) {
                return [
                    'model_schema' => $c->get('wpra/feeds/templates/model_schema'),
                    'model_tooltips' => $c->get('wpra/feeds/templates/model_tooltips'),
                    'options' => $c->get('wpra/feeds/templates/template_options'),
                    'modules' => $c->get('wpra/feeds/templates/admin/js_modules'),
                    'base_url' => rest_url('/wpra/v1/templates'),
                ];
            },
            /*
             * The global state of the application.
             *
             * @since 4.14
             */
            'wpra/feeds/templates/admin/states/global' => function (ContainerInterface $c) {
                $url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]";
                return [
                    'admin_base_url' => admin_url(),
                    'templates_url_base' => str_replace($url, '', menu_page_url('wpra_feed_templates', false)),
                    'is_existing_user' => !wprss_is_new_user(),
                    'nonce' => wp_create_nonce('wp_rest'),
                ];
            },
            /*
             * The handler that renders the admin templates page.
             *
             * @since 4.14
             */
            'wpra/feeds/templates/admin/render_handler' => function (ContainerInterface $c) {
                return new RenderAdminTemplatesPageHandler($c->get('wpra/feeds/templates/admin/assets'));
            },
            /*
             * The handler that renders template content.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/handlers/render_content' => function (ContainerInterface $c) {
                return new RenderTemplateContentHandler(
                    $c->get('wpra/feeds/templates/cpt/name'),
                    $c->get('wpra/feeds/templates/master_template'),
                    $c->get('wpra/feeds/templates/generic_template'),
                    $c->get('wpra/feeds/templates/collection')
                );
            },
            /*
             * The handler that hides template content from the public-facing side.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/handlers/hide_public_content' => function (ContainerInterface $c) {
                return new HidePublicTemplateContentHandler(
                    $c->get('wpra/feeds/templates/cpt/name'),
                    $c->get('wpra/feeds/templates/public_template_content_nonce')
                );
            },
            /*
             * The name of the nonce that allows template content to be shown on the public-facing side.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/public_template_content_nonce' => function (ContainerInterface $c) {
                return 'wpra_template_preview';
            },
            /*
             * The handler that listens to requests for previewing templates.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/handlers/preview_template_request' => function (ContainerInterface $c) {
                return new PreviewTemplateRedirectHandler(
                    $c->get('wpra/feeds/templates/preview_template_request_param'),
                    $c->get('wpra/feeds/templates/public_template_content_nonce'),
                    $c->get('wpra/feeds/templates/cpt/capability')
                );
            },
            /*
             * The name of the GET parameter to detect for previewing templates.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/preview_template_request_param' => function (ContainerInterface $c) {
                return 'wpra_preview_template';
            },
            /*
             * The handler that synchronizes the default template with the display settings.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/handlers/sync_default_template' => function (ContainerInterface $c) {
                return new ReSaveTemplateHandler(
                    $c->get('wpra/feeds/templates/collection'),
                    $c->get('wpra/feeds/templates/default_template_data')
                );
            },

            /*
             * The templates GET endpoint for the REST API.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/rest_api/v1/get_endpoint' => function (ContainerInterface $c) {
                return new GetTemplatesEndPoint($c->get('wpra/feeds/templates/collection'));
            },
            /*
             * The templates PATCH endpoint for the REST API.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/rest_api/v1/patch_endpoint' => function (ContainerInterface $c) {
                return new PatchTemplateEndPoint($c->get('wpra/feeds/templates/collection'));
            },
            /*
             * The templates POST endpoint for the REST API.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/rest_api/v1/post_endpoint' => function (ContainerInterface $c) {
                return new CreateUpdateTemplateEndPoint($c->get('wpra/feeds/templates/collection'), false);
            },
            /*
             * The templates PUT endpoint for the REST API.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/rest_api/v1/put_endpoint' => function (ContainerInterface $c) {
                return new CreateUpdateTemplateEndPoint($c->get('wpra/feeds/templates/collection'));
            },
            /*
             * The templates deletion endpoint for the REST API.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/rest_api/v1/delete_endpoint' => function (ContainerInterface $c) {
                return new DeleteTemplateEndPoint($c->get('wpra/feeds/templates/collection'));
            },
            /*
             * The templates rendering endpoint for the REST API.
             *
             * @since 4.13
             */
            'wpra/feeds/templates/rest_api/v1/render_endpoint' => function (ContainerInterface $c) {
                return new RenderTemplateEndPoint(
                    $c->get('wpra/display/feeds/template'),
                    $c->get('wpra/feeds/templates/generic_template')
                );
            },
        ];
    }

    /**
     * {@inheritdoc}
     *
     * @since 4.13
     */
    public function getExtensions()
    {
        return [
            /*
             * Register the templates UI assets for the admin-side.
             *
             * @since 4.14
             */
            'wpra/assets/admin' => function(ContainerInterface $c, $assets) {
                foreach ($c->get('wpra/feeds/templates/admin/assets') as $asset) {
                    $assets[] = $asset;
                }

                return $assets;
            },
            /*
             * Overrides the core display template with the master template.
             *
             * @since 4.13
             */
            'wpra/display/feeds/template' => function (ContainerInterface $c) {
                return $c->get('wpra/feeds/templates/master_template');
            },
            /*
             * Extends the list of REST API endpoints with the template endpoints.
             *
             * @since 4.13
             */
            'wpra/rest_api/v1/endpoints' => function (ContainerInterface $c, $endPoints) {
                $endPoints['get_templates'] = new EndPoint(
                    '/templates(?:/(?P<id>[^/]+))?',
                    ['GET'],
                    $c->get('wpra/feeds/templates/rest_api/v1/get_endpoint'),
                    null //$c->get('wpra/rest_api/v1/auth/user_is_admin')
                );
                $endPoints['patch_templates'] = new EndPoint(
                    '/templates/(?P<id>[^/]+)',
                    ['PATCH'],
                    $c->get('wpra/feeds/templates/rest_api/v1/patch_endpoint'),
                    $c->get('wpra/rest_api/v1/auth/user_is_admin')
                );
                $endPoints['put_templates'] = new EndPoint(
                    '/templates(?:/(?P<id>[^/]+))?',
                    ['PUT'],
                    $c->get('wpra/feeds/templates/rest_api/v1/put_endpoint'),
                    $c->get('wpra/rest_api/v1/auth/user_is_admin')
                );
                $endPoints['post_templates'] = new EndPoint(
                    '/templates(?:/(?P<id>[^/]+))?',
                    ['POST'],
                    $c->get('wpra/feeds/templates/rest_api/v1/post_endpoint'),
                    $c->get('wpra/rest_api/v1/auth/user_is_admin')
                );
                $endPoints['delete_templates'] = new EndPoint(
                    '/templates(?:/(?P<id>[^/]+))?',
                    ['DELETE'],
                    $c->get('wpra/feeds/templates/rest_api/v1/delete_endpoint'),
                    $c->get('wpra/rest_api/v1/auth/user_is_admin')
                );
                $endPoints['render_templates'] = new EndPoint(
                    '/templates/(?P<template>[^/]+)/render',
                    ['POST'],
                    $c->get('wpra/feeds/templates/rest_api/v1/render_endpoint')
                );

                return $endPoints;
            },
        ];
    }

    /**
     * {@inheritdoc}
     *
     * @since 4.13
     */
    public function run(ContainerInterface $c)
    {
        // Register the CPT
        add_action('init', $c->get('wpra/feeds/templates/register_cpt_handler'));
        // Add the capabilities
        add_action('admin_init', $c->get('wpra/feeds/templates/add_cpt_capabilities_handler'));
        // Register the admin submenu, unless E&T is active
        add_action('admin_menu', $c->get('wpra/feeds/templates/register_submenu_handler'));

        // Hooks in the handler for server-side feed item rendering
        add_action('wp_ajax_wprss_render', [$this, 'serverSideRenderFeeds']);
        add_action('wp_ajax_nopriv_wprss_render', [$this, 'serverSideRenderFeeds']);

        // This ensures that there is always at least one template available, by constructing the core list template
        // from the old general display settings.
        add_action('wpra/admin_init', $c->get('wpra/feeds/templates/create_default_template_handler'));

        // Filters the front-end content for templates to render them
        add_action('the_content', $c->get('wpra/feeds/templates/handlers/render_content'));

        // Hooks in the handler that hides template content from the front-end by requiring a nonce
        add_action('wp_head', $c->get('wpra/feeds/templates/handlers/hide_public_content'));

        // Hooks in the handler that listens to template preview requests
        add_action('init', $c->get('wpra/feeds/templates/handlers/preview_template_request'));

        // After settings have been reset, the default template and the display settings need to be synchronized
        add_action('wprss_after_restore_settings', $c->get('wpra/feeds/templates/handlers/sync_default_template'));
    }
}