From 23527a5bba922ae3a418ce429b0a52d477c8ab25 Mon Sep 17 00:00:00 2001 From: Novalnet-Technic Date: Fri, 26 Nov 2021 20:19:07 +0530 Subject: [PATCH] first commit --- assets/css/novalnet-checkout.css | 22 + assets/images/nn_loader.gif | Bin 0 -> 7356 bytes assets/images/novalnet.png | Bin 0 -> 5470 bytes assets/images/novalnet_cashpayment.png | Bin 0 -> 1636 bytes assets/images/novalnet_cc_amex.png | Bin 0 -> 1777 bytes assets/images/novalnet_cc_cartasi.png | Bin 0 -> 1460 bytes assets/images/novalnet_cc_carte-bleue.png | Bin 0 -> 2791 bytes assets/images/novalnet_cc_diners.png | Bin 0 -> 2044 bytes assets/images/novalnet_cc_discover.png | Bin 0 -> 1940 bytes assets/images/novalnet_cc_jcb.png | Bin 0 -> 2198 bytes assets/images/novalnet_cc_maestro.png | Bin 0 -> 1337 bytes assets/images/novalnet_cc_mastercard.png | Bin 0 -> 1384 bytes assets/images/novalnet_cc_unionpay.png | Bin 0 -> 2654 bytes assets/images/novalnet_cc_visa.png | Bin 0 -> 1610 bytes assets/images/novalnet_eps.png | Bin 0 -> 1064 bytes assets/images/novalnet_giropay.png | Bin 0 -> 1223 bytes assets/images/novalnet_ideal.png | Bin 0 -> 1481 bytes assets/images/novalnet_instantbank.png | Bin 0 -> 1758 bytes assets/images/novalnet_invoice.png | Bin 0 -> 1141 bytes assets/images/novalnet_paypal.png | Bin 0 -> 1976 bytes assets/images/novalnet_prepayment.png | Bin 0 -> 978 bytes assets/images/novalnet_przelewy24.png | Bin 0 -> 2180 bytes assets/images/novalnet_sepa.png | Bin 0 -> 1152 bytes assets/js/novalnet-admin.js | 254 +++ assets/js/novalnet-cc.js | 215 ++ assets/js/novalnet-sepa.js | 54 + assets/js/novalnet-subscription.js | 87 + assets/js/novalnet.js | 381 ++++ class-novalnet.php | 159 ++ .../admin/class-novalnet-global-config.php | 366 ++++ includes/api/class-novalnet-callback-api.php | 1029 ++++++++++ includes/class-novalnet-subscriptions.php | 440 ++++ .../gateways/class-novalnet-cashpayment.php | 234 +++ includes/gateways/class-novalnet-cc.php | 408 ++++ includes/gateways/class-novalnet-eps.php | 213 ++ includes/gateways/class-novalnet-giropay.php | 213 ++ includes/gateways/class-novalnet-ideal.php | 213 ++ .../gateways/class-novalnet-instantbank.php | 212 ++ includes/gateways/class-novalnet-invoice.php | 367 ++++ includes/gateways/class-novalnet-paypal.php | 259 +++ .../gateways/class-novalnet-prepayment.php | 246 +++ .../gateways/class-novalnet-przelewy24.php | 226 ++ includes/gateways/class-novalnet-sepa.php | 385 ++++ includes/novalnet-functions.php | 1816 +++++++++++++++++ languages/edd-novalnet-de_DE.mo | Bin 0 -> 29426 bytes languages/edd-novalnet-de_DE.po | 1417 +++++++++++++ languages/edd-novalnet.mo | Bin 0 -> 29426 bytes languages/edd-novalnet.pot | 1108 ++++++++++ languages/messages.mo | Bin 0 -> 29425 bytes novalnet-install.php | 113 + templates/invoice-template.php | 100 + templates/sepa-template.php | 133 ++ 52 files changed, 10670 insertions(+) create mode 100755 assets/css/novalnet-checkout.css create mode 100755 assets/images/nn_loader.gif create mode 100755 assets/images/novalnet.png create mode 100755 assets/images/novalnet_cashpayment.png create mode 100755 assets/images/novalnet_cc_amex.png create mode 100755 assets/images/novalnet_cc_cartasi.png create mode 100755 assets/images/novalnet_cc_carte-bleue.png create mode 100755 assets/images/novalnet_cc_diners.png create mode 100755 assets/images/novalnet_cc_discover.png create mode 100755 assets/images/novalnet_cc_jcb.png create mode 100755 assets/images/novalnet_cc_maestro.png create mode 100755 assets/images/novalnet_cc_mastercard.png create mode 100755 assets/images/novalnet_cc_unionpay.png create mode 100755 assets/images/novalnet_cc_visa.png create mode 100755 assets/images/novalnet_eps.png create mode 100755 assets/images/novalnet_giropay.png create mode 100755 assets/images/novalnet_ideal.png create mode 100755 assets/images/novalnet_instantbank.png create mode 100755 assets/images/novalnet_invoice.png create mode 100755 assets/images/novalnet_paypal.png create mode 100755 assets/images/novalnet_prepayment.png create mode 100755 assets/images/novalnet_przelewy24.png create mode 100755 assets/images/novalnet_sepa.png create mode 100755 assets/js/novalnet-admin.js create mode 100755 assets/js/novalnet-cc.js create mode 100755 assets/js/novalnet-sepa.js create mode 100755 assets/js/novalnet-subscription.js create mode 100755 assets/js/novalnet.js create mode 100755 class-novalnet.php create mode 100755 includes/admin/class-novalnet-global-config.php create mode 100755 includes/api/class-novalnet-callback-api.php create mode 100755 includes/class-novalnet-subscriptions.php create mode 100755 includes/gateways/class-novalnet-cashpayment.php create mode 100755 includes/gateways/class-novalnet-cc.php create mode 100755 includes/gateways/class-novalnet-eps.php create mode 100755 includes/gateways/class-novalnet-giropay.php create mode 100755 includes/gateways/class-novalnet-ideal.php create mode 100755 includes/gateways/class-novalnet-instantbank.php create mode 100755 includes/gateways/class-novalnet-invoice.php create mode 100755 includes/gateways/class-novalnet-paypal.php create mode 100755 includes/gateways/class-novalnet-prepayment.php create mode 100755 includes/gateways/class-novalnet-przelewy24.php create mode 100755 includes/gateways/class-novalnet-sepa.php create mode 100755 includes/novalnet-functions.php create mode 100755 languages/edd-novalnet-de_DE.mo create mode 100755 languages/edd-novalnet-de_DE.po create mode 100755 languages/edd-novalnet.mo create mode 100755 languages/edd-novalnet.pot create mode 100644 languages/messages.mo create mode 100755 novalnet-install.php create mode 100755 templates/invoice-template.php create mode 100755 templates/sepa-template.php diff --git a/assets/css/novalnet-checkout.css b/assets/css/novalnet-checkout.css new file mode 100755 index 0000000..3787c58 --- /dev/null +++ b/assets/css/novalnet-checkout.css @@ -0,0 +1,22 @@ +.novalnet_loader { + position: fixed; + left: 0px; + top: 0px; + width: 100%; + height: 100%; + z-index: 9999; + background: url('../images/nn_loader.gif') 50% 50% no-repeat; +} + +.nn_cc_overlay { + position: fixed; + width: 100% ! important; + height: 100% ! important; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0,0,0,0.5); + z-index: 9999; + cursor: pointer; +} diff --git a/assets/images/nn_loader.gif b/assets/images/nn_loader.gif new file mode 100755 index 0000000000000000000000000000000000000000..cf70c2efd0887795d64bfc0d6573733589eca929 GIT binary patch literal 7356 zcmeI0X;c&Wn#TWCm3<@Zi-Jj5WH%t7xL^gs<{A-^MKK^C?g5v^wL=m#>^mYVmdGwB zB4SXq6GV**8W0g|Thl0r?XEP9UYnk@x98q(Gks>}+?jjko>TR)>eM;)`@R3?c>{w3 zW_rhP0T+w`@Y`>{frO*)#y$fCzK7RQj2I~-?y|cUNc1Bx|a^U%r;)@sh zhE|oUWal*I+iRxF&Xg!0EGWFt+&ze0`@ZZ-KXub_%WrDuX0!z6DZJ%p`-b0E-gq>1 zZ-ZRXy{_u2_3rv3oda8HuTPVl_Rl@9x8;QHlm00#_9q;f0svr7SokH!$83v_V|}x3 zTOuoFeN4*6EirMf>ozBB0qozXi~U2F`SAq)?yg(}(mmj;yLG>i3jlFK3?x!n+WrIb z^o-1`?3`>vXWW$B;sXSZQ4w%;Dwj@iMoMxmt*sp;RQ(32Q8}kFokWsY*(lCA8MjNA z4f>wV2gpW7=3t8HEeE2*EmMhIyRjOOX;;8^4HgpHTPDC!BVpY#lhCMC2JwnP?<8QS zAy^D?G)@3{g=e%ZY6A2Qa-z#mE{GC}+)w+*QFe4Hpyli3VtiY}yxV7KxX-BdafeA*xkMbMBU?}R*@et`tq z@pJ1!@%Yx4CEJ48!j%T65PYE_-R$B)}q)v(9A=PYE8S!mWdzWIx4 zTS!wCzjRm7>a4Q(`3FzR?hqYkul4D%MCZPaU^VCFgf2KVug&4siNY7NNXHwKA%i z(IVN?h^$Ha)A;?nNh*Jy-e7S&vv8@LIt%`but@k6v()9_+K;3BruGxvsdaJG}BmVKw_HBLrM8(X#Oh%-)cbNx09Y^s1VOrN!mCbvnh zUR-h2>uOUTfV!P zgeg-=97Q^Z6v{v5%;0kGS`%goEvCaRLg_L?PO=!Ltqjt@IIoIhTP78Z|G*-IjukjO z9zTz5rnih&I83S!2-;M(N+wQIMsO^^MD~n|q_mB1dXK}d6(Q*haJHgw>C-N`8ev=9 z0P;Hy$yl1zP-_KSaNBw2uBXFq}9x(nmnW)mk*E003*CMaG zlIaTc9gJH*nB2K_Z8jv{gEwpWNMHr>=y!bSmxCFoRgSM3aGTj?SuLe1G_+Oos) zK?n0f7NM3-z=V0(x1~pgKUQ4$`KL7yiKV=>` z7zoAauYY-@iVA^#gZKNBY(i;U8RMbpVT^__r6_k!lbAmDc%d4ia53Tf&)ya2dcDW7 z%2hHmL1|#kO1~-G+(bK0dJWqDm}R-saEVPC`+Cr#dd)$Q*=Q77Dg*Xhj&pAK{#(A# zn?d;?TQ6L(hHo5uP7YISNJ}@cq6@Tz2&w5|LE2=&GH8*{p%QD3Pn+KKC0=&dm8) zEYj^@O5*{$CZ%2U@KXWz0B7tOtEIUuE3d7@;6?br8%L+;ZdGva+5TN|x9f)NKIpLr zsz1hD%q4L_-stejx0loZm`cOI5BK^0bKMMj)4Ne=h74z~FiQ%PMAe$f*Yu+7z=9A{eY6Ty z)yXL)Y!XQewaIDwTq|AxN4MsQbOUsfz-`1c5RO*CBBhGLq0&~(v7hlewZ6^SK~2K0 zQQ0P(t;~hfDjwl*yQ6us(!GoV zUfEki=ar->u3uaMge!1bvAMm7XrMU}n2RQIue~%gBo^jbw4_xMNU|x%+S_c6f0(z1 zIhz~rY~n0*3i(Of+$l7ak32vjNd-dT3RlMud&7Qlq)3*GFkv1mUTJnTwkt?E=L5j$ zSAN4|6m5UH*d}>kSWUC)7m4-!D+4;%no?^y%zQH>C(Y`$=jrWf6ie4mcm5z2lZBnA zILM(wNykzLnmSnKk60DLpYaa);NbE^H8jaPuZ(ud?E_Xc##0T~q^#st%2KC>>atR#IO3BU@UBVG zvdSh$@$thecO`PK_t_4y8Zz2wSX8yu2(1&!bk47Vk^l{RXw6f+aIr7kEQna%%=xwFMK0ulH!Mamf>lg{#=bP`689fXmP1@&6ldd#WrOT?oy)HWUZgRaWwh| z=H#!Kcj_<)lbc|M;hiQm^7(zMU|)@`WN{j+fg41aq4_u*zT1bvLgN@FAH;Mgffh}7 zkJFGOJ`b;Cz!?)l^!!j0g~oMN=C`1i4p1h z%r;3_0TNjmlx7d|kW)QPq^TgI)xZ(hEG7ZixYhjD=FU=^sSZ~{(BmXP~Ob#Zhb1fST~>1t~eq z1hD0kYOUY4Z-)+M%+60t2wn}cI<*d%KHRlO7hkl|Ibi<+^x6CUn68FiXCY%pOM(`? za;OXw%PPGF0nBgZu=VxxT;;bNg~`igmyQtfZz|VI5_&60%om_eSLc!`$`)yPeu{zD}0#tWJ#WgM{_4^MKLw3gie8Q zp$oV)9H1tqhOmOpi7Cy#n2%z%6~%O+|69ByYj-N8<;7t+Vjl#gD%y-!TEwH=|7wA}W6nq%)%T4I>`MA9 znSd-*;P_TsEG&8uqG@kRDh*F_<5{mdQ= zM_C$j&HW1Ahx9?(07fI%xU`>(9p0yEiELzflvBlrQYmo4<|+L_sR}O(>889k-MUMs zh3BdE=Z{R@Su-#eM56{ezwa!D|5XY8vr6zk;>7-5^Zu^gzmV76Gf-HSvtF@GY<{l< zxRjbnniGCY$jWPJFZ<6TfphjKo>;keWSTyK6+Nd$x{=x2KnI1xcMsaiJzF4U_&SF+ z31iZ9M}|6XF~<-CzB~F~GikA_@e1Xp19@WYc7GaAxut}eAQp`tF~DMEAm5VVG+A?n zVg=4bTknOq1_x@yUTWw8o_z;08o^F5*rBkQE5vU4aa!i6lDEU%=q0xkm%VLBEc#?~ zPE8^GRg}Ma0ub(3Pgo-;!95hKrb>S=2ZDeT;+3PIMU4y;v!>Adk8_{%o}<$%A)K(K zEOW_)YjQnLito^NlgaO%!QDn>86tAfL-z0MA92!GI|j_fplCSUg3O0KfUW#FMoa}($P?1_+$ zX{0O8C5}?K;ScC29E!J3syL^{XJ<}dzkHdPalbXX7H6imBSDu^GNLC(?Brh;BV
J?^qLna9e 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 U=MKb0M*si-07*qoM6N<$f@U$uY5)KL literal 0 HcmV?d00001 diff --git a/assets/images/novalnet_cashpayment.png b/assets/images/novalnet_cashpayment.png new file mode 100755 index 0000000000000000000000000000000000000000..6319569b3f69b1e5e3d61e0463187c4258b26555 GIT binary patch literal 1636 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 literal 0 HcmV?d00001 diff --git a/assets/images/novalnet_cc_cartasi.png b/assets/images/novalnet_cc_cartasi.png new file mode 100755 index 0000000000000000000000000000000000000000..8b2cc12c9d395c43a050153a3f7b3a1c231a57a8 GIT binary patch literal 1460 zcmeAS@N?(olHy`uVBq!ia0vp^azHG?!3HE}t?oSnq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfeOmhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Keo|$g4p^2%2xuu?= znX!qbrH+D;fuV)IfrY-Iv96(+m5G6sk&yxvC;@FNN=dT{a&d#&1?1T(Wt5Z@Sn2DR zmzV368|&p4rRy77T3YHG80i}s=>k>g7FXt#Bv$C=6)VF`a7isrF3Kz@$;{7F0GXJW zlwVq6s|0i@#0$9vaAWg|p}_1U13Be0{Av^NLFn^O93NU2K(r=ICW+rdT9YlIvN@px;k38nmW3f zxH`ERSXi1_n3}@$y5uL9=BDPA!1Sgd^cvyR3rY~V1wfl!Qj0RnQd8WD@^cly9=FQG z=@w%*oaRCGrr>sq0ZzU8K*#8Vq8BN;VM4$(1Y*JyFOUOI{;7GuG+zWv++3TP?lCYh zDS5g$hE&`-GR@Z`Bv9mdeR*1un3kcNn#Y3f1uI@8Ut~{l-LfGgR6(Qm;`MVn88K72 z6}i?<*m9vjdFO<(NEZ)QRUQ$?KyJe*mjHpK7ukDzjpv=4%Qo-Vl1k&xtGJ&R-mm?B z=fCyydb@Qqt-=CXwyb^=s`>bR-+8U;p^Fr2x2%*o|FdH)yJ8H}_i6>pm!aB|4t7O9 zsI_d)yVt+ce!ArO6 ziw(a&+OxrU{tvs)?ysW~lVcwq$Xpl4b5?1^iJ8mqJiWB$#xv#*eQLTwv8P_HyuUK} zcu3YP?`Ixe4j0;2@Ua=5Z9dT}wj@~k#&&%6}_L;uUdSP?aV?w-S<-~>Rj22ILvFiCL(`P%KZ!U<6<>tP6 zRP|O=Z=1&-?N3jepM5i^sd>CLsjuD0yh+Xf_GHctrZ+!DMD)Mddf@D}PiI;cKJ~A& dORwWJVDJ^6s|!?)db;|#taD0e0stdGBkKSF literal 0 HcmV?d00001 diff --git a/assets/images/novalnet_cc_carte-bleue.png b/assets/images/novalnet_cc_carte-bleue.png new file mode 100755 index 0000000000000000000000000000000000000000..ffe67f4cdf29a704e2c09fea8847d5abd0ff9203 GIT binary patch literal 2791 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 W57XqkHlDTpC&Pk;{KG-g%zprPaTcin literal 0 HcmV?d00001 diff --git a/assets/images/novalnet_cc_jcb.png b/assets/images/novalnet_cc_jcb.png new file mode 100755 index 0000000000000000000000000000000000000000..0064100414251021f03cafe99dd8f090f127f72f GIT binary patch literal 2198 zcmaJ@X;@Qd7LI@g5g5u+MG-EMy<|@iA|XbSKo}B2jEFu(n&mtXW}n9{hKLUk8iN;ICGrHy8sDBL>=_h=()+6^NjT6+#eT$pi@?4-|;g zQo6t(1j5u?%8!9!*b!urLWUL?bI@9u5=J8sK~$|$AW8xuKnNyC5@c&Vk9*f2-1>a0vQMi0Ie)pt|n_K$oITtcx?=0kih#C zD2amnQ&bF_3xp_CAV5OL2*F?c)*&OoWtREUCvmHyd+O!<*kuKqA4cwiW62KaA!JIpG96S&w}E1&N+AQ@H%^v*S_}S@ zd>^plPirB35{rSwV2sE6U&p-=f<0thel#z<`DlMo4trh&o4a#;#6ARKu^Ed_<7;m< zl_VuQY;@?zn7(oI&dr3lVU)}Vh_tu0;Fi3|y^L65OT^KFUpXSfg>SM6r@ zh3#fp*DjlLxAT1%C(m7_i;f&^!`0Lt}W$jPZKm#udAl1 z_vTKFw>H`|b>F^hx*~sPMe)B|@BWmoeR?BJC9y5sIhtME+mRlP_o}}(|2C)k7AGo? z#vdscrClsM9k%^c)h^*)!xQuSU0Z9=)%G)`zcqbcdFZ8cWJHD~CO@@7woI!V3Ka%e zIHu&%+Z_N(cnFLpMYo6@U4R1Wb{q5EsuI_+iN8IF<3D+O`B0Hg4A__88 z>ED!0gaz5!WXvvg$oD?IQki8(^EMkX;AsyNF^14Bd4nEH%#miEj#dhroF!{WFS-;| z<Mf^)O@;oH}||=?6=EF`OHTY zGsS)}dk$MYvUL2G$Mf#V-}ZjtkCu%M*zd3^sJZ!Sa_htLq49WiLB#{l;)o;i$q!k#izMT_c-=XqWU!OXa`rOmxRuRD9d0GB@DQTloY=Npj~K7b@Q?8+&{+?}0p z;Utf6UTw*54I>RaPrT^JN__ZepPc}_XTDsgzcBetq&k*RSmY_7P#5$3!fl*~jw2SO zEbryK%{g|s?wu%hFecv=3s#0wG zN1fnb4!MF(R7sH+)jdg4i|_gNScUTGbjdrfQnV*<;j4G4nSCegUY#(TNIy1^d2V{H z%k&0^surH9uR2vpz1~*SvFE3CTQj7D?}C2b+5gP!@6kb*Gv5T<(_P=bLy&82O+LEm zv&|<{?RO1|#N@WxGTi>LY_n^+6<0i;cg&sdJJ0q554s%3tgQ57+w$i(01czDKuL3L z#m3MK-=015Uec#dyOk*Bv0qBpYDCcy3D+JD9JpS5PS2hiCiL&U^uzS1^5lvAjJ|>& zc$-;EiyL0@LPjl8 zTKW3rSmqN^!{JxMT8I^*-*;mheE_#E);fK% zG>}z4YGoJR|8*j5uCJi7UUKQ~MDE2hE^=Ux_xc#<%ip`gf3e$1^Xc#VzW%mG`-n%P zMVWT|?$VOtaVOu&wnLcfr9r2gJdBCqr1%!kWe16Cm{$yaGj*)W9DIG^=Fa?sQLVhy z_xp17(HGAWA4f#-15jSvrP~^6Q*~k8&6yQb*v2-8JH(kH#J6?jl<93w?k)seBJ#eY zTX;KAH+r=gEOZ_T-qiaY?lw0<%y2ur_}RoND?#(@!Bsr{u*ICtjKcRIaOn3fSK1Sq zcOP$li(Go#b>>&s85`8g!7*>qYh>B8EyY|CTf~WNa;^h6i{;jb^>n}8v5Z>WA6!Cp z)p=aSD)2CNPvoqm?#r~3l3aJjWRGFcO?}+_VwTH03oIgZWUzH(!7ca>fk3br9D3vW HuQUGxo8y7g literal 0 HcmV?d00001 diff --git a/assets/images/novalnet_cc_maestro.png b/assets/images/novalnet_cc_maestro.png new file mode 100755 index 0000000000000000000000000000000000000000..26c63863d8ea418d035b364079bc7491100f2262 GIT binary patch literal 1337 zcmeAS@N?(olHy`uVBq!ia0vp^azHG?!3HE}t?oSnq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfeOmhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Keo|$g4p^2%2xuu?= znX!qbrH+D;fuV)IfrY-Iv96(+m5G6sk&yxvC;@FNN=dT{a&d#&1?1T(Wt5Z@Sn2DR zmzV368|&p4rRy77T3YHG80i}s=>k>g7FXt#Bv$C=6)VF`a7isrF3Kz@$;{7F0GXJW zlwVq6s|0i@#0$9vaAWg|p}_1U13Be0{Av^NLFn^O93NU2K(r=ICW+rdYW+xtY3JIyt!+IvN-nx;k38nmW3f zxH`ERSXi1_n3}@$y5uL9=BDPA!1Sgd^g83z3rY~V1wfl!Qj0RnQd8WD@^cly9=FQG z?G{U%=0WwQ;C726PQCg-$LNEi7b&`7LclZxV!{(IkONQtsd>OOUj$6t0v9G9Wnf@j z?&;zfQgJIO0SK5MbvpbJ>-c|JVt?~3)=iTWnPhcbj?4B0%;z$^AigKLWmm(yhE@sJ zO+06KiafmfjsCcJoXRvbDER1j5fqs?S}(JmW*;uKA8Uhl2zJlAot;_@T-n-ljn9nTr-hfC1l^91cBfG zxObma@b10qu~}mJQiTs*K60(=f4#KMi(h=)Ua|XU;cQjES-+dI$FZsjXQRu3Fnp)fKnwTBF_Pe`Hx*eyL8P^FM%A(u!0I+mFS7H=B63dFeb05{PVH2?Z5dp;~2pw2j5;!JPhUcjp(<`T+Tn;MCJYD@<);T3K0RZT6*98Co literal 0 HcmV?d00001 diff --git a/assets/images/novalnet_cc_mastercard.png b/assets/images/novalnet_cc_mastercard.png new file mode 100755 index 0000000000000000000000000000000000000000..fed2b8eab9db3289477cbfa8e368f9a303e4562a GIT binary patch literal 1384 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 E1CR}JF8}}l literal 0 HcmV?d00001 diff --git a/assets/images/novalnet_cc_visa.png b/assets/images/novalnet_cc_visa.png new file mode 100755 index 0000000000000000000000000000000000000000..87b97093f62a34c2b1c6e0a07041c5ce0aa1c073 GIT binary patch literal 1610 zcmaJ>eM}Q~7%pF>) z5(WaZ6mGdlq;NPvakfk&W7Mreaf%dU{ur^Fbg*a+CuO?vTEyCr?z!W#i5|9Lgfo?L-?nK=R;RG+r+I}}A z1Sdk6T!rwZD5FjfswkQOrQ#$JjwDLKWVskgN=TH;<3S0G$RJn-AqgTR2~C7ii3FT{ zglsn2l7$-7n#o-3O(D!?7zYYL1qB7-f&?)|TOmX)mqV}wl1M~sgveQFXE3+O?u?mY zP!mp^wmBFZWe5F?n3-}h3L&fXWeKEXn%3@|Y!lls$c;H5L=5{&nhMnE{y&r?r=y*W zfq13&KZ%{0g$@ET5KhWP9kn+26AVWmnbOVc1q7(volORCf)rmfJxGI^3r zDxJcrDcnU8c4i7|d4<)?i1jZ7>0mRf3EGxVSTr<6f)j|Oh#6*rmsxpxKN zTyvwy9e%#Lw9Olm&ID|U4l3RbUTGRyl`7m;~@wTAuv|^NU5Mg-OVh6QE5_HFO!Now9eazVfCp^>?!4UxoIK%`^bcGtz3)MVQPDRCt!}y?u*0`> z6Hvwf+_WViKwKgHi5BGNiLqUk-<-=q;?^WANGU46bK^-UFz=xO*w^n6-}h1QyMNsMawV{ESqZLR_pxPc^Z{ff zJuNZiAw3HsSQKV#c`nGWR`!m5vJkjg{JY?{uexx(;ls9+_^ZIGZf>J}v#JhNj^qQ|UW^B|N`GBEt8?W3(TJebWuc{Q+4EsV?qERk z?$qAP_dD6-MYxQ9G`BvSf2o1LoU74j;M=!5ca`ouaPZLAuAq(zoi%D~Ocv#>J3qYP z`QOhV$DZ=UwRO)V>016-5wDEXqL*2B(RQ3<#JzM1f literal 0 HcmV?d00001 diff --git a/assets/images/novalnet_eps.png b/assets/images/novalnet_eps.png new file mode 100755 index 0000000000000000000000000000000000000000..02875aeefb8558e1cf37ef1a49ce28ef8042c188 GIT binary patch literal 1064 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 ACjbBd literal 0 HcmV?d00001 diff --git a/assets/images/novalnet_invoice.png b/assets/images/novalnet_invoice.png new file mode 100755 index 0000000000000000000000000000000000000000..1898ed4ae0c60965e211b2330c2c7619f04e730c GIT binary patch literal 1141 zcma)5c`(}v82z;>tE{1zt=d|1_1OT>|+V#OJv5l02qpp{C-1`D=XuaK`eUmk(HV?(gr*<#H?*o1L8vhr@Gob8~WX5C{YkiG;ym zC={xopdc+REh{SvkH;4m7Z(;578Mnhl$4N2q?DADjEs!x>gw|H^32T4{QUgnjZEap&UV3^u8jU8C$r6b~DwXc;?(XdD z$Yiq3%}s?uv9+~TUteESQIU0zI); zh|#o==ng}JQ7!~|y)-}5DBtDD0o?D)UO%OBS@*+$h_LintSF!y|1}VAKd^p@*&aTB zL1Qm5;kD?At{z~((m*@gvCK_952J&w-v=YV)~buz^n66W|Ex+tzY9ruJJc$FZ!iq4XpgYKm7U34L?0> zo9JTlH}LkSk8CMtBG~8qrLJ*Sx|-_7F`$fqyWKe{ykRD)`03eD?)UZcbvsAkgzvCl zfzaPNx!Qc3wrqSKd>&unhQm2MM){nOrVg5z$5WlKMnRM??h}Miz{2vouN(8!PSwJDCE&r<^rHij0w)NO7y{w8*-uc#O`fBl?AJYgX9NYRsL0a3;`I9^xhq80%duOOy*z?F z6H;GA)fs9L_!POg?11*w#Wa3y)(uOa5#4MJRLk_8)L$KY6Cq?7ylf*oE6Fr z;#7h|;;SpZsO88xRfV@BxheMO$+St|kk_AS6Npw?3)#ZPm$&S}gqX8MWzM?lc29QauCU0rqxjb%Lb-4GpK2xBvhE literal 0 HcmV?d00001 diff --git a/assets/images/novalnet_paypal.png b/assets/images/novalnet_paypal.png new file mode 100755 index 0000000000000000000000000000000000000000..9defac5ede192d140f03e63cbd985763d6003ec7 GIT binary patch literal 1976 zcmV;p2S@mcP)qMQ5T%;}lc^)cguEeBbl!?V%GFrDLggvHe^ZGjND(0?U#4M#^dNHp0nk*<^58kOarCAk^4PN zX^TVfudvOB>!IlE78IW^L-9F+W8s+sY(Fsp8xNSV{5||dbM_O;7>xS6*ic7_!0$ngg++xZ>}PSlAAY7UZHe^d7VxM}_^f3qJ{)79(< zUG1(2GSl?&1`qU;_#tz zkLOTx%sEPZiM+NnT?YA#(ziBSDeoKNCTiuS?yrEQ`Ep?U$xPuavwWJ4_u;z-aeiFg z+kv&aOdNriBt_~EeGA?L?zsxyVHxa=K+&0fod3p54?@MdJp<_Iw(Ep5@}#KvS$B|) zuw_aio)0CIoR|26b0eaL7)ff6LeAwj+ufjytFjlIR`%R$OsNZX%ye&_uQA(Po6WYo zo?Lh5*<^D@c0HC-E3Rj7zm2|rzW})jrY_Pk7=!tHGtKt=csg4s$nl*oqx+0NL5h3N zh&_()V#S9>5^08llU~YvyDassM_Vy4Q?TWz1Dg&uW^)JM4Br#4%UR_Jd==qxX zN6C_ekDO89ZsYz)bX3||p@B(;tTn8G`s ztG@lh`A-bQWwGX2Hc7YU{8v761RM5Or-ZVq@y8Eo^=s_DNzzYxR7S-qk4s^TUX=pZ zACfbxM)e>{Pgk*|<+S88KWg2Z`0A$5*OLr_D3f1_izG3L1Y0lw<;oq;XADpi?xm~E z@;lD$M7*L963)mQgY8G6>F80F%+H*EDWs{&`4F}q8%u(M+)pIGl$mYLOlOHT;m5XP zgIKqt)quT7oDE&{rXOV&C6r#!pphl`!tE!9sf}(l@B0NQ68VUDlX!v1 z=O?M|jrw+FM|LO|_r<%M-1|ucn0F#gX^X`7{|!YYt`(d=u9icwrSa4XB#@|*^s_S` zq|r{Q}mjJ^RI_F3g%kTg5IlYv;G-YLK^Z-8*5zak;NwD~fB z@RA*VjUe$ANgm)2?B)XxGg_VDc_YZU_!E$bSIyRb)@lty{A8UWVMRJ*Ofb#9GWc2KJbiNg` zpVcAng$kh2C(x&D*X8bgEfnmh%xXv8|BB}qNWKBj9#Q0fav>&ek~5VpzmRe^wOiv4 zTzBXOVakKDiD2Pdko8P3N-qMdchLDsbl&}tnvG`-2~$H1apOVKs1!RE#-y1c+`ms% z%_Yv)5oOx9p7X7`y1fGQjfa8cl5bMj*Ww!<-eNt3F@v*I`JQ3@*1)32f$XP&#T@%C z5a%;Q_K6=!telx&FYcN9pKAW+*S%(gd1mpBC0*vif)RC*nuWUlHK^GUYo#-*~uukF{KnzjI2- zyn6{VA8bgRt`W{Afs1km*X-2eHlwVgcy=E%`i;_<&g`XxALjfr_qQ^`wYj&Gzj2by zD+R*B9j-AJn`<4L#9H0>N1x}ROqk>6*m5`?cQIq)^Z+)ys^Zha(O98oN8D^7wK^fZ z#aclqiWzK4I8AApCUbgDG&9)1l$KQ~G$I4+%wZ(CS(WtbBp<~+T(^z;!>O+N40sgg z-iJGk$>4WbPvUl>6*e8H%C(8vY=}*VBCzVCP(CZ3uZLA1heBA@jzx%UUq+N7py1@} z0M-ogdqB~d{rqT0-<5E}G%Y*wcsJ8G86}@n0W#R6xXuH!D?bw&o+0LgNcJ1?38Es{ z(0sVrNEWPJWz2gKcQg7ZlmKRycMpjm$!i7xB&j@4P$8;gF=OT0GsH}QzTiZnq5Q%a z0e#8YE`cjP3dX<5Ld@}qYUXPi-D273h^C%ahS;&J>7n>{+n)f1E?@*Nc%};g0000< KMNUMnLSTaOw&x@O literal 0 HcmV?d00001 diff --git a/assets/images/novalnet_prepayment.png b/assets/images/novalnet_prepayment.png new file mode 100755 index 0000000000000000000000000000000000000000..91042816085bcabe2412d107656e19acc7cf54d5 GIT binary patch literal 978 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', + { + value: '', + text : novalnet_admin.select_text, + } + ) + ); + jQuery( 'select[name="edd_settings[novalnet_subs_tariff_id]"]' ).find( 'option' ).remove(); + jQuery( 'select[name="edd_settings[novalnet_subs_tariff_id]"]' ).append( + jQuery( + ' Easy Digital Downloads plugin. Please install and activate it.', 'edd-novalnet' ) : ( ! extension_loaded( 'curl' ) ? ( __( 'Easy Digital Downloads Payment Gateway by Novalnetrequires PHP CURL. You need to activate the CURL function on your server. Please contact your hosting provider.', 'edd-novalnet' ) ) : '' ) ), 'error' ); + settings_errors( 'edd-notices' ); + } + } +endif; // End if class_exists check. + +/** + * To include all instance object + * + * @since 1.0.1 + */ +function novalnet_payment() { + return Novalnet::instance(); +} + +// Get Novalnet Running. +novalnet_payment(); diff --git a/includes/admin/class-novalnet-global-config.php b/includes/admin/class-novalnet-global-config.php new file mode 100755 index 0000000..e61df3c --- /dev/null +++ b/includes/admin/class-novalnet-global-config.php @@ -0,0 +1,366 @@ +gateway ) && ( $sub->get_total_payments() > $sub->bill_times && 0 != $sub->bill_times ) ) { + novalnet_subs_cancel_perform( $sub ); + } + } + + /** + * Adding admin script + * + * @since 1.1.0 + */ + public static function global_admin_script() { + + // Enqueue script. + wp_enqueue_script( 'novalnet-admin-script', NOVALNET_PLUGIN_URL . 'assets/js/novalnet-admin.js', '', NOVALNET_VERSION ); + + wp_localize_script( + 'novalnet-admin-script', + 'novalnet_admin', + array( + 'select_text' => __( '--Select--', 'edd-novalnet' ), + ) + ); + } + + /** + * To update and store the registered values given Novalnet Global Configuration + * + * @since 1.1.0 + * @access public + */ + public static function update_novalnet_settings() { + // Update Global configuraion fields. + update_option( self::register_novalnet_global_settings() ); + } + + /** + * Register the payment gateways setting section + * + * @since 1.1.0 + * @access public + * @param array $gateway_sections Array of sections for the gateways tab in payment gateways tab. + * @return array $gateway_sections To add Novalnet Global Configuration into sub-sections of payment gateways tab. + */ + public function register_novalnet_global_gateway( $gateway_sections ) { + $gateway_sections['novalnet_global_config'] = __( 'Novalnet Global Configuration', 'edd-novalnet' ); + return $gateway_sections; + } + + /** + * Adds the settings of the Novalnet Global Configuration + * + * @since 1.1.0 + * @access public + * @param array $gateway_settings List of global settings. + */ + public function register_novalnet_global_settings( $gateway_settings ) { + + $edd_settings = get_option('edd_settings'); + if( !empty( $edd_settings['novalnet_subs_payments'] ) ) { + $edd_subs_payment = $edd_settings['novalnet_subs_payments']; + } + if( !empty( $edd_subs_payment ) ) { + update_option('temp_subs_payment', $edd_subs_payment ); + $standard_subs_payment = $edd_subs_payment; + } else if( !empty( get_option('temp_subs_payment') ) ) { + $standard_subs_payment = get_option('temp_subs_payment'); + $store_temp_subs_payment = array( + 'novalnet_subs_payments' => get_option('temp_subs_payment') + ); + update_option('edd_settings', array_merge( $edd_settings, $store_temp_subs_payment )); + } else { + $standard_subs_payment = array( + 'novalnet_cc', + 'novalnet_sepa', + 'novalnet_invoice', + 'novalnet_prepayment', + 'novalnet_paypal', + ); + } + + $admin_url = 'https://admin.novalnet.de/'; + $url = ( version_compare(EDD_VERSION, '2.5.17', '<=') ) ? 'products' : 'novalnet_callback'; + $novalnet_global = array( + array( + 'id' => 'novalnet_settings', + /* translators: %s: admin URL */ + 'name' => '' . __( 'Novalnet API Configuration', 'edd-novalnet' ) . '

' . sprintf( __( 'Please read the Installation Guide before you start and login to the Novalnet Admin Portal using your merchant account. To get a merchant account, mail to sales@novalnet.de or call +49 (089) 923068320.', 'edd-novalnet' ), $admin_url) . '

', + 'desc' => __( 'Configure the gateway settings', 'edd-novalnet' ), + 'type' => 'header', + ), + array( + 'id' => 'novalnet_public_key', + 'name' => __( 'Product activation key', 'edd-novalnet' ) . ' *', + 'type' => 'text', + 'size' => 'regular', + 'autocomplete' => 'off', + 'tooltip_title' => __( 'Product activation key', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Your product activation key is a unique token for merchant authentication and payment processing.', 'edd-novalnet' ), + /* translators: %s: admin URL */ + 'desc' => '
' . sprintf( __( "Get your Product activation key from the Novalnet Admin Portal: PROJECT > Choose your project > Shop Parameters > API Signature (Product activation key)","edd-novalnet"), $admin_url ), + ), + array( + 'id' => 'novalnet_merchant_id', + 'name' => __( 'Merchant ID ', 'edd-novalnet' ), + 'type' => 'text', + 'size' => 'regular', + ), + array( + 'id' => 'novalnet_auth_code', + 'name' => __( 'Authentication code', 'edd-novalnet' ), + 'type' => 'text', + 'size' => 'regular', + ), + array( + 'id' => 'novalnet_product_id', + 'name' => __( 'Project ID', 'edd-novalnet' ), + 'type' => 'text', + 'size' => 'regular', + ), + array( + 'id' => 'novalnet_tariff_id', + 'name' => __( 'Select Tariff ID', 'edd-novalnet' ) . ' * ', + 'tooltip_title' => __( 'Select Tariff ID', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Select a Tariff ID to match the preferred tariff plan you created at the Novalnet Admin Portal for this project.', 'edd-novalnet' ), + 'type' => 'text', + 'size' => 'regular', + ), + array( + 'id' => 'novalnet_access_key', + 'name' => __( 'Payment access key', 'edd-novalnet' ), + 'type' => 'text', + 'size' => 'regular', + ), + array( + 'id' => 'novalnet_client_key', + 'name' => __( 'Client Key', 'edd-novalnet' ) . ' *', + 'type' => 'text', + 'size' => 'regular', + ), + array( + 'id' => 'novalnet_common_payment_logo', + 'name' => __( 'Display payment logo', 'edd-novalnet' ), + 'tooltip_title' => __( 'Display payment logo', 'edd-novalnet' ), + 'tooltip_desc' => __( 'The payment method logo(s) will be displayed on the checkout page. ', 'edd-novalnet' ), + 'type' => 'select', + 'options' => array( + 'no' => __( 'No', 'edd-novalnet' ), + 'yes' => __( 'Yes', 'edd-novalnet' ), + ), + 'std' => 'yes', + ), + array( + 'id' => 'novalnet_global_settings_onhold_status', + 'name' => '' . __( 'Order status management for on-hold transactions', 'edd-novalnet' ) . ' ', + 'type' => 'header', + ), + array( + 'id' => 'novalnet_onhold_success_status', + 'name' => __( 'On-hold order status', 'edd-novalnet' ), + 'type' => 'select', + 'options' => edd_get_payment_statuses(), + 'std' => 'pending', + 'tooltip_title' => __( 'On-hold order status', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Status to be used for on-hold orders until the transaction is confirmed or canceled.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_onhold_cancel_status', + 'name' => __( 'Canceled order status', 'edd-novalnet' ), + 'type' => 'select', + 'options' => edd_get_payment_statuses(), + 'std' => 'abandoned', + 'tooltip_title' => __( 'Canceled order status', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Status to be used when order is canceled or fully refunded.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_global_settings_subs_config', + 'name' => '' . __( 'Dynamic subscription management', 'edd-novalnet' ) . ' ', + 'type' => 'header', + ), + array( + 'id' => 'novalnet_subs_enable_option', + 'name' => __( 'Enable subscriptions', 'edd-novalnet' ), + 'type' => 'select', + 'options' => array( + '0' => __( 'No', 'edd-novalnet' ), + '1' => __( 'Yes', 'edd-novalnet' ), + ), + 'std' => '0', + ), + array( + 'name' => __( 'Subscription payments', 'edd-novalnet' ), + 'id' => 'novalnet_subs_payments', + 'type' => 'select', + 'class' => 'novalnet_subs_config', + 'multiple' => true, + 'chosen' => true, + 'size' => 'regular', + 'options' => array( + 'novalnet_cc' => __( 'Novalnet Credit/Debit Cards', 'edd-novalnet' ), + 'novalnet_sepa' => __( 'Novalnet Direct Debit SEPA', 'edd-novalnet' ), + 'novalnet_invoice' => __( 'Novalnet Invoice', 'edd-novalnet' ), + 'novalnet_prepayment' => __( 'Novalnet Prepayment', 'edd-novalnet' ), + 'novalnet_paypal' => __( 'Novalnet PayPal', 'edd-novalnet' ), + ), + 'std' => $standard_subs_payment, + ), + array( + 'id' => 'novalnet_subs_tariff_id', + 'class' => 'novalnet_subs_config', + 'name' => __( 'Subscription Tariff ID', 'edd-novalnet' ) . ' * ', + 'tooltip_title' => __( 'Subscription Tariff ID', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Select the preferred Novalnet subscription tariff ID available for your project. For more information, please refer the Installation Guide.', 'edd-novalnet' ), + 'type' => 'text', + 'size' => 'regular', + ), + array( + 'name' => '' . __( 'Notification / Webhook URL Setup', 'edd-novalnet' ) . ' ', + 'type' => 'header', + 'id' => 'novalnet_vendor_settings', + ), + array( + 'id' => 'novalnet_merchant_test_mode', + 'name' => __( 'Allow manual testing of the Notification / Webhook URL', 'edd-novalnet' ), + 'tooltip_title' => __( 'Allow manual testing of the Notification / Webhook URL', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Enable this to test the Novalnet Notification / Webhook URL manually. Disable this before setting your shop live to block unauthorized calls from external parties.', 'edd-novalnet' ), + 'type' => 'select', + 'options' => array( + '0' => __( 'No', 'edd-novalnet' ), + '1' => __( 'Yes', 'edd-novalnet' ), + ), + 'std' => '0', + ), + array( + 'id' => 'novalnet_merchant_email', + 'name' => __( 'Enable e-mail notification', 'edd-novalnet' ), + 'tooltip_title' => __( 'Enable e-mail notification', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Enable this option to notify the given e-mail address when the Notification / Webhook URL is executed successfully.', 'edd-novalnet' ), + 'type' => 'select', + 'options' => array( + '0' => __( 'No', 'edd-novalnet' ), + '1' => __( 'Yes', 'edd-novalnet' ), + ), + 'std' => '0', + ), + array( + 'id' => 'novalnet_merchant_email_to', + 'name' => __( 'Send e-mail to', 'edd-novalnet' ), + 'tooltip_title' => __( 'Send e-mail to', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Notification / Webhook URL execution messages will be sent to this e-mail.', 'edd-novalnet' ), + 'type' => 'text', + 'size' => 'regular', + ), + array( + 'id' => 'novalnet_merchant_notify_url', + 'name' => __( 'Notification / Webhook URL', 'edd-novalnet' ), + 'type' => 'text', + 'size' => 'regular', + 'std' => add_query_arg( + array( + 'edd-api' => $url, + ), + get_site_url() . '/' + ), + + 'desc' => '
' . sprintf(__( 'You must add the following webhook endpoint to your Novalnet Admin Portal . This will allow you to receive notifications about the transaction status.', 'edd-novalnet' ), $admin_url ), + 'allow_blank' => false, + ), + ); + $gateway_settings['novalnet_global_config'] = apply_filters( 'edd_novalnet_global_settings', $novalnet_global ); + return $gateway_settings; + } + + /** + * Sent request to novalnet server for merchant configurations + * + * @since 2.0.0 + */ + public function novalnet_apiconfig() { + $request = wp_unslash( $_POST ); + $error = ''; + if ( ! empty( $request ['novalnet_api_key'] ) ) { + $request = array( + 'lang' => novalnet_shop_language(), + 'hash' => trim( $request ['novalnet_api_key'] ), + ); + $response = novalnet_handle_communication( 'https://payport.novalnet.de/autoconfig', $request ); + $result = json_decode( $response ); + + if ( ! empty( $result->status ) && '100' === $result->status ) { + wp_send_json_success( $result ); + } else { + + if ( '106' === $result->status ) { + /* translators: %s: Server Address */ + $error = sprintf( __( 'You need to configure your outgoing server IP address ( %s ) at Novalnet. Please configure it in Novalnet Admin Portal or contact technic@novalnet.de', 'edd-novalnet' ), novalnet_server_addr( 'SERVER_ADDR' ) ); + } else { + $error = $result->config_result; + } + } + } else { + $error = __( 'Please fill in all the mandatory fields', 'edd-novalnet' ); + } + + wp_send_json_error( + array( + 'error' => $error, + ) + ); + } + +} +new Novalnet_Global_Config(); diff --git a/includes/api/class-novalnet-callback-api.php b/includes/api/class-novalnet-callback-api.php new file mode 100755 index 0000000..0318d8a --- /dev/null +++ b/includes/api/class-novalnet-callback-api.php @@ -0,0 +1,1029 @@ +get_requested_params(); + + // Order reference of given callback request. + $order_reference = (array) $vendor_script->get_order_reference(); + + if ( ! empty( $order_reference['order_no'] ) ) { + + list( $payment_gateway, $callback_amount, $sum_amount, $org_amount, $payment_level ) = $vendor_script->get_payment_data( $request_param, $order_reference['order_no'] ); + + // Check for payment_type. + if ( ! in_array( $vendor_script->ary_request_params['payment_type'], $vendor_script->ary_payment_groups[ $order_reference['payment_type'] ], true ) ) { + $vendor_script->debug_error( 'Novalnet callback received. Payment type (' . $vendor_script->ary_request_params['payment_type'] . ') is not valid.' ); + } + + $vendor_script->perform_subscription_stop_request( $request_param ); + + // Transaction cancellation process. + $vendor_script->transaction_cancellation( $request_param ); + + // level 0 payments - Initial payments. + $vendor_script->zero_level_process( $request_param ); + + // level 1 payments - Type of charge backs. + $vendor_script->first_level_process( $request_param ); + + // level 2 payments - Type of payment. + $vendor_script->second_level_process( $request_param ); + + $vendor_script->perform_subscription_reactivation_request( $request_param ); + + if ( '100' !== $request_param['status'] || '100' !== $request_param['tid_status'] ) { + $vendor_script->debug_error( 'Status ' . $request_param['status'] . ' is not valid: Only 100 is allowed' ); + } + } else { + + $nn_order_id = $request_param['order_no']; + if ( ! empty( $nn_order_id ) ) { + $post_details = get_post( $nn_order_id ); + if ( !empty( $post_details) && $post_details->post_type == 'edd_payment' ) { + $payment = get_novalnet_payment( $nn_order_id ); + if ( $nn_order_id == $post_details->ID && novalnet_check_string($payment) ) { + $vendor_script->handle_communication_failure( $payment ); + } else { + $vendor_script->debug_error( 'Order number is not valid' ); + } + } + } + /* Error section : Due to order reference not found from the shop database */ + $vendor_script->debug_error( 'Novalnet callback received. Order Reference not exist!' ); + }// End if. + + $vendor_script->debug_error( 'Callback script executed already. Refer order: ' . $order_reference['order_no'] ); +} + +/** + * Callback trigger for all payment + */ +class Novalnet_Callback_Api { + + /** + * Form request params. + * + * @var array + */ + public $ary_request_params = array(); + + /** + * Array Type of payment available - Level : 0. + * + * @var array + */ + public $ary_payments = array( 'CREDITCARD', 'INVOICE_START', 'DIRECT_DEBIT_SEPA', 'GUARANTEED_INVOICE', 'GUARANTEED_DIRECT_DEBIT_SEPA', 'PAYPAL', 'ONLINE_TRANSFER', 'IDEAL', 'EPS', 'GIROPAY', 'PRZELEWY24', 'CASHPAYMENT' ); + + /** + * Array Type of Charge backs available - Level : 1. + * + * @var array + */ + public $ary_chargebacks = array( 'GUARANTEED_INVOICE_BOOKBACK', 'GUARANTEED_SEPA_BOOKBACK', 'RETURN_DEBIT_SEPA', 'REVERSAL', 'CREDITCARD_BOOKBACK', 'CREDITCARD_CHARGEBACK', 'REFUND_BY_BANK_TRANSFER_EU', 'PAYPAL_BOOKBACK', 'PRZELEWY24_REFUND', 'REFUND_BY_BANK_TRANSFER_EU', 'CASHPAYMENT_REFUND' ); + + /** + * Array Type of CreditEntry payment and Collections available - Level : 2. + * + * @var array + */ + public $ary_collection = array( 'INVOICE_CREDIT', 'CASHPAYMENT_CREDIT', 'ONLINE_TRANSFER_CREDIT', 'CREDIT_ENTRY_CREDITCARD', 'CREDIT_ENTRY_SEPA', 'CREDIT_ENTRY_DE', 'DEBT_COLLECTION_SEPA', 'DEBT_COLLECTION_CREDITCARD', 'DEBT_COLLECTION_DE' ); + + /** + * Form list of payment types as per payment method. + * + * @var array + */ + public $ary_payment_groups = array( + 'novalnet_cc' => array( 'CREDITCARD', 'CREDITCARD_CHARGEBACK', 'CREDITCARD_BOOKBACK', 'CREDIT_ENTRY_CREDITCARD', 'DEBT_COLLECTION_CREDITCARD', 'SUBSCRIPTION_STOP', 'SUBSCRIPTION_REACTIVATE', 'TRANSACTION_CANCELLATION' ), + 'novalnet_sepa' => array( 'DIRECT_DEBIT_SEPA', 'RETURN_DEBIT_SEPA', 'CREDIT_ENTRY_SEPA', 'DEBT_COLLECTION_SEPA', 'GUARANTEED_DIRECT_DEBIT_SEPA', 'GUARANTEED_SEPA_BOOKBACK', 'REFUND_BY_BANK_TRANSFER_EU', 'SUBSCRIPTION_STOP', 'SUBSCRIPTION_REACTIVATE', 'TRANSACTION_CANCELLATION' ), + 'novalnet_ideal' => array( 'IDEAL', 'REFUND_BY_BANK_TRANSFER_EU', 'ONLINE_TRANSFER_CREDIT', 'REVERSAL', 'CREDIT_ENTRY_DE', 'DEBT_COLLECTION_DE' ), + 'novalnet_instantbank' => array( 'ONLINE_TRANSFER', 'REFUND_BY_BANK_TRANSFER_EU', 'ONLINE_TRANSFER_CREDIT', 'REVERSAL', 'CREDIT_ENTRY_DE', 'DEBT_COLLECTION_DE' ), + 'novalnet_paypal' => array( 'PAYPAL', 'SUBSCRIPTION_STOP', 'PAYPAL_BOOKBACK', 'SUBSCRIPTION_REACTIVATE', 'TRANSACTION_CANCELLATION' ), + 'novalnet_przelewy24' => array( 'PRZELEWY24', 'PRZELEWY24_REFUND', 'TRANSACTION_CANCELLATION' ), + 'novalnet_prepayment' => array( 'INVOICE_START', 'INVOICE_CREDIT', 'SUBSCRIPTION_STOP', 'SUBSCRIPTION_REACTIVATE', 'REFUND_BY_BANK_TRANSFER_EU' ), + 'novalnet_invoice' => array( 'INVOICE_START', 'GUARANTEED_INVOICE', 'GUARANTEED_INVOICE_BOOKBACK', 'INVOICE_CREDIT', 'SUBSCRIPTION_STOP', 'SUBSCRIPTION_REACTIVATE', 'REFUND_BY_BANK_TRANSFER_EU', 'TRANSACTION_CANCELLATION', 'CREDIT_ENTRY_DE', 'DEBT_COLLECTION_DE' ), + 'novalnet_eps' => array( 'EPS', 'REFUND_BY_BANK_TRANSFER_EU', 'ONLINE_TRANSFER_CREDIT', 'REVERSAL', 'CREDIT_ENTRY_DE', 'DEBT_COLLECTION_DE' ), + 'novalnet_giropay' => array( 'GIROPAY', 'REFUND_BY_BANK_TRANSFER_EU', 'ONLINE_TRANSFER_CREDIT', 'REVERSAL', 'CREDIT_ENTRY_DE', 'DEBT_COLLECTION_DE' ), + 'novalnet_cashpayment' => array( 'CASHPAYMENT', 'CASHPAYMENT_CREDIT', 'CASHPAYMENT_REFUND' ), + ); + + /** + * Novalnet Transaction Cancellation catagory. + * + * @var array + */ + + public $cancellation = array( + 'TRANSACTION_CANCELLATION', + ); + + /** + * Need check these params. + * + * @var array + */ + public $params_required = array( + 'vendor_id' => '', + 'status' => '', + 'tid_status' => '', + 'payment_type' => '', + 'tid' => '', + ); + + /** + * Subscription stop. + * + * @var array + */ + public $ary_subscriptions = array( 'SUBSCRIPTION_STOP', 'SUBSCRIPTION_REACTIVATE', 'SUBSCRIPTION_PAUSE', 'SUBSCRIPTION_UPDATE' ); + + /** + * Get all required action and filter to process callback script + */ + public function __construct() { + + self::check_ip_address(); + + $params = array_map( 'trim', $_REQUEST ); // Input var okay. + + if ( empty( $params ) ) { + self::debug_error( 'Novalnet callback received. No params passed over!' ); + } + + if ( ! empty( $params['subs_billing'] ) ) { + $this->params_required['signup_tid'] = ''; + } elseif ( isset( $params['payment_type'] ) && in_array( $params['payment_type'], array_merge( $this->ary_chargebacks, $this->ary_collection ), true ) ) { + $this->params_required['tid_payment'] = ''; + } + + $this->ary_request_params = self::validate_request_params( $params ); + } + + /** + * Validate the basic needed param + * + * @since 1.0.1 + * @access public + * @param array $params Validate required param. + * @return array $params Return validated param. + */ + public function validate_request_params( $params ) { + + if ( ! empty( $params ) ) { + $value_nt_exist = array( 'reference', 'vendor_id', 'tid', 'status', 'tid_status', 'status_messge', 'payment_type', 'signup_tid' ); + foreach ( $value_nt_exist as $value ) { + if ( ! isset( $params[ $value ] ) ) { + $params[ $value ] = ''; + } + } + if ( ! $params['tid'] ) { + $params['tid'] = $params['signup_tid']; + } + + foreach ( $this->params_required as $k => $v ) { + if ( empty( $params[ $k ] ) ) { + self::debug_error( 'Required param ( ' . $k . ' ) missing!' ); + } elseif ( in_array( $k, array( 'tid', 'tid_payment', 'signup_tid' ), true ) && ! preg_match( '/^\d{17}$/', $params[ $k ] ) ) { + self::debug_error( 'Invalid TID [ ' . $params[ $k ] . ' ] for order: ' . $params['order_no'] ); + } + } + + // Validating payment_type. + if ( ! in_array( $params['payment_type'], array_merge( $this->ary_payments, $this->ary_chargebacks, $this->ary_collection, $this->ary_subscriptions, $this->cancellation ), true ) ) { + self::debug_error( 'Payment type ( ' . $params['payment_type'] . ' ) is mismatched!' ); + } + + if ( '' !== $params['signup_tid'] && ( isset($params['subs_billing']) && $params['subs_billing'] == 1 ) ) { + $params['shop_tid'] = $params['signup_tid']; + } elseif ( in_array( $params['payment_type'], array_merge( $this->ary_chargebacks, $this->ary_collection ), true ) ) { // Invoice. + $params['shop_tid'] = $params['tid_payment']; + } elseif ( '' !== $params['tid'] ) { + $params['shop_tid'] = $params['tid']; + } + + return $params; + }// End if. + } + + /** + * Checks the client IP address + * + * @since 1.0.1 + * @access public + */ + public function check_ip_address() { + global $test_mode; + $get_host_address = gethostbyname( 'pay-nn.de' ); + if ( empty( $get_host_address ) ) { + self::debug_error( 'Novalnet HOST IP missing' ); + } + $get_ip_address = get_remote_address(); + if ( ( $get_host_address !== $get_ip_address ) && ! $test_mode ) { + foreach ($_SERVER as $key ) { + if(!empty($_SERVER[ $key ])){ + foreach ( explode( ',', $_SERVER[ $key ] ) as $server_ip ) { + if ($server_ip == $get_host_address) { + return; + } + } + } + } + self::debug_error( 'Unauthorised access from the IP [' . $get_ip_address . ']' ); + } + } + + /** + * Mail notification + * + * @since 1.0.1 + * @access public + * @param array $data Send callback mail. + */ + public function send_notify_mail( $data ) { + global $edd_options; + + if ( ! empty( $edd_options['novalnet_merchant_email'] ) ) { + $emails = new EDD_Emails(); + $email_to_addr = ! empty( $edd_options['novalnet_merchant_email_to'] ) ? trim( $edd_options['novalnet_merchant_email_to'] ) : ''; + + $email_subject = 'Novalnet Callback Script Access Report - ' . get_option( 'blogname' ); + if ( $data['comments'] && ! empty( $email_to_addr ) ) { + $comments = $data['comments']; + $message = html_entity_decode( $comments ); + $emails->__set( 'heading', $email_subject ); + $emails->send( $email_to_addr, $email_subject, $message ); + } + } + self::debug_error( $data['comments'] ); + } + + /** + * Transaction cancellation. + * + * @param array $request_param server response. + */ + public function transaction_cancellation( $request_param ) { + global $wpdb, $edd_options, $order_reference; + + if ( '103' === $request_param['tid_status'] && 'TRANSACTION_CANCELLATION' === $request_param['payment_type'] && '103' !== $order_reference ['gateway_status'] ) { + /* translators: %1$s: date */ + $request_param['message'] = PHP_EOL . sprintf( __( 'The transaction has been canceled on %1$s.', 'edd-novalnet' ), edd_novalnet_formatted_date() ); + + // Update order comments. + $order_status = $edd_options['novalnet_onhold_cancel_status']; + EDD()->session->set( 'novalnet_transaction_comments', $request_param['message'] ); + edd_update_payment_status( $order_reference['order_no'], $order_status ); + $this->update_comments( $order_reference, $request_param['message'] ); + + // Update gateway status. + $wpdb->update( + $wpdb->prefix . 'novalnet_transaction_detail', + array( + 'gateway_status' => $request_param['tid_status'], + ), + array( + 'order_no' => $order_reference['order_no'], + ) + ); // db call ok; no-cache ok. + + $this->send_notify_mail( array( 'comments' => $request_param['message'] ) ); + } + } + + /** + * Get order details + * + * @since 1.0.1 + * @access public + * @return array $order_ref Return order details to make callback success. + */ + public function get_order_reference() { + global $wpdb; + + $tid = isset( $this->ary_request_params['shop_tid'] ) ? $this->ary_request_params['shop_tid'] : $this->ary_request_params['tid']; + + $order_id = isset( $this->ary_request_params['order_no'] ) ? $this->ary_request_params['order_no'] : ''; + + // Get recurring details. + if ( isset( $this->ary_request_params['subs_billing'] ) && '1' === $this->ary_request_params['subs_billing'] || in_array( $this->ary_request_params['payment_type'], array( 'SUBSCRIPTION_STOP', 'SUBSCRIPTION_REACTIVATE' ), true ) ) { + $recurring_details = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}novalnet_subscription_details WHERE recurring_tid='%s'", $tid ), ARRAY_A ); + $order_id = isset( $recurring_details['order_no'] ) ? $recurring_details['order_no'] : ''; + } + + if ( ! empty( $order_id ) ) { + $order_ref = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}novalnet_transaction_detail WHERE tid=%s OR order_no=%s", $tid, $order_id ) ); + } else { + $order_ref = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}novalnet_transaction_detail WHERE tid=%s", $tid ) ); + } + return $order_ref; + } + + /** + * Handle communication failure transaction + * + * @param array $payment payment name. + */ + public function handle_communication_failure( $payment ) { + + global $edd_options, $wpdb; + + $test_mode = (int) ( edd_is_test_mode() || ! empty( $edd_options[ $payment . '_test_mode' ] ) || ! empty( $this->ary_request_params['test_mode'] ) ); + $key = ( isset( $this->ary_request_params['key'] ) && !empty( $this->ary_request_params['key'] ) ) ? $this->ary_request_params['key'] : !empty($this->ary_request_params['payment_id']) ? $this->ary_request_params['payment_id'] : '' ; + + $amount = str_replace('.', ',', sprintf('%.2f', $this->ary_request_params['amount'] / 100 ) ); + + if ( '100' === $this->ary_request_params ['status'] ) { + + update_post_meta( $this->ary_request_params['order_no'], '_edd_payment_gateway', $payment ); + update_post_meta( $this->ary_request_params['order_no'], '_nn_order_tid', $this->ary_request_params['tid'] ); + + $invoice_payments = array( 'novalnet_invoice', 'novalnet_prepayment' ); + + if ( in_array( $payment, $invoice_payments, true ) || ( 'novalnet_paypal' === $payment && ( '90' === $this->ary_request_params['tid_status'] || '85' === $this->ary_request_params['tid_status'] ) ) || ( 'novalnet_przelewy24' === $payment && '86' === $this->ary_request_params['tid_status'] ) || ( 'novalnet_cashpayment' === $payment ) ) { + update_post_meta( $this->ary_request_params['order_no'], '_nn_callback_amount', 0 ); + } else { + // Set the purchase to complete. + update_post_meta( $this->ary_request_params['order_no'], '_nn_callback_amount', get_post_meta( $this->ary_request_params['order_no'], '_edd_payment_total', true ) * 100 ); + } + + if ( in_array( $this->ary_request_params['tid_status'], array( '91', '99', '98', '85' ), true ) ) { + $final_order_status = $edd_options['novalnet_onhold_success_status']; + } elseif ( in_array( $this->ary_request_params['tid_status'], array( '75', '90', '86' ), true ) ) { + $final_order_status = $edd_options[ $payment . '_order_pending_status' ]; + } else { + $final_order_status = $edd_options[ $payment . '_order_completion_status' ]; + if ( '41' === $key ) { + $final_order_status = $edd_options[ $payment . '_order_callback_status' ]; + } + } + $novalnet_comments = ''; + $novalnet_comments .= novalnet_form_transaction_details( $this->ary_request_params, $test_mode ); + if ( in_array( $payment, $invoice_payments, true ) ) { + $novalnet_comments = novalnet_get_invoice_comments( $this->ary_request_params, $payment, $amount, $novalnet_comments, true, true ); + } + + if ( $payment === 'novalnet_cashpayment' ) { + $novalnet_comments .= cashpayment_order_comments( $this->ary_request_params ); + } + + $this->ary_request_params['amount'] = $amount; + update_transaction_details( $this->ary_request_params, $payment ); + + $novalnet_comments = html_entity_decode( $novalnet_comments, ENT_QUOTES, 'UTF-8' ); + // Update Novalnet Transaction details into payment note. + $post_comments = get_post( $edd_options ); + $post_comments->post_excerpt .= $novalnet_comments; + // Update Novalnet Transaction details into shop database. + wp_update_post( + array( + 'ID' => $this->ary_request_params['order_no'], + 'post_excerpt' => $novalnet_comments, + ) + ); + EDD()->session->set( 'novalnet_transaction_comments', $novalnet_comments ); + edd_update_payment_status( $this->ary_request_params['order_no'], $final_order_status ); + edd_insert_payment_note( $this->ary_request_params['order_no'], $novalnet_comments ); + if ( 'publish' !== $final_order_status || ! empty( $this->ary_request_params['subs_id'] ) ) { + edd_trigger_purchase_receipt( $this->ary_request_params['order_no'] ); + } + } else { + + update_post_meta( $this->ary_request_params['order_no'], '_edd_payment_gateway', $payment ); + update_post_meta( $this->ary_request_params['order_no'], '_nn_order_tid', $this->ary_request_params['tid'] ); + + $novalnet_comments = ''; + $novalnet_comments .= novalnet_form_transaction_details( $this->ary_request_params, $test_mode ); + $novalnet_comments .= ( isset( $this->ary_request_params['status_text'] ) ? $this->ary_request_params['status_text'] : ( isset( $this->ary_request_params['status_desc'] ) ? $this->ary_request_params['status_desc'] : $this->ary_request_params['status_message'] ) ); + + $this->ary_request_params['amount'] = $amount; + update_transaction_details( $this->ary_request_params, $payment ); + + $novalnet_comments = html_entity_decode( $novalnet_comments, ENT_QUOTES, 'UTF-8' ); + // Update Novalnet Transaction details into payment note. + $post_comments = get_post( $edd_options ); + $post_comments->post_excerpt .= $novalnet_comments; + // Update Novalnet Transaction details into shop database. + wp_update_post( + array( + 'ID' => $this->ary_request_params['order_no'], + 'post_excerpt' => $novalnet_comments, + ) + ); + EDD()->session->set( 'novalnet_transaction_comments', $novalnet_comments ); + edd_update_payment_status( $this->ary_request_params['order_no'], 'abandoned' ); + edd_insert_payment_note( $this->ary_request_params['order_no'], $novalnet_comments ); + } + self::debug_error( $novalnet_comments ); + } + + /** + * Get given payment_type level for process + * + * @since 1.0.1 + * @access public + */ + public function get_payment_type_level() { + if ( ! empty( $this->ary_request_params ) ) { + if ( in_array( $this->ary_request_params['payment_type'], $this->ary_payments, true ) ) { + return 0; + } elseif ( in_array( $this->ary_request_params['payment_type'], $this->ary_chargebacks, true ) ) { + return 1; + } elseif ( in_array( $this->ary_request_params['payment_type'], $this->ary_collection, true ) ) { + return 2; + } + } + return false; + } + + /** + * Get request param from post + * + * @since 1.0.1 + * @access public + */ + public function get_requested_params() { + return $this->ary_request_params; + } + + /** + * Error message + * + * @since 1.0.1 + * @access public + * @param string $message Print if the error persist while running. + */ + public function debug_error( $message = 'Authentication Failed!' ) { + wp_die( + wp_kses( $message, array() ), + 'Novalnet Callback', + array( + 'response' => '200', + ) + ); + wp_die( + '', + 'Novalnet Callback', + array( + 'response' => '200', + ) + ); + } + + /** + * Creation for order for each recurring process + * + * @since 1.0.2 + * @access public + * @param string $subscription_id Get subscription order. + * @param array $request_param Get post parent order. + */ + public function recurring_order_creation( $subscription_id, $request_param ) { + global $wpdb, $test_mode, $edd_options,$order_reference; + $recurring_order = ''; + $subscription = new EDD_Subscription( $subscription_id ); + $recurring_method = get_post_meta( $subscription->parent_payment_id, '_edd_payment_gateway', true ); + $trans_details = $wpdb->get_row( $wpdb->prepare( "SELECT termination_reason FROM {$wpdb->prefix}novalnet_subscription_details WHERE order_no=%s", $subscription->parent_payment_id ), ARRAY_A ); // db call ok; no-cache ok. + $edd_recurring_version = preg_replace( '/[^0-9.].*/', '', get_option( 'edd_recurring_version' ) ); + $get_times_billed = ( version_compare($edd_recurring_version, '2.6', '<') ) ? $subscription->get_total_payments() : $subscription->get_times_billed(); + + if ( ( ( ( $get_times_billed < $subscription->bill_times ) && 0 !== $subscription->bill_times ) || '0' === $subscription->bill_times ) && empty( $trans_details['termination_reason'] ) ) { + + // When a user makes a recurring payment. + $subscription->add_payment( + array( + 'amount' => $subscription->recurring_amount, + 'transaction_id' => $subscription->transaction_id, + 'gateway' => $recurring_method, + ) + ); + + $subscription->renew(); + $recurring_order = $this->get_recurring_order( $subscription ); + update_post_meta( $recurring_order, '_nn_order_tid', $request_param['tid'] ); + update_post_meta( $recurring_order, '_edd_payment_total', $request_param['amount'] / 100 ); + update_post_meta( $recurring_order, '_edd_payment_transaction_id', $recurring_order ); + $trans_details = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}novalnet_transaction_detail WHERE order_no=%s", $subscription->parent_payment_id ), ARRAY_A ); // db call ok; no-cache ok. + update_post_meta( $request_param['tid'], '_order_total', $request_param['amount'] / 100 ); + update_post_meta( $subscription->parent_payment_id, '_nn_customer_id', $trans_details['product_id'] . '-' . $subscription->customer->user_id ); + + $wpdb->insert( + "{$wpdb->prefix}novalnet_transaction_detail", + array( + 'order_no' => $recurring_order, + 'vendor_id' => $trans_details['vendor_id'], + 'auth_code' => $trans_details['auth_code'], + 'product_id' => $trans_details['product_id'], + 'tariff_id' => $trans_details['tariff_id'], + 'payment_id' => $trans_details['payment_id'], + 'payment_type' => $recurring_method, + 'tid' => $request_param['tid'], + 'subs_id' => ! empty( $trans_details['subs_id'] ) ? $trans_details['subs_id'] : '', + 'amount' => $request_param['amount'], + 'callback_amount' => ( 'INVOICE_START' == $request_param['payment_type'] ) ? 0 : $request_param['amount'], + 'currency' => $trans_details['currency'], + 'gateway_status' => ! empty( $request_param['tid_status'] ) ? $request_param['tid_status'] : '', + 'test_mode' => $request_param['test_mode'], + 'customer_id' => $subscription->customer->user_id, + 'customer_email' => $subscription->customer->email, + 'date' => gmdate( 'Y-m-d H:i:s' ), + ) + ); // db call ok; no-cache ok. + $novalnet_comments = novalnet_form_transaction_details( $request_param, $request_param['test_mode'] ); + + if ( 'INVOICE_START' === $request_param['payment_type'] ) { + $request_param['order_no'] = $recurring_order; + $novalnet_comments = novalnet_get_invoice_comments( $request_param, $recurring_method, sprintf( '%0.2f', ( $request_param['amount'] / 100 ) ), $novalnet_comments, true, true ); + $ary_set_null_value = array( 'invoice_bankname', 'due_date', 'invoice_bankplace', 'invoice_iban', 'invoice_bic' ); + foreach ( $ary_set_null_value as $value ) { + if ( ! isset( $request_param[ $value ] ) ) { + $request_param[ $value ] = ''; + } + } + }// End if. + + $next_payment_date = ''; + $edd_recurring_version = preg_replace( '/[^0-9.].*/', '', get_option( 'edd_recurring_version' ) ); + $get_times_billed = ( version_compare($edd_recurring_version, '2.6', '<') ) ? $subscription->get_total_payments() : $subscription->get_times_billed(); + if ( ( ! empty( $request_param['paid_until'] ) || ! empty( $request_param['next_subs_cycle'] ) ) && $get_times_billed !== $subscription->bill_times ) { + $next_payment_date = __( 'Next charging date: ', 'edd-novalnet' ) . date_i18n( get_option( 'date_format' ), strtotime( ! empty( $request_param['next_subs_cycle'] ) ? $request_param['next_subs_cycle'] : $request_param['paid_until'] ) ); + } + /* translators: %1$s: parent tid, %2$s: amount, %3$s: date, %4$s: tid */ + $callback_comments = PHP_EOL . sprintf( __( 'Subscription has been successfully renewed for the TID: %1$s with the amount %2$s on %3$s. The renewal TID is: %4$s', 'edd-novalnet' ), $request_param['shop_tid'], edd_currency_filter( edd_format_amount( $request_param ['amount'] / 100 ) ), date_i18n( get_option( 'date_format' ), strtotime( gmdate( 'Y-m-d' ) ) ), $request_param['tid'] ) . PHP_EOL; + update_post_meta( $recurring_order, '_nn_invoice_comments', $novalnet_comments . PHP_EOL . $next_payment_date ); + update_post_meta( $recurring_order, '_payment_method', $recurring_method ); + update_post_meta( $recurring_order, '_nn_version', NOVALNET_VERSION ); + edd_insert_payment_note( $recurring_order, $novalnet_comments . $callback_comments . $next_payment_date ); + if(!empty($request_param['next_subs_cycle'])) { + $wpdb->update( + $wpdb->prefix . 'novalnet_subscription_details', + array( + 'next_payment_date' => date('Y-m-d',strtotime( $request_param['next_subs_cycle'] )), + ), + array( + 'order_no' => $order_reference['order_no'], + ) + ); + } // db call ok; no-cache ok. + // Set the renewal order status. + $final_order_status = 'edd_subscription'; + + $exist_comments = $wpdb->get_var( $wpdb->prepare( "SELECT post_excerpt FROM {$wpdb->posts} where ID =%s", $recurring_order ) ); // db call ok; no-cache ok. + + $add_comments = $exist_comments . PHP_EOL . $novalnet_comments . PHP_EOL; + EDD()->session->set( 'novalnet_transaction_comments', $add_comments ); + $nn_order_notes = array( + 'ID' => $recurring_order, + 'post_excerpt' => $exist_comments . PHP_EOL . $novalnet_comments . PHP_EOL . $callback_comments . PHP_EOL . $next_payment_date, + ); + $novalnet_comments = str_replace( '\n', '
', $nn_order_notes ); + wp_update_post( $novalnet_comments ); + if ( 'publish' !== $final_order_status ) { + edd_trigger_purchase_receipt( $recurring_order ); + } + $edd_recurring_version = preg_replace( '/[^0-9.].*/', '', get_option( 'edd_recurring_version' ) ); + $get_times_billed = ( version_compare($edd_recurring_version, '2.6', '<') ) ? $subscription->get_total_payments() : $subscription->get_times_billed(); + if ( $get_times_billed === $subscription->bill_times && '0' !== $subscription->bill_times ) { + // Cancel subscription in Novalnet server. + $this->perform_subscription_cancel( $request_param ); + $wpdb->update( + $wpdb->prefix . 'novalnet_subscription_details', + array( + 'termination_reason' => 'Others', + 'termination_at' => gmdate( 'Y-m-d H:i:s' ), + ), + array( + 'order_no' => $subscription->parent_payment_id, + ) + ); // db call ok; no-cache ok. + } + EDD()->session->set( 'novalnet_transaction_comments', $nn_order_notes['post_excerpt'] ); + + edd_update_payment_status( $recurring_order, $final_order_status ); + + $this->send_notify_mail( array( 'comments' => $callback_comments . PHP_EOL . $next_payment_date ) ); + } else { + self::debug_error( sprintf( __( 'The subscription has been already stopped or cancelled', 'edd-novalnet' ) ) ); + }// End if. + } + + /** + * Process Recurring subscription order id + * + * @since 1.0.2 + * @param array $subscription Get child payment count. + */ + public function get_recurring_order( $subscription ) { + foreach ( $subscription->get_child_payments() as $value ) { + return $value->ID; + } + } + + /** + * Process subscription cancel + * + * @since 1.0.2 + * @access public + * @param array $request_param Get post params to be processed. + */ + public function perform_subscription_cancel( $request_param ) { + global $wpdb; + $trans_details = $wpdb->get_row( $wpdb->prepare( "SELECT auth_code,product_id,tariff_id,payment_id FROM {$wpdb->prefix}novalnet_transaction_detail WHERE tid=%s", $request_param ['shop_tid'] ), ARRAY_A ); // db call ok; no-cache ok. + $cancel_request = array( + 'vendor' => $request_param ['vendor_id'], + 'auth_code' => $trans_details ['auth_code'], + 'product' => $trans_details ['product_id'], + 'tariff' => $trans_details ['tariff_id'], + 'key' => $trans_details ['payment_id'], + 'tid' => $request_param ['shop_tid'], + 'cancel_sub' => 1, + 'cancel_reason' => __( 'Other', 'edd-novalnet' ), + 'lang' => novalnet_shop_language(), + 'remote_ip' => novalnet_server_addr(), + ); + novalnet_submit_request( $cancel_request ); + } + + /** + * Process subscription cancel + * + * @since 1.0.2 + * @access public + * @param array $request_param Get post params to be processed. + */ + public function perform_subscription_stop_request( $request_param ) { + global $wpdb, $order_reference; + $sub_billing = !empty($request_param['subs_billing']) ? $request_param['subs_billing'] : '0'; + $subs_billing_check = ( '1' == $sub_billing || '0' == $sub_billing); + + if ( ( $subs_billing_check && in_array( $request_param ['payment_type'], array( 'SUBSCRIPTION_STOP', 'TRANSACTION_CANCELLATION' ), true ) ) || ( $subs_billing_check && '100' !== $request_param['status'] && in_array( $request_param ['payment_type'], array( 'SUBSCRIPTION_STOP', 'TRANSACTION_CANCELLATION' ), true )) ) { + + /* translators: %1$s: tid, %2$s: date, %3$s: reason */ + if($request_param ['payment_type'] == 'TRANSACTION_CANCELLATION') + { + $request_param['callback_comments'] = PHP_EOL . sprintf( __( 'The transaction has been canceled on %1$s.', 'edd-novalnet' ),date_i18n( get_option( 'date_format' ), strtotime( gmdate( 'Y-m-d' ) ) ) ) . PHP_EOL; + edd_update_payment_status( $order_reference['order_no'], 'abandoned' ); + } + else + { + $request_param['callback_comments'] = PHP_EOL . sprintf( __( 'Subscription has been stopped for the TID: %1$s on %2$s.', 'edd-novalnet' ), $request_param['signup_tid'], date_i18n( get_option( 'date_format' ), strtotime( gmdate( 'Y-m-d' ) ) ) ) . PHP_EOL; + } + // subscription cancel reason + $cancel_reason = ''; + if(!empty($request_param['termination_reason'])) + { + $cancel_reason = PHP_EOL . sprintf( __('Subscription has been canceled due to: %1$s'),$request_param['termination_reason']).PHP_EOL; + $request_param['callback_comments'] .= $cancel_reason; + } + edd_insert_payment_note( $order_reference['order_no'], $request_param['callback_comments'] ); + $exist_comments = $wpdb->get_var( $wpdb->prepare( "SELECT post_excerpt FROM $wpdb->posts where ID =%s", $order_reference['order_no'] ) ); // db call ok; no-cache ok. + + $nn_order_notes = array( + 'ID' => $order_reference['order_no'], + 'post_excerpt' => $exist_comments . $request_param['callback_comments'], + ); + $wpdb->update( + $wpdb->prefix . 'novalnet_subscription_details', + array( + 'termination_reason' => $cancel_reason, + 'termination_at' => gmdate( 'Y-m-d H:i:s' ), + ), + array( + 'order_no' => $order_reference['order_no'], + ) + ); // db call ok; no-cache ok. + + wp_update_post( $nn_order_notes ); + $subscription_details = get_subscription_details( $order_reference['order_no'] ); + if ( isset( $subscription_details['subs_plugin_enabled'] ) ) { + $subscription = new EDD_Subscription( $subscription_details['subs_id'] ); + $subscription->cancel(); + } + EDD()->session->set( 'novalnet_transaction_comments', $request_param['callback_comments'] ); + // Cancel subscription in Novalnet server. + $this->send_notify_mail( array( 'comments' => $request_param['callback_comments'] ) ); + $this->debug_error( $request_param['callback_comments'] ); + } + } + + /** + * Process subscription cancel + * + * @since 1.1.3 + * @param array $request_param Get post params to be processed. + */ + public function perform_subscription_reactivation_request( $request_param ) { + + global $wpdb, $order_reference, $edd_options, $payment_gateway; + $subscription_details = get_subscription_details( $order_reference['order_no'] ); + if ( isset( $subscription_details['subs_plugin_enabled'] ) ) { + $subscription = new EDD_Subscription( $subscription_details['subs_id'] ); + } + if ( 'SUBSCRIPTION_REACTIVATE' === $request_param['payment_type'] && ('100' === $request_param['status'] || ( '100' !== $request_param['status'] && ! empty( $request_param['subs_billing'] ) ) )) { + $wpdb->update( + $wpdb->prefix . 'novalnet_subscription_details', + array( + 'termination_reason' => '', + 'termination_at' => '', + ), + array( + 'order_no' => $order_reference['order_no'], + ) + ); + $next_payment_date = ! empty( $request_param['next_subs_cycle'] ) ? $request_param['next_subs_cycle'] : $request_param['paid_until']; + /* translators: %1$s: tid, %2$s: date, %3$s: date */ + $request_param['callback_comments'] = PHP_EOL . sprintf( __( 'Subscription has been reactivated for the TID: %1$s on %2$s.', 'edd-novalnet' ), $request_param['signup_tid'], date_i18n( get_option( 'date_format' ), strtotime( gmdate( 'Y-m-d' ) ) ) ) . PHP_EOL; + $wpdb->update( + $wpdb->prefix . 'edd_subscriptions', + array( + 'status' => 'active', + 'expiration' => $next_payment_date, + ), + array( + 'parent_payment_id' => $subscription->parent_payment_id, + ) + ); // db call ok; no-cache ok. + edd_insert_payment_note( $order_reference['order_no'], $request_param['callback_comments'] ); + $exist_comments = $wpdb->get_var( $wpdb->prepare( "SELECT post_excerpt FROM $wpdb->posts where ID =%s", $order_reference['order_no'] ) ); + $nn_order_notes = array( + 'ID' => $order_reference['order_no'], + 'post_excerpt' => $exist_comments . $request_param['callback_comments'], + ); + EDD()->session->set( 'novalnet_transaction_comments', $request_param['callback_comments'] ); + // Reactive subscription in Novalnet server. + edd_update_payment_status( $order_reference['order_no'], $edd_options[ $payment_gateway . '_order_completion_status' ] ); + wp_update_post( $nn_order_notes ); + $this->send_notify_mail( array( 'comments' => $request_param['callback_comments'] ) ); + $this->debug_error( $request_param['callback_comments'] ); + } + } + + /** + * Initial level process + * + * @since 1.0.2 + * @param array $request_param Get post params to be processed. + */ + public function zero_level_process( $request_param ) { + global $wpdb, $edd_options, $payment_gateway, $order_reference, $callback_amount, $org_amount, $payment_level; + + $test_mode = (int) ( edd_is_test_mode() || ! empty( $edd_options[ $payment_gateway . '_test_mode' ] ) || ! empty( $this->ary_request_params['test_mode'] ) ); + + if ( 0 === $payment_level ) { + // Process recurring order for the parent order. + if ( ! empty( $request_param['subs_billing'] ) && '1' === $request_param['subs_billing'] ) { + $subscription_details = get_subscription_details( $order_reference['order_no'] ); + if ( isset( $subscription_details['subs_plugin_enabled'] ) ) { + $response = $this->recurring_order_creation( $subscription_details['subs_id'], $request_param ); + $this->debug_error( $response ); + } + } elseif ( in_array( $request_param['payment_type'], array( 'GUARANTEED_INVOICE', 'INVOICE_START', 'DIRECT_DEBIT_SEPA', 'GUARANTEED_DIRECT_DEBIT_SEPA', 'CREDITCARD', 'PAYPAL' ), true ) && in_array( $request_param['tid_status'], array( '100', '91', '99' ), true ) && '100' === $request_param['status'] && in_array( $order_reference['gateway_status'], array( '75', '91', '99', '85', '98' ), true ) && $request_param['tid_status'] !== $order_reference['gateway_status'] ) { + /* translators: %1$s: date */ + $request_param['message'] = PHP_EOL . sprintf( __( 'The transaction has been confirmed on %1$s', 'edd-novalnet' ), edd_novalnet_formatted_date() ) . PHP_EOL; + $order_status = ( 'GUARANTEED_INVOICE' === $request_param['payment_type'] ) ? $edd_options[ $payment_gateway . '_order_callback_status' ] : $edd_options[ $payment_gateway . '_order_completion_status' ]; + if ( '75' === $order_reference['gateway_status'] && in_array( $request_param['tid_status'], array( '91', '99' ), true ) ) { + $order_status = $edd_options['novalnet_onhold_success_status']; + /* translators: %1$s: tid, %2$s: date */ + $request_param['message'] = PHP_EOL . sprintf( __( 'The transaction status has been changed from pending to on-hold for the TID: %1$s on %2$s.', 'edd-novalnet' ), $request_param['tid'], edd_novalnet_formatted_date() ) . PHP_EOL; + } + if ( in_array( $request_param['payment_type'], array( 'INVOICE_START', 'GUARANTEED_INVOICE' ), true ) && in_array( $order_reference['gateway_status'], array( '75', '91' ), true ) && in_array( $request_param['tid_status'], array( '91', '100' ) ) ) { + $request_param['order_no'] = $order_reference['order_no']; + $request_param['message'] .= novalnet_get_invoice_comments( $request_param, $payment_gateway, $org_amount, '', true, true ); + } + $wpdb->update( + $wpdb->prefix . 'novalnet_transaction_detail', + array( + 'gateway_status' => $request_param['tid_status'], + ), + array( + 'order_no' => $order_reference['order_no'], + ) + ); // db call ok; no-cache ok. + EDD()->session->set( 'novalnet_transaction_comments', $request_param['message'] ); + edd_update_payment_status( $order_reference['order_no'], $order_status ); + + $this->update_comments( $order_reference, $request_param['message'] ); + + $this->send_notify_mail( array( 'comments' => $request_param['message'] ) ); + } else if ( in_array( $request_param['payment_type'], array( 'PAYPAL', 'PRZELEWY24' ), true ) && ( '100' === $request_param['tid_status'] ) ) { + + if ( $callback_amount < $org_amount ) { + update_post_meta( $order_reference['order_no'], '_nn_callback_amount', $org_amount ); + /* translators: %1$s: tid, %2$s: amount, %3$s: date */ + $request_param['message'] = PHP_EOL . sprintf( __( 'Transaction updated successfully for the TID: %1$s on %2$s.', 'edd-novalnet' ), $request_param['shop_tid'], gmdate( 'Y-m-d H:i:s' ) ) . PHP_EOL; + $wpdb->update( + $wpdb->prefix . 'novalnet_transaction_detail', + array( + 'gateway_status' => '100', + ), + array( + 'order_no' => $order_reference['order_no'], + ) + ); // db call ok; no-cache ok. + + $status = ( ( '90' === $request_param['tid_status'] || '85' === $request_param['tid_status'] ) ? $edd_options[ $payment_gateway . '_order_pending_status' ] : ( ( '100' === $request_param['tid_status'] ) ? $edd_options[ $payment_gateway . '_order_completion_status' ] : '' ) ); + EDD()->session->set( 'novalnet_transaction_comments', $request_param['message'] ); + edd_update_payment_status( $order_reference['order_no'], $status ); + $this->update_comments( $order_reference, $request_param['message'] ); + + $this->send_notify_mail( array( 'comments' => $request_param['message'] ) ); + } else { + $this->debug_error( 'Order already Paid.' ); + } + } elseif ( 'PRZELEWY24' === $request_param['payment_type'] && ( '100' !== $request_param['tid_status'] || '100' !== $request_param['status'] ) ) { + // Przelewy24 cancel. + if ( '86' === $request_param['tid_status'] ) { + $this->debug_error( 'Payment type ( ' . $request_param['payment_type'] . ' ) is not applicable for this process!' ); + } + $cancellation_msg = get_status_desc( $request_param ); + /* translators: %s: reason */ + $request_param['message'] = PHP_EOL . sprintf( __( 'The transaction has been canceled due to: %s', 'edd-novalnet' ), $cancellation_msg ) . PHP_EOL; + + $wpdb->update( + $wpdb->prefix . 'novalnet_transaction_detail', + array( + 'gateway_status' => $request_param['tid_status'], + ), + array( + 'order_no' => $order_reference['order_no'], + ) + ); // db call ok; no-cache ok. + EDD()->session->set( 'novalnet_transaction_comments', $request_param['message'] ); + edd_update_payment_status( $order_reference['order_no'], 'abandoned' ); + $this->update_comments( $order_reference, $request_param['message'] ); + + $this->send_notify_mail( array( 'comments' => $request_param['message'] ) ); + } else { + $this->debug_error( 'Payment type ( ' . $request_param['payment_type'] . ' ) is not applicable for this process!' ); + }// End if. + }// End if. + } + + /** + * First level process + * + * @since 1.0.2 + * @param array $request_param Get post params to be processed. + */ + public function first_level_process( $request_param ) { + global $order_reference, $payment_level; + + if ( 1 === $payment_level && '100' === $request_param['status'] && '100' === $request_param['tid_status'] ) { + + if ( in_array( $request_param['payment_type'], array( 'CREDITCARD_BOOKBACK', 'GUARANTEED_INVOICE_BOOKBACK', 'GUARANTEED_SEPA_BOOKBACK', 'PAYPAL_BOOKBACK', 'REFUND_BY_BANK_TRANSFER_EU', 'PRZELEWY24_REFUND', 'CASHPAYMENT_REFUND' ), true ) ) { + /* translators: %1$s: parent tid, %2$s: amount, %3$s: tid */ + $request_param['message'] = PHP_EOL . sprintf( __( 'Refund has been initiated for the TID: %1$s with the amount %2$s. New TID: %3$s.', 'edd-novalnet' ), $request_param['shop_tid'], edd_currency_filter( edd_format_amount( $request_param ['amount'] / 100 ) ), $request_param['tid'] ) . PHP_EOL; + } else if ( 'RETURN_DEBIT_SEPA' === $request_param['payment_type'] ) { + /* translators: %1$s: parent tid, %2$s: amount, %3$s: date, %4$s: tid */ + $request_param['message'] = PHP_EOL . sprintf( __( 'Chargeback executed for return debit of TID:%1$s with the amount %2$s on %3$s. The subsequent TID: %4$s.', 'edd-novalnet' ),$request_param['shop_tid'], edd_currency_filter( edd_format_amount( $request_param ['amount'] / 100 ) ), gmdate( 'Y-m-d H:i:s' ), $request_param['tid'] ) . PHP_EOL; + } else if ( 'REVERSAL' === $request_param['payment_type'] ) { + /* translators: %1$s: parent tid, %2$s: amount, %3$s: date, %4$s: tid */ + $request_param['message'] = PHP_EOL . sprintf( __( 'Chargeback executed for reversal of TID: %1$s with the amount %2$s on %3$s. The subsequent TID: %4$s.', 'edd-novalnet' ), $request_param['shop_tid'], edd_currency_filter( edd_format_amount( $request_param ['amount'] / 100 ) ), gmdate( 'Y-m-d H:i:s' ), $request_param['tid'] ) . PHP_EOL; + } else { + /* translators: %1$s: parent tid, %2$s: amount, %3$s: date, %4$s: tid */ + $request_param['message'] = PHP_EOL . sprintf( __( 'Chargeback executed successfully for the TID: %1$s amount: %2$s on %3$s. The subsequent TID: %4$s.', 'edd-novalnet' ), $request_param['shop_tid'], edd_currency_filter( edd_format_amount( $request_param ['amount'] / 100 ) ), gmdate( 'Y-m-d H:i:s' ), $request_param['tid'] ) . PHP_EOL; + } + + edd_update_payment_status( $order_reference['order_no'], 'refunded' ); + $this->update_comments( $order_reference, $request_param['message'] ); + $this->send_notify_mail( array( 'comments' => $request_param['message'] ) ); + } + } + + /** + * Second level process + * + * @since 1.0.2 + * @param array $request_param Get post params to be processed. + */ + public function second_level_process( $request_param ) { + global $wpdb, $order_reference, $payment_level, $callback_amount, $org_amount, $sum_amount, $payment_gateway, $edd_options; + + if ( 2 === $payment_level && '100' === $request_param['status'] && '100' === $request_param['tid_status'] ) { + + $novalnet_comments = ''; + if ( in_array( $request_param['payment_type'], array( 'INVOICE_CREDIT', 'CASHPAYMENT_CREDIT', 'ONLINE_TRANSFER_CREDIT' ) ) ) { + if ( $callback_amount < $org_amount ) { + /* translators: %1$s: parent tid, %2$s: amount, %3$s: date, %4$s: tid */ + $request_param['message'] = PHP_EOL . sprintf( __( 'Credit has been successfully received for the TID: %1$s with amount %2$s on %3$s . Please refer PAID order details in our Novalnet Admin Portal for the TID: %4$s ', 'edd-novalnet' ), $request_param['shop_tid'], edd_currency_filter( edd_format_amount( $request_param ['amount'] / 100 ) ), gmdate( 'Y-m-d H:i:s' ), $request_param['tid'] ) . PHP_EOL; + + if ( 'ONLINE_TRANSFER_CREDIT' === $request_param['payment_type'] ) { + $request_param['message'] = PHP_EOL . sprintf( __( 'Credit has been successfully received for the TID: %1$s with amount %2$s on %3$s . Please refer PAID order details in our Novalnet Admin Portal for the TID: %4$s ', 'edd-novalnet' ), $request_param['shop_tid'], edd_currency_filter( edd_format_amount( $request_param ['amount'] / 100 ) ), gmdate( 'Y-m-d H:i:s' ), $request_param['tid'] ) . PHP_EOL; + } + + update_post_meta( $order_reference['order_no'], '_nn_callback_amount', $sum_amount ); + $wpdb->update( + $wpdb->prefix . 'novalnet_transaction_detail', + array( + 'callback_amount' => $sum_amount, + ), + array( + 'order_no' => $order_reference['order_no'], + ) + ); // db call ok; no-cache ok. + + $this->update_comments( $order_reference, $request_param['message'] ); + if ( $sum_amount >= (int) $org_amount ) { + EDD()->session->set( 'novalnet_transaction_comments', $request_param['message'] ); + edd_update_payment_status( $order_reference['order_no'], $edd_options[ $payment_gateway . '_order_callback_status' ] ); + } + $this->send_notify_mail( array( 'comments' => $request_param['message'] ) ); + }// End if. + $this->debug_error( 'Callback script executed already. Refer order: ' . $order_reference['order_no'] ); + }// End if. + else { + /* translators: %1$s: parent tid, %2$s: amount, %3$s: date, %4$s: tid */ + $request_param['message'] = PHP_EOL . sprintf( __( 'Credit has been successfully received for the TID: %1$s with amount %2$s on %3$s . Please refer PAID order details in our Novalnet Admin Portal for the TID: %4$s ', 'edd-novalnet' ), $request_param['shop_tid'], edd_currency_filter( edd_format_amount( $request_param ['amount'] / 100 ) ), gmdate( 'Y-m-d H:i:s' ), $request_param['tid'] ) . PHP_EOL; + // Update order comments. + $this->update_comments( $order_reference, $request_param['message'] ); + // Send notification mail to the configured E-mail. + $this->send_notify_mail( array( 'comments' => $request_param['message'] ) ); + } + $this->debug_error( 'Payment type ( ' . $request_param['payment_type'] . ') is not applicable for this process!' ); + }// End if. + } + + /** + * Update comments + * + * @since 1.0.2 + * @param array $order_reference Get post id. + * @param array $message Get message form payment processed. + * @param string $insert_payment_note Insert payment note. + */ + public function update_comments( $order_reference, $message, $insert_payment_note = true ) { + global $wpdb; + if ( $insert_payment_note ) { + edd_insert_payment_note( $order_reference['order_no'], $message ); + } + $comments = $wpdb->get_var( $wpdb->prepare( "SELECT post_excerpt FROM {$wpdb->posts} where ID =%s", $order_reference['order_no'] ) ); // db call ok; no-cache ok. + + $order_notes = array( + 'ID' => $order_reference['order_no'], + 'post_excerpt' => $comments . $message, + ); + wp_update_post( $order_notes ); + } + + /** + * Update comments + * + * @since 1.0.2 + * @param array $request_param Get all post params. + * @param array $order_reference Get post id. + */ + public function get_payment_data( &$request_param, $order_reference ) { + + $payment_gateway = get_novalnet_payment( $order_reference ); + $request_param['currency'] = isset( $request_param['currency'] ) ? edd_currency_symbol( strtoupper( $request_param['currency'] ) ) : edd_get_currency(); + $callback_amount = get_post_meta( $order_reference, '_nn_callback_amount', true ); + $sum_amount = ( isset( $request_param['amount'] ) && ! empty( $request_param['amount'] ) ? (int)$request_param['amount'] : '0' ) + (int)$callback_amount; + $org_amount = round( get_post_meta( $order_reference, '_edd_payment_total', true ), 2 ) * 100; + $payment_level = $this->get_payment_type_level(); + return array( + $payment_gateway, + $callback_amount, + $sum_amount, + $org_amount, + $payment_level, + ); + } +} diff --git a/includes/class-novalnet-subscriptions.php b/includes/class-novalnet-subscriptions.php new file mode 100755 index 0000000..81d2dfb --- /dev/null +++ b/includes/class-novalnet-subscriptions.php @@ -0,0 +1,440 @@ +query_params = wp_unslash( $_REQUEST ); // Input var okay. + + // transction id and profile id are processed in back-end subscription order details. + add_action( 'edd_recurring_post_create_payment_profiles', array( $this, 'novalnet_create_payment_profiles' ) ); + + // cancel of a subscription product and sends request to server. + add_action( 'edd_cancel_subscription', array( $this, 'novalnet_process_cancellation' ) ); + + // status when not cancelled to be appear. + add_filter( 'edd_subscription_can_cancel', array( $this, 'novalnet_can_cancel' ), 10, 2 ); + + // Update payment method. + add_filter( 'edd_subscription_can_update', array( $this, 'can_update' ), 10, 2 ); + add_action( 'edd_recurring_update_payment_form', array( $this, 'update_payment_method_form' ), 10, 2 ); + add_action( 'edd_recurring_update_subscription_payment_method', array( $this, 'process_novalnet_payment_method_update' ), 10, 3 ); + + // adds custom url to both front-end and back-end. + add_filter( 'edd_subscription_cancel_url', array( $this, 'novalnet_cancel_url' ), 10, 2 ); + + // Subscription script access to cancel order and hide details in subscription order back-end. + add_action( 'wp_enqueue_scripts', array( $this, 'novalnet_subscription_enqueue_scripts' ), 10 ); + add_action( 'admin_enqueue_scripts', array( $this, 'novalnet_subscription_enqueue_scripts' ), 10 ); + + // Error notice to be displayed in back-end. + add_action( 'admin_notices', array( $this, 'novalnet_subscription_notices' ) ); + } + + /** + * Update payment method for subscription in Novalnet payments + * + * @param boolean $ret Show update payment option. + * @param object $subscription The subscription object. + * @return bool + */ + public function can_update( $ret, $subscription ) { + + global $wpdb; + + $order_data = $wpdb->get_row( $wpdb->prepare( "SELECT payment_id FROM {$wpdb->prefix}novalnet_transaction_detail WHERE order_no=%s", $subscription->parent_payment_id ), ARRAY_A ); // db call ok; no-cache ok. + + if ( ! $ret && novalnet_check_string( $subscription->gateway ) && edd_is_gateway_active( $subscription->gateway ) && ! empty( $subscription->profile_id ) && in_array( $subscription->status, array( 'active', 'trialling' ), true ) && ( isset($order_data['payment_id']) && ! in_array( $order_data['payment_id'], array( '41', '40' ), true ) ) ) { + return true; + } + return $ret; + } + + /** + * Display the payment form for update payment method + * + * @param object $subscription The subscription object. + * @return void + */ + public function update_payment_method_form( $subscription ) { + + global $edd_options; + + if ( novalnet_check_string( $subscription->gateway ) ) { + if ( in_array( $subscription->gateway, array( 'novalnet_invoice', 'novalnet_sepa', 'novalnet_prepayment', 'novalnet_cc', 'novalnet_paypal' ), true ) ) { + $class_name = ucwords( $subscription->gateway, '_' ); + $payment_obj = new $class_name(); + $payment_obj->display_form( true ); + } + EDD()->session->set( 'novalnet_update_payment_method', NULL ); + } + } + + /** + * Process the update payment form + * + * @param int $user_id User ID. + * @param int $subscription_id Subscription ID. + * @param bool $verified Sanity check that the request to update is coming from a verified source. + * @return void + */ + public function process_novalnet_payment_method_update( $user_id, $subscription_id, $verified ) { + + global $edd_options, $wpdb; + + $request = wp_unslash( $_POST ); + $subscription = new EDD_Subscription( $subscription_id ); + $subscriber = new EDD_Recurring_Subscriber( $subscription->customer_id ); + + if ( 1 !== $verified || empty( $subscription->id ) || empty( $subscriber->id ) || ( $user_id != $subscriber->user_id ) ) { + wp_die( __( 'Invalid subscription id', 'edd-novalnet' ) ); + } + if ( novalnet_check_string( $subscription->gateway ) ) { + + $customer_details = get_user_meta( $subscription->customer_id ); + $billing_details = isset( $customer_details['_edd_user_address'] ) ? unserialize( $customer_details['_edd_user_address'][0] ) : ''; + + // Update the customer details + add_filter( 'edd_purchase_form_required_fields', array( $this, 'purchase_form_required_fields' ), 10, 1 ); + $valid_data = edd_purchase_form_validate_fields(); + $customer_data = edd_get_purchase_form_user($valid_data); + + $subs_id = $wpdb->get_var( $wpdb->prepare( "SELECT subs_id FROM {$wpdb->prefix}novalnet_subscription_details WHERE order_no='%s'", $subscription->parent_payment_id ) ); + + $customer_id = get_post_meta( $subscription->parent_payment_id, '_nn_customer_id', true); + + if ( !empty($customer_id) ) { + $customer_id = $customer_id; + } else { + $customer_id = $subscription->customer_id; + } + + $params = array( + 'amount' => 0, + 'gender' => 'u', + 'customer_no' => $customer_id, + 'first_name' => $customer_data['user_first'], + 'last_name' => $customer_data['user_last'], + 'email' => $subscription->customer->email, + 'street' => ! empty( $customer_data['address']['line1'] ) ? $customer_data['address']['line1'] : $billing_details['line1'], + 'city' => ! empty( $customer_data['address']['city'] ) ? $customer_data['address']['city'] : $billing_details['city'], + 'zip' => ! empty( $customer_data['address']['zip'] ) ? $customer_data['address']['zip'] : $billing_details['zip'], + 'country_code' => ! empty( $customer_data['address']['country'] ) ? $customer_data['address']['country'] : $billing_details['country'], + 'country' => ! empty( $customer_data['address']['country'] ) ? $customer_data['address']['country'] : $billing_details['country'], + 'search_in_street' => 1, + 'create_payment_ref' => 1, + 'subs_py_update' => $subs_id, + 'order_no' => $subscription->parent_payment_id, + 'test_mode' => (int) ( edd_is_test_mode() || ! empty( $edd_options[ $subscription->gateway . '_test_mode' ] ) ), + ); + $params = array_merge( get_merchant_details( $subscription->gateway ), $params, novalnet_get_system_data() ); + + if ( in_array( $subscription->gateway, array( 'novalnet_invoice', 'novalnet_prepayment' ), true ) ) { + if ( 'novalnet_invoice' === $subscription->gateway ) { + $params['invoice_type'] = 'INVOICE'; + } else { + $params['invoice_type'] = 'PREPAYMENT'; + } + $params['invoice_ref'] = 'BNR-' . $params['product'] . '-' . $subscription->parent_payment_id; + } elseif ( 'novalnet_sepa' === $subscription->gateway ) { + if ( empty($request['novalnet_sepa_holder']) || empty($request['novalnet_sepa_iban']) ) { + edd_set_error( 'edd_recurring_novalnet', __( 'Your account details are invalid', 'edd-novalnet' ) ); + wp_safe_redirect( $subscription->get_update_url() ); + die(); + } + $params['bank_account_holder'] = $request['novalnet_sepa_holder']; + $params['iban'] = $request['novalnet_sepa_iban']; + } elseif ( 'novalnet_cc' === $subscription->gateway ) { + if ( empty( $request['novalnet_cc_hash'] ) || empty( $request['novalnet_cc_uniqueid'] ) ) { + edd_set_error( 'edd_recurring_novalnet', $request['novalnet_cc_error'] ); + wp_safe_redirect( $subscription->get_update_url() ); + die(); + } + $params['pan_hash'] = $request['novalnet_cc_hash']; + $params['unique_id'] = $request['novalnet_cc_uniqueid']; + } + + if ( ( 'novalnet_cc' === $subscription->gateway && 1 == $request['novalnet_cc_do_redirect'] )|| 'novalnet_paypal' === $subscription->gateway ) { + $paygate_url = ''; + if ( 'novalnet_cc' === $subscription->gateway) { + $paygate_url = 'https://payport.novalnet.de/pci_payport'; + if ( isset($edd_options['novalnet_cc_enforced_3d']) && $edd_options['novalnet_cc_enforced_3d'] == 'yes' ) { + $params['enforce_3d'] = 1; + } + } elseif ( 'novalnet_paypal' === $subscription->gateway ) { + $paygate_url = 'https://payport.novalnet.de/paypal_payport'; + } + + $home_url = wp_parse_url( home_url() ); + $current_uri = "{$home_url['scheme']}://{$home_url['host']}" . add_query_arg( NULL, NULL ); + + EDD()->session->set( 'novalnet_update_payment_method', true ); + $subs_update = array( 'update_payment' => true, + 'return_url' => $current_uri + ); + $redirect_params = novalnet_get_redirect_param( $subscription->gateway, $params, $subs_update ); + $params = array_merge( $params, $redirect_params ); + + // Redirect to the paygate url. + novalnet_get_redirect( $paygate_url, $params ); + } + + // Send the transaction request to the novalnet server. + $response = novalnet_submit_request( $params ); + + // Update the novalnet response to the shop. + novalnet_check_response( $response, true ); + } + } + + /** + * Validate required customer details + * + * @return array + */ + public function purchase_form_required_fields( $required_fields ) { + if ( ! empty( $required_fields ) ) { + unset( $required_fields['edd_email'], $required_fields['edd_first'] ); + } + return $required_fields; + } + + /** + * Subscription error notice + * + * @since 1.1.0 + */ + public function novalnet_subscription_notices() { + $get_error = wp_unslash( $_GET ); + if ( ( isset( $get_error['novalnet-message'] ) && ! empty( $get_error['novalnet-message'] ) ) || ( isset( $get_error['novalnet-error'] ) && ! empty( $get_error['novalnet-error'] ) ) ) { // Input var okay. + $message = ! empty( $get_error['novalnet-message'] ) ? $get_error['novalnet-message'] : $get_error['novalnet-error']; // Input var okay. + $code = ! empty( $get_error['novalnet-message'] ) ? 'updated' : 'error'; // Input var okay. + echo '

' . esc_attr( $message ) . '

'; + } + } + + /** + * Adding subscription script + * + * @since 1.1.0 + */ + public function novalnet_subscription_enqueue_scripts() { + + // Enqueue style & script. + wp_enqueue_script( 'edd-novalnet-subscription-script', NOVALNET_PLUGIN_URL . 'assets/js/novalnet-subscription.js', array( 'jquery' ), NOVALNET_VERSION, true ); + wp_enqueue_style( 'edd-novalnet-subscription-script', NOVALNET_PLUGIN_URL . 'assets/css/novalnet-checkout.css', array(), NOVALNET_VERSION, true ); + $params = array( + 'reason_list' => $this->novalnet_subscription_cancel_form(), // Display Subscription cancel reason. + 'admin' => is_admin(), + 'error_message' => __( 'Please select the reason for subscription cancellation', 'edd-novalnet' ), + 'novalnet_subs_cancel' => __( 'The subscription has been already stopped or cancelled', 'edd-novalnet' ), + ); + if ( is_admin() && ( ! empty( $_REQUEST['page'] ) && 'edd-subscriptions' === $_REQUEST['page'] && ! empty( $_REQUEST['id'] ) ) ) { // Input var okay. + $novalnet_subs = new EDD_Subscription( absint( $_REQUEST['id'] ) ); // Input var okay. + $params ['hide_backend_details'] = novalnet_check_string( $novalnet_subs->gateway ); + $params ['can_update'] = ( novalnet_check_string( $novalnet_subs->gateway ) && in_array( $novalnet_subs->status, array( 'cancelled', 'completed', 'expired', 'failing' ) ) ) ? 'true' : 'false'; + } + wp_localize_script( 'edd-novalnet-subscription-script', 'novalnet_subscription', $params ); + } + + /** + * Subscription cancellation reason form + * + * @since 1.1.0 + * @return string + */ + public function novalnet_subscription_cancel_form() { + $form = '

'; + return $form; + } + + /** + * Add novalnet values to subscription params + * + * @since 1.1.0 + * @param array $subscriptions Creates subscription details in core ID's. + */ + public function novalnet_create_payment_profiles( $subscriptions ) { + // Gateways loop through each download and creates a payment profile and then sets the profile ID. + $purchase_key = $subscriptions->purchase_data['purchase_key']; + $user_id = $subscriptions->purchase_data['user_info']['id']; + if ( novalnet_check_string( $subscriptions->purchase_data['gateway'] ) ) { + $subscriptions->offsite = true; + foreach ( $subscriptions->subscriptions as $key => $val ) { + $subscriptions->subscriptions[ $key ]['profile_id'] = md5( $purchase_key . $user_id ); + } + } + } + + /** + * Cancel process of a subscription + * + * @since 1.1.0 + * @param array $data Allows subscription params to form object. + */ + public function novalnet_process_cancellation( $data ) { + global $wpdb; + + $subscription = new EDD_Subscription( absint( $data['sub_id'] ) ); + if ( 'cancelled' !== $subscription->status ) { + $reason_id = isset( $this->query_params['novalnet_subscription_cancel_reason'] ) ? $this->query_params['novalnet_subscription_cancel_reason'] : 'Other'; + $result_set = $wpdb->get_row( $wpdb->prepare( "SELECT vendor_id, auth_code, product_id, tariff_id, payment_id,tid FROM {$wpdb->prefix}novalnet_transaction_detail WHERE order_no=%s ORDER BY id DESC", $subscription->parent_payment_id ), ARRAY_A ); // db call ok; no-cache ok. + $cancel_request = array( + 'vendor' => $result_set['vendor_id'], + 'auth_code' => $result_set['auth_code'], + 'product' => $result_set['product_id'], + 'tariff' => $result_set['tariff_id'], + 'tid' => $result_set['tid'], + 'key' => $result_set['payment_id'], + 'cancel_sub' => 1, + 'cancel_reason' => $reason_id, + 'lang' => novalnet_shop_language(), + ); + $cancel_response = novalnet_submit_request( $cancel_request ); + if ( '100' === $cancel_response['status'] ) { + /* translators: %s: Cancel reason */ + $cancel_msg = "\n" . sprintf( __( 'Subscription has been canceled due to: %s', 'edd-novalnet' ), $cancel_request['cancel_reason'] ); + edd_update_payment_status( $subscription->parent_payment_id, 'abandoned' ); + $wpdb->update( + $wpdb->prefix . 'novalnet_subscription_details', + array( + 'termination_reason' => $cancel_request['cancel_reason'], + 'termination_at' => gmdate( 'Y-m-d H:i:s' ), + ), + array( + 'order_no' => $subscription->parent_payment_id, + ) + ); // db call ok; no-cache ok. + $subscription->cancel(); + if ( is_admin() ) { + $url = add_query_arg( + array( + 'novalnet-message' => $cancel_request['cancel_reason'], + 'id' => $subscription->id, + ), + admin_url( 'edit.php?post_type=download&page=edd-subscriptions' ) + ); + } + } else { + $cancel_msg = ( isset( $cancel_response['status_text'] ) ? $cancel_response['status_text'] : ( isset( $cancel_response['status_desc'] ) ? $cancel_response['status_desc'] : '' ) ); + if ( is_admin() ) { + $url = add_query_arg( + array( + 'novalnet-error' => $cancel_msg, + 'id' => $subscription->id, + ), + admin_url( 'edit.php?post_type=download&page=edd-subscriptions' ) + ); + } + } + $result = $wpdb->get_results( $wpdb->prepare( "SELECT post_excerpt FROM {$wpdb->posts} where ID =%s", $subscription->parent_payment_id ) ); // db call ok; no-cache ok. + $exist_comments = $result[0]->post_excerpt; + $nn_order_notes = array( + 'ID' => $subscription->parent_payment_id, + 'post_excerpt' => $exist_comments . $cancel_msg, + ); + wp_update_post( $nn_order_notes ); + edd_insert_payment_note( $subscription->parent_payment_id, $cancel_msg ); + if ( isset( $cancel_msg ) && is_admin() ) { + echo '

' . esc_html( $cancel_msg ) . '

'; + } + }// End if(). + if ( is_admin() ) { + wp_safe_redirect( $url ); + exit; + } else { + wp_safe_redirect( + remove_query_arg( + array( '_wpnonce', 'edd_action', 'sub_id' ), + add_query_arg( + array( + 'edd-message' => 'cancelled', + ) + ) + ) + ); + exit; + } + } + + /** + * Cancel of a subscription based on status and Novalnet payments + * + * @since 1.1.0 + * @param string $can_cancel Show cancel option other than cancel status. + * @param array $subscriptions Params to cancel a subscription. + */ + public function novalnet_can_cancel( $can_cancel, $subscriptions ) { + $edd_recurring_version = preg_replace( '/[^0-9.].*/', '', get_option( 'edd_recurring_version' ) ); + $get_times_billed = ( version_compare($edd_recurring_version, '2.6', '<') ) ? $subscriptions->get_total_payments() : $subscriptions->get_times_billed(); + // Back-end cancel subscription show based on status for Novalnet Payment. + return ( novalnet_check_string( $subscriptions->gateway ) && ( ! in_array($subscriptions->status, array( 'cancelled', 'completed', 'expired', 'failing' ), true ) && $get_times_billed !== $subscriptions->bill_times ) ) ? true : $can_cancel; + } + + /** + * Append custom value to both front-end and back-end of a cancel process + * + * @since 1.1.0 + * @param string $url Gets subscription url. + * @param array $subscriptions Params to cancel a subscription. + * @return $url + */ + public function novalnet_cancel_url( $url, $subscriptions ) { + + // Back-end cancel subscription show based on status for Novalnet Payment. + if ( novalnet_check_string( $subscriptions->gateway ) ) { + if ( false !== strpos( $url, 'edit.php' ) ) { + $url_array = explode( 'edit.php?', $url ); + $url = $url_array['0'] . 'edit.php?novalnet_subscription=true&' . $url_array['1']; + } else { + $url = $url . '&novalnet_subscription=true'; + } + } + return $url; + } +} +new Novalnet_Subscriptions(); diff --git a/includes/gateways/class-novalnet-cashpayment.php b/includes/gateways/class-novalnet-cashpayment.php new file mode 100755 index 0000000..6172989 --- /dev/null +++ b/includes/gateways/class-novalnet-cashpayment.php @@ -0,0 +1,234 @@ + array( + 'admin_label' => __( 'Novalnet Barzahlen/viacash', 'edd-novalnet' ), + 'checkout_label' => __( 'Barzahlen/viacash ', 'edd-novalnet' ), + 'supports' => array(), + ), + ); + $novalnet_cashpayment = apply_filters( 'edd_register_novalnet_cashpayment_gateway', $novalnet_cashpayment ); + $gateways = array_merge( $gateways, $novalnet_cashpayment ); + return $gateways; + } + + /** + * Register the action to display the payment form + * + * @since 1.0.1 + */ + public function display_form() { + global $edd_options; + $test_mode = (int) ( edd_is_test_mode() || ! empty( $edd_options['novalnet_cashpayment_test_mode'] ) ); + $information = isset( $edd_options['novalnet_cashpayment_information'] ) ? trim( $edd_options['novalnet_cashpayment_information'] ) : ''; + $payment_method_name = __( 'Barzahlen/viacash', 'edd-novalnet' ); + ?> +
+
+ +
+

+ +

+

+ +

+ +

+ +

+ +
+ 'novalnet_cashpayment_settings', + 'name' => ' ' . __( 'Novalnet Barzahlen/viacash', 'edd-novalnet' ) . ' ', + 'desc' => __( 'Configure the gateway settings', 'edd-novalnet' ), + 'type' => 'header', + ), + array( + 'id' => 'novalnet_cashpayment_test_mode', + 'name' => __( 'Enable test mode', 'edd-novalnet' ), + 'type' => 'checkbox', + 'tooltip_title' => __( 'Enable test mode', 'edd-novalnet' ), + 'tooltip_desc' => __( 'The payment will be processed in the test mode therefore amount for this transaction will not be charged', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_cashpayment_slip_date', + 'name' => __( 'Slip expiry date (in days)', 'edd-novalnet' ), + 'type' => 'number', + 'size' => 'regular', + 'min' => 1, + 'tooltip_title' => __( 'Slip expiry date (in days)', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Number of days given to the buyer to pay at a store. If this field is left blank, 14 days will be set as slip expiry date by default. ', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_cashpayment_order_completion_status', + 'name' => __( 'Completed order status', 'edd-novalnet' ), + 'type' => 'select', + 'options' => edd_get_payment_statuses(), + 'std' => 'processing', + 'tooltip_title' => __( 'Completed order status', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Status to be used for successful orders.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_cashpayment_order_callback_status', + 'name' => __( 'Callback / Webhook order status', 'edd-novalnet' ), + 'type' => 'select', + 'options' => edd_get_payment_statuses(), + 'std' => 'publish', + 'tooltip_title' => __( 'Callback / Webhook order status', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Status to be used when callback script is executed for payment received by Novalnet.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_cashpayment_information', + 'name' => __( 'Notification for the buyer', 'edd-novalnet' ), + 'type' => 'textarea', + 'size' => 'regular', + 'desc' => __( 'The entered text will be displayed at the checkout page', 'edd-novalnet' ), + ), + ); + $novalnet_cashpayment = apply_filters( 'edd_novalnet_cashpayment_settings', $novalnet_cashpayment ); + $gateway_settings['novalnet_cashpayment'] = $novalnet_cashpayment; + return $gateway_settings; + } +} +new Novalnet_Cashpayment(); +?> diff --git a/includes/gateways/class-novalnet-cc.php b/includes/gateways/class-novalnet-cc.php new file mode 100755 index 0000000..b9751aa --- /dev/null +++ b/includes/gateways/class-novalnet-cc.php @@ -0,0 +1,408 @@ + $billing_details['line1'], + 'city' => $billing_details['city'], + 'zip' => $billing_details['zip'], + 'country_code' => $billing_details['country'] + ); + } + + // Enqueue style. + wp_enqueue_style( 'edd-novalnet-cc-style', NOVALNET_PLUGIN_URL . 'assets/css/novalnet-checkout.css' ); + + // Enqueue script. + wp_enqueue_script( 'edd-novalnetutility-cc-script', 'https://cdn.novalnet.de/js/v2/NovalnetUtility.js', array( 'jquery' ), NOVALNET_VERSION, true ); + wp_enqueue_script( 'edd-novalnet-cc-script', NOVALNET_PLUGIN_URL . 'assets/js/novalnet-cc.js', array( 'jquery' ), NOVALNET_VERSION, true ); + wp_localize_script( + 'edd-novalnet-cc-script', + 'novalnet_cc', + array_merge($billing_address, + array( + 'card_holder_label' => __( 'Card holder name', 'edd-novalnet' ), + 'card_holder_input' => __( 'Name on card', 'edd-novalnet' ), + 'card_number_label' => __( 'Card number', 'edd-novalnet' ), + 'card_number_input' => __( 'XXXX XXXX XXXX XXXX', 'edd-novalnet' ), + 'card_expiry_label' => __( 'Expiry date', 'edd-novalnet' ), + 'card_cvc_label' => __( 'CVC/CVV/CID', 'edd-novalnet' ), + 'card_cvc_input' => __( 'XXX', 'edd-novalnet' ), + 'card_error_text' => __( 'Your credit card details are invalid', 'edd-novalnet' ), + 'common_label_style' => ! empty( $edd_options['novalnet_common_label_style'] ) ? trim( $edd_options['novalnet_common_label_style'] ) : '', + 'common_field_style' => ! empty( $edd_options['novalnet_common_field_style'] ) ? trim( $edd_options['novalnet_common_field_style'] ) : '', + 'common_style_text' => ! empty( $edd_options['novalnet_common_style_text'] ) ? trim( $edd_options['novalnet_common_style_text'] ) : '', + 'client_key' => isset( $edd_options['novalnet_client_key'] ) ? $edd_options['novalnet_client_key'] : '', + 'test_mode' => (int) ( edd_is_test_mode() || ! empty( $edd_options['novalnet_cc_test_mode'] ) ), + 'first_name' => !empty($user_data) ? $user_data['first_name'][0] : '', + 'last_name' => !empty($user_data) ? $user_data['last_name'][0] : '', + 'amount' => edd_get_cart_total() * 100, + 'currency' => edd_get_currency(), + 'lang' => novalnet_shop_language(), + 'enforce_3d' => ( isset($edd_options['novalnet_cc_enforced_3d']) && $edd_options['novalnet_cc_enforced_3d'] == 'yes' ) ? 1 : 0, + ) + ) + ); + } + + /** + * Update the registered payment settings while saving + * + * @since 1.1.0 + * @access public + */ + public static function update_novalnet_settings() { + // Update creditcard configuraion fields. + update_option( self::register_novalnet_cc_settings() ); + } + + /** + * Register the payment gateways setting section + * + * @since 1.1.0 + * @access public + * @param array $gateway_sections Get CC payment to append in default gateways. + * @return array $gateway_sections Returns CC in along with gateway payments. + */ + public function register_novalnet_cc_gateway( $gateway_sections ) { + if ( edd_is_gateway_active( 'novalnet_cc' ) ) { + $gateway_sections['novalnet_cc'] = __( 'Novalnet Credit/Debit Cards', 'edd-novalnet' ); + } + return $gateway_sections; + } + + /** + * Register the gateway payment for cc + * + * @since 1.0.1 + * @param array $gateways Allows payment details. + * @return array $gateways Show CC payment in front-end and back-end. + */ + public function register_novalnet_cc( $gateways ) { + + $novalnet_cc = array( + 'novalnet_cc' => array( + 'admin_label' => __( 'Novalnet Credit/Debit Cards', 'edd-novalnet' ), + 'checkout_label' => __( 'Credit/Debit Cards', 'edd-novalnet' ), + 'supports' => array(), + ), + ); + $novalnet_cc = apply_filters( 'edd_register_novalnet_cc_gateway', $novalnet_cc ); + $gateways = array_merge( $gateways, $novalnet_cc ); + return $gateways; + } + + /** + * Register the action to display the payment form + * + * @since 1.1.0 + */ + public function display_form() { + global $edd_options; + + $language = get_bloginfo( 'language' ); + $language = substr( $language, 0, 2 ); + $test_mode = (int) ( edd_is_test_mode() || ! empty( $edd_options['novalnet_cc_test_mode'] ) ); + $information = ! empty( $edd_options['novalnet_cc_information'] ) ? trim( $edd_options['novalnet_cc_information'] ) : ''; + $payment_method_name = __( 'Credit/Debit Cards', 'edd-novalnet' ); + ?> +
+
+ +
+

+ +

+

+ +

+ +

+ +

+ + + + + + + + +
+ novalnet_get_credit_card_data(); + // Get system data. + $system_data = novalnet_get_system_data(); + $params = array_merge( $payment_data, $card_data, $customer_data, $system_data ); + $params['nn_it'] = 'iframe'; + // Process the onhold product. + if (isset($edd_options['novalnet_invoice_manual_limit']) && 'authorize' === $edd_options['novalnet_cc_manual_limit'] ) { + if ( isset( $edd_options['novalnet_cc_manual_check'] ) ) { + $payment_data['amount'] = ( novalnet_digits_check( $edd_options['novalnet_cc_manual_check'] ) ) ? $payment_data['amount'] : 0; + if ( $payment_data['amount'] >= $edd_options['novalnet_cc_manual_check'] ) { + $params['on_hold'] = 1; + } + } else { + $params['on_hold'] = 1; + } + } + + if ( isset($_REQUEST['novalnet_cc_do_redirect']) && $_REQUEST['novalnet_cc_do_redirect'] == 1 ) { + EDD()->session->set( 'novalnet_cc_do_redirect', $_REQUEST['novalnet_cc_do_redirect'] ); + $paygate_url = 'https://payport.novalnet.de/pci_payport'; + if ( isset($edd_options['novalnet_cc_enforced_3d']) && $edd_options['novalnet_cc_enforced_3d'] == 'yes' ) { + $params['enforce_3d'] = 1; + } + // Get redirect payment data. + $redirect_param = novalnet_get_redirect_param( $purchase_data['gateway'], $payment_data ); + $params = array_merge( $params, $redirect_param ); + + // Create the subscription order for the subscription product. + + novalnet_check_subscription( $purchase_data, $params ); + // Redirect to the paygate url. + novalnet_get_redirect( $paygate_url, $params ); + + } else { + + // Create the subscription order for the subscription product + novalnet_check_subscription( $purchase_data, $params ); + // Send the transaction request to the novalnet server + $parsed_response = novalnet_submit_request( $params ); + if ( '100' === $parsed_response['status'] ) { + novalnet_check_response( $parsed_response ); + } else { + novalnet_transaction_failure( $parsed_response ); + } + } + + } + + /** Get Credit Card values + * + * @since 1.0.1 + */ + public function novalnet_get_credit_card_data() { + $request = $_REQUEST; // Input var okay. + if ( ! empty( $request['novalnet_cc_hash'] ) && ! empty( $request['novalnet_cc_uniqueid'] ) ) { + return array( + 'pan_hash' => sanitize_key( $request['novalnet_cc_hash'] ), + 'unique_id' => sanitize_key( $request['novalnet_cc_uniqueid'] ), + ); + } elseif ( ! empty( $request['novalnet_cc_error'] ) ) { + edd_set_error( 'basic_validation', $request['novalnet_cc_error'] ); + edd_send_back_to_checkout( '?payment-mode=novalnet_cc' ); + } else { + edd_set_error( 'basic_validation', __( 'Your credit card details are invalid', 'edd-novalnet' ) ); + edd_send_back_to_checkout( '?payment-mode=novalnet_cc' ); + } + } + + /** + * Adds the settings of the Novalnet Credit Card section + * + * @since 1.1.0 + * @param array $gateway_settings Back-end configuration list. + * @return array $gateway_settings Save back-end configuration's. + */ + public function register_novalnet_cc_settings( $gateway_settings ) { + + $novalnet_cc = array( + array( + 'id' => 'novalnet_cc_settings', + 'name' => '' . __( 'Novalnet Credit/Debit Cards', 'edd-novalnet' ) . ' ', + 'desc' => __( 'Configure the gateway settings', 'edd-novalnet' ), + 'type' => 'header', + ), + array( + 'id' => 'novalnet_cc_test_mode', + 'name' => __( 'Enable test mode', 'edd-novalnet' ), + 'type' => 'checkbox', + 'tooltip_title' => __( 'Enable test mode', 'edd-novalnet' ), + 'tooltip_desc' => __( 'The payment will be processed in the test mode therefore amount for this transaction will not be charged', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_cc_manual_limit', + 'name' => __( 'Payment action', 'edd-novalnet' ), + 'type' => 'select', + 'std' => 'capture', + 'tooltip_title' => __( 'Payment action', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Choose whether or not the payment should be charged immediately. Capture completes the transaction by transferring the funds from buyer account to merchant account. Authorize verifies payment details and reserves funds to capture it later, giving time for the merchant to decide on the order.', 'edd-novalnet' ), + 'options' => array( + 'capture' => __( 'Capture', 'edd-novalnet' ), + 'authorize' => __( 'Authorize', 'edd-novalnet' ), + ), + 'size' => 'regular', + ), + array( + 'id' => 'novalnet_cc_manual_check', + 'name' => __( 'Minimum transaction limit for authorization', 'edd-novalnet' ), + 'type' => 'number', + 'size' => 'regular', + 'desc' => __( '

(in minimum unit of currency. E.g. enter 100 which is equal to 1.00)', 'edd-novalnet' ), + 'tooltip_title' => __( 'Minimum transaction limit for authorization', 'edd-novalnet' ), + 'tooltip_desc' => __( 'In case the order amount exceeds the mentioned limit, the transaction will be set on-hold till your confirmation of the transaction. You can leave the field empty if you wish to process all the transactions as on-hold.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_cc_enforced_3d', + 'name' => __( 'Enforce 3D secure payment outside EU', 'edd-novalnet' ), + 'type' => 'select', + 'tooltip_title' => __( 'Enforce 3D secure payment outside EU', 'edd-novalnet' ), + 'tooltip_desc' => __( 'By enabling this option, all payments from cards issued outside the EU will be authenticated via 3DS 2.0 SCA', 'edd-novalnet' ), + 'options' => array( + 'yes' => __( 'Yes', 'edd-novalnet' ), + 'no' => __( 'No', 'edd-novalnet' ), + ), + 'std' => 'no', + ), + array( + 'id' => 'novalnet_cc_order_completion_status', + 'name' => __( 'Completed order status', 'edd-novalnet' ), + 'type' => 'select', + 'options' => edd_get_payment_statuses(), + 'std' => 'publish', + 'tooltip_title' => __( 'Completed order status', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Status to be used for successful orders.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_cc_information', + 'name' => __( 'Notification for the buyer', 'edd-novalnet' ), + 'type' => 'textarea', + 'size' => 'regular', + 'desc' => __( 'The entered text will be displayed at the checkout page', 'edd-novalnet' ), + ), + array( + 'name' => '' . __( 'Custom CSS settings', 'edd-novalnet' ) . ' ', + 'type' => 'header', + 'id' => 'novalnet_css_main_settings', + ), + array( + 'name' => '' . __( 'CSS settings for iframe form', 'edd-novalnet' ) . ' ', + 'type' => 'header', + 'id' => 'novalnet_css_settings', + ), + array( + 'id' => 'novalnet_common_label_style', + 'name' => __( 'Label', 'edd-novalnet' ), + 'desc' => __( 'E.g: color:#999999; background-color:#FFFFFF;', 'edd-novalnet' ), + 'type' => 'textarea', + 'size' => 'regular', + 'std' => 'font-weight: 700;display: block;position: relative;line-height: 100%;font-size: 114%;font-family: NonBreakingSpaceOverride, "Hoefler Text", Garamond, "Times New Roman", serif;letter-spacing: normal;', + ), + array( + 'id' => 'novalnet_common_field_style', + 'name' => __( 'Input', 'edd-novalnet' ), + 'desc' => __( 'E.g: color:#999999; background-color:#FFFFFF;', 'edd-novalnet' ), + 'type' => 'textarea', + 'size' => 'regular', + 'std' => '.input{padding: 4px 6px;display: inline-block;width: 100%;}', + ), + array( + 'id' => 'novalnet_common_style_text', + 'name' => __( 'CSS Text', 'edd-novalnet' ), + 'desc' => __( 'E.g: #idselector{color:#999999;}.classSelector{color:#000000}', 'edd-novalnet' ), + 'type' => 'textarea', + 'allow_blank' => false, + 'std' => 'body{color: #141412; line-height: 1.5; margin: 0;} html, button, input, select, textarea{font-family: "Source Sans Pro",Helvetica,sans-serif;color: #000;}html{font-size: 100%;}', + ), + ); + $novalnet_cc = apply_filters( 'edd_novalnet_cc_settings', $novalnet_cc ); + $gateway_settings['novalnet_cc'] = $novalnet_cc; + return $gateway_settings; + } +} +new Novalnet_Cc(); +?> diff --git a/includes/gateways/class-novalnet-eps.php b/includes/gateways/class-novalnet-eps.php new file mode 100755 index 0000000..af89cc0 --- /dev/null +++ b/includes/gateways/class-novalnet-eps.php @@ -0,0 +1,213 @@ + array( + 'admin_label' => __( 'Novalnet eps', 'edd-novalnet' ), + 'checkout_label' => __( 'eps', 'edd-novalnet' ), + 'supports' => array(), + ), + ); + $novalnet_eps = apply_filters( 'edd_register_novalnet_eps_gateway', $novalnet_eps ); + $gateways = array_merge( $gateways, $novalnet_eps ); + return $gateways; + } + + /** + * Register the action to display the payment form + * + * @since 1.0.1 + * @return void + */ + public function display_form() { + global $edd_options; + $test_mode = (int) ( edd_is_test_mode() || ! empty( $edd_options['novalnet_eps_test_mode'] ) ); + $information = isset( $edd_options['novalnet_eps_information'] ) ? trim( $edd_options['novalnet_eps_information'] ) : ''; + $payment_method_name = __( 'eps', 'edd-novalnet' ); + ?> +

+
+ +
+

+ +

+

+ +

+ +

+ +

+ +
+ 'novalnet_eps_settings', + 'name' => ' ' . __( 'Novalnet eps', 'edd-novalnet' ) . ' ', + 'desc' => __( 'Configure the gateway settings', 'edd-novalnet' ), + 'type' => 'header', + ), + array( + 'id' => 'novalnet_eps_test_mode', + 'name' => __( 'Enable test mode', 'edd-novalnet' ), + 'type' => 'checkbox', + 'tooltip_title' => __( 'Enable test mode', 'edd-novalnet' ), + 'tooltip_desc' => __( 'The payment will be processed in the test mode therefore amount for this transaction will not be charged', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_eps_order_completion_status', + 'name' => __( 'Completed order status', 'edd-novalnet' ), + 'type' => 'select', + 'options' => edd_get_payment_statuses(), + 'std' => 'publish', + 'tooltip_title' => __( 'Completed order status', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Status to be used for successful orders.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_eps_information', + 'name' => __( 'Notification for the buyer', 'edd-novalnet' ), + 'type' => 'textarea', + 'size' => 'regular', + 'desc' => __( 'The entered text will be displayed at the checkout page', 'edd-novalnet' ), + ), + ); + $novalnet_eps = apply_filters( 'edd_novalnet_eps_settings', $novalnet_eps ); + $gateway_settings['novalnet_eps'] = $novalnet_eps; + return $gateway_settings; + } +} +new Novalnet_EPS(); +?> diff --git a/includes/gateways/class-novalnet-giropay.php b/includes/gateways/class-novalnet-giropay.php new file mode 100755 index 0000000..2beae6d --- /dev/null +++ b/includes/gateways/class-novalnet-giropay.php @@ -0,0 +1,213 @@ + array( + 'admin_label' => __( 'Novalnet giropay', 'edd-novalnet' ), + 'checkout_label' => __( 'giropay', 'edd-novalnet' ), + 'supports' => array(), + ), + ); + $novalnet_giropay = apply_filters( 'edd_register_novalnet_giropay_gateway', $novalnet_giropay ); + $gateways = array_merge( $gateways, $novalnet_giropay ); + return $gateways; + } + + /** + * Register the action to display the payment form + * + * @since 1.0.1 + */ + public function display_form() { + global $edd_options; + $test_mode = (int) ( edd_is_test_mode() || ! empty( $edd_options['novalnet_giropay_test_mode'] ) ); + $information = isset( $edd_options['novalnet_giropay_information'] ) ? trim( $edd_options['novalnet_giropay_information'] ) : ''; + $payment_method_name = __( 'giropay', 'edd-novalnet' ); + ?> +
+
+ +
+

+ +

+

+ +

+ +

+ +

+ +
+ 'novalnet_giropay_settings', + 'name' => ' ' . __( 'Novalnet giropay', 'edd-novalnet' ) . ' ', + 'desc' => __( 'Configure the gateway settings', 'edd-novalnet' ), + 'type' => 'header', + ), + array( + 'id' => 'novalnet_giropay_test_mode', + 'name' => __( 'Enable test mode', 'edd-novalnet' ), + 'type' => 'checkbox', + 'tooltip_title' => __( 'Enable test mode', 'edd-novalnet' ), + 'tooltip_desc' => __( 'The payment will be processed in the test mode therefore amount for this transaction will not be charged', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_giropay_order_completion_status', + 'name' => __( 'Completed order status', 'edd-novalnet' ), + 'type' => 'select', + 'options' => edd_get_payment_statuses(), + 'std' => 'publish', + 'tooltip_title' => __( 'Completed order status', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Status to be used for successful orders.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_giropay_information', + 'name' => __( 'Notification for the buyer', 'edd-novalnet' ), + 'type' => 'textarea', + 'size' => 'regular', + 'desc' => __( 'The entered text will be displayed at the checkout page', 'edd-novalnet' ), + ), + ); + $novalnet_giropay = apply_filters( 'edd_novalnet_giropay_settings', $novalnet_giropay ); + $gateway_settings['novalnet_giropay'] = $novalnet_giropay; + return $gateway_settings; + } +} +new Novalnet_Giropay(); +?> diff --git a/includes/gateways/class-novalnet-ideal.php b/includes/gateways/class-novalnet-ideal.php new file mode 100755 index 0000000..c91c9bf --- /dev/null +++ b/includes/gateways/class-novalnet-ideal.php @@ -0,0 +1,213 @@ + array( + 'admin_label' => __( 'Novalnet iDEAL', 'edd-novalnet' ), + 'checkout_label' => __( 'iDEAL', 'edd-novalnet' ), + ), + ); + $novalnet_ideal = apply_filters( 'edd_register_novalnet_ideal_gateway', $novalnet_ideal ); + $gateways = array_merge( $gateways, $novalnet_ideal ); + return $gateways; + } + + /** + * Register the action to display the payment form + * + * @since 1.0.1 + */ + public function display_form() { + global $edd_options; + $test_mode = (int) ( edd_is_test_mode() || ! empty( $edd_options['novalnet_ideal_test_mode'] ) ); + $information = isset( $edd_options['novalnet_ideal_information'] ) ? trim( $edd_options['novalnet_ideal_information'] ) : ''; + $payment_method_name = __( 'iDEAL', 'edd-novalnet' ); + ?> +
+
+ +
+

+ +

+

+ +

+ +

+ +

+ +
+ 'novalnet_ideal_settings', + 'name' => ' ' . __( 'Novalnet iDEAL', 'edd-novalnet' ) . ' ', + 'desc' => __( 'Configure the gateway settings', 'edd-novalnet' ), + 'type' => 'header', + ), + array( + 'id' => 'novalnet_ideal_test_mode', + 'name' => __( 'Enable test mode', 'edd-novalnet' ), + 'type' => 'checkbox', + 'tooltip_title' => __( 'Enable test mode', 'edd-novalnet' ), + 'tooltip_desc' => __( 'The payment will be processed in the test mode therefore amount for this transaction will not be charged', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_ideal_order_completion_status', + 'name' => __( 'Completed order status', 'edd-novalnet' ), + 'type' => 'select', + 'options' => edd_get_payment_statuses(), + 'std' => 'publish', + 'tooltip_title' => __( 'Completed order status', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Status to be used for successful orders.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_ideal_information', + 'name' => __( 'Notification for the buyer', 'edd-novalnet' ), + 'type' => 'textarea', + 'size' => 'regular', + 'desc' => __( 'The entered text will be displayed at the checkout page', 'edd-novalnet' ), + ), + ); + $novalnet_ideal = apply_filters( 'edd_novalnet_ideal_settings', $novalnet_ideal ); + $gateway_settings['novalnet_ideal'] = $novalnet_ideal; + return $gateway_settings; + } +} +new Novalnet_Ideal(); +?> diff --git a/includes/gateways/class-novalnet-instantbank.php b/includes/gateways/class-novalnet-instantbank.php new file mode 100755 index 0000000..b68a7df --- /dev/null +++ b/includes/gateways/class-novalnet-instantbank.php @@ -0,0 +1,212 @@ + array( + 'admin_label' => __( 'Novalnet Sofort', 'edd-novalnet' ), + 'checkout_label' => __( 'Sofort', 'edd-novalnet' ), + ), + ); + $novalnet_instantbank = apply_filters( 'edd_register_novalnet_instantbank_gateway', $novalnet_instantbank ); + $gateways = array_merge( $gateways, $novalnet_instantbank ); + return $gateways; + } + + /** + * Register the action to display the payment form + * + * @since 1.0.1 + */ + public function display_form() { + global $edd_options; + $test_mode = (int) ( edd_is_test_mode() || ! empty( $edd_options['novalnet_instantbank_test_mode'] ) ); + $information = isset( $edd_options['novalnet_instantbank_information'] ) ? trim( $edd_options['novalnet_instantbank_information'] ) : ''; + $payment_method_name = __( 'Sofort', 'edd-novalnet' ); + ?> +
+
+ +
+

+ +

+

+ +

+ +

+ +

+ +
+ 'novalnet_instantbank_settings', + 'name' => ' ' . __( 'Novalnet Sofort', 'edd-novalnet' ) . ' ', + 'desc' => __( 'Configure the gateway settings', 'edd-novalnet' ), + 'type' => 'header', + ), + array( + 'id' => 'novalnet_instantbank_test_mode', + 'name' => __( 'Enable test mode', 'edd-novalnet' ), + 'type' => 'checkbox', + 'tooltip_title' => __( 'Enable test mode', 'edd-novalnet' ), + 'tooltip_desc' => __( 'The payment will be processed in the test mode therefore amount for this transaction will not be charged', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_instantbank_order_completion_status', + 'name' => __( 'Completed order status', 'edd-novalnet' ), + 'type' => 'select', + 'options' => edd_get_payment_statuses(), + 'std' => 'publish', + 'tooltip_title' => __( 'Completed order status', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Status to be used for successful orders.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_instantbank_information', + 'name' => __( 'Notification for the buyer', 'edd-novalnet' ), + 'type' => 'textarea', + 'size' => 'regular', + 'desc' => __( 'The entered text will be displayed at the checkout page', 'edd-novalnet' ), + ), + ); + $novalnet_instantbank = apply_filters( 'edd_novalnet_instantbank_settings', $novalnet_instantbank ); + $gateway_settings['novalnet_instantbank'] = $novalnet_instantbank; + return $gateway_settings; + } +} +new Novalnet_Instantbank(); +?> diff --git a/includes/gateways/class-novalnet-invoice.php b/includes/gateways/class-novalnet-invoice.php new file mode 100755 index 0000000..be640c5 --- /dev/null +++ b/includes/gateways/class-novalnet-invoice.php @@ -0,0 +1,367 @@ + array( + 'admin_label' => __( 'Novalnet Invoice', 'edd-novalnet' ), + 'checkout_label' => __( 'Invoice', 'edd-novalnet' ), + 'supports' => array(), + ), + ); + $novalnet_invoice = apply_filters( 'edd_register_novalnet_invoice_gateway', $novalnet_invoice ); + $gateways = array_merge( $gateways, $novalnet_invoice ); + return $gateways; + } + + /** + * Register the action to display the payment form + * + * @since 1.0.1 + */ + public function display_form( $is_update_payment_method = false ) { + + global $edd_options; + + $update_payment = $is_update_payment_method; + + $user_data = get_user_meta( get_current_user_id() ); + $test_mode = (int) ( edd_is_test_mode() || ! empty( $edd_options['novalnet_invoice_test_mode'] ) ); + $information = isset( $edd_options['novalnet_invoice_information'] ) ? trim( $edd_options['novalnet_invoice_information'] ) : ''; + $payment_method_name = __( 'Invoice', 'edd-novalnet' ); + $payment_name = 'novalnet_invoice'; + + include_once NOVALNET_PLUGIN_DIR . 'templates/invoice-template.php'; + + do_action( 'edd_after_cc_fields' ); + } + + /** + * Register the action to initiate and process the payment + * + * @since 1.0.1 + * @param array $purchase_data Get customer details to payment. + * @return array $params to acknowledge status call. + */ + public function novalnet_invoice_process_payment( $purchase_data ) { + + global $edd_options; + $invoice_details = array_map( 'trim', $_POST ); + $payment_name = 'novalnet_invoice'; + $params = array(); + $trial_product = '0'; + if ( isset( $purchase_data['downloads'] ) && !empty( $purchase_data['downloads'] ) ) { + foreach ( $purchase_data['downloads'] as $purchase_key => $purchase_val ) { + if ( ! empty( $purchase_val['options']['recurring']['trial_period'] ) ) { + $trial_product = '1'; + } + } + } + if ( isset( $edd_options['novalnet_invoice_guarantee_enable'] ) ) { + novalnet_guarantee_payment_validation( $purchase_data, $payment_name,$trial_product ); + } + // Guarantee requirement validations + if ( ( isset( $edd_options['novalnet_invoice_guarantee_enable'] ) && ! empty( EDD()->session->get( 'novalnet_invoice_guarantee_payment_error' ) ) && isset ($edd_options['novalnet_invoice_force_normal_payment']) && $edd_options['novalnet_invoice_force_normal_payment'] == 'no') ) { + $error = EDD()->session->get( 'novalnet_invoice_guarantee_payment_error' ); + $error_msg = sprintf( __( 'The payment cannot be processed, because the basic requirements for the payment guarantee are not met ( %s ) ', 'edd-novalnet' ), $error ); + edd_set_error( 'guarantee_validation', __( $error_msg, 'edd-novalnet' ) ); + edd_send_back_to_checkout( '?payment-mode=novalnet_invoice' ); + } + // Date validation for guarantee payment + if ( isset( $edd_options['novalnet_invoice_guarantee_enable']) && $trial_product == '0') { + + $day = isset( $invoice_details['novalnet_invoice_day'] ) ? $invoice_details['novalnet_invoice_day'] : ''; + $month = isset( $invoice_details['novalnet_invoice_month'] ) ? $invoice_details['novalnet_invoice_month'] : ''; + $year = isset( $invoice_details['novalnet_invoice_year'] ) ? $invoice_details['novalnet_invoice_year'] : ''; + + $error = check_guarantee_payment( $day, $month, $year, 'novalnet_invoice' ); + $date_check = EDD()->session->get( 'novalnet_invoice_dob' ); + + if ( ! empty( $error ) && isset($edd_options['novalnet_invoice_force_normal_payment']) && $edd_options['novalnet_invoice_force_normal_payment'] == 'no') { + edd_set_error( 'guarantee_validation', __( $error, 'edd-novalnet' ) ); + edd_send_back_to_checkout( '?payment-mode=novalnet_invoice' ); + } elseif ( ! empty( $date_check ) ) { + $params ['birth_date'] = gmdate( 'Y-m-d', strtotime( $date_check ) ); + } + } + + if ( isset( $edd_options['novalnet_invoice_guarantee_enable'] ) && empty( EDD()->session->get( 'novalnet_invoice_guarantee_payment_error' ) ) && empty( EDD()->session->get( 'novalnet_invoice_guarantee_dob_payment_error' ) ) && $trial_product == '0' ) { + $payment_name = 'novalnet_invoice_guarantee'; + } + // Get configuration data. + $payment_data = novalnet_get_merchant_data( $purchase_data, $payment_name ); + $payment_data['invoice_type'] = 'INVOICE'; + // Get customer data. + $customer_data = novalnet_get_customer_data( $purchase_data ); + // Get system data. + $system_data = novalnet_get_system_data(); + + $payment_duration = isset( $edd_options['novalnet_invoice_due_date'] ) ? trim( $edd_options['novalnet_invoice_due_date'] ) : ''; + $payment_data['due_date'] = ( ! empty( $payment_duration ) ) ? gmdate( 'Y-m-d', strtotime( gmdate( 'y-m-d' ) . '+ ' . $payment_duration . ' days' ) ) : gmdate( 'Y-m-d', strtotime( gmdate( 'y-m-d' ) . '+ 14 days' ) ); + + $params = array_merge( $payment_data, $customer_data, $system_data, $params ); + // Process the onhold product. + if (isset($edd_options['novalnet_invoice_manual_limit']) && 'authorize' === $edd_options['novalnet_invoice_manual_limit'] ) { + if ( isset( $edd_options['novalnet_invoice_manual_check'] ) ) { + $payment_data['amount'] = ( novalnet_digits_check( $edd_options['novalnet_invoice_manual_check'] ) ) ? $payment_data['amount'] : 0; + if ( $payment_data['amount'] >= $edd_options['novalnet_invoice_manual_check'] ) { + $params['on_hold'] = 1; + } + } else { + $params['on_hold'] = 1; + } + } + EDD()->session->set( 'trial_product', $trial_product); + // Create the subscription order for the subscription product. + novalnet_check_subscription( $purchase_data, $params ); + + // Send the transaction request to the novalnet server. + $parsed_response = novalnet_submit_request( $params ); + + if ( '100' === $parsed_response['status'] ) { + + novalnet_check_response( $parsed_response ,$trial_product); + } else { + novalnet_transaction_failure( $parsed_response ); + } + + } + + /** + * Add the settings of the Novalnet Invoice + * + * @since 1.0.1 + * @param array $gateway_settings Back-end configuration list. + * @return array $gateway_settings Save back-end configuration's. + */ + public function register_novalnet_invoice_settings( $gateway_settings ) { + // Shop backend configuration. + $novalnet_invoice = array( + array( + 'id' => 'novalnet_invoice_settings', + 'name' => ' ' . __( 'Novalnet Invoice', 'edd-novalnet' ) . ' ', + 'desc' => __( 'Configure the gateway settings', 'edd-novalnet' ), + 'type' => 'header', + ), + array( + 'id' => 'novalnet_invoice_test_mode', + 'name' => __( 'Enable test mode', 'edd-novalnet' ), + 'type' => 'checkbox', + 'tooltip_title' => __( 'Enable test mode', 'edd-novalnet' ), + 'tooltip_desc' => __( 'The payment will be processed in the test mode therefore amount for this transaction will not be charged', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_invoice_due_date', + 'name' => __( 'Payment due date (in days)', 'edd-novalnet' ), + 'type' => 'number', + 'min' => 7, + 'size' => 'regular', + 'tooltip_title' => __( 'Payment due date (in days)', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Number of days given to the buyer to transfer the amount to Novalnet (must be greater than 7 days). If this field is left blank, 14 days will be set as due date by default. ', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_invoice_manual_limit', + 'name' => __( 'Payment action', 'edd-novalnet' ), + 'type' => 'select', + 'std' => 'capture', + 'tooltip_title' => __( 'Payment action', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Choose whether or not the payment should be charged immediately. Capture completes the transaction by transferring the funds from buyer account to merchant account. Authorize verifies payment details and reserves funds to capture it later, giving time for the merchant to decide on the order.', 'edd-novalnet' ), + 'options' => array( + 'capture' => __( 'Capture', 'edd-novalnet' ), + 'authorize' => __( 'Authorize', 'edd-novalnet' ), + ), + 'size' => 'regular', + ), + array( + 'id' => 'novalnet_invoice_manual_check', + 'name' => __( 'Minimum transaction limit for authorization', 'edd-novalnet' ), + 'type' => 'number', + 'size' => 'regular', + 'desc' => __( '

(in minimum unit of currency. E.g. enter 100 which is equal to 1.00)', 'edd-novalnet' ), + 'tooltip_title' => __( 'Minimum transaction limit for authorization', 'edd-novalnet' ), + 'tooltip_desc' => __( 'When the order amount exceeds the mentioned limit, the transaction will be set on-hold till you confirm it. You can leave the field empty if you wish to process all transactions as on-hold transactions. ', 'edd-novalnet' ), + ), + + array( + 'id' => 'novalnet_invoice_order_completion_status', + 'name' => __( 'Completed order status', 'edd-novalnet' ), + 'type' => 'select', + 'options' => edd_get_payment_statuses(), + 'std' => 'processing', + 'tooltip_title' => __( 'Completed order status', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Status to be used for successful orders.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_invoice_order_callback_status', + 'name' => __( 'Callback / Webhook order status', 'edd-novalnet' ), + 'type' => 'select', + 'options' => edd_get_payment_statuses(), + 'std' => 'publish', + 'tooltip_title' => __( 'Callback / Webhook order status', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Status to be used when callback script is executed for payment received by Novalnet.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_invoice_information', + 'name' => __( 'Notification for the buyer', 'edd-novalnet' ), + 'type' => 'textarea', + 'size' => 'regular', + 'desc' => __( 'The entered text will be displayed at the checkout page', 'edd-novalnet' ), + + ), + array( + 'id' => 'novalnet_guarantee_settings', + 'name' => ' ' . __( 'Payment guarantee configuration', 'edd-novalnet' ) . ' ', + 'type' => 'header', + ), + array( + 'id' => 'novalnet_invoice_guarantee_settings', + 'name' => sprintf( + '

    +
  • %1$s
  • +
  • %2$s
  • +
  • %3$s
  • +
  • %4$s
  • +
  • %5$s
  • +
  • %6$s
  • +
', + __( 'Payment guarantee requirements: ', 'edd-novalnet' ), + __( 'Allowed countries: DE, AT, CH', 'edd-novalnet' ), + __( 'Allowed currency: EUR', 'edd-novalnet' ), + __( 'Minimum order amount: 9,99 EUR or more', 'edd-novalnet' ), + __( 'Age limit: 18 years or more', 'edd-novalnet' ), + __( 'The billing address must be the same as the shipping address', 'edd-novalnet' ) + ), + 'type' => 'header', + ), + array( + 'id' => 'novalnet_invoice_guarantee_enable', + 'name' => __( 'Enable payment guarantee', 'edd-novalnet' ), + 'type' => 'checkbox', + ), + array( + 'id' => 'novalnet_invoice_order_pending_status', + 'name' => __( 'Payment status for the pending payment', 'edd-novalnet' ), + 'type' => 'select', + 'std' => 'pending', + 'options' => edd_get_payment_statuses(), + 'tooltip_title' => __( 'Payment status for the pending payment', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Status to be used for pending transactions.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_invoice_guarantee_minimum_order_amount', + 'name' => __( 'Minimum order amount for payment guarantee', 'edd-novalnet' ), + 'type' => 'number', + 'min' => 999, + 'tooltip_title' => __( 'Minimum order amount for payment guarantee', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Enter the minimum amount (in cents) for the transaction to be processed with payment guarantee. For example, enter 100 which is equal to 1,00. By default, the amount will be 9,99 EUR.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_invoice_force_normal_payment', + 'name' => __( 'Force Non-Guarantee payment', 'edd-novalnet' ), + 'type' => 'select', + 'options' => array( + 'no' => __( 'No', 'edd-novalnet' ), + 'yes' => __( 'Yes', 'edd-novalnet' ), + ), + 'std' => 'yes', + 'tooltip_title' => __( 'Force Non-Guarantee payment', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Even if payment guarantee is enabled, payments will still be processed as non-guarantee payments if the payment guarantee requirements are not met. Review the requirements under \'Enable Payment Guarantee\' in the Installation Guide. ', 'edd-novalnet' ), + ), + ); + $novalnet_invoice = apply_filters( 'edd_novalnet_invoice_settings', $novalnet_invoice ); + $gateway_settings['novalnet_invoice'] = $novalnet_invoice; + return $gateway_settings; + } +} +new Novalnet_Invoice(); + diff --git a/includes/gateways/class-novalnet-paypal.php b/includes/gateways/class-novalnet-paypal.php new file mode 100755 index 0000000..b2a79bb --- /dev/null +++ b/includes/gateways/class-novalnet-paypal.php @@ -0,0 +1,259 @@ + array( + 'admin_label' => __( 'Novalnet PayPal', 'edd-novalnet' ), + 'checkout_label' => __( 'PayPal', 'edd-novalnet' ), + 'supports' => array(), + ), + ); + $novalnet_paypal = apply_filters( 'edd_register_novalnet_paypal_gateway', $novalnet_paypal ); + $gateways = array_merge( $gateways, $novalnet_paypal ); + return $gateways; + } + + /** + * Register the action to display the payment form + * + * @since 1.0.1 + */ + public function display_form() { + global $edd_options; + $test_mode = (int) ( edd_is_test_mode() || ! empty( $edd_options['novalnet_paypal_test_mode'] ) ); + $information = isset( $edd_options['novalnet_paypal_information'] ) ? trim( $edd_options['novalnet_paypal_information'] ) : ''; + $payment_method_name = __( 'PayPal', 'edd-novalnet' ); + ?> +
+
+ +
+

+ +

+

+ +

+ +

+ +

+ +
+ = $edd_options['novalnet_paypal_manual_check'] ) { + $params['on_hold'] = 1; + } + } else { + $params['on_hold'] = 1; + } + } + + // Create the subscription order for the subscription product. + novalnet_check_subscription( $purchase_data, $params ); + // Redirect to the paygate url. + novalnet_get_redirect( $paygate_url, $params ); + } + + /** + * Add the settings of the Novalnet PayPal + * + * @since 1.0.1 + * @param array $gateway_settings Back-end configuration list. + * @return array $gateway_settings Save back-end configuration's. + */ + public function register_novalnet_paypal_settings( $gateway_settings ) { + $admin_url = 'https://admin.novalnet.de/'; + $novalnet_paypal = array( + array( + 'id' => 'novalnet_paypal_settings', + /* translators: %s: admin URL */ + 'name' => ' ' . __( 'Novalnet PayPal', 'edd-novalnet' ) . '

' . sprintf( __( 'To accept PayPal transactions, configure your PayPal API info in the Novalnet Admin Portal: > PROJECT > Choose your project > Payment Methods > PaypalConfigure.', 'edd-novalnet' ), $admin_url ) . '

', + 'desc' => __( 'Configure the gateway settings', 'edd-novalnet' ), + 'type' => 'header', + ), + array( + 'id' => 'novalnet_paypal_test_mode', + 'name' => __( 'Enable test mode', 'edd-novalnet' ), + 'type' => 'checkbox', + 'tooltip_title' => __( 'Enable test mode', 'edd-novalnet' ), + 'tooltip_desc' => __( 'The payment will be processed in the test mode therefore amount for this transaction will not be charged', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_paypal_manual_limit', + 'name' => __( 'Payment action', 'edd-novalnet' ), + 'type' => 'select', + 'std' => 'capture', + 'tooltip_title' => __( 'Payment action', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Choose whether or not the payment should be charged immediately. Capture completes the transaction by transferring the funds from buyer account to merchant account. Authorize verifies payment details and reserves funds to capture it later, giving time for the merchant to decide on the order.', 'edd-novalnet' ), + 'options' => array( + 'capture' => __( 'Capture', 'edd-novalnet' ), + 'authorize' => __( 'Authorize', 'edd-novalnet' ), + ), + 'size' => 'regular', + ), + array( + 'id' => 'novalnet_paypal_manual_check', + 'name' => __( 'Minimum transaction limit for authorization', 'edd-novalnet' ), + 'type' => 'number', + 'size' => 'regular', + 'desc' => __( '

(in minimum unit of currency. E.g. enter 100 which is equal to 1.00)', 'edd-novalnet' ), + 'tooltip_title' => __( 'Minimum transaction limit for authorization', 'edd-novalnet' ), + 'tooltip_desc' => __( 'In case the order amount exceeds the mentioned limit, the transaction will be set on-hold till your confirmation of the transaction. You can leave the field empty if you wish to process all the transactions as on-hold.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_paypal_order_pending_status', + 'name' => __( 'Payment status for the pending payment', 'edd-novalnet' ), + 'type' => 'select', + 'options' => edd_get_payment_statuses(), + 'std' => 'pending', + 'tooltip_title' => __( 'Payment status for the pending payment', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Status to be used for pending transactions.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_paypal_order_completion_status', + 'name' => __( 'Completed order status', 'edd-novalnet' ), + 'type' => 'select', + 'options' => edd_get_payment_statuses(), + 'std' => 'publish', + 'tooltip_title' => __( 'Completed order status', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Status to be used for successful orders.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_paypal_information', + 'name' => __( 'Notification for the buyer', 'edd-novalnet' ), + 'type' => 'textarea', + 'size' => 'regular', + 'desc' => __( 'The entered text will be displayed at the checkout page', 'edd-novalnet' ), + ), + ); + $novalnet_paypal = apply_filters( 'edd_novalnet_paypal_settings', $novalnet_paypal ); + $gateway_settings['novalnet_paypal'] = $novalnet_paypal; + return $gateway_settings; + } +} +new Novalnet_Paypal(); +?> diff --git a/includes/gateways/class-novalnet-prepayment.php b/includes/gateways/class-novalnet-prepayment.php new file mode 100755 index 0000000..0bc17fd --- /dev/null +++ b/includes/gateways/class-novalnet-prepayment.php @@ -0,0 +1,246 @@ + array( + 'admin_label' => __( 'Novalnet Prepayment', 'edd-novalnet' ), + 'checkout_label' => __( 'Prepayment', 'edd-novalnet' ), + 'supports' => array(), + ), + ); + $novalnet_prepayment = apply_filters( 'edd_register_novalnet_prepayment_gateway', $novalnet_prepayment ); + $gateways = array_merge( $gateways, $novalnet_prepayment ); + return $gateways; + } + + /** + * Register the action to display the payment form + * + * @since 1.0.1 + */ + public function display_form() { + global $edd_options; + $test_mode = (int) ( edd_is_test_mode() || ! empty( $edd_options['novalnet_prepayment_test_mode'] ) ); + $information = isset( $edd_options['novalnet_prepayment_information'] ) ? trim( $edd_options['novalnet_prepayment_information'] ) : ''; + $payment_method_name = __( 'Prepayment', 'edd-novalnet' ); + ?> +

+
+ +
+

+ +

+

+ +

+ +

+ +

+ +
+ $purchase_val ) { + if ( ! empty( $purchase_val['options']['recurring']['trial_period'] ) ) { + $trial_product = '1'; + } + } + } + // Get configuration data. + $payment_data = novalnet_get_merchant_data( $purchase_data, 'novalnet_prepayment' ); + $payment_data['invoice_type'] = 'PREPAYMENT'; + + $payment_duration = isset( $edd_options['novalnet_prepayment_due_date'] ) ? trim( $edd_options['novalnet_prepayment_due_date'] ) : ''; + $payment_data['due_date'] = ( ! empty( $payment_duration ) ) ? gmdate( 'Y-m-d', strtotime( gmdate( 'y-m-d' ) . '+ ' . $payment_duration . ' days' ) ) : gmdate( 'Y-m-d', strtotime( gmdate( 'y-m-d' ) . '+ 14 days' ) ); + // Get customer data. + $customer_data = novalnet_get_customer_data( $purchase_data ); + // Get system data. + $system_data = novalnet_get_system_data(); + $params = array_merge( $payment_data, $customer_data, $system_data ); + EDD()->session->set( 'trial_product', $trial_product); + // Create the subscription order for the subscription product. + novalnet_check_subscription( $purchase_data, $params ); + + // Send the transaction request to the novalnet server. + $parsed_response = novalnet_submit_request( $params ); + if ( '100' === $parsed_response['status'] ) { + novalnet_check_response( $parsed_response ); + } else { + novalnet_transaction_failure( $parsed_response ); + } + } + + /** + * Add the settings of the Novalnet Prepayment + * + * @since 1.0.1 + * @param array $gateway_settings Back-end configuration list. + * @return array $gateway_settings Save back-end configuration's. + */ + public function register_novalnet_prepayment_settings( $gateway_settings ) { + $novalnet_prepayment = array( + array( + 'id' => 'novalnet_prepayment_settings', + 'name' => ' ' . __( 'Novalnet Prepayment', 'edd-novalnet' ) . ' ', + 'desc' => __( 'Configure the gateway settings', 'edd-novalnet' ), + 'type' => 'header', + ), + array( + 'id' => 'novalnet_prepayment_test_mode', + 'name' => __( 'Enable test mode', 'edd-novalnet' ), + 'type' => 'checkbox', + 'tooltip_title' => __( 'Enable test mode', 'edd-novalnet' ), + 'tooltip_desc' => __( 'The payment will be processed in the test mode therefore amount for this transaction will not be charged', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_prepayment_due_date', + 'name' => __( 'Payment due date (in days)', 'edd-novalnet' ), + 'type' => 'number', + 'min' => 7, + 'max' => 28, + 'size' => 'regular', + 'tooltip_title' => __( 'Payment due date (in days)', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Number of days given to the buyer to transfer the amount to Novalnet (must be greater than 7 days). If this field is left blank, 14 days will be set as due date by default. ', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_prepayment_order_completion_status', + 'name' => __( 'Completed order status', 'edd-novalnet' ), + 'type' => 'select', + 'options' => edd_get_payment_statuses(), + 'std' => 'processing', + 'tooltip_title' => __( 'Completed order status', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Status to be used for successful orders.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_prepayment_order_callback_status', + 'name' => __( 'Callback / Webhook order status', 'edd-novalnet' ), + 'type' => 'select', + 'options' => edd_get_payment_statuses(), + 'std' => 'publish', + 'tooltip_title' => __( 'Callback / Webhook order status', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Status to be used when callback script is executed for payment received by Novalnet.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_prepayment_information', + 'name' => __( 'Notification for the buyer', 'edd-novalnet' ), + 'type' => 'textarea', + 'size' => 'regular', + 'desc' => __( 'The entered text will be displayed at the checkout page', 'edd-novalnet' ), + ), + ); + $novalnet_prepayment = apply_filters( 'edd_novalnet_prepayment_settings', $novalnet_prepayment ); + $gateway_settings['novalnet_prepayment'] = $novalnet_prepayment; + return $gateway_settings; + } +} +new Novalnet_Prepayment(); +?> diff --git a/includes/gateways/class-novalnet-przelewy24.php b/includes/gateways/class-novalnet-przelewy24.php new file mode 100755 index 0000000..04111f2 --- /dev/null +++ b/includes/gateways/class-novalnet-przelewy24.php @@ -0,0 +1,226 @@ + array( + 'admin_label' => __( 'Novalnet Przelewy24', 'edd-novalnet' ), + 'checkout_label' => __( 'Przelewy24', 'edd-novalnet' ), + 'supports' => array(), + ), + ); + $novalnet_przelewy24 = apply_filters( 'edd_register_novalnet_przelewy24_gateway', $novalnet_przelewy24 ); + $gateways = array_merge( $gateways, $novalnet_przelewy24 ); + return $gateways; + } + + /** + * Register the action to display the payment form + * + * @since 1.0.1 + */ + public function display_form() { + global $edd_options; + $test_mode = (int) ( edd_is_test_mode() || ! empty( $edd_options['novalnet_przelewy24_test_mode'] ) ); + $information = isset( $edd_options['novalnet_przelewy24_information'] ) ? trim( $edd_options['novalnet_przelewy24_information'] ) : ''; + $payment_method_name = __( 'Przelewy24', 'edd-novalnet' ); + ?> +
+
+ +
+

+ +

+

+ +

+ +

+ +

+ +
+ 'novalnet_przelewy24_settings', + 'name' => ' ' . __( 'Novalnet Przelewy24', 'edd-novalnet' ) . ' ', + 'desc' => __( 'Configure the gateway settings', 'edd-novalnet' ), + 'type' => 'header', + ), + array( + 'id' => 'novalnet_przelewy24_test_mode', + 'name' => __( 'Enable test mode', 'edd-novalnet' ), + 'type' => 'checkbox', + 'tooltip_title' => __( 'Enable test mode', 'edd-novalnet' ), + 'tooltip_desc' => __( 'The payment will be processed in the test mode therefore amount for this transaction will not be charged', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_przelewy24_order_pending_status', + 'name' => __( 'Payment status for the pending payment', 'edd-novalnet' ), + 'type' => 'select', + 'options' => edd_get_payment_statuses(), + 'std' => 'pending', + 'tooltip_title' => __( 'Payment status for the pending payment', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Status to be used for pending transactions.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_przelewy24_order_completion_status', + 'name' => __( 'Completed order status', 'edd-novalnet' ), + 'type' => 'select', + 'options' => edd_get_payment_statuses(), + 'std' => 'publish', + 'tooltip_title' => __( 'Completed order status', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Status to be used for successful orders.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_przelewy24_information', + 'name' => __( 'Notification for the buyer', 'edd-novalnet' ), + 'type' => 'textarea', + 'size' => 'regular', + 'desc' => __( 'The entered text will be displayed at the checkout page', 'edd-novalnet' ), + ), + ); + $novalnet_przelewy24 = apply_filters( 'edd_novalnet_przelewy24_settings', $novalnet_przelewy24 ); + $gateway_settings['novalnet_przelewy24'] = $novalnet_przelewy24; + return $gateway_settings; + } +} +new Novalnet_Przelewy24(); +?> diff --git a/includes/gateways/class-novalnet-sepa.php b/includes/gateways/class-novalnet-sepa.php new file mode 100755 index 0000000..22f467f --- /dev/null +++ b/includes/gateways/class-novalnet-sepa.php @@ -0,0 +1,385 @@ + array( + 'admin_label' => __( 'Novalnet Direct Debit SEPA', 'edd-novalnet' ), + 'checkout_label' => __( 'Direct Debit SEPA', 'edd-novalnet' ), + 'supports' => array(), + ), + ); + $novalnet_sepa = apply_filters( 'edd_register_novalnet_sepa_gateway', $novalnet_sepa ); + $gateways = array_merge( $gateways, $novalnet_sepa ); + return $gateways; + } + + /** + * Register the action to display the payment form + * + * @since 1.0.1 + */ + public function display_form( $is_update_payment_method = false ) { + + global $edd_options; + + $update_payment = $is_update_payment_method; + + $user_data = get_user_meta( get_current_user_id() ); + $account_holder = !empty($user_data) ? $user_data['first_name'][0] . ' ' . $user_data['last_name'][0] : ''; + $test_mode = (int) ( edd_is_test_mode() || ! empty( $edd_options['novalnet_sepa_test_mode'] ) ); + $information = isset( $edd_options['novalnet_sepa_information'] ) ? trim( $edd_options['novalnet_sepa_information'] ) : ''; + $payment_method_name = __( 'Direct Debit SEPA', 'edd-novalnet' ); + $payment_name = 'novalnet_sepa'; + + include_once NOVALNET_PLUGIN_DIR . 'templates/sepa-template.php'; + + do_action( 'edd_after_cc_fields' ); + } + + /** + * Register the action to initiate and process the Payment + * + * @since 1.0.1 + * @param array $purchase_data Get customer details to payment. + * @return array $params to acknowledge status call. + */ + public function novalnet_sepa_process_payment( $purchase_data ) { + + global $edd_options; + + // Get payment data. + $trial_product = '0'; + if ( isset( $purchase_data['downloads'] ) && !empty( $purchase_data['downloads'] ) ) { + foreach ( $purchase_data['downloads'] as $purchase_key => $purchase_val ) { + if ( ! empty( $purchase_val['options']['recurring']['trial_period'] ) ) { + $trial_product = '1'; + } + } + } + $params = $this->novalnet_get_sepa_bank_data($trial_product); + $payment_name = 'novalnet_sepa'; + + if ( isset( $edd_options['novalnet_sepa_guarantee_enable'] ) ) { + novalnet_guarantee_payment_validation( $purchase_data, $payment_name,$trial_product ); + } + + if ( isset( $edd_options['novalnet_sepa_guarantee_enable'] ) && empty( EDD()->session->get( 'novalnet_sepa_guarantee_payment_error' ) ) && empty( EDD()->session->get( 'novalnet_sepa_guarantee_dob_payment_error' ) ) && $trial_product == '0' ) { + $payment_name = 'novalnet_sepa_guarantee'; + } + // Get configuration data. + $payment_data = novalnet_get_merchant_data( $purchase_data, $payment_name ); + // Get customer data. + $customer_data = novalnet_get_customer_data( $purchase_data ); + // Get system data. + $system_data = novalnet_get_system_data(); + $params = array_merge( $payment_data, $customer_data, $system_data, $params ); + // Process the onhold product. + if ( isset($edd_options['novalnet_invoice_manual_limit']) &&'authorize' === $edd_options['novalnet_sepa_manual_limit'] ) { + if ( isset( $edd_options['novalnet_sepa_manual_check'] ) ) { + $payment_data['amount'] = ( novalnet_digits_check( $edd_options['novalnet_sepa_manual_check'] ) ) ? $payment_data['amount'] : 0; + if ( $payment_data['amount'] >= $edd_options['novalnet_sepa_manual_check'] ) { + $params['on_hold'] = 1; + } + } else { + $params['on_hold'] = 1; + } + } + // Due date validations. + $sepa_payment_duration = isset( $edd_options['novalnet_sepa_due_date'] ) ? trim( $edd_options['novalnet_sepa_due_date'] ) : ''; + if ( ! empty( $sepa_payment_duration ) ) { + $params['sepa_due_date'] = gmdate( 'Y-m-d', strtotime( gmdate( 'y-m-d' ) . '+ ' . $sepa_payment_duration . ' days' ) ); + } + // Create the subscription order for the subscription product. + novalnet_check_subscription( $purchase_data, $params ); + // Send the transaction request to the novalnet server. + $parsed_response = novalnet_submit_request( $params ); + if ( '100' === $parsed_response['status'] ) { + novalnet_check_response( $parsed_response ,$trail_period ); + } else { + novalnet_transaction_failure( $parsed_response ); + } + } + + /** + * Get SEPA Account details + * + * @since 1.0.1 + * @param array $params Get required param to acknowledge Novalnet server to respond. + */ + public function novalnet_get_sepa_bank_data($trial_product) { + + global $edd_options; + $sepa_details = array_map( 'trim', $_POST ); // Input var okay. + + if ( preg_match( '/[#%\^<>@$=*!]+/i', $sepa_details['novalnet_sepa_holder'] ) || empty( $sepa_details['novalnet_sepa_holder'] ) || empty( $sepa_details['novalnet_sepa_iban'] ) ) { + edd_set_error( 'account_validation', __( 'Your account details are invalid', 'edd-novalnet' ) ); + edd_send_back_to_checkout( '?payment-mode=novalnet_sepa' ); + } + // Guarantee requirement validations + if ( ( isset( $edd_options['novalnet_sepa_guarantee_enable'] ) && ! empty( EDD()->session->get( 'novalnet_sepa_guarantee_payment_error' ) ) && isset($edd_options['novalnet_sepa_force_normal_payment']) && $edd_options['novalnet_sepa_force_normal_payment'] == 'no' && $trial_product == '0' )) { + $error = EDD()->session->get( 'novalnet_sepa_guarantee_payment_error' ); + $error_msg = sprintf( __( 'The payment cannot be processed, because the basic requirements for the payment guarantee are not met ( %s ) ', 'edd-novalnet' ), $error ); + edd_set_error( 'guarantee_validation', __( $error_msg, 'edd-novalnet' ) ); + edd_send_back_to_checkout( '?payment-mode=novalnet_sepa' ); + } + // Date validation for guarantee payment + if ( isset( $edd_options['novalnet_sepa_guarantee_enable'] ) && $trial_product == '0' ) { + $day = isset( $sepa_details['novalnet_sepa_day'] ) ? $sepa_details['novalnet_sepa_day'] : ''; + $month = isset( $sepa_details['novalnet_sepa_month'] ) ? $sepa_details['novalnet_sepa_month'] : ''; + $year = isset( $sepa_details['novalnet_sepa_year'] ) ? $sepa_details['novalnet_sepa_year'] : ''; + + $error = check_guarantee_payment( $day, $month, $year, 'novalnet_sepa' ); + $date_check = EDD()->session->get( 'novalnet_sepa_dob' ); + + if ( ! empty( $error ) && isset($edd_options['novalnet_sepa_force_normal_payment']) && $edd_options['novalnet_sepa_force_normal_payment'] == 'no') { + edd_set_error( 'guarantee_validation', __( $error, 'edd-novalnet' ) ); + edd_send_back_to_checkout( '?payment-mode=novalnet_sepa' ); + } elseif ( ! empty( $date_check ) ) { + $params ['birth_date'] = gmdate( 'Y-m-d', strtotime( $date_check ) ); + } + } + + // Payment data. + $params ['bank_account_holder'] = $sepa_details['novalnet_sepa_holder']; + $params ['iban'] = $sepa_details['novalnet_sepa_iban']; + + return $params; + } + /** + * Adds the settings of the Novalnet sepa payment + * + * @since 1.0.1 + * @access public + * @param array $gateway_settings Back-end configuration list. + * @return array $gateway_settings Save back-end configuration's. + */ + public function register_novalnet_sepa_settings( $gateway_settings ) { + + $novalnet_sepa = array( + array( + 'id' => 'novalnet_sepa_settings', + 'name' => ' ' . __( 'Novalnet Direct Debit SEPA', 'edd-novalnet' ) . ' ', + 'desc' => __( 'Configure the gateway settings', 'edd-novalnet' ), + 'type' => 'header', + ), + array( + 'id' => 'novalnet_sepa_test_mode', + 'name' => __( 'Enable test mode', 'edd-novalnet' ), + 'type' => 'checkbox', + 'tooltip_title' => __( 'Enable test mode', 'edd-novalnet' ), + 'tooltip_desc' => __( 'The payment will be processed in the test mode therefore amount for this transaction will not be charged', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_sepa_due_date', + 'name' => __( 'Payment due date (in days)', 'edd-novalnet' ), + 'type' => 'number', + 'size' => 'regular', + 'min' => 2, + 'max' => 14, + 'placeholder' => 'test', + 'tooltip_title' => __( 'Payment due date (in days)', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Number of days after which the payment is debited (must be between 2 and 14 days).', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_sepa_manual_limit', + 'name' => __( 'Payment action', 'edd-novalnet' ), + 'type' => 'select', + 'std' => 'capture', + 'tooltip_title' => __( 'Payment action', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Choose whether or not the payment should be charged immediately. Capture completes the transaction by transferring the funds from buyer account to merchant account. Authorize verifies payment details and reserves funds to capture it later, giving time for the merchant to decide on the order.', 'edd-novalnet' ), + 'options' => array( + 'capture' => __( 'Capture', 'edd-novalnet' ), + 'authorize' => __( 'Authorize', 'edd-novalnet' ), + ), + 'size' => 'regular', + ), + array( + 'id' => 'novalnet_sepa_manual_check', + 'name' => __( 'Minimum transaction limit for authorization', 'edd-novalnet' ), + 'type' => 'number', + 'size' => 'regular', + 'desc' => __( '

(in minimum unit of currency. E.g. enter 100 which is equal to 1.00)', 'edd-novalnet' ), + 'tooltip_title' => __( 'Minimum transaction limit for authorization', 'edd-novalnet' ), + 'tooltip_desc' => __( 'In case the order amount exceeds the mentioned limit, the transaction will be set on-hold till your confirmation of the transaction. You can leave the field empty if you wish to process all the transactions as on-hold.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_sepa_order_completion_status', + 'name' => __( 'Completed order status', 'edd-novalnet' ), + 'type' => 'select', + 'options' => edd_get_payment_statuses(), + 'std' => 'publish', + 'tooltip_title' => __( 'Completed order status', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Status to be used for successful orders.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_sepa_information', + 'name' => __( 'Notification for the buyer', 'edd-novalnet' ), + 'type' => 'textarea', + 'size' => 'regular', + 'desc' => __( 'The entered text will be displayed at the checkout page', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_guarantee_settings', + 'name' => ' ' . __( 'Payment guarantee configuration', 'edd-novalnet' ) . '', + 'type' => 'header', + ), + array( + 'id' => 'novalnet_sepa_guarantee_settings', + 'name' => sprintf( + '

    +
  • %1$s
  • +
  • %2$s
  • +
  • %3$s
  • +
  • %4$s
  • +
  • %5$s
  • +
  • %6$s
  • +
', + __( 'Payment guarantee requirements: ', 'edd-novalnet' ), + __( 'Allowed countries: DE, AT, CH', 'edd-novalnet' ), + __( 'Allowed currency: EUR', 'edd-novalnet' ), + __( 'Minimum order amount: 9,99 EUR or more', 'edd-novalnet' ), + __( 'Age limit: 18 years or more', 'edd-novalnet' ), + __( 'The billing address must be the same as the shipping address', 'edd-novalnet' ) + ), + 'type' => 'header', + + ), + array( + 'id' => 'novalnet_sepa_guarantee_enable', + 'name' => __( 'Enable payment guarantee', 'edd-novalnet' ), + 'type' => 'checkbox', + ), + array( + 'id' => 'novalnet_sepa_order_pending_status', + 'name' => __( 'Payment status for the pending payment', 'edd-novalnet' ), + 'type' => 'select', + 'std' => 'pending', + 'options' => edd_get_payment_statuses(), + 'tooltip_title' => __( 'Payment status for the pending payment', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Status to be used for pending transactions.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_sepa_guarantee_minimum_order_amount', + 'name' => __( 'Minimum order amount for payment guarantee', 'edd-novalnet' ), + 'type' => 'number', + 'desc' => __( '

(in minimum unit of currency. E.g. enter 100 which is equal to 1.00)', 'edd-novalnet' ), + 'min' => 999, + 'tooltip_title' => __( 'Minimum order amount for payment guarantee', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Enter the minimum amount (in cents) for the transaction to be processed with payment guarantee. For example, enter 100 which is equal to 1,00. By default, the amount will be 9,99 EUR.', 'edd-novalnet' ), + ), + array( + 'id' => 'novalnet_sepa_force_normal_payment', + 'name' => __( 'Force Non-Guarantee payment', 'edd-novalnet' ), + 'type' => 'select', + 'options' => array( + 'no' => __( 'No', 'edd-novalnet' ), + 'yes' => __( 'Yes', 'edd-novalnet' ), + ), + 'std' => 'yes', + 'tooltip_title' => __( 'Force Non-Guarantee payment', 'edd-novalnet' ), + 'tooltip_desc' => __( 'Even if payment guarantee is enabled, payments will still be processed as non-guarantee payments if the payment guarantee requirements are not met. Review the requirements under \'Enable Payment Guarantee\' in the Installation Guide. ', 'edd-novalnet' ), + ), + ); + + $novalnet_sepa = apply_filters( 'edd_novalnet_sepa_settings', $novalnet_sepa ); + $gateway_settings['novalnet_sepa'] = $novalnet_sepa; + return $gateway_settings; + } +} +new Novalnet_SEPA(); + diff --git a/includes/novalnet-functions.php b/includes/novalnet-functions.php new file mode 100755 index 0000000..7363322 --- /dev/null +++ b/includes/novalnet-functions.php @@ -0,0 +1,1816 @@ +session->get( $item->purchase_data['gateway'] . '_subscription' ); + + if ( ! empty( $params ) && novalnet_check_string( $item->purchase_data['gateway'] ) ) { + + $novalnet_cc_do_redirect = EDD()->session->get( 'novalnet_cc_do_redirect' ); + + EDD()->session->set( $item->purchase_data['gateway'] . '_subscription', null ); + EDD()->session->set( 'novalnet_cc_do_redirect' , null ); + if ( ! empty( $args['parent_payment_id'] ) ) { + $params['order_no'] = $args['parent_payment_id']; + } + + if ( ( 'novalnet_paypal' === $item->purchase_data['gateway'] ) || ('novalnet_cc' === $item->purchase_data['gateway'] && 1 == $novalnet_cc_do_redirect ) ) { + EDD()->session->set( 'novalnet_redirect_params', $params ); + } else { + $parsed_response = novalnet_submit_request( $params ); + EDD()->session->set( 'novalnet_response', $parsed_response ); + } + EDD()->session->set( 'novalnet_subscription_process', true ); + } + if ( 'pending' === $args['status'] ) { + $args['status'] = 'active'; + } + + return $args; +} + +/** + * Actions to initialize Vendor script + * + * @since 1.1.1 + * @param array $accepted Get request and form $data. + * @return array + */ +function novalnet_add_api_mode( $accepted ) { + $accepted [] = 'novalnet_callback'; + $accepted [] = 'novalnet_redirect_response'; + $accepted [] = 'novalnet_update_payment_method'; + return $accepted; +} + +/** + * Actions to settings configuration in admin plugin + * + * @since 1.0.1 + * @param string $links Gets to Novalnet admin portal. + * @return string $links Login to see merchant credentials. + */ +function novalnet_action_links( $links ) { + + // Add configuration link in plugin page. + $links [] = '' . __( 'Configuration', 'edd-novalnet' ) . ''; + return $links; +} + +/** + * Actions to initialize api handler + * + * @since 1.0.1 + * @param array $data Get request and form $data. + */ +function novalnet_handle_api( $data ) { + switch ( $data['edd-api'] ) { + case 'products': + case 'novalnet_redirect_response': + case 'novalnet_update_payment_method': + if ( in_array( $data['edd-api'], array( 'novalnet_redirect_response', 'products' ), true) ) { + $order_data = EDD()->session->get( 'edd_purchase' ); + $return_url = edd_get_checkout_uri(); + } elseif ( 'novalnet_update_payment_method' === $data['edd-api'] ) { + $order_data = EDD()->session->get( 'novalnet_update_payment_method' ); + $return_url = $data['return_url']; + } + if ( empty( $order_data ) ) { + header_remove( 'Set-Cookie' ); + $redirect = array(); + $redirect['edd-api'] = $data['edd-api']; + $redirect = array_merge( $redirect, $data ); + $redirect_url = add_query_arg( $redirect, $return_url ); + header( 'Location: ' . $redirect_url ); + die(); + } else { + if ( in_array( $data['edd-api'], array( 'novalnet_redirect_response', 'products' ), true) ) { + novalnet_get_redirect_response(); + } elseif ( 'novalnet_update_payment_method' === $data['edd-api'] ) { + novalnet_get_redirect_response( true ); + } + } + break; + case 'novalnet_callback': + // Include the callback script files. + include_once NOVALNET_PLUGIN_DIR . '/includes/api/class-novalnet-callback-api.php'; + // Initiate the callback function. + novalnet_callback_api_process(); + break; + } +} + +/** + * Update status message + * + * @since 1.1.3 + * @param array $request Get all post params. + */ +function get_status_desc( $request ) { + if ( ! empty( $request['status_text'] ) ) { + return $request['status_text']; + } elseif ( ! empty( $request['status_desc'] ) ) { + return $request['status_desc']; + } elseif ( ! empty( $request['status_message'] ) ) { + return $request['status_message']; + } else { + return __( 'Payment was not successful. An error occurred.', 'edd-novalnet' ); + } +} + +/** + * Actions to show the barzahlen overlay + * + * @since 1.1.3 + * @param object $post Get the order object. + */ +function novalnet_barzahlen_scripts( $post ) { + global $wpdb; + if ( 'novalnet_cashpayment' === get_post_meta( $post->ID, '_edd_payment_gateway', true ) ) { + $transaction_id = get_post_meta( $post->ID, '_nn_order_tid', true ); + $result = $wpdb->get_row( $wpdb->prepare( "SELECT test_mode FROM {$wpdb->prefix}novalnet_transaction_detail WHERE tid=%s ORDER BY id DESC", $transaction_id ), ARRAY_A ); + $url = ( '1' === $result['test_mode'] ) ? 'https://cdn.barzahlen.de/js/v2/checkout-sandbox.js' : 'https://cdn.barzahlen.de/js/v2/checkout.js'; + $token = EDD()->session->get( 'cp_checkout_token' ); + echo "'; + } +} + +/** + * Actions to perform once on Plug-in deactivation + * + * @since 1.0.1 + */ +function novalnet_deactivate_plugin() { + + global $wpdb; + $config_settings = get_option( 'edd_settings' ); + $config_settings['gateways'] = isset( $config_settings['gateways'] ) ? $config_settings['gateways'] : array(); + $config_tmp = array_merge( $config_settings, $config_settings['gateways'] ); + + foreach ( $config_tmp as $key => $value ) { + if ( novalnet_check_string( $key ) ) { + if ( isset( $config_settings[ $key ] ) ) { + unset( $config_settings[ $key ] ); + } else { + unset( $config_settings['gateways'][ $key ] ); + } + } + } + $wpdb->query( "delete from {$wpdb->options} where option_name like '%novalnet%'" ); // db call ok; no-cache ok. + update_option( 'edd_settings', $config_settings ); +} + +/** + * When reloading the page after install. + * + * @since 1.1.1 + */ +function novalnet_update_action() { + + $current_db_version = get_option( 'novalnet_db_version' ); + $show_update_page = get_option( 'novalnet_version_update' ); + if ( ! empty( $current_db_version ) && version_compare( $current_db_version, NOVALNET_VERSION, '!=' ) ) { + // Redirect to updated information page. + novalnet_activation_process(); + } elseif ( $show_update_page ) { + delete_option( 'novalnet_version_update' ); + wp_safe_redirect( admin_url( 'edit.php?post_type=download&page=edd-settings&tab=gateways§ion=novalnet_global_config' ) ); + exit(); + } +} + +/** + * To get remote/server Ip address + * + * @param string $type get the ipaddress type. + * @return mixed + */ +function novalnet_server_addr( $type = 'REMOTE_ADDR' ) { + // Check to determine the IP address type. + if ( 'SERVER_ADDR' === $type ) { + if ( empty( $_SERVER['SERVER_ADDR'] ) ) { + // Handled for IIS server. + $ip_address = gethostbyname( $_SERVER['SERVER_NAME'] ); + } else { + $ip_address = $_SERVER['SERVER_ADDR']; + } + } else { + // For remote address. + $ip_address = get_remote_address(); + return $ip_address; + } + return $ip_address; +} + +/** + * To get remote IP address + * + * @return mixed + */ +function get_remote_address() { + foreach ( array( 'HTTP_X_FORWARDED_HOST', 'HTTP_CLIENT_IP', 'HTTP_X_REAL_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR' ) as $key ) { + if ( array_key_exists( $key, $_SERVER ) === true ) { + foreach ( explode( ',', $_SERVER[ $key ] ) as $ip ) { + return trim( $ip ); + } + } + } +} + +/** + * Checks for the given string in given text + * + * @since 1.1.0 + * @param string $string Check given string contains name as novalnet. + * @param string $data Get payment method name to avoid other payment's. + * @return boolean + */ +function novalnet_check_string( $string, $data = 'novalnet' ) { + return ( false !== strpos( $string, $data ) ); +} + +/** + * Throws admin side empty value in global configuration of Novalnet payment + * + * @since 1.0.1 + */ +function novalnet_admin_global_config_error() { + global $edd_options; + + // Check for Global configuration. + if ( empty( $edd_options['novalnet_merchant_id'] ) || ! novalnet_digits_check( $edd_options['novalnet_merchant_id'] ) || empty( $edd_options['novalnet_product_id'] ) || ! novalnet_digits_check( $edd_options['novalnet_product_id'] ) || empty( $edd_options['novalnet_tariff_id'] ) || ! novalnet_digits_check( $edd_options['novalnet_tariff_id'] ) || empty( $edd_options['novalnet_auth_code'] ) || empty( $edd_options['novalnet_access_key'] ) || ( isset( $edd_options['novalnet_subs_enable_option'] ) && ( empty( $edd_options['novalnet_subs_tariff_id'] ) || ! novalnet_digits_check( $edd_options['novalnet_subs_tariff_id'] ) ) ) ) { + echo '

' . esc_html( __( 'Please fill in all the mandatory fields', 'edd-novalnet' ) ) . '

'; + } +} + +/** + * Get Merchant details and payment details + * + * @param string $payment_method payment method name. + * @return array. + */ +function get_merchant_details( $payment_method ) { + + global $edd_options; + + $payment_key = get_payment_key( $payment_method ); + $config_data['key'] = $payment_key['key']; + $config_data['payment_type'] = $payment_key['payment_type']; + $config_data['vendor'] = trim( $edd_options['novalnet_merchant_id'] ); + $config_data['auth_code'] = trim( $edd_options['novalnet_auth_code'] ); + $config_data['product'] = trim( $edd_options['novalnet_product_id'] ); + $config_data['tariff'] = trim( $edd_options['novalnet_tariff_id'] ); + $config_data['notify_url'] = ! empty( $edd_options['novalnet_merchant_notify_url'] ) ? trim( $edd_options['novalnet_merchant_notify_url'] ) : ''; + + return $config_data; +} + +/** + * Form Novalnet gateway configuration data + * + * @since 1.0.1 + * @param array $purchase_data Get customer detail. + * @param string $payment_method Allow payment to process. + * @return array. + */ +function novalnet_get_merchant_data( $purchase_data, $payment_method ) { + + global $edd_options; + + $config_data = get_merchant_details($payment_method); + $config_data['amount'] = sprintf( '%0.2f', $purchase_data['price'] ) * 100; // convert amount euro to cents. + $config_data['test_mode'] = ( ( edd_is_test_mode() ) ? 1 : ( isset( $edd_options[ $payment_method . '_test_mode' ] ) ? 1 : 0 ) ); + EDD()->session->set( 'edd_purchase_key', $config_data['key'] ); + + if ( preg_match( '/[^\d\.]/', $config_data['amount'] ) ) { + edd_set_error( 'amount_validation', __( 'The amount is invalid', 'edd-novalnet' ) ); + edd_send_back_to_checkout( '?payment-mode=' . $payment_method ); + } + + $recuring_product = 0; + foreach ( $purchase_data['downloads'] as $value ) { + if ( ! empty( $value ['options']['recurring'] ) ) { + $recuring_product++; + } + } + if ( $recuring_product > 1 ) { + edd_set_error( 'basic_validation', __( 'Multiple subscription can not be purchased at the same time ', 'edd-novalnet' ) ); + edd_send_back_to_checkout( '?payment-mode=' . $payment_method ); + } + if ( class_exists( 'EDD_Recurring' ) && ( ! empty( $edd_options['novalnet_subs_tariff_id'] ) && novalnet_digits_check( $edd_options['novalnet_subs_tariff_id'] ) ) && ( isset( $edd_options['novalnet_subs_enable_option'] ) && ! empty( $edd_options['novalnet_subs_tariff_id'] ) ) && ( isset( $purchase_data['downloads'][0]['options']['recurring'] ) || isset( $purchase_data['downloads'][1]['options']['recurring'] ) || isset( $purchase_data['downloads'][2]['options']['recurring'] ) ) ) { + if ( in_array( $payment_method, array( 'novalnet_cc', 'novalnet_sepa', 'novalnet_paypal', 'novalnet_invoice', 'novalnet_prepayment', 'novalnet_invoice_guarantee', 'novalnet_sepa_guarantee' ), true ) ) { + $config_data['tariff'] = trim( $edd_options['novalnet_subs_tariff_id'] ); + $tariff_period = false; + $trial_period = ''; + foreach ( $purchase_data['downloads'] as $purchase_key => $purchase_val ) { + if ( ! empty( $purchase_val['options']['recurring'] ) && ( empty( $purchase_val['options']['recurring']['trial_period'] ) && 1 === $purchase_val['options']['recurring']['times'] ) ) { + $config_data['tariff'] = $edd_options['novalnet_tariff_id']; + } else { + if ( ! empty( $purchase_val['options']['recurring'] ) ) { + $subs_product_id = $purchase_key; + $recurring = $purchase_val['options']['recurring']; + $tariff_times = ( ( 'quarter' === $recurring['period'] ) ? 3 : ( ( 'semi-year' === $recurring['period'] ) ? 6 : 1 ) ); + + if ( ! empty( $recurring['trial_period'] ) ) { + $trial_period = substr( $recurring['trial_period']['unit'], 0, 1 ); + if ( 'q' === $trial_period || 's' === $trial_period ) { + $trial_period = 'm'; + } + $config_data['amount'] = 0; + if ( isset($recurring['signup_fee']) && !empty($recurring['signup_fee']) ) { + $config_data['amount'] = $config_data['amount'] + ($recurring['signup_fee']); + } + if ( !empty($edd_options['prices_include_tax']) && 'yes' === $edd_options['prices_include_tax'] ) { + $config_data['amount'] = $config_data['amount'] + $purchase_data['tax']; + } else { + $config_data['amount'] = ( ! empty( $purchase_data['tax_rate'] ) && ! empty( $purchase_data['cart_details'][ $subs_product_id ]['tax'] ) ) ? ( $config_data['amount'] + ( round( $config_data['amount'] * $purchase_data['tax_rate'], 2 ) ) ): $config_data['amount'] ; + } + $config_data['amount'] = $config_data['amount'] * 100; + } + $tariff_period = substr( $recurring['period'], 0, 1 ); + if ( 'q' === $tariff_period || 's' === $tariff_period ) { + $tariff_period = 'm'; + } + } + } + } + if ( $tariff_period ) { + + $subs_product_amt = $purchase_data['cart_details'][ $subs_product_id ]['price'] * 100; + if ( 'w' === $tariff_period ) { + $tariff_period = 'd'; + $tariff_times = 1 * 7; + } + if ( 'w' === $trial_period ) { + $trial_period = 'd'; + $recurring['trial_period']['quantity'] = $recurring['trial_period']['quantity'] * 7; + } + $config_data['tariff_period'] = ( ! empty( $trial_period ) ) ? $recurring['trial_period']['quantity'] . $trial_period : $tariff_times . $tariff_period; + $config_data['tariff_period2'] = $tariff_times . $tariff_period; + + $recurring_one_time_discounts = edd_get_option( 'recurring_one_time_discounts' ) ? true : false; + if ( ! empty( $recurring['trial_period']['unit'] ) && ! empty( $recurring['trial_period']['quantity'] ) ) { + $recurring_one_time_discounts = false; + } + + if ( $purchase_data['cart_details'][ $subs_product_id ]['discount'] ) { + if ( $recurring_one_time_discounts ) { + if ( !empty($edd_options['prices_include_tax']) && 'yes' === $edd_options['prices_include_tax'] ) { + $config_data['tariff_period2_amount'] = $purchase_data['cart_details'][ $subs_product_id ]['subtotal'] * 100 + $purchase_data['tax'] * 100; + } else { + $config_data['tariff_period2_amount'] = ( ! empty( $purchase_data['tax_rate'] ) && ! empty( $purchase_data['cart_details'][ $subs_product_id ]['tax'] ) ) ? ( $purchase_data['cart_details'][ $subs_product_id ]['subtotal'] + ( round( $purchase_data['cart_details'][ $subs_product_id ]['subtotal'] * $purchase_data['tax_rate'], 2 ) ) ) * 100 : $purchase_data['cart_details'][ $subs_product_id ]['subtotal'] * 100; + } + } else { + $config_data['tariff_period2_amount'] = $subs_product_amt; + } + } else { + $config_data['tariff_period2_amount'] = $subs_product_amt; + } + } + } else { + $config_data['tariff'] = $edd_options['novalnet_tariff_id']; + }// End if. + }// End if. + return $config_data; +} + +/** + * Get payment details + * + * @param string $payment_type Allow payment to process. + * @return array. + */ +function get_payment_key( $payment_type ) { + $payment_key = array( + 'novalnet_cc' => array( + 'key' => 6, + 'payment_type' => 'CREDITCARD', + ), + 'novalnet_sepa' => array( + 'key' => 37, + 'payment_type' => 'DIRECT_DEBIT_SEPA', + ), + 'novalnet_invoice' => array( + 'key' => 27, + 'payment_type' => 'INVOICE_START', + ), + 'novalnet_prepayment' => array( + 'key' => 27, + 'payment_type' => 'PREPAYMENT', + ), + 'novalnet_instantbank' => array( + 'key' => 33, + 'payment_type' => 'ONLINE_TRANSFER', + ), + 'novalnet_paypal' => array( + 'key' => 34, + 'payment_type' => 'PAYPAL', + ), + 'novalnet_ideal' => array( + 'key' => 49, + 'payment_type' => 'IDEAL', + ), + 'novalnet_eps' => array( + 'key' => 50, + 'payment_type' => 'EPS', + ), + 'novalnet_giropay' => array( + 'key' => 69, + 'payment_type' => 'GIROPAY', + ), + 'novalnet_przelewy24' => array( + 'key' => 78, + 'payment_type' => 'PRZELEWY24', + ), + 'novalnet_cashpayment' => array( + 'key' => 59, + 'payment_type' => 'CASHPAYMENT', + ), + 'novalnet_sepa_guarantee' => array( + 'key' => 40, + 'payment_type' => 'GUARANTEED_DIRECT_DEBIT_SEPA', + ), + 'novalnet_invoice_guarantee' => array( + 'key' => 41, + 'payment_type' => 'GUARANTEED_INVOICE', + ), + ); + return $payment_key[ $payment_type ]; +} + +/** + * Get order number + * + * @param array $purchase_data Get purchase data from shop. + * @return string + */ +function get_novalnet_transaction_order( $purchase_data ) { + + global $edd_options; + + $payment_data = array( + 'price' => $purchase_data['price'], + 'date' => $purchase_data['date'], + 'user_email' => $purchase_data['user_email'], + 'purchase_key' => $purchase_data['purchase_key'], + 'currency' => edd_get_currency(), + 'downloads' => $purchase_data['downloads'], + 'cart_details' => $purchase_data['cart_details'], + 'user_info' => $purchase_data['user_info'], + 'gateway' => $purchase_data['gateway'], + ); + + $nn_order_no = edd_insert_payment( $payment_data ); + return $nn_order_no; +} + +/** + * Get customer details + * + * @since 1.0.1 + * @param array $purchase_data Get purchase data from shop. + * @return array + */ +function novalnet_get_customer_data( $purchase_data ) { + + global $edd_options; + + $name = novalnet_retrieve_name( + array( + $purchase_data['user_info']['first_name'], + $purchase_data['user_info']['last_name'], + ) + ); + // Returns customer details. + $customer_data = array_map( 'trim', + array( + 'gender' => 'u', + 'customer_no' => $purchase_data['user_info']['id'] > 0 ? trim( $edd_options['novalnet_product_id'] ) . '-' . $purchase_data['user_info']['id'] : 'guest', + 'first_name' => $name['0'], + 'last_name' => $name['1'], + 'email' => isset( $purchase_data['user_email'] ) ? $purchase_data['user_email'] : $purchase_data['user_info']['email'], + 'street' => ( ! empty( $purchase_data['user_info']['address']['line1'] ) ) ? $purchase_data['user_info']['address']['line1'] . ', ' . $purchase_data['user_info']['address']['line2'] : $purchase_data['user_info']['address']['line1'], + 'search_in_street' => 1, + 'city' => $purchase_data['user_info']['address']['city'], + 'zip' => $purchase_data['user_info']['address']['zip'], + 'country_code' => $purchase_data['user_info']['address']['country'], + 'country' => $purchase_data['user_info']['address']['country'], + + + ) + ); + if ( ! empty( $purchase_data['user_info']['company'] ) ) { + $customer_data['company'] = $purchase_data['user_info']['company']; + } + + if ( empty( $customer_data['first_name'] ) || empty( $customer_data['last_name'] ) || empty( $customer_data['email'] ) ) { + edd_set_error( 'customer_validation', __( 'Customer name/email fields are not valid', 'edd-novalnet' ) ); + edd_send_back_to_checkout( '?payment-mode=' . $purchase_data['gateway'] ); + } elseif ( empty( $customer_data['city'] ) || empty( $customer_data['zip'] ) || empty( $customer_data['country'] ) || empty( $customer_data['street'] ) ) { + edd_set_error( 'customer_validation', __( 'Please fill in all the mandatory fields', 'edd-novalnet' ) ); + edd_send_back_to_checkout( '?payment-mode=' . $purchase_data['gateway'] ); + } + return $customer_data; +} + +/** + * Get system details + * + * @since 1.0.1 + * @return array + */ +function novalnet_get_system_data() { + + $system_data = array( + 'currency' => edd_get_currency(), + 'remote_ip' => novalnet_server_addr(), + 'lang' => novalnet_shop_language(), + 'system_ip' => novalnet_server_addr( 'SERVER_ADDR' ), + 'system_name' => 'wordpress-easydigitaldownloads', + 'system_version' => get_bloginfo( 'version' ) . '-' . EDD_VERSION . '-NN-' . NOVALNET_VERSION, + 'system_url' => site_url(), + ); + return $system_data; +} + +/** + * Validates the given input data is numeric or not + * + * @since 1.0.1 + * @param integer $input Check to allow only numbers. + * @return boolean + */ +function novalnet_digits_check( $input ) { + return ( preg_match( '/^[0-9]+$/', trim( $input ) ) ); +} + +/** + * Redirect to Novalnet paygate for re-direction payments + * + * @since 1.0.1 + * @param string $paygate_url Redirect URL is passed in shop. + * @param array $params Formed parameter with redirection param is passed. + */ +function novalnet_get_redirect( $paygate_url, $params ) { + // Re-directs to third party. + $form = '
'; + foreach ( $params as $k => $v ) { + $form .= '' . "\n"; + } + $form .= html_entity_decode( __( 'You are now redirected automatically', 'edd-novalnet' ) ) . '
'; + $form .= ''; + echo wp_unslash( $form ); + exit(); +} + +/** + * Check Novalnet response + * + * @since 1.0.1 + * @param array $response Get response from server. + * @param array $update_payment check if it is update payment response. + */ +function novalnet_check_response( $response, $update_payment = false ,$trial_product = '0') { + + if ( isset( $response['status'] ) && '100' === $response['status'] ) { + if ( ! empty( $response['subs_id'] ) ) { + // To restrict empty mail sending from edd-recurring. + add_action( 'edd_pre_complete_purchase', 'novalnet_restrict_mail', 10, 1 ); + } + novalnet_success( $response, $update_payment ,$trial_product ); + } else { + novalnet_transaction_failure( $response, false, $update_payment ); + } +} + +/** + * Restrict subscription mail which is sent at first due to process checkout function in edd-recurring + * + * @since 1.1.0 + * @param boolean $return Contains mail process. + * @return boolean + */ +function novalnet_restrict_mail( $return ) { + if ( ( ( ! empty( $_REQUEST['payment-mode'] ) && novalnet_check_string( $_REQUEST['payment-mode'] ) ) && ( ! empty( $_REQUEST['edd-gateway'] ) && novalnet_check_string( $_REQUEST['edd-gateway'] ) ) ) || ( ! empty( $_REQUEST['tid'] ) && ( ! empty( $_REQUEST['payment_method'] ) && in_array( $_REQUEST['payment_method'], array( 'novalnet_paypal', 'novalnet_cc' ), true ) ) ) ) { // Input var okay. + remove_action( 'edd_complete_purchase', 'edd_trigger_purchase_receipt', 999 ); + return false; + } + return $return; +} + +/** + * Pass session values in url + * + * @since 1.1.0 + * @param string $url Subscription URL. + * @return string + */ +function novalnet_subscription_url( $url ) { + + // Here Getting the payment transaction details in order confirmation page. + if ( EDD()->session->get( 'novalnet_subscription_process' ) ) { + + $redirect_param = EDD()->session->get( 'novalnet_redirect_params' ); + + EDD()->session->set( 'novalnet_subscription_process', null ); + EDD()->session->set( 'novalnet_redirect_params', null ); + + if ( ! empty( $redirect_param ) && 'PAYPAL' === $redirect_param['payment_type'] ) { + novalnet_get_redirect( 'https://payport.novalnet.de/paypal_payport', $redirect_param ); + } elseif ( ! empty( $redirect_param ) && 'CREDITCARD' === $redirect_param['payment_type'] ) { + novalnet_get_redirect( 'https://payport.novalnet.de/pci_payport', $redirect_param ); + } + novalnet_check_response( EDD()->session->get( 'novalnet_response' ) ); + } + return $url; +} + +/** + * Update and insert Novalnet Transaction details in database and payment note for Payment success + * + * @since 1.0.1 + * @param array $response Server response. + * @param array $update_payment Check response for update payment. + */ +function novalnet_success( $response, $update_payment ,$trial_product ) { + + global $edd_options, $wpdb; + $trial_product = !empty(EDD()->session->get( 'trial_product')) ? EDD()->session->get( 'trial_product') : $trial_product; + + EDD()->session->set( 'trial_product', null); + + if ( $update_payment ) { + $subs_details = get_subscription_details( $response['order_no'] ); + $subscription = new EDD_Subscription( $subs_details['subs_id'] ); + $payment_name = get_novalnet_payment( $response['order_no'] ); + + $test_mode = (int) ( edd_is_test_mode() || ! empty( $edd_options[ $payment_name . '_test_mode' ] ) || ! empty( $response['test_mode'] ) ); + + $exist_comments = $wpdb->get_var( $wpdb->prepare( "SELECT post_excerpt FROM {$wpdb->posts} where ID =%s", $response['order_no'] ) ); + $comments = novalnet_form_transaction_details( $response, $test_mode ); + /* translators: %s: Date */ + $comments .= sprintf( __( 'Successfully updated the payment and customer billing details for upcoming subscriptions on date: %s', 'edd-novalnet' ), date_i18n( get_option( 'date_format' ), strtotime( gmdate( 'Y-m-d H:i:s' ) ) ) ) . PHP_EOL; + edd_insert_payment_note( $response['order_no'], $comments ); + + $wpdb->update( + $wpdb->prefix . 'novalnet_subscription_details', + array( + 'recurring_tid' => $response['tid'], + ), + array( + 'order_no' => $subscription->parent_payment_id, + ) + ); // db call ok; no-cache ok. + + // Update Novalnet Transaction comments into shop database. + wp_update_post( + array( + 'ID' => $response['order_no'], + 'post_excerpt' => $exist_comments . $comments, + ) + ); + $return_url = wp_parse_url( $subscription->get_update_url() ); + wp_safe_redirect( add_query_arg( array( 'updated' => true ), $return_url['path'] ) ); + exit(); + } + + $novalnet_comments = ''; + + EDD()->session->set( 'novalnet_subscription_process', null ); + EDD()->session->set( 'novalnet_response', null ); + EDD()->session->set( 'novalnet_purchase_data', null ); + + $payment_gateways = EDD()->session->get( 'edd_purchase' ); + + update_post_meta( $response['order_no'], '_edd_payment_gateway', $payment_gateways['gateway'] ); + update_post_meta( $response['order_no'], '_nn_order_tid', $response['tid'] ); + + $invoice_payments = array( 'novalnet_invoice', 'novalnet_prepayment' ); + $amount = ( isset( $payment_gateways['gateway'] ) && in_array( $payment_gateways['gateway'], array( 'novalnet_invoice', 'novalnet_prepayment', 'novalnet_sepa' ), true ) ) ? str_replace( ',', '', sprintf( '%0.2f', $response['amount'] ) ) * 100 : str_replace( ',', '', sprintf( '%0.2f', $response['amount'] ) ); + + if ( in_array( $payment_gateways['gateway'], $invoice_payments, true ) || ( 'novalnet_paypal' === $payment_gateways['gateway'] && ( '90' === $response['tid_status'] || '85' === $response['tid_status'] ) ) || ( 'novalnet_przelewy24' === $payment_gateways['gateway'] && '86' === $response['tid_status'] ) || ( 'novalnet_cashpayment' === $payment_gateways['gateway'] ) ) { + update_post_meta( $response['order_no'], '_nn_callback_amount', 0 ); + } else { + // Set the purchase to complete. + update_post_meta( $response['order_no'], '_nn_callback_amount', get_post_meta( $response['order_no'], '_edd_payment_total', true ) * 100 ); + } + + if ( in_array( $response['tid_status'], array( '91', '99', '98', '85' ), true ) ) { + $final_order_status = $edd_options['novalnet_onhold_success_status']; + } elseif ( in_array( $response['tid_status'], array( '75', '90', '86' ), true ) ) { + $final_order_status = $edd_options[ $payment_gateways['gateway'] . '_order_pending_status' ]; + } else { + $final_order_status = $edd_options[ $payment_gateways['gateway'] . '_order_completion_status' ]; + if ( '41' === $response['key'] ) { + $final_order_status = $edd_options[ $payment_gateways['gateway'] . '_order_callback_status' ]; + } + } + + $test_mode = (int) ( edd_is_test_mode() || ! empty( $edd_options[ $payment_gateways['gateway'] . '_test_mode' ] ) || ! empty( $response['test_mode'] ) ); + $novalnet_comments = ''; + $novalnet_comments .= novalnet_form_transaction_details( $response, $test_mode ); + if ( in_array( $payment_gateways['gateway'], $invoice_payments, true ) && $trial_product == '0' ) { + $novalnet_comments = novalnet_get_invoice_comments( $response, $payment_gateways, $amount, $novalnet_comments); + } + + if ( 'novalnet_cashpayment' === $payment_gateways['gateway'] ) { + $novalnet_comments .= cashpayment_order_comments( $response ); + EDD()->session->set( 'cp_checkout_token', $response['cp_checkout_token'] ); + } + + update_transaction_details( $response, $payment_gateways['gateway'] ); + + $novalnet_comments = html_entity_decode( $novalnet_comments, ENT_QUOTES, 'UTF-8' ); + // Update Novalnet Transaction details into payment note. + $post_comments = get_post( $edd_options ); + $post_comments->post_excerpt .= $novalnet_comments; + // Update Novalnet Transaction details into shop database. + wp_update_post( + array( + 'ID' => $response['order_no'], + 'post_excerpt' => $novalnet_comments, + ) + ); + + EDD()->session->set( 'novalnet_transaction_comments', $novalnet_comments ); + edd_update_payment_status( $response['order_no'], $final_order_status ); + edd_insert_payment_note( $response['order_no'], $novalnet_comments ); + if ( 'publish' !== $final_order_status || ! empty( $response['subs_id'] ) ) { + edd_trigger_purchase_receipt( $response['order_no'] ); + } + + // Empty the shopping cart. + edd_empty_cart(); + + // Go to the Success page. + edd_send_to_success_page(); + +} + +/** + * Update the transaction details into the novalnet table + * + * @param array $response Server response. + * @param string $payment_gateway payment name. + */ +function update_transaction_details( $response, $payment_gateway ) { + global $wpdb, $edd_options; + + $payment = get_novalnet_payment( $response['order_no'] ); + $payment = ! empty( $payment_gateway ) ? $payment_gateway : $payment; + + $subscription_details = get_subscription_details( $response['order_no'] ); + + if ( ! empty( $response['tariff_period'] ) || ! empty( $response['subs_id'] ) || ! empty( $subscription_details['subs_id'] ) ) { + $wpdb->update( + $wpdb->prefix . 'edd_subscriptions', + array( + 'transaction_id' => $response['tid'], + ), + array( + 'parent_payment_id' => $response['order_no'], + ) + ); + $subscription = new EDD_Subscription( $subscription_details['subs_id'] ); + if ( '100' !== $response['status'] ) { + $subscription->cancel(); + } + } + + $invoice_payments = array( 'novalnet_invoice', 'novalnet_prepayment' ); + $test_mode = (int) ( edd_is_test_mode() || ! empty( $payment . '_test_mode' ) || ! empty( $response['test_mode'] ) ); + $amount = str_replace( ',', '', sprintf( '%0.2f', $response['amount'] ) ) * 100; + + $customer_id = edd_get_payment_user_id( $response['order_no'] ); + + update_post_meta( $response['order_no'], '_nn_customer_id', $edd_options['novalnet_product_id'] . '-' . $customer_id ); + + $wpdb->insert( + "{$wpdb->prefix}novalnet_transaction_detail", + array( + 'order_no' => $response['order_no'], + 'vendor_id' => trim( $edd_options['novalnet_merchant_id'] ), + 'auth_code' => trim( $edd_options['novalnet_auth_code'] ), + 'product_id' => trim( $edd_options['novalnet_product_id'] ), + 'tariff_id' => trim( $edd_options['novalnet_tariff_id'] ), + 'subs_id' => ! empty( $response['subs_id'] ) ? $response['subs_id'] : '', + 'payment_id' => ( isset( $response['key'] ) && !empty( $response['key'] ) ) ? $response['key'] : !empty($response['payment_id']) ? $response['payment_id'] :'', + 'payment_type' => $payment, + 'tid' => $response['tid'], + 'gateway_status' => ! empty( $response['tid_status'] ) ? $response['tid_status'] : '', + 'amount' => $amount, + 'callback_amount' => ( ! in_array( $payment, $invoice_payments, true ) ) ? $amount : 0, + 'currency' => edd_get_currency(), + 'test_mode' => $test_mode, + 'customer_id' => $customer_id, + 'customer_email' => edd_get_payment_user_email( $response['order_no'] ), + 'date' => gmdate( 'Y-m-d H:i:s' ), + ) + ); // db call ok; no-cache ok. + + if ( ! empty( $response['subs_id'] ) ) { + + $total_length = $subscription->bill_times; + + $wpdb->insert( + "{$wpdb->prefix}novalnet_subscription_details", + array( + 'order_no' => $response['order_no'], + 'payment_type' => $payment, + 'recurring_payment_type' => $payment, + 'recurring_amount' => $amount, + 'recurring_tid' => $response['tid'], + 'tid' => $response['tid'], + 'signup_date' => gmdate( 'Y-m-d H:i:s' ), + 'subs_id' => $response['subs_id'], + 'next_payment_date' => ! empty( $response['next_subs_cycle'] ) ? $response['next_subs_cycle'] : $response['paid_until'], + 'subscription_length' => ! empty( $total_length ) ? $total_length : 0, + ) + ); // db call ok; no-cache ok. + } + +} + +/** + * Update the failure transaction in shop backend + * + * @param array $response Server response. + * @param boolean $hash Check the hash error + */ +function novalnet_transaction_failure( $response, $hash = false, $update_payment = false ) { + + global $edd_options, $wpdb; + + if ( $update_payment ) { + $subs_details = get_subscription_details( $response['order_no'] ); + $subscription = new EDD_Subscription( $subs_details['subs_id'] ); + $return_url = wp_parse_url( $subscription->get_update_url() ); + if ( $hash ) { + edd_set_error( 'server_direct_validation', __( 'While redirecting some data has been changed. The hash check failed', 'edd-novalnet' ) ); + wp_safe_redirect( add_query_arg( array( 'action' => 'update', + 'subscription_id' => $subscription->id ), $return_url['path'] ) ); + die(); + } + $exist_comments = $wpdb->get_var( $wpdb->prepare( "SELECT post_excerpt FROM {$wpdb->posts} where ID =%s", $response['order_no'] ) ); + $error_msg = get_status_desc( $response ); + + // Update failure comments to order note + $comments = PHP_EOL . sprintf( __( 'Recurring change payment method has been failed due to %s', 'edd-novalnet' ), $error_msg ); + edd_insert_payment_note( $response['order_no'], $comments ); + + // Update Novalnet Transaction comments into shop database. + wp_update_post( + array( + 'ID' => $response['order_no'], + 'post_excerpt' => $exist_comments . $comments, + ) + ); + + edd_set_error( 'edd_recurring_novalnet', $error_msg ); + wp_safe_redirect( add_query_arg( array( 'action' => 'update', 'subscription_id' => $subscription->id ), $return_url['path'] ) ); + die(); + } + + EDD()->session->set( 'novalnet_subscription_process', null ); + EDD()->session->set( 'novalnet_response', null ); + EDD()->session->set( 'novalnet_purchase_data', null ); + + $payment_gateways = EDD()->session->get( 'edd_purchase' ); + + update_post_meta( $response['order_no'], '_edd_payment_gateway', $payment_gateways['gateway'] ); + update_post_meta( $response['order_no'], '_nn_order_tid', $response['tid'] ); + + $test_mode = (int) ( edd_is_test_mode() || ! empty( $edd_options[ $payment_gateways['gateway'] . '_test_mode' ] ) || ! empty( $response['test_mode'] ) ); + $novalnet_comments = ''; + $novalnet_comments .= novalnet_form_transaction_details( $response, $test_mode ); + $novalnet_comments .= ( isset( $response['status_text'] ) ? $response['status_text'] : ( isset( $response['status_desc'] ) ? $response['status_desc'] : $response['status_message'] ) ); + + update_transaction_details( $response, $payment_gateways['gateway'] ); + + $novalnet_comments = html_entity_decode( $novalnet_comments, ENT_QUOTES, 'UTF-8' ); + // Update Novalnet Transaction details into payment note. + $post_comments = get_post( $edd_options ); + $post_comments->post_excerpt .= $novalnet_comments; + // Update Novalnet Transaction details into shop database. + wp_update_post( + array( + 'ID' => $response['order_no'], + 'post_excerpt' => $novalnet_comments, + ) + ); + edd_update_payment_status( $response['order_no'], 'abandoned' ); + edd_insert_payment_note( $response['order_no'], $novalnet_comments ); + + edd_set_error( 'server_direct_validation', get_status_desc( $response ) ); + if ( $hash ) { + edd_set_error( 'server_direct_validation', __( 'While redirecting some data has been changed. The hash check failed', 'edd-novalnet' ) ); + } + + edd_send_back_to_checkout( '?payment-mode='. $payment_gateways['gateway'] ); +} + +/** + * Fetch subscription details + * + * @param integer $post_id Get relevant subscription post_id. + * @return array $subs_details Subscription details are taken from core table. + */ +function get_subscription_details( $post_id ) { + global $wpdb; + + $subs_details = array(); + + if ( class_exists( 'EDD_Recurring' ) ) { + $subs_details['subs_plugin_enabled'] = true; + $subs_details['subs_id'] = $wpdb->get_var( $wpdb->prepare( "SELECT id FROM {$wpdb->prefix}edd_subscriptions WHERE parent_payment_id='%s'", $post_id ) ); // db call ok; no-cache ok. + } + return $subs_details; +} + + /** + * Retrieves the Novalnet subscription cancel reasons + * + * @since 1.1.0 + * @return array + */ +function novalnet_subscription_cancel_list() { + return array( + __( 'Product is costly', 'edd-novalnet' ), + __( 'Cheating', 'edd-novalnet' ), + __( 'Partner interfered', 'edd-novalnet' ), + __( 'Financial problem', 'edd-novalnet' ), + __( 'Content does not match my likes', 'edd-novalnet' ), + __( 'Content is not enough', 'edd-novalnet' ), + __( 'Interested only for a trial', 'edd-novalnet' ), + __( 'Page is very slow', 'edd-novalnet' ), + __( 'Satisfied customer', 'edd-novalnet' ), + __( 'Logging in problems', 'edd-novalnet' ), + __( 'Other', 'edd-novalnet' ), + ); +} + + /** + * Novalnet subscription cancel action performs + * + * @since 1.1.0 + * @param object $subscription The Subscription object. + * @return array + */ +function novalnet_subs_cancel_perform( $subscription ) { + global $wpdb; + $result_set = $wpdb->get_row( $wpdb->prepare( "SELECT vendor_id, auth_code, product_id, tariff_id, payment_id,tid FROM {$wpdb->prefix}novalnet_transaction_detail WHERE order_no=%s ORDER BY id DESC", $subscription->parent_payment_id ), ARRAY_A ); // db call ok; no-cache ok. + $termination_reason = $wpdb->get_row( $wpdb->prepare( "SELECT termination_reason FROM {$wpdb->prefix}novalnet_subscription_details WHERE order_no=%s ORDER BY id DESC", $subscription->parent_payment_id ), ARRAY_A ); // db call ok; no-cache ok. + $language = novalnet_shop_language(); + if ( empty( $termination_reason['termination_reason'] ) ) { + $cancel_request = array( + 'vendor' => $result_set['vendor_id'], + 'auth_code' => $result_set['auth_code'], + 'product' => $result_set['product_id'], + 'tariff' => $result_set['tariff_id'], + 'tid' => $result_set['tid'], + 'key' => $result_set['payment_id'], + 'cancel_sub' => 1, + 'cancel_reason' => 'Other', + 'lang' => $language, + ); + $wpdb->update( + $wpdb->prefix . 'novalnet_subscription_details', + array( + 'termination_reason' => isset( $cancel_request['cancel_reason'] ) ? $cancel_request['cancel_reason'] : 'Other', + 'termination_at' => gmdate( 'Y-m-d H:i:s' ), + ), + array( + 'order_no' => $subscription->parent_payment_id, + ) + ); // db call ok; no-cache ok. + return novalnet_submit_request( $cancel_request ); + } else { + echo '

The subscription has been already stopped or cancelled.

'; + } + return array(); +} + +/** + * Get transaction details in order success page + * + * @since 1.0.1 + * @param boolean $post_comments Get DB post comments. + */ +function novalnet_transaction_detail_checkout( $post_comments ) { + EDD()->session->set( 'novalnet', null ); + $nn_post_id = get_post( $post_comments ); + $payment_name = get_novalnet_payment( $nn_post_id->ID ); + if ( novalnet_check_string( $payment_name ) ) { + echo wpautop( edd_get_gateway_checkout_label( $payment_name ) . $nn_post_id->post_excerpt ); + } +} + +/** + * Receive Novalnet response for redirection payments + * + * @since 1.0.1 + * @param boolean $update_payment Check for update payment. + */ +function novalnet_get_redirect_response( $update_payment = false ) { + + global $wpdb; + $redirect_response = wp_unslash( $_REQUEST ); // Input var okay. + $order_ref = array(); + if ( isset($redirect_response['order_no']) && !empty($redirect_response['order_no']) ) { + $order_ref = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}novalnet_transaction_detail WHERE order_no=%s", $redirect_response['order_no'] ) ); + } + + if ( empty($order_ref) || ( ! empty($order_ref) && $update_payment ) ) { + + // Decode the redirect response. + $redirect_response = decode_paygate_response( $redirect_response ); + + if ( isset( $redirect_response['tid_status'] ) && ( in_array( $redirect_response['tid_status'], array( '98', '85', '86', '90', '100' ), true ) ) && isset( $redirect_response['tid'] ) ) { + if ( ! novalnet_check_hash( $redirect_response ) ) { + novalnet_transaction_failure( $redirect_response, true, $update_payment ); + } else { + novalnet_check_response( $redirect_response, $update_payment ); + } + } elseif ( ! empty( $redirect_response['status'] ) && '100' !== $redirect_response['status'] ) { + novalnet_transaction_failure( $redirect_response, false, $update_payment ); + } + } else { + edd_send_back_to_checkout(); + } +} + +/** + * Perform the decoding paygate response process for redirection payment methods + * + * @param array $datas This is array of transaction data. + * + * @return string + */ +function decode_paygate_response( $datas ) { + $result = array(); + + $data['auth_code'] = $datas['auth_code']; + $data['tariff'] = $datas['tariff']; + $data['product'] = $datas['product']; + $data['amount'] = $datas['amount']; + $data['test_mode'] = $datas['test_mode']; + $data['uniqid'] = $datas['uniqid']; + + foreach ( $data as $key => $value ) { + $result[ $key ] = generate_decode( $value, $data['uniqid'] ); // Decode process. + } + return array_merge( $datas, $result ); +} + +/** + * Perform the decoding process for redirection payment methods + * + * @param $data array The transaction data. + * @param $uniqid string The string value. + * @return string + */ +function generate_decode( $data = '', $uniqid ) { + global $edd_options; + try { + $data = openssl_decrypt( base64_decode( $data ), 'aes-256-cbc', $edd_options['novalnet_access_key'], true, $uniqid ); + } catch ( Exception $e ) { // Error log for the exception. + echo esc_html( 'Error: ' . $e ); + } + return $data; +} + +/** + * Set default payment as chosen payment + * + * @since 1.0.1 + * @return string $set_default_payment Default payment is checked. + */ +function novalnet_set_default_gateway() { + global $edd_options; + $set_default_payment = ''; + $payment_gateways = EDD()->session->get( 'edd_purchase' ); + $current_payment = isset( $payment_gateways['gateway'] ) ? $payment_gateways['gateway'] : ''; + $invalid_pin_count = EDD()->session->get( $current_payment . '_pin_invalid_count' ); + if ( isset( $edd_options['default_gateway'] ) && edd_is_gateway_active( $edd_options['default_gateway'] ) ) { + $set_default_payment = $edd_options['default_gateway']; + } elseif ( isset( $current_payment ) && ! empty( $current_payment ) && ! $invalid_pin_count ) { + $set_default_payment = $current_payment; + } + return $set_default_payment; +} + +/** + * Returns the gateway icon for payment logo. + * + * @since 1.0.1 + * @param string $payment_method Get payment name. + * @param string $payment_method_name Get payment method name. + */ +function novalnet_display_payment_logo( $payment_method, $payment_method_name ) { + global $edd_options; + $icon_html = isset( $edd_options['novalnet_common_payment_logo'] ) ? $edd_options['novalnet_common_payment_logo'] : ''; + if ( $icon_html == 'yes') { + if ( 'novalnet_cc' !== $payment_method ) { ?> + <?php echo esc_html( $payment_method_name ); ?> + + <?php echo esc_html( $payment_method_name ); ?> + 'POST', + 'timeout' => 240, + 'body' => $urlparam, + ) + ); + + // Check for error. + if ( is_wp_error( $response ) ) { + return 'tid=&status=' . $response->get_error_code() . '&status_message=' . $response->get_error_message(); + } + + // Return the response. + return $response['body']; +} + +/** + * Remove the payment which is not for recurring process + * + * @since 1.0.1 + * @param array $gateway_list Get enabled payment. + * @return array $gateway_list payment are displayed in checkout. + */ +function remove_novalnet_payment( $gateway_list ) { + global $edd_options; + + if ( ! is_admin() && ( empty( $edd_options['novalnet_public_key'] ) || empty( $edd_options['novalnet_tariff_id'] ) ) ) { + foreach ( array_keys( $gateway_list ) as $value ) { + if ( novalnet_check_string( $value ) ) { + unset( $gateway_list [ $value ] ); + } + } + } + if ( ! is_admin() && !isset( $edd_options['novalnet_client_key'] ) ) { + foreach ( array_keys( $gateway_list ) as $value ) { + if ( novalnet_check_string( $value ) ) { + if ( 'novalnet_cc' === $value ) { + unset( $gateway_list [ $value ] ); + } + } + } + } + $recurring = false; + $cart_details = edd_get_cart_content_details(); + foreach ( (array) $cart_details as $cart_val ) { + if ( ! empty( $cart_val ['item_number']['options']['recurring'] ) ) { + $recurring = true; + break; + } + } + + if ( $recurring && isset( $edd_options['novalnet_subs_payments'] ) ) { + foreach ( array_keys( $gateway_list ) as $value ) { + if ( novalnet_check_string( $value ) && ! in_array( $value, $edd_options['novalnet_subs_payments'], true ) && ( !empty($edd_options['novalnet_subs_enable_option']) && '1' === $edd_options['novalnet_subs_enable_option'] ) || ( novalnet_check_string( $value ) && empty( $edd_options['novalnet_subs_enable_option'] ) ) ) { + unset( $gateway_list [ $value ] ); + } + } + if ( novalnet_check_string( $edd_options['default_gateway'] ) && isset( $edd_options['default_gateway'] ) && ! in_array( $edd_options['default_gateway'], $edd_options['novalnet_subs_payments'], true ) && ( !empty($edd_options['novalnet_subs_enable_option']) && '1' === $edd_options['novalnet_subs_enable_option'] ) ) { + $subs_payments = $edd_options['novalnet_subs_payments']; + for ( $i = 0; $i < count( $subs_payments ); $i++ ) { + $edd_options['default_gateway'] = $subs_payments[ $i ]; + } + } else if( novalnet_check_string( $edd_options['default_gateway'] ) && !empty($gateway_list) && ! in_array( $edd_options['default_gateway'], array_keys( $gateway_list ), true ) ){ + $available_gateways = array_keys( $gateway_list ); + $edd_options['default_gateway'] = $available_gateways[0]; + } + } + return $gateway_list; +} + +/** + * Check the response hash is equal to request hash + * + * @since 1.0.1 + * @param array $request Get hash value and check. + * @return string + */ +function novalnet_check_hash( $request ) { + return ( $request['hash2'] !== generate_md5_value( $request ) ); +} + + /** + * Submit the given request to the given url + * + * @since 1.1.0 + * @param array $request Get request data. + * @param string $url URL to proceed to Novalnet. + * @return object + */ +function novalnet_submit_request( $request, $url = 'https://payport.novalnet.de/paygate.jsp' ) { + $request = http_build_query( $request ); + $data = novalnet_handle_communication( $url, $request ); + wp_parse_str( $data, $response ); + return $response; +} + +/** + * Get transaction details in mail content + * + * @since 1.0.1 + * @param string $label Append in transaction detail. + * @param array $gateway Check for Novalnet payments. + * @return $label + */ +function novalnet_transaction_detail_email( $label, $gateway ) { + if ( novalnet_check_string( $gateway ) ) { + $label .= EDD()->session->get( 'novalnet_transaction_comments' ); + } + return $label; +} + +/** + * Get transaction details in proper alignment for back-end each order history + * + * @since 1.0.1 + * @param string $comments Post comments in DB. + * @return string $comments Retrieve comments in DB. + */ +function novalnet_backend_comments( $comments ) { + foreach ( $comments as $value ) { + if ( novalnet_check_string( get_post_meta( $value->comment_post_ID, '_edd_payment_gateway', true ) ) ) { + $value->comment_content = nl2br( $value->comment_content ); + } + } + return $comments; +} + +/** + * Get transaction details in proper alignment for back-end each order history + * + * @since 1.0.1 + * @param array $mail_body Get list of mail content. + * @param array $payment_id Get payment order no. + * @return string + */ +function novalnet_sale_notification( $mail_body, $payment_id ) { + if ( ! is_admin() && novalnet_check_string( get_post_meta( $payment_id, '_edd_payment_gateway', true ) ) ) { + EDD()->session->set( 'novalnet_transaction_comments', null ); + } + return $mail_body; +} + +/** + * Add renewal periods in the shop hook as it is not included in shop structure. + * + * @since 1.0.1 + * @param date $expiration Get expire date. + * @param integer $id Get order id to process. + * @param object $subs_db Get subscription details. + * @return array + */ +function novalnet_add_period( $expiration, $id, $subs_db ) { + if ( novalnet_check_string( $subs_db->gateway ) && in_array( $subs_db->period, array( 'quarter', 'semi-year' ), true ) ) { + $expires = $subs_db->get_expiration_time(); + // Determine what date to use as the start for the new expiration calculation. + if ( $expires > current_time( 'timestamp' ) && $subs_db->is_active() ) { + $base_date = $expires; + } else { + $base_date = current_time( 'timestamp' ); + } + if ( 'quarter' === $subs_db->period ) { + $length = '+3'; + $period = 'month'; + } else { + $length = '+6'; + $period = 'month'; + } + $expiration = gmdate( 'Y-m-d H:i:s', strtotime( $length . $period . ' 23:59:59', $base_date ) ); + } + return $expiration; +} + +/** + * Perform serialize data. + * + * @since 1.1.1 + * @param array $response Get server response. + * @param array $payment_gateways List the payment gateways. + * @param integer $amount Order placed amount to be shown in invoice. + * @param array $novalnet_comments Store the comments. + * @param boolean $cond The condition check. + * @param boolean $callback The callback via comments. + * @return array + */ +function novalnet_get_invoice_comments( $response, $payment_gateways, $amount, $novalnet_comments, $cond = true, $callback = false ) { + + global $edd_options, $wpdb; + + $payment_gateways = isset( $payment_gateways['gateway'] ) ? $payment_gateways['gateway'] : $payment_gateways; + $product = isset( $edd_options['novalnet_product_id'] ) ? $edd_options['novalnet_product_id'] : ( isset( $response['product_id'] ) ? $response['product_id'] : $edd_options['novalnet_product_id'] ); + $invoice_referece = 'BNR-' . $product . '-' . $response['order_no']; + $response['invoice_ref'] = $invoice_ref = ( isset( $response['invoice_ref'] ) && ! empty( $response['invoice_ref'] ) ) ? $response['invoice_ref'] : $invoice_referece; + $novalnet_comments .= PHP_EOL; + if ( isset( $response['tid_status'] ) && '75' === $response['tid_status'] && '41' === $response['key'] ) { + $novalnet_comments .= __( 'Your order is being verified. Once confirmed, we will send you our bank details to which the order amount should be transferred. Please note that this may take up to 24 hours.', 'edd-novalnet' ); + } elseif ( '100' === $response['tid_status'] || '91' === $response['tid_status'] ) { + $novalnet_comments .= __( 'Please transfer the amount to the below mentioned account.', 'edd-novalnet' ) . PHP_EOL; + if ( '100' === $response['tid_status'] ) { + $due_date = !empty($response['due_date']) ? date_i18n( get_option( 'date_format' ), strtotime( $response['due_date'] ) ) : ''; + $novalnet_comments .= __( 'Due date: ', 'edd-novalnet' ) .$due_date. PHP_EOL; + } + $novalnet_comments .= __( 'Account holder: ', 'edd-novalnet' ) . $response['invoice_account_holder'] . PHP_EOL; + $novalnet_comments .= ' IBAN: ' . $response['invoice_iban'] . PHP_EOL; + $novalnet_comments .= ' BIC: ' . $response['invoice_bic'] . PHP_EOL; + $amount = edd_format_amount( $response['amount'] ); + if ( $callback ) { + $amount = edd_format_amount( $response['amount'] / 100 ); + } + $novalnet_comments .= ' Bank: ' . $response['invoice_bankname'] . ' ' . trim( isset( $response['invoice_bankplace'] ) ? $response['invoice_bankplace'] : '' ) . PHP_EOL; + $novalnet_comments .= __( 'Amount: ', 'edd-novalnet' ) . edd_currency_filter( $amount ) . PHP_EOL; + $increment = 1; + if ( $cond ) { + $novalnet_comments .= PHP_EOL . __( 'Please use the following payment reference for your money transfer, as only through this way your payment is matched and assigned to the order:', 'edd-novalnet' ); + $novalnet_comments .= PHP_EOL; + } + $payment_ref = array( + 'TID ' . $response['tid'] . PHP_EOL, + $invoice_ref . PHP_EOL, + ); + foreach ( $payment_ref as $key ) { + $novalnet_comments .= sprintf( __( 'Payment Reference %s: ', 'edd-novalnet' ), $increment++ ); + $novalnet_comments .= $key; + } + } + return $novalnet_comments; +} + +/** + * To get the order comments for cashpayment + * + * @param string $response get the payment response. + * @return string + */ +function cashpayment_order_comments( $response ) { + $store_count = 1; + foreach ( $response as $key => $value ) { + if ( strpos( $key, 'nearest_store_title' ) !== false ) { + $store_count++; + } + } + $comments = PHP_EOL; + if ( $response['cp_due_date'] ) { + $comments .= __( 'Slip expiry date', 'edd-novalnet' ) . ': ' . $response['cp_due_date']; + } + $comments .= PHP_EOL . PHP_EOL; + $comments .= __( 'Store(s) near you', 'edd-novalnet' ) . PHP_EOL . PHP_EOL; + for ( $i = 1; $i < $store_count; $i++ ) { + $comments .= $response[ 'nearest_store_title_' . $i ] . PHP_EOL; + $comments .= $response[ 'nearest_store_street_' . $i ] . PHP_EOL; + $comments .= $response[ 'nearest_store_city_' . $i ] . PHP_EOL; + $comments .= $response[ 'nearest_store_zipcode_' . $i ] . PHP_EOL; + foreach ( edd_get_country_list() as $country_code => $country ) { + if ( $country_code === $response[ 'nearest_store_country_' . $i ] ) { + $comments .= $country . PHP_EOL . PHP_EOL; + } + } + } + return $comments; +} + +/** + * Perform serialize data. + * + * @since 1.1.1 + * @param array $data The resourse data. + * + * @return string + */ +function novalnet_serialize_data( $data ) { + return ! empty( $data ) ? wp_json_encode( $data ) : ''; +} + +/** + * Returns Wordpress-blog language. + * + * @since 2.0.0 + * @return string + */ +function novalnet_shop_language() { + return strtoupper( substr( get_bloginfo( 'language' ), 0, 2 ) ); +} + +/** + * Formating the date as per the + * shop structure. + * + * @since 2.0.0 + * @param date $date The date value. + * + * @return string + */ +function edd_novalnet_formatted_date( $date = '' ) { + return date_i18n( get_option( 'date_format' ), strtotime( '' === $date ? gmdate( 'Y-m-d H:i:s' ) : $date ) ); +} + +/** + * Returns redirect param + * + * @since 1.1.1 + * @param string $payment_name Get the payment name. + * @param array $payment_data Get the payment data. + * @return array + */ +function novalnet_get_redirect_param( $payment_name, $payment_data = array(), $subs_update = array() ) { + global $edd_options; + + $encode_array = array(); + + if ( ! empty( $payment_data ['tariff_period'] ) && ! empty( $payment_data ['tariff_period2'] ) && ! empty( $payment_data ['tariff_period2_amount'] ) ) { + // Form subscription params to encode. + $encode_array['tariff_period'] = $payment_data ['tariff_period']; + $encode_array['tariff_period2'] = $payment_data ['tariff_period2']; + $encode_array['tariff_period2_amount'] = $payment_data ['tariff_period2_amount']; + } + $encode_array['auth_code'] = $payment_data['auth_code']; + $encode_array['product'] = $payment_data['product']; + $encode_array['tariff'] = $payment_data['tariff']; + $encode_array['test_mode'] = $payment_data['test_mode']; + $encode_array['amount'] = $payment_data ['amount']; + $encode_array['uniqid'] = unique_string(); + + $config_data = generate_hash_value( $encode_array ); + + if ( isset($subs_update['update_payment']) && $subs_update['update_payment'] ) { + + $return_url = isset($subs_update['return_url']) ? $subs_update['return_url'] : ''; + $redirect_url = add_query_arg( array( 'edd-api' => 'novalnet_update_payment_method'), $return_url); + } else { + $redirect_url = add_query_arg( + array( + 'edd-api' => 'novalnet_redirect_response', + ), + edd_get_checkout_uri() + ); + if ( version_compare(EDD_VERSION, '2.5.17', '<=') ) { + $redirect_url = add_query_arg( + array( + 'edd-api' => 'products', + ), + edd_get_checkout_uri() + ); + } + } + + // Form redirect parameters. + $config_data['return_url'] = $redirect_url; + $config_data['return_method'] = 'POST'; + $config_data['error_return_url'] = $redirect_url; + $config_data['error_return_method'] = 'POST'; + $config_data['implementation'] = 'ENC'; + + return $config_data; +} + +/** + * Perform HASH Generation process for redirection payment methods + * + * @param array $datas Get the redirect params. + * @return string + */ +function generate_hash_value( $datas ) { + // Form params to encode. + $encode_array = array( 'auth_code', 'product', 'tariff', 'amount', 'test_mode' ); + if ( ! empty( $datas ['tariff_period'] ) && ! empty( $datas ['tariff_period2'] ) && ! empty( $datas ['tariff_period2_amount'] ) ) { + // Form subscription params to encode. + $encode_array = array_merge( $encode_array, array( 'tariff_period', 'tariff_period2', 'tariff_period2_amount' ) ); + } + foreach ( $encode_array as $key ) { + $datas[ $key ] = generate_encode( $datas[ $key ], $datas['uniqid'] ); // Encoding process. + } + $datas['hash'] = generate_md5_value( $datas ); // Generate hash value. + return $datas; +} + +/* + * Perform the encoding process for redirection payment methods + * + * @param array $data Get the encode data. + * @param string $uniqid Get the unique id. + * + * @return string + */ +function generate_encode( $data = '', $uniqid ) { + global $edd_options; + try { + $data = htmlentities( base64_encode( openssl_encrypt( $data, 'aes-256-cbc', $edd_options['novalnet_access_key'], true, $uniqid ) ) ); + } catch ( Exception $e ) { // Error log for the exception + echo esc_html( 'Error: ' . $e ); + } + return $data; +} + +/** + * Get hash value + * + * @param string $datas Get the encode data. + * @return string + */ +function generate_md5_value( $datas ) { + global $edd_options; + return hash( 'sha256', ( $datas['auth_code'] . $datas['product'] . $datas['tariff'] . $datas['amount'] . $datas['test_mode'] . $datas['uniqid'] . strrev( $edd_options['novalnet_access_key'] ) ) ); +} + +/** + * Generate 30 digit unique string + * + * return string + */ +function unique_string() { + $uniqid = explode( ',', '8,7,6,5,4,3,2,1,9,0,9,7,6,1,2,3,4,5,6,7,8,9,0' ); + shuffle( $uniqid ); + return substr( implode( '', $uniqid ), 0, 16 ); +} + +/** + * Form transaction detail. + * + * @since 1.1.1 + * @param array $response Get response from server. + * @param string $test_mode Form testmode value. + * @param boolean $callback Check response from callback. + * @return array + */ +function novalnet_form_transaction_details( $response, $test_mode, $callback = false ) { + + $tid = ( $callback && !empty( $response['tid_payment'] ) ) ? $response['tid_payment'] : $response['tid']; + $novalnet_comments = ''; + + $payment_name = get_novalnet_payment( $response['order_no'] ); + + if ( '100' === $response['status'] && isset( $response['key'] ) && ( '40' === $response['key'] || '41' === $response['key'] ) ) { + $novalnet_comments .= PHP_EOL . __( 'This is processed as a guarantee payment', 'edd-novalnet' ); + } + $novalnet_comments .= PHP_EOL . sprintf( __( 'Novalnet transaction ID: %s', 'edd-novalnet' ), ! empty( $response ) ? $tid : $response['shop_tid'] ) . PHP_EOL; + + $novalnet_comments .= ( '1' == $test_mode ) ? __( 'Test order', 'edd-novalnet' ) . PHP_EOL : ''; + if ( isset( $response['tid_status'] ) && '75' === $response['tid_status'] && 'novalnet_sepa' === $payment_name ) { + $novalnet_comments .= PHP_EOL . __( 'Your order is under verification and we will soon update you with the order status. Please note that this may take upto 24 hours.', 'edd-novalnet' ); + } + return $novalnet_comments; +} + +/** + * Retrieve the name of the end user. + * + * @since 1.1.1 + * @param string $name The customer name value. + * @return array + */ +function novalnet_retrieve_name( $name ) { + // Retrieve first name and last name from order objects. + if ( empty( $name['0'] ) ) { + $name['0'] = $name['1']; + } + if ( empty( $name['1'] ) ) { + $name['1'] = $name['0']; + } + return $name; +} + +/** + * Basic requirements validation for guarantee payment. + * + * @since 2.0.0 + * @param array $user_data Get users details. + * @param string $payment_name Get payment name. + */ +function novalnet_guarantee_payment_validation( $user_data, $payment_name,$trial_product = '0' ) { + + global $edd_options; + + $order_amount = ( isset( $user_data['price'] ) && !empty( $user_data['price'] ) ) ? sprintf( '%0.2f', $user_data['price'] ) * 100 : sprintf( '%0.2f', edd_get_cart_total() ) * 100; + + // Billing address. + $billing_details = isset( $user_data['_edd_user_address'] ) ? unserialize( $user_data['_edd_user_address'][0] ) : $user_data['user_info']['address']; + + $min_amount = isset( $edd_options[ $payment_name . '_guarantee_minimum_order_amount' ] ) ? $edd_options[ $payment_name . '_guarantee_minimum_order_amount' ] : ''; + $minimum_amount = (trim( $min_amount ) > 999 && novalnet_digits_check( $min_amount ) ) ? $min_amount : 999; + $error_message = ''; + // Payment guarantee process. + if ( '1' === $edd_options[ $payment_name . '_guarantee_enable' ] && $trial_product == '0' ){ + + // Show error on payment field/ checkout. + if ( ! in_array( $billing_details['country'], array( 'AT', 'DE', 'CH' ), true ) ) { + $error_message .= '
' . __( 'Only Germany, Austria or Switzerland are allowed', 'edd-novalnet' ); + } + if ( 'EUR' !== edd_get_currency() ) { + $error_message .= '
' . __( 'Only EUR currency allowed', 'edd-novalnet' ); + } + if ( $order_amount < $minimum_amount ) { + /* translators: %s: amount */ + $error_message .= '
' . sprintf( __( 'Minimum order amount must be %s', 'edd-novalnet' ), edd_currency_filter( edd_format_amount( $minimum_amount / 100 ) ) ); + } + EDD()->session->set( $payment_name . '_guarantee_payment_error', trim( str_replace( '
', ', ', $error_message ), ',' ) ); + + if ( ! isset( $edd_options[ $payment_name . '_force_normal_payment' ] ) ) { + return $error_message; + } + } else { + // Process as normal payment. + EDD()->session->set( $payment_name . '_guarantee_payment_error', null ); + } +} + +/** + * Validations for date of birth + * + * @param string $day Get customer birth day. + * @param string $month Get customer birth month. + * @param string $year Get customer birth year. + * @param string $payment_name Get payment name. + * @return string + */ +function check_guarantee_payment( $day, $month, $year, $payment_name ) { + + $message = ''; + $date_check = $day . '.' . $month . '.' . $year; + $total_days = 0; + EDD()->session->set( $payment_name . '_dob', null ); + if ( ! empty( novalnet_digits_check( $month ) ) && ! empty( novalnet_digits_check( $year ) ) ) { + $total_days = cal_days_in_month( CAL_GREGORIAN, $month, $year ); + } + + if ( empty( $day ) && empty( $month ) && empty( $year ) ) { + $message = __( 'Please enter your date of birth', 'edd-novalnet' ); + } elseif ( ( $day > $total_days ) || ( empty( $day ) || empty( $month ) || empty( $year ) ) || ! preg_match( '/^(0[1-9]|[1-2][0-9]|3[0-1]).(0[1-9]|1[0-2]).([0-9]{4})$/', $date_check ) ) { + $message = __( 'The date format is invalid', 'edd-novalnet' ); + } elseif ( time() < strtotime( '+18 years', strtotime( $date_check ) ) ) { + $message = __( 'You need to be at least 18 years old', 'edd-novalnet' ); + } else { + EDD()->session->set( $payment_name . '_dob', $date_check ); + } + EDD()->session->set( $payment_name . '_guarantee_dob_payment_error', $message ); + return $message; +} + +/** + * Get order number for transaction + * + * @param array $purchase_data Get customer detail. + * @param array $params Transaction parameters. + * @return void + */ +function novalnet_check_subscription( $purchase_data, &$params ) { + + if ( ! empty( $params ['tariff_period'] ) && ! empty( $params ['tariff_period2'] ) && ! empty( $params ['tariff_period2_amount'] ) ) { + EDD()->session->set( $purchase_data['gateway'] . '_subscription', $params ); + EDD()->session->set( 'novalnet_purchase_data', $purchase_data ); + $subscription = new EDD_Recurring_Gateway(); + $subscription->process_checkout( $purchase_data ); + } else { + // Get transaction order number. + $edd_order = get_novalnet_transaction_order( $purchase_data ); + $params['order_no'] = $edd_order; + } +} + +/** + * Get payment name + * + * @since 2.0.1 + * @param string $payment_id Get pament name for that id. + */ +function get_novalnet_payment( $payment_id ) { + $payment_name = get_post_meta( $payment_id, '_edd_payment_gateway', true); + return $payment_name; +} diff --git a/languages/edd-novalnet-de_DE.mo b/languages/edd-novalnet-de_DE.mo new file mode 100755 index 0000000000000000000000000000000000000000..2fa1bece27f98a783a438db50f31d7e7981dde2b GIT binary patch literal 29426 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\n" +"Language-Team: Novalnet \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.6\n" +"X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n" +"X-Poedit-Basepath: .\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-SearchPath-0: /var/www/dev/edd-novalnet-gateway\n" + +#: class-novalnet.php:143 +msgid "" +"Easy Digital Downloads Payment Gateway by Novalnetadd-on requires Easy Digital " +"Downloads plugin. Please install and activate it." +msgstr "" +"Easy Digital Downloads Zahlungsweisen per Novalnetverlangt Easy Digital " +"Downloads Steck-. Installieren Sie bitte und aktivieren Sie es." + +#: class-novalnet.php:143 +msgid "" +"Easy Digital Downloads Payment Gateway by Novalnetrequires PHP CURL. " +"You need to activate the CURL function on your server. Please contact your " +"hosting provider." +msgstr "" +"Easy Digital Downloads Zahlungsweisen per Novalnetverlangt PHP CURL. " +"Sie müssen die CURL-Funktion auf Ihrem Server aktivieren. Bitte wenden Sie " +"sich an Ihren Hosting-Provider." + +#: includes/admin/class-novalnet-global-config.php:74 +#: includes/class-novalnet-subscriptions.php:287 +msgid "--Select--" +msgstr "--Auswählen--" + +#: includes/admin/class-novalnet-global-config.php:99 +msgid "Novalnet Global Configuration" +msgstr "Novalnet Globale Konfiguration" + +#: includes/admin/class-novalnet-global-config.php:141 +msgid "Novalnet API Configuration" +msgstr "Novalnet API-Konfiguration" + +#: includes/admin/class-novalnet-global-config.php:141 +#, php-format +msgid "" +"Please read the Installation Guide before you start and login to the Novalnet Admin Portal using your merchant " +"account. To get a merchant account, mail to sales@novalnet.de or call +49 (089) 923068320." +msgstr "" +"Bevor Sie beginnen, lesen Sie bitte die Installationsanleitung und melden " +"Sie sich mit Ihrem Händlerkonto im Novalnet " +"Admin-Portal an. Um ein Händlerkonto zu erhalten, senden Sie bitte eine " +"E-Mail an sales@novalnet.de oder " +"rufen Sie uns unter +49 89 923068320 an." + +#: includes/admin/class-novalnet-global-config.php:142 +#: includes/gateways/class-novalnet-cashpayment.php:183 +#: includes/gateways/class-novalnet-cc.php:307 +#: includes/gateways/class-novalnet-eps.php:180 +#: includes/gateways/class-novalnet-giropay.php:180 +#: includes/gateways/class-novalnet-ideal.php:180 +#: includes/gateways/class-novalnet-instantbank.php:179 +#: includes/gateways/class-novalnet-invoice.php:233 +#: includes/gateways/class-novalnet-paypal.php:195 +#: includes/gateways/class-novalnet-prepayment.php:194 +#: includes/gateways/class-novalnet-przelewy24.php:184 +#: includes/gateways/class-novalnet-sepa.php:257 +msgid "Configure the gateway settings" +msgstr "Konfigurieren Sie die Gateway-Einstellungen" + +#: includes/admin/class-novalnet-global-config.php:147 +#: includes/admin/class-novalnet-global-config.php:151 +msgid "Product activation key" +msgstr "Aktivierungsschlüssel des Produkts" + +#: includes/admin/class-novalnet-global-config.php:152 +msgid "" +"Your product activation key is a unique token for merchant authentication " +"and payment processing." +msgstr "" +"Bitte geben Sie den Novalnet-Produktaktivierungsschlüssel an. Dieser ist für " +"die Authentifizierung und Zahlungsabwicklung erforderlich." + +#: includes/admin/class-novalnet-global-config.php:154 +#, php-format +msgid "" +"Get your Product activation key from the Novalnet Admin Portal: PROJECT > Choose your project > " +"Shop Parameters > API Signature (Product activation key)" +msgstr "" +"Ihren Produktaktivierungsschlüssel finden Sie im Novalnet Admin-Portal: PROJEKT > Wählen Sie Ihr Projekt > " +"Shop-Parameter > API-Signatur (Produktaktivierungsschlüssel)" + +#: includes/admin/class-novalnet-global-config.php:158 +msgid "Merchant ID " +msgstr "Händler-ID " + +#: includes/admin/class-novalnet-global-config.php:164 +msgid "Authentication code" +msgstr "Authentifizierungscode" + +#: includes/admin/class-novalnet-global-config.php:170 +msgid "Project ID" +msgstr "Projekt-ID" + +#: includes/admin/class-novalnet-global-config.php:176 +#: includes/admin/class-novalnet-global-config.php:177 +msgid "Select Tariff ID" +msgstr "Auswahl der Tarif-ID" + +#: includes/admin/class-novalnet-global-config.php:178 +msgid "" +"Select a Tariff ID to match the preferred tariff plan you created at the " +"Novalnet Admin Portal for this project." +msgstr "" +"Wählen Sie eine Tarif-ID, die dem bevorzugten Tarifplan entspricht, den Sie " +"im Novalnet Admin-Portal \n" +"für dieses Projekt erstellt haben." + +#: includes/admin/class-novalnet-global-config.php:184 +msgid "Payment access key" +msgstr "Zahlungs-Zugriffsschlüssel" + +#: includes/admin/class-novalnet-global-config.php:190 +msgid "Client Key" +msgstr "Schlüsselkunde" + +#: includes/admin/class-novalnet-global-config.php:196 +#: includes/admin/class-novalnet-global-config.php:197 +msgid "Display payment logo" +msgstr "Zahlungslogo anzeigen" + +#: includes/admin/class-novalnet-global-config.php:198 +msgid "The payment method logo(s) will be displayed on the checkout page. " +msgstr "Das Logo der Zahlungsart wird auf der Checkout-Seite angezeigt " + +#: includes/admin/class-novalnet-global-config.php:201 +#: includes/admin/class-novalnet-global-config.php:239 +#: includes/admin/class-novalnet-global-config.php:282 +#: includes/admin/class-novalnet-global-config.php:294 +#: includes/gateways/class-novalnet-cc.php:347 +#: includes/gateways/class-novalnet-invoice.php:353 +#: includes/gateways/class-novalnet-sepa.php:370 +msgid "No" +msgstr "Nein" + +#: includes/admin/class-novalnet-global-config.php:202 +#: includes/admin/class-novalnet-global-config.php:240 +#: includes/admin/class-novalnet-global-config.php:283 +#: includes/admin/class-novalnet-global-config.php:295 +#: includes/gateways/class-novalnet-cc.php:346 +#: includes/gateways/class-novalnet-invoice.php:354 +#: includes/gateways/class-novalnet-sepa.php:371 +msgid "Yes" +msgstr "Ja" + +#: includes/admin/class-novalnet-global-config.php:208 +msgid "Order status management for on-hold transactions" +msgstr "Verwaltung des Bestellstatus für ausgesetzte Zahlungen" + +#: includes/admin/class-novalnet-global-config.php:213 +#: includes/admin/class-novalnet-global-config.php:217 +msgid "On-hold order status" +msgstr "On-hold-Bestellstatus" + +#: includes/admin/class-novalnet-global-config.php:218 +msgid "" +"Status to be used for on-hold orders until the transaction is confirmed or " +"canceled." +msgstr "" +"Wählen Sie, welcher Status für On-hold-Bestellungen verwendet wird, solange " +"diese nicht bestätigt oder storniert worden sind." + +#: includes/admin/class-novalnet-global-config.php:222 +#: includes/admin/class-novalnet-global-config.php:226 +msgid "Canceled order status" +msgstr "Status für stornierte Bestellungen" + +#: includes/admin/class-novalnet-global-config.php:227 +msgid "Status to be used when order is canceled or fully refunded." +msgstr "" +"Wählen Sie, welcher Status für stornierte oder voll erstattete Bestellungen " +"verwendet wird." + +#: includes/admin/class-novalnet-global-config.php:231 +msgid "Dynamic subscription management" +msgstr "Verwaltung dynamischer Abonnements" + +#: includes/admin/class-novalnet-global-config.php:236 +msgid "Enable subscriptions" +msgstr "Abonnement aktivieren" + +#: includes/admin/class-novalnet-global-config.php:245 +msgid "Subscription payments" +msgstr "Abonnement-Zahlungen" + +#: includes/admin/class-novalnet-global-config.php:253 +#: includes/gateways/class-novalnet-cc.php:128 +#: includes/gateways/class-novalnet-cc.php:144 +#: includes/gateways/class-novalnet-cc.php:306 +msgid "Novalnet Credit/Debit Cards" +msgstr "Novalnet Kredit- / Debitkarte" + +#: includes/admin/class-novalnet-global-config.php:254 +#: includes/gateways/class-novalnet-sepa.php:85 +#: includes/gateways/class-novalnet-sepa.php:101 +#: includes/gateways/class-novalnet-sepa.php:256 +msgid "Novalnet Direct Debit SEPA" +msgstr "Novalnet Lastschrift SEPA" + +#: includes/admin/class-novalnet-global-config.php:255 +#: includes/gateways/class-novalnet-invoice.php:81 +#: includes/gateways/class-novalnet-invoice.php:97 +#: includes/gateways/class-novalnet-invoice.php:232 +msgid "Novalnet Invoice" +msgstr "Novalnet Kauf auf Rechnung" + +#: includes/admin/class-novalnet-global-config.php:256 +#: includes/gateways/class-novalnet-prepayment.php:65 +#: includes/gateways/class-novalnet-prepayment.php:81 +#: includes/gateways/class-novalnet-prepayment.php:193 +msgid "Novalnet Prepayment" +msgstr "Novalnet Vorkasse" + +#: includes/admin/class-novalnet-global-config.php:257 +#: includes/gateways/class-novalnet-paypal.php:67 +#: includes/gateways/class-novalnet-paypal.php:83 +#: includes/gateways/class-novalnet-paypal.php:194 +msgid "Novalnet PayPal" +msgstr "Novalnet PayPal" + +#: includes/admin/class-novalnet-global-config.php:264 +#: includes/admin/class-novalnet-global-config.php:265 +msgid "Subscription Tariff ID" +msgstr "Tarif-ID des Abonnements" + +#: includes/admin/class-novalnet-global-config.php:266 +msgid "" +"Select the preferred Novalnet subscription tariff ID available for your " +"project. For more information, please refer the Installation Guide." +msgstr "" +"Wählen Sie Ihre gewünschte Tarif-ID des Abonnements, die für Ihr Projekt " +"verfügbar ist. Weitere Informationen finden Sie in der " +"Installationsanleitung." + +#: includes/admin/class-novalnet-global-config.php:271 +msgid "Notification / Webhook URL Setup" +msgstr "Notifikation & Webhook -URL Einrichten" + +#: includes/admin/class-novalnet-global-config.php:277 +#: includes/admin/class-novalnet-global-config.php:278 +msgid "Allow manual testing of the Notification / Webhook URL" +msgstr "Manuelles Testen der Benachrichtigungs- / Webhook-URL erlauben" + +#: includes/admin/class-novalnet-global-config.php:279 +msgid "" +"Enable this to test the Novalnet Notification / Webhook URL manually. " +"Disable this before setting your shop live to block unauthorized calls from " +"external parties." +msgstr "" +"Aktivieren Sie diese Option, um die Novalnet-Benachrichtigungs-/Webhook-URL " +"manuell zu testen. Deaktivieren Sie die Option, bevor Sie Ihren Shop " +"liveschalten, um unautorisierte Zugriffe von Dritten zu blockieren." + +#: includes/admin/class-novalnet-global-config.php:289 +#: includes/admin/class-novalnet-global-config.php:290 +msgid "Enable e-mail notification" +msgstr "E-Mail-Benachrichtigungen einschalten" + +#: includes/admin/class-novalnet-global-config.php:291 +msgid "" +"Enable this option to notify the given e-mail address when the " +"Notification / Webhook URL is executed successfully." +msgstr "" +"Aktivieren Sie diese Option, um die angegebene E-Mail-Adresse zu " +"benachrichtigen, wenn die Benachrichtigungs- / Webhook-URL erfolgreich " +"ausgeführt wurde." + +#: includes/admin/class-novalnet-global-config.php:301 +#: includes/admin/class-novalnet-global-config.php:302 +msgid "Send e-mail to" +msgstr "E-Mails senden an" + +#: includes/admin/class-novalnet-global-config.php:303 +msgid "" +"Notification / Webhook URL execution messages will be sent to this e-mail." +msgstr "E-Mail-Benachrichtigungen werden an diese E-Mail-Adresse gesendet." + +#: includes/admin/class-novalnet-global-config.php:309 +msgid "Notification / Webhook URL" +msgstr "Notifikation & Webhook -URL" + +#: includes/admin/class-novalnet-global-config.php:319 +#, php-format +msgid "" +"You must add the following webhook endpoint to your Novalnet Admin Portal . This will allow you to receive " +"notifications about the transaction status." +msgstr "" +"Sie müssen die folgende Webhook-URL im Novalnet Admin-Portalhinzufügen. Dadurch können Sie " +"Benachrichtigungen über den Transaktionsstatus erhalten." + +#: includes/admin/class-novalnet-global-config.php:349 +#, php-format +msgid "" +"You need to configure your outgoing server IP address ( %s ) at Novalnet. " +"Please configure it in Novalnet Admin Portal or contact technic@novalnet.de" +msgstr "" +"Sie müssen die IP-Adresse Ihres Outgoing-Servers ( %s ) abei Novalnet " +"hinterlegen. Bitte hinterlegen Sie diese im Novalnet Admin-Portal oder " +"kontaktieren Sie uns unter technic@novalnet.de" + +#: includes/admin/class-novalnet-global-config.php:355 +#: includes/novalnet-functions.php:321 includes/novalnet-functions.php:589 +msgid "Please fill in all the mandatory fields" +msgstr "Füllen Sie bitte alle Pflichtfelder aus" + +#: includes/api/class-novalnet-callback-api.php:309 +#: includes/api/class-novalnet-callback-api.php:702 +#, php-format +msgid "The transaction has been canceled on %1$s." +msgstr "Die Transaktion wurde am %1$s Uhr storniert." + +#: includes/api/class-novalnet-callback-api.php:587 +msgid "Next charging date: " +msgstr "Nächstes Belastungsdatum: " + +#: includes/api/class-novalnet-callback-api.php:590 +#, php-format +msgid "" +"Subscription has been successfully renewed for the TID: %1$s with the amount " +"%2$s on %3$s. The renewal TID is: %4$s" +msgstr "" +"Chargeback erfolgreich importiert für die TID: %1$s Betrag: %2$s am %3$s " +"Uhr. TID der Folgebuchung: %4$s" + +#: includes/api/class-novalnet-callback-api.php:644 +#: includes/class-novalnet-subscriptions.php:267 +msgid "The subscription has been already stopped or cancelled" +msgstr "Das Abonnement wurde schon beendet oder gekündigt" + +#: includes/api/class-novalnet-callback-api.php:678 +#: includes/novalnet-functions.php:1029 +msgid "Other" +msgstr "Sonstige" + +#: includes/api/class-novalnet-callback-api.php:707 +#, php-format +msgid "Subscription has been stopped for the TID: %1$s on %2$s." +msgstr "Das Abonnement wurde für die TID: %1$s am%2$s." + +#: includes/api/class-novalnet-callback-api.php:713 +#, php-format +msgid "Subscription has been canceled due to: %1$s" +msgstr "Das Abonnement wurde gekündigt wegen: %1$s" + +#: includes/api/class-novalnet-callback-api.php:773 +#, php-format +msgid "Subscription has been reactivated for the TID: %1$s on %2$s." +msgstr "Das Abonnement wurde für die TID: %1$s reaktiviert am%2$s." + +#: includes/api/class-novalnet-callback-api.php:820 +#, php-format +msgid "The transaction has been confirmed on %1$s" +msgstr "Die Buchung wurde am %1$s Uhr bestätigt" + +#: includes/api/class-novalnet-callback-api.php:825 +#, php-format +msgid "" +"The transaction status has been changed from pending to on-hold for the TID: " +"%1$s on %2$s." +msgstr "" +"Der Status der Transaktion mit der TID: %1$s wurde am %2$s Uhr von " +"ausstehend auf ausgesetzt geändert." + +#: includes/api/class-novalnet-callback-api.php:851 +#, php-format +msgid "Transaction updated successfully for the TID: %1$s on %2$s." +msgstr "Transaktion mit TID: %1$s wurde am %2$s erfolgreich aktualisiert." + +#: includes/api/class-novalnet-callback-api.php:878 +#, php-format +msgid "The transaction has been canceled due to: %s" +msgstr "Die Transaktion wurde storniert. Grund: %s" + +#: includes/api/class-novalnet-callback-api.php:913 +#, php-format +msgid "" +"Refund has been initiated for the TID: %1$s with the amount %2$s. New TID: " +"%3$s." +msgstr "" +"Die Rückerstattung für die TID %1$s mit dem Betrag %2$s wurde veranlasst. " +"Neue TID %3$s." + +#: includes/api/class-novalnet-callback-api.php:916 +#, php-format +msgid "" +"Chargeback executed for return debit of TID:%1$s with the amount %2$s on " +"%3$s. The subsequent TID: %4$s." +msgstr "" +"Chargeback für Rücklastschrift mit dem Betrag %2$s am %3$s für TID %1$s " +"ausgeführt. Die neue TID lautet: %4$s." + +#: includes/api/class-novalnet-callback-api.php:919 +#, php-format +msgid "" +"Chargeback executed for reversal of TID: %1$s with the amount %2$s on %3$s. " +"The subsequent TID: %4$s." +msgstr "" +"Chargeback für Rücküberweisung mit dem Betrag %2$s am %3$s für TID %1$s " +"ausgeführt. Die neue TID lautet: %4$s." + +#: includes/api/class-novalnet-callback-api.php:922 +#, php-format +msgid "" +"Chargeback executed successfully for the TID: %1$s amount: %2$s on %3$s. The " +"subsequent TID: %4$s." +msgstr "" +"Chargeback erfolgreich importiert für die TID: %1$s Betrag: %2$s am %3$s " +"Uhr. TID der Folgebuchung: %4$s." + +#: includes/api/class-novalnet-callback-api.php:946 +#: includes/api/class-novalnet-callback-api.php:949 +#: includes/api/class-novalnet-callback-api.php:974 +#, php-format +msgid "" +"Credit has been successfully received for the TID: %1$s with amount %2$s on " +"%3$s . Please refer PAID order details in our Novalnet Admin Portal for the " +"TID: %4$s " +msgstr "" +"Die Gutschrift für die TID ist erfolgreich eingegangen: %1$s mit Betrag %2$s " +"am %3$s . Bitte entnehmen Sie die TID den Einzelheiten der Bestellung bei " +"BEZAHLT in unserem Novalnet Adminportal: %4$s " + +#: includes/class-novalnet-subscriptions.php:127 +msgid "Invalid subscription id" +msgstr "Ungültig Abonnement" + +#: includes/class-novalnet-subscriptions.php:178 +#: includes/gateways/class-novalnet-sepa.php:210 +msgid "Your account details are invalid" +msgstr "Ihre Kontodaten sind ungültig" + +#: includes/class-novalnet-subscriptions.php:266 +msgid "Please select the reason for subscription cancellation" +msgstr "Bitte wählen Sie den Grund für die Kündigung des Abonnements" + +#: includes/class-novalnet-subscriptions.php:291 +msgid "Cancel" +msgstr "Stornieren" + +#: includes/class-novalnet-subscriptions.php:340 +#, php-format +msgid "Subscription has been canceled due to: %s" +msgstr "Das Abonnement wurde gekündigt wegen: %s" + +#: includes/gateways/class-novalnet-cashpayment.php:64 +#: includes/gateways/class-novalnet-cashpayment.php:79 +#: includes/gateways/class-novalnet-cashpayment.php:182 +msgid "Novalnet Barzahlen/viacash" +msgstr "Novalnet Barzahlen/viacash" + +#: includes/gateways/class-novalnet-cashpayment.php:80 +msgid "Barzahlen/viacash " +msgstr "Barzahlen/viacash " + +#: includes/gateways/class-novalnet-cashpayment.php:98 +msgid "Barzahlen/viacash" +msgstr "Barzahlen/viacash" + +#: includes/gateways/class-novalnet-cashpayment.php:110 +msgid "" +"On successful checkout, you will receive a payment slip/SMS to pay your " +"online purchase at one of our retail partners (e.g. supermarket)." +msgstr "" +"Nach erfolgreichem Bestellabschluss erhalten Sie einen Zahlschein bzw. eine " +"SMS. Damit können Sie Ihre Online-Bestellung bei einem unserer Partner im " +"Einzelhandel (z.B. Drogerie, Supermarkt etc.) bezahlen." + +#: includes/gateways/class-novalnet-cashpayment.php:128 +#: includes/gateways/class-novalnet-cashpayment.php:191 +#: includes/gateways/class-novalnet-cc.php:194 +#: includes/gateways/class-novalnet-cc.php:315 +#: includes/gateways/class-novalnet-eps.php:130 +#: includes/gateways/class-novalnet-eps.php:188 +#: includes/gateways/class-novalnet-giropay.php:131 +#: includes/gateways/class-novalnet-giropay.php:188 +#: includes/gateways/class-novalnet-ideal.php:130 +#: includes/gateways/class-novalnet-ideal.php:188 +#: includes/gateways/class-novalnet-instantbank.php:129 +#: includes/gateways/class-novalnet-instantbank.php:187 +#: includes/gateways/class-novalnet-invoice.php:241 +#: includes/gateways/class-novalnet-paypal.php:132 +#: includes/gateways/class-novalnet-paypal.php:203 +#: includes/gateways/class-novalnet-prepayment.php:130 +#: includes/gateways/class-novalnet-prepayment.php:202 +#: includes/gateways/class-novalnet-przelewy24.php:132 +#: includes/gateways/class-novalnet-przelewy24.php:192 +#: includes/gateways/class-novalnet-sepa.php:265 +#: templates/invoice-template.php:50 templates/sepa-template.php:50 +msgid "" +"The payment will be processed in the test mode therefore amount for this " +"transaction will not be charged" +msgstr "" +"Die Zahlung wird im Testmodus durchgeführt, daher wird der Betrag für diese " +"Transaktion nicht eingezogen" + +#: includes/gateways/class-novalnet-cashpayment.php:188 +#: includes/gateways/class-novalnet-cashpayment.php:190 +#: includes/gateways/class-novalnet-cc.php:312 +#: includes/gateways/class-novalnet-cc.php:314 +#: includes/gateways/class-novalnet-eps.php:185 +#: includes/gateways/class-novalnet-eps.php:187 +#: includes/gateways/class-novalnet-giropay.php:185 +#: includes/gateways/class-novalnet-giropay.php:187 +#: includes/gateways/class-novalnet-ideal.php:185 +#: includes/gateways/class-novalnet-ideal.php:187 +#: includes/gateways/class-novalnet-instantbank.php:184 +#: includes/gateways/class-novalnet-instantbank.php:186 +#: includes/gateways/class-novalnet-invoice.php:238 +#: includes/gateways/class-novalnet-invoice.php:240 +#: includes/gateways/class-novalnet-paypal.php:200 +#: includes/gateways/class-novalnet-paypal.php:202 +#: includes/gateways/class-novalnet-prepayment.php:199 +#: includes/gateways/class-novalnet-prepayment.php:201 +#: includes/gateways/class-novalnet-przelewy24.php:189 +#: includes/gateways/class-novalnet-przelewy24.php:191 +#: includes/gateways/class-novalnet-sepa.php:262 +#: includes/gateways/class-novalnet-sepa.php:264 +msgid "Enable test mode" +msgstr "Testmodus aktivieren" + +#: includes/gateways/class-novalnet-cashpayment.php:195 +#: includes/gateways/class-novalnet-cashpayment.php:199 +msgid "Slip expiry date (in days)" +msgstr "Verfallsdatum des Zahlscheins (in Tagen)" + +#: includes/gateways/class-novalnet-cashpayment.php:200 +msgid "" +"Number of days given to the buyer to pay at a store. If this field is left " +"blank, 14 days will be set as slip expiry date by default. " +msgstr "" +"Anzahl der Tage, die der Käufer Zeit hat, um den Betrag in einer Filiale zu " +"bezahlen. Wenn Sie dieses Feld leer lassen, ist der Zahlschein standardmäßig " +"14 Tage lang gültig. " + +#: includes/gateways/class-novalnet-cashpayment.php:204 +#: includes/gateways/class-novalnet-cashpayment.php:208 +#: includes/gateways/class-novalnet-cc.php:353 +#: includes/gateways/class-novalnet-cc.php:357 +#: includes/gateways/class-novalnet-eps.php:192 +#: includes/gateways/class-novalnet-eps.php:196 +#: includes/gateways/class-novalnet-giropay.php:192 +#: includes/gateways/class-novalnet-giropay.php:196 +#: includes/gateways/class-novalnet-ideal.php:192 +#: includes/gateways/class-novalnet-ideal.php:196 +#: includes/gateways/class-novalnet-instantbank.php:191 +#: includes/gateways/class-novalnet-instantbank.php:195 +#: includes/gateways/class-novalnet-invoice.php:277 +#: includes/gateways/class-novalnet-invoice.php:281 +#: includes/gateways/class-novalnet-paypal.php:238 +#: includes/gateways/class-novalnet-paypal.php:242 +#: includes/gateways/class-novalnet-prepayment.php:216 +#: includes/gateways/class-novalnet-prepayment.php:220 +#: includes/gateways/class-novalnet-przelewy24.php:205 +#: includes/gateways/class-novalnet-przelewy24.php:209 +#: includes/gateways/class-novalnet-sepa.php:302 +#: includes/gateways/class-novalnet-sepa.php:306 +msgid "Completed order status" +msgstr "Status für erfolgreichen Auftragsabschluss" + +#: includes/gateways/class-novalnet-cashpayment.php:209 +#: includes/gateways/class-novalnet-cc.php:358 +#: includes/gateways/class-novalnet-eps.php:197 +#: includes/gateways/class-novalnet-giropay.php:197 +#: includes/gateways/class-novalnet-ideal.php:197 +#: includes/gateways/class-novalnet-instantbank.php:196 +#: includes/gateways/class-novalnet-invoice.php:282 +#: includes/gateways/class-novalnet-paypal.php:243 +#: includes/gateways/class-novalnet-prepayment.php:221 +#: includes/gateways/class-novalnet-przelewy24.php:210 +#: includes/gateways/class-novalnet-sepa.php:307 +msgid "Status to be used for successful orders." +msgstr "" +"Wählen Sie, welcher Status für erfolgreich abgeschlossene Bestellungen " +"verwendet wird." + +#: includes/gateways/class-novalnet-cashpayment.php:213 +#: includes/gateways/class-novalnet-cashpayment.php:217 +#: includes/gateways/class-novalnet-invoice.php:286 +#: includes/gateways/class-novalnet-invoice.php:290 +#: includes/gateways/class-novalnet-prepayment.php:225 +#: includes/gateways/class-novalnet-prepayment.php:229 +msgid "Callback / Webhook order status" +msgstr "Callback / Webhook Bestellstatus" + +#: includes/gateways/class-novalnet-cashpayment.php:218 +#: includes/gateways/class-novalnet-invoice.php:291 +#: includes/gateways/class-novalnet-prepayment.php:230 +msgid "" +"Status to be used when callback script is executed for payment received by " +"Novalnet." +msgstr "" +"Status, der zu verwendet wird, wenn das Callback-Skript für eine bei " +"Novalnet eingegangene Zahlung ausgeführt wird." + +#: includes/gateways/class-novalnet-cashpayment.php:222 +#: includes/gateways/class-novalnet-cc.php:362 +#: includes/gateways/class-novalnet-eps.php:201 +#: includes/gateways/class-novalnet-giropay.php:201 +#: includes/gateways/class-novalnet-ideal.php:201 +#: includes/gateways/class-novalnet-instantbank.php:200 +#: includes/gateways/class-novalnet-invoice.php:295 +#: includes/gateways/class-novalnet-paypal.php:247 +#: includes/gateways/class-novalnet-prepayment.php:234 +#: includes/gateways/class-novalnet-przelewy24.php:214 +#: includes/gateways/class-novalnet-sepa.php:311 +msgid "Notification for the buyer" +msgstr "Benachrichtigung des Käufers" + +#: includes/gateways/class-novalnet-cashpayment.php:225 +#: includes/gateways/class-novalnet-cc.php:365 +#: includes/gateways/class-novalnet-eps.php:204 +#: includes/gateways/class-novalnet-giropay.php:204 +#: includes/gateways/class-novalnet-ideal.php:204 +#: includes/gateways/class-novalnet-instantbank.php:203 +#: includes/gateways/class-novalnet-invoice.php:298 +#: includes/gateways/class-novalnet-paypal.php:250 +#: includes/gateways/class-novalnet-prepayment.php:237 +#: includes/gateways/class-novalnet-przelewy24.php:217 +#: includes/gateways/class-novalnet-sepa.php:314 +msgid "The entered text will be displayed at the checkout page" +msgstr "Der eingegebene Text wird auf der Checkout-Seite angezeigt" + +#: includes/gateways/class-novalnet-cc.php:83 +msgid "Card holder name" +msgstr "Name des Karteninhabers" + +#: includes/gateways/class-novalnet-cc.php:84 +msgid "Name on card" +msgstr "Name auf der Kreditkarte" + +#: includes/gateways/class-novalnet-cc.php:85 +msgid "Card number" +msgstr "Kreditkartennummer" + +#: includes/gateways/class-novalnet-cc.php:86 +msgid "XXXX XXXX XXXX XXXX" +msgstr "XXXX XXXX XXXX XXXX" + +#: includes/gateways/class-novalnet-cc.php:87 +msgid "Expiry date" +msgstr "Ablaufdatum" + +#: includes/gateways/class-novalnet-cc.php:88 +msgid "CVC/CVV/CID" +msgstr "CVC/CVV/CID" + +#: includes/gateways/class-novalnet-cc.php:89 +msgid "XXX" +msgstr "XXX" + +#: includes/gateways/class-novalnet-cc.php:90 +#: includes/gateways/class-novalnet-cc.php:289 +msgid "Your credit card details are invalid" +msgstr "Ihre Kreditkartendaten sind ungültig" + +#: includes/gateways/class-novalnet-cc.php:145 +#: includes/gateways/class-novalnet-cc.php:166 +msgid "Credit/Debit Cards" +msgstr "Kredit- / Debitkarte" + +#: includes/gateways/class-novalnet-cc.php:178 +msgid "" +"Your credit/debit card will be charged immediately after the order is " +"completed" +msgstr "Ihre Karte wird nach Bestellabschluss sofort belastet" + +#: includes/gateways/class-novalnet-cc.php:319 +#: includes/gateways/class-novalnet-cc.php:322 +#: includes/gateways/class-novalnet-invoice.php:254 +#: includes/gateways/class-novalnet-invoice.php:257 +#: includes/gateways/class-novalnet-paypal.php:207 +#: includes/gateways/class-novalnet-paypal.php:210 +#: includes/gateways/class-novalnet-sepa.php:280 +#: includes/gateways/class-novalnet-sepa.php:283 +msgid "Payment action" +msgstr "Bearbeitungsmaßnahme" + +#: includes/gateways/class-novalnet-cc.php:323 +#: includes/gateways/class-novalnet-invoice.php:258 +#: includes/gateways/class-novalnet-paypal.php:211 +#: includes/gateways/class-novalnet-sepa.php:284 +msgid "" +"Choose whether or not the payment should be charged immediately. Capture " +"completes the transaction by transferring the funds from buyer account to " +"merchant account. Authorize verifies payment details and reserves funds to " +"capture it later, giving time for the merchant to decide on the order." +msgstr "" +"Wählen Sie, ob die Zahlung sofort belastet werden soll oder nicht. Zahlung " +"einziehen: Betrag sofort belasten. Zahlung autorisieren: Die Zahlung wird " +"überprüft und autorisiert, aber erst zu einem späteren Zeitpunkt belastet. " +"So haben Sie Zeit, über die Bestellung zu entscheiden." + +#: includes/gateways/class-novalnet-cc.php:325 +#: includes/gateways/class-novalnet-invoice.php:260 +#: includes/gateways/class-novalnet-paypal.php:213 +#: includes/gateways/class-novalnet-sepa.php:286 +msgid "Capture" +msgstr "Zahlung einziehen" + +#: includes/gateways/class-novalnet-cc.php:326 +#: includes/gateways/class-novalnet-invoice.php:261 +#: includes/gateways/class-novalnet-paypal.php:214 +#: includes/gateways/class-novalnet-sepa.php:287 +msgid "Authorize" +msgstr "Zahlung autorisieren" + +#: includes/gateways/class-novalnet-cc.php:332 +#: includes/gateways/class-novalnet-cc.php:336 +#: includes/gateways/class-novalnet-invoice.php:267 +#: includes/gateways/class-novalnet-invoice.php:271 +#: includes/gateways/class-novalnet-paypal.php:220 +#: includes/gateways/class-novalnet-paypal.php:224 +#: includes/gateways/class-novalnet-sepa.php:293 +#: includes/gateways/class-novalnet-sepa.php:297 +msgid "Minimum transaction limit for authorization" +msgstr "Mindesttransaktionsbetrag für die Autorisierung" + +#: includes/gateways/class-novalnet-cc.php:335 +#: includes/gateways/class-novalnet-invoice.php:270 +#: includes/gateways/class-novalnet-paypal.php:223 +#: includes/gateways/class-novalnet-sepa.php:296 +#: includes/gateways/class-novalnet-sepa.php:360 +msgid "

(in minimum unit of currency. E.g. enter 100 which is equal to 1.00)" +msgstr "" +"(in der kleinsten Währungseinheit, z.B. 100 Cent = entsprechen 1.00 EUR)" + +#: includes/gateways/class-novalnet-cc.php:337 +#: includes/gateways/class-novalnet-paypal.php:225 +#: includes/gateways/class-novalnet-sepa.php:298 +msgid "" +"In case the order amount exceeds the mentioned limit, the transaction will " +"be set on-hold till your confirmation of the transaction. You can leave the " +"field empty if you wish to process all the transactions as on-hold." +msgstr "" +"Übersteigt der Bestellbetrag das genannte Limit, wird die Transaktion, bis " +"zu ihrer Bestätigung durch Sie, auf on hold gesetzt. Sie können das Feld " +"leer lassen, wenn Sie möchten, dass alle Transaktionen als on hold behandelt " +"werden." + +#: includes/gateways/class-novalnet-cc.php:341 +#: includes/gateways/class-novalnet-cc.php:343 +msgid "Enforce 3D secure payment outside EU" +msgstr "3D-Secure-Zahlungen außerhalb der EU erzwingen" + +#: includes/gateways/class-novalnet-cc.php:344 +msgid "" +"By enabling this option, all payments from cards issued outside the EU will " +"be authenticated via 3DS 2.0 SCA" +msgstr "" +"Wenn Sie diese Option aktivieren, werden alle Zahlungen mit Karten, die " +"außerhalb der EU ausgegeben wurden, mit der starken Kundenauthentifizierung " +"(Strong Customer Authentication, SCA) von 3D-Secure 2.0 authentifiziert" + +#: includes/gateways/class-novalnet-cc.php:368 +msgid "Custom CSS settings" +msgstr "Angepasste CSS-Einstellungen" + +#: includes/gateways/class-novalnet-cc.php:373 +msgid "CSS settings for iframe form" +msgstr "CSS-Einstellungen für den iFrameformular" + +#: includes/gateways/class-novalnet-cc.php:379 +msgid "Label" +msgstr "Beschriftung" + +#: includes/gateways/class-novalnet-cc.php:380 +#: includes/gateways/class-novalnet-cc.php:388 +msgid "E.g: color:#999999; background-color:#FFFFFF;" +msgstr "z.B: color:#999999; background-color:#FFFFFF;" + +#: includes/gateways/class-novalnet-cc.php:387 +msgid "Input" +msgstr "Eingabe" + +#: includes/gateways/class-novalnet-cc.php:395 +msgid "CSS Text" +msgstr "Text für das CSS" + +#: includes/gateways/class-novalnet-cc.php:396 +msgid "E.g: #idselector{color:#999999;}.classSelector{color:#000000}" +msgstr "z.B: #idselector{color:#999999;}.classSelector{color:#000000}" + +#: includes/gateways/class-novalnet-eps.php:66 +#: includes/gateways/class-novalnet-eps.php:81 +#: includes/gateways/class-novalnet-eps.php:179 +msgid "Novalnet eps" +msgstr "Novalnet eps" + +#: includes/gateways/class-novalnet-eps.php:82 +#: includes/gateways/class-novalnet-eps.php:101 +msgid "eps" +msgstr "eps" + +#: includes/gateways/class-novalnet-eps.php:113 +msgid "" +"You will be redirected to eps. Please don’t close or refresh the browser " +"until the payment is completed" +msgstr "" +"Sie werden zu eps weitergeleitet. Um eine erfolgreiche Zahlung zu " +"gewährleisten, darf die Seite nicht geschlossen oder neu geladen werden, bis " +"die Bezahlung abgeschlossen ist" + +#: includes/gateways/class-novalnet-giropay.php:67 +#: includes/gateways/class-novalnet-giropay.php:83 +#: includes/gateways/class-novalnet-giropay.php:179 +msgid "Novalnet giropay" +msgstr "Novalnet giropay" + +#: includes/gateways/class-novalnet-giropay.php:84 +#: includes/gateways/class-novalnet-giropay.php:102 +msgid "giropay" +msgstr "giropay" + +#: includes/gateways/class-novalnet-giropay.php:114 +msgid "" +"You will be redirected to giropay. Please don’t close or refresh the browser " +"until the payment is completed" +msgstr "" +"Sie werden zu giropay weitergeleitet. Um eine erfolgreiche Zahlung zu " +"gewährleisten, darf die Seite nicht geschlossen oder neu geladen werden, bis " +"die Bezahlung abgeschlossen ist" + +#: includes/gateways/class-novalnet-ideal.php:67 +#: includes/gateways/class-novalnet-ideal.php:82 +#: includes/gateways/class-novalnet-ideal.php:179 +msgid "Novalnet iDEAL" +msgstr "Novalnet iDEAL" + +#: includes/gateways/class-novalnet-ideal.php:83 +#: includes/gateways/class-novalnet-ideal.php:100 +msgid "iDEAL" +msgstr "iDEAL" + +#: includes/gateways/class-novalnet-ideal.php:112 +msgid "" +"You will be redirected to iDEAL. Please don’t close or refresh the browser " +"until the payment is completed" +msgstr "" +"Sie werden zu iDEAL weitergeleitet. Um eine erfolgreiche Zahlung zu " +"gewährleisten, darf die Seite nicht geschlossen oder neu geladen werden, bis " +"die Bezahlung abgeschlossen ist" + +#: includes/gateways/class-novalnet-instantbank.php:67 +#: includes/gateways/class-novalnet-instantbank.php:82 +#: includes/gateways/class-novalnet-instantbank.php:178 +msgid "Novalnet Sofort" +msgstr "Novalnet Sofortüberweisung" + +#: includes/gateways/class-novalnet-instantbank.php:83 +#: includes/gateways/class-novalnet-instantbank.php:100 +msgid "Sofort" +msgstr "Sofortüberweisung" + +#: includes/gateways/class-novalnet-instantbank.php:112 +msgid "" +"You will be redirected to Sofort. Please don’t close or refresh the browser " +"until the payment is completed" +msgstr "" +"Sie werden zu Sofortüberweisung weitergeleitet. Um eine erfolgreiche Zahlung " +"zu gewährleisten, darf die Seite nicht geschlossen oder neu geladen werden, " +"bis die Bezahlung abgeschlossen ist" + +#: includes/gateways/class-novalnet-invoice.php:98 +#: includes/gateways/class-novalnet-invoice.php:121 +msgid "Invoice" +msgstr "Kauf auf Rechnung" + +#: includes/gateways/class-novalnet-invoice.php:156 +#: includes/gateways/class-novalnet-sepa.php:216 +#, php-format +msgid "" +"The payment cannot be processed, because the basic requirements for the " +"payment guarantee are not met ( %s ) " +msgstr "" +"Die Zahlung kann nicht ausgeführt werden, weil die Voraussetzungen für die " +"Zahlungsgarantie nicht erfüllt sind ( %s ) " + +#: includes/gateways/class-novalnet-invoice.php:245 +#: includes/gateways/class-novalnet-invoice.php:249 +#: includes/gateways/class-novalnet-prepayment.php:206 +#: includes/gateways/class-novalnet-prepayment.php:211 +#: includes/gateways/class-novalnet-sepa.php:269 +#: includes/gateways/class-novalnet-sepa.php:275 +msgid "Payment due date (in days)" +msgstr "Fälligkeitsdatum (in Tagen)" + +#: includes/gateways/class-novalnet-invoice.php:250 +#: includes/gateways/class-novalnet-prepayment.php:212 +msgid "" +"Number of days given to the buyer to transfer the amount to Novalnet (must " +"be greater than 7 days). If this field is left blank, 14 days will be set as " +"due date by default. " +msgstr "" +"Anzahl der Tage, die der Käufer Zeit hat, um den Betrag an Novalnet zu " +"überweisen (muss mehr als 7 Tage betragen). Wenn Sie dieses Feld leer " +"lassen, werden standardmäßig 14 Tage als Fälligkeitsdatum festgelegt. " + +#: includes/gateways/class-novalnet-invoice.php:272 +msgid "" +"When the order amount exceeds the mentioned limit, the transaction will be " +"set on-hold till you confirm it. You can leave the field empty if you wish " +"to process all transactions as on-hold transactions. " +msgstr "" +"Übersteigt der Bestellbetrag das genannte Limit, wird die Transaktion, bis " +"zu ihrer Bestätigung durch Sie, auf on hold gesetzt. Sie können das Feld " +"leer lassen, wenn Sie möchten, dass alle Transaktionen als on hold behandelt " +"werden. " + +#: includes/gateways/class-novalnet-invoice.php:303 +#: includes/gateways/class-novalnet-sepa.php:318 +msgid "Payment guarantee configuration" +msgstr "Einstellungen für die Zahlungsgarantie" + +#: includes/gateways/class-novalnet-invoice.php:317 +#: includes/gateways/class-novalnet-sepa.php:332 +msgid "Payment guarantee requirements: " +msgstr "Voraussetzungen für die Zahlungsgarantie: " + +#: includes/gateways/class-novalnet-invoice.php:318 +#: includes/gateways/class-novalnet-sepa.php:333 +msgid "Allowed countries: DE, AT, CH" +msgstr "Zugelassene Staaten: DE, AT, CH" + +#: includes/gateways/class-novalnet-invoice.php:319 +#: includes/gateways/class-novalnet-sepa.php:334 +msgid "Allowed currency: EUR" +msgstr "Zugelassene Währung: EUR" + +#: includes/gateways/class-novalnet-invoice.php:320 +#: includes/gateways/class-novalnet-sepa.php:335 +msgid "Minimum order amount: 9,99 EUR or more" +msgstr "Mindestbetrag der Bestellung: 9,99 EUR" + +#: includes/gateways/class-novalnet-invoice.php:321 +#: includes/gateways/class-novalnet-sepa.php:336 +msgid "Age limit: 18 years or more" +msgstr "Mindestalter: 18 Jahre" + +#: includes/gateways/class-novalnet-invoice.php:322 +#: includes/gateways/class-novalnet-sepa.php:337 +msgid "The billing address must be the same as the shipping address" +msgstr "Rechnungsadresse und Lieferadresse müssen übereinstimmen" + +#: includes/gateways/class-novalnet-invoice.php:328 +#: includes/gateways/class-novalnet-sepa.php:344 +msgid "Enable payment guarantee" +msgstr "Zahlungsgarantie aktivieren" + +#: includes/gateways/class-novalnet-invoice.php:333 +#: includes/gateways/class-novalnet-invoice.php:337 +#: includes/gateways/class-novalnet-paypal.php:229 +#: includes/gateways/class-novalnet-paypal.php:233 +#: includes/gateways/class-novalnet-przelewy24.php:196 +#: includes/gateways/class-novalnet-przelewy24.php:200 +#: includes/gateways/class-novalnet-sepa.php:349 +#: includes/gateways/class-novalnet-sepa.php:353 +msgid "Payment status for the pending payment" +msgstr "Status für offene Zahlungen" + +#: includes/gateways/class-novalnet-invoice.php:338 +#: includes/gateways/class-novalnet-paypal.php:234 +#: includes/gateways/class-novalnet-przelewy24.php:201 +#: includes/gateways/class-novalnet-sepa.php:354 +msgid "Status to be used for pending transactions." +msgstr "Status, der verwendet wird, wenn die Zahlung noch offen ist." + +#: includes/gateways/class-novalnet-invoice.php:342 +#: includes/gateways/class-novalnet-invoice.php:345 +#: includes/gateways/class-novalnet-sepa.php:358 +#: includes/gateways/class-novalnet-sepa.php:362 +msgid "Minimum order amount for payment guarantee" +msgstr "Mindestbestellbetrag für Zahlungsgarantie" + +#: includes/gateways/class-novalnet-invoice.php:346 +#: includes/gateways/class-novalnet-sepa.php:363 +msgid "" +"Enter the minimum amount (in cents) for the transaction to be processed with " +"payment guarantee. For example, enter 100 which is equal to 1,00. By " +"default, the amount will be 9,99 EUR." +msgstr "" +"Geben Sie den Mindestbetrag (in Cent) für die zu bearbeitende Transaktion " +"mit Zahlungsgarantie ein. Geben Sie z.B. 100 ein, was 1,00 entspricht. Der " +"Standbetrag ist 9,99 EUR." + +#: includes/gateways/class-novalnet-invoice.php:350 +#: includes/gateways/class-novalnet-invoice.php:357 +#: includes/gateways/class-novalnet-sepa.php:367 +#: includes/gateways/class-novalnet-sepa.php:374 +msgid "Force Non-Guarantee payment" +msgstr "Zahlung ohne Zahlungsgarantie erzwingen" + +#: includes/gateways/class-novalnet-invoice.php:358 +#: includes/gateways/class-novalnet-sepa.php:375 +msgid "" +"Even if payment guarantee is enabled, payments will still be processed as " +"non-guarantee payments if the payment guarantee requirements are not met. " +"Review the requirements under 'Enable Payment Guarantee' in the Installation " +"Guide. " +msgstr "" +"Falls die Zahlungsgarantie zwar aktiviert ist, jedoch die Voraussetzungen " +"für Zahlungsgarantie nicht erfüllt sind, wird die Zahlung ohne " +"Zahlungsgarantie verarbeitet. Die Voraussetzungen finden Sie in der " +"Installationsanleitung unter \"Zahlungsgarantie aktivieren\". " + +#: includes/gateways/class-novalnet-paypal.php:84 +#: includes/gateways/class-novalnet-paypal.php:102 +msgid "PayPal" +msgstr "PayPal" + +#: includes/gateways/class-novalnet-paypal.php:114 +msgid "" +"You will be redirected to PayPal. Please don’t close or refresh the browser " +"until the payment is completed" +msgstr "" +"Sie werden zu PayPal weitergeleitet. Um eine erfolgreiche Zahlung zu " +"gewährleisten, darf die Seite nicht geschlossen oder neu geladen werden, bis " +"die Bezahlung abgeschlossen ist" + +#: includes/gateways/class-novalnet-paypal.php:194 +#, php-format +msgid "" +"To accept PayPal transactions, configure your PayPal API info in the Novalnet Admin Portal: > PROJECT > Choose your project > Payment Methods > PaypalConfigure." +msgstr "" +"Um PayPal-Transaktionen zu akzeptieren, konfigurieren Sie Ihre PayPal-API-" +"Informationen im Novalnet Admin-Portal: " +"PROJEKT > Wählen Sie Ihr Projekt > " +"Projektübersicht > Zahlungsmethoden > " +"PayPal > Konfigurieren." + +#: includes/gateways/class-novalnet-prepayment.php:82 +#: includes/gateways/class-novalnet-prepayment.php:100 +msgid "Prepayment" +msgstr "Vorkasse" + +#: includes/gateways/class-novalnet-prepayment.php:112 +#: templates/invoice-template.php:32 +msgid "" +"You will receive an e-mail with the Novalnet account details to complete the " +"payment." +msgstr "" +"Sie erhalten eine E-Mail mit den Bankdaten von Novalnet, um die Zahlung " +"abzuschließen." + +#: includes/gateways/class-novalnet-przelewy24.php:67 +#: includes/gateways/class-novalnet-przelewy24.php:83 +#: includes/gateways/class-novalnet-przelewy24.php:183 +msgid "Novalnet Przelewy24" +msgstr "Novalnet Przelewy24" + +#: includes/gateways/class-novalnet-przelewy24.php:84 +#: includes/gateways/class-novalnet-przelewy24.php:102 +msgid "Przelewy24" +msgstr "Przelewy24" + +#: includes/gateways/class-novalnet-przelewy24.php:114 +msgid "" +"You will be redirected to Przelewy24. Please don’t close or refresh the " +"browser until the payment is completed" +msgstr "" +"Sie werden zu Przelewy24 weitergeleitet. Um eine erfolgreiche Zahlung zu " +"gewährleisten, darf die Seite nicht geschlossen oder neu geladen werden, bis " +"die Bezahlung abgeschlossen ist" + +#: includes/gateways/class-novalnet-sepa.php:102 +#: includes/gateways/class-novalnet-sepa.php:126 +msgid "Direct Debit SEPA" +msgstr "Lastschrift SEPA" + +#: includes/gateways/class-novalnet-sepa.php:276 +msgid "" +"Number of days after which the payment is debited (must be between 2 and 14 " +"days)." +msgstr "" +"Geben Sie die Anzahl der Tage ein, nach denen der Zahlungsbetrag eingezogen " +"werden soll (muss zwischen 2 und 14 Tagen liegen)." + +#: includes/novalnet-functions.php:135 +msgid "Configuration" +msgstr "Konfiguration" + +#: includes/novalnet-functions.php:196 +msgid "Payment was not successful. An error occurred." +msgstr "Die Zahlung war nicht erfolgreich. Ein Fehler trat auf." + +#: includes/novalnet-functions.php:213 +msgid "Pay now with Barzahlen/viacash" +msgstr "Bezahlen mit Barzahlen/viacash" + +#: includes/novalnet-functions.php:365 +msgid "The amount is invalid" +msgstr "Ungültiger Betrag" + +#: includes/novalnet-functions.php:376 +msgid "Multiple subscription can not be purchased at the same time " +msgstr "Mehrere Abonnementzahlungen können nicht gleichzeitig bezahlt werden " + +#: includes/novalnet-functions.php:586 +msgid "Customer name/email fields are not valid" +msgstr "Ungültige Werte für die Felder Kundenname-/email" + +#: includes/novalnet-functions.php:639 +msgid "You are now redirected automatically" +msgstr "Sie werden jetzt automatisch umgeleitet" + +#: includes/novalnet-functions.php:639 +msgid "Please wait..." +msgstr "Warten Sie bitte …" + +#: includes/novalnet-functions.php:733 +#, php-format +msgid "" +"Successfully updated the payment and customer billing details for upcoming " +"subscriptions on date: %s" +msgstr "" +"Die Zahlungs- und Rechnungsdaten für zukünftige Abonnement-Abbuchungen " +"wurden erfolgreich aktualisiert: %s" + +#: includes/novalnet-functions.php:930 includes/novalnet-functions.php:987 +msgid "While redirecting some data has been changed. The hash check failed" +msgstr "" +"Während der Umleitung wurden einige Daten geändert. Die Überprüfung des " +"Hashes schlug fehl" + +#: includes/novalnet-functions.php:939 +#, php-format +msgid "Recurring change payment method has been failed due to %s" +msgstr "Abonnement Annullierung wurde aufgrund nicht bestanden: %s" + +#: includes/novalnet-functions.php:1019 +msgid "Product is costly" +msgstr "Angebot zu teuer" + +#: includes/novalnet-functions.php:1020 +msgid "Cheating" +msgstr "Betrug" + +#: includes/novalnet-functions.php:1021 +msgid "Partner interfered" +msgstr "(Ehe-)Partner hat Einspruch eingelegt" + +#: includes/novalnet-functions.php:1022 +msgid "Financial problem" +msgstr "Finanzielle Schwierigkeiten" + +#: includes/novalnet-functions.php:1023 +msgid "Content does not match my likes" +msgstr "Inhalt entsprach nicht meinen Vorstellungen" + +#: includes/novalnet-functions.php:1024 +msgid "Content is not enough" +msgstr "Inhalte nicht ausreichend" + +#: includes/novalnet-functions.php:1025 +msgid "Interested only for a trial" +msgstr "Nur an Probezugang interessiert" + +#: includes/novalnet-functions.php:1026 +msgid "Page is very slow" +msgstr "Seite zu langsam" + +#: includes/novalnet-functions.php:1027 +msgid "Satisfied customer" +msgstr "Zufriedener Kunde" + +#: includes/novalnet-functions.php:1028 +msgid "Logging in problems" +msgstr "Zugangsprobleme" + +#: includes/novalnet-functions.php:1444 +msgid "" +"Your order is being verified. Once confirmed, we will send you our bank " +"details to which the order amount should be transferred. Please note that " +"this may take up to 24 hours." +msgstr "" +"Ihre Bestellung wird überprüft. Nach der Bestätigung senden wir Ihnen unsere " +"Bankverbindung, an die Sie bitte den Gesamtbetrag der Bestellung überweisen. " +"Bitte beachten Sie, dass dies bis zu 24 Stunden dauern kann." + +#: includes/novalnet-functions.php:1446 +msgid "Please transfer the amount to the below mentioned account." +msgstr "Bitte überweisen Sie den Betrag auf das unten stehende Konto." + +#: includes/novalnet-functions.php:1449 +msgid "Due date: " +msgstr "Fälligkeitsdatum: " + +#: includes/novalnet-functions.php:1451 +msgid "Account holder: " +msgstr "Kontoinhaber: " + +#: includes/novalnet-functions.php:1459 +msgid "Amount: " +msgstr "Betrag: " + +#: includes/novalnet-functions.php:1462 +msgid "" +"Please use the following payment reference for your money transfer, as only " +"through this way your payment is matched and assigned to the order:" +msgstr "" +"Bitte verwenden Sie nur den unten angegebenen Verwendungszweck für die " +"Überweisung, da nur so Ihr Geldeingang zugeordnet werden kann:" + +#: includes/novalnet-functions.php:1470 +#, php-format +msgid "Payment Reference %s: " +msgstr "Verwendungszweck %s: " + +#: includes/novalnet-functions.php:1492 +msgid "Slip expiry date" +msgstr "Verfallsdatum des Zahlscheins" + +#: includes/novalnet-functions.php:1495 +msgid "Store(s) near you" +msgstr "Barzahlen-Partnerfiliale in Ihrer Nähe" + +#: includes/novalnet-functions.php:1681 +msgid "This is processed as a guarantee payment" +msgstr "Diese Transaktion wird mit Zahlungsgarantie verarbeitet" + +#: includes/novalnet-functions.php:1683 +#, php-format +msgid "Novalnet transaction ID: %s" +msgstr "Novalnet Transaktions-ID: %s" + +#: includes/novalnet-functions.php:1684 +msgid "Test order" +msgstr "Testbestellung" + +#: includes/novalnet-functions.php:1686 +msgid "" +"Your order is under verification and we will soon update you with the order " +"status. Please note that this may take upto 24 hours." +msgstr "" +"Ihre Bestellung wird derzeit überprüft. Wir werden Sie in Kürze über den " +"Bestellstatus informieren. Bitte beachten Sie, dass dies bis zu 24 Stunden " +"dauern kann." + +#: includes/novalnet-functions.php:1733 +msgid "Only Germany, Austria or Switzerland are allowed" +msgstr "Als Land ist nur Deutschland, Österreich oder Schweiz erlaubt" + +#: includes/novalnet-functions.php:1736 +msgid "Only EUR currency allowed" +msgstr "Als Währung ist nur EUR erlaubt" + +#: includes/novalnet-functions.php:1740 +#, php-format +msgid "Minimum order amount must be %s" +msgstr "Der Mindestbestellwert beträgt %s" + +#: includes/novalnet-functions.php:1773 +msgid "Please enter your date of birth" +msgstr "Geben Sie bitte Ihr Geburtsdatum ein" + +#: includes/novalnet-functions.php:1775 +msgid "The date format is invalid" +msgstr "Ungültiges Datumsformat" + +#: includes/novalnet-functions.php:1777 +msgid "You need to be at least 18 years old" +msgstr "Sie müssen mindestens 18 Jahre alt sein" + +#: templates/invoice-template.php:67 templates/sepa-template.php:67 +#, php-format +msgid "" +"The payment cannot be processed, because the basic requirements for the " +"payment guarantee are not met
%s " +msgstr "" +"Die Zahlung kann nicht ausgeführt werden, weil die Voraussetzungen für die " +"Zahlungsgarantie nicht erfüllt sind
%s " + +#: templates/invoice-template.php:79 templates/sepa-template.php:82 +msgid "Please enable the Javascript in your browser to load the payment form" +msgstr "" +"Aktivieren Sie bitte JavaScript in Ihrem Browser, um die Zahlung fortzusetzen" + +#: templates/invoice-template.php:87 templates/sepa-template.php:106 +msgid "Your date of birth" +msgstr "Ihr Geburtsdatum" + +#: templates/invoice-template.php:91 templates/sepa-template.php:110 +msgid "DD" +msgstr "TT" + +#: templates/invoice-template.php:92 templates/sepa-template.php:111 +msgid "MM" +msgstr "MM" + +#: templates/invoice-template.php:93 templates/sepa-template.php:112 +msgid "YYYY" +msgstr "JJJJ" + +#: templates/sepa-template.php:32 +msgid "The amount will be debited from your account by Novalnet" +msgstr "Der Betrag wird durch Novalnet von Ihrem Konto abgebucht" + +#: templates/sepa-template.php:89 templates/sepa-template.php:92 +msgid "Account holder" +msgstr "Kontoinhaber" + +#: templates/sepa-template.php:96 +msgid "IBAN " +msgstr "IBAN " + +#: templates/sepa-template.php:99 +msgid "IBAN" +msgstr "IBAN" + +#: templates/sepa-template.php:120 +msgid "" +"I hereby grant the mandate for the SEPA direct debit (electronic " +"transmission) and confirm that the given bank details are correct!" +msgstr "" +"Ich erteile hiermit das SEPA-Lastschriftmandat (elektronische Übermittlung) " +"und bestätige, dass die Bankverbindung korrekt ist!" + +#: templates/sepa-template.php:123 +msgid "" +"I authorise (A) Novalnet AG to send instructions to my bank to debit my " +"account and (B) my bank to debit my account in accordance with the " +"instructions from Novalnet AG." +msgstr "" +"Ich ermächtige den Zahlungsempfänger, Zahlungen von meinem Konto mittels " +"Lastschrift einzuziehen. Zugleich weise ich mein Kreditinstitut an, die von " +"dem Zahlungsempfänger auf mein Konto gezogenen Lastschriften einzulösen." + +#: templates/sepa-template.php:126 +msgid "Creditor identifier: " +msgstr "Gläubiger-Identifikationsnummer: " + +#: templates/sepa-template.php:128 +msgid "Note: " +msgstr "Hinweis: " + +#: templates/sepa-template.php:128 +msgid "" +"You are entitled to a refund from your bank under the terms and conditions " +"of your agreement with bank. A refund must be claimed within 8 weeks " +"starting from the date on which your account was debited." +msgstr "" +"Ich kann innerhalb von acht Wochen, beginnend mit dem Belastungsdatum, die " +"Erstattung des belasteten Betrages verlangen. Es gelten dabei die mit meinem " +"Kreditinstitut vereinbarten Bedingungen." + +#~ msgid "Novalnet payment plugin - Easy Digital Downloads" +#~ msgstr "Novalnet-Zahlungsplugin - Easy Digital Downloads" + +#~ msgid "" +#~ "PCI compliant payment solution, covering a full scope of payment services " +#~ "and seamless integration for easy adaptability" +#~ msgstr "" +#~ "PCI-konforme Zahlungsabwicklung mit einer Vielzahl an Payment-Services " +#~ "und nahtloser Integration für eine einfache Anbindung" + +#~ msgid "" +#~ "Novalnet Callback Script executed successfully for the TID: %1$s with " +#~ "amount %2$s on %3$s." +#~ msgstr "" +#~ "Novalnet-Callback-Skript erfolgreich ausgeführt für die TID: %s mit dem " +#~ "Betrag am %s um %s Uhr." + +#~ msgid "" +#~ "Plug-in to process payments in Easy Digital Downloads through Novalnet " +#~ "Gateway" +#~ msgstr "" +#~ "Plugin um Zahlungen in Easy Digital Downloads über die Novalnet-" +#~ "Schnittstelle abzuwickeln" + +#~ msgid "" +#~ "Novalnet callback script received. Subscription has been stopped for the " +#~ "TID: %1$s on %2$s. Subscription has been canceled due to: %3$s" +#~ msgstr "" +#~ "Nachricht vom Novalnet-Callback-Skript erhalten: Das Abonnement wurde für " +#~ "die TID: %s am %s eingestellt. Das Abonnement wurde gekündigt wegen: %s" + +#~ msgid "" +#~ "Novalnet Callback Script executed successfully for the TID: %1$s with " +#~ "amount %2$s on %3$s. Please refer PAID transaction in our Novalnet Admin " +#~ "Portal with the TID: %4$s. %5$sPlease verify received amount and TID " +#~ "details, and update the order status accordingly. " +#~ msgstr "" +#~ "Novalnet-Callback-Skript erfolgreich ausgeführt für die TID: %1$s mit dem " +#~ "Betrag %2$s am , um %3$s Uhr. Bitte suchen Sie nach der bezahlten " +#~ "Transaktion in unserer Novalnet-Händleradministration mit der TID: %4$s. " +#~ "%5$s Please verify received amount and TID details, and update the order " +#~ "status accordingly. " + +#~ msgid "The amount will be debited from your credit/debit card" +#~ msgstr "Der Betrag wird Ihrer Kredit-/Debitkarte belastet" diff --git a/languages/edd-novalnet.mo b/languages/edd-novalnet.mo new file mode 100755 index 0000000000000000000000000000000000000000..236541841fa77a245b2f038b6a1118b9d3dd5cb7 GIT binary patch literal 29426 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\n" +"Language-Team: Novalnet \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.6\n" +"X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-SearchPath-0: .\n" + +#: class-novalnet.php:143 +msgid "Easy Digital Downloads Payment Gateway by Novalnetadd-on requires Easy Digital Downloads plugin. Please install and activate it." +msgstr "" + +#: class-novalnet.php:143 +msgid "Easy Digital Downloads Payment Gateway by Novalnetrequires PHP CURL. You need to activate the CURL function on your server. Please contact your hosting provider." +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:74 +#: includes/class-novalnet-subscriptions.php:287 +msgid "--Select--" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:99 +msgid "Novalnet Global Configuration" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:141 +msgid "Novalnet API Configuration" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:141 +#, php-format +msgid "Please read the Installation Guide before you start and login to the Novalnet Admin Portal using your merchant account. To get a merchant account, mail to sales@novalnet.de or call +49 (089) 923068320." +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:142 +#: includes/gateways/class-novalnet-cashpayment.php:183 +#: includes/gateways/class-novalnet-cc.php:307 +#: includes/gateways/class-novalnet-eps.php:180 +#: includes/gateways/class-novalnet-giropay.php:180 +#: includes/gateways/class-novalnet-ideal.php:180 +#: includes/gateways/class-novalnet-instantbank.php:179 +#: includes/gateways/class-novalnet-invoice.php:233 +#: includes/gateways/class-novalnet-paypal.php:195 +#: includes/gateways/class-novalnet-prepayment.php:194 +#: includes/gateways/class-novalnet-przelewy24.php:184 +#: includes/gateways/class-novalnet-sepa.php:257 +msgid "Configure the gateway settings" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:147 +#: includes/admin/class-novalnet-global-config.php:151 +msgid "Product activation key" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:152 +msgid "Your product activation key is a unique token for merchant authentication and payment processing." +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:154 +#, php-format +msgid "Get your Product activation key from the Novalnet Admin Portal: PROJECT > Choose your project > Shop Parameters > API Signature (Product activation key)" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:158 +msgid "Merchant ID " +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:164 +msgid "Authentication code" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:170 +msgid "Project ID" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:176 +#: includes/admin/class-novalnet-global-config.php:177 +msgid "Select Tariff ID" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:178 +msgid "Select a Tariff ID to match the preferred tariff plan you created at the Novalnet Admin Portal for this project." +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:184 +msgid "Payment access key" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:190 +msgid "Client Key" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:196 +#: includes/admin/class-novalnet-global-config.php:197 +msgid "Display payment logo" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:198 +msgid "The payment method logo(s) will be displayed on the checkout page. " +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:201 +#: includes/admin/class-novalnet-global-config.php:239 +#: includes/admin/class-novalnet-global-config.php:282 +#: includes/admin/class-novalnet-global-config.php:294 +#: includes/gateways/class-novalnet-cc.php:347 +#: includes/gateways/class-novalnet-invoice.php:353 +#: includes/gateways/class-novalnet-sepa.php:370 +msgid "No" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:202 +#: includes/admin/class-novalnet-global-config.php:240 +#: includes/admin/class-novalnet-global-config.php:283 +#: includes/admin/class-novalnet-global-config.php:295 +#: includes/gateways/class-novalnet-cc.php:346 +#: includes/gateways/class-novalnet-invoice.php:354 +#: includes/gateways/class-novalnet-sepa.php:371 +msgid "Yes" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:208 +msgid "Order status management for on-hold transactions" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:213 +#: includes/admin/class-novalnet-global-config.php:217 +msgid "On-hold order status" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:218 +msgid "Status to be used for on-hold orders until the transaction is confirmed or canceled." +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:222 +#: includes/admin/class-novalnet-global-config.php:226 +msgid "Canceled order status" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:227 +msgid "Status to be used when order is canceled or fully refunded." +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:231 +msgid "Dynamic subscription management" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:236 +msgid "Enable subscriptions" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:245 +msgid "Subscription payments" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:253 +#: includes/gateways/class-novalnet-cc.php:128 +#: includes/gateways/class-novalnet-cc.php:144 +#: includes/gateways/class-novalnet-cc.php:306 +msgid "Novalnet Credit/Debit Cards" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:254 +#: includes/gateways/class-novalnet-sepa.php:85 +#: includes/gateways/class-novalnet-sepa.php:101 +#: includes/gateways/class-novalnet-sepa.php:256 +msgid "Novalnet Direct Debit SEPA" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:255 +#: includes/gateways/class-novalnet-invoice.php:81 +#: includes/gateways/class-novalnet-invoice.php:97 +#: includes/gateways/class-novalnet-invoice.php:232 +msgid "Novalnet Invoice" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:256 +#: includes/gateways/class-novalnet-prepayment.php:65 +#: includes/gateways/class-novalnet-prepayment.php:81 +#: includes/gateways/class-novalnet-prepayment.php:193 +msgid "Novalnet Prepayment" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:257 +#: includes/gateways/class-novalnet-paypal.php:67 +#: includes/gateways/class-novalnet-paypal.php:83 +#: includes/gateways/class-novalnet-paypal.php:194 +msgid "Novalnet PayPal" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:264 +#: includes/admin/class-novalnet-global-config.php:265 +msgid "Subscription Tariff ID" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:266 +msgid "Select the preferred Novalnet subscription tariff ID available for your project. For more information, please refer the Installation Guide." +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:271 +msgid "Notification / Webhook URL Setup" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:277 +#: includes/admin/class-novalnet-global-config.php:278 +msgid "Allow manual testing of the Notification / Webhook URL" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:279 +msgid "Enable this to test the Novalnet Notification / Webhook URL manually. Disable this before setting your shop live to block unauthorized calls from external parties." +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:289 +#: includes/admin/class-novalnet-global-config.php:290 +msgid "Enable e-mail notification" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:291 +msgid "Enable this option to notify the given e-mail address when the Notification / Webhook URL is executed successfully." +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:301 +#: includes/admin/class-novalnet-global-config.php:302 +msgid "Send e-mail to" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:303 +msgid "Notification / Webhook URL execution messages will be sent to this e-mail." +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:309 +msgid "Notification / Webhook URL" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:319 +#, php-format +msgid "You must add the following webhook endpoint to your Novalnet Admin Portal . This will allow you to receive notifications about the transaction status." +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:349 +#, php-format +msgid "You need to configure your outgoing server IP address ( %s ) at Novalnet. Please configure it in Novalnet Admin Portal or contact technic@novalnet.de" +msgstr "" + +#: includes/admin/class-novalnet-global-config.php:355 +#: includes/novalnet-functions.php:321 includes/novalnet-functions.php:589 +msgid "Please fill in all the mandatory fields" +msgstr "" + +#: includes/api/class-novalnet-callback-api.php:309 +#: includes/api/class-novalnet-callback-api.php:702 +#, php-format +msgid "The transaction has been canceled on %1$s." +msgstr "" + +#: includes/api/class-novalnet-callback-api.php:587 +msgid "Next charging date: " +msgstr "" + +#: includes/api/class-novalnet-callback-api.php:590 +#, php-format +msgid "Subscription has been successfully renewed for the TID: %1$s with the amount %2$s on %3$s. The renewal TID is: %4$s" +msgstr "" + +#: includes/api/class-novalnet-callback-api.php:644 +#: includes/class-novalnet-subscriptions.php:267 +msgid "The subscription has been already stopped or cancelled" +msgstr "" + +#: includes/api/class-novalnet-callback-api.php:678 +#: includes/novalnet-functions.php:1029 +msgid "Other" +msgstr "" + +#: includes/api/class-novalnet-callback-api.php:707 +#, php-format +msgid "Subscription has been stopped for the TID: %1$s on %2$s." +msgstr "" + +#: includes/api/class-novalnet-callback-api.php:713 +#, php-format +msgid "Subscription has been canceled due to: %1$s" +msgstr "" + +#: includes/api/class-novalnet-callback-api.php:773 +#, php-format +msgid "Subscription has been reactivated for the TID: %1$s on %2$s." +msgstr "" + +#: includes/api/class-novalnet-callback-api.php:820 +#, php-format +msgid "The transaction has been confirmed on %1$s" +msgstr "" + +#: includes/api/class-novalnet-callback-api.php:825 +#, php-format +msgid "The transaction status has been changed from pending to on-hold for the TID: %1$s on %2$s." +msgstr "" + +#: includes/api/class-novalnet-callback-api.php:851 +#, php-format +msgid "Transaction updated successfully for the TID: %1$s on %2$s." +msgstr "" + +#: includes/api/class-novalnet-callback-api.php:878 +#, php-format +msgid "The transaction has been canceled due to: %s" +msgstr "" + +#: includes/api/class-novalnet-callback-api.php:913 +#, php-format +msgid "Refund has been initiated for the TID: %1$s with the amount %2$s. New TID: %3$s." +msgstr "" + +#: includes/api/class-novalnet-callback-api.php:916 +#, php-format +msgid "Chargeback executed for return debit of TID:%1$s with the amount %2$s on %3$s. The subsequent TID: %4$s." +msgstr "" + +#: includes/api/class-novalnet-callback-api.php:919 +#, php-format +msgid "Chargeback executed for reversal of TID: %1$s with the amount %2$s on %3$s. The subsequent TID: %4$s." +msgstr "" + +#: includes/api/class-novalnet-callback-api.php:922 +#, php-format +msgid "Chargeback executed successfully for the TID: %1$s amount: %2$s on %3$s. The subsequent TID: %4$s." +msgstr "" + +#: includes/api/class-novalnet-callback-api.php:946 +#: includes/api/class-novalnet-callback-api.php:949 +#: includes/api/class-novalnet-callback-api.php:974 +#, php-format +msgid "Credit has been successfully received for the TID: %1$s with amount %2$s on %3$s . Please refer PAID order details in our Novalnet Admin Portal for the TID: %4$s " +msgstr "" + +#: includes/class-novalnet-subscriptions.php:127 +msgid "Invalid subscription id" +msgstr "" + +#: includes/class-novalnet-subscriptions.php:178 +#: includes/gateways/class-novalnet-sepa.php:210 +msgid "Your account details are invalid" +msgstr "" + +#: includes/class-novalnet-subscriptions.php:266 +msgid "Please select the reason for subscription cancellation" +msgstr "" + +#: includes/class-novalnet-subscriptions.php:291 +msgid "Cancel" +msgstr "" + +#: includes/class-novalnet-subscriptions.php:340 +#, php-format +msgid "Subscription has been canceled due to: %s" +msgstr "" + +#: includes/gateways/class-novalnet-cashpayment.php:64 +#: includes/gateways/class-novalnet-cashpayment.php:79 +#: includes/gateways/class-novalnet-cashpayment.php:182 +msgid "Novalnet Barzahlen/viacash" +msgstr "" + +#: includes/gateways/class-novalnet-cashpayment.php:80 +msgid "Barzahlen/viacash " +msgstr "" + +#: includes/gateways/class-novalnet-cashpayment.php:98 +msgid "Barzahlen/viacash" +msgstr "" + +#: includes/gateways/class-novalnet-cashpayment.php:110 +msgid "On successful checkout, you will receive a payment slip/SMS to pay your online purchase at one of our retail partners (e.g. supermarket)." +msgstr "" + +#: includes/gateways/class-novalnet-cashpayment.php:128 +#: includes/gateways/class-novalnet-cashpayment.php:191 +#: includes/gateways/class-novalnet-cc.php:194 +#: includes/gateways/class-novalnet-cc.php:315 +#: includes/gateways/class-novalnet-eps.php:130 +#: includes/gateways/class-novalnet-eps.php:188 +#: includes/gateways/class-novalnet-giropay.php:131 +#: includes/gateways/class-novalnet-giropay.php:188 +#: includes/gateways/class-novalnet-ideal.php:130 +#: includes/gateways/class-novalnet-ideal.php:188 +#: includes/gateways/class-novalnet-instantbank.php:129 +#: includes/gateways/class-novalnet-instantbank.php:187 +#: includes/gateways/class-novalnet-invoice.php:241 +#: includes/gateways/class-novalnet-paypal.php:132 +#: includes/gateways/class-novalnet-paypal.php:203 +#: includes/gateways/class-novalnet-prepayment.php:130 +#: includes/gateways/class-novalnet-prepayment.php:202 +#: includes/gateways/class-novalnet-przelewy24.php:132 +#: includes/gateways/class-novalnet-przelewy24.php:192 +#: includes/gateways/class-novalnet-sepa.php:265 +#: templates/invoice-template.php:50 templates/sepa-template.php:50 +msgid "The payment will be processed in the test mode therefore amount for this transaction will not be charged" +msgstr "" + +#: includes/gateways/class-novalnet-cashpayment.php:188 +#: includes/gateways/class-novalnet-cashpayment.php:190 +#: includes/gateways/class-novalnet-cc.php:312 +#: includes/gateways/class-novalnet-cc.php:314 +#: includes/gateways/class-novalnet-eps.php:185 +#: includes/gateways/class-novalnet-eps.php:187 +#: includes/gateways/class-novalnet-giropay.php:185 +#: includes/gateways/class-novalnet-giropay.php:187 +#: includes/gateways/class-novalnet-ideal.php:185 +#: includes/gateways/class-novalnet-ideal.php:187 +#: includes/gateways/class-novalnet-instantbank.php:184 +#: includes/gateways/class-novalnet-instantbank.php:186 +#: includes/gateways/class-novalnet-invoice.php:238 +#: includes/gateways/class-novalnet-invoice.php:240 +#: includes/gateways/class-novalnet-paypal.php:200 +#: includes/gateways/class-novalnet-paypal.php:202 +#: includes/gateways/class-novalnet-prepayment.php:199 +#: includes/gateways/class-novalnet-prepayment.php:201 +#: includes/gateways/class-novalnet-przelewy24.php:189 +#: includes/gateways/class-novalnet-przelewy24.php:191 +#: includes/gateways/class-novalnet-sepa.php:262 +#: includes/gateways/class-novalnet-sepa.php:264 +msgid "Enable test mode" +msgstr "" + +#: includes/gateways/class-novalnet-cashpayment.php:195 +#: includes/gateways/class-novalnet-cashpayment.php:199 +msgid "Slip expiry date (in days)" +msgstr "" + +#: includes/gateways/class-novalnet-cashpayment.php:200 +msgid "Number of days given to the buyer to pay at a store. If this field is left blank, 14 days will be set as slip expiry date by default. " +msgstr "" + +#: includes/gateways/class-novalnet-cashpayment.php:204 +#: includes/gateways/class-novalnet-cashpayment.php:208 +#: includes/gateways/class-novalnet-cc.php:353 +#: includes/gateways/class-novalnet-cc.php:357 +#: includes/gateways/class-novalnet-eps.php:192 +#: includes/gateways/class-novalnet-eps.php:196 +#: includes/gateways/class-novalnet-giropay.php:192 +#: includes/gateways/class-novalnet-giropay.php:196 +#: includes/gateways/class-novalnet-ideal.php:192 +#: includes/gateways/class-novalnet-ideal.php:196 +#: includes/gateways/class-novalnet-instantbank.php:191 +#: includes/gateways/class-novalnet-instantbank.php:195 +#: includes/gateways/class-novalnet-invoice.php:277 +#: includes/gateways/class-novalnet-invoice.php:281 +#: includes/gateways/class-novalnet-paypal.php:238 +#: includes/gateways/class-novalnet-paypal.php:242 +#: includes/gateways/class-novalnet-prepayment.php:216 +#: includes/gateways/class-novalnet-prepayment.php:220 +#: includes/gateways/class-novalnet-przelewy24.php:205 +#: includes/gateways/class-novalnet-przelewy24.php:209 +#: includes/gateways/class-novalnet-sepa.php:302 +#: includes/gateways/class-novalnet-sepa.php:306 +msgid "Completed order status" +msgstr "" + +#: includes/gateways/class-novalnet-cashpayment.php:209 +#: includes/gateways/class-novalnet-cc.php:358 +#: includes/gateways/class-novalnet-eps.php:197 +#: includes/gateways/class-novalnet-giropay.php:197 +#: includes/gateways/class-novalnet-ideal.php:197 +#: includes/gateways/class-novalnet-instantbank.php:196 +#: includes/gateways/class-novalnet-invoice.php:282 +#: includes/gateways/class-novalnet-paypal.php:243 +#: includes/gateways/class-novalnet-prepayment.php:221 +#: includes/gateways/class-novalnet-przelewy24.php:210 +#: includes/gateways/class-novalnet-sepa.php:307 +msgid "Status to be used for successful orders." +msgstr "" + +#: includes/gateways/class-novalnet-cashpayment.php:213 +#: includes/gateways/class-novalnet-cashpayment.php:217 +#: includes/gateways/class-novalnet-invoice.php:286 +#: includes/gateways/class-novalnet-invoice.php:290 +#: includes/gateways/class-novalnet-prepayment.php:225 +#: includes/gateways/class-novalnet-prepayment.php:229 +msgid "Callback / Webhook order status" +msgstr "" + +#: includes/gateways/class-novalnet-cashpayment.php:218 +#: includes/gateways/class-novalnet-invoice.php:291 +#: includes/gateways/class-novalnet-prepayment.php:230 +msgid "Status to be used when callback script is executed for payment received by Novalnet." +msgstr "" + +#: includes/gateways/class-novalnet-cashpayment.php:222 +#: includes/gateways/class-novalnet-cc.php:362 +#: includes/gateways/class-novalnet-eps.php:201 +#: includes/gateways/class-novalnet-giropay.php:201 +#: includes/gateways/class-novalnet-ideal.php:201 +#: includes/gateways/class-novalnet-instantbank.php:200 +#: includes/gateways/class-novalnet-invoice.php:295 +#: includes/gateways/class-novalnet-paypal.php:247 +#: includes/gateways/class-novalnet-prepayment.php:234 +#: includes/gateways/class-novalnet-przelewy24.php:214 +#: includes/gateways/class-novalnet-sepa.php:311 +msgid "Notification for the buyer" +msgstr "" + +#: includes/gateways/class-novalnet-cashpayment.php:225 +#: includes/gateways/class-novalnet-cc.php:365 +#: includes/gateways/class-novalnet-eps.php:204 +#: includes/gateways/class-novalnet-giropay.php:204 +#: includes/gateways/class-novalnet-ideal.php:204 +#: includes/gateways/class-novalnet-instantbank.php:203 +#: includes/gateways/class-novalnet-invoice.php:298 +#: includes/gateways/class-novalnet-paypal.php:250 +#: includes/gateways/class-novalnet-prepayment.php:237 +#: includes/gateways/class-novalnet-przelewy24.php:217 +#: includes/gateways/class-novalnet-sepa.php:314 +msgid "The entered text will be displayed at the checkout page" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:83 +msgid "Card holder name" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:84 +msgid "Name on card" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:85 +msgid "Card number" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:86 +msgid "XXXX XXXX XXXX XXXX" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:87 +msgid "Expiry date" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:88 +msgid "CVC/CVV/CID" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:89 +msgid "XXX" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:90 +#: includes/gateways/class-novalnet-cc.php:289 +msgid "Your credit card details are invalid" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:145 +#: includes/gateways/class-novalnet-cc.php:166 +msgid "Credit/Debit Cards" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:178 +msgid "Your credit/debit card will be charged immediately after the order is completed" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:319 +#: includes/gateways/class-novalnet-cc.php:322 +#: includes/gateways/class-novalnet-invoice.php:254 +#: includes/gateways/class-novalnet-invoice.php:257 +#: includes/gateways/class-novalnet-paypal.php:207 +#: includes/gateways/class-novalnet-paypal.php:210 +#: includes/gateways/class-novalnet-sepa.php:280 +#: includes/gateways/class-novalnet-sepa.php:283 +msgid "Payment action" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:323 +#: includes/gateways/class-novalnet-invoice.php:258 +#: includes/gateways/class-novalnet-paypal.php:211 +#: includes/gateways/class-novalnet-sepa.php:284 +msgid "Choose whether or not the payment should be charged immediately. Capture completes the transaction by transferring the funds from buyer account to merchant account. Authorize verifies payment details and reserves funds to capture it later, giving time for the merchant to decide on the order." +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:325 +#: includes/gateways/class-novalnet-invoice.php:260 +#: includes/gateways/class-novalnet-paypal.php:213 +#: includes/gateways/class-novalnet-sepa.php:286 +msgid "Capture" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:326 +#: includes/gateways/class-novalnet-invoice.php:261 +#: includes/gateways/class-novalnet-paypal.php:214 +#: includes/gateways/class-novalnet-sepa.php:287 +msgid "Authorize" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:332 +#: includes/gateways/class-novalnet-cc.php:336 +#: includes/gateways/class-novalnet-invoice.php:267 +#: includes/gateways/class-novalnet-invoice.php:271 +#: includes/gateways/class-novalnet-paypal.php:220 +#: includes/gateways/class-novalnet-paypal.php:224 +#: includes/gateways/class-novalnet-sepa.php:293 +#: includes/gateways/class-novalnet-sepa.php:297 +msgid "Minimum transaction limit for authorization" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:335 +#: includes/gateways/class-novalnet-invoice.php:270 +#: includes/gateways/class-novalnet-paypal.php:223 +#: includes/gateways/class-novalnet-sepa.php:296 +#: includes/gateways/class-novalnet-sepa.php:360 +msgid "

(in minimum unit of currency. E.g. enter 100 which is equal to 1.00)" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:337 +#: includes/gateways/class-novalnet-paypal.php:225 +#: includes/gateways/class-novalnet-sepa.php:298 +msgid "In case the order amount exceeds the mentioned limit, the transaction will be set on-hold till your confirmation of the transaction. You can leave the field empty if you wish to process all the transactions as on-hold." +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:341 +#: includes/gateways/class-novalnet-cc.php:343 +msgid "Enforce 3D secure payment outside EU" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:344 +msgid "By enabling this option, all payments from cards issued outside the EU will be authenticated via 3DS 2.0 SCA" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:368 +msgid "Custom CSS settings" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:373 +msgid "CSS settings for iframe form" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:379 +msgid "Label" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:380 +#: includes/gateways/class-novalnet-cc.php:388 +msgid "E.g: color:#999999; background-color:#FFFFFF;" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:387 +msgid "Input" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:395 +msgid "CSS Text" +msgstr "" + +#: includes/gateways/class-novalnet-cc.php:396 +msgid "E.g: #idselector{color:#999999;}.classSelector{color:#000000}" +msgstr "" + +#: includes/gateways/class-novalnet-eps.php:66 +#: includes/gateways/class-novalnet-eps.php:81 +#: includes/gateways/class-novalnet-eps.php:179 +msgid "Novalnet eps" +msgstr "" + +#: includes/gateways/class-novalnet-eps.php:82 +#: includes/gateways/class-novalnet-eps.php:101 +msgid "eps" +msgstr "" + +#: includes/gateways/class-novalnet-eps.php:113 +msgid "You will be redirected to eps. Please don’t close or refresh the browser until the payment is completed" +msgstr "" + +#: includes/gateways/class-novalnet-giropay.php:67 +#: includes/gateways/class-novalnet-giropay.php:83 +#: includes/gateways/class-novalnet-giropay.php:179 +msgid "Novalnet giropay" +msgstr "" + +#: includes/gateways/class-novalnet-giropay.php:84 +#: includes/gateways/class-novalnet-giropay.php:102 +msgid "giropay" +msgstr "" + +#: includes/gateways/class-novalnet-giropay.php:114 +msgid "You will be redirected to giropay. Please don’t close or refresh the browser until the payment is completed" +msgstr "" + +#: includes/gateways/class-novalnet-ideal.php:67 +#: includes/gateways/class-novalnet-ideal.php:82 +#: includes/gateways/class-novalnet-ideal.php:179 +msgid "Novalnet iDEAL" +msgstr "" + +#: includes/gateways/class-novalnet-ideal.php:83 +#: includes/gateways/class-novalnet-ideal.php:100 +msgid "iDEAL" +msgstr "" + +#: includes/gateways/class-novalnet-ideal.php:112 +msgid "You will be redirected to iDEAL. Please don’t close or refresh the browser until the payment is completed" +msgstr "" + +#: includes/gateways/class-novalnet-instantbank.php:67 +#: includes/gateways/class-novalnet-instantbank.php:82 +#: includes/gateways/class-novalnet-instantbank.php:178 +msgid "Novalnet Sofort" +msgstr "" + +#: includes/gateways/class-novalnet-instantbank.php:83 +#: includes/gateways/class-novalnet-instantbank.php:100 +msgid "Sofort" +msgstr "" + +#: includes/gateways/class-novalnet-instantbank.php:112 +msgid "You will be redirected to Sofort. Please don’t close or refresh the browser until the payment is completed" +msgstr "" + +#: includes/gateways/class-novalnet-invoice.php:98 +#: includes/gateways/class-novalnet-invoice.php:121 +msgid "Invoice" +msgstr "" + +#: includes/gateways/class-novalnet-invoice.php:156 +#: includes/gateways/class-novalnet-sepa.php:216 +#, php-format +msgid "The payment cannot be processed, because the basic requirements for the payment guarantee are not met ( %s ) " +msgstr "" + +#: includes/gateways/class-novalnet-invoice.php:245 +#: includes/gateways/class-novalnet-invoice.php:249 +#: includes/gateways/class-novalnet-prepayment.php:206 +#: includes/gateways/class-novalnet-prepayment.php:211 +#: includes/gateways/class-novalnet-sepa.php:269 +#: includes/gateways/class-novalnet-sepa.php:275 +msgid "Payment due date (in days)" +msgstr "" + +#: includes/gateways/class-novalnet-invoice.php:250 +#: includes/gateways/class-novalnet-prepayment.php:212 +msgid "Number of days given to the buyer to transfer the amount to Novalnet (must be greater than 7 days). If this field is left blank, 14 days will be set as due date by default. " +msgstr "" + +#: includes/gateways/class-novalnet-invoice.php:272 +msgid "When the order amount exceeds the mentioned limit, the transaction will be set on-hold till you confirm it. You can leave the field empty if you wish to process all transactions as on-hold transactions. " +msgstr "" + +#: includes/gateways/class-novalnet-invoice.php:303 +#: includes/gateways/class-novalnet-sepa.php:318 +msgid "Payment guarantee configuration" +msgstr "" + +#: includes/gateways/class-novalnet-invoice.php:317 +#: includes/gateways/class-novalnet-sepa.php:332 +msgid "Payment guarantee requirements: " +msgstr "" + +#: includes/gateways/class-novalnet-invoice.php:318 +#: includes/gateways/class-novalnet-sepa.php:333 +msgid "Allowed countries: DE, AT, CH" +msgstr "" + +#: includes/gateways/class-novalnet-invoice.php:319 +#: includes/gateways/class-novalnet-sepa.php:334 +msgid "Allowed currency: EUR" +msgstr "" + +#: includes/gateways/class-novalnet-invoice.php:320 +#: includes/gateways/class-novalnet-sepa.php:335 +msgid "Minimum order amount: 9,99 EUR or more" +msgstr "" + +#: includes/gateways/class-novalnet-invoice.php:321 +#: includes/gateways/class-novalnet-sepa.php:336 +msgid "Age limit: 18 years or more" +msgstr "" + +#: includes/gateways/class-novalnet-invoice.php:322 +#: includes/gateways/class-novalnet-sepa.php:337 +msgid "The billing address must be the same as the shipping address" +msgstr "" + +#: includes/gateways/class-novalnet-invoice.php:328 +#: includes/gateways/class-novalnet-sepa.php:344 +msgid "Enable payment guarantee" +msgstr "" + +#: includes/gateways/class-novalnet-invoice.php:333 +#: includes/gateways/class-novalnet-invoice.php:337 +#: includes/gateways/class-novalnet-paypal.php:229 +#: includes/gateways/class-novalnet-paypal.php:233 +#: includes/gateways/class-novalnet-przelewy24.php:196 +#: includes/gateways/class-novalnet-przelewy24.php:200 +#: includes/gateways/class-novalnet-sepa.php:349 +#: includes/gateways/class-novalnet-sepa.php:353 +msgid "Payment status for the pending payment" +msgstr "" + +#: includes/gateways/class-novalnet-invoice.php:338 +#: includes/gateways/class-novalnet-paypal.php:234 +#: includes/gateways/class-novalnet-przelewy24.php:201 +#: includes/gateways/class-novalnet-sepa.php:354 +msgid "Status to be used for pending transactions." +msgstr "" + +#: includes/gateways/class-novalnet-invoice.php:342 +#: includes/gateways/class-novalnet-invoice.php:345 +#: includes/gateways/class-novalnet-sepa.php:358 +#: includes/gateways/class-novalnet-sepa.php:362 +msgid "Minimum order amount for payment guarantee" +msgstr "" + +#: includes/gateways/class-novalnet-invoice.php:346 +#: includes/gateways/class-novalnet-sepa.php:363 +msgid "Enter the minimum amount (in cents) for the transaction to be processed with payment guarantee. For example, enter 100 which is equal to 1,00. By default, the amount will be 9,99 EUR." +msgstr "" + +#: includes/gateways/class-novalnet-invoice.php:350 +#: includes/gateways/class-novalnet-invoice.php:357 +#: includes/gateways/class-novalnet-sepa.php:367 +#: includes/gateways/class-novalnet-sepa.php:374 +msgid "Force Non-Guarantee payment" +msgstr "" + +#: includes/gateways/class-novalnet-invoice.php:358 +#: includes/gateways/class-novalnet-sepa.php:375 +msgid "Even if payment guarantee is enabled, payments will still be processed as non-guarantee payments if the payment guarantee requirements are not met. Review the requirements under 'Enable Payment Guarantee' in the Installation Guide. " +msgstr "" + +#: includes/gateways/class-novalnet-paypal.php:84 +#: includes/gateways/class-novalnet-paypal.php:102 +msgid "PayPal" +msgstr "" + +#: includes/gateways/class-novalnet-paypal.php:114 +msgid "You will be redirected to PayPal. Please don’t close or refresh the browser until the payment is completed" +msgstr "" + +#: includes/gateways/class-novalnet-paypal.php:194 +#, php-format +msgid "To accept PayPal transactions, configure your PayPal API info in the Novalnet Admin Portal: > PROJECT > Choose your project > Payment Methods > PaypalConfigure." +msgstr "" + +#: includes/gateways/class-novalnet-prepayment.php:82 +#: includes/gateways/class-novalnet-prepayment.php:100 +msgid "Prepayment" +msgstr "" + +#: includes/gateways/class-novalnet-prepayment.php:112 +#: templates/invoice-template.php:32 +msgid "You will receive an e-mail with the Novalnet account details to complete the payment." +msgstr "" + +#: includes/gateways/class-novalnet-przelewy24.php:67 +#: includes/gateways/class-novalnet-przelewy24.php:83 +#: includes/gateways/class-novalnet-przelewy24.php:183 +msgid "Novalnet Przelewy24" +msgstr "" + +#: includes/gateways/class-novalnet-przelewy24.php:84 +#: includes/gateways/class-novalnet-przelewy24.php:102 +msgid "Przelewy24" +msgstr "" + +#: includes/gateways/class-novalnet-przelewy24.php:114 +msgid "You will be redirected to Przelewy24. Please don’t close or refresh the browser until the payment is completed" +msgstr "" + +#: includes/gateways/class-novalnet-sepa.php:102 +#: includes/gateways/class-novalnet-sepa.php:126 +msgid "Direct Debit SEPA" +msgstr "" + +#: includes/gateways/class-novalnet-sepa.php:276 +msgid "Number of days after which the payment is debited (must be between 2 and 14 days)." +msgstr "" + +#: includes/novalnet-functions.php:135 +msgid "Configuration" +msgstr "" + +#: includes/novalnet-functions.php:196 +msgid "Payment was not successful. An error occurred." +msgstr "" + +#: includes/novalnet-functions.php:213 +msgid "Pay now with Barzahlen/viacash" +msgstr "" + +#: includes/novalnet-functions.php:365 +msgid "The amount is invalid" +msgstr "" + +#: includes/novalnet-functions.php:376 +msgid "Multiple subscription can not be purchased at the same time " +msgstr "" + +#: includes/novalnet-functions.php:586 +msgid "Customer name/email fields are not valid" +msgstr "" + +#: includes/novalnet-functions.php:639 +msgid "You are now redirected automatically" +msgstr "" + +#: includes/novalnet-functions.php:639 +msgid "Please wait..." +msgstr "" + +#: includes/novalnet-functions.php:733 +#, php-format +msgid "Successfully updated the payment and customer billing details for upcoming subscriptions on date: %s" +msgstr "" + +#: includes/novalnet-functions.php:930 includes/novalnet-functions.php:987 +msgid "While redirecting some data has been changed. The hash check failed" +msgstr "" + +#: includes/novalnet-functions.php:939 +#, php-format +msgid "Recurring change payment method has been failed due to %s" +msgstr "" + +#: includes/novalnet-functions.php:1019 +msgid "Product is costly" +msgstr "" + +#: includes/novalnet-functions.php:1020 +msgid "Cheating" +msgstr "" + +#: includes/novalnet-functions.php:1021 +msgid "Partner interfered" +msgstr "" + +#: includes/novalnet-functions.php:1022 +msgid "Financial problem" +msgstr "" + +#: includes/novalnet-functions.php:1023 +msgid "Content does not match my likes" +msgstr "" + +#: includes/novalnet-functions.php:1024 +msgid "Content is not enough" +msgstr "" + +#: includes/novalnet-functions.php:1025 +msgid "Interested only for a trial" +msgstr "" + +#: includes/novalnet-functions.php:1026 +msgid "Page is very slow" +msgstr "" + +#: includes/novalnet-functions.php:1027 +msgid "Satisfied customer" +msgstr "" + +#: includes/novalnet-functions.php:1028 +msgid "Logging in problems" +msgstr "" + +#: includes/novalnet-functions.php:1444 +msgid "Your order is being verified. Once confirmed, we will send you our bank details to which the order amount should be transferred. Please note that this may take up to 24 hours." +msgstr "" + +#: includes/novalnet-functions.php:1446 +msgid "Please transfer the amount to the below mentioned account." +msgstr "" + +#: includes/novalnet-functions.php:1449 +msgid "Due date: " +msgstr "" + +#: includes/novalnet-functions.php:1451 +msgid "Account holder: " +msgstr "" + +#: includes/novalnet-functions.php:1459 +msgid "Amount: " +msgstr "" + +#: includes/novalnet-functions.php:1462 +msgid "Please use the following payment reference for your money transfer, as only through this way your payment is matched and assigned to the order:" +msgstr "" + +#: includes/novalnet-functions.php:1470 +#, php-format +msgid "Payment Reference %s: " +msgstr "" + +#: includes/novalnet-functions.php:1492 +msgid "Slip expiry date" +msgstr "" + +#: includes/novalnet-functions.php:1495 +msgid "Store(s) near you" +msgstr "" + +#: includes/novalnet-functions.php:1681 +msgid "This is processed as a guarantee payment" +msgstr "" + +#: includes/novalnet-functions.php:1683 +#, php-format +msgid "Novalnet transaction ID: %s" +msgstr "" + +#: includes/novalnet-functions.php:1684 +msgid "Test order" +msgstr "" + +#: includes/novalnet-functions.php:1686 +msgid "Your order is under verification and we will soon update you with the order status. Please note that this may take upto 24 hours." +msgstr "" + +#: includes/novalnet-functions.php:1733 +msgid "Only Germany, Austria or Switzerland are allowed" +msgstr "" + +#: includes/novalnet-functions.php:1736 +msgid "Only EUR currency allowed" +msgstr "" + +#: includes/novalnet-functions.php:1740 +#, php-format +msgid "Minimum order amount must be %s" +msgstr "" + +#: includes/novalnet-functions.php:1773 +msgid "Please enter your date of birth" +msgstr "" + +#: includes/novalnet-functions.php:1775 +msgid "The date format is invalid" +msgstr "" + +#: includes/novalnet-functions.php:1777 +msgid "You need to be at least 18 years old" +msgstr "" + +#: templates/invoice-template.php:67 templates/sepa-template.php:67 +#, php-format +msgid "The payment cannot be processed, because the basic requirements for the payment guarantee are not met
%s " +msgstr "" + +#: templates/invoice-template.php:79 templates/sepa-template.php:82 +msgid "Please enable the Javascript in your browser to load the payment form" +msgstr "" + +#: templates/invoice-template.php:87 templates/sepa-template.php:106 +msgid "Your date of birth" +msgstr "" + +#: templates/invoice-template.php:91 templates/sepa-template.php:110 +msgid "DD" +msgstr "" + +#: templates/invoice-template.php:92 templates/sepa-template.php:111 +msgid "MM" +msgstr "" + +#: templates/invoice-template.php:93 templates/sepa-template.php:112 +msgid "YYYY" +msgstr "" + +#: templates/sepa-template.php:32 +msgid "The amount will be debited from your account by Novalnet" +msgstr "" + +#: templates/sepa-template.php:89 templates/sepa-template.php:92 +msgid "Account holder" +msgstr "" + +#: templates/sepa-template.php:96 +msgid "IBAN " +msgstr "" + +#: templates/sepa-template.php:99 +msgid "IBAN" +msgstr "" + +#: templates/sepa-template.php:120 +msgid "I hereby grant the mandate for the SEPA direct debit (electronic transmission) and confirm that the given bank details are correct!" +msgstr "" + +#: templates/sepa-template.php:123 +msgid "I authorise (A) Novalnet AG to send instructions to my bank to debit my account and (B) my bank to debit my account in accordance with the instructions from Novalnet AG." +msgstr "" + +#: templates/sepa-template.php:126 +msgid "Creditor identifier: " +msgstr "" + +#: templates/sepa-template.php:128 +msgid "Note: " +msgstr "" + +#: templates/sepa-template.php:128 +msgid "You are entitled to a refund from your bank under the terms and conditions of your agreement with bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited." +msgstr "" diff --git a/languages/messages.mo b/languages/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..de0510b2fd4854b9a5a7e34185cfee09f25ddafc GIT binary patch literal 29425 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 literal 0 HcmV?d00001 diff --git a/novalnet-install.php b/novalnet-install.php new file mode 100755 index 0000000..fe8b860 --- /dev/null +++ b/novalnet-install.php @@ -0,0 +1,113 @@ +get_charset_collate(); + $edd_recurring_version = preg_replace( '/[^0-9.].*/', '', get_option( 'edd_recurring_version' ) ); + if ( version_compare($edd_recurring_version, '2.7', '>=') ) { + $sub_details = $wpdb->get_results( "SELECT id, parent_payment_id FROM {$wpdb->prefix}edd_subscriptions" ); + foreach ( $sub_details as $row ) { + $result = $wpdb->get_results( $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} where post_parent = '%d' AND post_type='edd_payment'", array( $row->parent_payment_id ) ) ); + foreach ( $result as $post_id ) { + update_post_meta( $post_id->ID, 'subscription_id', $row->id ); + } + } + } + require_once ABSPATH . 'wp-admin/includes/upgrade.php'; + + if ( ! get_option( 'novalnet_db_version' ) || NOVALNET_VERSION !== get_option( 'novalnet_db_version' ) ) { + dbDelta( + " + CREATE TABLE IF NOT EXISTS {$wpdb->prefix}novalnet_transaction_detail ( + id int(11) NOT NULL AUTO_INCREMENT COMMENT 'Auto Increment ID', + order_no bigint(20) unsigned NOT NULL COMMENT 'Post ID for the order in shop', + vendor_id int(8) unsigned NOT NULL COMMENT 'Novalnet Vendor ID', + auth_code varchar(30) NOT NULL COMMENT 'Novalnet Authentication code', + product_id int(8) unsigned NOT NULL COMMENT 'Novalnet Project ID', + tariff_id int(8) unsigned NOT NULL COMMENT 'Novalnet Tariff ID', + payment_id int(8) unsigned NOT NULL COMMENT 'Payment ID', + payment_type varchar(50) NOT NULL COMMENT 'Executed Payment type of this order', + tid bigint(20) unsigned NOT NULL COMMENT 'Novalnet Transaction Reference ID', + subs_id int(8) unsigned DEFAULT NULL COMMENT 'Subscription Status', + amount int(11) NOT NULL COMMENT 'Transaction amount in cents', + callback_amount int(11) DEFAULT '0' COMMENT 'Transaction paid amount in cents', + currency varchar(5) NOT NULL COMMENT 'Transaction currency', + gateway_status int(11) DEFAULT NULL COMMENT 'Novalnet transaction status', + test_mode tinyint(1) unsigned DEFAULT NULL COMMENT 'Transaction test mode status', + customer_id int(11) unsigned DEFAULT NULL COMMENT 'Customer ID from shop', + customer_email varchar(50) DEFAULT NULL COMMENT 'Customer ID from shop', + date datetime NOT NULL COMMENT 'Transaction Date for reference', + PRIMARY KEY (id), + INDEX tid (tid), + INDEX customer_id (customer_id), + INDEX order_no (order_no) + ) $charset_collate COMMENT='Novalnet Transaction History';" + ); + + dbDelta( + " + CREATE TABLE IF NOT EXISTS {$wpdb->prefix}novalnet_subscription_details ( + id int(11) NOT NULL AUTO_INCREMENT COMMENT 'Auto Increment ID', + order_no bigint(20) NOT NULL COMMENT 'Post ID for the order in shop', + payment_type varchar(50) NOT NULL COMMENT 'Payment Type', + recurring_payment_type varchar(50) NOT NULL COMMENT 'Recurring Payment Type', + recurring_amount int(11) DEFAULT NULL COMMENT 'Amount in cents', + tid bigint(20) unsigned NOT NULL COMMENT 'Novalnet Transaction Reference ID', + recurring_tid bigint(20) unsigned NOT NULL COMMENT 'Novalnet Transaction Reference ID', + subs_id int(8) unsigned DEFAULT NULL COMMENT 'Subscription Status', + signup_date datetime DEFAULT NULL COMMENT 'Subscription signup date', + next_payment_date datetime DEFAULT NULL COMMENT 'Subscription next cycle date', + termination_reason varchar(255) DEFAULT NULL COMMENT 'Subscription termination reason by merchant', + termination_at datetime DEFAULT NULL COMMENT 'Subscription terminated date', + subscription_length int(8) NOT NULL DEFAULT 0 COMMENT 'Length of Subscription', + PRIMARY KEY (id), + INDEX order_no (order_no), + INDEX tid (tid) + ) $charset_collate COMMENT='Novalnet Subscription Payment Details';" + ); + + update_option( 'novalnet_version_update', true ); + if ( ! get_option( 'novalnet_db_version' ) ) { + add_option( 'novalnet_db_version', NOVALNET_VERSION ); + } elseif ( NOVALNET_VERSION !== get_option( 'novalnet_db_version' ) ) { + + if ( version_compare(get_option( 'novalnet_db_version' ), '2.1.1', '<=') ) { + + $edd_settings = get_option('edd_settings'); + + $store_temp_subs_payment = array(); + + if( isset($edd_settings['novalnet_subs_payments']) && !empty( $edd_settings['novalnet_subs_payments'] ) ) { + $store_temp_subs_payment = array( + 'novalnet_subs_payments' => array_keys($edd_settings['novalnet_subs_payments']) + ); + } + + update_option('edd_settings', array_merge( $edd_settings, $store_temp_subs_payment )); + } + update_option( 'novalnet_db_version', NOVALNET_VERSION ); + } + + }// End if(). +} diff --git a/templates/invoice-template.php b/templates/invoice-template.php new file mode 100755 index 0000000..4381c44 --- /dev/null +++ b/templates/invoice-template.php @@ -0,0 +1,100 @@ + + +

+
+ +
+

+ +

+

+ +

+ +

+ +

+ +

+ +

+ + + session->get( 'novalnet_invoice_guarantee_payment_error' ) ) || ( 0 === get_current_user_id() ) ) && !$update_payment ) { + // display Date of birth field. + ?> +

+ + + + + + +

+ + +
diff --git a/templates/sepa-template.php b/templates/sepa-template.php new file mode 100755 index 0000000..332c211 --- /dev/null +++ b/templates/sepa-template.php @@ -0,0 +1,133 @@ + +
+
+ +
+

+ +

+

+ +

+ +

+ +

+ + +

+ +

+ + + +
+ +

+ + +

+ +

+ + +

+ session->get( 'novalnet_sepa_guarantee_payment_error' ) ) || ( 0 === get_current_user_id() ) ) && !$update_payment ) { + // display Date of birth field. + ?> +

+ + + + + + +

+ +

+ + + +

+

+
+ +