From 270ece840db52c1b0b669e7385b79d7ca37a002e Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Tue, 11 Dec 2018 02:09:59 -0700 Subject: [PATCH] Add membership expiration dates and payment status --- database.mwb | Bin 10844 -> 11181 bytes langs/en/labels.json | 11 ++++++++++- lib/Family.lib.php | 29 +++++++++++++++++++++++++--- pages/families.php | 5 ++++- pages/payments.php | 19 ++++++++++-------- public/actions/submitmembership.php | 9 ++++++++- public/parts/verify.php | 4 +++- 7 files changed, 62 insertions(+), 15 deletions(-) diff --git a/database.mwb b/database.mwb index 0d55c980a783fbb2609ec5fdb4adad1b8c910eaf..af3129df75ff1358f307c7f6011797ad28ab68dc 100644 GIT binary patch literal 11181 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 literal 10844 zcmZ{KWl$wL($>l8CHPL&T;B*zoS!#~1wILeyKgji>_xK>t!0h!zxb2VvK31s%QRKJy+X4j znCljTp|!_}67wdsYcpaYJYf5`zugN>6veC*Jme!n(~Geh;w zj52z>BO~>5+8(rI?^AhaRH2a7cmuj7pTkm9q43#P;Im*P|>ZISCyWA|!mf zCknyzRu;tR@H0swA}-Ws7g-5~iy4Vk;-HtZSdc?Og}6ErGb%Hjk}g=M0QC zT>|tJRw6{AStvI~W#PO@JfwXaCuE98JPXKei%`sF&_)SLVvX9RrO1D|{(;wEsD*UI z=pO_XL$BC*tNY{Gl!G80Spi_tk9doV12s)KxjXYkB}s$wHoo$rFZ+qYJWnZq34iEu5Qj_1|%7dC&B2<1eAdix&O=M#n~U=_=X!J8d(wT`4ebzuCBV>)wn zPhjFo?4ZNR&a9_yUFFuS{)=R-x1vtDMBtz!>&xD|7ISi#C78v`FxxQEH{lPitYoHV*M<6z? z)lKlX;=w15$?2%|aVT&%D)5N2V>th>w)54b5^VlpD(gduj9~@}a`o498CF(@!|20P zHk#jBS+UU(0zU=F+>C}Kb$rZs#Xx||2tyk9N8tHHPNoy!Gt%pp0?{xT?M1$TJN@^1 zP~+RsKroemq}Oo>M}XPO(f!7*vCc4dm&uom5Ez9i6N904<5OPc9Sp^Ee%NOpM*<=J zUCTJ+El;#2%0SCYBMnAEVulJ5Um>DzpkSfs{!!X=Hg#{Al!yT25Bl<#%IEG7WFyi; zZKpgt)7*S~H|s$J8f|a%JSg0ZDAOj9=E=LroMCvyyDG)KbFNzU-T?;Cm&f#y*0gAz z_zp(JZLkKmy9g}&KB#;o8h7pvgTtp;`kd8S)$GGNZ(06(#sCN00k24Lwpwl^CVsXbOSJ@T$>5Lpv%R}Oc@O0eHxCrKap zg-d5GLE(~%7&|wVN z3g=M4m?L#IpKQexhdw{K9@FKQmBqo*#=vz1J^NT6ZiGIoZKuR=v8(iOj4PPTK3GeP z?-aV3aHW>ZqSg9@2$s6S!V=`$_-NBo7~maY{uPRIZV2Ea_EnTn#6F=i-9UFpn7gTb z|F{s%*j!}|z@R!=vhp$oEmRD3UTvcCu?JD0s08`WCFza_o)m;|T!ehiHR>}?2yfi; z62;pbSkm*7#M>M|-yWI@3$S{Vk|3b^tH zIF$IMfj;ab*k?Uy`ekpl5h!OC&0^pOf0QFv6to^Pd*V4d^C}*1^$taNq(GmMI??0>hlqi8ix48 z4z_pNeV?w3pXvZYte&~}B0ereHpgfhvbjPh2K0;gSFUje1`LnU^{Fo`>9k`KibyV0 z?*@2pQY{6kVn~F1EGe2bF<5t=9NalF)M<6u4-AM7cS2celyB^c>boSUAMe;vYXv0G z@x;bC6{6efZ21^}UITrqnd@p2myb+5U+I3ua_F-X?Cy)Gcaw6~2?peyh)HN1{4~nx zou1W)57CDb8)v1&lV#n9=vQGxL;4c-0EZO6cf9Oc2h}eaKn8<>wDL=N1spISO|3Mt z58r+M!sv^)XNH9(sUl4-fH}A!Cb9Zj=0Hsu0hegj>wYjbtY=1F;W%b8r=?cFRoK)_ z51KQ)xzCY_Gu|Yx%l0R)%h`j14GODe=lFg{VlA)3B-9H80W^-H+bl;0zFncx)^s?4JB4cw%-_xNeQsvjMa9Nh583d_SuCH)(^Q<*% z-8rn9TBP8qb**<3_i(0*X52_kru|Y6iS+?SyBAeS5r^VmRiq0%u@)Jhpu1c>78Mdk zt}Wk$r&|UwvK;`H0L}T8r9io2+Hw@v#Db7pE`4@b4smt|rNKTqXvD+qxvp=&ygT2Rh#&m{P!pEk7eR8(Isg@hH zu|EJsm}hcwNj4j?9o@z;uCHit`8bea*UoOL1}#8UJhA(4nIk|#&RF9FXddRQp+t?Z zT}?!6Sm<5IJ-@km`hC%`b2e|EZ@*5KOv#z6&v2J?#2HXAlV2sK=m+-kIAGUd!17oX zo~UI4__zV~r+*+Hox&?$cKpVjTYfxZ;(3(x%ghh?PFNK(!8N7^Qu@B?-OnC+3o6~n zIU_noq9dsg&>P;tY*;mq^;C4!Ovew8(ir!LsS0VsVFxEZwi$51huHF$2KE1bK4Y zRK7_<;za63blC0!PXs+(WHq8|CE;UN9^$O6QI8;jATlk3A+l?!*tBkex+3Bn+7Yfi|cd}5}Ub5haD(;WWP|P zv~(9yn63CktS;{F6({D>dyGLLvgNJpKs(N|3A;Ot9D-bSDTWhXuGc6W7gQ7I6Iybi{BTA8)RS8y z{h(vFt5@bnqo%i9XK=!zPH9Q$Vj*!HF*|@!|!18(mF7 z56g%YF63cfJAo5Vho+}MGl$BTM>vr@&WqgX4kd1WsPxLlg3!zLfaBQ!j>c8E&rmU# zBNxe0>$Cqzi82Y0O_6Um>&V7Z)h8XzjKk>7Wgu#>=l+fq!JsB;CL6Y#gtigfPOT>T znuRfYIj>L*8c9M+!ys1^O|O9^O2e3aN==o} zIqcM&u)Kt3Mfi{1$cYNmv1$8_y|7Rsk-wmQ@sIEK|I2P`$&)*(V$O&#{PKH{c}>WMp|XyFtk# zyaQjlv-X|+e4HJDKm44WnZTMi3pwMbe%@=S{GvfDSzsl1#N`;S?a80sH4ga2Ck~7p zS3_gxq%CH0ROya}GS|<(hz!3|*hbva%1pnvmQff2!JH-Ne6kJf^;Ztf_oEe~9=!KK zN-Qw1&V}Q!pt-szL$+-G?yIWx?|fn)u;GJf@wjtjpoK0$b*zwX-5_gyXxa!^d$hvG zu-D#ce#>d+YAnjzI?Xg0WnMoK#s*o-bY#i4iA5N@u^v<>a3;{XXUMhL_|?}PB=My~ zud*K~hG~wk5@#$~GdAf^CtO;PmsMWW$90PTy@kG^G4h+wC_|jsUJSHIpylw z6V~#c4_VDdCmsz}+7rgvXS(dY9t}6cjqxhSMO*jhf) z)@M)VGXSU!ya>Z-Eyd)*?-HVhV3%DazVjqora;Gul~33XbKgI;nj$o`20wv~db zjZKvL40E*?HFXwI8LPOv@xW##o;P&7{i*U03r2cm>}goC&v z6^9QX0twHlaKQ!0^1&s+wTk`e!4hg27D6Bw2oxkTwQaYL_b8P+K7+m2E~m+hC3;P| zFwKFk>{|VJ0Q>WA%!9p68n8*(B6fiump*^FlWTiU*Og0?+Oy<(6Jrh-zK}zo>|57hfjArcX-1cOh32&K48?#9h-sTHFPNsgfr^ z6$S~$H?5XGaZtyrdAb1O25SS-s8233`1*|^idxIA#0E6OI9>IaR7yyrYyEK8*#54W z_o>6gur->EQC|XO!vk*+D*y1*)tyyq=P2YQi`RajjicJpG~+1W5=0O!yC~dl1}qS{ zNSI+%K1q;Csa&M`Bm*EwKO+$hZ=M9$S}f@!h%I~sc5Mnb6vO< z98pJIxI&(4Tf~{GX0!`t+5ae;gX8ST(nZ97+L66(;`D8+AWg2B>B23n>ga~erlkmw zJ)=|+nA5b9LAhX!llq-YiNPKJ$+Cn4kKfS_VI~m0rz6>1sGA72mGaNM5PE3{9>BW7mFy4Qssd$d8uO4@4TP$Sa4+ZRId+k z@BEn3_h-A8QylU9pXYe52d-Zlj6fuBc92FZ8D&ghv&t(1U`d0uOUg)V8WX><`>UB< zehM&#To~J|4c1y!&n>AUt@VGy>8~!V88un19IRa{0vDLcaRYvKEGUMXaL?O`44dPU$*B%Eh6I2F>VwUyHaVlHllvW0i+vJY){Sr+; zKEXus%o}%k>^cpvWfBuYgq=H=aG#>OL!K8&sZ3~M)~}yzGrLe~Z$3|G5@JkXUNPt} z<5Nq%+;|DAluMyVqZVki_psEX?}SO2bapi&^AGp0H5f%)9fK{kX+JW;<}U7XW+q6J zX$WH0rLxJw+foDk1xkIclllwqno#XL@RjpC5NmgW{;bwoXU$Myd%Z_3BQayU zM{UK}?k@or;`PgVbsW^>!65S+BW?cHFXAqL=c~aWyYGY3NTm!Jbi|c(u;m{r3oTmw ztuFg&+JdcvT(ss)q3VkNyjYqP zzF@Auh9nc;NtWO6T~qMgRKm)=yGW8`s2nQb}R7*TA*0g4W3TQ;2O z#c4%JZh_#ro5m!?FEsIryN%K$i)ZeRWRvk$N3a%7Fang(c&&-MzO)OgBdFJ4F8L?& z-5|m4^D)`M%6e@Uu$?Iz(LnJPk8#1sO_o@)8Bf;ImLLL8wZD!un|QBRaUgDt44?`< z3t?heq_m772474IHxQTp_N6c|geGbhtpnZ{LyQ4Y6%$U?jb9`-oZB@gjEvJUpcp}Q zMkMg2fR>^FLPhiYwjhGu?~qan?y;0S(mz`E1R!NmI*-^m5w#?N<09!U`#+!R{4lJcCv z@jBEj$pQ)ESe#_VzLEazOzINhw;NR63T>~^cV=~(5vBTpPj+vrryy_dmc;z46j{skrkcHo66jJR?TNcQ}kA%!Xt8r6=pA736sMUpthC2Ts)|pqj2J#RK$O`nB zCJ5{4dU5k}nuNR!30^|JJ@U)U@jWAi8j1 zNfu^XXI^W|6I(x*`hdbnXD%n4pGBWwK!_lhnrBIk8koV98byZL4SO+0l9(aaWW^F6 zi=-LI!jY)#HWYwu;?Gn=E0ZRzx?)8iP5TBUH%Y~nqE9lg4`F{}w8n;`)L11Afa>SQ z4)vg?X}VxyZd-xflw{P6&J?RW9}j}`B1pB$ylE@j~D^T+P1A@0(XpVnvM zUDUzc_G+SIw?UxX@W7etygWKV^<2cyDXlTTY?el(N$8A-?7+xeqwEPhgMP<|!LFV9Txv z1Y36^Zu(2=XXWU7cZ_L_S>>s&ZkErZwC}E|74Mb`+vQ2UZl2DdwC_CpA|+5RQo=O^ z+Cj)7+N~N&5#nZ178+xGPyKzyq41+x!PBLWpYgladrA9scr=f44zq)xll9WUl( zmXf`YzFyAyhfU2-MpVQ#4eW|YyVcZ)jhs)XE!9CqKb{p+25L?lf%K*vd`<*@mH~-~ zAbvG8-(p8sCpR}wMd|YrphP0NA_V1C%-|N0p@B0Bz`GNrp_ zp^g#_S2}6}<+An3L)5gf96_G0t%Ez5Vt=&~*WMG+T&q>(kZwi1o};SZyX1A2lii5X zOlEr#IM?$@z>Swgqj6DJVNZJ^>3ubgr(Z+=9_s0-M0*?$;@{HwN&(DVqR9Pi;pnYd zpcsw@i14?Bi!`ehyEt(R}(QfZBl0hnNF1!{8L=H6*@=TaNBIS=uxIJB* zKp|3lI{@UrW%S<=+|t{Yn)vx|kG%Q5Ox~4b0X^03~Y*thos18{{@|&N(h@DW-|YA##=B;AIIEBkSsj?N&X&$6gSs zlnCDTy)oQeX#LvxTg$6KUu5B32NVq1Ei9a-jWU{JiueEArD&-(;FcYHN5Z4@#!C@ z0Ptc9XY9cp4_C6xm2n2=GUpShjd4TBlZl!4ruW)HtE-chIJhZ$XU#AUb$8 zJ}9+?AIkfhvVrsG2h%Eyki6wkbeeG{ow84k5ed1Ym-7a_O;+a(W*_gnk-3pAe>#ze zqTb$^orAepSl+M7c_l{#3bP%tLK9VzvV~%e_YZJ0=+AC_>tYbqQ=`SvJi+_yXwlH4 zj4gD|VVO{{=GZIT47{_`zQ}DyP`nD@ZG(LF9o8dRsd09M2>;9-HDGGa z7%#3E`iGOHy^*n9tj1eoxPaL)y-{WUhAimYy_@*`QdQL5>lWtI*XSeOgXxW~g;yZO zj7{{*5~9CjyC(ktijUIbCN=sf*dhmlg&+Z5u-*lIZk|k72c3r$_;mj}VUF-dR<0Xb z&Oial@?!XDDuGYxdqePwh?qTL6 z#zxBM^ZYqm`=&EWE^zJw515WfWi`@bG*S^BkMiOrR!zL}<0wY+o}$SsnGh=vJU3Vl z<#8f4rA~aUb|28fJe%O~D?tmhKw7SQB4L~Zh{IQXyW;dNZDTe3G#S-@V%cTEP$XTw zcm5N-#r7vsyZqRKc2w(0d3A{VPrA;L*b@rJO#q)SHLAg031HyMN*AHtjxC-SiQlt` z!1D`OtP$D=*hmSRC-ol@ikx+B0$}%XBS4J_Y5nMK%A(0fe9`+5jMx3p$o=O0n*eZC zyVb{8{qAQ`M6`l7!gYETcgXE+j{R}6y;X?GTCx3Uxiw#id1*{u8R?d-Wt0DI>*!y|McMmrj(mOj`3SHJ9rR+!GT|M&3$hdOW8o1a$v6o%9@IR zhLp0qg}Ll5H^b;`%Cbmw?hJKdxtk!{mj%hda%+6q2;>*ctY|9UU$QQ=oyVnvrubUb z#rD`0tJ-!8m;d}O{ai%8ow}-=I+TB>e=1}ue?^Z^r&%HAw*=9 z)&lRHWt?n8(x*WLrwu94Z8qmlwo0A6-H71mKO1u#Tw>pKw4vG62q?nRs!Agu3dcp4 zAM*6OQ<_A%4{0p8y#~O~7@TpkqWZa$5q8DVTNqeqN*SeTq*OX|vL_oD} z#*1J9xHfwmE~LElp8!M+6PHm%Cv+%nsPj5-F^X&=i00}65Wl-)EVhyC4j|{l1srP; z2%S9(aF*)5Cj(>$*EE=yKB*XRL;ATV1+CLfeBZc1`|;?%D^3>xW4^G;$?(b10wAkL z8*$sKm6A>ry|Ha@hKO>p4O@P<>Ohf_fT!z=*WDI}^9wX=WZjXbvdx4k_&Y@P;4t;z z))(kKV?w8CnC{>_lyocHVeN@VD+qcm3C9J@(DrgK-h5JGkIs3mu(z{|K@BmI$RDT7 z%KRWg`c2OT3{v?wheEYZP#Tv)7`BA^F#Rh7)PNR_{edo7R@*k!Rkc)!B|^KSCbiCs zYG<~@H@lRdTw*`qIxRMFgEUWvAHJu@rD%LTe;6PG#(l5uLl0bb8er3>@|4q#^*zHg zopUwbYnoliWMtSfs~Sz!*eAOaZcPp@qg`&g zi7@|lpocy@MwRh`?Kbys!G(^`a}8odf?+)g%XtKk!D#xw1~=kC$zQP}%|5COPY z@XUMICz2Yjj?Az~ww-B6B{gA3m|dOyjIPO}Xyl!EyClVc6^RX!C-{y3 zHVQAY-!!-M5w?Cs^*=cyiA|s~zG$Hld+!R1Q@Xy#%iD{HuTsOgQ9|UkzP-EA3dp1g zeYdqDPjJ%DPu?y-ljgeS(w3c@n+lUXEYbfZ$unS4?&wSI4M>1Ae{YB^Ls>{+mX!SR z=+{Nzcf-z695SZw^G^#n8-ih>sIiwjk&h_L_G-!cKk{V~;&3N@_uJnqH4N>_0z?u4 zky4&~jO~k*RRmUgzxJJc>jdb#r(Gr3z|8M48Z<1+Y7pMWc%71i*@xQ%&2&RS4YGcH% z0iDr{xUB?=F~Y>J@0bReif)xs#l<7l6xo+1e z&w9ZZ1%)~tV=pD^f$Swk4%qe)10n}DOj$qPZ1OtR_vkD;3-OwAfdoqIfz`n!DH*BF zpw(-jq4|3!Ro#R=C!P{FF-g{-WrEiq+<20n(-hd$E}W&{JG8DXK)< zR9MSR0mc4KKhrMpWL)vCAthLeQig|um%}#~xB?Mk)4Ros?**#gmUyrqg35`&E(-Ez z)vUtUtNg4p2h1&vFQZ8YK18?%U>9QN#Sh<+7AS&W^Ds(!FxKRd7XMHLD(rBE=KBRh zdWSYt)-FayRM&qExsNmFN#@LmmKc+hX#F;ubY2vAtd?nRZkbq}5&27JKdTp@ZUiX> zO|J|#jkPg-|EB93TUROUepkU9`Az07Z2H^V)VwR=axskhg42j0U9za}EaMu$aI=uL z>!ca!bA6!V@(yo|v-8+>T%sN_>idoH9``5)o>?V=VL7oj(-Vt;-SFKN;*Pe`rOJ)h z%oxt8L+4z(YNMG}>>at1Jf!Zat%KhQ*B$rg^IWXw@YWv52Z{3krn-QE34aS!&^?wg zh51Wy`DZ}=9kvdpHf-!)Ik~|8j~(2XO{uRPzCM;&gF2>AeCKo#6 z4)cooBbFx7*8W zW{%NzunG~i@IgCw_K^Xs|6VKG?b)8eF49Z5Zj9$;4%?8v$3=y`>M>4E@i6p_`_0#z zvggF-C{rUN4|DFM5Mx8sm50L-=9Ca%tg&SwwM?C%-Ns3Vd6-VARqE^jo6zA!K$K4E|lrCU^JDIGMaBmbJavy3Y1J|FqpJupU zSG27)Egcv9RH1igxYsGl^d9em!pz&tF!-A zvv&c2iG@T=(Ki>NXV5Pa7r|n>?v*s6NT=$#0IRkAo!^7B>Hy83ux}|3$T-2oscwX>!AN$@q13 zhAaGI%}pfLJa6ne$LW(v@GF45Pv~4R7js)Ta$&G2SoMz*Et3K+!(6UvC;wOERZ-;; zCB;BlrVB1rOn>RAWFuVe3?s6k=nUV?ULc2p8AF1Z`MGMwZo<0+sTHo-foM5Yy_-r4 z%h-1^A%l@1q%*Uua}ACT6ouC0 z^IQ?*uIxv*EDK$|^eh(U4HyT-Ef~Lz>ttPDvUJ*g8tUNeyj{4d7i8QmE0#NB4)}&W z>$NnEHhpPKe|_zbSg+qsQ-g%=>0a)k7DJ!Q%y6+!;soA3QWMAw*}`bK=Y}OriRb2M5tbJT3CRoP1wg=Em}Kp{O)Sgd-w$MnPao`=9*6HTu@~YN z#rqy@Y_YC;H8xBBgj?SjWMoLFKAic5;KVN}?7A_+>>UfqA z^J%f8MN^NHQLLWI=Bp|G?|=*J61J04k2Sbi&Cbb^@uh#SBbf7f*9RlT1rwqb{PY9G zZ0{my@ei)0T(P2CN3=E|vwv+^7e6uP28Vou(>40lC$yk#c@Yql9&0=J6Z`arunYr) zrakXH{4+dUUg+b_?6gPd`zI0-AEP%=_vo{jx{XPiP1m z7a{Cy*XJjuvK%-B7Uch*VEGqN{%y?x|A_yWZuwvD{~5FX;|m7X9B}rRwD}K${nz7v zMz8;RU{d^FSf(ro{SU~2LH_M!f2AQE7?>cKf~T5_JgJrg(8k2v-qey*!NJVjmed$% nYH8(WPRhp2ieUGThRNB~(%jD2nU~bk_@9-zoryWn8R35cTST4+ diff --git a/langs/en/labels.json b/langs/en/labels.json index b137f74..429fd9a 100644 --- a/langs/en/labels.json +++ b/langs/en/labels.json @@ -34,5 +34,14 @@ "DOCX": "DOCX", "Amount": "Amount", "Date": "Date", - "Paid": "Paid" + "Status": "Status", + "Paid": "Paid", + "Unpaid": "Unpaid", + "Type": "Type", + "Online": "Online", + "Cash": "Cash", + "Check": "Check", + "Other": "Other", + "Free": "Free", + "Expires": "Expires" } diff --git a/lib/Family.lib.php b/lib/Family.lib.php index 384de00..96aa626 100644 --- a/lib/Family.lib.php +++ b/lib/Family.lib.php @@ -21,6 +21,7 @@ class Family { private $photo = false; private $newsletter = 1; private $children = []; + private $expires = 0; public function __construct() { @@ -53,7 +54,8 @@ class Family { 'zip', 'father_name (father)', 'mother_name (mother)', - 'photo_permission (photo)' + 'photo_permission (photo)', + 'expires' ], [ "familyid" => $this->id ]); @@ -71,6 +73,7 @@ class Family { $this->zip = $f['zip']; $this->photo = $f['photo'] == 1; $this->newsletter = $f['newsletter']; + $this->expires = $f['expires']; foreach ($children as $c) { $this->children[] = (new Child())->load($c); @@ -93,7 +96,8 @@ class Family { "state" => $this->getState(), "zip" => $this->getZip(), "photo_permission" => $this->getPhotoPermission(), - "newsletter_method" => $this->getNewsletter() + "newsletter_method" => $this->getNewsletter(), + "expires" => date("Y-m-d", $this->getExpires()) ], [ "familyid" => $this->id ]); @@ -109,7 +113,8 @@ class Family { "state" => $this->getState(), "zip" => $this->getZip(), "photo_permission" => $this->getPhotoPermission(), - "newsletter_method" => $this->getNewsletter() + "newsletter_method" => $this->getNewsletter(), + "expires" => date("Y-m-d", $this->getExpires()) ]); $this->id = $database->id(); } @@ -172,6 +177,10 @@ class Family { return $this->children; } + public function getExpires(): int { + return $this->expires; + } + public function setName(string $name) { @@ -252,4 +261,18 @@ class Family { $this->children[] = $child; } + /** + * Set the membership expiration date to either a UNIX timestamp or a date + * string. + * @param int $timestamp + * @param string $date A string parseable by strtotime(). + */ + public function setExpires(int $timestamp = null, string $date = null) { + if (is_null($timestamp) && !is_null($date)) { + $this->expires = strtotime($date); + } else if (!is_null($timestamp) && is_null($date)) { + $this->expires = $timestamp; + } + } + } diff --git a/pages/families.php b/pages/families.php index 5367ce0..4ddb6ea 100644 --- a/pages/families.php +++ b/pages/families.php @@ -14,7 +14,7 @@ if (!$user->hasPermission("HACHEPORTAL_VIEW")) { $writeaccess = $user->hasPermission("HACHEPORTAL_EDIT"); -$families = $database->select("families", ['familyid (id)', 'familyname', 'phone', 'email', 'father_name (father)', 'mother_name (mother)']); +$families = $database->select("families", ['familyid (id)', 'familyname', 'phone', 'email', 'father_name (father)', 'mother_name (mother)', 'expires']); ?>
@@ -32,6 +32,7 @@ $families = $database->select("families", ['familyid (id)', 'familyname', 'phone get('Mother'); ?> get('Phone'); ?> get('Email'); ?> + get('Expires'); ?> @@ -55,6 +56,7 @@ $families = $database->select("families", ['familyid (id)', 'familyname', 'phone + "> select("families", ['familyid (id)', 'familyname', 'phone get('Mother'); ?> get('Phone'); ?> get('Email'); ?> + get('Expires'); ?> \ No newline at end of file diff --git a/pages/payments.php b/pages/payments.php index 7148f98..e517f61 100644 --- a/pages/payments.php +++ b/pages/payments.php @@ -14,7 +14,7 @@ if (!$user->hasPermission("HACHEPORTAL_VIEW")) { $writeaccess = $user->hasPermission("HACHEPORTAL_EDIT"); -$payments = $database->select("payments", ['paymentid (id)', 'familyid', 'amount', 'paid', 'date']); +$payments = $database->select("payments", ['paymentid (id)', 'familyid', 'amount', 'paid', 'date', 'type']); ?>
@@ -26,11 +26,12 @@ $payments = $database->select("payments", ['paymentid (id)', 'familyid', 'amount - get('Actions'); ?> + get('Family'); ?> get('Amount'); ?> get('Date'); ?> - get('Paid'); ?> + get('Status'); ?> + get('Type'); ?> @@ -39,7 +40,7 @@ $payments = $database->select("payments", ['paymentid (id)', 'familyid', 'amount ?> - + load($p['familyid'])->getName(); ?> $ - get("Yes") : $Strings->get("No"); ?> + get("Paid") : $Strings->get("Unpaid"); ?> + get($p["type"]); ?> select("payments", ['paymentid (id)', 'familyid', 'amount - get('Actions'); ?> + get('Family'); ?> get('Amount'); ?> get('Date'); ?> - get('Paid'); ?> + get('Status'); ?> + get('Type'); ?> \ No newline at end of file diff --git a/public/actions/submitmembership.php b/public/actions/submitmembership.php index c1ff37f..7b225fc 100644 --- a/public/actions/submitmembership.php +++ b/public/actions/submitmembership.php @@ -112,6 +112,12 @@ $database->action(function($database) { } $family->setPhotoPermission($photopermission); + if ($renewal) { + $family->setExpires(strtotime("+1 year", $family->getExpires())); + } else { + $family->setExpires(strtotime("+1 year")); + } + $family->save(); // @@ -215,7 +221,8 @@ $database->action(function($database) { "familyid" => $family->getID(), "amount" => ($membership_cost / 100.0), "paid" => 1, - "date" => date("Y-m-d H:i:s") + "date" => date("Y-m-d H:i:s"), + "type" => "Online" ]); try { diff --git a/public/parts/verify.php b/public/parts/verify.php index 64744f0..2d294b6 100644 --- a/public/parts/verify.php +++ b/public/parts/verify.php @@ -5,6 +5,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +require_once __DIR__ . "/../../lib/Email.lib.php"; + $badcode = false; if (!empty($_POST['email'])) { if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { @@ -29,7 +31,7 @@ if (!empty($_POST['email'])) { $verification->setBody("The verification code for renewing your HACHE membership is $code."); $verification->send(); } catch (Exception $e) { - + } } else if (!empty($_POST['code'])) { if (empty($_SESSION['code'])) {