Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop

This commit is contained in:
Laurent Destailleur 2021-12-26 15:41:25 +01:00
commit 2e2e1b90e5
14 changed files with 213 additions and 114 deletions

View File

@ -136,7 +136,11 @@ if ($object->id > 0) {
$linkback = '<a href="'.DOL_URL_ROOT.'/adherents/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/adherents/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
dol_banner_tab($object, 'rowid', $linkback); $morehtmlref = '<a href="'.DOL_URL_ROOT.'/adherents/vcard.php?id='.$object->id.'" class="refid">';
$morehtmlref .= img_picto($langs->trans("Download").' '.$langs->trans("VCard"), 'vcard.png', 'class="valignmiddle marginleftonly paddingrightonly"');
$morehtmlref .= '</a>';
dol_banner_tab($object, 'rowid', $linkback, 1, 'rowid', 'ref', $morehtmlref);
print '<div class="fichecenter">'; print '<div class="fichecenter">';

View File

@ -918,12 +918,8 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
// When used in standard mode // When used in standard mode
// ----------------------------------------- // -----------------------------------------
// Create mode
if ($action == 'create') { if ($action == 'create') {
/* ************************************************************************** */
/* */
/* Creation mode */
/* */
/* ************************************************************************** */
$object->canvas = $canvas; $object->canvas = $canvas;
$object->state_id = GETPOST('state_id', 'int'); $object->state_id = GETPOST('state_id', 'int');
@ -1145,13 +1141,8 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
print "</form>\n"; print "</form>\n";
} }
// Edit mode
if ($action == 'edit') { if ($action == 'edit') {
/********************************************
*
* Edition mode
*
********************************************/
$res = $object->fetch($id); $res = $object->fetch($id);
if ($res < 0) { if ($res < 0) {
dol_print_error($db, $object->error); exit; dol_print_error($db, $object->error); exit;
@ -1412,13 +1403,8 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
print '</form>'; print '</form>';
} }
// View
if ($id > 0 && $action != 'edit') { if ($id > 0 && $action != 'edit') {
/* ************************************************************************** */
/* */
/* View mode */
/* */
/* ************************************************************************** */
$res = $object->fetch($id); $res = $object->fetch($id);
if ($res < 0) { if ($res < 0) {
dol_print_error($db, $object->error); exit; dol_print_error($db, $object->error); exit;
@ -1707,7 +1693,12 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
$linkback = '<a href="'.DOL_URL_ROOT.'/adherents/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/adherents/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
dol_banner_tab($object, 'rowid', $linkback); $morehtmlref = '<a href="'.DOL_URL_ROOT.'/adherents/vcard.php?id='.$object->id.'" class="refid">';
$morehtmlref .= img_picto($langs->trans("Download").' '.$langs->trans("VCard"), 'vcard.png', 'class="valignmiddle marginleftonly paddingrightonly"');
$morehtmlref .= '</a>';
dol_banner_tab($object, 'rowid', $linkback, 1, 'rowid', 'ref', $morehtmlref);
print '<div class="fichecenter">'; print '<div class="fichecenter">';
print '<div class="fichehalfleft">'; print '<div class="fichehalfleft">';
@ -1862,13 +1853,16 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
print '</td></tr>'; print '</td></tr>';
// VCard // VCard
/*
print '<tr><td>'; print '<tr><td>';
print $langs->trans("VCard").'</td><td colspan="3">'; print $langs->trans("VCard").'</td><td colspan="3">';
print '<a href="'.DOL_URL_ROOT.'/adherents/vcard.php?id='.$object->id.'">'; print '<a href="'.DOL_URL_ROOT.'/adherents/vcard.php?id='.$object->id.'">';
print img_picto($langs->trans("Download"), 'vcard.png', 'class="paddingrightonly"'); print img_picto($langs->trans("Download").' vcard', 'vcard.png', 'class="paddingrightonly"');
print $langs->trans("Download"); print $langs->trans("Download");
print img_picto($langs->trans("Download").' vcard', 'download', 'class="paddingleft"');
print '</a>'; print '</a>';
print '</td></tr>'; print '</td></tr>';
*/
print "</table>\n"; print "</table>\n";

View File

@ -138,7 +138,11 @@ if ($id > 0) {
$linkback = '<a href="'.DOL_URL_ROOT.'/adherents/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/adherents/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
dol_banner_tab($object, 'rowid', $linkback); $morehtmlref = '<a href="'.DOL_URL_ROOT.'/adherents/vcard.php?id='.$object->id.'" class="refid">';
$morehtmlref .= img_picto($langs->trans("Download").' '.$langs->trans("VCard"), 'vcard.png', 'class="valignmiddle marginleftonly paddingrightonly"');
$morehtmlref .= '</a>';
dol_banner_tab($object, 'rowid', $linkback, 1, 'rowid', 'ref', $morehtmlref);
print '<div class="fichecenter">'; print '<div class="fichecenter">';

View File

@ -107,7 +107,11 @@ if ($id) {
$linkback = '<a href="'.DOL_URL_ROOT.'/adherents/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/adherents/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
dol_banner_tab($object, 'id', $linkback); $morehtmlref = '<a href="'.DOL_URL_ROOT.'/adherents/vcard.php?id='.$object->id.'" class="refid">';
$morehtmlref .= img_picto($langs->trans("Download").' '.$langs->trans("VCard"), 'vcard.png', 'class="valignmiddle marginleftonly paddingrightonly"');
$morehtmlref .= '</a>';
dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref);
print '<div class="fichecenter">'; print '<div class="fichecenter">';

View File

@ -485,7 +485,11 @@ if ($rowid > 0) {
$linkback = '<a href="'.DOL_URL_ROOT.'/adherents/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/adherents/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
dol_banner_tab($object, 'rowid', $linkback); $morehtmlref = '<a href="'.DOL_URL_ROOT.'/adherents/vcard.php?id='.$object->id.'" class="refid">';
$morehtmlref .= img_picto($langs->trans("Download").' '.$langs->trans("VCard"), 'vcard.png', 'class="valignmiddle marginleftonly paddingrightonly"');
$morehtmlref .= '</a>';
dol_banner_tab($object, 'rowid', $linkback, 1, 'rowid', 'ref', $morehtmlref);
print '<div class="fichecenter">'; print '<div class="fichecenter">';
print '<div class="fichehalfleft">'; print '<div class="fichehalfleft">';

View File

@ -292,7 +292,7 @@ if (!$rowid && $action != 'create' && $action != 'edit') {
$membertype->amount = $objp->amount; $membertype->amount = $objp->amount;
print '<tr class="oddeven">'; print '<tr class="oddeven">';
print '<td>'; print '<td class="nowraponall">';
print $membertype->getNomUrl(1); print $membertype->getNomUrl(1);
//<a href="'.$_SERVER["PHP_SELF"].'?rowid='.$objp->rowid.'">'.img_object($langs->trans("ShowType"),'group').' '.$objp->rowid.'</a> //<a href="'.$_SERVER["PHP_SELF"].'?rowid='.$objp->rowid.'">'.img_object($langs->trans("ShowType"),'group').' '.$objp->rowid.'</a>
print '</td>'; print '</td>';
@ -340,12 +340,7 @@ if (!$rowid && $action != 'create' && $action != 'edit') {
} }
} }
// Creation
/* ************************************************************************** */
/* */
/* Creation mode */
/* */
/* ************************************************************************** */
if ($action == 'create') { if ($action == 'create') {
$object = new AdherentType($db); $object = new AdherentType($db);
@ -416,11 +411,7 @@ if ($action == 'create') {
print "</form>\n"; print "</form>\n";
} }
/* ************************************************************************** */ // View
/* */
/* View mode */
/* */
/* ************************************************************************** */
if ($rowid > 0) { if ($rowid > 0) {
if ($action != 'edit') { if ($action != 'edit') {
$object = new AdherentType($db); $object = new AdherentType($db);
@ -455,8 +446,9 @@ if ($rowid > 0) {
print yn($object->subscription); print yn($object->subscription);
print '</tr>'; print '</tr>';
// Amount
print '<tr><td class="titlefield">'.$langs->trans("Amount").'</td><td>'; print '<tr><td class="titlefield">'.$langs->trans("Amount").'</td><td>';
print ((is_null($object->amount) || $object->amount === '') ? '' : price($object->amount)); print ((is_null($object->amount) || $object->amount === '') ? '' : '<span class="amount">'.price($object->amount).'</span>');
print '</tr>'; print '</tr>';
print '<tr><td>'.$langs->trans("VoteAllowed").'</td><td>'; print '<tr><td>'.$langs->trans("VoteAllowed").'</td><td>';

View File

@ -1,5 +1,5 @@
<?php <?php
/* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2014 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004-2014 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com> * Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
* Copyright (C) 2005 Marc Barilley / Ocebo <marc@ocebo.com> * Copyright (C) 2005 Marc Barilley / Ocebo <marc@ocebo.com>
@ -817,7 +817,7 @@ if (empty($reshook)) {
} }
} }
} }
} elseif ($action == 'addline' && GETPOST('submitforalllines', 'alpha') && GETPOST('vatforalllines', 'alpha') !== '') { } elseif ($action == 'addline' && GETPOST('submitforalllines', 'alpha') && GETPOST('vatforalllines', 'alpha') !== '' && $usercancreate) {
// Define vat_rate // Define vat_rate
$vat_rate = (GETPOST('vatforalllines') ? GETPOST('vatforalllines') : 0); $vat_rate = (GETPOST('vatforalllines') ? GETPOST('vatforalllines') : 0);
$vat_rate = str_replace('*', '', $vat_rate); $vat_rate = str_replace('*', '', $vat_rate);
@ -835,7 +835,7 @@ if (empty($reshook)) {
$prod_entry_mode = GETPOST('prod_entry_mode'); $prod_entry_mode = GETPOST('prod_entry_mode');
if ($prod_entry_mode == 'free') { if ($prod_entry_mode == 'free') {
$idprod = 0; $idprod = 0;
$tva_tx = (GETPOST('tva_tx') ? GETPOST('tva_tx') : 0); $tva_tx = (GETPOST('tva_tx') ? price2num(GETPOST('tva_tx')) : 0);
} else { } else {
$idprod = GETPOST('idprod', 'int'); $idprod = GETPOST('idprod', 'int');
$tva_tx = ''; $tva_tx = '';
@ -2680,7 +2680,7 @@ if ($action == 'create') {
$somethingshown = $form->showLinkedObjectBlock($object, $linktoelem, $compatibleImportElementsList); $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem, $compatibleImportElementsList);
// Show online signature link // Show online signature link
$useonlinesignature = 1; // Replace this with 1 when feature to make online signature is ok $useonlinesignature = 1;
if ($object->statut != Propal::STATUS_DRAFT && $useonlinesignature) { if ($object->statut != Propal::STATUS_DRAFT && $useonlinesignature) {
print '<br><!-- Link to sign -->'; print '<br><!-- Link to sign -->';

View File

@ -51,11 +51,27 @@ if (!defined('NOBROWSERNOTIF')) {
include '../../main.inc.php'; include '../../main.inc.php';
$action = GETPOST('action', 'aZ09'); $action = GETPOST('action', 'aZ09');
$signature = GETPOST('signaturebase64'); $signature = GETPOST('signaturebase64');
$ref = GETPOST('ref', 'aZ09'); $ref = GETPOST('ref', 'aZ09');
$mode = GETPOST('mode', 'aZ09'); $mode = GETPOST('mode', 'aZ09');
$SECUREKEY = GETPOST("securekey"); // Secure key
$error = 0; $error = 0;
$response = ""; $response = "";
// Check securitykey
$securekeyseed = $conf->global->PROPOSAL_ONLINE_SIGNATURE_SECURITY_TOKEN;
$type = $mode;
$calculatedsecuritykey = dol_hash($securekeyseed.$type.$ref, '0');
if ($calculatedsecuritykey != $SECUREKEY) {
http_response_code(403);
print 'Bad value for securitykey. Value provided '.dol_escape_htmltag($SECUREKEY).' does not match expected value for ref='.dol_escape_htmltag($ref);
exit(-1);
}
/* /*
* Actions * Actions
*/ */
@ -71,62 +87,76 @@ if ($action == "importSignature") {
if (!empty($signature) && $signature[0] == "image/png;base64") { if (!empty($signature) && $signature[0] == "image/png;base64") {
$signature = $signature[1]; $signature = $signature[1];
$data = base64_decode($signature); $data = base64_decode($signature);
$upload_dir = DOL_DATA_ROOT."/".$mode."/".$ref."/";
$date = dol_print_date(dol_now(), "%Y%m%d%H%M%S"); if ($mode == "propale" || $mode == 'proposal') {
$filename = "signatures/".$date."_signature.png"; require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php';
if (!is_dir($upload_dir."signatures/")) { require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
if (!mkdir($upload_dir."signatures/")) { $object = new Propal($db);
$response ="error mkdir"; $object->fetch(0, $ref);
$error++;
$upload_dir = !empty($conf->propal->multidir_output[$object->entity])?$conf->propal->multidir_output[$object->entity]:$conf->propal->dir_output;
$upload_dir .= '/'.dol_sanitizeFileName($object->ref).'/';
$date = dol_print_date(dol_now(), "%Y%m%d%H%M%S");
$filename = "signatures/".$date."_signature.png";
if (!is_dir($upload_dir."signatures/")) {
if (!dol_mkdir($upload_dir."signatures/")) {
$response ="Error mkdir. Failed to create dir ".$upload_dir."signatures/";
$error++;
}
} }
}
if (!$error) {
$return = file_put_contents($upload_dir.$filename, $data);
if ($return == false) {
$response = 'error file_put_content';
} else {
if ($mode == "propale") {
require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
$object = new Propal($db);
$object->fetch(0, $ref);
$pdf = pdf_getInstance(); if (!$error) {
$pdf->Open(); $return = file_put_contents($upload_dir.$filename, $data);
$pdf->AddPage(); if ($return == false) {
$pagecount = $pdf->setSourceFile($upload_dir.$ref.".pdf"); $error++;
$response = 'error file_put_content';
}
}
$tppl = $pdf->importPage(1); if (!$error) {
$pdf->useTemplate($tppl); $pdf = pdf_getInstance();
$pdf->Image($upload_dir.$filename, 129, 239.6, 60, 15); $pdf->Open();
$pdf->Close(); $pdf->AddPage();
$pdf->Output($upload_dir.$ref."_signed-".$date.".pdf", "F"); $pagecount = $pdf->setSourceFile($upload_dir.$ref.".pdf");
$sql = "UPDATE ".MAIN_DB_PREFIX."propal"; $tppl = $pdf->importPage(1);
$sql .= " SET fk_statut = ".((int) $object::STATUS_SIGNED).", note_private = '".$object->note_private."', date_signature='".$db->idate(dol_now())."'"; $pdf->useTemplate($tppl);
$sql .= " WHERE rowid = ".((int) $object->id); $pdf->Image($upload_dir.$filename, 129, 239.6, 60, 15);
$pdf->Close();
$pdf->Output($upload_dir.$ref."_signed-".$date.".pdf", "F");
dol_syslog(__METHOD__, LOG_DEBUG); $sql = "UPDATE ".MAIN_DB_PREFIX."propal";
$resql = $db->query($sql); $sql .= " SET fk_statut = ".((int) $object::STATUS_SIGNED).", note_private = '".$object->note_private."', date_signature='".$db->idate(dol_now())."'";
if (!$resql) { $sql .= " WHERE rowid = ".((int) $object->id);
$error++;
} else {
$num = $db->affected_rows($resql);
}
if (!$error) { dol_syslog(__METHOD__, LOG_DEBUG);
$db->commit(); $resql = $db->query($sql);
$response = "success"; if (!$resql) {
setEventMessage("PropalSigned"); $error++;
} else { } else {
$db->rollback(); $num = $db->affected_rows($resql);
$response = "error sql"; }
}
if (!$error) {
$db->commit();
$response = "success";
setEventMessages("PropalSigned", null, 'warnings');
} else {
$db->rollback();
$error++;
$response = "error sql";
} }
} }
} }
} else { } else {
$error++;
$response = 'error signature_not_found'; $response = 'error signature_not_found';
} }
} }
if ($error) {
http_response_code(501);
}
echo $response; echo $response;

View File

@ -761,7 +761,7 @@ class FormFile
$arraykeys = array_keys($modellist); $arraykeys = array_keys($modellist);
$modelselected = $arraykeys[0]; $modelselected = $arraykeys[0];
} }
$morecss = 'maxwidth200'; $morecss = 'minwidth75 maxwidth200';
if ($conf->browser->layout == 'phone') { if ($conf->browser->layout == 'phone') {
$morecss = 'maxwidth100'; $morecss = 'maxwidth100';
} }

View File

@ -18,7 +18,7 @@
*/ */
/** /**
* Return string with full Url * Return string with full online Url to accept and sign a quote
* *
* @param string $type Type of URL ('proposal', ...) * @param string $type Type of URL ('proposal', ...)
* @param string $ref Ref of object * @param string $ref Ref of object
@ -58,13 +58,27 @@ function showOnlineSignatureUrl($type, $ref)
*/ */
function getOnlineSignatureUrl($mode, $type, $ref = '') function getOnlineSignatureUrl($mode, $type, $ref = '')
{ {
global $conf, $db, $langs; global $conf, $db, $langs, $dolibarr_main_url_root;
$ref = str_replace(' ', '', $ref); $ref = str_replace(' ', '', $ref);
$out = ''; $out = '';
// Define $urlwithroot
$urlwithouturlroot = preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root));
$urlwithroot = $urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file
//$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current
$localorexternal = 1; // external
$urltouse = DOL_MAIN_URL_ROOT;
if ($localorexternal) {
$urltouse = $urlwithroot;
}
$securekeyseed = $conf->global->PROPOSAL_ONLINE_SIGNATURE_SECURITY_TOKEN;
if ($type == 'proposal') { if ($type == 'proposal') {
$out = DOL_MAIN_URL_ROOT.'/public/onlinesign/newonlinesign.php?source=proposal&ref='.($mode ? '<span style="color: #666666">' : ''); $out = $urltouse.'/public/onlinesign/newonlinesign.php?source=proposal&ref='.($mode ? '<span style="color: #666666">' : '');
if ($mode == 1) { if ($mode == 1) {
$out .= 'proposal_ref'; $out .= 'proposal_ref';
} }
@ -72,6 +86,12 @@ function getOnlineSignatureUrl($mode, $type, $ref = '')
$out .= urlencode($ref); $out .= urlencode($ref);
} }
$out .= ($mode ? '</span>' : ''); $out .= ($mode ? '</span>' : '');
if ($mode == 1) {
$out .= "hash('".$securekeyseed."' + '".$type."' + proposal_ref)";
} else {
$out .= '&securekey='.dol_hash($securekeyseed.$type.$ref, '0');
}
/*
if ($mode == 1) { if ($mode == 1) {
$out .= '&hashp=<span style="color: #666666">hash_of_file</span>'; $out .= '&hashp=<span style="color: #666666">hash_of_file</span>';
} else { } else {
@ -94,13 +114,15 @@ function getOnlineSignatureUrl($mode, $type, $ref = '')
} else { } else {
$out .= '&hashp='.$hashp; $out .= '&hashp='.$hashp;
} }
} }*/
} }
// For multicompany // For multicompany
/*
if (!empty($out)) { if (!empty($out)) {
$out .= "&entity=".$conf->entity; // Check the entity because He may be the same reference in several entities $out .= "&entity=".$conf->entity; // Check the entity because He may be the same reference in several entities
} }
*/
return $out; return $out;
} }

View File

@ -122,6 +122,17 @@ $creditor = $mysoc->name;
$object = new Propal($db); $object = new Propal($db);
$object->fetch(0, $ref); $object->fetch(0, $ref);
// Check securitykey
$securekeyseed = $conf->global->PROPOSAL_ONLINE_SIGNATURE_SECURITY_TOKEN;
$type = $source;
$calculatedsecuritykey = dol_hash($securekeyseed.$type.$ref, '0');
if ($calculatedsecuritykey != $SECUREKEY) {
http_response_code(403);
print 'Bad value for securitykey. Value provided '.dol_escape_htmltag($SECUREKEY).' does not match expected value for ref='.dol_escape_htmltag($ref);
exit(-1);
}
/* /*
* Actions * Actions
@ -144,7 +155,7 @@ if ($action == 'confirm_refusepropal') {
$db->commit(); $db->commit();
$message = 'refused'; $message = 'refused';
setEventMessages("PropalRefused", null, 'warning'); setEventMessages("PropalRefused", null, 'warnings');
} else { } else {
$db->rollback(); $db->rollback();
} }
@ -170,7 +181,7 @@ $replacemainarea = (empty($conf->dol_hide_leftmenu) ? '<div>' : '').'<div>';
llxHeader($head, $langs->trans("OnlineSignature"), '', '', 0, 0, '', '', '', 'onlinepaymentbody', $replacemainarea, 1); llxHeader($head, $langs->trans("OnlineSignature"), '', '', 0, 0, '', '', '', 'onlinepaymentbody', $replacemainarea, 1);
if ($action == 'refusepropal') { if ($action == 'refusepropal') {
print $form->formconfirm($_SERVER["PHP_SELF"].'?ref='.$ref, $langs->trans('RefusePropal'), $langs->trans('ConfirmRefusePropal', $object->ref), 'confirm_refusepropal', '', '', 1); print $form->formconfirm($_SERVER["PHP_SELF"].'?ref='.urlencode($ref).'&securekey='.urlencode($SECUREKEY), $langs->trans('RefusePropal'), $langs->trans('ConfirmRefusePropal', $object->ref), 'confirm_refusepropal', '', '', 1);
} }
// Check link validity for param 'source' // Check link validity for param 'source'
@ -195,7 +206,7 @@ print '<input type="hidden" name="entity" value="'.$entity.'" />';
print "\n"; print "\n";
print '<!-- Form to sign -->'."\n"; print '<!-- Form to sign -->'."\n";
print '<table id="dolpaymenttable" summary="Payment form" class="center">'."\n"; print '<table id="dolpublictable" summary="Payment form" class="center">'."\n";
// Show logo (search order: logo defined by ONLINE_SIGN_LOGO_suffix, then ONLINE_SIGN_LOGO_, then small company logo, large company logo, theme logo, common logo) // Show logo (search order: logo defined by ONLINE_SIGN_LOGO_suffix, then ONLINE_SIGN_LOGO_, then small company logo, large company logo, theme logo, common logo)
// Define logo and logosmall // Define logo and logosmall
@ -295,6 +306,13 @@ if ($source == 'proposal') {
print '<b>'.$proposal->thirdparty->name.'</b>'; print '<b>'.$proposal->thirdparty->name.'</b>';
print '</td></tr>'."\n"; print '</td></tr>'."\n";
// Amount
print '<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans("Amount");
print '</td><td class="CTableRow2">';
print '<b>'.price($proposal->total_ttc, 0, $langs, 1, -1, -1, $conf->currency).'</b>';
print '</td></tr>'."\n";
// Object // Object
$text = '<b>'.$langs->trans("SignatureProposalRef", $proposal->ref).'</b>'; $text = '<b>'.$langs->trans("SignatureProposalRef", $proposal->ref).'</b>';
@ -308,7 +326,7 @@ if ($source == 'proposal') {
print $langs->trans("DownloadDocument").'</a>'; print $langs->trans("DownloadDocument").'</a>';
} }
} else { } else {
/* TODO If proposal signed newer than proposal ref, get link of proposal signed /* TODO If the file of proposal signed is newer than the default proposal file, get link of proposal signed
*/ */
} }
@ -358,7 +376,7 @@ if ($action == "dosign" && empty($cancel)) {
print '<script language="JavaScript" type="text/javascript" src="'.DOL_URL_ROOT.'/includes/jquery/plugins/jSignature/jSignature.js"></script> print '<script language="JavaScript" type="text/javascript" src="'.DOL_URL_ROOT.'/includes/jquery/plugins/jSignature/jSignature.js"></script>
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function() { $(document).ready(function() {
$("#signature").jSignature({ color:"#000", lineWidth:4, height: 180}); $("#signature").jSignature({ color:"#000", lineWidth:4, '.(empty($conf->dol_optimize_smallscreen) ? '' : 'width: 280, ' ).'height: 180});
$("#signature").on("change",function(){ $("#signature").on("change",function(){
$("#clearsignature").css("display",""); $("#clearsignature").css("display","");
@ -373,13 +391,14 @@ if ($action == "dosign" && empty($cancel)) {
data: { data: {
"action" : "importSignature", "action" : "importSignature",
"signaturebase64" : signature, "signaturebase64" : signature,
"ref" : "'.dol_escape_js($REF).'", "ref" : \''.dol_escape_js($REF).'\',
"mode" : "propale", "securekey" : \''.dol_escape_js($SECUREKEY).'\',
"mode" : \''.dol_escape_htmltag($source).'\',
}, },
success: function(response) { success: function(response) {
if(response == "success"){ if(response == "success"){
console.log("Success on saving signature"); console.log("Success on saving signature");
window.location.replace("'.$_SERVER["SELF"].'?ref='.urlencode($ref).'&message=signed"); window.location.replace("'.$_SERVER["PHP_SELF"].'?ref='.urlencode($ref).'&message=signed&securekey='.urlencode($SECUREKEY).'");
}else{ }else{
console.error(response); console.error(response);
} }

View File

@ -926,7 +926,8 @@ print '<!-- urlok = '.$urlok.' -->'."\n";
print '<!-- urlko = '.$urlko.' -->'."\n"; print '<!-- urlko = '.$urlko.' -->'."\n";
print "\n"; print "\n";
print '<table id="dolpaymenttable" summary="Payment form" class="center">'."\n"; // Section with payment informationsummary
print '<table id="dolpublictable" summary="Payment form" class="center">'."\n";
// Output introduction text // Output introduction text
$text = ''; $text = '';
@ -1524,10 +1525,13 @@ if ($source == 'member' || $source == 'membersubscription') {
// Debitor // Debitor
print '<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans("Member"); print '<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans("Member");
print '</td><td class="CTableRow2"><b>'; print '</td><td class="CTableRow2">';
if ($member->morphy == 'mor' && !empty($member->societe)) { print '<b>';
print $member->societe; if ($member->morphy == 'mor' && !empty($member->company)) {
print img_picto('', 'company', 'class="pictofixedwidth"');
print $member->company;
} else { } else {
print img_picto('', 'member', 'class="pictofixedwidth"');
print $member->getFullName($langs); print $member->getFullName($langs);
} }
print '</b>'; print '</b>';

View File

@ -3630,16 +3630,19 @@ div.refidpadding {
} }
div.refid { div.refid {
font-weight: bold; font-weight: bold;
color: var(--colortexttitlenotab); color: var(--colortexttitlenotab);
font-size: 1.2em; font-size: 1.2em;
word-break: break-word; word-break: break-word;
}
a.refid {
color: var(--colortexttitlenotab) !important;
} }
div.refidno { div.refidno {
padding-top: 3px; padding-top: 3px;
font-weight: normal; font-weight: normal;
color: var(--refidnocolor); color: var(--refidnocolor);
font-size: <?php print is_numeric($fontsize) ? $fontsize.'px' : $fontsize ?>; font-size: <?php print is_numeric($fontsize) ? $fontsize.'px' : $fontsize ?>;
line-height: 1.4em; line-height: 1.4em;
} }
div.refidno form { div.refidno form {
display: inline-block; display: inline-block;
@ -4579,7 +4582,15 @@ div.backgreypublicpayment { background-color: #f0f0f0; padding: 20px; border-bot
color: #222; color: #222;
opacity: 0.3; opacity: 0.3;
} }
#dolpaymenttable { min-width: 320px; font-size: 16px; } /* Width must have min to make stripe input area visible. Lower than 320 makes input area crazy for credit card that need zip code */
#dolpublictable {
min-width: 300px; font-size: 16px;
padding: 6px;
}
#dolpaymenttable {
min-width: 320px; font-size: 16px;
} /* Width must have min to make stripe input area visible. Lower than 320 makes input area crazy for credit card that need zip code */
#tablepublicpayment { #tablepublicpayment {
border: 1px solid #CCCCCC !important; border: 1px solid #CCCCCC !important;
width: 100%; width: 100%;

View File

@ -3662,14 +3662,17 @@ div.refidpadding {
div.refid { div.refid {
font-weight: bold; font-weight: bold;
color: rgb(--colortexttitlenotab); color: rgb(--colortexttitlenotab);
font-size: 160%; font-size: 160%;
}
a.refid {
color: var(--colortexttitlenotab) !important;
} }
div.refidno { div.refidno {
padding-top: 8px; padding-top: 8px;
font-weight: normal; font-weight: normal;
color: #444; color: #444;
font-size: <?php print $fontsize ?>px; font-size: <?php print $fontsize ?>px;
line-height: 21px; line-height: 21px;
} }
div.refidno form { div.refidno form {
display: inline-block; display: inline-block;
@ -4531,7 +4534,15 @@ div.backgreypublicpayment { background-color: #f0f0f0; padding: 20px; border-bot
span.buttonpaymentsmall { span.buttonpaymentsmall {
text-shadow: none; text-shadow: none;
} }
#dolpaymenttable { min-width: 320px; font-size: 16px; } /* Width must have min to make stripe input area visible. Lower than 320 makes input area crazy for credit card that need zip code */
#dolpublictable {
min-width: 300px; font-size: 16px;
padding: 6px;
}
#dolpaymenttable {
min-width: 320px; font-size: 16px;
} /* Width must have min to make stripe input area visible. Lower than 320 makes input area crazy for credit card that need zip code */
#tablepublicpayment { border: 1px solid #CCCCCC !important; width: 100%; padding: 20px; } #tablepublicpayment { border: 1px solid #CCCCCC !important; width: 100%; padding: 20px; }
#tablepublicpayment .CTableRow1 { background-color: #F0F0F0 !important; } #tablepublicpayment .CTableRow1 { background-color: #F0F0F0 !important; }
#tablepublicpayment tr.liste_total { border-bottom: 1px solid #CCCCCC !important; } #tablepublicpayment tr.liste_total { border-bottom: 1px solid #CCCCCC !important; }