41if (!defined(
'NOLOGIN')) {
44if (!defined(
'NOCSRFCHECK')) {
45 define(
"NOCSRFCHECK", 1);
47if (!defined(
'NOIPCHECK')) {
48 define(
'NOIPCHECK',
'1');
50if (!defined(
'NOBROWSERNOTIF')) {
51 define(
'NOBROWSERNOTIF',
'1');
54if (!defined(
'XFRAMEOPTIONS_ALLOWALL')) {
55 define(
'XFRAMEOPTIONS_ALLOWALL',
'1');
61$entity = (!empty($_GET[
'entity']) ? (int) $_GET[
'entity'] : (!empty($_POST[
'entity']) ? (int) $_POST[
'entity'] : (!empty($_GET[
'e']) ? (int) $_GET[
'e'] : (!empty($_POST[
'e']) ? (int) $_POST[
'e'] : 1))));
62if (is_numeric($entity)) {
63 define(
"DOLENTITY", $entity);
67require
'../../main.inc.php';
78require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
79require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
80require_once DOL_DOCUMENT_ROOT.
'/core/lib/payments.lib.php';
81require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
82require_once DOL_DOCUMENT_ROOT.
'/core/lib/security2.lib.php';
83require_once DOL_DOCUMENT_ROOT.
'/eventorganization/class/conferenceorboothattendee.class.php';
84require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
85require_once DOL_DOCUMENT_ROOT.
'/societe/class/societeaccount.class.php';
86require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
87require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
90$langs->loadLangs(array(
"main",
"other",
"dict",
"bills",
"companies",
"errors",
"paybox",
"paypal",
"stripe"));
94$hookmanager->initHooks(array(
'newpayment'));
100$action =
GETPOST(
'action',
'aZ09');
109$suffix =
GETPOST(
"suffix",
'aZ09');
111if (!
GETPOST(
"currency",
'alpha')) {
112 $currency =
$conf->currency;
114 $currency =
GETPOST(
"currency",
'aZ09');
117$getpostlang =
GETPOST(
'lang',
'aZ09');
121 if (!
GETPOST(
"amount",
'alpha') && !$source) {
122 print $langs->trans(
'ErrorBadParameters').
" - amount or source";
125 if (is_numeric($amount) && !
GETPOST(
"tag",
'alpha') && !$source) {
126 print $langs->trans(
'ErrorBadParameters').
" - tag or source";
129 if ($source && !
GETPOST(
"ref",
'alpha')) {
130 print $langs->trans(
'ErrorBadParameters').
" - ref";
138$paymentintent =
null;
142if ($source ==
'organizedeventregistration') {
149 $resultinvoice = $invoice->fetch($invoiceid);
151 if ($resultinvoice <= 0) {
164 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"eventorganization_conferenceorboothattendee";
165 $sql .=
" WHERE fk_invoice = ".((int) $invoiceid);
167 $resql = $db->query($sql);
169 $obj = $db->fetch_object($resql);
171 $attendeeid = $obj->rowid;
175 if ($attendeeid > 0) {
176 $resultattendee = $attendee->fetch($attendeeid);
178 if ($resultattendee <= 0) {
181 $attendee->fetch_projet();
183 $amount =
price2num($invoice->total_ttc);
185 $thirdparty =
new Societe($db);
186 $resultthirdparty = $thirdparty->fetch($invoice->socid);
187 if ($resultthirdparty <= 0) {
194} elseif ($source ==
'boothlocation') {
198 $resultinvoice = $invoice->fetch($invoiceid);
199 if ($resultinvoice <= 0) {
202 $amount =
price2num($invoice->total_ttc);
204 $thirdparty =
new Societe($db);
205 $resultthirdparty = $thirdparty->fetch($invoice->socid);
206 if ($resultthirdparty <= 0) {
214$paymentmethod =
GETPOST(
'paymentmethod',
'alphanohtml') ?
GETPOST(
'paymentmethod',
'alphanohtml') :
'';
215$validpaymentmethod = array();
218foreach ($_POST as $key => $val) {
220 if (preg_match(
'/^dopayment_(.*)$/', $key, $reg)) {
221 $paymentmethod = $reg[1];
227$ref = $REF =
GETPOST(
'ref',
'alpha');
229$FULLTAG =
GETPOST(
"fulltag",
'alpha');
230$SECUREKEY =
GETPOST(
"securekey");
233$PAYPAL_API_SANDBOX =
"";
234$PAYPAL_API_USER =
"";
235$PAYPAL_API_PASSWORD =
"";
236$PAYPAL_API_SIGNATURE =
"";
239if (empty($ws) && preg_match(
'/WS=([^=&]+)/', $FULLTAG, $reg)) {
246$urlwithroot = DOL_MAIN_URL_ROOT;
248$urlok = $urlwithroot.
'/public/payment/paymentok.php?';
249$urlko = $urlwithroot.
'/public/payment/paymentko.php?';
251if ($ws && !defined(
'USEDOLIBARRSERVER') && !defined(
'USEDOLIBARREDITOR')) {
252 if (!empty($_SERVER[
"HTTP_X_FORWARDED_HOST"])) {
254 $tmphosts = explode(
',', $_SERVER[
"HTTP_X_FORWARDED_HOST"]);
255 $tmphosts = array_map(
'trim', $tmphosts);
256 $lastproxy = end($tmphosts);
258 include_once DOL_DOCUMENT_ROOT.
'/website/class/website.class.php';
259 $tmpwebsite =
new Website($db);
260 $tmpwebsite->fetch(0, $ws);
262 if (preg_replace(
'/https?:\/\//i',
'', $tmpwebsite->virtualhost) == $lastproxy) {
264 $urlok = $tmpwebsite->virtualhost.
'/public/payment/paymentok.php?';
265 $urlko = $tmpwebsite->virtualhost.
'/public/payment/paymentko.php?';
270if ($paymentmethod && !preg_match(
'/'.preg_quote(
'PM='.$paymentmethod,
'/').
'/', $FULLTAG)) {
271 $FULLTAG .= ($FULLTAG ?
'.' :
'').
'PM='.$paymentmethod;
274if ($ws && !preg_match(
'/'.preg_quote(
'WS='.$ws,
'/').
'/', $FULLTAG)) {
275 $FULLTAG .= ($FULLTAG ?
'.' :
'').
'WS='.$ws;
278if (!empty($suffix)) {
279 $urlok .=
'suffix='.urlencode($suffix).
'&';
280 $urlko .=
'suffix='.urlencode($suffix).
'&';
283 $urlok .=
's='.urlencode($source).
'&';
284 $urlko .=
's='.urlencode($source).
'&';
287 $urlok .=
'ref='.urlencode($REF).
'&';
288 $urlko .=
'ref='.urlencode($REF).
'&';
291 $urlok .=
'tag='.urlencode($TAG).
'&';
292 $urlko .=
'tag='.urlencode($TAG).
'&';
294if (!empty($FULLTAG)) {
295 $urlok .=
'fulltag='.urlencode($FULLTAG).
'&';
296 $urlko .=
'fulltag='.urlencode($FULLTAG).
'&';
298if (!empty($SECUREKEY)) {
299 $urlok .=
'securekey='.urlencode($SECUREKEY).
'&';
300 $urlko .=
'securekey='.urlencode($SECUREKEY).
'&';
302if (!empty($entity)) {
303 $urlok .=
'e='.urlencode((
string) ($entity)).
'&';
304 $urlko .=
'e='.urlencode((
string) ($entity)).
'&';
306if (!empty($getpostlang)) {
307 $urlok .=
'lang='.urlencode($getpostlang).
'&';
308 $urlko .=
'lang='.urlencode($getpostlang).
'&';
310$urlok = preg_replace(
'/&$/',
'', $urlok);
311$urlko = preg_replace(
'/&$/',
'', $urlko);
318@phan-var-force string $PAYPAL_API_SANDBOX
319@phan-var-force string $PAYPAL_API_OK
320@phan-var-force string $PAYPAL_API_KO
323if ((empty($paymentmethod) || $paymentmethod ==
'paypal') && isModEnabled(
'paypal')) {
324 global $PAYPAL_API_SANDBOX, $PAYPAL_API_OK, $PAYPAL_API_KO, $PAYPAL_API_USER, $PAYPAL_API_PASSWORD, $PAYPAL_API_SIGNATURE;
325 require_once DOL_DOCUMENT_ROOT.
'/paypal/lib/paypal.lib.php';
326 require_once DOL_DOCUMENT_ROOT.
'/paypal/lib/paypalfunctions.lib.php';
332 $PAYPAL_API_OK = $urlok;
336 $PAYPAL_API_KO = $urlko;
338 if (empty($PAYPAL_API_USER)) {
339 print
'Paypal parameter PAYPAL_API_USER is not defined. Please <a href="'.DOL_URL_ROOT.
'/paypal/admin/paypal.php">complete the setup of module PayPal first</a>.';
342 if (empty($PAYPAL_API_PASSWORD)) {
343 print
'Paypal parameter PAYPAL_API_PASSWORD is not defined. Please <a href="'.DOL_URL_ROOT.
'/paypal/admin/paypal.php">complete the setup of module PayPal first</a>.';
346 if (empty($PAYPAL_API_SIGNATURE)) {
347 print
'Paypal parameter PAYPAL_API_SIGNATURE is not defined. Please <a href="'.DOL_URL_ROOT.
'/paypal/admin/paypal.php">complete the setup of module PayPal first</a>.';
354if ((empty($paymentmethod) || $paymentmethod ==
'stripe') && isModEnabled(
'stripe')) {
355 require_once DOL_DOCUMENT_ROOT.
'/stripe/config.php';
360$validpaymentmethod = getValidOnlinePaymentMethods($paymentmethod);
364if ($tmpsource ==
'membersubscription') {
365 $tmpsource =
'member';
371 if ($tmpsource && $REF) {
375 if ($tmpsource != $source) {
389 dol_syslog(
"Warning: PAYMENT_SECURITY_ACCEPT_ANY_TOKEN is on", LOG_WARNING);
390 dol_syslog(
"Warning: PAYMENT_SECURITY_ACCEPT_ANY_TOKEN is on", LOG_WARNING, 0,
'_payment');
395 print
'<div class="error">Bad value for key.</div>';
401if (!empty($paymentmethod) && empty($validpaymentmethod[$paymentmethod])) {
402 print
'Payment module for payment method '.$paymentmethod.
' is not active';
405if (empty($validpaymentmethod)) {
406 print
'No active payment module (Paypal, Stripe, Paybox, ...)';
411$creditor = $mysoc->name;
412$paramcreditor =
'ONLINE_PAYMENT_CREDITOR';
413$paramcreditorlong =
'ONLINE_PAYMENT_CREDITOR_'.$suffix;
428dol_syslog(
"--- newpayment.php action=".$action.
" paymentmethod=".$paymentmethod.
' amount='.$amount.
' newamount='.
GETPOST(
"newamount",
'alpha'), LOG_DEBUG, 0,
'_payment');
430dol_syslog(
"fulltag=".
GETPOST(
"fulltag",
'alpha').
" ws=".$ws.
" urlok=".$urlok, LOG_DEBUG, 0,
'_payment');
433if ($action ==
'dopayment') {
434 if ($paymentmethod ==
'paypal') {
436 $PAYPAL_PAYMENT_TYPE =
'Sale';
439 $origfulltag =
GETPOST(
"fulltag",
'alpha');
440 $shipToName =
GETPOST(
"shipToName",
'alpha');
441 $shipToStreet =
GETPOST(
"shipToStreet",
'alpha');
442 $shipToCity =
GETPOST(
"shipToCity",
'alpha');
443 $shipToState =
GETPOST(
"shipToState",
'alpha');
444 $shipToCountryCode =
GETPOST(
"shipToCountryCode",
'alpha');
445 $shipToZip =
GETPOST(
"shipToZip",
'alpha');
446 $shipToStreet2 =
GETPOST(
"shipToStreet2",
'alpha');
447 $phoneNum =
GETPOST(
"phoneNum",
'alpha');
448 $email =
GETPOST(
"email",
'alpha');
449 $desc =
GETPOST(
"desc",
'alpha');
453 if ($shipToCountryCode ==
'ID' && !preg_match(
'/\-/', $shipToState)) {
454 $shipToState =
'ID-'.$shipToState;
457 if (empty($PAYPAL_API_PRICE) || !is_numeric($PAYPAL_API_PRICE)) {
458 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount"));
462 } elseif (!$origfulltag) {
463 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"PaymentCode"));
468 dol_syslog(
"newpayment.php call paypal api and do redirect", LOG_DEBUG);
469 dol_syslog(
"newpayment.php call paypal api and do redirect", LOG_DEBUG, 0,
'_payment');
472 $PAYPAL_API_DEVISE =
"USD";
473 if (!empty($currency)) {
474 $PAYPAL_API_DEVISE = $currency;
479 dol_syslog(
"Submit Paypal form", LOG_DEBUG, 0,
'_payment');
481 dol_syslog(
"PAYPAL_API_USER: $PAYPAL_API_USER", LOG_DEBUG, 0,
'_payment');
482 dol_syslog(
"PAYPAL_API_PASSWORD: ".preg_replace(
'/./',
'*', $PAYPAL_API_PASSWORD), LOG_DEBUG, 0,
'_payment');
483 dol_syslog(
"PAYPAL_API_SIGNATURE: $PAYPAL_API_SIGNATURE", LOG_DEBUG, 0,
'_payment');
484 dol_syslog(
"PAYPAL_API_SANDBOX: $PAYPAL_API_SANDBOX", LOG_DEBUG, 0,
'_payment');
485 dol_syslog(
"PAYPAL_API_OK: $PAYPAL_API_OK", LOG_DEBUG, 0,
'_payment');
486 dol_syslog(
"PAYPAL_API_KO: $PAYPAL_API_KO", LOG_DEBUG, 0,
'_payment');
487 dol_syslog(
"PAYPAL_API_PRICE: $PAYPAL_API_PRICE", LOG_DEBUG, 0,
'_payment');
488 dol_syslog(
"PAYPAL_API_DEVISE: $PAYPAL_API_DEVISE", LOG_DEBUG, 0,
'_payment');
490 dol_syslog(
"shipToName: $shipToName", LOG_DEBUG, 0,
'_payment');
491 dol_syslog(
"shipToStreet: $shipToStreet", LOG_DEBUG, 0,
'_payment');
492 dol_syslog(
"shipToCity: $shipToCity", LOG_DEBUG, 0,
'_payment');
493 dol_syslog(
"shipToState: $shipToState", LOG_DEBUG, 0,
'_payment');
494 dol_syslog(
"shipToCountryCode: $shipToCountryCode", LOG_DEBUG, 0,
'_payment');
495 dol_syslog(
"shipToZip: $shipToZip", LOG_DEBUG, 0,
'_payment');
496 dol_syslog(
"shipToStreet2: $shipToStreet2", LOG_DEBUG, 0,
'_payment');
497 dol_syslog(
"phoneNum: $phoneNum", LOG_DEBUG, 0,
'_payment');
498 dol_syslog(
"email: $email", LOG_DEBUG, 0,
'_payment');
499 dol_syslog(
"desc: $desc", LOG_DEBUG, 0,
'_payment');
501 dol_syslog(
"SCRIPT_URI: ".(empty($_SERVER[
"SCRIPT_URI"]) ?
'' : $_SERVER[
"SCRIPT_URI"]), LOG_DEBUG, 0,
'_payment');
504 $mesg =
print_paypal_redirect((
float) $PAYPAL_API_PRICE, $PAYPAL_API_DEVISE, $PAYPAL_PAYMENT_TYPE, $PAYPAL_API_OK, $PAYPAL_API_KO, $FULLTAG);
511 if ($paymentmethod ==
'paybox') {
516 $origfulltag =
GETPOST(
"fulltag",
'alpha');
519 $urlok = preg_replace(
'/securekey=[^&]+&?/',
'', $urlok);
520 $urlko = preg_replace(
'/securekey=[^&]+&?/',
'', $urlko);
522 if (empty($PRICE) || !is_numeric($PRICE)) {
523 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount"));
524 } elseif (empty($email)) {
525 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ONLINE_PAYMENT_SENDEMAIL"));
527 $mesg = $langs->trans(
"ErrorBadEMail", $email);
528 } elseif (!$origfulltag) {
529 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"PaymentCode"));
531 $mesg =
'Error urlok too long '.$urlok.
' (Paybox requires 150, found '.strlen($urlok).
')';
533 $mesg =
'Error urlko too long '.$urlko.
' (Paybox requires 150, found '.strlen($urlok).
')';
537 dol_syslog(
"newpayment.php call paybox api and do redirect", LOG_DEBUG, 0,
'_payment');
539 include_once DOL_DOCUMENT_ROOT.
'/paybox/lib/paybox.lib.php';
547 if ($paymentmethod ==
'stripe') {
548 if (
GETPOST(
'newamount',
'alpha')) {
551 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount")),
null,
'errors');
561if ($action ==
'charge' && isModEnabled(
'stripe')) {
562 $amountstripe = (float) $amount;
566 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
567 if (!in_array($currency, $arrayzerounitcurrency)) {
568 $amountstripe *= 100;
571 dol_syslog(
"newpayment.php execute action = ".$action.
" STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=".
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION'), LOG_DEBUG, 0,
'_payment');
572 dol_syslog(
"GET=".var_export($_GET,
true), LOG_DEBUG, 0,
'_payment');
573 dol_syslog(
"POST=".var_export($_POST,
true), LOG_DEBUG, 0,
'_payment');
575 $stripeToken =
GETPOST(
"stripeToken",
'alpha');
576 $email =
GETPOST(
"email",
'alpha');
580 $vatnumber =
GETPOST(
'vatnumber',
'alpha');
581 $savesource = GETPOSTISSET(
'savesource') ?
GETPOSTINT(
'savesource') : 1;
583 dol_syslog(
"POST stripeToken = ".$stripeToken, LOG_DEBUG, 0,
'_payment');
584 dol_syslog(
"POST email = ".$email, LOG_DEBUG, 0,
'_payment');
585 dol_syslog(
"POST thirdparty_id = ".$thirdparty_id, LOG_DEBUG, 0,
'_payment');
586 dol_syslog(
"POST vatnumber = ".$vatnumber, LOG_DEBUG, 0,
'_payment');
593 if (!
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
596 'dol_version' => DOL_VERSION,
597 'dol_entity' =>
$conf->entity,
598 'dol_company' => $mysoc->name,
599 'dol_tax_num' => $vatnumber,
603 if (!empty($thirdparty_id)) {
604 $metadata[
"dol_thirdparty_id"] = $thirdparty_id;
607 if ($thirdparty_id > 0) {
608 dol_syslog(
"Search existing Stripe customer profile for thirdparty_id=".$thirdparty_id, LOG_DEBUG, 0,
'_payment');
610 $service =
'StripeTest';
613 $service =
'StripeLive';
617 $thirdparty =
new Societe($db);
618 $thirdparty->fetch($thirdparty_id);
621 include_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
622 $stripe =
new Stripe($db);
623 $stripeacc = $stripe->getStripeAccount($service);
624 $customer = $stripe->customerStripe($thirdparty, $stripeacc, $servicestatus, 1);
625 if (empty($customer)) {
627 dol_syslog(
'Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.
' and servicestatus = '.$servicestatus.
': '.$stripe->error, LOG_ERR, 0,
'_payment');
628 setEventMessages(
'Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.
' and servicestatus = '.$servicestatus.
': '.$stripe->error,
null,
'errors');
635 $card = $customer->sources->create(array(
"source" => $stripeToken,
"metadata" => $metadata));
637 $card = $stripeToken;
642 dol_syslog(
'Failed to create card record', LOG_WARNING, 0,
'_payment');
646 if (!empty($FULLTAG)) {
647 $metadata[
"FULLTAG"] = $FULLTAG;
649 if (!empty($dol_id)) {
650 $metadata[
"dol_id"] = $dol_id;
652 if (!empty($dol_type)) {
653 $metadata[
"dol_type"] = $dol_type;
656 dol_syslog(
"Create charge on card ".$card->id, LOG_DEBUG, 0,
'_payment');
657 $charge = \Stripe\Charge::create(array(
658 'amount' =>
price2num($amountstripe,
'MU'),
659 'currency' => $currency,
661 'description' =>
'Stripe payment: '.$FULLTAG.
' ref='.$ref,
662 'metadata' => $metadata,
663 'customer' => $customer->id,
665 'statement_descriptor_suffix' =>
dol_trunc($FULLTAG, 10,
'right',
'UTF-8', 1),
666 ), array(
"idempotency_key" =>
"$FULLTAG",
"stripe_account" =>
"$stripeacc"));
668 if (empty($charge)) {
670 dol_syslog(
'Failed to charge card', LOG_WARNING, 0,
'_payment');
677 $vatcleaned = $vatnumber ? $vatnumber :
null;
688 dol_syslog(
"Create anonymous customer card profile", LOG_DEBUG, 0,
'_payment');
690 $customer = \Stripe\Customer::create(array(
692 'description' => ($email ?
'Anonymous customer for '.$email :
'Anonymous customer'),
693 'metadata' => $metadata,
694 'source' => $stripeToken
712 if (!empty($FULLTAG)) {
713 $metadata[
"FULLTAG"] = $FULLTAG;
715 if (!empty($dol_id)) {
716 $metadata[
"dol_id"] = $dol_id;
718 if (!empty($dol_type)) {
719 $metadata[
"dol_type"] = $dol_type;
724 dol_syslog(
"Create charge", LOG_DEBUG, 0,
'_payment');
725 $charge = \Stripe\Charge::create(array(
726 'customer' => $customer->id,
727 'amount' =>
price2num($amountstripe,
'MU'),
728 'currency' => $currency,
730 'description' =>
'Stripe payment: '.$FULLTAG.
' ref='.$ref,
731 'metadata' => $metadata,
732 'statement_descriptor' =>
dol_trunc($FULLTAG, 10,
'right',
'UTF-8', 1),
733 ), array(
"idempotency_key" => (
string) $FULLTAG,
"stripe_account" => (
string) $stripeacc));
735 if (empty($charge)) {
737 dol_syslog(
'Failed to charge card', LOG_WARNING, 0,
'_payment');
744 $body = $e->getJsonBody();
745 $err = $body[
'error'];
747 print(
'Status is:'.$e->getHttpStatus().
"\n");
748 print(
'Type is:'.$err[
'type'].
"\n");
749 print(
'Code is:'.$err[
'code'].
"\n");
751 print(
'Param is:'.$err[
'param'].
"\n");
752 print(
'Message is:'.$err[
'message'].
"\n");
755 $errormessage =
"ErrorCard ".$e->getMessage().
" err=".var_export($err,
true);
756 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
762 $errormessage =
"ErrorRateLimit ".$e->getMessage();
763 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
769 $errormessage =
"ErrorInvalidRequest ".$e->getMessage();
770 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
777 $errormessage =
"ErrorAuthentication ".$e->getMessage();
778 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
784 $errormessage =
"ErrorApiConnection ".$e->getMessage();
785 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
792 $errormessage =
"ErrorBase ".$e->getMessage();
793 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
799 $errormessage =
"ErrorException ".$e->getMessage();
800 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
807 $_SESSION[
'paymentkosessioncode'] = $randomseckey;
809 $urlko .=
'&paymentkosessioncode='.urlencode($randomseckey);
812 $_SESSION[
'paymentoksessioncode'] = $randomseckey;
814 $urlok .=
'&paymentoksessioncode='.urlencode($randomseckey);
819 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
820 $service =
'StripeTest';
823 $service =
'StripeLive';
826 include_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
827 $stripe =
new Stripe($db);
828 $stripeacc = $stripe->getStripeAccount($service);
832 $paymentintent_id =
GETPOST(
"paymentintent_id",
"alpha");
835 global $stripearrayofkeysbyenv;
836 \Stripe\Stripe::setApiKey($stripearrayofkeysbyenv[$servicestatus][
'secret_key']);
839 if (empty($stripeacc)) {
840 $paymentintent = \Stripe\PaymentIntent::retrieve($paymentintent_id);
842 $paymentintent = \Stripe\PaymentIntent::retrieve($paymentintent_id, array(
"stripe_account" => $stripeacc));
846 $errormessage =
"CantRetrievePaymentIntent ".$e->getMessage();
847 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
852 if ($paymentintent->status !=
'succeeded') {
854 $errormessage =
"StatusOfRetrievedIntent is not succeeded: ".$paymentintent->status;
855 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
860 $_SESSION[
'paymentkosessioncode'] = $randomseckey;
862 $urlko .=
'&paymentkosessioncode='.urlencode($randomseckey);
870 $amount = $paymentintent->amount;
873 if (!empty($paymentintent->currency)) {
874 $currency = strtoupper($paymentintent->currency);
878 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
879 if (!in_array($currency, $arrayzerounitcurrency)) {
884 dol_syslog(
"StatusOfRetrievedIntent is succeeded for amount = ".$amount.
" currency = ".$currency, LOG_DEBUG, 0,
'_payment');
887 $_SESSION[
'paymentoksessioncode'] = $randomseckey;
889 $urlok .=
'&paymentoksessioncode='.urlencode($randomseckey);
896 $_SESSION[
"onlinetoken"] = $stripeToken;
897 $_SESSION[
"FinalPaymentAmt"] = $amount;
898 $_SESSION[
"currencyCodeType"] = $currency;
899 $_SESSION[
"paymentType"] =
'';
900 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
901 $_SESSION[
'payerID'] = is_object($customer) ? $customer->id :
'';
902 $_SESSION[
'TRANSACTIONID'] = (is_object($charge) ? $charge->id : (is_object($paymentintent) ? $paymentintent->id :
''));
903 $_SESSION[
'errormessage'] = $errormessage;
905 dol_syslog(
"Action charge stripe STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=".
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION').
" ip=".$remoteip, LOG_DEBUG, 0,
'_payment');
906 dol_syslog(
"_SERVER[HTTP_X_FORWARDED_HOST] = ".(empty($_SERVER[
"HTTP_X_FORWARDED_HOST"]) ?
'' :
dol_escape_htmltag($_SERVER[
"HTTP_X_FORWARDED_HOST"])), LOG_DEBUG, 0,
'_payment');
907 dol_syslog(
"_SERVER[SERVER_NAME] = ".(empty($_SERVER[
"SERVER_NAME"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_NAME"])), LOG_DEBUG, 0,
'_payment');
908 dol_syslog(
"_SERVER[SERVER_ADDR] = ".(empty($_SERVER[
"SERVER_ADDR"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_ADDR"])), LOG_DEBUG, 0,
'_payment');
909 dol_syslog(
"session_id=".session_id(), LOG_DEBUG, 0,
'_payment');
910 dol_syslog(
"onlinetoken=".$_SESSION[
"onlinetoken"].
" paymentoksessioncode=".$_SESSION[
"paymentoksessioncode"].
" paymentkosessioncode=".$_SESSION[
"paymentkosessioncode"], LOG_DEBUG, 0,
'_payment');
911 dol_syslog(
"FinalPaymentAmt=".$_SESSION[
"FinalPaymentAmt"].
" currencyCodeType=".$_SESSION[
"currencyCodeType"].
" payerID=".$_SESSION[
'payerID'].
" TRANSACTIONID=".$_SESSION[
'TRANSACTIONID'], LOG_DEBUG, 0,
'_payment');
912 dol_syslog(
"FULLTAG=".$FULLTAG, LOG_DEBUG, 0,
'_payment');
913 dol_syslog(
"error=".$error.
" errormessage=".$errormessage, LOG_DEBUG, 0,
'_payment');
914 dol_syslog(
"Now call the redirect to paymentok or paymentko, URL = ".($error ? $urlko : $urlok), LOG_DEBUG, 0,
'_payment');
917 header(
"Location: ".$urlko);
920 header(
"Location: ".$urlok);
927 'paymentmethod' => $paymentmethod,
928 'validpaymentmethod' => &$validpaymentmethod
930$reshook = $hookmanager->executeHooks(
'doPayment', $parameters,
$object, $action);
933} elseif ($reshook > 0) {
934 print $hookmanager->resPrint;
943$form =
new Form($db);
947 $head =
'<link rel="stylesheet" type="text/css" href="' .
getDolGlobalString(
'ONLINE_PAYMENT_CSS_URL').
'?lang='.(!empty($getpostlang) ? $getpostlang : $langs->defaultlang).
'">'.
"\n";
950$conf->dol_hide_topmenu = 1;
951$conf->dol_hide_leftmenu = 1;
953$replacemainarea = (empty(
$conf->dol_hide_leftmenu) ?
'<div>' :
'').
'<div>';
954llxHeader($head, $langs->trans(
"PaymentForm"),
'',
'', 0, 0,
'',
'',
'',
'onlinepaymentbody', $replacemainarea);
956dol_syslog(
"newpayment.php show page source=".$source.
" paymentmethod=".$paymentmethod.
' amount='.$amount.
' newamount='.
GETPOST(
"newamount",
'alpha').
" ref=".$ref, LOG_DEBUG, 0,
'_payment');
957dol_syslog(
"_SERVER[HTTP_X_FORWARDED_HOST] = ".(empty($_SERVER[
"HTTP_X_FORWARDED_HOST"]) ?
'' :
dol_escape_htmltag($_SERVER[
"HTTP_X_FORWARDED_HOST"])), LOG_DEBUG, 0,
'_payment');
958dol_syslog(
"_SERVER[SERVER_NAME] = ".(empty($_SERVER[
"SERVER_NAME"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_NAME"])), LOG_DEBUG, 0,
'_payment');
959dol_syslog(
"_SERVER[SERVER_ADDR] = ".(empty($_SERVER[
"SERVER_ADDR"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_ADDR"])), LOG_DEBUG, 0,
'_payment');
960dol_syslog(
"session_id=".session_id(), LOG_DEBUG, 0,
'_payment');
963if ($source && in_array($ref, array(
'member_ref',
'contractline_ref',
'invoice_ref',
'order_ref',
'donation_ref',
''))) {
964 $langs->load(
"errors");
965 dol_print_error_email(
'BADREFINPAYMENTFORM', $langs->trans(
"ErrorBadLinkSourceSetButBadValueForRef", $source, $ref));
974if ((empty($paymentmethod) || $paymentmethod ==
'paypal') && isModEnabled(
'paypal') && (
getDolGlobalString(
'PAYPAL_API_SANDBOX'))) {
975 dol_htmloutput_mesg($langs->trans(
'YouAreCurrentlyInSandboxMode',
'Paypal'), array(),
'warning');
977if ((empty($paymentmethod) || $paymentmethod ==
'stripe') && isModEnabled(
'stripe') && (!
getDolGlobalString(
'STRIPE_LIVE'))) {
978 dol_htmloutput_mesg($langs->trans(
'YouAreCurrentlyInSandboxMode',
'Stripe'), array(),
'warning');
982print
'<span id="dolpaymentspan"></span>'.
"\n";
983print
'<div class="center">'.
"\n";
984print
'<form id="dolpaymentform" class="center" name="paymentform" action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">'.
"\n";
985print
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
986print
'<input type="hidden" name="action" value="dopayment">'.
"\n";
987print
'<input type="hidden" name="tag" value="'.GETPOST(
"tag",
'alpha').
'">'.
"\n";
988print
'<input type="hidden" name="suffix" value="'.dol_escape_htmltag($suffix).
'">'.
"\n";
989print
'<input type="hidden" name="securekey" value="'.dol_escape_htmltag($SECUREKEY).
'">'.
"\n";
990print
'<input type="hidden" name="e" value="'.$entity.
'" />';
992print
'<input type="hidden" name="lang" value="'.$getpostlang.
'">';
993print
'<input type="hidden" name="ws" value="'.$ws.
'">';
999$logosmall = $mysoc->logo_small;
1000$logo = $mysoc->logo;
1001$paramlogo =
'ONLINE_PAYMENT_LOGO_'.$suffix;
1011if (!empty($logosmall) && is_readable(
$conf->mycompany->dir_output.
'/logos/thumbs/'.$logosmall)) {
1012 $urllogo = DOL_URL_ROOT.
'/viewimage.php?modulepart=mycompany&entity='.
$conf->entity.
'&file='.urlencode(
'logos/thumbs/'.$logosmall);
1013 $urllogofull =
$dolibarr_main_url_root.
'/viewimage.php?modulepart=mycompany&entity='.
$conf->entity.
'&file='.urlencode(
'logos/thumbs/'.$logosmall);
1014} elseif (!empty($logo) && is_readable(
$conf->mycompany->dir_output.
'/logos/'.$logo)) {
1015 $urllogo = DOL_URL_ROOT.
'/viewimage.php?modulepart=mycompany&entity='.
$conf->entity.
'&file='.urlencode(
'logos/'.$logo);
1022 $filehtmlheader =
dol_sanitizePathName(DOL_DATA_ROOT . (
$conf->entity > 1 ?
'/' .
$conf->entity :
'') .
'/website/' . $ws .
'/htmlheaderpayment.html');
1024 print file_get_contents(
dol_osencode($filehtmlheader));
1028if ($urllogo && !$ws) {
1029 print
'<div class="backgreypublicpayment">';
1030 print
'<div class="logopublicpayment">';
1031 print
'<img id="dolpaymentlogo" src="'.$urllogo.
'"';
1035 print
'<div class="poweredbypublicpayment opacitymedium right"><a class="poweredbyhref" href="https://www.dolibarr.org?utm_medium=website&utm_source=poweredby" target="dolibarr" rel="noopener">'.$langs->trans(
"PoweredBy").
'<br><img class="poweredbyimg" src="'.DOL_URL_ROOT.
'/theme/dolibarr_logo.svg" width="80px"></a></div>';
1038} elseif ($creditor && !$ws) {
1039 print
'<div class="backgreypublicpayment">';
1040 print
'<div class="logopublicpayment">';
1046 print
'<div class="backimagepublicpayment">';
1047 print
'<img id="idMAIN_IMAGE_PUBLIC_PAYMENT" src="'.getDolGlobalString(
'MAIN_IMAGE_PUBLIC_PAYMENT').
'">';
1054print
'<!-- Form to send a payment -->'.
"\n";
1055print
'<!-- creditor = '.dol_escape_htmltag((
string) $creditor).
' -->'.
"\n";
1057if (isModEnabled(
'paypal')) {
1058 print
'<!-- PAYPAL_API_SANDBOX = '.getDolGlobalString(
'PAYPAL_API_SANDBOX').
' -->'.
"\n";
1059 print
'<!-- PAYPAL_API_INTEGRAL_OR_PAYPALONLY = '.getDolGlobalString(
'PAYPAL_API_INTEGRAL_OR_PAYPALONLY').
' -->'.
"\n";
1061if (isModEnabled(
'paybox')) {
1062 print
'<!-- PAYBOX_CGI_URL = '.getDolGlobalString(
'PAYBOX_CGI_URL_V2').
' -->'.
"\n";
1064if (isModEnabled(
'stripe')) {
1065 print
'<!-- STRIPE_LIVE = '.getDolGlobalString(
'STRIPE_LIVE').
' -->'.
"\n";
1066 print
'<!-- STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION = '.getDolGlobalString(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION').
' -->'.
"\n";
1068print
'<!-- urlok = '.$urlok.
' -->'.
"\n";
1069print
'<!-- urlko = '.$urlko.
' -->'.
"\n";
1073print
'<table id="dolpublictable" summary="Payment form" class="center">'.
"\n";
1078 $langs->load(
"members");
1080 if (preg_match(
'/^\((.*)\)$/',
getDolGlobalString(
'PAYMENT_NEWFORM_TEXT'), $reg)) {
1081 $text .= $langs->trans($reg[1]).
"<br>\n";
1085 $text =
'<tr><td align="center"><br>'.$text.
'<br></td></tr>'.
"\n";
1088 $text .=
'<tr><td class="textpublicpayment"><br><strong>'.$langs->trans(
"WelcomeOnPaymentPage").
'</strong></td></tr>'.
"\n";
1089 $text .=
'<tr><td class="textpublicpayment"><span class="opacitymedium">'.$langs->trans(
"ThisScreenAllowsYouToPay", (
string) $creditor).
'</span><br><br></td></tr>'.
"\n";
1094print
'<tr><td align="center">';
1095print
'<table class="centpercent left" id="tablepublicpayment">';
1096print
'<tr class="hideonsmartphone"><td colspan="2" align="left" class="opacitymedium">'.$langs->trans(
"ThisIsInformationOnPayment").
' :</td></tr>'.
"\n";
1109 $tag =
GETPOST(
"tag",
'alpha');
1110 if (
GETPOST(
'fulltag',
'alpha')) {
1111 $fulltag =
GETPOST(
'fulltag',
'alpha');
1113 $fulltag =
"TAG=".$tag;
1117 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1118 print
'</td><td class="CTableRow2">';
1119 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1120 print
'<b>'.$creditor.
'</b>';
1121 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1122 print
'</td></tr>'.
"\n";
1125 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1126 if (empty($amount)) {
1127 print
' ('.$langs->trans(
"ToComplete").
')';
1129 print
'</td><td class="CTableRow2">';
1130 if (empty($amount) || !is_numeric($amount)) {
1131 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1132 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1134 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1136 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1137 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1138 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1140 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1141 print
'</td></tr>'.
"\n";
1144 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1145 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1146 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1147 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1148 print
'</td></tr>'.
"\n";
1156if ($source ==
'order') {
1158 $langs->load(
"orders");
1160 require_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
1163 $result = $order->fetch(0, $ref);
1165 $mesg = $order->error;
1168 $result = $order->fetch_thirdparty($order->socid);
1172 if ($action !=
'dopayment') {
1173 $amount = $order->total_ttc;
1174 if (
GETPOST(
"amount",
'alpha')) {
1175 $amount =
GETPOST(
"amount",
'alpha');
1181 if (
GETPOST(
'fulltag',
'alpha')) {
1182 $fulltag =
GETPOST(
'fulltag',
'alpha');
1184 $fulltag =
'ORD='.$order->id.
'.CUS='.$order->thirdparty->id;
1187 $fulltag .=
'.TAG='.$TAG;
1193 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1194 print
'</td><td class="CTableRow2"';
1195 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.$mysoc->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.$mysoc->tva_intra).
'"';
1197 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1198 print
'<b>'.$creditor.
'</b>';
1199 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1200 print
'</td></tr>'.
"\n";
1203 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1204 print
'</td><td class="CTableRow2"';
1205 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.$order->thirdparty->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.$order->thirdparty->tva_intra).
'"';
1207 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1208 print
'<b>'.$order->thirdparty->name.
'</b>';
1209 print
'</td></tr>'.
"\n";
1212 $text =
'<b>'.$langs->trans(
"PaymentOrderRef", $order->ref).
'</b>';
1213 if (
GETPOST(
'desc',
'alpha')) {
1214 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1216 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1217 print
'</td><td class="CTableRow2">'.$text;
1218 print
'<input type="hidden" name="s" value="'.dol_escape_htmltag($source).
'">';
1219 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($order->ref).
'">';
1220 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag((
string) $order->id).
'">';
1221 $directdownloadlink = $order->getLastMainDocLink(
'commande');
1222 if ($directdownloadlink) {
1223 print
'<br><a href="'.$directdownloadlink.
'" rel="nofollow noopener">';
1224 print
img_mime($order->last_main_doc,
'');
1225 print $langs->trans(
"DownloadDocument").
'</a>';
1227 print
'</td></tr>'.
"\n";
1230 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1231 if (empty($amount)) {
1232 print
' ('.$langs->trans(
"ToComplete").
')';
1234 print
'</td><td class="CTableRow2">';
1235 if (empty($amount) || !is_numeric($amount)) {
1236 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1237 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1239 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1241 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1242 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1243 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1245 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1246 print
'</td></tr>'.
"\n";
1249 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1250 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1251 print
'<input type="hidden" name="tag" value="'.dol_escape_htmltag($tag).
'">';
1252 print
'<input type="hidden" name="fulltag" value="'.dol_escape_htmltag($fulltag).
'">';
1253 print
'</td></tr>'.
"\n";
1256 $shipToName = $order->thirdparty->name;
1257 $shipToStreet = $order->thirdparty->address;
1258 $shipToCity = $order->thirdparty->town;
1259 $shipToState = $order->thirdparty->state_code;
1260 $shipToCountryCode = $order->thirdparty->country_code;
1261 $shipToZip = $order->thirdparty->zip;
1262 $shipToStreet2 =
'';
1263 $phoneNum = $order->thirdparty->phone;
1264 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1265 print
'<input type="hidden" name="shipToName" value="'.dol_escape_htmltag($shipToName).
'">'.
"\n";
1266 print
'<input type="hidden" name="shipToStreet" value="'.dol_escape_htmltag($shipToStreet).
'">'.
"\n";
1267 print
'<input type="hidden" name="shipToCity" value="'.dol_escape_htmltag($shipToCity).
'">'.
"\n";
1268 print
'<input type="hidden" name="shipToState" value="'.dol_escape_htmltag($shipToState).
'">'.
"\n";
1269 print
'<input type="hidden" name="shipToCountryCode" value="'.dol_escape_htmltag($shipToCountryCode).
'">'.
"\n";
1270 print
'<input type="hidden" name="shipToZip" value="'.dol_escape_htmltag($shipToZip).
'">'.
"\n";
1271 print
'<input type="hidden" name="shipToStreet2" value="'.dol_escape_htmltag($shipToStreet2).
'">'.
"\n";
1272 print
'<input type="hidden" name="phoneNum" value="'.dol_escape_htmltag($phoneNum).
'">'.
"\n";
1274 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1276 if (is_object($order->thirdparty)) {
1277 print
'<input type="hidden" name="thirdparty_id" value="'.$order->thirdparty->id.
'">'.
"\n";
1279 print
'<input type="hidden" name="email" value="'.$order->thirdparty->email.
'">'.
"\n";
1280 print
'<input type="hidden" name="vatnumber" value="'.dol_escape_htmltag($order->thirdparty->tva_intra).
'">'.
"\n";
1281 $labeldesc = $langs->trans(
"Order").
' '.$order->ref;
1282 if (
GETPOST(
'desc',
'alpha')) {
1283 $labeldesc =
GETPOST(
'desc',
'alpha');
1285 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1290if ($source ==
'invoice') {
1292 $langs->load(
"bills");
1293 $form->load_cache_types_paiements();
1295 require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
1298 $result = $invoice->fetch(0, $ref);
1300 $mesg = $invoice->error;
1303 $result = $invoice->fetch_thirdparty($invoice->socid);
1307 if ($action !=
'dopayment') {
1308 $amount =
price2num($invoice->total_ttc - ($invoice->getSommePaiement() + $invoice->getSumCreditNotesUsed() + $invoice->getSumDepositsUsed()));
1309 if (
GETPOST(
"amount",
'alpha')) {
1310 $amount =
GETPOST(
"amount",
'alpha');
1315 if (
GETPOST(
'fulltag',
'alpha')) {
1316 $fulltag =
GETPOST(
'fulltag',
'alpha');
1318 $fulltag =
'INV='.$invoice->id.
'.CUS='.$invoice->thirdparty->id;
1321 $fulltag .=
'.TAG='.$TAG;
1327 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1328 print
'</td><td class="CTableRow2"';
1329 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.$mysoc->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.$mysoc->tva_intra).
'"';
1331 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1332 print
'<b>'.$creditor.
'</b>';
1333 print
'<input type="hidden" name="creditor" value="'.dol_escape_htmltag((
string) $creditor).
'">';
1334 print
'</td></tr>'.
"\n";
1337 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1338 print
'</td><td class="CTableRow2"';
1339 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.$invoice->thirdparty->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.$invoice->thirdparty->tva_intra).
'"';
1341 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1342 print
'<b>'.$invoice->thirdparty->name.
'</b>';
1343 print
'</td></tr>'.
"\n";
1346 $text =
'<b>'.$langs->trans(
"PaymentInvoiceRef", $invoice->ref).
'</b>';
1347 if (
GETPOST(
'desc',
'alpha')) {
1348 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1350 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1351 print
'</td><td class="CTableRow2">'.$text;
1352 print
'<input type="hidden" name="s" value="'.dol_escape_htmltag($source).
'">';
1353 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($invoice->ref).
'">';
1354 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag((
string) $invoice->id).
'">';
1355 $directdownloadlink = $invoice->getLastMainDocLink(
'facture');
1356 if ($directdownloadlink) {
1357 print
'<br><a href="'.$directdownloadlink.
'">';
1358 print
img_mime($invoice->last_main_doc,
'');
1359 print $langs->trans(
"DownloadDocument").
'</a>';
1361 print
'</td></tr>'.
"\n";
1364 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentAmount");
1365 if (empty($amount) && empty(
$object->paye)) {
1366 print
' ('.$langs->trans(
"ToComplete").
')';
1368 print
'</td><td class="CTableRow2">';
1369 if (
$object->type == $object::TYPE_CREDIT_NOTE) {
1370 print
'<b>'.$langs->trans(
"CreditNote").
'</b>';
1371 } elseif (empty(
$object->paye)) {
1372 if (empty($amount) || !is_numeric($amount)) {
1373 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1374 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1375 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1377 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1378 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1379 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1382 print
'<b class="amount">'.price(
$object->total_ttc, 1, $langs, 1, -1, -1, $currency).
'</b>';
1384 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1385 print
'</td></tr>'.
"\n";
1388 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1389 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1390 print
'<input type="hidden" name="tag" value="'.(empty($tag) ?
'' : $tag).
'">';
1391 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1392 print
'</td></tr>'.
"\n";
1395 if ($invoice->status == $invoice::STATUS_VALIDATED && $invoice->mode_reglement_id > 0 && $form->cache_types_paiements[$invoice->mode_reglement_id][
"code"] ==
"VIR") {
1396 print
'<tr class="CTableRow2 center"><td class="CTableRow2" colspan="2">';
1397 print
'<div class="warning maxwidth1000">';
1398 print $langs->trans(
"PayOfBankTransferInvoice");
1400 print
'</td></tr>'.
"\n";
1404 $shipToName = $invoice->thirdparty->name;
1405 $shipToStreet = $invoice->thirdparty->address;
1406 $shipToCity = $invoice->thirdparty->town;
1407 $shipToState = $invoice->thirdparty->state_code;
1408 $shipToCountryCode = $invoice->thirdparty->country_code;
1409 $shipToZip = $invoice->thirdparty->zip;
1410 $shipToStreet2 =
'';
1411 $phoneNum = $invoice->thirdparty->phone;
1412 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1413 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
1414 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
1415 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
1416 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
1417 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
1418 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
1419 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
1420 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
1422 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1424 if (is_object($invoice->thirdparty)) {
1425 print
'<input type="hidden" name="thirdparty_id" value="'.$invoice->thirdparty->id.
'">'.
"\n";
1427 print
'<input type="hidden" name="email" value="'.$invoice->thirdparty->email.
'">'.
"\n";
1428 print
'<input type="hidden" name="vatnumber" value="'.$invoice->thirdparty->tva_intra.
'">'.
"\n";
1429 $labeldesc = $langs->trans(
"Invoice").
' '.$invoice->ref;
1430 if (
GETPOST(
'desc',
'alpha')) {
1431 $labeldesc =
GETPOST(
'desc',
'alpha');
1433 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1437if ($source ==
'contractline') {
1439 $langs->load(
"contracts");
1441 require_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
1446 $result = $contractline->fetch(0, $ref);
1448 $mesg = $contractline->error;
1451 if ($contractline->fk_contrat > 0) {
1452 $result = $contract->fetch($contractline->fk_contrat);
1454 $result = $contract->fetch_thirdparty($contract->socid);
1456 $mesg = $contract->error;
1460 $mesg =
'ErrorRecordNotFound';
1466 if ($action !=
'dopayment') {
1467 $amount = $contractline->total_ttc;
1469 if ($contractline->fk_product &&
getDolGlobalString(
'PAYMENT_USE_NEW_PRICE_FOR_CONTRACTLINES')) {
1471 $result = $product->fetch($contractline->fk_product);
1475 $pu_ht = $product->multiprices[$contract->thirdparty->price_level];
1476 $pu_ttc = $product->multiprices_ttc[$contract->thirdparty->price_level];
1477 $price_base_type = $product->multiprices_base_type[$contract->thirdparty->price_level];
1479 $pu_ht = $product->price;
1480 $pu_ttc = $product->price_ttc;
1481 $price_base_type = $product->price_base_type;
1485 if (empty($amount)) {
1491 if (
GETPOST(
"amount",
'alpha')) {
1492 $amount =
GETPOST(
"amount",
'alpha');
1497 if (
GETPOST(
'fulltag',
'alpha')) {
1498 $fulltag =
GETPOST(
'fulltag',
'alpha');
1500 $fulltag =
'COL='.$contractline->id.
'.CON='.$contract->id.
'.CUS='.$contract->thirdparty->id.
'.DAT='.
dol_print_date(
dol_now(),
'%Y%m%d%H%M%S');
1503 $fulltag .=
'.TAG='.$TAG;
1514 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1515 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
1516 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1517 print
'</td></tr>'.
"\n";
1520 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1521 print
'</td><td class="CTableRow2"><b>'.$contract->thirdparty->name.
'</b>';
1522 print
'</td></tr>'.
"\n";
1525 $text =
'<b>'.$langs->trans(
"PaymentRenewContractId", $contract->ref, $contractline->ref).
'</b>';
1526 if ($contractline->fk_product > 0) {
1527 $contractline->fetch_product();
1528 $text .=
'<br>'.$contractline->product->ref.($contractline->product->label ?
' - '.$contractline->product->label :
'');
1530 if ($contractline->description) {
1531 $text .=
'<br>'.dol_htmlentitiesbr($contractline->description);
1533 if ($contractline->date_end) {
1534 $text .=
'<br>'.$langs->trans(
"ExpiredSince").
': '.
dol_print_date($contractline->date_end);
1536 if (
GETPOST(
'desc',
'alpha')) {
1537 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1539 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1540 print
'</td><td class="CTableRow2">'.$text;
1541 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
1542 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($contractline->ref).
'">';
1543 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag((
string) $contractline->id).
'">';
1544 $directdownloadlink = $contract->getLastMainDocLink(
'contract');
1545 if ($directdownloadlink) {
1546 print
'<br><a href="'.$directdownloadlink.
'">';
1547 print
img_mime($contract->last_main_doc,
'');
1548 print $langs->trans(
"DownloadDocument").
'</a>';
1550 print
'</td></tr>'.
"\n";
1553 $label = $langs->trans(
"Quantity");
1556 if ($contractline->fk_product) {
1557 if ($contractline->product->isService() && $contractline->product->duration_value > 0) {
1558 $label = $langs->trans(
"Duration");
1561 if ($contractline->product->duration_value > 1) {
1562 $dur = array(
"h" => $langs->trans(
"Hours"),
"d" => $langs->trans(
"DurationDays"),
"w" => $langs->trans(
"DurationWeeks"),
"m" => $langs->trans(
"DurationMonths"),
"y" => $langs->trans(
"DurationYears"));
1564 $dur = array(
"h" => $langs->trans(
"Hour"),
"d" => $langs->trans(
"DurationDay"),
"w" => $langs->trans(
"DurationWeek"),
"m" => $langs->trans(
"DurationMonth"),
"y" => $langs->trans(
"DurationYear"));
1566 $duration = $contractline->product->duration_value.
' '.$dur[$contractline->product->duration_unit];
1569 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$label.
'</td>';
1570 print
'<td class="CTableRow2"><b>'.($duration ? $duration : $qty).
'</b>';
1571 print
'<input type="hidden" name="newqty" value="'.dol_escape_htmltag((
string) $qty).
'">';
1572 print
'</b></td></tr>'.
"\n";
1575 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1576 if (empty($amount)) {
1577 print
' ('.$langs->trans(
"ToComplete").
')';
1579 print
'</td><td class="CTableRow2">';
1580 if (empty($amount) || !is_numeric($amount)) {
1581 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1582 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1584 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1586 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1587 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1588 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1590 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1591 print
'</td></tr>'.
"\n";
1594 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1595 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1596 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1597 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1598 print
'</td></tr>'.
"\n";
1601 $shipToName = $contract->thirdparty->name;
1602 $shipToStreet = $contract->thirdparty->address;
1603 $shipToCity = $contract->thirdparty->town;
1604 $shipToState = $contract->thirdparty->state_code;
1605 $shipToCountryCode = $contract->thirdparty->country_code;
1606 $shipToZip = $contract->thirdparty->zip;
1607 $shipToStreet2 =
'';
1608 $phoneNum = $contract->thirdparty->phone;
1609 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1610 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
1611 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
1612 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
1613 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
1614 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
1615 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
1616 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
1617 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
1619 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1621 if (is_object($contract->thirdparty)) {
1622 print
'<input type="hidden" name="thirdparty_id" value="'.$contract->thirdparty->id.
'">'.
"\n";
1624 print
'<input type="hidden" name="email" value="'.$contract->thirdparty->email.
'">'.
"\n";
1625 print
'<input type="hidden" name="vatnumber" value="'.$contract->thirdparty->tva_intra.
'">'.
"\n";
1626 $labeldesc = $langs->trans(
"Contract").
' '.$contract->ref;
1627 if (
GETPOST(
'desc',
'alpha')) {
1628 $labeldesc =
GETPOST(
'desc',
'alpha');
1630 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1634if ($source ==
'member' || $source ==
'membersubscription') {
1635 $newsource =
'member';
1639 $langs->load(
"members");
1641 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
1642 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent_type.class.php';
1643 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/subscription.class.php';
1648 $result = $member->fetch(0, $ref, 0,
'',
true,
true);
1650 $mesg = $member->error;
1653 $member->fetch_thirdparty();
1655 $adht->fetch($member->typeid);
1659 if ($action !=
'dopayment') {
1660 $amount = $member->last_subscription_amount;
1661 if (
GETPOST(
"amount",
'alpha')) {
1665 if (empty($amount)) {
1666 $amount = $adht->amount;
1669 $amount = max(0,
price2num($amount,
'MT'));
1672 if (
GETPOST(
'fulltag',
'alpha')) {
1673 $fulltag =
GETPOST(
'fulltag',
'alpha');
1678 $fulltag .=
'.TAG='.$TAG;
1684 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1685 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
1686 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1687 print
'</td></tr>'.
"\n";
1690 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Member");
1691 print
'</td><td class="CTableRow2">';
1693 if ($member->morphy ==
'mor' && !empty($member->company)) {
1694 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1695 print $member->company;
1697 print
img_picto(
'',
'member',
'class="pictofixedwidth"');
1698 print $member->getFullName($langs);
1701 print
'</td></tr>'.
"\n";
1704 $text =
'<b>'.$langs->trans(
"PaymentSubscription").
'</b>';
1705 if (
GETPOST(
'desc',
'alpha')) {
1706 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1708 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1709 print
'</td><td class="CTableRow2">'.$text;
1710 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($newsource).
'">';
1711 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($member->ref).
'">';
1712 print
'</td></tr>'.
"\n";
1715 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"DateEndSubscription");
1716 print
'</td><td class="CTableRow2">'.dol_print_date($member->datefin,
'day');
1717 print
'</td></tr>'.
"\n";
1720 if ($member->last_subscription_date || $member->last_subscription_amount) {
1723 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastSubscriptionDate");
1724 print
'</td><td class="CTableRow2">'.dol_print_date($member->last_subscription_date,
'day');
1725 print
'</td></tr>'.
"\n";
1729 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastSubscriptionAmount");
1730 print
'</td><td class="CTableRow2">'.price($member->last_subscription_amount);
1731 print
'</td></tr>'.
"\n";
1733 if (empty($amount) && !
GETPOST(
'newamount',
'alpha')) {
1734 $_GET[
'newamount'] = $member->last_subscription_amount;
1735 $_GET[
'amount'] = $member->last_subscription_amount;
1737 if (!empty($member->last_subscription_amount) && !GETPOSTISSET(
'newamount') && is_numeric($amount)) {
1738 $amount = max($member->last_subscription_amount, $amount);
1742 $amountbytype = $adht->amountByType(1);
1744 $typeid = $adht->id;
1745 $caneditamount = $adht->caneditamount;
1747 if ($member->type) {
1748 $oldtypeid = $member->typeid;
1749 $newtypeid = (int) (GETPOSTISSET(
"typeid") ?
GETPOSTINT(
"typeid") : $member->typeid);
1751 $typeid = $newtypeid;
1752 $adht->fetch($typeid);
1755 $caneditamount = $adht->caneditamount;
1759 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastMemberType");
1760 print
'</td><td class="CTableRow2">'.dol_escape_htmltag($member->type);
1761 print
"</td></tr>\n";
1764 $member->typeid = $newtypeid;
1765 $member->type = (string)
dol_getIdFromCode($db, $newtypeid,
'adherent_type',
'rowid',
'libelle');
1771 $amount = (!empty($amountbytype[$member->typeid])) ? $amountbytype[$member->typeid] : $member->last_subscription_amount;
1773 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"NewSubscription");
1774 print
'</td><td class="CTableRow2">';
1775 print $form->selectarray(
"typeid", $adht->liste_array(1), $member->typeid, 0, 0, 0,
'onchange="window.location.replace(\''.$urlwithroot.
'/public/payment/newpayment.php?source='.urlencode($source).
'&ref='.urlencode($ref).
'&amount='.urlencode($amount).
'&typeid=\' + this.value + \'&securekey='.urlencode($SECUREKEY).
'\');
"', 0, 0, 0, '', '', 1);
1776 print "</td></tr>\n
";
1777 } elseif ($action == 'dopayment') {
1778 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("NewMemberType
");
1779 print '</td><td class="CTableRow2
">'.dol_escape_htmltag($member->type);
1780 print '<input type="hidden
" name="membertypeid
" value="'.$member->typeid.'">';
1781 print "</td></tr>\n
";
1784 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("MemberType
");
1785 print '</td><td class="CTableRow2
">'.dol_escape_htmltag($member->type);
1786 print "</td></tr>\n
";
1790 // Set amount for the subscription from the the type and options:
1791 // - First check the amount of the member type if not previous payment.
1792 $amount = ($member->last_subscription_amount ? $member->last_subscription_amount : (empty($amountbytype[$typeid]) ? 0 : $amountbytype[$typeid]));
1793 // - If not found, take the default amount
1794 if (empty($amount) && getDolGlobalString('MEMBER_NEWFORM_AMOUNT')) {
1795 $amount = getDolGlobalString('MEMBER_NEWFORM_AMOUNT');
1797 // - If an amount was posted from the form (for example from page with types of membership)
1798 if ($caneditamount && GETPOSTISSET('amount') && GETPOSTFLOAT('amount', 'MT') > 0) {
1799 $amount = GETPOSTFLOAT('amount', 'MT');
1801 // - If a new amount was posted from the form
1802 if ($caneditamount && GETPOSTISSET('newamount') && GETPOSTFLOAT('newamount', 'MT') > 0) {
1803 $amount = GETPOSTFLOAT('newamount', 'MT');
1805 // - If a min is set or an amount from the posted form, we take them into account
1806 $amount = max(0, (float) $amount, (float) getDolGlobalInt("MEMBER_MIN_AMOUNT
"));
1809 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Amount
");
1810 // This place no longer allows amount edition
1811 if (getDolGlobalString('MEMBER_EXT_URL_SUBSCRIPTION_INFO')) {
1812 print ' - <a href="' . getDolGlobalString('MEMBER_EXT_URL_SUBSCRIPTION_INFO
').'" rel="external
" target="_blank
" rel="noopener noreferrer
">'.$langs->trans("SeeHere
").'</a>';
1814 print '</td><td class="CTableRow2
">';
1816 $caneditamount = $adht->caneditamount;
1817 $minimumamount = !getDolGlobalString('MEMBER_MIN_AMOUNT') ? $adht->amount : max(getDolGlobalString('MEMBER_MIN_AMOUNT'), $adht->amount, $amount);
1819 if ($caneditamount && $action != 'dopayment') {
1820 if (GETPOSTISSET('newamount')) {
1821 print '<input type="text
" class="width75
" name="newamount
" value="'.price(price2num(GETPOST('newamount
'), '', 2), 1, $langs, 1, -1, -1).'">';
1823 print '<input type="text
" class="width75
" name="newamount
" value="'.price($amount, 1, $langs, 1, -1, -1).'">';
1826 print '<b class="amount
">'.price($amount, 1, $langs, 1, -1, -1, $currency).'</b>'; // Price with currency
1827 if ($minimumamount > $amount) {
1828 print ' <span class="opacitymedium small
">'. $langs->trans("AmountIsLowerToMinimumNotice
", price($minimumamount, 1, $langs, 1, -1, -1, $currency)).'</span>';
1830 print '<input type="hidden
" name="newamount
" value="'.$amount.'">';
1832 print '<input type="hidden
" name="amount
" value="'.$amount.'">';
1833 print '<input type="hidden
" name="currency
" value="'.$currency.'">';
1834 print '</td></tr>'."\n
";
1837 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("PaymentCode
");
1838 print '</td><td class="CTableRow2
"><b style="word-
break:
break-all;
">'.$fulltag.'</b>';
1839 print '<input type="hidden
" name="tag
" value="'.$tag.'">';
1840 print '<input type="hidden
" name="fulltag
" value="'.$fulltag.'">';
1841 print '</td></tr>'."\n
";
1844 $shipToName = $member->getFullName($langs);
1845 $shipToStreet = $member->address;
1846 $shipToCity = $member->town;
1847 $shipToState = $member->state_code;
1848 $shipToCountryCode = $member->country_code;
1849 $shipToZip = $member->zip;
1850 $shipToStreet2 = '';
1851 $phoneNum = $member->phone;
1852 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1853 print '<!-- Shipping address information -->';
1854 print '<input type="hidden
" name="shipToName
" value="'.$shipToName.'">'."\n
";
1855 print '<input type="hidden
" name="shipToStreet
" value="'.$shipToStreet.'">'."\n
";
1856 print '<input type="hidden
" name="shipToCity
" value="'.$shipToCity.'">'."\n
";
1857 print '<input type="hidden
" name="shipToState
" value="'.$shipToState.'">'."\n
";
1858 print '<input type="hidden
" name="shipToCountryCode
" value="'.$shipToCountryCode.'">'."\n
";
1859 print '<input type="hidden
" name="shipToZip
" value="'.$shipToZip.'">'."\n
";
1860 print '<input type="hidden
" name="shipToStreet2
" value="'.$shipToStreet2.'">'."\n
";
1861 print '<input type="hidden
" name="phoneNum
" value="'.$phoneNum.'">'."\n
";
1863 print '<!-- Shipping address not complete, so we don t use it -->'."\n
";
1865 if (is_object($member->thirdparty)) {
1866 print '<input type="hidden
" name="thirdparty_id
" value="'.$member->thirdparty->id.'">'."\n
";
1868 print '<input type="hidden
" name="email" value="'.$member->email.'">'."\n
";
1869 $labeldesc = $langs->trans("PaymentSubscription
");
1870 if (GETPOST('desc', 'alpha')) {
1871 $labeldesc = GETPOST('desc', 'alpha');
1873 print '<input type="hidden
" name="desc
" value="'.dol_escape_htmltag($labeldesc).'">'."\n
";
1876// Payment on donation
1877if ($source == 'donation') {
1879 $langs->load("don
");
1881 require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php';
1883 $don = new Don($db);
1884 // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
1885 $result = $don->fetch((int) $ref);
1887 $mesg = $don->error;
1890 $don->fetch_thirdparty();
1894 if ($action != 'dopayment') { // Do not change amount if we just click on first dopayment
1895 if (GETPOST("amount
", 'alpha')) {
1896 $amount = GETPOST("amount
", 'alpha');
1898 $amount = $don->getRemainToPay();
1900 $amount = price2num($amount);
1903 if (GETPOST('fulltag', 'alpha')) {
1904 $fulltag = GETPOST('fulltag', 'alpha');
1906 $fulltag = 'DON='.$don->ref.'.DAT='.dol_print_date(dol_now(), '%Y%m%d%H%M%S');
1909 $fulltag .= '.TAG='.$TAG;
1912 $fulltag = dol_string_unaccent($fulltag);
1915 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Creditor
");
1916 print '</td><td class="CTableRow2
"><b>'.$creditor.'</b>';
1917 print '<input type="hidden
" name="creditor
" value="'.$creditor.'">';
1918 print '</td></tr>'."\n
";
1921 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("ThirdParty
");
1922 print '</td><td class="CTableRow2
"><b>';
1923 if ($don->morphy == 'mor' && !empty($don->societe)) {
1924 print $don->societe;
1926 print $don->getFullName($langs);
1929 print '</td></tr>'."\n
";
1933 if (GETPOST('desc', 'alpha')) {
1934 $text = '<b>'.$langs->trans(GETPOST('desc', 'alpha')).'</b>';
1936 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Designation
");
1937 print '</td><td class="CTableRow2
">'.$text;
1938 print '<input type="hidden
" name="source
" value="'.dol_escape_htmltag($source).'">';
1939 print '<input type="hidden
" name="ref" value="'.dol_escape_htmltag($don->ref).'">';
1940 print '</td></tr>'."\n
";
1943 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Amount
");
1944 if (empty($amount)) {
1945 if (!getDolGlobalString('DONATION_NEWFORM_AMOUNT')) {
1946 print ' ('.$langs->trans("ToComplete
");
1948 if (getDolGlobalString('DONATION_EXT_URL_SUBSCRIPTION_INFO')) {
1949 print ' - <a href="' . getDolGlobalString('DONATION_EXT_URL_SUBSCRIPTION_INFO
').'" rel="external
" target="_blank
" rel="noopener noreferrer
">'.$langs->trans("SeeHere
").'</a>';
1951 if (!getDolGlobalString('DONATION_NEWFORM_AMOUNT')) {
1955 print '</td><td class="CTableRow2
">';
1957 if (empty($amount) || !is_numeric($amount)) {
1958 $valtoshow = price2num(GETPOST("newamount
", 'alpha'), 'MT');
1959 // force default subscription amount to value defined into constant...
1960 if (empty($valtoshow)) {
1961 if (getDolGlobalString('DONATION_NEWFORM_EDITAMOUNT')) {
1962 if (getDolGlobalString('DONATION_NEWFORM_AMOUNT')) {
1963 $valtoshow = getDolGlobalString('DONATION_NEWFORM_AMOUNT');
1966 if (getDolGlobalString('DONATION_NEWFORM_AMOUNT')) {
1967 $amount = getDolGlobalString('DONATION_NEWFORM_AMOUNT');
1972 if (empty($amount) || !is_numeric($amount)) {
1973 //$valtoshow=price2num(GETPOST("newamount
",'alpha'),'MT');
1974 if (getDolGlobalString('DONATION_MIN_AMOUNT') && $valtoshow) {
1975 $valtoshow = max(getDolGlobalString('DONATION_MIN_AMOUNT'), $valtoshow);
1977 print '<input type="hidden
" name="amount
" value="'.price2num(GETPOST("amount", 'alpha
'), 'MT
').'">';
1978 print '<input class="flat maxwidth75
" type="text
" name="newamount
" value="'.$valtoshow.'">';
1980 print ' <b>'.$langs->trans("Currency
".$currency).'</b>';
1982 $valtoshow = $amount;
1983 if (getDolGlobalString('DONATION_MIN_AMOUNT') && $valtoshow) {
1984 $valtoshow = max(getDolGlobalString('DONATION_MIN_AMOUNT'), $valtoshow);
1985 $amount = $valtoshow;
1987 print '<b class="amount
">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).'</b>'; // Price with currency
1988 print '<input type="hidden
" name="amount
" value="'.$valtoshow.'">';
1989 print '<input type="hidden
" name="newamount
" value="'.$valtoshow.'">';
1991 print '<input type="hidden
" name="currency
" value="'.$currency.'">';
1992 print '</td></tr>'."\n
";
1995 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("PaymentCode
");
1996 print '</td><td class="CTableRow2
"><b style="word-
break:
break-all;
">'.$fulltag.'</b>';
1997 print '<input type="hidden
" name="tag
" value="'.$tag.'">';
1998 print '<input type="hidden
" name="fulltag
" value="'.$fulltag.'">';
1999 print '</td></tr>'."\n
";
2002 $shipToName = $don->getFullName($langs);
2003 $shipToStreet = $don->address;
2004 $shipToCity = $don->town;
2005 $shipToState = $don->state_code;
2006 $shipToCountryCode = $don->country_code;
2007 $shipToZip = $don->zip;
2008 $shipToStreet2 = '';
2009 $phoneNum = $don->phone;
2010 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2011 print '<!-- Shipping address information -->';
2012 print '<input type="hidden
" name="shipToName
" value="'.$shipToName.'">'."\n
";
2013 print '<input type="hidden
" name="shipToStreet
" value="'.$shipToStreet.'">'."\n
";
2014 print '<input type="hidden
" name="shipToCity
" value="'.$shipToCity.'">'."\n
";
2015 print '<input type="hidden
" name="shipToState
" value="'.$shipToState.'">'."\n
";
2016 print '<input type="hidden
" name="shipToCountryCode
" value="'.$shipToCountryCode.'">'."\n
";
2017 print '<input type="hidden
" name="shipToZip
" value="'.$shipToZip.'">'."\n
";
2018 print '<input type="hidden
" name="shipToStreet2
" value="'.$shipToStreet2.'">'."\n
";
2019 print '<input type="hidden
" name="phoneNum
" value="'.$phoneNum.'">'."\n
";
2021 print '<!-- Shipping address not complete, so we don t use it -->'."\n
";
2023 if (is_object($don->thirdparty)) {
2024 print '<input type="hidden
" name="thirdparty_id
" value="'.$don->thirdparty->id.'">'."\n
";
2026 print '<input type="hidden
" name="email" value="'.$don->email.'">'."\n
";
2027 $labeldesc = $langs->trans("PaymentSubscription
");
2028 if (GETPOST('desc', 'alpha')) {
2029 $labeldesc = GETPOST('desc', 'alpha');
2031 print '<input type="hidden
" name="desc
" value="'.dol_escape_htmltag($labeldesc).'">'."\n
";
2034if ($source == 'organizedeventregistration' && is_object($thirdparty)) {
2036 $langs->loadLangs(array("members
", "eventorganization
"));
2038 if (GETPOST('fulltag', 'alpha')) {
2039 $fulltag = GETPOST('fulltag', 'alpha');
2041 $fulltag = 'ATT='.$attendee->id.'.DAT='.dol_print_date(dol_now(), '%Y%m%d%H%M%S');
2044 $fulltag .= '.TAG='.$TAG;
2047 $fulltag = dol_string_unaccent($fulltag);
2050 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Creditor
");
2051 print '</td><td class="CTableRow2
"><b>'.$creditor.'</b>';
2052 print '<input type="hidden
" name="creditor
" value="'.$creditor.'">';
2053 print '</td></tr>'."\n
";
2056 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Attendee
");
2057 print '</td><td class="CTableRow2
"><b>';
2058 print $attendee->email;
2059 print($thirdparty->name ? ' ('.$thirdparty->name.')' : '');
2061 print '</td></tr>'."\n
";
2063 if (! is_object($attendee->project)) {
2064 $text = 'ErrorProjectNotFound';
2066 $text = $langs->trans("PaymentEvent
").' - '.$attendee->project->title;
2070 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Designation
");
2071 print '</td><td class="CTableRow2
"><b>'.$text.'</b>';
2072 print '<input type="hidden
" name="source
" value="'.dol_escape_htmltag($source).'">';
2073 print '<input type="hidden
" name="ref" value="'.dol_escape_htmltag((string) $invoice->id).'">';
2074 print '</td></tr>'."\n
";
2077 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Amount
");
2078 print '</td><td class="CTableRow2
">';
2079 $valtoshow = $amount;
2080 print '<b class="amount
">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).'</b>'; // Price with currency
2081 print '<input type="hidden
" name="amount
" value="'.$valtoshow.'">';
2082 print '<input type="hidden
" name="newamount
" value="'.$valtoshow.'">';
2083 print '<input type="hidden
" name="currency
" value="'.$currency.'">';
2084 print '</td></tr>'."\n
";
2087 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("PaymentCode
");
2088 print '</td><td class="CTableRow2
"><b style="word-
break:
break-all;
">'.$fulltag.'</b>';
2089 print '<input type="hidden
" name="tag
" value="'.$tag.'">';
2090 print '<input type="hidden
" name="fulltag
" value="'.$fulltag.'">';
2091 print '</td></tr>'."\n
";
2094 $shipToName = $thirdparty->getFullName($langs);
2095 $shipToStreet = $thirdparty->address;
2096 $shipToCity = $thirdparty->town;
2097 $shipToState = $thirdparty->state_code;
2098 $shipToCountryCode = $thirdparty->country_code;
2099 $shipToZip = $thirdparty->zip;
2100 $shipToStreet2 = '';
2101 $phoneNum = $thirdparty->phone;
2102 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2103 print '<!-- Shipping address information -->';
2104 print '<input type="hidden
" name="shipToName
" value="'.$shipToName.'">'."\n
";
2105 print '<input type="hidden
" name="shipToStreet
" value="'.$shipToStreet.'">'."\n
";
2106 print '<input type="hidden
" name="shipToCity
" value="'.$shipToCity.'">'."\n
";
2107 print '<input type="hidden
" name="shipToState
" value="'.$shipToState.'">'."\n
";
2108 print '<input type="hidden
" name="shipToCountryCode
" value="'.$shipToCountryCode.'">'."\n
";
2109 print '<input type="hidden
" name="shipToZip
" value="'.$shipToZip.'">'."\n
";
2110 print '<input type="hidden
" name="shipToStreet2
" value="'.$shipToStreet2.'">'."\n
";
2111 print '<input type="hidden
" name="phoneNum
" value="'.$phoneNum.'">'."\n
";
2113 print '<!-- Shipping address not complete, so we don t use it -->'."\n
";
2115 print '<input type="hidden
" name="thirdparty_id
" value="'.$thirdparty->id.'">'."\n
";
2116 print '<input type="hidden
" name="email" value="'.$thirdparty->email.'">'."\n
";
2117 $labeldesc = $langs->trans("PaymentSubscription
");
2118 if (GETPOST('desc', 'alpha')) {
2119 $labeldesc = GETPOST('desc', 'alpha');
2121 print '<input type="hidden
" name="desc
" value="'.dol_escape_htmltag($labeldesc).'">'."\n
";
2124if ($source == 'boothlocation') {
2126 $langs->load("members
");
2128 if (GETPOST('fulltag', 'alpha')) {
2129 $fulltag = GETPOST('fulltag', 'alpha');
2131 $fulltag = 'BOO='.GETPOST("booth
").'.DAT='.dol_print_date(dol_now(), '%Y%m%d%H%M%S');
2134 $fulltag .= '.TAG='.$TAG;
2137 $fulltag = dol_string_unaccent($fulltag);
2140 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Creditor
");
2141 print '</td><td class="CTableRow2
"><b>'.$creditor.'</b>';
2142 print '<input type="hidden
" name="creditor
" value="'.$creditor.'">';
2143 print '</td></tr>'."\n
";
2146 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Attendee
");
2147 print '</td><td class="CTableRow2
"><b>';
2148 print $thirdparty->name;
2150 print '</td></tr>'."\n
";
2153 $text = '<b>'.$langs->trans("PaymentBoothLocation
").'</b>';
2154 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Designation
");
2155 print '</td><td class="CTableRow2
">'.$text;
2156 print '<input type="hidden
" name="source
" value="'.dol_escape_htmltag($source).'">';
2157 print '<input type="hidden
" name="ref" value="'.dol_escape_htmltag((string) $invoice->id).'">';
2158 print '</td></tr>'."\n
";
2161 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Amount
");
2162 print '</td><td class="CTableRow2
">';
2163 $valtoshow = $amount;
2164 print '<b class="amount
">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).'</b>'; // Price with currency
2165 print '<input type="hidden
" name="amount
" value="'.$valtoshow.'">';
2166 print '<input type="hidden
" name="newamount
" value="'.$valtoshow.'">';
2167 print '<input type="hidden
" name="currency
" value="'.$currency.'">';
2168 print '</td></tr>'."\n
";
2171 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("PaymentCode
");
2172 print '</td><td class="CTableRow2
"><b style="word-
break:
break-all;
">'.$fulltag.'</b>';
2173 print '<input type="hidden
" name="tag
" value="'.$tag.'">';
2174 print '<input type="hidden
" name="fulltag
" value="'.$fulltag.'">';
2175 print '</td></tr>'."\n
";
2178 $shipToName = $thirdparty->getFullName($langs);
2179 $shipToStreet = $thirdparty->address;
2180 $shipToCity = $thirdparty->town;
2181 $shipToState = $thirdparty->state_code;
2182 $shipToCountryCode = $thirdparty->country_code;
2183 $shipToZip = $thirdparty->zip;
2184 $shipToStreet2 = '';
2185 $phoneNum = $thirdparty->phone;
2186 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2187 print '<!-- Shipping address information -->';
2188 print '<input type="hidden
" name="shipToName
" value="'.$shipToName.'">'."\n
";
2189 print '<input type="hidden
" name="shipToStreet
" value="'.$shipToStreet.'">'."\n
";
2190 print '<input type="hidden
" name="shipToCity
" value="'.$shipToCity.'">'."\n
";
2191 print '<input type="hidden
" name="shipToState
" value="'.$shipToState.'">'."\n
";
2192 print '<input type="hidden
" name="shipToCountryCode
" value="'.$shipToCountryCode.'">'."\n
";
2193 print '<input type="hidden
" name="shipToZip
" value="'.$shipToZip.'">'."\n
";
2194 print '<input type="hidden
" name="shipToStreet2
" value="'.$shipToStreet2.'">'."\n
";
2195 print '<input type="hidden
" name="phoneNum
" value="'.$phoneNum.'">'."\n
";
2197 print '<!-- Shipping address not complete, so we don t use it -->'."\n
";
2199 print '<input type="hidden
" name="thirdparty_id
" value="'.$thirdparty->id.'">'."\n
";
2200 print '<input type="hidden
" name="email" value="'.$thirdparty->email.'">'."\n
";
2201 $labeldesc = $langs->trans("PaymentSubscription
");
2202 if (GETPOST('desc', 'alpha')) {
2203 $labeldesc = GETPOST('desc', 'alpha');
2205 print '<input type="hidden
" name="desc
" value="'.dol_escape_htmltag($labeldesc).'">'."\n
";
2208if (!$found && !$mesg) {
2209 $mesg = $langs->trans("ErrorBadParameters
");
2213 print '<tr><td align="center
" colspan="2
"><br><div class="warning
">'.dol_escape_htmltag($mesg, 1, 1, 'br').'</div></td></tr>'."\n
";
2216print '</table>'."\n
";
2220// Show all payment mode buttons (Stripe, Paypal, ...)
2221if ($action != 'dopayment') {
2222 if ($found && !$error) { // We are in a management option and no error
2223 // Check status of the object (Invoice) to verify if it is paid by external payment modules (ie Payzen, ...)
2225 'source' => $source,
2228 // @phan-suppress-next-line PhanTypeMismatchArgumentNullable
2229 $reshook = $hookmanager->executeHooks('doCheckStatus', $parameters, $object, $action);
2231 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
2232 } elseif ($reshook > 0) {
2233 print $hookmanager->resPrint;
2236 if ($source == 'order' && $object->billed) {
2237 print '<br><br><div class="amountpaymentcomplete size12x wrapimp
">'.$langs->trans("OrderBilled
").'</div>';
2238 } elseif ($source == 'invoice' && $object->paye) {
2239 print '<br><br><div class="amountpaymentcomplete size12x wrapimp
">'.$langs->trans("InvoicePaid
").'</div>';
2240 } elseif ($source == 'donation' && $object->paid) {
2241 print '<br><br><div class="amountpaymentcomplete size12x wrapimp
">'.$langs->trans("DonationPaid
").'</div>';
2243 // Membership can be paid and we still allow to make renewal
2244 if (($source == 'member' || $source == 'membersubscription') && $object->datefin > dol_now()) {
2245 $langs->load("members
");
2246 print '<br><div class="amountpaymentcomplete size12x wrapimp
">';
2247 $s = $langs->trans("MembershipPaid
", '{s1}');
2248 print str_replace('{s1}', '<span class="nobold
">'.dol_print_date($object->datefin, 'day').'</span>', $s);
2250 print '<div class="opacitymedium margintoponly
">'.$langs->trans("PaymentWillBeRecordedForNextPeriod
").'</div>';
2254 // Buttons for all payments registration methods
2256 // This hook is used to add Button to newpayment.php for external payment modules (ie Payzen, ...)
2258 'paymentmethod' => $paymentmethod
2260 $reshook = $hookmanager->executeHooks('doAddButton', $parameters, $object, $action);
2262 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
2263 } elseif ($reshook >= 0) {
2264 print $hookmanager->resPrint;
2267 if ((empty($paymentmethod) || $paymentmethod == 'paybox') && isModEnabled('paybox')) {
2268 print '<div class="button buttonpayment
" id="div_dopayment_paybox
"><span class="fa fa-credit-card
"></span> <input class="" type="submit
" id="dopayment_paybox
" name="dopayment_paybox
" value="'.$langs->trans("PayBoxDoPayment").'">';
2270 print '<span class="buttonpaymentsmall
">'.$langs->trans("CreditOrDebitCard
").'</span>';
2273 $( document ).ready(function() {
2274 $("#div_dopayment_paybox
").click(function(){
2275 $("#dopayment_paybox
").click();
2277 $("#dopayment_paybox
").click(function(e){
2278 $("#div_dopayment_paybox
").css( \'cursor\', \'wait\' );
2279 e.stopPropagation();
2286 if ((empty($paymentmethod) || $paymentmethod == 'stripe') && isModEnabled('stripe')) {
2288 if (getDolGlobalString(strtoupper($source).'_FORCE_DISABLE_STRIPE')) { // Example: MEMBER_FORCE_DISABLE_STRIPE
2293 // By default noidempotency is set to 1, to avoid the error "Keys
for idempotant requests...
". It means we can pay several times the same tag/ref.
2294 // If STRIPE_USE_IDEMPOTENCY_BY_DEFAULT is set or param noidempotency=0 is added, then with add an idempotent key, so we must use a different tag/ref for each payment (if not we will get an error).
2295 $noidempotency_key = (GETPOSTISSET('noidempotency') ? GETPOSTINT('noidempotency') : (getDolGlobalInt('STRIPE_USE_IDEMPOTENCY_BY_DEFAULT') ? 0 : 1));
2297 print '<div class="button buttonpayment
" id="div_dopayment_stripe
"><span class="fa fa-credit-card
"></span> <input class="" type="submit
" id="dopayment_stripe
" name="dopayment_stripe
" value="'.$langs->trans("StripeDoPayment").'">';
2298 print '<input type="hidden
" name="noidempotency
" value="'.$noidempotency_key.'">';
2300 print '<span class="buttonpaymentsmall
">'.$langs->trans("CreditOrDebitCard
").'</span>';
2303 $( document ).ready(function() {
2304 $("#div_dopayment_stripe
").click(function(){
2305 $("#dopayment_stripe
").click();
2307 $("#dopayment_stripe
").click(function(e){
2308 $("#div_dopayment_stripe
").css( \'cursor\', \'wait\' );
2309 e.stopPropagation();
2318 if ((empty($paymentmethod) || $paymentmethod == 'paypal') && isModEnabled('paypal')) {
2319 if (!getDolGlobalString('PAYPAL_API_INTEGRAL_OR_PAYPALONLY')) {
2320 $conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY = 'integral';
2324 if (getDolGlobalString(strtoupper($source).'_FORCE_DISABLE_PAYPAL')) { // Example: MEMBER_FORCE_DISABLE_PAYPAL
2329 print '<div class="button buttonpayment
" id="div_dopayment_paypal
">';
2330 if (getDolGlobalString('PAYPAL_API_INTEGRAL_OR_PAYPALONLY') != 'integral') {
2331 print '<div style="line-height: 1em
"> </div>';
2333 print '<span class="fab fa-paypal
"></span> <input class="" type="submit
" id="dopayment_paypal
" name="dopayment_paypal
" value="'.$langs->trans("PaypalDoPayment").'">';
2334 if (getDolGlobalString('PAYPAL_API_INTEGRAL_OR_PAYPALONLY') == 'integral') {
2336 print '<span class="buttonpaymentsmall
">'.$langs->trans("CreditOrDebitCard
").'</span><span class="buttonpaymentsmall
"> - </span>';
2337 print '<span class="buttonpaymentsmall
">'.$langs->trans("PayPalBalance
").'</span>';
2339 //if (getDolGlobalString('PAYPAL_API_INTEGRAL_OR_PAYPALONLY') == 'paypalonly') {
2341 //print '<span class="buttonpaymentsmall
">'.$langs->trans("PayPalBalance
").'"></span>
';
2345 $( document ).ready(
function() {
2346 $(
"#div_dopayment_paypal").click(
function(){
2347 $(
"#dopayment_paypal").click();
2349 $(
"#dopayment_paypal").click(
function(e){
2350 $(
"#div_dopayment_paypal").css( \
'cursor\', \'wait\' );
2351 e.stopPropagation();
2367print
'</td></tr>'.
"\n";
2369print
'</table>'.
"\n";
2371print
'</form>'.
"\n";
2379if (preg_match(
'/^dopayment/', $action)) {
2382 $_SESSION[
"currencyCodeType"] = $currency;
2383 $_SESSION[
"FinalPaymentAmt"] = $amount;
2384 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
2385 $_SESSION[
"paymentType"] =
'';
2390 if (
GETPOST(
'dopayment_stripe',
'alpha')) {
2398 background-color: white;
2401 border: 1px solid transparent;
2402 box-shadow: 0 1px 3px 0 #e6ebf1;
2403 -webkit-transition: box-shadow 150ms ease;
2404 transition: box-shadow 150ms ease;
2407 .StripeElement--focus {
2408 box-shadow: 0 1px 3px 0 #cfd7df;
2411 .StripeElement--invalid {
2412 border-color: #fa755a;
2415 .StripeElement--webkit-autofill {
2416 background-color: #fefde5 !important;
2422 print
'<!-- Show Stripe form payment-form STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION = ' .
getDolGlobalString(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION').
' STRIPE_USE_NEW_CHECKOUT = ' .
getDolGlobalString(
'STRIPE_USE_NEW_CHECKOUT').
' -->'.
"\n";
2423 print
'<form action="'.$_SERVER[
'REQUEST_URI'].
'" method="POST" id="payment-form">'.
"\n";
2425 print
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
2426 print
'<input type="hidden" name="dopayment_stripe" value="1">'.
"\n";
2427 print
'<input type="hidden" name="action" value="charge">'.
"\n";
2428 print
'<input type="hidden" name="tag" value="'.$TAG.
'">'.
"\n";
2429 print
'<input type="hidden" name="s" value="'.$source.
'">'.
"\n";
2430 print
'<input type="hidden" name="ref" value="'.$REF.
'">'.
"\n";
2431 print
'<input type="hidden" name="fulltag" value="'.$FULLTAG.
'">'.
"\n";
2432 print
'<input type="hidden" name="suffix" value="'.$suffix.
'">'.
"\n";
2433 print
'<input type="hidden" name="securekey" value="'.$SECUREKEY.
'">'.
"\n";
2434 print
'<input type="hidden" name="e" value="'.$entity.
'" />'.
"\n";
2435 print
'<input type="hidden" name="amount" value="'.$amount.
'">'.
"\n";
2436 print
'<input type="hidden" name="currency" value="'.$currency.
'">'.
"\n";
2438 print
'<input type="hidden" name="email" value="'.GETPOST(
'email',
'alpha').
'" />';
2439 print
'<input type="hidden" name="thirdparty_id" value="'.GETPOSTINT(
'thirdparty_id').
'" />';
2440 print
'<input type="hidden" name="lang" value="'.$getpostlang.
'">';
2446 if (array_key_exists(
'ORD', $tmptag) && (
int) $tmptag[
'ORD'] > 0) {
2447 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2449 $result =
$object->fetch((
int) $tmptag[
'ORD']);
2451 if (
$object->total_ttc != $amount) {
2458 if (!$checkamount) {
2459 dol_syslog(
"Hack attempt detected", LOG_WARNING);
2460 setEventMessages(
'Bad value for amount. Reported as a hack attempt.',
null,
'errors');
2464 require_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
2466 $service =
'StripeLive';
2469 $service =
'StripeTest';
2473 $stripe =
new Stripe($db);
2474 $stripeacc = $stripe->getStripeAccount($service);
2476 $stripecu = $stripe->customerStripe(
$object->thirdparty, $stripeacc, $servicestatus, 1);
2482 $noidempotency_key = (GETPOSTISSET(
'noidempotency') ?
GETPOSTINT(
'noidempotency') : (
getDolGlobalInt(
'STRIPE_USE_IDEMPOTENCY_BY_DEFAULT') ? 0 : 1));
2484 $paymentintent = $stripe->getPaymentIntent($amount, $currency, ($tag ? $tag : $fulltag),
'Stripe payment: '.$fulltag.(is_object(
$object) ?
' ref='.
$object->
ref :
''),
$object, $stripecu, $stripeacc, $servicestatus, 0,
'automatic', false, null, 0, $noidempotency_key);
2487 if ($stripe->error) {
2498 <table id="dolpaymenttable" summary="Payment form" class="center centpercent">
2499 <tbody><tr><td class="textpublicpayment">';
2502 print
'<div id="payment-request-button"><!-- A Stripe Element will be inserted here. --></div>';
2505 print
'<div class="form-row '.(getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2 ?
'center' :
'left').
'">';
2506 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 1) {
2507 print
'<label for="card-element">'.$langs->trans(
"CreditOrDebitCard").
'</label>';
2508 print
'<br><input id="cardholder-name" class="marginbottomonly" name="cardholder-name" value="" type="text" placeholder="'.$langs->trans(
"CardOwner").
'" autocomplete="off" autofocus required>';
2511 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 1) {
2512 print
'<div id="card-element">
2513 <!-- a Stripe Element will be inserted here. -->
2516 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2517 print
'<div id="payment-element">
2518 <!-- a Stripe Element will be inserted here. -->
2522 print
'<!-- Used to display form errors -->
2523 <div id="card-errors" role="alert"></div>
2527 print
'<button class="button buttonpayment" style="text-align: center; padding-left: 0; padding-right: 0;" id="buttontopay" data-secret="'.(is_object($paymentintent) ? $paymentintent->client_secret :
'').
'">'.$langs->trans(
"ValidatePayment").
'</button>';
2528 print
'<img id="hourglasstopay" class="hidden" src="'.DOL_URL_ROOT.
'/theme/'.
$conf->theme.
'/img/working.gif">';
2530 print
'</td></tr></tbody>';
2535 if (empty($paymentintent)) {
2536 print
'<center>'.$langs->trans(
"Error").
' - Failed to get PaymentIntent</center>';
2538 print
'<input type="hidden" name="paymentintent_id" value="'.$paymentintent->id.
'">';
2543 print
'</form>'.
"\n";
2547 if (empty($stripearrayofkeys[
'publishable_key'])) {
2548 $langs->load(
"errors");
2549 print
info_admin($langs->trans(
"ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv(
"Stripe")), 0, 0,
'error');
2551 print
'<!-- JS Code for Stripe components -->';
2552 print
'<script src="https://js.stripe.com/v3/"></script>'.
"\n";
2553 print
'<!-- urllogofull = '.$urllogofull.
' -->'.
"\n";
2556 print
'<script type="text/javascript">'.
"\n";
2559 $amountstripe = $amount;
2563 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
2564 if (!in_array($currency, $arrayzerounitcurrency)) {
2565 $amountstripe *= 100;
2569 $metadata = array(
'dol_version' => DOL_VERSION,
'dol_entity' =>
$conf->entity,
'ipaddress' => $ipaddress);
2571 $metadata[
'dol_type'] =
$object->element;
2572 $metadata[
'dol_id'] =
$object->id;
2578 $arrayforpaymentintent = array(
2579 'description' =>
'Stripe payment: '.$FULLTAG.($ref ?
' ref='.$ref :
''),
2580 "metadata" => $metadata
2583 $arrayforpaymentintent[
"statement_descriptor"] =
dol_trunc($TAG, 10,
'right',
'UTF-8', 1);
2586 $arrayforcheckout = array(
2587 'payment_method_types' => array(
'card'),
2588 'line_items' => array(array(
2589 'price_data' => array(
2590 'currency' => $currency,
2591 'unit_amount' => $amountstripe,
2592 'product_data' => array(
2593 'name' => $langs->transnoentitiesnoconv(
"Payment").
' '.$TAG,
2594 'description' =>
'Stripe payment: '.$FULLTAG.($ref ?
' ref='.$ref :
''),
2600 'mode' =>
'payment',
2601 'client_reference_id' => $FULLTAG,
2602 'success_url' => $urlok,
2603 'cancel_url' => $urlko,
2604 'payment_intent_data' => $arrayforpaymentintent
2607 $arrayforcheckout[
'customer'] = $stripecu;
2609 $arrayforcheckout[
'customer_email'] =
GETPOST(
'email',
'alpha');
2611 $sessionstripe = \Stripe\Checkout\Session::create($arrayforcheckout);
2616 $_SESSION[
"currencyCodeType"] = $currency;
2617 $_SESSION[
"paymentType"] =
'';
2618 $_SESSION[
"FinalPaymentAmt"] = $amount;
2619 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
2620 $_SESSION[
'payerID'] = is_object($stripecu) ? $stripecu->id :
'';
2621 $_SESSION[
'TRANSACTIONID'] = $sessionstripe->id;
2623 print $e->getMessage();
2629 if (empty($stripeacc)) {
2631 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>');
2635 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>', { stripeAccount:
'<?php echo $stripeacc; ?>' });
2640 var elements = stripe.elements();
2648 fontFamily:
'"Helvetica Neue", Helvetica, sans-serif',
2649 fontSmoothing:
'antialiased',
2657 iconColor:
'#fa755a'
2661 var cardElement = elements.create(
'card', {style: style});
2664 stripe.redirectToCheckout({
2668 sessionId:
'<?php print $sessionstripe->id; ?>'
2669 }).then(
function (result) {
2683 if (empty($stripeacc)) {
2685 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>');
2689 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>', { stripeAccount:
'<?php echo $stripeacc; ?>' });
2694 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2696 var cardButton = document.getElementById(
'buttontopay');
2697 var clientSecret = cardButton.dataset.secret;
2698 var options = { clientSecret: clientSecret };
2701 var elements = stripe.elements(options);
2706 var elements = stripe.elements();
2716 fontFamily:
'"Helvetica Neue", Helvetica, sans-serif',
2717 fontSmoothing:
'antialiased',
2725 iconColor:
'#fa755a'
2730 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2732 var paymentElement = elements.create(
"payment");
2735 paymentElement.mount(
"#payment-element");
2738 var cardButton = document.getElementById(
'buttontopay');
2740 cardButton.addEventListener(
'click',
function(event) {
2741 console.log(
"We click on buttontopay");
2742 event.preventDefault();
2745 jQuery(
'#hourglasstopay').show();
2746 jQuery(
'#buttontopay').hide();
2748 stripe.confirmPayment({
2749 elements,confirmParams: {
2750 return_url:
'<?php echo $urlok; ?>',
2751 payment_method_data: {
2755 ?>, email:
'<?php echo dol_escape_js(GETPOST('email
', 'alpha
') ? GETPOST('email
', 'alpha
') : $object->thirdparty->email); ?>'<?php
2758 ?>, phone:
'<?php echo dol_escape_js($object->thirdparty->phone); ?>'<?php
2762 city:
'<?php echo dol_escape_js($object->thirdparty->town); ?>',
2763 <?php if ($object->thirdparty->country_code) {
2764 ?>country:
'<?php echo dol_escape_js($object->thirdparty->country_code); ?>',<?php
2766 line1:
'<?php echo dol_escape_js(preg_replace('/\s\s+/
', ' ', $object->thirdparty->address)); ?>',
2767 postal_code:
'<?php echo dol_escape_js($object->thirdparty->zip); ?>'
2773 save_payment_method:<?php
if ($stripecu) {
2780 ).then(
function(result) {
2781 console.log(result);
2783 console.log(
"Error on result of handleCardPayment");
2784 jQuery(
'#buttontopay').show();
2785 jQuery(
'#hourglasstopay').hide();
2787 var errorElement = document.getElementById(
'card-errors');
2788 console.log(result);
2789 errorElement.textContent = result.error.message;
2792 console.log(
"No error on result of handleCardPayment, so we submit the form");
2794 jQuery(
'#buttontopay').hide();
2795 jQuery(
'#hourglasstopay').show();
2797 jQuery(
'#payment-form').submit();
2805 var cardElement = elements.create(
'card', {style: style});
2808 cardElement.mount(
'#card-element');
2811 cardElement.addEventListener(
'change',
function(event) {
2812 var displayError = document.getElementById(
'card-errors');
2814 console.log(
"Show event error (like 'Incorrect card number', ...)");
2815 displayError.textContent =
event.error.message;
2817 console.log(
"Reset error message");
2818 displayError.textContent =
'';
2823 var cardholderName = document.getElementById(
'cardholder-name');
2824 var cardButton = document.getElementById(
'buttontopay');
2825 var clientSecret = cardButton.dataset.secret;
2827 cardButton.addEventListener(
'click',
function(event) {
2828 console.log(
"We click on buttontopay");
2829 event.preventDefault();
2831 if (cardholderName.value ==
'')
2833 console.log(
"Field Card holder is empty");
2834 var displayError = document.getElementById(
'card-errors');
2835 displayError.textContent =
'<?php print dol_escape_js($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("CardOwner"))); ?>';
2840 jQuery(
'#hourglasstopay').show();
2841 jQuery(
'#buttontopay').hide();
2843 stripe.handleCardPayment(
2844 clientSecret, cardElement, {
2845 payment_method_data: {
2847 name: cardholderName.value
2849 ?>, email:
'<?php echo dol_escape_js(GETPOST('email
', 'alpha
') ? GETPOST('email
', 'alpha
') : $object->thirdparty->email); ?>'<?php
2852 ?>, phone:
'<?php echo dol_escape_js($object->thirdparty->phone); ?>'<?php
2856 city:
'<?php echo dol_escape_js($object->thirdparty->town); ?>',
2857 <?php if ($object->thirdparty->country_code) {
2858 ?>country:
'<?php echo dol_escape_js($object->thirdparty->country_code); ?>',<?php
2860 line1:
'<?php echo dol_escape_js(preg_replace('/\s\s+/
', ' ', $object->thirdparty->address)); ?>',
2861 postal_code:
'<?php echo dol_escape_js($object->thirdparty->zip); ?>'
2867 save_payment_method:<?php
if ($stripecu) {
2873 ).then(
function(result) {
2874 console.log(result);
2876 console.log(
"Error on result of handleCardPayment");
2877 jQuery(
'#buttontopay').show();
2878 jQuery(
'#hourglasstopay').hide();
2880 var errorElement = document.getElementById(
'card-errors');
2881 errorElement.textContent = result.error.message;
2884 console.log(
"No error on result of handleCardPayment, so we submit the form");
2886 jQuery(
'#buttontopay').hide();
2887 jQuery(
'#hourglasstopay').show();
2889 jQuery(
'#payment-form').submit();
2907 'paymentmethod' => $paymentmethod,
2908 'amount' => $amount,
2909 'currency' => $currency,
2910 'tag' =>
GETPOST(
"tag",
'alpha'),
2911 'dopayment' =>
GETPOST(
'dopayment',
'alpha')
2914 $reshook = $hookmanager->executeHooks(
'doPayment', $parameters,
$object, $action);
2917 } elseif ($reshook > 0) {
2918 print $hookmanager->resPrint;
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
global $dolibarr_main_url_root
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage members of a foundation.
Class to manage members type.
Class to manage customers orders.
Class for ConferenceOrBoothAttendee.
Class to manage lines of contracts.
Class to manage invoices.
Class to manage payments of donations.
Class to manage products or services.
Class to manage third parties objects (customers, suppliers, prospects...)
Stripe class @TODO No reason to extend CommonObject.
htmlPrintOnlineFooter($fromcompany, $langs, $addformmessage=0, $suffix='', $object=null)
Show footer of company in HTML public pages.
print $script_file $mode $langs defaultlang(is_numeric($duration_value) ? " delay=". $duration_value :"").(is_numeric($duration_value2) ? " after cd cd cd description as p label as s rowid as s nom as s email
Sender: Who sends the email ("Sender" has sent emails on behalf of "From").
dol_is_file($pathoffile)
Return if path is a file.
dol_getIdFromCode($db, $key, $tablename, $fieldkey='code', $fieldid='id', $entityfilter=0, $filters='', $useCache=true)
Return an id or code from a code or id.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
dolExplodeIntoArray($string, $delimiter=';', $kv='=')
Split a string with 2 keys into key array.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_osencode($str)
Return a string encoded into OS filesystem encoding.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
dol_now($mode='auto')
Return date for now.
img_mime($file, $titlealt='', $morecss='')
Show MIME img of a file.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_string_unaccent($str)
Clean a string from all accent characters to be used as ref, login or by dol_sanitizeFileName.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_print_error_email($prefixcode, $errormessage='', $errormessages=array(), $morecss='error', $email='')
Show a public email and error code to contact if technical error.
dol_htmloutput_mesg($mesgstring='', $mesgarray=array(), $style='ok', $keepembedded=0)
Print formatted messages to output (Used to show messages on html output).
getUserRemoteIP($trusted=0)
Return the real IP of remote user.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '…' if string larger than length.
isValidEmail($address, $acceptsupervisorkey=0, $acceptuserkey=0)
Return true if email syntax is ok.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_sanitizePathName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a path name.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
ui state ui widget content ui state ui widget header ui state a ui button
0 = Do not include form tag and submit button -1 = Do not include form tag but include submit button
if(!defined( 'CSRFCHECK_WITH_TOKEN'))
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
print_paybox_redirect($PRICE, $CURRENCY, $EMAIL, $urlok, $urlko, $TAG)
Create a redirect form to paybox form.
print_paypal_redirect($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL, $tag)
Send redirect to paypal to browser.
$conf db name
Only used if Module[ID]Name translation string is not found.
getRandomPassword($generic=false, $replaceambiguouschars=null, $length=32)
Return a generated password using default module.
dol_verifyHash($chain, $hash, $type='0')
Compute a hash and compare it to the given one For backward compatibility reasons,...