From 1d80b8394ad98a07eaea4eec6d1cc996747bedc6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 4 Jan 2022 12:56:08 +0100 Subject: [PATCH 01/20] Debug v15 --- htdocs/core/ajax/onlineSign.php | 24 +- htdocs/core/class/commonobject.class.php | 210 ++++++++++-------- htdocs/core/lib/payments.lib.php | 42 +++- htdocs/core/lib/signature.lib.php | 17 +- .../modules/propale/doc/pdf_azur.modules.php | 41 +++- .../modules/propale/doc/pdf_cyan.modules.php | 6 +- .../class/conferenceorbooth.class.php | 7 +- .../conferenceorbooth_card.php | 136 +++++++----- .../conferenceorbooth_contact.php | 151 ++++++++----- .../conferenceorbooth_document.php | 98 ++++++-- .../conferenceorbooth_list.php | 64 +++--- .../conferenceorboothattendee_card.php | 2 +- .../conferenceorboothattendee_note.php | 2 +- ...ventorganization_conferenceorbooth.lib.php | 6 +- htdocs/public/onlinesign/newonlinesign.php | 77 ++++--- htdocs/public/payment/newpayment.php | 18 +- 16 files changed, 559 insertions(+), 342 deletions(-) diff --git a/htdocs/core/ajax/onlineSign.php b/htdocs/core/ajax/onlineSign.php index bf484dc1c45..996fd86bca7 100644 --- a/htdocs/core/ajax/onlineSign.php +++ b/htdocs/core/ajax/onlineSign.php @@ -60,12 +60,15 @@ $SECUREKEY = GETPOST("securekey"); // Secure key $error = 0; $response = ""; -// Check securitykey -$securekeyseed = $conf->global->PROPOSAL_ONLINE_SIGNATURE_SECURITY_TOKEN; $type = $mode; -$calculatedsecuritykey = dol_hash($securekeyseed.$type.$ref, '0'); -if ($calculatedsecuritykey != $SECUREKEY) { +// Check securitykey +$securekeyseed = ''; +if ($type == 'proposal') { + $securekeyseed = $conf->global->PROPOSAL_ONLINE_SIGNATURE_SECURITY_TOKEN; +} + +if (!dol_verifyHash($securekeyseed.$type.$ref, $SECUREKEY, '0')) { 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); @@ -110,21 +113,26 @@ if ($action == "importSignature") { $return = file_put_contents($upload_dir.$filename, $data); if ($return == false) { $error++; - $response = 'error file_put_content'; + $response = 'Error file_put_content: failed to create signature file.'; } } if (!$error) { + $newpdffilename = $upload_dir.$ref."_signed-".$date.".pdf"; + $pdf = pdf_getInstance(); $pdf->Open(); $pdf->AddPage(); - $pagecount = $pdf->setSourceFile($upload_dir.$ref.".pdf"); + $pagecount = $pdf->setSourceFile($upload_dir.$ref.".pdf"); // original PDF $tppl = $pdf->importPage(1); $pdf->useTemplate($tppl); - $pdf->Image($upload_dir.$filename, 129, 239.6, 60, 15); + $pdf->Image($upload_dir.$filename, 129, 239.6, 60, 15); // FIXME Position will be wrong with non A4 format. Use a value from width and height of page minus relative offset. $pdf->Close(); - $pdf->Output($upload_dir.$ref."_signed-".$date.".pdf", "F"); + $pdf->Output($newpdffilename, "F"); + + // Index the new file and update the last_main_doc property of object. + $object->indexFile($newpdffilename, 1); $sql = "UPDATE ".MAIN_DB_PREFIX."propal"; $sql .= " SET fk_statut = ".((int) $object::STATUS_SIGNED).", note_private = '".$object->note_private."', date_signature='".$db->idate(dol_now())."'"; diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index a7e1693472b..ce76e65ad89 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -5292,103 +5292,14 @@ abstract class CommonObject // Index file in database if (!empty($obj->result['fullpath'])) { $destfull = $obj->result['fullpath']; - $upload_dir = dirname($destfull); - $destfile = basename($destfull); - $rel_dir = preg_replace('/^'.preg_quote(DOL_DATA_ROOT, '/').'/', '', $upload_dir); - if (!preg_match('/[\\/]temp[\\/]|[\\/]thumbs|\.meta$/', $rel_dir)) { // If not a tmp dir - $filename = basename($destfile); - $rel_dir = preg_replace('/[\\/]$/', '', $rel_dir); - $rel_dir = preg_replace('/^[\\/]/', '', $rel_dir); - - include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php'; - $ecmfile = new EcmFiles($this->db); - $result = $ecmfile->fetch(0, '', ($rel_dir ? $rel_dir.'/' : '').$filename); - - // Set the public "share" key - $setsharekey = false; - if ($this->element == 'propal') { - $useonlinesignature = 1; // Replace this with 1 when feature to make online signature is ok - if ($useonlinesignature) { - $setsharekey = true; - } - if (!empty($conf->global->PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD)) { - $setsharekey = true; - } - } - if ($this->element == 'commande' && !empty($conf->global->ORDER_ALLOW_EXTERNAL_DOWNLOAD)) { - $setsharekey = true; - } - if ($this->element == 'facture' && !empty($conf->global->INVOICE_ALLOW_EXTERNAL_DOWNLOAD)) { - $setsharekey = true; - } - if ($this->element == 'bank_account' && !empty($conf->global->BANK_ACCOUNT_ALLOW_EXTERNAL_DOWNLOAD)) { - $setsharekey = true; - } - if ($this->element == 'contrat' && !empty($conf->global->CONTRACT_ALLOW_EXTERNAL_DOWNLOAD)) { - $setsharekey = true; - } - if ($this->element == 'supplier_proposal' && !empty($conf->global->SUPPLIER_PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD)) { - $setsharekey = true; - } - - if ($setsharekey) { - if (empty($ecmfile->share)) { // Because object not found or share not set yet - require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php'; - $ecmfile->share = getRandomPassword(true); - } - } - - if ($result > 0) { - $ecmfile->label = md5_file(dol_osencode($destfull)); // hash of file content - $ecmfile->fullpath_orig = ''; - $ecmfile->gen_or_uploaded = 'generated'; - $ecmfile->description = ''; // indexed content - $ecmfile->keywords = ''; // keyword content - $result = $ecmfile->update($user); - if ($result < 0) { - setEventMessages($ecmfile->error, $ecmfile->errors, 'warnings'); - } - } else { - $ecmfile->entity = $conf->entity; - $ecmfile->filepath = $rel_dir; - $ecmfile->filename = $filename; - $ecmfile->label = md5_file(dol_osencode($destfull)); // hash of file content - $ecmfile->fullpath_orig = ''; - $ecmfile->gen_or_uploaded = 'generated'; - $ecmfile->description = ''; // indexed content - $ecmfile->keywords = ''; // keyword content - $ecmfile->src_object_type = $this->table_element; // $this->table_name is 'myobject' or 'mymodule_myobject'. - $ecmfile->src_object_id = $this->id; - - $result = $ecmfile->create($user); - if ($result < 0) { - setEventMessages($ecmfile->error, $ecmfile->errors, 'warnings'); - } - } - - /*$this->result['fullname']=$destfull; - $this->result['filepath']=$ecmfile->filepath; - $this->result['filename']=$ecmfile->filename;*/ - //var_dump($obj->update_main_doc_field);exit; - - // Update the last_main_doc field into main object (if document generator has property ->update_main_doc_field set) - $update_main_doc_field = 0; - if (!empty($obj->update_main_doc_field)) { - $update_main_doc_field = 1; - } - if ($update_main_doc_field && !empty($this->table_element)) { - $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element." SET last_main_doc = '".$this->db->escape($ecmfile->filepath."/".$ecmfile->filename)."'"; - $sql .= " WHERE rowid = ".((int) $this->id); - - $resql = $this->db->query($sql); - if (!$resql) { - dol_print_error($this->db); - } else { - $this->last_main_doc = $ecmfile->filepath.'/'.$ecmfile->filename; - } - } + // Update the last_main_doc field into main object (if document generator has property ->update_main_doc_field set) + $update_main_doc_field = 0; + if (!empty($obj->update_main_doc_field)) { + $update_main_doc_field = 1; } + + $this->indexFile($destfull, $update_main_doc_field); } else { dol_syslog('Method ->write_file was called on object '.get_class($obj).' and return a success but the return array ->result["fullpath"] was not set.', LOG_WARNING); } @@ -5417,6 +5328,115 @@ abstract class CommonObject } } + /** + * Index a file into the ECM database + * + * @param string $destfull Full path of file to index + * @param int $update_main_doc_field Update field main_doc file into table of object + * @return int <0 if KO, >0 if OK + */ + public function indexFile($destfull, $update_main_doc_field) + { + global $user; + + $upload_dir = dirname($destfull); + $destfile = basename($destfull); + $rel_dir = preg_replace('/^'.preg_quote(DOL_DATA_ROOT, '/').'/', '', $upload_dir); + + if (!preg_match('/[\\/]temp[\\/]|[\\/]thumbs|\.meta$/', $rel_dir)) { // If not a tmp dir + $filename = basename($destfile); + $rel_dir = preg_replace('/[\\/]$/', '', $rel_dir); + $rel_dir = preg_replace('/^[\\/]/', '', $rel_dir); + + include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php'; + $ecmfile = new EcmFiles($this->db); + $result = $ecmfile->fetch(0, '', ($rel_dir ? $rel_dir.'/' : '').$filename); + + // Set the public "share" key + $setsharekey = false; + if ($this->element == 'propal' || $this->element == 'proposal') { + if (!isset($conf->global->PROPOSAL_ALLOW_ONLINESIGN) || !empty($conf->global->PROPOSAL_ALLOW_ONLINESIGN)) { + $setsharekey = true; // feature to make online signature is not set or set to on (default) + } + if (!empty($conf->global->PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD)) { + $setsharekey = true; + } + } + if ($this->element == 'commande' && !empty($conf->global->ORDER_ALLOW_EXTERNAL_DOWNLOAD)) { + $setsharekey = true; + } + if ($this->element == 'facture' && !empty($conf->global->INVOICE_ALLOW_EXTERNAL_DOWNLOAD)) { + $setsharekey = true; + } + if ($this->element == 'bank_account' && !empty($conf->global->BANK_ACCOUNT_ALLOW_EXTERNAL_DOWNLOAD)) { + $setsharekey = true; + } + if ($this->element == 'contrat' && !empty($conf->global->CONTRACT_ALLOW_EXTERNAL_DOWNLOAD)) { + $setsharekey = true; + } + if ($this->element == 'supplier_proposal' && !empty($conf->global->SUPPLIER_PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD)) { + $setsharekey = true; + } + + if ($setsharekey) { + if (empty($ecmfile->share)) { // Because object not found or share not set yet + require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php'; + $ecmfile->share = getRandomPassword(true); + } + } + + if ($result > 0) { + $ecmfile->label = md5_file(dol_osencode($destfull)); // hash of file content + $ecmfile->fullpath_orig = ''; + $ecmfile->gen_or_uploaded = 'generated'; + $ecmfile->description = ''; // indexed content + $ecmfile->keywords = ''; // keyword content + $result = $ecmfile->update($user); + if ($result < 0) { + setEventMessages($ecmfile->error, $ecmfile->errors, 'warnings'); + return -1; + } + } else { + $ecmfile->entity = $conf->entity; + $ecmfile->filepath = $rel_dir; + $ecmfile->filename = $filename; + $ecmfile->label = md5_file(dol_osencode($destfull)); // hash of file content + $ecmfile->fullpath_orig = ''; + $ecmfile->gen_or_uploaded = 'generated'; + $ecmfile->description = ''; // indexed content + $ecmfile->keywords = ''; // keyword content + $ecmfile->src_object_type = $this->table_element; // $this->table_name is 'myobject' or 'mymodule_myobject'. + $ecmfile->src_object_id = $this->id; + + $result = $ecmfile->create($user); + if ($result < 0) { + setEventMessages($ecmfile->error, $ecmfile->errors, 'warnings'); + return -1; + } + } + + /*$this->result['fullname']=$destfull; + $this->result['filepath']=$ecmfile->filepath; + $this->result['filename']=$ecmfile->filename;*/ + //var_dump($obj->update_main_doc_field);exit; + + if ($update_main_doc_field && !empty($this->table_element)) { + $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element." SET last_main_doc = '".$this->db->escape($ecmfile->filepath."/".$ecmfile->filename)."'"; + $sql .= " WHERE rowid = ".((int) $this->id); + + $resql = $this->db->query($sql); + if (!$resql) { + dol_print_error($this->db); + return -1; + } else { + $this->last_main_doc = $ecmfile->filepath.'/'.$ecmfile->filename; + } + } + } + + return 1; + } + /** * Build thumb * @todo Move this into files.lib.php diff --git a/htdocs/core/lib/payments.lib.php b/htdocs/core/lib/payments.lib.php index d8087e6e73f..05993368802 100644 --- a/htdocs/core/lib/payments.lib.php +++ b/htdocs/core/lib/payments.lib.php @@ -213,14 +213,14 @@ function getHtmlOnlinePaymentLink($type, $ref, $label = '') * Return string with full Url * * @param int $mode 0=True url, 1=Url formated with colors - * @param string $type Type of URL ('free', 'order', 'invoice', 'contractline', 'member' ...) + * @param string $type Type of URL ('free', 'order', 'invoice', 'contractline', 'member', 'boothlocation', ...) * @param string $ref Ref of object - * @param int $amount Amount (required for $type='free' only) - * @param string $freetag Free tag + * @param int $amount Amount (required and used for $type='free' only) + * @param string $freetag Free tag (required and used for $type='free' only) * @param string $localorexternal 0=Url for browser, 1=Url for external access * @return string Url string */ -function getOnlinePaymentUrl($mode, $type, $ref = '', $amount = '9.99', $freetag = 'your_tag', $localorexternal = 0) +function getOnlinePaymentUrl($mode, $type, $ref = '', $amount = '9.99', $freetag = 'your_tag', $localorexternal = 1) { global $conf, $dolibarr_main_url_root; @@ -248,7 +248,7 @@ function getOnlinePaymentUrl($mode, $type, $ref = '', $amount = '9.99', $freetag } //if ($mode) $out.='&noidempotency=1'; } elseif ($type == 'order') { - $out = $urltouse.'/public/payment/newpayment.php?source=order&ref='.($mode ? '' : ''); + $out = $urltouse.'/public/payment/newpayment.php?source='.$type.'&ref='.($mode ? '' : ''); if ($mode == 1) { $out .= 'order_ref'; } @@ -271,7 +271,7 @@ function getOnlinePaymentUrl($mode, $type, $ref = '', $amount = '9.99', $freetag } } } elseif ($type == 'invoice') { - $out = $urltouse.'/public/payment/newpayment.php?source=invoice&ref='.($mode ? '' : ''); + $out = $urltouse.'/public/payment/newpayment.php?source='.$type.'&ref='.($mode ? '' : ''); if ($mode == 1) { $out .= 'invoice_ref'; } @@ -294,7 +294,7 @@ function getOnlinePaymentUrl($mode, $type, $ref = '', $amount = '9.99', $freetag } } } elseif ($type == 'contractline') { - $out = $urltouse.'/public/payment/newpayment.php?source=contractline&ref='.($mode ? '' : ''); + $out = $urltouse.'/public/payment/newpayment.php?source='.$type.'&ref='.($mode ? '' : ''); if ($mode == 1) { $out .= 'contractline_ref'; } @@ -340,9 +340,8 @@ function getOnlinePaymentUrl($mode, $type, $ref = '', $amount = '9.99', $freetag $out .= ($mode ? '' : ''); } } - } - if ($type == 'donation') { - $out = $urltouse.'/public/payment/newpayment.php?source=donation&ref='.($mode ? '' : ''); + } elseif ($type == 'donation') { + $out = $urltouse.'/public/payment/newpayment.php?source='.$type.'&ref='.($mode ? '' : ''); if ($mode == 1) { $out .= 'donation_ref'; } @@ -364,6 +363,29 @@ function getOnlinePaymentUrl($mode, $type, $ref = '', $amount = '9.99', $freetag $out .= ($mode ? '' : ''); } } + } elseif ($type == 'boothlocation') { + $out = $urltouse.'/public/payment/newpayment.php?source='.$type.'&ref='.($mode ? '' : ''); + if ($mode == 1) { + $out .= 'invoice_ref'; + } + if ($mode == 0) { + $out .= urlencode($ref); + } + $out .= ($mode ? '' : ''); + if (!empty($conf->global->PAYMENT_SECURITY_TOKEN)) { + if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) { + $out .= '&securekey='.urlencode($conf->global->PAYMENT_SECURITY_TOKEN); + } else { + $out .= '&securekey='.($mode ? '' : ''); + if ($mode == 1) { + $out .= "hash('".$conf->global->PAYMENT_SECURITY_TOKEN."' + '".$type."' + invoice_ref)"; + } + if ($mode == 0) { + $out .= dol_hash($conf->global->PAYMENT_SECURITY_TOKEN.$type.$ref, 2); + } + $out .= ($mode ? '' : ''); + } + } } // For multicompany diff --git a/htdocs/core/lib/signature.lib.php b/htdocs/core/lib/signature.lib.php index 5a2fd9dfd8c..1d529be6327 100644 --- a/htdocs/core/lib/signature.lib.php +++ b/htdocs/core/lib/signature.lib.php @@ -51,12 +51,13 @@ function showOnlineSignatureUrl($type, $ref) /** * Return string with full Url * - * @param int $mode 0=True url, 1=Url formated with colors - * @param string $type Type of URL ('proposal', ...) - * @param string $ref Ref of object - * @return string Url string + * @param int $mode 0=True url, 1=Url formated with colors + * @param string $type Type of URL ('proposal', ...) + * @param string $ref Ref of object + * @param string $localorexternal 0=Url for browser, 1=Url for external access + * @return string Url string */ -function getOnlineSignatureUrl($mode, $type, $ref = '') +function getOnlineSignatureUrl($mode, $type, $ref = '', $localorexternal = 1) { global $conf, $db, $langs, $dolibarr_main_url_root; @@ -68,16 +69,16 @@ function getOnlineSignatureUrl($mode, $type, $ref = '') $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; + $securekeyseed = ''; if ($type == 'proposal') { + $securekeyseed = $conf->global->PROPOSAL_ONLINE_SIGNATURE_SECURITY_TOKEN; + $out = $urltouse.'/public/onlinesign/newonlinesign.php?source=proposal&ref='.($mode ? '' : ''); if ($mode == 1) { $out .= 'proposal_ref'; diff --git a/htdocs/core/modules/propale/doc/pdf_azur.modules.php b/htdocs/core/modules/propale/doc/pdf_azur.modules.php index e964d61cda3..e97eb0ff81d 100644 --- a/htdocs/core/modules/propale/doc/pdf_azur.modules.php +++ b/htdocs/core/modules/propale/doc/pdf_azur.modules.php @@ -220,6 +220,8 @@ class pdf_azur extends ModelePDFPropales // phpcs:enable global $user, $langs, $conf, $mysoc, $db, $hookmanager, $nblines; + dol_syslog("write_file outputlangs->defaultlang=".(is_object($outputlangs) ? $outputlangs->defaultlang : 'null')); + if (!is_object($outputlangs)) { $outputlangs = $langs; } @@ -228,13 +230,22 @@ class pdf_azur extends ModelePDFPropales $outputlangs->charset_output = 'ISO-8859-1'; } - // Load traductions files required by page + // Load translation files required by page $outputlangs->loadLangs(array("main", "dict", "companies", "bills", "propal", "products")); + global $outputlangsbis; + $outputlangsbis = null; + if (!empty($conf->global->PDF_USE_ALSO_LANGUAGE_CODE) && $outputlangs->defaultlang != $conf->global->PDF_USE_ALSO_LANGUAGE_CODE) { + $outputlangsbis = new Translate('', $conf); + $outputlangsbis->setDefaultLang($conf->global->PDF_USE_ALSO_LANGUAGE_CODE); + $outputlangsbis->loadLangs(array("main", "dict", "companies", "bills", "products", "propal")); + } + $nblines = count($object->lines); // Loop on each lines to detect if there is at least one image to show $realpatharray = array(); + $this->atleastonephoto = false; if (!empty($conf->global->MAIN_GENERATE_PROPOSALS_WITH_PICTURE)) { $objphoto = new Product($this->db); @@ -274,6 +285,7 @@ class pdf_azur extends ModelePDFPropales $realpath = $dir.$filename; $arephoto = true; + $this->atleastonephoto = true; } } } @@ -321,6 +333,10 @@ class pdf_azur extends ModelePDFPropales global $action; $reshook = $hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks + // Set nblines with the new content of lines after hook + $nblines = count($object->lines); + //$nbpayments = count($object->getListOfPayments()); + // Create pdf instance $pdf = pdf_getInstance($this->format); $default_font_size = pdf_getPDFFontSize($outputlangs); // Must be after pdf_getInstance @@ -356,7 +372,7 @@ class pdf_azur extends ModelePDFPropales $pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite); // Left, Top, Right - // Positionne $this->atleastonediscount si on a au moins une remise + // Set $this->atleastonediscount if you have at least one discount for ($i = 0; $i < $nblines; $i++) { if ($object->lines[$i]->remise_percent) { $this->atleastonediscount++; @@ -389,7 +405,7 @@ class pdf_azur extends ModelePDFPropales } //print $heightforinfotot + $heightforsignature + $heightforfreetext + $heightforfooter;exit; - $top_shift = $this->_pagehead($pdf, $object, 1, $outputlangs); + $top_shift = $this->_pagehead($pdf, $object, 1, $outputlangs, $outputlangsbis); $pdf->SetFont('', '', $default_font_size - 1); $pdf->MultiCell(0, 3, ''); // Set interline to 3 $pdf->SetTextColor(0, 0, 0); @@ -399,6 +415,7 @@ class pdf_azur extends ModelePDFPropales $tab_top_newpage = (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD) ? 42 + $top_shift : 10); // Incoterm + $height_incoterms = 0; if (!empty($conf->incoterm->enabled)) { $desc_incoterms = $object->getIncotermsForPDF(); if ($desc_incoterms) { @@ -414,10 +431,11 @@ class pdf_azur extends ModelePDFPropales $pdf->Rect($this->marge_gauche, $tab_top - 1, $this->page_largeur - $this->marge_gauche - $this->marge_droite, $height_incoterms + 1); $tab_top = $nexY + 6; + $height_incoterms += 4; } } - // Affiche notes + // Displays notes $notetoshow = empty($object->note_public) ? '' : $object->note_public; if (!empty($conf->global->MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE)) { // Get first sale rep @@ -438,14 +456,15 @@ class pdf_azur extends ModelePDFPropales if (!empty($conf->global->MAIN_ADD_CREATOR_IN_NOTE) && $object->user_author_id > 0) { $tmpuser = new User($this->db); $tmpuser->fetch($object->user_author_id); - $notetoshow .= $langs->trans("CaseFollowedBy").' '.$tmpuser->getFullName($langs); - if ($tmpuser->email) { - $notetoshow .= ', Mail: '.$tmpuser->email; - } - if ($tmpuser->office_phone) { - $notetoshow .= ', Tel: '.$tmpuser->office_phone; - } + + + $creator_info = $langs->trans("CaseFollowedBy").' '.$tmpuser->getFullName($langs); + if ($tmpuser->email) $creator_info .= ', '.$langs->trans("EMail").': '.$tmpuser->email; + if ($tmpuser->office_phone) $creator_info .= ', '.$langs->trans("Phone").': '.$tmpuser->office_phone; + + $notetoshow = dol_concatdesc($notetoshow, $creator_info); } + if ($notetoshow) { $tab_top -= 2; diff --git a/htdocs/core/modules/propale/doc/pdf_cyan.modules.php b/htdocs/core/modules/propale/doc/pdf_cyan.modules.php index fd8b5c3389b..bb688c137a6 100644 --- a/htdocs/core/modules/propale/doc/pdf_cyan.modules.php +++ b/htdocs/core/modules/propale/doc/pdf_cyan.modules.php @@ -321,7 +321,7 @@ class pdf_cyan extends ModelePDFPropales global $action; $reshook = $hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - // Set nblines with the new facture lines content after hook + // Set nblines with the new content of lines after hook $nblines = count($object->lines); //$nbpayments = count($object->getListOfPayments()); @@ -816,11 +816,11 @@ class pdf_cyan extends ModelePDFPropales $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1', 'color'=>array(80, 80, 80))); //$pdf->SetDrawColor(190,190,200); - $pdf->line($this->marge_gauche, $nexY, $this->page_largeur - $this->marge_droite, $nexY); + $pdf->line($this->marge_gauche, $nexY + 1, $this->page_largeur - $this->marge_droite, $nexY + 1); $pdf->SetLineStyle(array('dash'=>0)); } - + $nexY += 2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) { diff --git a/htdocs/eventorganization/class/conferenceorbooth.class.php b/htdocs/eventorganization/class/conferenceorbooth.class.php index ac9e465b43b..1d462ddae30 100644 --- a/htdocs/eventorganization/class/conferenceorbooth.class.php +++ b/htdocs/eventorganization/class/conferenceorbooth.class.php @@ -135,7 +135,8 @@ class ConferenceOrBooth extends ActionComm public $status; // END MODULEBUILDER PROPERTIES - public $pubregister; + //public $pubregister; + /** * Constructor @@ -252,8 +253,8 @@ class ConferenceOrBooth extends ActionComm $encodedsecurekey = dol_hash($conf->global->EVENTORGANIZATION_SECUREKEY.'conferenceorbooth'.$id, 2); $link_subscription .= '&securekey='.urlencode($encodedsecurekey); - $this->fields['pubregister'] = array('type'=>'url', 'label'=>$langs->trans("PublicAttendeeSubscriptionPage"), 'enabled'=>'1', 'position'=>72, 'notnull'=>0, 'visible'=>1); - $this->pubregister = $link_subscription; + /*$this->fields['pubregister'] = array('type'=>'url', 'label'=>$langs->trans("PublicAttendeeSubscriptionPage"), 'enabled'=>'1', 'position'=>72, 'notnull'=>0, 'visible'=>1); + $this->pubregister = $link_subscription;*/ $this->getActionCommFields(); return $result; diff --git a/htdocs/eventorganization/conferenceorbooth_card.php b/htdocs/eventorganization/conferenceorbooth_card.php index a104637d081..0d14811ef67 100644 --- a/htdocs/eventorganization/conferenceorbooth_card.php +++ b/htdocs/eventorganization/conferenceorbooth_card.php @@ -31,19 +31,23 @@ require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; require_once DOL_DOCUMENT_ROOT.'/eventorganization/class/conferenceorbooth.class.php'; require_once DOL_DOCUMENT_ROOT.'/eventorganization/lib/eventorganization_conferenceorbooth.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; + +global $dolibarr_main_url_root; // Load translation files required by the page $langs->loadLangs(array("eventorganization", "projects")); -// Get parameters -$id = GETPOST('id', 'int'); -$ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); $cancel = GETPOST('cancel', 'aZ09'); $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'conferenceorboothcard'; // To manage different context of search $backtopage = GETPOST('backtopage', 'alpha'); $backtopageforcancel = GETPOST('backtopageforcancel', 'alpha'); + +// Get parameters +$id = GETPOST('id', 'int'); +$ref = GETPOST('ref', 'alpha'); $withproject = GETPOST('withproject', 'int'); $mode = GETPOST('mode', 'alpha'); @@ -114,7 +118,7 @@ if (empty($reshook)) { if (empty($id) && (($action != 'add' && $action != 'create') || $cancel)) { $backtopage = $backurlforlist; } else { - $backtopage = dol_buildpath('/eventorganization/conferenceorbooth_card.php', 1).'?id='.($id > 0 ? $id : '__ID__'); + $backtopage = dol_buildpath('/eventorganization/conferenceorbooth_card.php', 1).'?id='.($id > 0 ? $id : '__ID__').($withproject ? '&withproject=1' : ''); } } } @@ -194,13 +198,13 @@ if (!empty($withproject)) { // Title $morehtmlref .= $projectstatic->title; // Thirdparty - if ($projectstatic->thirdparty->id > 0) { + if (isset($projectstatic->thirdparty->id) && $projectstatic->thirdparty->id > 0) { $morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$projectstatic->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= ''; // Define a complementary filter for search of next/prev ref. - if (empty($user->rights->projet->all->lire)) { + if (empty($user->rights->project->all->lire)) { $objectsListId = $projectstatic->getProjectsAuthorizedForUser($user, 0, 0); $projectstatic->next_prev_filter = " rowid IN (".$db->sanitize(count($objectsListId) ?join(',', array_keys($objectsListId)) : '0').")"; } @@ -275,7 +279,10 @@ if (!empty($withproject)) { // Other attributes $cols = 2; - //include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; + $objectconf = $object; + $object = $projectstatic; + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php'; + $object = $objectconf; print ''; @@ -284,17 +291,17 @@ if (!empty($withproject)) { print '
'; print '
'; - print ''; + print '
'; // Description - print ''; // Categories if ($conf->categorie->enabled) { print '"; } @@ -315,15 +322,15 @@ if (!empty($withproject)) { print ""; print '"; print '"; print '"; + // Link to the submit vote/register page + print ''; + + // Link to the subscribe + print ''; + print '
'.$langs->trans("Description").''; + print ''.$langs->trans("Description").''; print nl2br($projectstatic->description); print '
'.$langs->trans("Categories").''; - print $form->showCategories($projectstatic->id, 'project', 1); + print $form->showCategories($projectstatic->id, Categorie::TYPE_PROJECT, 1); print "
'; - print $form->editfieldkey('PriceOfRegistration', 'price_registration', '', $projectstatic, 0, 'amount', '', 0, 0, 'projectid'); + print $form->editfieldkey($form->textwithpicto($langs->trans('PriceOfBooth'), $langs->trans("PriceOfBoothHelp")), 'price_booth', '', $projectstatic, 0, 'amount', '', 0, 0, 'projectid'); print ''; - print $form->editfieldval('PriceOfRegistration', 'price_registration', $projectstatic->price_registration, $projectstatic, 0, 'amount', '', 0, 0, '', 0, '', 'projectid'); + print $form->editfieldval($form->textwithpicto($langs->trans('PriceOfBooth'), $langs->trans("PriceOfBoothHelp")), 'price_booth', $projectstatic->price_booth, $projectstatic, 0, 'amount', '', 0, 0, '', 0, '', 'projectid'); print "
'; - print $form->editfieldkey('PriceOfBooth', 'price_booth', '', $projectstatic, 0, 'amount', '', 0, 0, 'projectid'); + print $form->editfieldkey($form->textwithpicto($langs->trans('PriceOfRegistration'), $langs->trans("PriceOfRegistrationHelp")), 'price_registration', '', $projectstatic, 0, 'amount', '', 0, 0, 'projectid'); print ''; - print $form->editfieldval('PriceOfBooth', 'price_booth', $projectstatic->price_booth, $projectstatic, 0, 'amount', '', 0, 0, '', 0, '', 'projectid'); + print $form->editfieldval($form->textwithpicto($langs->trans('PriceOfRegistration'), $langs->trans("PriceOfRegistrationHelp")), 'price_registration', $projectstatic->price_registration, $projectstatic, 0, 'amount', '', 0, 0, '', 0, '', 'projectid'); print "
'.$langs->trans("EventOrganizationICSLink").''; @@ -332,12 +339,46 @@ if (!empty($withproject)) { $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT; // Show message - $message = 'global->MAIN_AGENDA_XCAL_EXPORTKEY ?urlencode($conf->global->MAIN_AGENDA_XCAL_EXPORTKEY) : '...'); - $message .= "&project=".$projectstatic->id.'&module='.urlencode('@eventorganization').'&status='.ConferenceOrBooth::STATUS_CONFIRMED.'">'.$langs->trans('DownloadICSLink').''; + $message = 'id.'&module='.urlencode('@eventorganization').'&status='.ConferenceOrBooth::STATUS_CONFIRMED.'">'.$langs->trans('DownloadICSLink').img_picto('', 'download', 'class="paddingleft"').''; print $message; print "
'; + //print ''; + print $form->textwithpicto($langs->trans("SuggestOrVoteForConfOrBooth"), $langs->trans("EvntOrgRegistrationHelpMessage")); + //print ''; + print ''; + $linksuggest = $dolibarr_main_url_root.'/public/project/index.php?id='.((int) $projectstatic->id); + $encodedsecurekey = dol_hash(getDolGlobalString('EVENTORGANIZATION_SECUREKEY').'conferenceorbooth'.((int) $projectstatic->id), 'md5'); + $linksuggest .= '&securekey='.urlencode($encodedsecurekey); + //print ''; + //print ajax_autoselect("linkregister"); + print '
'; + //print ''; + print $langs->trans("PublicAttendeeSubscriptionGlobalPage"); + //print ''; + print ''; + $link_subscription = $dolibarr_main_url_root.'/public/eventorganization/attendee_new.php?id='.((int) $projectstatic->id).'&type=global'; + $encodedsecurekey = dol_hash(getDolGlobalString('EVENTORGANIZATION_SECUREKEY').'conferenceorbooth'.((int) $projectstatic->id), 'md5'); + $link_subscription .= '&securekey='.urlencode($encodedsecurekey); + //print ''; + //print ajax_autoselect("linkregister"); + print '
'; print '
'; @@ -473,7 +514,6 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Object card // ------------------------------------------------------------ - http://dolibarr.local/eventorganization/conferenceorbooth_list.php?projectid=7 $linkback = ''.$langs->trans("BackToList").''; $morehtmlref = '
'; @@ -491,44 +531,10 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea //$keyforbreak='fieldkeytoswitchonsecondcolumn'; // We change column just before this field //unset($object->fields['fk_project']); // Hide field already shown in banner //unset($object->fields['fk_soc']); // Hide field already shown in banner - $keyforbreak='pubregister'; + $keyforbreak='num_vote'; include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_view.tpl.php'; - $object->fetchObjectLinked(); - - if (is_array($object->linkedObjects) && count($object->linkedObjects)>0 && array_key_exists("facture", $object->linkedObjects)) { - foreach ($object->linkedObjects["facture"] as $fac) { - /** - * @var $fac Facture - */ - if (empty($fac->paye)) { - $key = 'paymentlink_'.$fac->id; - print ''; - print img_picto('', 'globe').' '.$langs->trans("ToOfferALinkForOnlinePayment", $langs->transnoentitiesnoconv('Online')) . ' '. $fac->ref.'
'; - print ''; - - print ''; - $sourcetouse = 'boothlocation'; - $reftouse = $fac->id; - $redirection = $dolibarr_main_url_root.'/public/payment/newpayment.php?source='.$sourcetouse.'&ref='.$reftouse.'&booth='.$object->id; - if (!empty($conf->global->PAYMENT_SECURITY_TOKEN)) { - if (!empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) { - $redirection .= '&securekey='.dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . $sourcetouse . $reftouse, 2); // Use the source in the hash to avoid duplicates if the references are identical - } else { - $redirection .= '&securekey='.$conf->global->PAYMENT_SECURITY_TOKEN; - } - } - print ''; - print ''; - print ''; - } - } - } //var_dump($object); // Other attributes. Fields from hook formObjectOptions and Extrafields. include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php'; @@ -592,9 +598,29 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } // Show links to link elements - $linktoelem = $form->showLinkToObjectBlock($object, null, array('conferenceorbooth')); - $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem); + //$linktoelem = $form->showLinkToObjectBlock($object, null, array('conferenceorbooth')); + //$somethingshown = $form->showLinkedObjectBlock($object, $linktoelem); + $object->fetchObjectLinked(); + + if (is_array($object->linkedObjects) && count($object->linkedObjects)>0 && array_key_exists("facture", $object->linkedObjects)) { + foreach ($object->linkedObjects["facture"] as $fac) { + if (empty($fac->paye)) { + $key = 'paymentlink_'.$fac->id; + + print img_picto('', 'globe').' '.$langs->trans("ToOfferALinkForOnlinePayment", $langs->transnoentitiesnoconv('Online')) . ' '. $fac->ref.'
'; + + $sourcetouse = 'boothlocation'; + $reftouse = $fac->id; + + $url = getOnlinePaymentUrl(0, $sourcetouse, $reftouse); + $url .= '&booth='.$object->id; + + print ''; + } + } + } print '
'; print '
'; diff --git a/htdocs/eventorganization/conferenceorbooth_contact.php b/htdocs/eventorganization/conferenceorbooth_contact.php index 6f921848881..67cb2c659ee 100644 --- a/htdocs/eventorganization/conferenceorbooth_contact.php +++ b/htdocs/eventorganization/conferenceorbooth_contact.php @@ -17,41 +17,12 @@ */ /** - * \file conferenceorbooth_contact.php + * \file htdocs/eventorganization/conferenceorbooth_contact.php * \ingroup eventorganization * \brief Tab for contacts linked to ConferenceOrBooth */ -// Load Dolibarr environment -$res = 0; -// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined) -if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) { - $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; -} -// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME -$tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME']; $tmp2 = realpath(__FILE__); $i = strlen($tmp) - 1; $j = strlen($tmp2) - 1; -while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) { - $i--; $j--; -} -if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) { - $res = @include substr($tmp, 0, ($i + 1))."/main.inc.php"; -} -if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) { - $res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php"; -} -// Try main.inc.php using relative path -if (!$res && file_exists("../main.inc.php")) { - $res = @include "../main.inc.php"; -} -if (!$res && file_exists("../../main.inc.php")) { - $res = @include "../../main.inc.php"; -} -if (!$res && file_exists("../../../main.inc.php")) { - $res = @include "../../../main.inc.php"; -} -if (!$res) { - die("Include of main fails"); -} +require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; @@ -59,14 +30,25 @@ require_once DOL_DOCUMENT_ROOT.'/eventorganization/class/conferenceorbooth.class require_once DOL_DOCUMENT_ROOT.'/eventorganization/lib/eventorganization_conferenceorbooth.lib.php'; require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; -// Load translation files required by the page -$langs->loadLangs(array("eventorganization@eventorganization", "companies", "other", "mails")); +require_once DOL_DOCUMENT_ROOT.'/eventorganization/class/conferenceorbooth.class.php'; +require_once DOL_DOCUMENT_ROOT.'/eventorganization/lib/eventorganization_conferenceorbooth.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; -$id = (GETPOST('id') ?GETPOST('id', 'int') : GETPOST('facid', 'int')); // For backward compatibility +// Load translation files required by the page +$langs->loadLangs(array("eventorganization", "projects", "companies", "other", "mails")); + +$id = GETPOST('id', 'int'); $ref = GETPOST('ref', 'alpha'); $lineid = GETPOST('lineid', 'int'); $socid = GETPOST('socid', 'int'); + $action = GETPOST('action', 'aZ09'); +$confirm = GETPOST('confirm', 'alpha'); +$cancel = GETPOST('cancel', 'aZ09'); +$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'conferenceorboothcard'; // To manage different context of search +$backtopage = GETPOST('backtopage', 'alpha'); +$backtopageforcancel = GETPOST('backtopageforcancel', 'alpha'); + $withproject = GETPOST('withproject', 'int'); // Initialize technical objects @@ -78,8 +60,10 @@ $hookmanager->initHooks(array('conferenceorboothcontact', 'globalcard')); // Not // Fetch optionals attributes and labels $extrafields->fetch_name_optionals_label($object->table_element); +$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_'); + // Load object -include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals +include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once. // Security check if ($user->socid > 0) { @@ -88,13 +72,35 @@ if ($user->socid > 0) { $isdraft = (($object->status== $object::STATUS_DRAFT) ? 1 : 0); $result = restrictedArea($user, 'eventorganization', $object->id, '', '', 'fk_soc', 'rowid', $isdraft); -$permission = $user->rights->eventorganization->write; +$permissiontoread = $user->rights->eventorganization->read; +$permissiontoadd = $user->rights->eventorganization->write; // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php +$permissiontodelete = $user->rights->eventorganization->delete || ($permissiontoadd && isset($object->status) && $object->status == $object::STATUS_DRAFT); +$permissionnote = $user->rights->eventorganization->write; // Used by the include of actions_setnotes.inc.php +$permissiondellink = $user->rights->eventorganization->write; // Used by the include of actions_dellink.inc.php +$upload_dir = $conf->eventorganization->multidir_output[isset($object->entity) ? $object->entity : 1]; + +// Security check +if ($user->socid > 0) { + accessforbidden(); +} +$isdraft = (($object->status== $object::STATUS_DRAFT) ? 1 : 0); +$result = restrictedArea($user, 'eventorganization', $object->id, '', '', 'fk_soc', 'rowid', $isdraft); + +if (!$permissiontoread) { + accessforbidden(); +} /* * Actions */ +$parameters = array(); +$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} + if ($action == 'addcontact' && $permission) { // Add a new contact $contactid = (GETPOST('userid') ? GETPOST('userid', 'int') : GETPOST('contactid', 'int')); $typeid = (GETPOST('typecontact') ? GETPOST('typecontact') : GETPOST('type')); @@ -131,16 +137,16 @@ if ($action == 'addcontact' && $permission) { // Add a new contact * View */ -$title = $langs->trans('ConferenceOrBooth')." - ".$langs->trans('ContactsAddresses'); -$help_url = ''; -//$help_url='EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas'; -llxHeader('', $title, $help_url); - $form = new Form($db); $formcompany = new FormCompany($db); $contactstatic = new Contact($db); $userstatic = new User($db); +$title = $langs->trans('ConferenceOrBooth')." - ".$langs->trans('ContactsAddresses'); +$help_url = ''; +//$help_url='EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas'; +llxHeader('', $title, $help_url); + /* *************************************************************************** */ /* */ @@ -175,13 +181,13 @@ if (!empty($withproject)) { // Title $morehtmlref .= $projectstatic->title; // Thirdparty - if ($projectstatic->thirdparty->id > 0) { + if (isset($projectstatic->thirdparty->id) && $projectstatic->thirdparty->id > 0) { $morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$projectstatic->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= ''; // Define a complementary filter for search of next/prev ref. - if (empty($user->rights->projet->all->lire)) { + if (empty($user->rights->project->all->lire)) { $objectsListId = $projectstatic->getProjectsAuthorizedForUser($user, 0, 0); $projectstatic->next_prev_filter = " rowid IN (".$db->sanitize(count($objectsListId) ?join(',', array_keys($objectsListId)) : '0').")"; } @@ -256,7 +262,10 @@ if (!empty($withproject)) { // Other attributes $cols = 2; - //include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; + $objectconf = $object; + $object = $projectstatic; + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php'; + $object = $objectconf; print ''; @@ -265,17 +274,17 @@ if (!empty($withproject)) { print '
'; print '
'; - print ''; + print '
'; // Description - print ''; // Categories if ($conf->categorie->enabled) { print '"; } @@ -296,15 +305,15 @@ if (!empty($withproject)) { print ""; print '"; print '"; print '"; + // Link to the submit vote/register page + print ''; + + // Link to the subscribe + print ''; + print '
'.$langs->trans("Description").''; + print ''.$langs->trans("Description").''; print nl2br($projectstatic->description); print '
'.$langs->trans("Categories").''; - print $form->showCategories($projectstatic->id, 'project', 1); + print $form->showCategories($projectstatic->id, Categorie::TYPE_PROJECT, 1); print "
'; - print $form->editfieldkey('PriceOfRegistration', 'price_registration', '', $projectstatic, 0, 'amount', '', 0, 0, 'projectid'); + print $form->editfieldkey($form->textwithpicto($langs->trans('PriceOfBooth'), $langs->trans("PriceOfBoothHelp")), 'price_booth', '', $projectstatic, 0, 'amount', '', 0, 0, 'projectid'); print ''; - print $form->editfieldval('PriceOfRegistration', 'price_registration', $projectstatic->price_registration, $projectstatic, 0, 'amount', '', 0, 0, '', 0, '', 'projectid'); + print $form->editfieldval($form->textwithpicto($langs->trans('PriceOfBooth'), $langs->trans("PriceOfBoothHelp")), 'price_booth', $projectstatic->price_booth, $projectstatic, 0, 'amount', '', 0, 0, '', 0, '', 'projectid'); print "
'; - print $form->editfieldkey('PriceOfBooth', 'price_booth', '', $projectstatic, 0, 'amount', '', 0, 0, 'projectid'); + print $form->editfieldkey($form->textwithpicto($langs->trans('PriceOfRegistration'), $langs->trans("PriceOfRegistrationHelp")), 'price_registration', '', $projectstatic, 0, 'amount', '', 0, 0, 'projectid'); print ''; - print $form->editfieldval('PriceOfBooth', 'price_booth', $projectstatic->price_booth, $projectstatic, 0, 'amount', '', 0, 0, '', 0, '', 'projectid'); + print $form->editfieldval($form->textwithpicto($langs->trans('PriceOfRegistration'), $langs->trans("PriceOfRegistrationHelp")), 'price_registration', $projectstatic->price_registration, $projectstatic, 0, 'amount', '', 0, 0, '', 0, '', 'projectid'); print "
'.$langs->trans("EventOrganizationICSLink").''; @@ -313,12 +322,46 @@ if (!empty($withproject)) { $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT; // Show message - $message = 'global->MAIN_AGENDA_XCAL_EXPORTKEY ?urlencode($conf->global->MAIN_AGENDA_XCAL_EXPORTKEY) : '...'); - $message .= "&project=".$projectstatic->id.'&module='.urlencode('@eventorganization').'&status='.ConferenceOrBooth::STATUS_CONFIRMED.'">'.$langs->trans('DownloadICSLink').''; + $message = 'id.'&module='.urlencode('@eventorganization').'&status='.ConferenceOrBooth::STATUS_CONFIRMED.'">'.$langs->trans('DownloadICSLink').img_picto('', 'download', 'class="paddingleft"').''; print $message; print "
'; + //print ''; + print $form->textwithpicto($langs->trans("SuggestOrVoteForConfOrBooth"), $langs->trans("EvntOrgRegistrationHelpMessage")); + //print ''; + print ''; + $linksuggest = $dolibarr_main_url_root.'/public/project/index.php?id='.((int) $projectstatic->id); + $encodedsecurekey = dol_hash(getDolGlobalString('EVENTORGANIZATION_SECUREKEY').'conferenceorbooth'.((int) $projectstatic->id), 'md5'); + $linksuggest .= '&securekey='.urlencode($encodedsecurekey); + //print ''; + //print ajax_autoselect("linkregister"); + print '
'; + //print ''; + print $langs->trans("PublicAttendeeSubscriptionGlobalPage"); + //print ''; + print ''; + $link_subscription = $dolibarr_main_url_root.'/public/eventorganization/attendee_new.php?id='.((int) $projectstatic->id).'&type=global'; + $encodedsecurekey = dol_hash(getDolGlobalString('EVENTORGANIZATION_SECUREKEY').'conferenceorbooth'.((int) $projectstatic->id), 'md5'); + $link_subscription .= '&securekey='.urlencode($encodedsecurekey); + //print ''; + //print ajax_autoselect("linkregister"); + print '
'; print '
'; diff --git a/htdocs/eventorganization/conferenceorbooth_document.php b/htdocs/eventorganization/conferenceorbooth_document.php index 537005761d2..2b791ea0e6f 100644 --- a/htdocs/eventorganization/conferenceorbooth_document.php +++ b/htdocs/eventorganization/conferenceorbooth_document.php @@ -32,13 +32,19 @@ require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; require_once DOL_DOCUMENT_ROOT.'/eventorganization/class/conferenceorbooth.class.php'; require_once DOL_DOCUMENT_ROOT.'/eventorganization/lib/eventorganization_conferenceorbooth.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; // Load translation files required by the page -$langs->loadLangs(array("eventorganization", "companies", "other", "mails")); +$langs->loadLangs(array("eventorganization", "projects", "companies", "other", "mails")); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm'); -$id = (GETPOST('socid', 'int') ? GETPOST('socid', 'int') : GETPOST('id', 'int')); +$cancel = GETPOST('cancel', 'aZ09'); +$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'conferenceorboothcard'; // To manage different context of search +$backtopage = GETPOST('backtopage', 'alpha'); +$backtopageforcancel = GETPOST('backtopageforcancel', 'alpha'); + +$id = GETPOST('id', 'int'); $ref = GETPOST('ref', 'alpha'); $withproject = GETPOST('withproject', 'int'); $project_ref = GETPOST('project_ref', 'alpha'); @@ -69,17 +75,25 @@ $extrafields = new ExtraFields($db); $projectstatic = new Project($db); $diroutputmassaction = $conf->eventorganization->dir_output.'/temp/massgeneration/'.$user->id; $hookmanager->initHooks(array('conferenceorboothdocument', 'globalcard')); // Note that conf->hooks_modules contains array + // Fetch optionals attributes and labels $extrafields->fetch_name_optionals_label($object->table_element); +$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_'); + // Load object -include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals +include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once. if ($id > 0 || !empty($ref)) { $upload_dir = $conf->eventorganization->multidir_output[$object->entity ? $object->entity : $conf->entity]."/conferenceorbooth/".get_exdir(0, 0, 0, 1, $object); } -$permissiontoadd = $user->rights->eventorganization->conferenceorbooth->write; // Used by the include of actions_addupdatedelete.inc.php +$permissiontoread = $user->rights->eventorganization->read; +$permissiontoadd = $user->rights->eventorganization->write; // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php +$permissiontodelete = $user->rights->eventorganization->delete || ($permissiontoadd && isset($object->status) && $object->status == $object::STATUS_DRAFT); +$permissionnote = $user->rights->eventorganization->write; // Used by the include of actions_setnotes.inc.php +$permissiondellink = $user->rights->eventorganization->write; // Used by the include of actions_dellink.inc.php +$upload_dir = $conf->eventorganization->multidir_output[isset($object->entity) ? $object->entity : 1]; // Security check if ($user->socid > 0) { @@ -88,11 +102,21 @@ if ($user->socid > 0) { $isdraft = (($object->status== $object::STATUS_DRAFT) ? 1 : 0); $result = restrictedArea($user, 'eventorganization', $object->id, '', '', 'fk_soc', 'rowid', $isdraft); +if (!$permissiontoread) { + accessforbidden(); +} + /* * Actions */ +$parameters = array(); +$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} + include_once DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; @@ -104,7 +128,6 @@ $form = new Form($db); $title = $langs->trans("ConferenceOrBooth").' - '.$langs->trans("Files"); $help_url = ''; -//$help_url='EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas'; llxHeader('', $title, $help_url); $result = $projectstatic->fetch($object->fk_project); @@ -121,6 +144,7 @@ $object->project = clone $projectstatic; if (!empty($withproject)) { // Tabs for project $tab = 'eventorganisation'; + $withProjectUrl = "&withproject=1"; $head = project_prepare_head($projectstatic); print dol_get_fiche_head($head, $tab, $langs->trans("Project"), -1, ($projectstatic->public ? 'projectpub' : 'project'), 0, '', ''); @@ -132,13 +156,13 @@ if (!empty($withproject)) { // Title $morehtmlref .= $projectstatic->title; // Thirdparty - if ($projectstatic->thirdparty->id > 0) { + if (isset($projectstatic->thirdparty->id) && $projectstatic->thirdparty->id > 0) { $morehtmlref .= '
'.$langs->trans('ThirdParty').' : '.$projectstatic->thirdparty->getNomUrl(1, 'project'); } $morehtmlref .= ''; // Define a complementary filter for search of next/prev ref. - if (empty($user->rights->projet->all->lire)) { + if (empty($user->rights->project->all->lire)) { $objectsListId = $projectstatic->getProjectsAuthorizedForUser($user, 0, 0); $projectstatic->next_prev_filter = " rowid IN (".$db->sanitize(count($objectsListId) ?join(',', array_keys($objectsListId)) : '0').")"; } @@ -213,7 +237,10 @@ if (!empty($withproject)) { // Other attributes $cols = 2; - //include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; + $objectconf = $object; + $object = $projectstatic; + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php'; + $object = $objectconf; print ''; @@ -222,17 +249,17 @@ if (!empty($withproject)) { print '
'; print '
'; - print ''; + print '
'; // Description - print ''; // Categories if ($conf->categorie->enabled) { print '"; } @@ -253,15 +280,15 @@ if (!empty($withproject)) { print ""; print '"; print '"; print '"; + // Link to the submit vote/register page + print ''; + + // Link to the subscribe + print ''; + print '
'.$langs->trans("Description").''; + print ''.$langs->trans("Description").''; print nl2br($projectstatic->description); print '
'.$langs->trans("Categories").''; - print $form->showCategories($projectstatic->id, 'project', 1); + print $form->showCategories($projectstatic->id, Categorie::TYPE_PROJECT, 1); print "
'; - print $form->editfieldkey('PriceOfRegistration', 'price_registration', '', $projectstatic, 0, 'amount', '', 0, 0, 'projectid'); + print $form->editfieldkey($form->textwithpicto($langs->trans('PriceOfBooth'), $langs->trans("PriceOfBoothHelp")), 'price_booth', '', $projectstatic, 0, 'amount', '', 0, 0, 'projectid'); print ''; - print $form->editfieldval('PriceOfRegistration', 'price_registration', $projectstatic->price_registration, $projectstatic, 0, 'amount', '', 0, 0, '', 0, '', 'projectid'); + print $form->editfieldval($form->textwithpicto($langs->trans('PriceOfBooth'), $langs->trans("PriceOfBoothHelp")), 'price_booth', $projectstatic->price_booth, $projectstatic, 0, 'amount', '', 0, 0, '', 0, '', 'projectid'); print "
'; - print $form->editfieldkey('PriceOfBooth', 'price_booth', '', $projectstatic, 0, 'amount', '', 0, 0, 'projectid'); + print $form->editfieldkey($form->textwithpicto($langs->trans('PriceOfRegistration'), $langs->trans("PriceOfRegistrationHelp")), 'price_registration', '', $projectstatic, 0, 'amount', '', 0, 0, 'projectid'); print ''; - print $form->editfieldval('PriceOfBooth', 'price_booth', $projectstatic->price_booth, $projectstatic, 0, 'amount', '', 0, 0, '', 0, '', 'projectid'); + print $form->editfieldval($form->textwithpicto($langs->trans('PriceOfRegistration'), $langs->trans("PriceOfRegistrationHelp")), 'price_registration', $projectstatic->price_registration, $projectstatic, 0, 'amount', '', 0, 0, '', 0, '', 'projectid'); print "
'.$langs->trans("EventOrganizationICSLink").''; @@ -270,12 +297,46 @@ if (!empty($withproject)) { $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT; // Show message - $message = 'global->MAIN_AGENDA_XCAL_EXPORTKEY ?urlencode($conf->global->MAIN_AGENDA_XCAL_EXPORTKEY) : '...'); - $message .= "&project=".$projectstatic->id.'&module='.urlencode('@eventorganization').'&status='.ConferenceOrBooth::STATUS_CONFIRMED.'">'.$langs->trans('DownloadICSLink').''; + $message = 'id.'&module='.urlencode('@eventorganization').'&status='.ConferenceOrBooth::STATUS_CONFIRMED.'">'.$langs->trans('DownloadICSLink').img_picto('', 'download', 'class="paddingleft"').''; print $message; print "
'; + //print ''; + print $form->textwithpicto($langs->trans("SuggestOrVoteForConfOrBooth"), $langs->trans("EvntOrgRegistrationHelpMessage")); + //print ''; + print ''; + $linksuggest = $dolibarr_main_url_root.'/public/project/index.php?id='.((int) $projectstatic->id); + $encodedsecurekey = dol_hash(getDolGlobalString('EVENTORGANIZATION_SECUREKEY').'conferenceorbooth'.((int) $projectstatic->id), 'md5'); + $linksuggest .= '&securekey='.urlencode($encodedsecurekey); + //print ''; + //print ajax_autoselect("linkregister"); + print '
'; + //print ''; + print $langs->trans("PublicAttendeeSubscriptionGlobalPage"); + //print ''; + print ''; + $link_subscription = $dolibarr_main_url_root.'/public/eventorganization/attendee_new.php?id='.((int) $projectstatic->id).'&type=global'; + $encodedsecurekey = dol_hash(getDolGlobalString('EVENTORGANIZATION_SECUREKEY').'conferenceorbooth'.((int) $projectstatic->id), 'md5'); + $link_subscription .= '&securekey='.urlencode($encodedsecurekey); + //print ''; + //print ajax_autoselect("linkregister"); + print '
'; print '
'; @@ -305,7 +366,6 @@ if ($object->id) { } // Object card - // ------------- //----------------------------------------------- $linkback = ''.$langs->trans("BackToList").''; diff --git a/htdocs/eventorganization/conferenceorbooth_list.php b/htdocs/eventorganization/conferenceorbooth_list.php index e67a742bdfd..5980bfa6132 100644 --- a/htdocs/eventorganization/conferenceorbooth_list.php +++ b/htdocs/eventorganization/conferenceorbooth_list.php @@ -31,9 +31,7 @@ require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; require_once DOL_DOCUMENT_ROOT.'/eventorganization/class/conferenceorbooth.class.php'; require_once DOL_DOCUMENT_ROOT.'/eventorganization/lib/eventorganization_conferenceorbooth.lib.php'; require_once DOL_DOCUMENT_ROOT.'/eventorganization/class/conferenceorboothattendee.class.php'; -if ($conf->categorie->enabled) { - require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; -} +require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; global $dolibarr_main_url_root; @@ -231,9 +229,9 @@ if (empty($reshook)) { $form = new Form($db); $now = dol_now(); +$title = $langs->trans('ListOfConferencesOrBooths'); //$help_url="EN:Module_ConferenceOrBooth|FR:Module_ConferenceOrBooth_FR|ES:Módulo_ConferenceOrBooth"; $help_url = ''; -$title = $langs->trans('ListOfConferencesOrBooths'); if ($projectid > 0 || $projectref) { $project = new Project($db); @@ -302,34 +300,36 @@ if ($projectid > 0) { print ''; // Usage - print ''; - print ''; + print ''; } - if (empty($conf->global->PROJECT_HIDE_TASKS)) { - print 'usage_task ? ' checked="checked"' : '').'"> '; - $htmltext = $langs->trans("ProjectFollowTasks"); - print $form->textwithpicto($langs->trans("ProjectFollowTasks"), $htmltext); - print '
'; - } - if (!empty($conf->global->PROJECT_BILL_TIME_SPENT)) { - print 'usage_bill_time ? ' checked="checked"' : '').'"> '; - $htmltext = $langs->trans("ProjectBillTimeDescription"); - print $form->textwithpicto($langs->trans("BillTime"), $htmltext); - print '
'; - } - if (!empty($conf->eventorganization->enabled)) { - print 'usage_organize_event ? ' checked="checked"' : '').'"> '; - $htmltext = $langs->trans("EventOrganizationDescriptionLong"); - print $form->textwithpicto($langs->trans("ManageOrganizeEvent"), $htmltext); - } - print ''; // Visibility print '"; } diff --git a/htdocs/eventorganization/conferenceorboothattendee_card.php b/htdocs/eventorganization/conferenceorboothattendee_card.php index 376eeee6e0b..c60c0418d43 100644 --- a/htdocs/eventorganization/conferenceorboothattendee_card.php +++ b/htdocs/eventorganization/conferenceorboothattendee_card.php @@ -519,7 +519,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $moreparam .= '&fk_project='.((int) $fk_project); } - $head = conferenceorboothattendeePrepareHead($object); + $head = conferenceorboothAttendeePrepareHead($object); print dol_get_fiche_head($head, 'card', $langs->trans("ConferenceOrBoothAttendee"), -1, $object->picto); $formconfirm = ''; diff --git a/htdocs/eventorganization/conferenceorboothattendee_note.php b/htdocs/eventorganization/conferenceorboothattendee_note.php index 27071ebbae5..19d413daaa0 100644 --- a/htdocs/eventorganization/conferenceorboothattendee_note.php +++ b/htdocs/eventorganization/conferenceorboothattendee_note.php @@ -136,7 +136,7 @@ llxHeader('', $langs->trans('ConferenceOrBoothAttendee'), $help_url); if ($id > 0 || !empty($ref)) { $object->fetch_thirdparty(); - $head = conferenceorboothattendeePrepareHead($object); + $head = conferenceorboothAttendeePrepareHead($object); print dol_get_fiche_head($head, 'note', $langs->trans("ConferenceOrBoothAttendee"), -1, $object->picto); diff --git a/htdocs/eventorganization/lib/eventorganization_conferenceorbooth.lib.php b/htdocs/eventorganization/lib/eventorganization_conferenceorbooth.lib.php index b8a2578e93d..6a76a14a38c 100644 --- a/htdocs/eventorganization/lib/eventorganization_conferenceorbooth.lib.php +++ b/htdocs/eventorganization/lib/eventorganization_conferenceorbooth.lib.php @@ -47,11 +47,14 @@ function conferenceorboothPrepareHead($object, $with_project = 0) $head[$h][2] = 'card'; $h++; + /* $head[$h][0] = DOL_URL_ROOT.'/eventorganization/conferenceorbooth_contact.php?id='.$object->id.$withProjectUrl; $head[$h][1] = $langs->trans("ContactsAddresses"); $head[$h][2] = 'contact'; $h++; + */ + /* $head[$h][0] = DOL_URL_ROOT.'/eventorganization/conferenceorboothattendee_list.php?conforboothid='.$object->id.$withProjectUrl; $head[$h][1] = $langs->trans("Attendees"); $head[$h][2] = 'attendees'; @@ -77,6 +80,7 @@ function conferenceorboothPrepareHead($object, $with_project = 0) $head[$h][1] .= ''.$nbAttendees.''; } $h++; + */ require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php'; @@ -188,7 +192,7 @@ function conferenceorboothProjectPrepareHead($object) * @param ConferenceOrBoothAttendee $object ConferenceOrBoothAttendee * @return array Array of tabs */ -function conferenceorboothattendeePrepareHead($object) +function conferenceorboothAttendeePrepareHead($object) { global $db, $langs, $conf; diff --git a/htdocs/public/onlinesign/newonlinesign.php b/htdocs/public/onlinesign/newonlinesign.php index caec61f4a2a..993297383d1 100644 --- a/htdocs/public/onlinesign/newonlinesign.php +++ b/htdocs/public/onlinesign/newonlinesign.php @@ -53,7 +53,7 @@ require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; // Load translation files -$langs->loadLangs(array("main", "other", "dict", "bills", "companies", "errors", "paybox","propal")); +$langs->loadLangs(array("main", "other", "dict", "bills", "companies", "errors", "members", "paybox", "propal")); // Security check // No check on module enabled. Done later according to $validpaymentmethod @@ -61,6 +61,7 @@ $langs->loadLangs(array("main", "other", "dict", "bills", "companies", "errors", // Get parameters $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'alpha'); + $refusepropal = GETPOST('refusepropal', 'alpha'); $message = GETPOST('message', 'aZ09'); @@ -119,15 +120,23 @@ $urlko = preg_replace('/&$/', '', $urlko); // Remove last & $creditor = $mysoc->name; -$object = new Propal($db); -$object->fetch(0, $ref); +$type = $source; +if ($source == 'proposal') { + $object = new Propal($db); + $object->fetch(0, $ref); +} else { + accessforbidden('Bad value for source'); + exit; +} + // Check securitykey -$securekeyseed = $conf->global->PROPOSAL_ONLINE_SIGNATURE_SECURITY_TOKEN; -$type = $source; -$calculatedsecuritykey = dol_hash($securekeyseed.$type.$ref, '0'); +$securekeyseed = ''; +if ($source == 'proposal') { + $securekeyseed = $conf->global->PROPOSAL_ONLINE_SIGNATURE_SECURITY_TOKEN; +} -if ($calculatedsecuritykey != $SECUREKEY) { +if (!dol_verifyHash($securekeyseed.$type.$ref, $SECUREKEY, '0')) { 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); @@ -184,8 +193,8 @@ if ($action == 'refusepropal') { 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' -if (!empty($source) && in_array($ref, array('member_ref', 'contractline_ref', 'invoice_ref', 'order_ref', ''))) { +// Check link validity for param 'source' to avoid use of the examples as value +if (!empty($source) && in_array($ref, array('member_ref', 'contractline_ref', 'invoice_ref', 'order_ref', 'proposal_ref', ''))) { $langs->load("errors"); dol_print_error_email('BADREFINONLINESIGNFORM', $langs->trans("ErrorBadLinkSourceSetButBadValueForRef", $source, $ref)); // End of page @@ -241,16 +250,15 @@ if ($urllogo) { } print ''; } -if (!empty($conf->global->PROPOSAL_IMAGE_PUBLIC_SIGN)) { +if ($source == 'proposal' && !empty($conf->global->PROPOSAL_IMAGE_PUBLIC_SIGN)) { print '
'; - print ''; + print ''; print '
'; } // Output introduction text $text = ''; if (!empty($conf->global->ONLINE_SIGN_NEWFORM_TEXT)) { - $langs->load("members"); $reg = array(); if (preg_match('/^\((.*)\)$/', $conf->global->ONLINE_SIGN_NEWFORM_TEXT, $reg)) { $text .= $langs->trans($reg[1])."
\n"; @@ -364,12 +372,13 @@ if ($action != 'dosign') { print ''."\n"; print ''."\n"; diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index 2cb5a7e9076..d00aa9c4be0 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -300,21 +300,23 @@ if ($tmpsource == 'membersubscription') { } $valid = true; if (!empty($conf->global->PAYMENT_SECURITY_TOKEN)) { - $token = ''; - $tokenoldcompat = ''; + $tokenisok = false; if (!empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) { if ($tmpsource && $REF) { - $token = dol_hash($conf->global->PAYMENT_SECURITY_TOKEN.$tmpsource.$REF, 2); // Use the source in the hash to avoid duplicates if the references are identical + // Use the source in the hash to avoid duplicates if the references are identical + $tokenisok = dol_verifyHash($conf->global->PAYMENT_SECURITY_TOKEN.$tmpsource.$REF, $SECUREKEY, '2'); + // Do a second test for retro-compatibility (token may have been hashed with membersubscription in external module) if ($tmpsource != $source) { - $tokenoldcompat = dol_hash($conf->global->PAYMENT_SECURITY_TOKEN.$source.$REF, 2); // for retro-compatibility (token may have been hashed with membersubscription in external module) + $tokenisok = dol_verifyHash($conf->global->PAYMENT_SECURITY_TOKEN.$source.$REF, $SECUREKEY, '2'); } } else { - $token = dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2); + $tokenisok = dol_verifyHash($conf->global->PAYMENT_SECURITY_TOKEN, $SECUREKEY, '2'); } } else { - $token = $conf->global->PAYMENT_SECURITY_TOKEN; + $tokenisok = ($conf->global->PAYMENT_SECURITY_TOKEN == $SECUREKEY); } - if ($SECUREKEY != $token && (empty($tokenoldcompat) || $SECUREKEY != $tokenoldcompat)) { + + if (! $tokenisok) { if (empty($conf->global->PAYMENT_SECURITY_ACCEPT_ANY_TOKEN)) { $valid = false; // PAYMENT_SECURITY_ACCEPT_ANY_TOKEN is for backward compatibility } else { @@ -324,7 +326,7 @@ if (!empty($conf->global->PAYMENT_SECURITY_TOKEN)) { if (!$valid) { print '
Bad value for key.
'; - //print 'SECUREKEY='.$SECUREKEY.' token='.$token.' valid='.$valid; + //print 'SECUREKEY='.$SECUREKEY.' valid='.$valid; exit; } } From b19a148f4cc539a72e46689d116b2dd045fb8fb1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 4 Jan 2022 13:25:02 +0100 Subject: [PATCH 02/20] Fix ip used to sing not saved --- htdocs/core/ajax/onlineSign.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/htdocs/core/ajax/onlineSign.php b/htdocs/core/ajax/onlineSign.php index 996fd86bca7..64ef3487f29 100644 --- a/htdocs/core/ajax/onlineSign.php +++ b/htdocs/core/ajax/onlineSign.php @@ -134,8 +134,16 @@ if ($action == "importSignature") { // Index the new file and update the last_main_doc property of object. $object->indexFile($newpdffilename, 1); + $online_sign_ip = getUserRemoteIP(); + $online_sign_name = ''; // TODO Ask name on form to sign + $sql = "UPDATE ".MAIN_DB_PREFIX."propal"; - $sql .= " SET fk_statut = ".((int) $object::STATUS_SIGNED).", note_private = '".$object->note_private."', date_signature='".$db->idate(dol_now())."'"; + $sql .= " SET fk_statut = ".((int) $object::STATUS_SIGNED).", note_private = '".$this->db->escape($object->note_private)."',"; + $sql .= " date_signature = '".$this->db->idate(dol_now())."',"; + $sql .= " online_sign_ip = '".$this->db->escape($online_sign_ip)."'"; + if ($online_sign_name) { + $sql .= ", online_sign_name = '".$this->db->escape($online_sign_name)."'"; + } $sql .= " WHERE rowid = ".((int) $object->id); dol_syslog(__METHOD__, LOG_DEBUG); From f0660b3c9982bcbf229bf5e50b529a0939b65e62 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 4 Jan 2022 13:27:26 +0100 Subject: [PATCH 03/20] Fix db transaction --- htdocs/core/ajax/onlineSign.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/htdocs/core/ajax/onlineSign.php b/htdocs/core/ajax/onlineSign.php index 64ef3487f29..5110918541f 100644 --- a/htdocs/core/ajax/onlineSign.php +++ b/htdocs/core/ajax/onlineSign.php @@ -131,6 +131,8 @@ if ($action == "importSignature") { $pdf->Close(); $pdf->Output($newpdffilename, "F"); + $db->begin(); + // Index the new file and update the last_main_doc property of object. $object->indexFile($newpdffilename, 1); @@ -138,11 +140,11 @@ if ($action == "importSignature") { $online_sign_name = ''; // TODO Ask name on form to sign $sql = "UPDATE ".MAIN_DB_PREFIX."propal"; - $sql .= " SET fk_statut = ".((int) $object::STATUS_SIGNED).", note_private = '".$this->db->escape($object->note_private)."',"; - $sql .= " date_signature = '".$this->db->idate(dol_now())."',"; - $sql .= " online_sign_ip = '".$this->db->escape($online_sign_ip)."'"; + $sql .= " SET fk_statut = ".((int) $object::STATUS_SIGNED).", note_private = '".$db->escape($object->note_private)."',"; + $sql .= " date_signature = '".$db->idate(dol_now())."',"; + $sql .= " online_sign_ip = '".$db->escape($online_sign_ip)."'"; if ($online_sign_name) { - $sql .= ", online_sign_name = '".$this->db->escape($online_sign_name)."'"; + $sql .= ", online_sign_name = '".$db->escape($online_sign_name)."'"; } $sql .= " WHERE rowid = ".((int) $object->id); From 6bd6bc3d572e2493d4d03a160a35f8a5a3d40dbd Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 4 Jan 2022 13:33:59 +0100 Subject: [PATCH 04/20] Fix link to download document on signed proposal --- htdocs/public/onlinesign/newonlinesign.php | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/htdocs/public/onlinesign/newonlinesign.php b/htdocs/public/onlinesign/newonlinesign.php index 993297383d1..cb2458de4ff 100644 --- a/htdocs/public/onlinesign/newonlinesign.php +++ b/htdocs/public/onlinesign/newonlinesign.php @@ -48,6 +48,7 @@ if (is_numeric($entity)) { require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; @@ -334,9 +335,22 @@ if ($source == 'proposal') { print $langs->trans("DownloadDocument").''; } } else { - /* TODO If the file of proposal signed is newer than the default proposal file, get link of proposal signed + $last_main_doc_file = $proposal->last_main_doc; + if (preg_match('/_signed-(\d+)/', $last_main_doc_file)) { // If the last main doc has been signed + $last_main_doc_file_not_signed = preg_replace('/_signed-(\d+)/', '', $last_main_doc_file); - */ + $datefilesigned = dol_filemtime($last_main_doc_file); + $datefilenotsigned = dol_filemtime($last_main_doc_file_not_signed); + + if (empty($datefilenotsigned) || $datefilesigned > $datefilenotsigned) { + $directdownloadlink = $proposal->getLastMainDocLink('proposal'); + if ($directdownloadlink) { + print '
'; + print img_mime($proposal->last_main_doc, ''); + print $langs->trans("DownloadDocument").''; + } + } + } } print ''; From 956288081cb681cdb8f971eb47cb45031052e9e9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 4 Jan 2022 13:45:18 +0100 Subject: [PATCH 05/20] Fix phpunit --- htdocs/user/class/user.class.php | 2 +- test/phpunit/UserTest.php | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index 780744b4c8e..aa9ca1285ed 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -2109,7 +2109,7 @@ class User extends CommonObject * @param int $notrigger 1=Does not launch triggers * @param int $nosyncmember Do not synchronize linked member * @param int $passwordalreadycrypted 0=Value is cleartext password, 1=Value is crypted value. - * @return string If OK return clear password, 0 if no change, < 0 if error + * @return string If OK return clear password, 0 if no change (warning, you may retreive 1 instead of 0 even if password was same), < 0 if error */ public function setPassword($user, $password = '', $changelater = 0, $notrigger = 0, $nosyncmember = 0, $passwordalreadycrypted = 0) { diff --git a/test/phpunit/UserTest.php b/test/phpunit/UserTest.php index de92c6e62f4..b8025a3cd41 100644 --- a/test/phpunit/UserTest.php +++ b/test/phpunit/UserTest.php @@ -290,7 +290,7 @@ class UserTest extends PHPUnit\Framework\TestCase $conf->global->USER_PASSWORD_GENERATED = 'standard'; $localobject->error = ''; - $result = $localobject->setPassword($user, '12345678901'); + $result = $localobject->setPassword($user, '123456789AA'); print __METHOD__." set a too small password with USER_PASSWORD_GENERATED = standard\n"; print __METHOD__." localobject->error=".$localobject->error."\n"; $this->assertEquals(-1, $result, 'We must receive a negative error code (pass too small) and we did not here'); @@ -301,7 +301,7 @@ class UserTest extends PHPUnit\Framework\TestCase $conf->global->USER_PASSWORD_PATTERN = '12;2;2;2;3;1'; $localobject->error = ''; - $result = $localobject->setPassword($user, '12345678901'); + $result = $localobject->setPassword($user, '1234567892BB'); print __METHOD__." set a too small password with USER_PASSWORD_GENERATED = perso\n"; print __METHOD__." localobject->error=".$localobject->error."\n"; $this->assertEquals(-1, $result, 'We must receive a negative error code (pass too small) and we did not here'); @@ -321,10 +321,10 @@ class UserTest extends PHPUnit\Framework\TestCase $this->assertEquals(-1, $result, 'We must receive a negative error code (pass without enough uppercase) and we did not here'); $localobject->error = ''; - $result = $localobject->setPassword($user, '$*34567890AB'); + $result = $localobject->setPassword($user, '$*34567890CD'); print __METHOD__." set a password with enough uppercase\n"; print __METHOD__." localobject->error=".$localobject->error."\n"; - $this->assertEquals('$*34567890AB', $result, 'We must get the password as it is valid (pass with enough uppercase) and we did not here'); + $this->assertEquals('$*34567890CD', $result, 'We must get the password as it is valid (pass with enough uppercase) and we did not here'); // Test digits : $chartofound = "!@#$%&*()_-+={}[]\\|:;'/"; From 0046cbbeceec955db90070adb87feaffb8d9b975 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 4 Jan 2022 15:13:04 +0100 Subject: [PATCH 06/20] Fix phpunit --- htdocs/core/class/commonobject.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index ce76e65ad89..72e5d986d72 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -5337,7 +5337,7 @@ abstract class CommonObject */ public function indexFile($destfull, $update_main_doc_field) { - global $user; + global $conf, $user; $upload_dir = dirname($destfull); $destfile = basename($destfull); From e5241631e1261fb4d7ce25582d04eb248ad09bf6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 4 Jan 2022 16:14:36 +0100 Subject: [PATCH 07/20] Update resoures of some spec/standard --- dev/resources/iso-normes/QR code for invoices.txt | 13 +++++++++++++ dev/resources/iso-normes/address_format.txt | 2 ++ ... le format PDF A.pdf => format PDF - PDF A.pdf} | Bin ...pdf => format_FEC - Lien_outil_de_test_agréé.pdf} | Bin ...e_FEC_file.txt => format_FEC - fie example.txt} | 0 dev/resources/iso-normes/locales.txt | 2 ++ dev/resources/iso-normes/world_tax_rates.txt | 3 +++ 7 files changed, 20 insertions(+) create mode 100644 dev/resources/iso-normes/QR code for invoices.txt rename dev/resources/iso-normes/{14-pourquoi le format PDF A.pdf => format PDF - PDF A.pdf} (100%) rename dev/resources/iso-normes/{format_FEC-Lien_outil_de_test_agréé.pdf => format_FEC - Lien_outil_de_test_agréé.pdf} (100%) rename dev/resources/iso-normes/{sample_FEC_file.txt => format_FEC - fie example.txt} (100%) diff --git a/dev/resources/iso-normes/QR code for invoices.txt b/dev/resources/iso-normes/QR code for invoices.txt new file mode 100644 index 00000000000..a55c9569297 --- /dev/null +++ b/dev/resources/iso-normes/QR code for invoices.txt @@ -0,0 +1,13 @@ +List of QR Code format we found on some invoices +------------------------------------------------ + + +* For SEPA QR payment Code format (Europe) +------------------------------------------ +https://en.wikipedia.org/wiki/EPC_QR_code#Generators + + + +* For ZATCA QR Code format (Saudi Arabia) +----------------------------------------- +https://www.pwc.com/m1/en/services/tax/me-tax-legal-news/2021/saudi-arabia-guide-to-develop-compliant-qr-code-for-simplified-einvoices.html diff --git a/dev/resources/iso-normes/address_format.txt b/dev/resources/iso-normes/address_format.txt index d87e90e79b5..18069cd89fa 100644 --- a/dev/resources/iso-normes/address_format.txt +++ b/dev/resources/iso-normes/address_format.txt @@ -1,3 +1,5 @@ +Address format + https://bitboost.com/ref/international-address-formats.html#Formats https://www.upu.int/en/Postal-Solutions/Programmes-Services/Addressing-Solutions diff --git a/dev/resources/iso-normes/14-pourquoi le format PDF A.pdf b/dev/resources/iso-normes/format PDF - PDF A.pdf similarity index 100% rename from dev/resources/iso-normes/14-pourquoi le format PDF A.pdf rename to dev/resources/iso-normes/format PDF - PDF A.pdf diff --git a/dev/resources/iso-normes/format_FEC-Lien_outil_de_test_agréé.pdf b/dev/resources/iso-normes/format_FEC - Lien_outil_de_test_agréé.pdf similarity index 100% rename from dev/resources/iso-normes/format_FEC-Lien_outil_de_test_agréé.pdf rename to dev/resources/iso-normes/format_FEC - Lien_outil_de_test_agréé.pdf diff --git a/dev/resources/iso-normes/sample_FEC_file.txt b/dev/resources/iso-normes/format_FEC - fie example.txt similarity index 100% rename from dev/resources/iso-normes/sample_FEC_file.txt rename to dev/resources/iso-normes/format_FEC - fie example.txt diff --git a/dev/resources/iso-normes/locales.txt b/dev/resources/iso-normes/locales.txt index 67ea5280342..a4459d2a8b1 100644 --- a/dev/resources/iso-normes/locales.txt +++ b/dev/resources/iso-normes/locales.txt @@ -1,3 +1,5 @@ +Date and number format +---------------------- For languages: https://icu4c-demos.unicode.org/icu-bin/icudemos - Locale Explorer -> Error 404 diff --git a/dev/resources/iso-normes/world_tax_rates.txt b/dev/resources/iso-normes/world_tax_rates.txt index c007474e5fd..508446b618a 100644 --- a/dev/resources/iso-normes/world_tax_rates.txt +++ b/dev/resources/iso-normes/world_tax_rates.txt @@ -1,3 +1,6 @@ +VAT Rates +--------- + http://www.taxrates.cc/index.html https://en.wikipedia.org/wiki/List_of_countries_by_tax_rates From 7228c762cde0513055fe47330371330a7a7d325e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 4 Jan 2022 16:20:05 +0100 Subject: [PATCH 08/20] Update dir of spec --- .../Intracommreport-ManuelDebXml.pdf | Bin 225572 -> 0 bytes .../facturx-zugferd/README.txt | 0 .../Intracommreport-ManuelDebXml.pdf} | Bin .../Intracommreport-ManuelDesXML.pdf | Bin .../intracommreport/schema_deb.xsd | 0 .../{ => iso-normes}/sepa/pain.001.001.03.xsd | 0 .../{ => iso-normes}/sepa/pain.008.001.02.xsd | 0 .../sepa/sample-credit-transfer.xml | 0 .../sepa/sample-direct-debit.xml | 0 dev/resources/{ => iso-normes}/sepa/text.txt | 0 10 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dev/resources/iso-normes/Intracommreport-ManuelDebXml.pdf rename dev/resources/{ => iso-normes}/facturx-zugferd/README.txt (100%) rename dev/resources/{intracommreport/manuelDebXml1.2.pdf => iso-normes/intracommreport/Intracommreport-ManuelDebXml.pdf} (100%) rename dev/resources/iso-normes/{ => intracommreport}/Intracommreport-ManuelDesXML.pdf (100%) rename dev/resources/{ => iso-normes}/intracommreport/schema_deb.xsd (100%) rename dev/resources/{ => iso-normes}/sepa/pain.001.001.03.xsd (100%) rename dev/resources/{ => iso-normes}/sepa/pain.008.001.02.xsd (100%) rename dev/resources/{ => iso-normes}/sepa/sample-credit-transfer.xml (100%) rename dev/resources/{ => iso-normes}/sepa/sample-direct-debit.xml (100%) rename dev/resources/{ => iso-normes}/sepa/text.txt (100%) diff --git a/dev/resources/iso-normes/Intracommreport-ManuelDebXml.pdf b/dev/resources/iso-normes/Intracommreport-ManuelDebXml.pdf deleted file mode 100644 index fef9f48f53e999ebf0239534d5ced7d68b1b1533..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225572 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

K)#IHq1+HK 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�H>a4y93rXXnz{~q=3R*h+oHUl3n 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≤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 Date: Tue, 4 Jan 2022 20:44:17 +0100 Subject: [PATCH 09/20] Some country need qr code for legal issues. Add a hook to allow this. --- htdocs/core/class/commoninvoice.class.php | 58 +++++++++++++++++++ .../modules/facture/doc/pdf_crabe.modules.php | 43 +++++++++++++- .../facture/doc/pdf_sponge.modules.php | 40 ++++++++++++- 3 files changed, 136 insertions(+), 5 deletions(-) diff --git a/htdocs/core/class/commoninvoice.class.php b/htdocs/core/class/commoninvoice.class.php index 8ce7fb24aeb..74ff2141820 100644 --- a/htdocs/core/class/commoninvoice.class.php +++ b/htdocs/core/class/commoninvoice.class.php @@ -811,6 +811,64 @@ abstract class CommonInvoice extends CommonObject return -1; } } + + + /** + * Build string for ZATCA QR Code (Arabi Saudia) + * + * @return string String for ZATCA QR Code + */ + public function buildZATCAQRString() + { + global $conf; + + $tmplang = new Translate('', $conf); + $tmplang->setDefaultLang('en_US'); + $tmplang->load("main"); + + $datestring = dol_print_date($this->date, 'dayhourrfc'); + $pricewithtaxstring = price($this->total_ttc, 0, $tmplang, 0, -1, 2); + $pricetaxstring = price($this->total_tva, 0, $tmplang, 0, -1, 2); + + /* + $name = implode(unpack("H*", $this->thirdparty->name)); + $vatnumber = implode(unpack("H*", $this->thirdparty->tva_intra)); + $date = implode(unpack("H*", $datestring)); + $pricewithtax = implode(unpack("H*", price2num($pricewithtaxstring, 2))); + $pricetax = implode(unpack("H*", $pricetaxstring)); + + var_dump(strlen($this->thirdparty->name)); + var_dump(str_pad(dechex('9'), 2, '0', STR_PAD_LEFT)); + var_dump($this->thirdparty->name); + var_dump(implode(unpack("H*", $this->thirdparty->name))); + var_dump(price($this->total_tva, 0, $tmplang, 0, -1, 2)); + + $s = '01'.str_pad(dechex(strlen($this->thirdparty->name)), 2, '0', STR_PAD_LEFT).$name; + $s .= '02'.str_pad(dechex(strlen($this->thirdparty->tva_intra)), 2, '0', STR_PAD_LEFT).$vatnumber; + $s .= '03'.str_pad(dechex(strlen($datestring)), 2, '0', STR_PAD_LEFT).$date; + $s .= '04'.str_pad(dechex(strlen($pricewithtaxstring)), 2, '0', STR_PAD_LEFT).$pricewithtax; + $s .= '05'.str_pad(dechex(strlen($pricetaxstring)), 2, '0', STR_PAD_LEFT).$pricetax; + $s .= ''; // Hash of xml invoice + $s .= ''; // ecda signature + $s .= ''; // ecda public key + $s .= ''; // ecda signature of public key stamp + */ + + // Using TLV format + $s = pack('C1', 1).pack('C1', strlen($this->thirdparty->name)).$this->thirdparty->name; + $s .= pack('C1', 2).pack('C1', strlen($this->thirdparty->tva_intra)).$this->thirdparty->tva_intra; + $s .= pack('C1', 3).pack('C1', strlen($datestring)).$date; + $s .= pack('C1', 4).pack('C1', strlen($pricewithtaxstring)).$pricewithtaxstring; + $s .= pack('C1', 5).pack('C1', strlen($pricetaxstring)).$pricetaxstring; + $s .= ''; // Hash of xml invoice + $s .= ''; // ecda signature + $s .= ''; // ecda public key + $s .= ''; // ecda signature of public key stamp + + $s = base64_encode($s); + + return $s; + } } diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index 037074bce23..f9c6c1a9ee3 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -428,15 +428,54 @@ class pdf_crabe extends ModelePDFFactures } $pagenb++; + // Output header (logo, ref and address blocks). This is first call for first page. $top_shift = $this->_pagehead($pdf, $object, 1, $outputlangs); $pdf->SetFont('', '', $default_font_size - 1); $pdf->MultiCell(0, 3, ''); // Set interline to 3 $pdf->SetTextColor(0, 0, 0); - $tab_top = 90 + $top_shift; + // $pdf->GetY() here can't be used. It is bottom of the second addresse box but first one may be higher + + // $tab_top is y where we must continue content (90 = 42 + 48: 42 is height of logo and ref, 48 is address blocks) + $tab_top = 90 + $top_shift; // top_shift is an addition for linked objects or addons (0 in most cases) $tab_top_newpage = (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD) ? 42 + $top_shift : 10); + // You can add more thing under header here, if you increase $extra_under_address_shift too. + $extra_under_address_shift = 0; + if (! empty($conf->global->INVOICE_ADD_ZATCA_QR_CODE)) { + $qrcodestring = $object->buildZATCAQRString(); + $qrcodecolor = array('25', '25', '25'); + // set style for QR-code + $styleQr = array( + 'border' => false, + 'padding' => 0, + 'fgcolor' => $qrcodecolor, + 'bgcolor' => false, //array(255,255,255) + 'module_width' => 1, // width of a single module in points + 'module_height' => 1 // height of a single module in points + ); + $pdf->write2DBarcode($qrcodestring, 'QRCODE,M', $this->marge_gauche, $tab_top - 5, 25, 25, $styleQr, 'N'); + $extra_under_address_shift += 25; + } + + // Call hook printUnderHeaderPDFline + $parameters = array( + 'object' => $object, + 'i' => $i, + 'pdf' =>& $pdf, + 'outputlangs' => $outputlangs, + 'hidedetails' => $hidedetails + ); + $reshook = $hookmanager->executeHooks('printUnderHeaderPDFline', $parameters, $this); // Note that $object may have been modified by hook + if (!empty($hookmanager->resArray['extra_under_address_shift'])) { + $extra_under_address_shift += $hookmanager->resArray['extra_under_header_shift']; + } + + $tab_top += $extra_under_address_shift; + $tab_top_new_page += $extra_under_address_shift; + // Incoterm + $height_incoterms = 0; if (!empty($conf->incoterm->enabled)) { $desc_incoterms = $object->getIncotermsForPDF(); if ($desc_incoterms) { @@ -1644,7 +1683,7 @@ class pdf_crabe extends ModelePDFFactures * @param int $showaddress 0=no, 1=yes * @param Translate $outputlangs Object lang for output * @param Translate $outputlangsbis Object lang for output bis - * @return void + * @return int top shift of linked object lines */ protected function _pagehead(&$pdf, $object, $showaddress, $outputlangs, $outputlangsbis = null) { diff --git a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php index 8d01927e1dc..68216c7315e 100644 --- a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php @@ -417,13 +417,47 @@ class pdf_sponge extends ModelePDFFactures $pdf->MultiCell(0, 3, ''); // Set interline to 3 $pdf->SetTextColor(0, 0, 0); - // You can add more thing undr header here, if you increase top_shift too. - // TODO + // $pdf->GetY() here can't be used. It is bottom of the second addresse box but first one may be higher // $tab_top is y where we must continue content (90 = 42 + 48: 42 is height of logo and ref, 48 is address blocks) $tab_top = 90 + $top_shift; // top_shift is an addition for linked objects or addons (0 in most cases) $tab_top_newpage = (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD) ? 42 + $top_shift : 10); + // You can add more thing under header here, if you increase $extra_under_address_shift too. + $extra_under_address_shift = 0; + if (! empty($conf->global->INVOICE_ADD_ZATCA_QR_CODE)) { + $qrcodestring = $object->buildZATCAQRString(); + $qrcodecolor = array('25', '25', '25'); + // set style for QR-code + $styleQr = array( + 'border' => false, + 'padding' => 0, + 'fgcolor' => $qrcodecolor, + 'bgcolor' => false, //array(255,255,255) + 'module_width' => 1, // width of a single module in points + 'module_height' => 1 // height of a single module in points + ); + $pdf->write2DBarcode($qrcodestring, 'QRCODE,M', $this->marge_gauche, $tab_top - 5, 25, 25, $styleQr, 'N'); + $extra_under_address_shift += 25; + } + + // Call hook printUnderHeaderPDFline + $parameters = array( + 'object' => $object, + 'i' => $i, + 'pdf' =>& $pdf, + 'outputlangs' => $outputlangs, + 'hidedetails' => $hidedetails + ); + $reshook = $hookmanager->executeHooks('printUnderHeaderPDFline', $parameters, $this); // Note that $object may have been modified by hook + if (!empty($hookmanager->resArray['extra_under_address_shift'])) { + $extra_under_address_shift += $hookmanager->resArray['extra_under_header_shift']; + } + + $tab_top += $extra_under_address_shift; + $tab_top_new_page += $extra_under_address_shift; + + // Define heigth of table for lines (for first page) $tab_height = $this->page_hauteur - $tab_top - $heightforfooter - $heightforfreetext; @@ -1863,7 +1897,7 @@ class pdf_sponge extends ModelePDFFactures * @param int $showaddress 0=no, 1=yes (usually set to 1 for first page, and 0 for next pages) * @param Translate $outputlangs Object lang for output * @param Translate $outputlangsbis Object lang for output bis - * @return void + * @return int top shift of linked object lines */ protected function _pagehead(&$pdf, $object, $showaddress, $outputlangs, $outputlangsbis = null) { From 3581dda876c4d584e2052515265a0e4bf9b870f3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 5 Jan 2022 09:43:51 +0100 Subject: [PATCH 10/20] Fix trans --- htdocs/core/class/html.form.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 89c45d4236b..d8a8bb8cb74 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -8440,7 +8440,7 @@ class Form 'order_supplier'=>array('enabled'=>$conf->supplier_order->enabled, 'perms'=>1, 'label'=>'LinkToSupplierOrder', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.ref_supplier, t.total_ht FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."commande_fournisseur as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$this->db->sanitize($listofidcompanytoscan).') AND t.entity IN ('.getEntity('commande_fournisseur').')'), 'invoice_supplier'=>array('enabled'=>$conf->supplier_invoice->enabled, 'perms'=>1, 'label'=>'LinkToSupplierInvoice', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.ref_supplier, t.total_ht FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."facture_fourn as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$this->db->sanitize($listofidcompanytoscan).') AND t.entity IN ('.getEntity('facture_fourn').')'), 'ticket'=>array('enabled'=>$conf->ticket->enabled, 'perms'=>1, 'label'=>'LinkToTicket', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.track_id, '0' as total_ht FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."ticket as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$this->db->sanitize($listofidcompanytoscan).') AND t.entity IN ('.getEntity('ticket').')'), - 'mo'=>array('enabled'=>$conf->mrp->enabled, 'perms'=>1, 'label'=>'LinkToMO', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.rowid, '0' as total_ht FROM ".MAIN_DB_PREFIX."societe as s INNER JOIN ".MAIN_DB_PREFIX."mrp_mo as t ON t.fk_soc = s.rowid WHERE t.fk_soc IN (".$this->db->sanitize($listofidcompanytoscan).') AND t.entity IN ('.getEntity('mo').')') + 'mo'=>array('enabled'=>$conf->mrp->enabled, 'perms'=>1, 'label'=>'LinkToMo', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.rowid, '0' as total_ht FROM ".MAIN_DB_PREFIX."societe as s INNER JOIN ".MAIN_DB_PREFIX."mrp_mo as t ON t.fk_soc = s.rowid WHERE t.fk_soc IN (".$this->db->sanitize($listofidcompanytoscan).') AND t.entity IN ('.getEntity('mo').')') ); } From 5b8d6e60e4069626c04515a953f93df6c21723f9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 5 Jan 2022 10:43:05 +0100 Subject: [PATCH 11/20] Debug v15 --- htdocs/adherents/class/adherent.class.php | 7 +-- htdocs/contact/class/contact.class.php | 7 +-- htdocs/paybox/admin/paybox.php | 2 +- htdocs/product/class/product.class.php | 5 +- htdocs/public/payment/newpayment.php | 62 ++++++++++------------- htdocs/societe/class/societe.class.php | 7 +-- htdocs/theme/eldy/global.inc.php | 2 +- htdocs/theme/md/style.css.php | 2 +- htdocs/user/class/user.class.php | 7 +-- 9 files changed, 48 insertions(+), 53 deletions(-) diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 324e3cdc491..1d12ad16194 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -2176,9 +2176,10 @@ class Adherent extends CommonObject $linkend = ''; if (!empty($this->photo)) { - $label .= '

'; + $label .= '
'; + $label .= Form::showphoto('memberphoto', $this, 80, 0, 0, 'photoref photowithmargin photologintooltip', 'small', 0, 1); + $label .= '
'; + //$label .= '
'; } $label .= '
'; diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index fa1dfb93c7a..bc3441a6dc2 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -1404,9 +1404,10 @@ class Contact extends CommonObject $result = ''; $label = ''; if (!empty($this->photo) && class_exists('Form')) { - $label .= '
'; - $label .= Form::showphoto('contact', $this, 0, 40, 0, '', 'mini', 0); // Important, we must force height so image will have height tags and if image is inside a tooltip, the tooltip manager can calculate height and position correctly the tooltip. - $label .= '
'; + $label .= '
'; + $label .= Form::showphoto('contact', $this, 0, 40, 0, 'photoref', 'mini', 0); // Important, we must force height so image will have height tags and if image is inside a tooltip, the tooltip manager can calculate height and position correctly the tooltip. + $label .= '
'; + //$label .= '
'; } $label .= img_picto('', $this->picto).' '.$langs->trans("Contact").''; diff --git a/htdocs/paybox/admin/paybox.php b/htdocs/paybox/admin/paybox.php index bcad50de457..9fddfffab8d 100644 --- a/htdocs/paybox/admin/paybox.php +++ b/htdocs/paybox/admin/paybox.php @@ -261,7 +261,7 @@ $doleditor->Create(); print ''; -print '
'."\n"; @@ -1085,13 +1084,13 @@ if ($source == 'order') { if (empty($amount) || !is_numeric($amount)) { print ''; print ''; + // Currency + print ' '.$langs->trans("Currency".$currency).''; } else { - print ''.price($amount).''; + print ''.price($amount, 1, $langs, 1, -1, -1, $currency).''; // Price with currency print ''; print ''; } - // Currency - print ' '.$langs->trans("Currency".$currency).''; print ''; print ''."\n"; @@ -1216,18 +1215,16 @@ if ($source == 'invoice') { if (empty($amount) || !is_numeric($amount)) { print ''; print ''; + print ' '.$langs->trans("Currency".$currency).''; } else { - print ''.price($amount).''; + print ''.price($amount, 1, $langs, 1, -1, -1, $currency).''; // Price with currency print ''; print ''; } - print ' '.$langs->trans("Currency".$currency).''; - print ''; } else { - print ''.price($object->total_ttc, 1, $langs).''; - print ' '.$langs->trans("Currency".$currency).''; - print ''; + print ''.price($object->total_ttc, 1, $langs, 1, -1, -1, $currency).''; // Price with currency } + print ''; print ''."\n"; // Tag @@ -1420,13 +1417,13 @@ if ($source == 'contractline') { if (empty($amount) || !is_numeric($amount)) { print ''; print ''; + // Currency + print ' '.$langs->trans("Currency".$currency).''; } else { - print ''.price($amount).''; + print ''.price($amount, 1, $langs, 1, -1, -1, $currency).''; // Price with currency print ''; print ''; } - // Currency - print ' '.$langs->trans("Currency".$currency).''; print ''; print ''."\n"; @@ -1652,23 +1649,22 @@ if ($source == 'member' || $source == 'membersubscription') { } print ''; if (empty($conf->global->MEMBER_NEWFORM_EDITAMOUNT)) { - print ''; + print ''; print ''; } else { print ''; } + print ' '.$langs->trans("Currency".$currency).''; } else { $valtoshow = $amount; if (!empty($conf->global->MEMBER_MIN_AMOUNT) && $valtoshow) { $valtoshow = max($conf->global->MEMBER_MIN_AMOUNT, $valtoshow); $amount = $valtoshow; } - print ''.price($valtoshow).''; + print ''.price($valtoshow, 1, $langs, 1, -1, -1, $currency).''; // Price with currency print ''; print ''; } - // Currency - print ' '.$langs->trans("Currency".$currency).''; print ''; print ''."\n"; @@ -1813,18 +1809,18 @@ if ($source == 'donation') { } print ''; print ''; + // Currency + print ' '.$langs->trans("Currency".$currency).''; } else { $valtoshow = $amount; if (!empty($conf->global->MEMBER_MIN_AMOUNT) && $valtoshow) { $valtoshow = max($conf->global->MEMBER_MIN_AMOUNT, $valtoshow); $amount = $valtoshow; } - print ''.price($valtoshow).''; + print ''.price($valtoshow, 1, $langs, 1, -1, -1, $currency).''; // Price with currency print ''; print ''; } - // Currency - print ' '.$langs->trans("Currency".$currency).''; print ''; print ''."\n"; @@ -1913,12 +1909,9 @@ if ($source == 'organizedeventregistration') { print ''."\n"; @@ -1999,12 +1992,9 @@ if ($source == 'boothlocation') { print ''."\n"; diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index ed18ec208f0..6f05462a2c8 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -2566,9 +2566,10 @@ class Societe extends CommonObject $linkstart = ''; $linkend = ''; if (!empty($this->logo) && class_exists('Form')) { - $label .= '
'; - $label .= Form::showphoto('societe', $this, 0, 40, 0, '', 'mini', 0); // Important, we must force height so image will have height tags and if image is inside a tooltip, the tooltip manager can calculate height and position correctly the tooltip. - $label .= '
'; + $label .= '
'; + $label .= Form::showphoto('societe', $this, 0, 40, 0, 'photoref', 'mini', 0); // Important, we must force height so image will have height tags and if image is inside a tooltip, the tooltip manager can calculate height and position correctly the tooltip. + $label .= '
'; + //$label .= '
'; } elseif (!empty($this->logo_squarred) && class_exists('Form')) { /*$label.= '
'; $label.= Form::showphoto('societe', $this, 0, 40, 0, 'photowithmargin', 'mini', 0); // Important, we must force height so image will have height tags and if image is inside a tooltip, the tooltip manager can calculate height and position correctly the tooltip. diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 760fb0f7966..ba2fb388b69 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -390,7 +390,7 @@ td.rightborder { border-right: 1px solid #ccc; } -td.amount, span.amount, div.amount { +td.amount, span.amount, div.amount, b.amount { color: #006666; } td.actionbuttons a { diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index bcc02e3ce39..716414c5f3b 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -590,7 +590,7 @@ td.rightborder { border-right: 1px solid #ccc; } -td.amount, span.amount, div.amount { +td.amount, span.amount, div.amount, b.amount { color: #006666; } td.actionbuttons a { diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index aa9ca1285ed..d9d8f5dd6da 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -2596,9 +2596,10 @@ class User extends CommonObject $companylink = ''; if (!empty($this->photo)) { - $label .= '
'; - $label .= Form::showphoto('userphoto', $this, 0, 60, 0, 'photowithmargin photologintooltip', 'small', 0, 1); // Force height to 60 so we total height of tooltip can be calculated and collision can be managed - $label .= '
'; + $label .= '
'; + $label .= Form::showphoto('userphoto', $this, 0, 60, 0, 'photoref photowithmargin photologintooltip', 'small', 0, 1); // Force height to 60 so we total height of tooltip can be calculated and collision can be managed + $label .= '
'; + //$label .= '
'; } // Info Login From 2aa3d609970e89d8bd7aa71e89cf1eea7cbc66c6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 5 Jan 2022 14:04:02 +0100 Subject: [PATCH 12/20] Debug v15 --- htdocs/adherents/card.php | 16 ++-- htdocs/core/class/commonobject.class.php | 4 +- htdocs/core/class/conf.class.php | 2 +- htdocs/core/lib/functions.lib.php | 5 +- htdocs/paybox/admin/paybox.php | 2 +- htdocs/product/stock/stockatdate.php | 2 +- htdocs/theme/eldy/global.inc.php | 106 +++++++++++++++-------- htdocs/theme/md/style.css.php | 13 +-- 8 files changed, 91 insertions(+), 59 deletions(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index df258e104a7..d7d72f70540 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -1090,15 +1090,15 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Pro phone print '
'; - print ''; + print ''; // Personal phone print ''; - print ''; + print ''; // Mobile phone print ''; - print ''; + print ''; if (!empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { @@ -1286,11 +1286,11 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // EMail print ''; - print ''; + print ''; // Website print ''; - print ''; + print ''; // Address print ''; - print ''; + print ''; // Personal phone print ''; - print ''; + print ''; // Mobile phone print ''; - print ''; + print ''; if (!empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 72e5d986d72..7de04ab0d14 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -7786,7 +7786,8 @@ abstract class CommonObject } } - $out .= $extrafields->showSeparator($key, $this, ($colspan + 1), $display_type); + // if colspan=0 or 1, the second column is not extended, so the separator must be on 2 columns + $out .= $extrafields->showSeparator($key, $this, ($colspan ? $colspan + 1 : 2), $display_type); } else { $class = (!empty($extrafields->attributes[$this->table_element]['hidden'][$key]) ? 'hideobject ' : ''); $csstyle = ''; @@ -7885,6 +7886,7 @@ abstract class CommonObject $html_id = !empty($this->id) ? $this->element.'_extras_'.$key.'_'.$this->id : ''; if ($display_type == 'card') { + // a first td column was already output (and may be another on before if MAIN_VIEW_LINE_NUMBER set), so this td is the next one $out .= ''; + print ''."\n"; } $i++; } diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index ba2fb388b69..3f25db32725 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -33,7 +33,7 @@ --colortopbordertitle1: rgb(); --listetotal: #888888; --inputbackgroundcolor: #FFF; - --inputbordercolor: rgba(0,0,0,.2); + --inputbordercolor: rgba(0,0,0,.15); --tooltipbgcolor: ; --tooltipfontcolor : ; --oddevencolor: #202020; @@ -144,11 +144,6 @@ tr.liste_titre th.liste_titre:not(.maxwidthsearch), tr.liste_titre td.liste_titr input { font-size: unset; } -input, input.flat, textarea, textarea.flat, form.flat select, select, select.flat, .dataTables_length label select { - background-color: var(--inputbackgroundcolor); - color: var(--colortext); - border-radius: 2px; -} select.vmenusearchselectcombo { background-color: unset; } @@ -172,6 +167,33 @@ table.liste th.wrapcolumntitle.liste_titre:not(.maxwidthsearch), table.liste td. .liste_titre input[name=search_day_date_when], .liste_titre input[name=search_month_date_when], .liste_titre input[name=search_year_date_when], .liste_titre input[name=search_dtstartday], .liste_titre input[name=search_dtendday], .liste_titre input[name=search_dtstartmonth], .liste_titre input[name=search_dtendmonth], select#date_startday, select#date_startmonth, select#date_endday, select#date_endmonth, select#reday, select#remonth, +input, input.flat, form.flat select, select, select.flat, .dataTables_length label select { + border: none; +} +input, input.flat, textarea, textarea.flat, form.flat select, select, select.flat, .dataTables_length label select { + color: var(--colortext); + border-radius: 3px; + font-family: ; + outline: none; + margin: 0px 0px 0px 0px; + background-color: var(--inputbackgroundcolor); +} + +.liste_titre input, .liste_titre select { + border: none; + borderglobal->THEME_HIDE_BORDER_ON_INPUT) ? '' : '-bottom'; ?>: solid 1px var(--inputbordercolor); + /* padding: 5px; */ +} +.pageplusone, +div.tabBar input, div.tabBar input.flat, div.tabBar textarea, div.tabBar textarea.flat, div.tabBar form.flat select, div.tabBar select, div.tabBar select.flat, div.tabBar .dataTables_length label select +{ + borderglobal->THEME_HIDE_BORDER_ON_INPUT) ? '' : '-bottom'; ?>: solid 1px var(--inputbordercolor); + global->THEME_ADD_BACKGROUND_ON_INPUT = 1; if (!empty($conf->global->THEME_ADD_BACKGROUND_ON_INPUT)) { ?> + background-color: #f8f8fa; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + +} input[name=duration_value], input[name=durationhour] { margin-right: 4px !important; @@ -182,24 +204,11 @@ input[type=submit], input[type=submit]:hover { input[type=checkbox], input[type=radio] { margin: 0 3px 0 3px; } -input, input.flat, form.flat select, select, select.flat, .dataTables_length label select { - border: none; -} -input, input.flat, textarea, textarea.flat, form.flat select, select, select.flat, .dataTables_length label select { - font-family: ; - outline: none; - margin: 0px 0px 0px 0px; - borderglobal->THEME_SHOW_BORDER_ON_INPUT) ? '-bottom' : ''; ?>: solid 1px var(--inputbordercolor); -} - input { line-height: 1.3em; padding: 4px; padding-left: 5px; } -.liste_titre input { - padding: 5px; -} select { padding-top: 5px; padding-right: 4px; @@ -243,11 +252,14 @@ input:invalid, select:invalid, input.--error , select.--error { .field-error-icon { color: #ea1212; !important; } /* Focus definitions must be after standard definition */ -textarea:focus { +div.tabBar textarea:focus { border: 1px solid #aaa !important; } -input:focus, select:focus { - border-bottom: 1px solid #666; +input:focus:not(.select2-search__field), select:focus, .select2-container--open .select2-selection--single { +/* div.tabBar input:focus, div.tabBar select:focus { */ + border-bottom: 1px solid #666 !important; + border-bottom-left-radius: 0 !important; + border-bottom-right-radius: 0 !important; } textarea.cke_source:focus { @@ -258,10 +270,10 @@ div#cke_dp_desc { } textarea { border-radius: 0; - border-top:solid 1px rgba(0,0,0,.2); - border-left:solid 1px rgba(0,0,0,.2); - border-right:solid 1px rgba(0,0,0,.2); - border-bottom:solid 1px rgba(0,0,0,.2); + border-top: solid 1px var(--inputbordercolor); + border-left: solid 1px var(--inputbordercolor); + border-right: solid 1px var(--inputbordercolor); + border-bottom: solid 1px var(--inputbordercolor); padding:4px; margin-left:0px; @@ -403,6 +415,10 @@ select.flat, form.flat select, .pageplusone { input.pageplusone { padding-bottom: 4px; padding-top: 4px; + margin-right: 4px; +} +.paginationlastpage a { + padding-left: 8px; } .saturatemedium { @@ -462,15 +478,15 @@ input.removedfile { border: 0px !important; vertical-align: text-bottom; } -input[type=file ] { +input[type=file] { background-color: transparent; box-shadow: none; - global->THEME_SHOW_BORDER_ON_INPUT)) { ?> + global->THEME_HIDE_BORDER_ON_INPUT)) { ?> border-top: none; border-left: none; border-right: none; - borderglobal->THEME_SHOW_BORDER_ON_INPUT) ? '-bottom' : ''; ?>: solid 1px var(--inputbordercolor); + borderglobal->THEME_HIDE_BORDER_ON_INPUT) ? '' : '-bottom'; ?>: solid 1px var(--inputbordercolor); } input[type=checkbox] { background-color: transparent; border: none; box-shadow: none; } input[type=radio] { background-color: transparent; border: none; box-shadow: none; } @@ -994,7 +1010,7 @@ div.divsearchfield { padding-bottom: 3px; padding-left: 10px; padding-right: 10px; - border-bottom: solid 1px rgba(0,0,0,.2); + border-bottom: solid 1px var(--inputbordercolor); height: 24px; } .search_component_searchtext { @@ -5818,7 +5834,7 @@ span#select2-taskid-container[title^='--'] { } span.select2.select2-container.select2-container--default { - global->THEME_SHOW_BORDER_ON_INPUT)) { ?> + global->THEME_HIDE_BORDER_ON_INPUT)) { ?> border-left: none; border-top: none; border-right: none; @@ -5843,6 +5859,8 @@ input.select2-input { } .select2-container--focus span.select2-selection.select2-selection--single { border-bottom: 1px solid #666 !important; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } .blockvmenusearch .select2-container--default .select2-selection--single, @@ -5907,29 +5925,35 @@ input.select2-input { .select2-container--default .select2-selection--single { outline: none; - global->THEME_SHOW_BORDER_ON_INPUT)) { ?> + global->THEME_HIDE_BORDER_ON_INPUT)) { ?> border-top: none; border-left: none; border-right: none; - borderglobal->THEME_SHOW_BORDER_ON_INPUT) ? '-bottom' : ''; ?>: solid 1px var(--inputbordercolor); + borderglobal->THEME_HIDE_BORDER_ON_INPUT) ? '' : '-bottom'; ?>: solid 1px var(--inputbordercolor); -webkit-box-shadow: none !important; box-shadow: none !important; - border-radius: 0 !important; + border-radius: 3px; +} +.select2-container--focus .select2-container--default .select2-selection--single { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } .select2-container--default.select2-container--focus .select2-selection--multiple { border-top: none; border-left: none; border-right: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } .select2-container--default .select2-selection--multiple { border-bottom: solid 1px var(--inputbordercolor); border-top: none; border-left: none; border-right: none; - border-radius: 0 !important; + border-radius: 3px; background: var(--inputbackgroundcolor); line-height: normal; } @@ -5947,7 +5971,7 @@ input.select2-input { border-top: none !important; border-left: none !important; border-right: none !important; - border-bottom: solid 1px rgba(0,0,0,.2) !important; + border-bottom: solid 1px var(--inputbordercolor) !important; -webkit-box-shadow: none !important; box-shadow: none !important; border-radius: 0 !important; @@ -6196,14 +6220,17 @@ span.noborderoncategories { cursor: default; border: none; - border-bottom: solid 1px rgba(0,0,0,.2); + border-bottom: solid 1px var(--inputbordercolor); padding: 5px; padding-left: 2px; height: 17px; + border-radius: 3px; } .multi-select-button:focus { outline: none; border-bottom: 1px solid #666; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } .multi-select-button:after { @@ -6227,7 +6254,10 @@ span.noborderoncategories { .multi-select-menuitem { clear: both; float: left; - padding-left: 5px + padding-left: 5px; +} +label.multi-select-menuitem { + line-height: 24px; } diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 716414c5f3b..b48916d89eb 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -417,7 +417,7 @@ select#date_startday, select#date_startmonth, select#date_endday, select#date_en input, input.flat, textarea, textarea.flat, form.flat select, select, select.flat, .dataTables_length label select { font-family: ; border: none; - borderglobal->THEME_HIDE_BORDER_ON_INPUT) ? '-bottom' : ''; ?>: solid 1px rgba(0,0,0,.2); + borderglobal->THEME_HIDE_BORDER_ON_INPUT) ? '-bottom' : ''; ?>: solid 1px var(--inputbordercolor); outline: none; margin: 0px 0px 0px 0px; } @@ -465,10 +465,10 @@ input.short { textarea { border-radius: 0; - border-top:solid 1px rgba(0,0,0,.1); - border-left:solid 1px rgba(0,0,0,.1); - border-right:solid 1px rgba(0,0,0,.1); - border-bottom:solid 1px rgba(0,0,0,.2); + border-top:solid 1px var(--inputbordercolor); + border-left:solid 1px var(--inputbordercolor); + border-right:solid 1px var(--inputbordercolor); + border-bottom:solid 1px var(--inputbordercolor); background-color: #FFF; padding:4px; @@ -6099,6 +6099,9 @@ span.noborderoncategories { float: left; padding-left: 5px } +label.multi-select-menuitem { + line-height: 24px; +} /* ============================================================================== */ From e8f792732e518b6fc7cb042d00d4333233e34ecf Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 5 Jan 2022 14:42:40 +0100 Subject: [PATCH 13/20] Fix #yogosha8227 --- htdocs/admin/system/index.php | 119 ---------------------------------- 1 file changed, 119 deletions(-) delete mode 100644 htdocs/admin/system/index.php diff --git a/htdocs/admin/system/index.php b/htdocs/admin/system/index.php deleted file mode 100644 index cfb73b0c24e..00000000000 --- a/htdocs/admin/system/index.php +++ /dev/null @@ -1,119 +0,0 @@ - - * Copyright (C) 2004-2011 Laurent Destailleur - * Copyright (C) 2005-2010 Regis Houssin - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/** - * \file htdocs/admin/system/index.php - * \brief Home page of system information - */ - -require '../../main.inc.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; - -// Load translation files required by the page -$langs->loadLangs(array("admin", "user", "install")); - -if (!$user->admin) { - accessforbidden(); -} - - -/* - * Actions - */ - -// None - - -/* - * View - */ - -llxHeader(); - -print load_fiche_titre($langs->trans("SummarySystem"), '', 'title_setup'); - - -print '
'; - print $langs->trans("Usage"); - print ''; - if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) { - print 'usage_opportunity ? ' checked="checked"' : '').'"> '; - $htmltext = $langs->trans("ProjectFollowOpportunity"); - print $form->textwithpicto($langs->trans("ProjectFollowOpportunity"), $htmltext); - print '
'; + if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES) || empty($conf->global->PROJECT_HIDE_TASKS) || !empty($conf->eventorganization->enabled)) { + print '
'; + print $langs->trans("Usage"); + print ''; + if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) { + print 'usage_opportunity ? ' checked="checked"' : '').'"> '; + $htmltext = $langs->trans("ProjectFollowOpportunity"); + print $form->textwithpicto($langs->trans("ProjectFollowOpportunity"), $htmltext); + print '
'; + } + if (empty($conf->global->PROJECT_HIDE_TASKS)) { + print 'usage_task ? ' checked="checked"' : '').'"> '; + $htmltext = $langs->trans("ProjectFollowTasks"); + print $form->textwithpicto($langs->trans("ProjectFollowTasks"), $htmltext); + print '
'; + } + if (empty($conf->global->PROJECT_HIDE_TASKS) && !empty($conf->global->PROJECT_BILL_TIME_SPENT)) { + print 'usage_bill_time ? ' checked="checked"' : '').'"> '; + $htmltext = $langs->trans("ProjectBillTimeDescription"); + print $form->textwithpicto($langs->trans("BillTime"), $htmltext); + print '
'; + } + if (!empty($conf->eventorganization->enabled)) { + print 'usage_organize_event ? ' checked="checked"' : '').'"> '; + $htmltext = $langs->trans("EventOrganizationDescriptionLong"); + print $form->textwithpicto($langs->trans("ManageOrganizeEvent"), $htmltext); + } + print '
'.$langs->trans("Visibility").''; @@ -381,7 +381,7 @@ if ($projectid > 0) { // Categories if ($conf->categorie->enabled) { - print '
'.$langs->trans("Categories").''; + print '
'.$langs->trans("Categories").''; print $form->showCategories($project->id, Categorie::TYPE_PROJECT, 1); print "
'; + if ($action == "dosign" && empty($cancel)) { print '
'; print ''; print '
'; print '
'; - print ''; + print ''; print ''; // Add js code managed into the div #signature @@ -380,9 +389,9 @@ if ($action == "dosign" && empty($cancel)) { $("#signature").on("change",function(){ $("#clearsignature").css("display",""); - $("#signpropal").attr("disabled",false); - if(!$._data($("#signpropal")[0], "events")){ - $("#signpropal").on("click",function(){ + $("#signbutton").attr("disabled",false); + if(!$._data($("#signbutton")[0], "events")){ + $("#signbutton").on("click",function(){ var signature = $("#signature").jSignature("getData", "image"); $.ajax({ type: "POST", @@ -410,32 +419,34 @@ if ($action == "dosign" && empty($cancel)) { $("#clearsignature").on("click",function(){ $("#signature").jSignature("clear"); - $("#signpropal").attr("disabled",true); + $("#signbutton").attr("disabled",true); /* $("#clearsignature").css("display","none"); */ }); /* $("#clearsignature").css("display","none"); */ - $("#signpropal").attr("disabled",true); + $("#signbutton").attr("disabled",true); }); '; } else { - if ($object->status == $object::STATUS_SIGNED) { - print '
'; - if ($message == 'signed') { - print ''.$langs->trans("PropalSigned").''; + if ($source == 'proposal') { + if ($object->status == $object::STATUS_SIGNED) { + print '
'; + if ($message == 'signed') { + print ''.$langs->trans("PropalSigned").''; + } else { + print ''.$langs->trans("PropalAlreadySigned").''; + } + } elseif ($object->status == $object::STATUS_NOTSIGNED) { + print '
'; + if ($message == 'refused') { + print ''.$langs->trans("PropalRefused").''; + } else { + print ''.$langs->trans("PropalAlreadyRefused").''; + } } else { - print ''.$langs->trans("PropalAlreadySigned").''; + print ''; + print ''; } - } elseif ($object->status == $object::STATUS_NOTSIGNED) { - print '
'; - if ($message == 'refused') { - print ''.$langs->trans("PropalRefused").''; - } else { - print ''.$langs->trans("PropalAlreadyRefused").''; - } - } else { - print ''; - print ''; } } print '
'; +print '
'; print $langs->trans("ONLINE_PAYMENT_SENDEMAIL").''; print ''; print '   '.$langs->trans("Example").': myemail@myserver.com, Payment service <myemail2@myserver2.com>'; diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index a7865474014..27b2bdaff2c 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -4800,9 +4800,10 @@ class Product extends CommonObject if (!empty($this->entity)) { $tmpphoto = $this->show_photos('product', $conf->product->multidir_output[$this->entity], 1, 1, 0, 0, 0, 80); if ($this->nbphoto > 0) { - $label .= '
'; + $label .= '
'; $label .= $tmpphoto; - $label .= '
'; + $label .= '
'; + //$label .= '
'; } } diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index d00aa9c4be0..5158e294fb2 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -247,7 +247,6 @@ $urlok = preg_replace('/&$/', '', $urlok); // Remove last & $urlko = preg_replace('/&$/', '', $urlko); // Remove last & - // Make special controls if ((empty($paymentmethod) || $paymentmethod == 'paypal') && !empty($conf->paypal->enabled)) { @@ -442,21 +441,21 @@ if ($action == 'dopayment') { $origfulltag = GETPOST("fulltag", 'alpha'); // Securekey into back url useless for back url and we need an url lower than 150. - $urlok = preg_replace('/securekey=[^&]+/', '', $urlok); - $urlko = preg_replace('/securekey=[^&]+/', '', $urlko); + $urlok = preg_replace('/securekey=[^&]+&?/', '', $urlok); + $urlko = preg_replace('/securekey=[^&]+&?/', '', $urlko); if (empty($PRICE) || !is_numeric($PRICE)) { $mesg = $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Amount")); } elseif (empty($email)) { - $mesg = $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("YourEMail")); + $mesg = $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ONLINE_PAYMENT_SENDEMAIL")); } elseif (!isValidEMail($email)) { $mesg = $langs->trans("ErrorBadEMail", $email); } elseif (!$origfulltag) { $mesg = $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("PaymentCode")); } elseif (dol_strlen($urlok) > 150) { - $mesg = 'Error urlok too long '.$urlok.'( Paybox requires 150, found '.strlen($urlok).')'; + $mesg = 'Error urlok too long '.$urlok.' (Paybox requires 150, found '.strlen($urlok).')'; } elseif (dol_strlen($urlko) > 150) { - $mesg = 'Error urlko too long '.$urlko.'( Paybox requires 150, found '.strlen($urlok).')'; + $mesg = 'Error urlko too long '.$urlko.' (Paybox requires 150, found '.strlen($urlok).')'; } if (empty($mesg)) { @@ -986,13 +985,13 @@ if (!$source) { if (empty($amount) || !is_numeric($amount)) { print ''; print ''; + // Currency + print ' '.$langs->trans("Currency".$currency).''; } else { - print ''.price($amount).''; + print ''.price($amount, 1, $langs, 1, -1, -1, $currency).''; // Price with currency print ''; print ''; } - // Currency - print ' '.$langs->trans("Currency".$currency).''; print ''; print '
'.$langs->trans("Amount"); print ''; $valtoshow = $amount; - print ''.price($valtoshow).''; + print ''.price($valtoshow, 1, $langs, 1, -1, -1, $currency).''; // Price with currency print ''; print ''; - - // Currency - print ' '.$langs->trans("Currency".$currency).''; print ''; print '
'.$langs->trans("Amount"); print ''; $valtoshow = $amount; - print ''.price($valtoshow).''; + print ''.price($valtoshow, 1, $langs, 1, -1, -1, $currency).''; // Price with currency print ''; print ''; - - // Currency - print ' '.$langs->trans("Currency".$currency).''; print ''; print '
'.$langs->trans("PhonePro").''.img_picto('', 'object_phoning').'
'.img_picto('', 'object_phoning', 'class="pictofixedwidth"').'
'.$langs->trans("PhonePerso").''.img_picto('', 'object_phoning').'
'.img_picto('', 'object_phoning', 'class="pictofixedwidth"').'
'.$langs->trans("PhoneMobile").''.img_picto('', 'object_phoning_mobile').'
'.img_picto('', 'object_phoning_mobile', 'class="pictofixedwidth"').'
'.($conf->global->ADHERENT_MAIL_REQUIRED ? '' : '').$langs->trans("EMail").($conf->global->ADHERENT_MAIL_REQUIRED ? '' : '').''.img_picto('', 'object_email').' email).'">
'.img_picto('', 'object_email', 'class="pictofixedwidth"').'email).'">
'.$form->editfieldkey('Web', 'member_url', GETPOST('member_url', 'alpha'), $object, 0).''.img_picto('', 'globe').'
'.img_picto('', 'globe', 'class="pictofixedwidth"').'
'.$langs->trans("Address").''; @@ -1324,15 +1324,15 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Pro phone print '
'.$langs->trans("PhonePro").''.img_picto('', 'object_phoning', 'class="pictofixedwidth"').' phone).'">
'.img_picto('', 'object_phoning', 'class="pictofixedwidth"').'phone).'">
'.$langs->trans("PhonePerso").''.img_picto('', 'object_phoning', 'class="pictofixedwidth"').' phone_perso).'">
'.img_picto('', 'object_phoning', 'class="pictofixedwidth"').'phone_perso).'">
'.$langs->trans("PhoneMobile").''.img_picto('', 'object_phoning_mobile', 'class="pictofixedwidth"').' phone_mobile).'">
'.img_picto('', 'object_phoning_mobile', 'class="pictofixedwidth"').'phone_mobile).'">
'; } elseif ($display_type == 'line') { $out .= '
'; diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index 581de47178c..49696049741 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -890,7 +890,7 @@ class Conf } if (!isset($this->global->THEME_HIDE_BORDER_ON_INPUT)) { - $this->global->THEME_HIDE_BORDER_ON_INPUT = 0; + $this->global->THEME_HIDE_BORDER_ON_INPUT = 1; } // Save inconsistent option diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index d5a963ed586..df85c95d9f9 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -5020,7 +5020,6 @@ function print_barre_liste($titre, $page, $file, $options = '', $sortfield = '', if ($cpt == $page) { $pagelist .= ''; $pagelist .= '/'; - //if (($cpt + 1) < $nbpages) $pagelist .= '/'; } } else { if ($cpt == $page) { @@ -5043,9 +5042,7 @@ function print_barre_liste($titre, $page, $file, $options = '', $sortfield = '', } } else { //var_dump($page.' '.$cpt.' '.$nbpages); - //if (($page + 1) < $nbpages) { - $pagelist .= ''; - //} + $pagelist .= ''; } } else { $pagelist .= '"; diff --git a/htdocs/paybox/admin/paybox.php b/htdocs/paybox/admin/paybox.php index 9fddfffab8d..60426e6a3b0 100644 --- a/htdocs/paybox/admin/paybox.php +++ b/htdocs/paybox/admin/paybox.php @@ -30,7 +30,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; $servicename = 'PayBox'; // Load translation files required by the page -$langs->loadLangs(array('admin', 'other', 'paybox', 'paypal')); +$langs->loadLangs(array('admin', 'other', 'paybox', 'paypal', 'stripe')); if (!$user->admin) { accessforbidden(); diff --git a/htdocs/product/stock/stockatdate.php b/htdocs/product/stock/stockatdate.php index d5de51c7311..61198f9121d 100644 --- a/htdocs/product/stock/stockatdate.php +++ b/htdocs/product/stock/stockatdate.php @@ -598,7 +598,7 @@ while ($i < ($limit ? min($num, $limit) : $num)) { $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; - print '
'; -print "\n"; -$dolversion = version_dolibarr(); -print "\n"; -print '
Dolibarr
".$langs->trans("Version")."".$dolversion."
'; - -print "
\n"; - -print ''; -print "\n"; -$osversion = version_os(); -print "\n"; -print '
".$langs->trans("OS")."
".$langs->trans("Version")."".$osversion."
'; - -print "
\n"; - -// Serveur web -print ''; -print "\n"; -$apacheversion = version_webserver(); -print "\n"; -print '
".$langs->trans("WebServer")."
".$langs->trans("Version")."".$apacheversion."
'; - -print "
\n"; - -// Php -print ''; -print "\n"; -$phpversion = version_php(); -print "\n"; -print "\n"; -print '
".$langs->trans("PHP")."
".$langs->trans("Version")."".$phpversion."
".$langs->trans("PhpWebLink")."".php_sapi_name()."
'; - -print "
\n"; - -// Database -print ''; -print "\n"; -$dblabel = $db::LABEL; -$dbversion = $db->getVersion(); -print "\n"; -print '
".$langs->trans("Database")."
".$langs->trans("Version")."".$dblabel." ".$dbversion."
'; -// Add checks on database options -if ($db->type == 'pgsql') { - // Check option standard_conforming_strings is on - $paramarray = $db->getServerParametersValues('standard_conforming_strings'); - // if ($paramarray['standard_conforming_strings'] != 'on' && $paramarray['standard_conforming_strings'] != 1) - // { - // $langs->load("errors"); - // } -} -print '
'; - -// Browser -print ''; -print "\n"; -print "\n"; -print "\n"; -print '
".$langs->trans("Browser")."
".$langs->trans("UserAgent")."".$_SERVER["HTTP_USER_AGENT"]."
".$langs->trans("Smartphone")."".(($conf->browser->layout != 'phone') ? $langs->trans("No") : $langs->trans("Yes"))."
'; -print '
'; - - -//print "
\n"; -print info_admin($langs->trans("SystemInfoDesc")).'
'; - -// End of page -llxFooter(); -$db->close(); From f3251f1ef9147a160464ec9aadbfd42f6a8371e8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 5 Jan 2022 14:42:45 +0100 Subject: [PATCH 14/20] css --- htdocs/admin/triggers.php | 8 ++++---- htdocs/theme/md/style.css.php | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/htdocs/admin/triggers.php b/htdocs/admin/triggers.php index 5ea74205c9c..a1f8496ad6d 100644 --- a/htdocs/admin/triggers.php +++ b/htdocs/admin/triggers.php @@ -70,10 +70,10 @@ print ''; foreach ($triggers as $trigger) { print ''; - print ''.$trigger['picto'].''; - print ''.$trigger['file'].''; - print ''.$trigger['status'].''; - print ''; + print ''.$trigger['picto'].''; + print ''.$trigger['file'].''; + print ''.$trigger['status'].''; + print ''; $text = $trigger['info']; $text .= "
\n".$langs->trans("File").":
\n".$trigger['relpath']; //$text.="\n".$langs->trans("ExternalModule",$trigger['isocreorexternal']); diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index b48916d89eb..7dcfc1664fd 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -3612,8 +3612,10 @@ tr.liste_titre_filter td.liste_titre { table.liste th, table.noborder th, table.noborder tr.liste_titre td { padding: 8px 6px 8px 6px; /* t r b l */ } -table.noborder td, div.noborder form, div.noborder form div, table.tableforservicepart1 td, table.tableforservicepart2 td { + +table.liste td, table.noborder td, div.noborder form div, table.tableforservicepart1 td, table.tableforservicepart2 td { padding: 4px 6px 4px 6px; /* t r b l */ + height: 22px; } form.tagtable { padding: unset !important; From 34796a95c2e4aa2a59faa24081262a88e0128b86 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 5 Jan 2022 14:48:13 +0100 Subject: [PATCH 15/20] Fix css --- htdocs/theme/eldy/global.inc.php | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 3f25db32725..3befc11de2e 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -188,11 +188,15 @@ input, input.flat, textarea, textarea.flat, form.flat select, select, select.fla div.tabBar input, div.tabBar input.flat, div.tabBar textarea, div.tabBar textarea.flat, div.tabBar form.flat select, div.tabBar select, div.tabBar select.flat, div.tabBar .dataTables_length label select { borderglobal->THEME_HIDE_BORDER_ON_INPUT) ? '' : '-bottom'; ?>: solid 1px var(--inputbordercolor); - global->THEME_ADD_BACKGROUND_ON_INPUT = 1; if (!empty($conf->global->THEME_ADD_BACKGROUND_ON_INPUT)) { ?> - background-color: #f8f8fa; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - + global->THEME_ADD_BACKGROUND_ON_INPUT = 1; + if (!empty($conf->global->THEME_ADD_BACKGROUND_ON_INPUT)) { ?> + background-color: #f8f8fa; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } input[name=duration_value], input[name=durationhour] { From 1f36a31fe9c8644e30a4c7e0a6083ec1ee600363 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 5 Jan 2022 16:21:44 +0100 Subject: [PATCH 16/20] Fix css --- htdocs/core/class/conf.class.php | 4 ---- htdocs/theme/eldy/global.inc.php | 23 ++++++++++++++--------- htdocs/theme/md/style.css.php | 7 ++++--- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index 49696049741..2b19e0db134 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -889,10 +889,6 @@ class Conf $this->global->MAIN_SIZE_SHORTLIST_LIMIT = 3; } - if (!isset($this->global->THEME_HIDE_BORDER_ON_INPUT)) { - $this->global->THEME_HIDE_BORDER_ON_INPUT = 1; - } - // Save inconsistent option if (empty($this->global->AGENDA_USE_EVENT_TYPE) && (!isset($this->global->AGENDA_DEFAULT_FILTER_TYPE) || $this->global->AGENDA_DEFAULT_FILTER_TYPE == 'AC_NON_AUTO')) { $this->global->AGENDA_DEFAULT_FILTER_TYPE = '0'; // 'AC_NON_AUTO' does not exists when AGENDA_DEFAULT_FILTER_TYPE is not on. diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 3befc11de2e..adca5ea71c3 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -181,13 +181,13 @@ input, input.flat, textarea, textarea.flat, form.flat select, select, select.fla .liste_titre input, .liste_titre select { border: none; - borderglobal->THEME_HIDE_BORDER_ON_INPUT) ? '' : '-bottom'; ?>: solid 1px var(--inputbordercolor); + borderglobal->THEME_SHOW_BORDER_ON_INPUT) ? '-bottom' : ''; ?>: solid 1px var(--inputbordercolor); /* padding: 5px; */ } .pageplusone, div.tabBar input, div.tabBar input.flat, div.tabBar textarea, div.tabBar textarea.flat, div.tabBar form.flat select, div.tabBar select, div.tabBar select.flat, div.tabBar .dataTables_length label select { - borderglobal->THEME_HIDE_BORDER_ON_INPUT) ? '' : '-bottom'; ?>: solid 1px var(--inputbordercolor); + borderglobal->THEME_SHOW_BORDER_ON_INPUT) ? '-bottom' : ''; ?>: solid 1px var(--inputbordercolor); global->THEME_ADD_BACKGROUND_ON_INPUT = 1; if (!empty($conf->global->THEME_ADD_BACKGROUND_ON_INPUT)) { ?> @@ -485,12 +485,12 @@ input.removedfile { input[type=file] { background-color: transparent; box-shadow: none; - global->THEME_HIDE_BORDER_ON_INPUT)) { ?> + global->THEME_SHOW_BORDER_ON_INPUT)) { ?> border-top: none; border-left: none; border-right: none; - borderglobal->THEME_HIDE_BORDER_ON_INPUT) ? '' : '-bottom'; ?>: solid 1px var(--inputbordercolor); + borderglobal->THEME_SHOW_BORDER_ON_INPUT) ? '-bottom' : ''; ?>: solid 1px var(--inputbordercolor); } input[type=checkbox] { background-color: transparent; border: none; box-shadow: none; } input[type=radio] { background-color: transparent; border: none; box-shadow: none; } @@ -700,10 +700,10 @@ textarea.centpercent { } .flip { - transform: scaleX(-1) translate(2px, 0); + transform: scaleX(-1) translate(2px, 0); } .rotate90 { - transform: rotate(90deg) translate(0, 2px); + transform: rotate(90deg) translate(0, 2px); } .center { text-align: center; @@ -1129,6 +1129,10 @@ ul.attendees li { } select.flat.selectlimit { max-width: 62px; + text-align: end; + border-bottom: 1px solid var(--inputbordercolor); + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } .selectlimit, .marginrightonly { margin-: 10px !important; @@ -5838,7 +5842,7 @@ span#select2-taskid-container[title^='--'] { } span.select2.select2-container.select2-container--default { - global->THEME_HIDE_BORDER_ON_INPUT)) { ?> + global->THEME_SHOW_BORDER_ON_INPUT)) { ?> border-left: none; border-top: none; border-right: none; @@ -5929,13 +5933,13 @@ input.select2-input { .select2-container--default .select2-selection--single { outline: none; - global->THEME_HIDE_BORDER_ON_INPUT)) { ?> + global->THEME_SHOW_BORDER_ON_INPUT)) { ?> border-top: none; border-left: none; border-right: none; - borderglobal->THEME_HIDE_BORDER_ON_INPUT) ? '' : '-bottom'; ?>: solid 1px var(--inputbordercolor); + borderglobal->THEME_SHOW_BORDER_ON_INPUT) ? '-bottom' : ''; ?>: solid 1px var(--inputbordercolor); -webkit-box-shadow: none !important; box-shadow: none !important; @@ -6055,6 +6059,7 @@ a span.select2-chosen } .select2-results__option { word-break: break-word; + text-align: ; } .select2-container.select2-container-disabled .select2-choice, .select2-container-multi.select2-container-disabled .select2-choices { background-color: var(--colorbackvmenu1); diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 7dcfc1664fd..7fc8d47ee7d 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -417,7 +417,7 @@ select#date_startday, select#date_startmonth, select#date_endday, select#date_en input, input.flat, textarea, textarea.flat, form.flat select, select, select.flat, .dataTables_length label select { font-family: ; border: none; - borderglobal->THEME_HIDE_BORDER_ON_INPUT) ? '-bottom' : ''; ?>: solid 1px var(--inputbordercolor); + borderglobal->THEME_SHOW_BORDER_ON_INPUT) ? '-bottom' : ''; ?>: solid 1px var(--inputbordercolor); outline: none; margin: 0px 0px 0px 0px; } @@ -849,10 +849,10 @@ textarea.centpercent { } .flip { - transform: scaleX(-1) translate(2px, 0); + transform: scaleX(-1) translate(2px, 0); } .rotate90 { - transform: rotate(90deg) translate(0, 2px); + transform: rotate(90deg) translate(0, 2px); } .center { text-align: center; @@ -5905,6 +5905,7 @@ a span.select2-chosen } .select2-results__option { word-break: break-word; + text-align: ; } .select2-container.select2-container-disabled .select2-choice, .select2-container-multi.select2-container-disabled .select2-choices { background-color: #FFFFFF; From dba49a8e5f7bfbd7ace4defa3f54f976354e14b8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 5 Jan 2022 18:40:08 +0100 Subject: [PATCH 17/20] CSS --- htdocs/theme/eldy/global.inc.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index adca5ea71c3..8bd8616213f 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -177,6 +177,9 @@ input, input.flat, textarea, textarea.flat, form.flat select, select, select.fla outline: none; margin: 0px 0px 0px 0px; background-color: var(--inputbackgroundcolor); + global->THEME_ADD_BACKGROUND_ON_INPUT)) { ?> + borderglobal->THEME_SHOW_BORDER_ON_INPUT) ? '-bottom' : ''; ?>: solid 1px var(--inputbordercolor); + } .liste_titre input, .liste_titre select { @@ -189,7 +192,6 @@ div.tabBar input, div.tabBar input.flat, div.tabBar textarea, div.tabBar textare { borderglobal->THEME_SHOW_BORDER_ON_INPUT) ? '-bottom' : ''; ?>: solid 1px var(--inputbordercolor); global->THEME_ADD_BACKGROUND_ON_INPUT = 1; if (!empty($conf->global->THEME_ADD_BACKGROUND_ON_INPUT)) { ?> background-color: #f8f8fa; border-bottom-left-radius: 0; From 0674a48cb5bed6297f0fdd4c4a0404be18823571 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 5 Jan 2022 19:58:08 +0100 Subject: [PATCH 18/20] Fix missing total and missing css --- htdocs/product/price.php | 12 ++++++------ htdocs/product/stock/stockatdate.php | 15 +++++++++++---- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/htdocs/product/price.php b/htdocs/product/price.php index e3eea85cec7..309853a7bb6 100644 --- a/htdocs/product/price.php +++ b/htdocs/product/price.php @@ -735,9 +735,9 @@ if (!empty($conf->global->PRODUIT_MULTIPRICES) || !empty($conf->global->PRODUIT_ print ''; print ''; if ($object->multiprices_base_type[$soc->price_level] == 'TTC') { - print price($object->multiprices_ttc[$soc->price_level]); + print ''.price($object->multiprices_ttc[$soc->price_level]).''; } else { - print price($object->multiprices[$soc->price_level]); + print ''.price($object->multiprices[$soc->price_level]).''; } if ($object->multiprices_base_type[$soc->price_level]) { print ' '.$langs->trans($object->multiprices_base_type[$soc->price_level]); @@ -892,15 +892,15 @@ if (!empty($conf->global->PRODUIT_MULTIPRICES) || !empty($conf->global->PRODUIT_ print ''; if ($object->multiprices_base_type [$i] == 'TTC') { - print ''.price($object->multiprices_ttc[$i]); + print ''.price($object->multiprices_ttc[$i]); } else { - print ''.price($object->multiprices[$i]); + print ''.price($object->multiprices[$i]); } if ($object->multiprices_base_type[$i]) { - print ' '.$langs->trans($object->multiprices_base_type [$i]).''; + print ' '.$langs->trans($object->multiprices_base_type [$i]).''; } else { - print ' '.$langs->trans($object->price_base_type).''; + print ' '.$langs->trans($object->price_base_type).''; } // Prix min diff --git a/htdocs/product/stock/stockatdate.php b/htdocs/product/stock/stockatdate.php index 61198f9121d..ffcf5dd2f00 100644 --- a/htdocs/product/stock/stockatdate.php +++ b/htdocs/product/stock/stockatdate.php @@ -475,6 +475,8 @@ print $hookmanager->resPrint; print "\n"; +$totalbuyingprice = 0; + $i = 0; while ($i < ($limit ? min($num, $limit) : $num)) { $objp = $db->fetch_object($resql); @@ -567,6 +569,7 @@ while ($i < ($limit ? min($num, $limit) : $num)) { } else { print ''; } + $totalbuyingprice += $objp->estimatedvalue; print ''; // Selling value @@ -607,11 +610,15 @@ $parameters = array('sql'=>$sql); $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; +$colspan = 8; +if ($mode == 'future') { + $colspan++; +} + +print ''.$langs->trans("Totalforthispage").''; +print ''.price(price2num($totalbuyingprice, 'MT')).''; + if (empty($date) || !$dateIsValid) { - $colspan = 8; - if ($mode == 'future') { - $colspan++; - } print ''.$langs->trans("EnterADateCriteria").''; } From 1471c2422d8bc711d87d110ef4ee3d28bef361ad Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 5 Jan 2022 20:49:38 +0100 Subject: [PATCH 19/20] Fix trans --- htdocs/admin/emailcollector_card.php | 15 +++++++++++++-- htdocs/langs/en_US/admin.lang | 3 ++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/htdocs/admin/emailcollector_card.php b/htdocs/admin/emailcollector_card.php index dca93b9a506..a155e22acca 100644 --- a/htdocs/admin/emailcollector_card.php +++ b/htdocs/admin/emailcollector_card.php @@ -583,17 +583,21 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $arrayoftypes = array( 'loadthirdparty'=>$langs->trans('LoadThirdPartyFromName', $langs->transnoentities("ThirdPartyName")), 'loadandcreatethirdparty'=>$langs->trans('LoadThirdPartyFromNameOrCreate', $langs->transnoentities("ThirdPartyName")), - 'recordjoinpiece'=>$langs->trans('recordjoinpieceonobject'), + 'recordjoinpiece'=>'AttachJoinedDocumentsToObject', 'recordevent'=>'RecordEvent'); + $arrayoftypesnocondition = $arrayoftypes; if ($conf->projet->enabled) { $arrayoftypes['project'] = 'CreateLeadAndThirdParty'; } + $arrayoftypesnocondition['project'] = 'CreateLeadAndThirdParty'; if ($conf->ticket->enabled) { $arrayoftypes['ticket'] = 'CreateTicketAndThirdParty'; } + $arrayoftypesnocondition['ticket'] = 'CreateTicketAndThirdParty'; if ($conf->recruitment->enabled) { $arrayoftypes['candidature'] = 'CreateCandidature'; } + $arrayoftypesnocondition['candidature'] = 'CreateCandidature'; // support hook for add action $parameters = array('arrayoftypes' => $arrayoftypes); @@ -629,7 +633,14 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print ''; print ''; print ''; - print $langs->trans($arrayoftypes[$ruleaction['type']]); + if (array_key_exists($ruleaction['type'], $arrayoftypes)) { + print $langs->trans($arrayoftypes[$ruleaction['type']]); + } else { + if (array_key_exists($ruleaction['type'], $arrayoftypesnocondition)) { + print ''.$langs->trans($arrayoftypesnocondition[$ruleaction['type']]).' - '.$langs->trans("Disabled").''; + } + } + if (in_array($ruleaction['type'], array('recordevent'))) { print $form->textwithpicto('', $langs->transnoentitiesnoconv('IfTrackingIDFoundEventWillBeLinked')); } elseif (in_array($ruleaction['type'], array('loadthirdparty', 'loadandcreatethirdparty'))) { diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index ba889ec41e3..54bfe56b067 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -2071,11 +2071,12 @@ NothingProcessed=Nothing done XEmailsDoneYActionsDone=%s emails qualified, %s emails successfully processed (for %s record/actions done) RecordEvent=Record email event CreateLeadAndThirdParty=Create lead (and third party if necessary) -CreateTicketAndThirdParty=Create ticket (and link to third party if it was loaded by a previous operation) +CreateTicketAndThirdParty=Create ticket (linked to a third party if the third party was loaded by a previous operation, with no link to any third party otherwise) CodeLastResult=Latest result code NbOfEmailsInInbox=Number of emails in source directory LoadThirdPartyFromName=Load third party searching on %s (load only) LoadThirdPartyFromNameOrCreate=Load third party searching on %s (create if not found) +AttachJoinedDocumentsToObject=Save attached files into object documents if a ref of an object is found into email topic. WithDolTrackingID=Message from a conversation initiated by a first email sent from Dolibarr WithoutDolTrackingID=Message from a conversation initiated by a first email NOT sent from Dolibarr WithDolTrackingIDInMsgId=Message sent from Dolibarr From 61cbf52a94b8eec4d60444c6d9404172b9c57e03 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 5 Jan 2022 21:27:00 +0100 Subject: [PATCH 20/20] Fix tooltip email collector --- htdocs/admin/emailcollector_card.php | 4 ++-- htdocs/langs/en_US/admin.lang | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/htdocs/admin/emailcollector_card.php b/htdocs/admin/emailcollector_card.php index a155e22acca..7a4faa989d0 100644 --- a/htdocs/admin/emailcollector_card.php +++ b/htdocs/admin/emailcollector_card.php @@ -490,7 +490,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print '
'; print ''; print ''; - print ''; + print ''; print ''; // Add filter print ''; @@ -575,7 +575,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print '
'; print '
'.$form->textwithpicto($langs->trans("Filters"), $langs->trans("EmailCollectorFilterDesc")).''.img_picto('', 'filter', 'class="pictofixedwidth"').$form->textwithpicto($langs->trans("Filters"), $langs->trans("EmailCollectorFilterDesc")).'
'; print ''; - print ''; + print ''; print ''; // Add operation print ''; diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 54bfe56b067..2351d661c3a 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -2069,9 +2069,9 @@ EmailCollectorConfirmCollect=Do you want to run the collection for this collecto NoNewEmailToProcess=No new email (matching filters) to process NothingProcessed=Nothing done XEmailsDoneYActionsDone=%s emails qualified, %s emails successfully processed (for %s record/actions done) -RecordEvent=Record email event -CreateLeadAndThirdParty=Create lead (and third party if necessary) -CreateTicketAndThirdParty=Create ticket (linked to a third party if the third party was loaded by a previous operation, with no link to any third party otherwise) +RecordEvent=Record an event in agenda (with type Email sent or received) +CreateLeadAndThirdParty=Create a lead (and a third party if necessary) +CreateTicketAndThirdParty=Create a ticket (linked to a third party if the third party was loaded by a previous operation, with no third party otherwise) CodeLastResult=Latest result code NbOfEmailsInInbox=Number of emails in source directory LoadThirdPartyFromName=Load third party searching on %s (load only) @@ -2085,7 +2085,7 @@ CreateCandidature=Create job application FormatZip=Zip MainMenuCode=Menu entry code (mainmenu) ECMAutoTree=Show automatic ECM tree -OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\s*([^\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\s([^\s]*)

Use a ; char as separator to extract or set several properties. +OperationParamDesc=Define the rules to use to extract or set values.
Example for operations that need to extract a name from email subject:
name=EXTRACT:SUBJECT:Message from company ([^\n]*)
Example for operations that create objects:
objproperty1=SET:the value to set
objproperty2=SET:a value including value of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\s*([^\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\s([^\s]*)

Use a ; char as separator to extract or set several properties. OpeningHours=Opening hours OpeningHoursDesc=Enter here the regular opening hours of your company. ResourceSetup=Configuration of Resource module @@ -2131,7 +2131,7 @@ LargerThan=Larger than IfTrackingIDFoundEventWillBeLinked=Note that If a tracking ID of an object is found into email, or if the email is an answer of an email aready collected and linked to an object, the created event will be automatically linked to the known related object. WithGMailYouCanCreateADedicatedPassword=With a GMail account, if you enabled the 2 steps validation, it is recommanded to create a dedicated second password for the application instead of using your own account passsword from https://myaccount.google.com/. EmailCollectorTargetDir=It may be a desired behaviour to move the email into another tag/directory when it was processed successfully. Just set name of directory here to use this feature (Do NOT use special characters in name). Note that you must also use a read/write login account. -EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it.
For example, if you want to create a thirdparty with a name extracted a string 'Name: name to find' found into the body, use sender email as email, you can set the parameter field like this:
'email=HEADER:^From:(.*);name=EXTRACT:BODY:Name:\s([^\s]*);client=SET:2;'
+EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it.
For example, if you want to create a thirdparty with a name extracted from a string 'Name: name to find' present into the body, use the sender email as email, you can set the parameter field like this:
'email=HEADER:^From:(.*);name=EXTRACT:BODY:Name:\s([^\s]*);client=SET:2;'
EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector?
'.$form->textwithpicto($langs->trans("EmailcollectorOperations"), $langs->trans("EmailcollectorOperationsDesc")).''.img_picto('', 'technic', 'class="pictofixedwidth"').$form->textwithpicto($langs->trans("EmailcollectorOperations"), $langs->trans("EmailcollectorOperationsDesc")).'