26include_once DOL_DOCUMENT_ROOT.
'/blockedlog/versionmod.inc.php';
36 $versionbadge = constant(
'DOLCERT_VERSION');
39 if (!constant(
'CERTIF_LNE')) {
40 $versionbadge = preg_replace(
'/^(\d)\./',
'\1b.', $versionbadge);
57 $langs->load(
"blockedlog");
59 require_once DOL_DOCUMENT_ROOT.
'/blockedlog/class/blockedlog.class.php';
62 $param .= ($withtabsetup?
"?withtab=".$withtabsetup :
"");
63 $param .= (
GETPOST(
'origin') ? ($param ?
'&' :
'?').
'origin='.
GETPOST(
'origin') :
'');
69 $head[$h][0] = DOL_URL_ROOT.
"/blockedlog/admin/registration.php".$param;
70 $head[$h][1] = $langs->trans(
"UserRegistration");
71 $head[$h][2] =
'registration';
77 $head[$h][0] = DOL_URL_ROOT.
"/blockedlog/admin/blockedlog_list.php".$param;
78 $head[$h][1] = $langs->trans(
"BrowseBlockedLog");
79 if ($b->alreadyUsed()) {
80 $head[$h][1] .= (!
getDolGlobalString(
'MAIN_OPTIMIZEFORTEXTBROWSER') ?
'<span class="badge marginleftonlyshort">...</span>' :
'');
82 $head[$h][2] =
'fingerprints';
86 $head[$h][0] = DOL_URL_ROOT.
"/blockedlog/admin/blockedlog_archives.php".$param;
87 $head[$h][1] = $langs->trans(
"Archives");
91 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
92 require_once DOL_DOCUMENT_ROOT.
'/core/class/link.class.php';
93 $nbFiles = count(
dol_dir_list($upload_dir,
'files', 0,
'',
'(\.meta|_preview.*\.png)$'));
95 if (($nbFiles + $nbLinks) > 0) {
96 $head[$h][1] .=
'<span class="badge marginleftonlyshort">'.($nbFiles + $nbLinks).
'</span>';
98 $head[$h][2] =
'archives';
102 $head[$h][0] = DOL_URL_ROOT.
"/blockedlog/admin/blockedlog_control.php".$param;
103 $head[$h][1] = $langs->trans(
"OtherControl");
104 $head[$h][2] =
'control';
108 if (
$mysoc->country_code ==
'FR') {
109 $head[$h][0] = DOL_URL_ROOT.
"/blockedlog/admin/documentation.php".$param;
110 $head[$h][1] = $langs->trans(
"Documentation");
111 $head[$h][2] =
'documentation';
116 $head[$h][0] = DOL_URL_ROOT.
"/blockedlog/admin/blockedlog.php".$param;
117 $head[$h][1] = $langs->trans(
"TechnicalInformation");
118 $head[$h][2] =
'technicalinfo';
149 $companycountrycode =
$mysoc->country_code;
154 if (empty($companyname) || empty($companycountrycode) || empty($companyidprof1) || empty($companyidprof2) || empty($companyemail)) {
190 return dol_hash(
'dolibarr'.
$conf->file->instance_unique_id.($conf->entity > 1 ?
$conf->entity :
''), $algo, 1);
210 if (defined(
'CERTIF_LNE') && (
int) constant(
'CERTIF_LNE') === 2) {
211 return 'CERTIF_LNE_IS_2';
214 if (!$ignoredev && preg_match(
'/\-/', DOL_VERSION)) {
217 if (
$mysoc->country_code !=
'FR') {
220 if (!defined(
'CERTIF_LNE') || (
int) constant(
'CERTIF_LNE') === 0) {
228 return ($ignoredev ?
'' :
'NOT_BETA+').
'FR+CERTIF_LNE_IS_1'.($ignoremodule ?
'' :
'+MODENABLED');
245 if (defined(
'CERTIF_LNE') && (
int) constant(
'CERTIF_LNE') === 2
246 && ($blockedlogmodulealreadydone ||
isModEnabled(
'blockedlog'))
250 if (defined(
'CERTIF_LNE') && (
int) constant(
'CERTIF_LNE') === 1
251 && ($blockedlogmodulealreadydone ||
isModEnabled(
'blockedlog'))
274 if (array_key_exists(
'isblockedlogused',
$conf->cache)) {
275 return $conf->cache[
'isblockedlogused'.$ignoresystem];
278 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"blockedlog";
279 $sql .=
" WHERE entity = ".((int)
$conf->entity);
281 $sql .=
" AND action NOT IN ('MODULE_SET', 'MODULE_RESET')";
283 $sql .=
$db->plimit(1);
285 $resql =
$db->query($sql);
286 if ($resql !==
false) {
287 $obj =
$db->fetch_object($resql);
295 $conf->cache[
'isblockedlogused'.$ignoresystem] = $result;
298 dol_syslog(
"isBlockedLogUsed: ignoresystem=".$ignoresystem.
" returns ".(
string) $result);
319 if (in_array($seller->country_code, array(
'FR'))) {
320 $outputlangs->load(
"blockedlog");
321 $blockedlog_mention =
'';
324 if ($isalne ==
'CERTIF_LNE_IS_2') {
325 $blockedlog_mention = $outputlangs->transnoentitiesnoconv(
"InvoiceGeneratedWithLNECandidatePOSSystem");
327 $blockedlog_mention = $outputlangs->transnoentitiesnoconv(
"InvoiceGeneratedWithLNECertifiedPOSSystem");
330 if ($blockedlog_mention) {
331 $pdf->SetFont(
'',
'', $default_font_size - 2);
332 $pdf->SetXY($pdftemplate->marge_gauche, $posy);
333 $pdf->MultiCell(100, 3, $blockedlog_mention, 0,
'L',
false);
334 $posy = $pdf->GetY();
357 if ($block->action ==
'BILL_VALIDATE') {
358 $total_ht = $block->object_data->total_ht;
359 $total_vat = $block->object_data->total_tva;
360 $total_ttc = $block->object_data->total_ttc;
363 if (!isset($totalamount[$block->action][$block->module_source])) {
364 $totalhtamount[$block->action][$block->module_source] = 0;
365 $totalvatamount[$block->action][$block->module_source] = 0;
366 $totalamount[$block->action][$block->module_source] = 0;
371 if (empty($refinvoicefound[$block->ref_object])) {
372 $totalhtamount[$block->action][$block->module_source] += $total_ht;
373 $totalvatamount[$block->action][$block->module_source] += $total_vat;
374 $totalamount[$block->action][$block->module_source] += $total_ttc;
376 $refinvoicefound[$block->ref_object] = 1;
377 } elseif ($block->action ==
'PAYMENT_CUSTOMER_CREATE' || $block->action ==
'PAYMENT_CUSTOMER_DELETE') {
378 $total_ht = $block->object_data->amount;
380 $total_ttc = $block->object_data->amount;
383 $actionkey =
'PAYMENT_CUSTOMER';
386 if (!isset($totalamount[$actionkey][$block->module_source])) {
387 $totalhtamount[$actionkey][$block->module_source] = 0;
388 $totalvatamount[$actionkey][$block->module_source] = 0;
389 $totalamount[$actionkey][$block->module_source] = 0;
392 $totalhtamount[$actionkey][$block->module_source] += $total_ht;
393 $totalvatamount[$actionkey][$block->module_source] += $total_vat;
394 $totalamount[$actionkey][$block->module_source] += $total_ttc;
396 $total_ttc = $block->amounts;
416 $obfuscationkey =
'ERROR';
418 if (empty($idprof1)) {
419 dol_syslog(
"callApiToGetObfuscationKey was called with empty idprof1", LOG_DEBUG);
420 return 'ERROR callApiToGetObfuscationKey was called with empty idprof1';
424 $url_for_ping =
getDolGlobalString(
'MAIN_URL_FOR_PING',
"https://ping.dolibarr.org/");
429 $t = microtime(
true);
430 $micro = sprintf(
"%06d", (
int) (($t - floor($t)) * 1000000));
433 $data .=
'hash_algo=dol_hash-'.urlencode($algo);
434 $data .=
'&hash_unique_id='.urlencode($hash_unique_id);
435 $data .=
'&action=dolibarrgetkeyobfuscation';
437 $data .=
'&version='.(float) DOL_VERSION;
438 $data .=
'&version_full='.urlencode(DOL_VERSION);
442 $data .=
'&entity='.(int)
$conf->entity;
447 $addheaders = array();
449 $timeoutresponse = 3;
454 include_once DOL_DOCUMENT_ROOT.
'/core/lib/geturl.lib.php';
456 $tmpresult =
getURLContent($url_for_ping,
'POST', $data, 1, $addheaders, array(
'https'), 0, -1, $timeoutconnect, $timeoutresponse, array());
460 if ($tmpresult[
'http_code'] == 0 && !empty($tmpresult[
'curl_error_msg'])) {
461 $logerrormessage =
'Error: '.$tmpresult[
'curl_error_msg'];
462 $obfuscationkey .=
' '.$tmpresult[
'curl_error_msg'];
463 dol_syslog(
"callApiToGetObfuscationKey result error when getting obfuscation key: ".$logerrormessage, LOG_WARNING);
464 dol_syslog(
"callApiToGetObfuscationKey result error when getting obfuscation key: ".$logerrormessage, LOG_WARNING, 0,
'_dolibarrgetkeyobfuscation');
465 } elseif ($tmpresult[
'http_code'] != 200) {
466 $logerrormessage =
'Error: '.$tmpresult[
'http_code'].
' '.$tmpresult[
'content'];
467 $obfuscationkey .=
' '.$tmpresult[
'http_code'].
' '.$tmpresult[
'content'];
468 dol_syslog(
"callApiToGetObfuscationKey result error when getting obfuscation key: ".$logerrormessage, LOG_WARNING);
469 dol_syslog(
"callApiToGetObfuscationKey result error when getting obfuscation key: ".$logerrormessage, LOG_WARNING, 0,
'_dolibarrgetkeyobfuscation');
472 if (preg_match(
'/(DOLOBFUSCKEY.*)/', $tmpresult[
'content'], $reg)) {
473 $obfuscationkey = $reg[1];
474 dol_syslog(
"callApiToGetObfuscationKey we got the remote obfuscation key", LOG_DEBUG);
475 dol_syslog(
"callApiToGetObfuscationKey we got the remote obfuscation key", LOG_DEBUG, 0,
'_dolibarrgetkeyobfuscation');
477 $obfuscationkey .=
' '.$tmpresult[
'content'];
478 dol_syslog(
"callApiToGetObfuscationKey result error when getting obfuscation key: ".$tmpresult[
'content'], LOG_WARNING);
479 dol_syslog(
"callApiToGetObfuscationKey result error when getting obfuscation key: ".$tmpresult[
'content'], LOG_WARNING, 0,
'_dolibarrgetkeyobfuscation');
483 $obfuscationkey .=
' '.$e->getMessage();
484 dol_syslog(
"callApiToGetObfuscationKey result error ".$e->getMessage(), LOG_ERR);
485 dol_syslog(
"callApiToGetObfuscationKey result error ".$e->getMessage(), LOG_ERR, 0,
'_dolibarrgetkeyobfuscation');
488 return $obfuscationkey;
620 if (
$object->status > $object::STATUS_DRAFT) {
621 $unalterablelogid =
'UNDEFINED';
623 $sql =
"SELECT signature FROM ".MAIN_DB_PREFIX.
"blockedlog";
624 $sql .=
" WHERE action = 'BILL_VALIDATE' AND element = 'facture' AND ref_object = '".$db->escape(
$object->ref).
"'";
625 $sql .=
$db->order(
'rowid',
'DESC');
626 $sql .=
$db->plimit(1);
628 $resql =
$db->query($sql);
630 $obj =
$db->fetch_object($resql);
632 $unalterablelogid = $obj->signature;
636 if ($unalterablelogid !=
'UNDEFINED') {
637 $pdf->SetXY($posx, $posy);
638 $pdf->SetTextColor(0, 0, 60);
639 $pdf->MultiCell($w, 3, $outputlangs->transnoentities(
"SignatureID").
" : ".
dol_trunc(strtoupper($unalterablelogid), 10),
'',
'R');
643 $isADuplicata = (
$object->pos_print_counter >= 2);
645 $pdf->SetXY($posx, $posy);
646 $pdf->SetTextColor(0, 0, 60);
647 $pdf->MultiCell($w, 3,
'*** '.$outputlangs->trans(
"DUPLICATA").(getDolGlobalString(
'TAKEPOS_SHOW_PRINT_COUNTER_ON_RECEIPT') ?
' (no '.($object->pos_print_counter - 1).
')' :
'').
' ***',
'',
'R');
652 if (
$object->status == $object::STATUS_DRAFT) {
653 $pdf->SetXY($posx, $posy);
654 $pdf->SetTextColor(0, 0, 60);
655 $pdf->MultiCell($w, 3,
'*** '.strtoupper($outputlangs->trans(
"TemporaryReceipt")).
' ***',
'',
'R');
672 include_once DOL_DOCUMENT_ROOT.
'/blockedlog/class/blockedlog.class.php';
677 $listofentities = array();
678 $sql =
"SELECT DISTINCT entity FROM ".MAIN_DB_PREFIX.
"blockedlog";
679 $resql =
$db->query($sql);
681 while ($obj =
$db->fetch_object($resql)) {
682 $listofentities[] = $obj->entity;
685 print
'<tr class="trforrunsql"><td colspan="4">';
686 print
'<b>'.$langs->trans(
'InitEndFlagFile').
"</b>:\n";
687 print
'Error: Failed to get list of entities in blockedlog table';
692 foreach ($listofentities as $entity) {
693 print
'<tr class="trforrunsql"><td colspan="4">';
694 print
'<b>'.$langs->trans(
'InitEndFlagFile').
" (entity = ".$entity.
")</b>:\n";
697 $conf->setEntityValues(
$db, $entity);
702 $sql =
"SELECT MAX(rowid) as maxid FROM ".MAIN_DB_PREFIX.
"blockedlog WHERE entity = ".((int) $entity);
703 $resql =
$db->query($sql);
705 $obj =
$db->fetch_object($resql);
707 $maxid = $obj->maxid;
710 print
'Error: Failed to get max id of blockedlog table';
715 $blocklog_static->fetch($maxid);
717 $lockfile = $blocklog_static->getEndOfChainFlagFile();
720 $stringtowrite =
'BLOCKEDLOGHEAD '.$blocklog_static->id.
" ".
dol_print_date($blocklog_static->date_creation,
'dayhourrfc',
'gmt').
" ".(
string) $blocklog_static->signature;
723 $remoteobfuscationkey = $blocklog_static->getObfuscationKey();
724 if (empty($remoteobfuscationkey)) {
725 print
"Error: Failed to get the remote obfuscation key. We can't record the end of chain flag file so we abort the transaction.";
730 $stringtowriteencoded =
dolEncrypt($stringtowrite, $remoteobfuscationkey,
'',
'',
'dolobfuscationv1-'.
$mysoc->idprof1.
'-'.$blocklog_static->id);
732 $stringtowriteencoded =
dolEncrypt($stringtowrite,
'',
'',
'',
'dolcrypt-'.
$mysoc->idprof1.
'-'.$blocklog_static->id);
736 if (defined(
'BLOCKEDLOG_END_FLAG_IN_A_FILE')) {
737 $lockhandle = fopen($lockfile,
'w+');
739 if (fwrite($lockhandle, $stringtowriteencoded.
"\n") ===
false) {
740 print
"Cannot write to the blockedlog .end file ".$lockfile;
748 print
"Cannot open for writing the blockedlog .end file ".$lockfile;
753 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"const";
754 $sql .=
" WHERE name = '".$db->escape(basename($lockfile)).
"' AND entity = ".((int)
$conf->entity);
755 $resql =
$db->query($sql);
757 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"const(name, value, type, visible, note, entity)";
758 $sql .=
" VALUES('".$db->escape(basename($lockfile)).
"', '".
$db->escape($stringtowriteencoded).
"', 'chaine', 0, 'Blockedlog end of chain flag', ".((int)
$conf->entity).
")";
759 $resql =
$db->query($sql);
761 print
"Cannot open for writing the blockedlog .end file ".basename($lockfile);
767 print $langs->trans(
"Done");
if(! $sortfield) if(! $sortorder) $object
migrate_blockedlog_add_end_file()
Migrate an old database to add the .end flag.
sumAmountsForUnalterableEvent($block, &$refinvoicefound, &$totalhtamount, &$totalvatamount, &$totalamount, &$total_ht, &$total_vat, &$total_ttc)
sumAmountsForUnalterableEvent
getBlockedLogVersionToShow()
Define head array for tabs of blockedlog tools setup pages.
pdfWriteBlockedLogSignature(&$pdf, $outputlangs, $page_height, $object, &$w, &$posx, &$posy)
Add some information from the blockedlog module.
isALNEQualifiedVersion($ignoredev=0, $ignoremodule=0)
Return if the version is a candidate version to get the LNE certification and if the prerequisites ar...
isRegistrationDataSaved()
Return if the KYC mandatory parameters are set Must be the same fields than the one defined as mandat...
userIsTaxAuditor()
Call remote API service to push the last counter and signature.
pdfCertifMentionblockedLog(&$pdf, $outputlangs, $seller, $default_font_size, &$posy, $pdftemplate)
Add legal mention.
isBlockedLogUsed($ignoresystem=0)
Return if the blocked log was already used to block some events.
blockedlogadmin_prepare_head($withtabsetup)
Define head array for tabs of blockedlog tools setup pages.
isRegistrationDataSavedAndPushed()
Return if the KYC mandatory parameters are set AND pushed/registered centralized server.
getHashUniqueIdOfRegistration($algo='sha256')
Return a hash unique identifier of the registration (used to identify the registration of instance wi...
isALNERunningVersion($blockedlogtestalreadydone=0, $blockedlogmodulealreadydone=0)
Return if the application is executed with the LNE requirements on.
callApiToGetObfuscationKey($idprof1, $registrationnumber, $force=false)
Call remote API service to get the obfuscation key.
Class to manage Blocked Log.
Class to manage third parties objects (customers, suppliers, prospects...)
dol_dir_list($utf8_path, $types="all", $recursive=0, $filter="", $excludefilter=null, $sortcriteria="name", $sortorder=SORT_ASC, $mode=0, $nohook=0, $relativename="", $donotfollowsymlinks=0, $nbsecondsold=0)
Scan a directory and return a list of files/directories.
dol_now($mode='gmt')
Return date for now.
dolChmod($filepath, $newmask='')
Change mod of a file.
getMultidirOutput($object, $module='', $forobject=0, $mode='output')
Return the full path of the directory where a module (or an object of a module) stores its files.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '…' if string larger than length.
complete_head_from_modules($conf, $langs, $object, &$head, &$h, $type, $mode='add', $filterorigmodule='')
Complete or removed entries into a head array (used to build tabs).
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
dol_sanitizeKeyCode($str)
Clean a string to use it as a key or code.
isModEnabled($module)
Is Dolibarr module enabled.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
getURLContent($url, $postorget='GET', $param='', $followlocation=1, $addheaders=array(), $allowedschemes=array('http', 'https'), $localurl=0, $ssl_verifypeer=-1, $timeoutconnect=0, $timeoutresponse=0, $otherCurlOptions=array(), $morelogsuffix='')
Function to get a content from an URL (use proxy if proxy defined).
print $langs trans("Show") . '< td style="' . $timeColor . '" align="center"> s</td > badge status0 badge status4 badge status3 Error badge status8< td align="center">< span class="badge ' . $badge . '"></span ></td >< td align="center">< a href="#" class="button button-small" onclick="openLogModal(this)" data-req="' . dol_escape_htmltag($reqSafe) . '" data-res="' . dol_escape_htmltag($resSafe) . '" data-err="' . dol_escape_htmltag($errSafe) . '">< span class="fa fa-search-plus"></span ></a ></td ></tr >< tr >< td colspan="' . $colspan . '" class="opacitymedium"></td ></tr ></table ></div ></form > logModal none logModal none s a JSON string
buildzip.php
dol_hash($chain, $type='0', $nosalt=0, $mode=0)
Returns a hash (non reversible encryption) of a string.
dolEncrypt($chain, $key='', $ciphering='', $forceseed='', $obfuscationmode='dolcrypt')
Encode a string with a symmetric encryption.