29require
'../../main.inc.php';
30require_once DOL_DOCUMENT_ROOT.
'/blockedlog/lib/blockedlog.lib.php';
31require_once DOL_DOCUMENT_ROOT.
'/blockedlog/class/blockedlog.class.php';
32require_once DOL_DOCUMENT_ROOT.
'/blockedlog/class/authority.class.php';
33require_once DOL_DOCUMENT_ROOT.
'/core/lib/admin.lib.php';
34require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
35require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
48$langs->loadLangs(array(
'admin',
'bills',
'blockedlog',
'other'));
51if ((!$user->admin && !$user->hasRight(
'blockedlog',
'read')) || empty(
$conf->blockedlog->enabled)) {
56$action =
GETPOST(
'action',
'aZ09');
57$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'blockedloglist';
58$backtopage =
GETPOST(
'backtopage',
'alpha');
59$optioncss =
GETPOST(
'optioncss',
'aZ');
61$search_showonlyerrors =
GETPOSTINT(
'search_showonlyerrors');
62if ($search_showonlyerrors < 0) {
63 $search_showonlyerrors = 0;
66$search_startyear =
GETPOSTINT(
'search_startyear');
67$search_startmonth =
GETPOSTINT(
'search_startmonth');
68$search_startday =
GETPOSTINT(
'search_startday');
70$search_endmonth =
GETPOSTINT(
'search_endmonth');
72$search_id =
GETPOST(
'search_id',
'alpha');
73$search_fk_user =
GETPOST(
'search_fk_user',
'intcomma');
75if (
GETPOST(
'search_startyear') !=
'') {
76 $search_start =
dol_mktime(0, 0, 0, $search_startmonth, $search_startday, $search_startyear);
79if (
GETPOST(
'search_endyear') !=
'') {
80 $search_end =
dol_mktime(23, 59, 59, $search_endmonth, $search_endday, $search_endyear);
82$search_code =
GETPOST(
'search_code',
'array:alpha');
83$search_ref =
GETPOST(
'search_ref',
'alpha');
84$search_amount =
GETPOST(
'search_amount',
'alpha');
85$search_signature =
GETPOST(
'search_signature',
'alpha');
87if (($search_start == -1 || empty($search_start)) && !GETPOSTISSET(
'search_startmonth') && !GETPOSTISSET(
'begin')) {
90 $search_startday = $tmparray[
'mday'];
91 $search_startmonth = $tmparray[
'mon'];
92 $search_startyear = $tmparray[
'year'];
97$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
98$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
100if (empty($page) || $page == -1) {
103$offset = $limit * $page;
104$pageprev = $page - 1;
105$pagenext = $page + 1;
107if (empty($sortfield)) {
108 $sortfield =
'rowid';
110if (empty($sortorder)) {
115$block_static->loadTrackedEvents();
120$max_execution_time_for_importexport =
getDolGlobalInt(
'EXPORT_MAX_EXECUTION_TIME', 300);
121$max_time = @ini_get(
"max_execution_time");
122if ($max_time && $max_time < $max_execution_time_for_importexport) {
123 dol_syslog(
"max_execution_time=".$max_time.
" is lower than max_execution_time_for_importexport=".$max_execution_time_for_importexport.
". We try to increase it dynamically.");
124 @ini_set(
"max_execution_time", $max_execution_time_for_importexport);
128$MAXFORSHOWNLINKS =
getDolGlobalInt(
'BLOCKEDLOG_MAX_FOR_SHOWN_LINKS', 100);
136if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
138 $search_fk_user =
'';
141 $search_code = array();
144 $search_signature =
'';
145 $search_showonlyerrors = 0;
146 $search_startyear =
'';
147 $search_startmonth =
'';
148 $search_startday =
'';
149 $search_endyear =
'';
150 $search_endmonth =
'';
153 $search_array_options = array();
156if ($action ===
'downloadblockchain') {
159 $bc = $auth->getLocalBlockChain();
161 header(
'Content-Type: application/octet-stream');
162 header(
"Content-Transfer-Encoding: Binary");
163 header(
"Content-disposition: attachment; filename=\"".$auth->signature.
".certif\"");
168} elseif (
GETPOST(
'downloadcsv',
'alpha')) {
175 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Year")),
null,
"errors");
179 $sql =
"SELECT rowid,date_creation,tms,user_fullname,action,amounts,element,fk_object,date_object,ref_object,signature,fk_user,object_data";
180 $sql .=
" FROM ".MAIN_DB_PREFIX.
"blockedlog";
181 $sql .=
" WHERE entity = ".((int)
$conf->entity);
185 $sql .=
" AND date_creation BETWEEN '".$db->idate($dates).
"' AND '".$db->idate($datee).
"'";
187 $sql .=
" ORDER BY rowid ASC";
188 $sql .= $db->plimit(1);
190 $res = $db->query($sql);
193 $obj = $db->fetch_object($res);
195 $firstid = $obj->rowid;
196 $previoushash = $block_static->getPreviousHash(0, $firstid);
199 $previoushash =
'nodata';
209 require_once DOL_DOCUMENT_ROOT.
'/blockedlog/class/blockedlog.class.php';
219 $object->label =
'Export unalterable logs - Period: year='.GETPOSTINT(
'yeartoexport').(GETPOSTINT(
'monthtoexport') ?
' month='.GETPOSTINT(
'monthtoexport') :
'');
221 $action =
'BLOCKEDLOG_EXPORT';
222 $result = $b->setObjectData(
$object, $action, 0, $user);
226 setEventMessages(
'Failed to insert the export int the unalterable log',
null,
'errors');
230 $res = $b->create($user);
233 setEventMessages(
'Failed to insert the export int the unalterable log',
null,
'errors');
240 $sql =
"SELECT rowid, date_creation, tms, user_fullname, action, amounts, element, fk_object, date_object, ref_object, signature, fk_user, object_data, object_version, debuginfo";
241 $sql .=
" FROM ".MAIN_DB_PREFIX.
"blockedlog";
242 $sql .=
" WHERE entity = ".((int)
$conf->entity);
246 $sql .=
" AND date_creation BETWEEN '".$db->idate($dates).
"' AND '".$db->idate($datee).
"'";
248 $sql .=
" ORDER BY rowid ASC";
250 $resql = $db->query($sql);
252 $nameofdownoadedfile =
"unalterable-log-archive-".$dolibarr_main_db_name.
"-".(
GETPOSTINT(
'yeartoexport') > 0 ?
GETPOSTINT(
'yeartoexport').(GETPOSTINT(
'monthtoexport') > 0 ? sprintf(
"%02d",
GETPOSTINT(
'monthtoexport')) :
'').
'-' :
'').
dol_print_date(
dol_now(),
'dayhourlog',
'gmt').
'UTC-DONOTMODIFY';
254 $tmpfile =
$conf->admin->dir_temp.
'/unalterable-log-archive-tmp-'.$user->id.
'.csv';
256 $fh = fopen($tmpfile,
'w');
259 fwrite($fh, $langs->transnoentities(
'Id')
260 .
';'.$langs->transnoentities(
'Date')
261 .
';'.$langs->transnoentities(
'User')
262 .
';'.$langs->transnoentities(
'Action')
263 .
';'.$langs->transnoentities(
'Element')
264 .
';'.$langs->transnoentities(
'Amounts')
265 .
';'.$langs->transnoentities(
'ObjectId')
266 .
';'.$langs->transnoentities(
'Date')
267 .
';'.$langs->transnoentities(
'Ref')
268 .
';'.$langs->transnoentities(
'Fingerprint')
269 .
';'.$langs->transnoentities(
'Status')
270 .
';'.$langs->transnoentities(
'Note')
271 .
';'.$langs->transnoentities(
'Version')
272 .
';'.$langs->transnoentities(
'FullData')
273 .
';'.$langs->transnoentities(
'DebugInfo')
279 while ($obj = $db->fetch_object($resql)) {
282 $block_static->id = $obj->rowid;
283 $block_static->date_creation = $db->jdate($obj->date_creation);
284 $block_static->date_modification = $db->jdate($obj->tms);
285 $block_static->action = $obj->action;
286 $block_static->fk_object = $obj->fk_object;
287 $block_static->element = $obj->element;
288 $block_static->amounts = (float) $obj->amounts;
289 $block_static->ref_object = $obj->ref_object;
290 $block_static->date_object = $db->jdate($obj->date_object);
291 $block_static->user_fullname = $obj->user_fullname;
292 $block_static->fk_user = $obj->fk_user;
293 $block_static->signature = $obj->signature;
294 $block_static->object_data = $block_static->dolDecodeBlockedData($obj->object_data);
295 $block_static->object_version = $obj->object_version;
296 $block_static->debuginfo = $obj->debuginfo;
298 $checksignature = $block_static->checkSignature($previoushash);
300 if ($checksignature) {
301 $statusofrecord =
'Valid';
302 if ($loweridinerror > 0) {
303 $statusofrecordnote =
'ValidButFoundAPreviousKO';
305 $statusofrecordnote =
'';
308 $statusofrecord =
'KO';
309 $statusofrecordnote =
'LineCorruptedOrNotMatchingPreviousOne';
310 $loweridinerror = $obj->rowid;
314 $statusofrecordnote = $langs->trans(
"PreviousFingerprint").
': '.$previoushash.($statusofrecordnote ?
' - '.$statusofrecordnote :
'');
316 fwrite($fh, $obj->rowid
317 .
';'.$obj->date_creation
318 .
';"'.str_replace(
'"',
'""', $obj->user_fullname).
'";'
323 .
';'.$obj->date_object
324 .
';"'.str_replace(
'"',
'""', $obj->ref_object).
'";'
327 .
';'.$statusofrecordnote
328 .
';'.$obj->object_version
329 .
';"'.str_replace(
'"',
'""', $obj->object_data).
'";'
330 .str_replace(
'"',
'""', $obj->debuginfo).
'"'
334 $previoushash = $obj->signature;
342 $md5value = md5_file($tmpfile);
345 file_put_contents($tmpfile,
'END - md5='.$md5value, FILE_APPEND);
347 header(
'Content-Type: application/octet-stream');
348 header(
"Content-Transfer-Encoding: Binary");
349 header(
"Content-disposition: attachment; filename=\"".$nameofdownoadedfile.
".csv\"");
365$form =
new Form($db);
368if (
GETPOST(
'withtab',
'alpha')) {
369 $title = $langs->trans(
"ModuleSetup").
' '.$langs->trans(
'BlockedLog');
371 $title = $langs->trans(
"BrowseBlockedLog");
373$help_url =
"EN:Module_Unalterable_Archives_-_Logs|FR:Module_Archives_-_Logs_Inaltérable";
375llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'bodyforlist mod-blockedlog page-admin_blockedlog_list');
377$blocks = $block_static->getLog(
'all', (
int) $search_id, $MAXLINES, $sortfield, $sortorder, (
int) $search_fk_user, $search_start, $search_end, $search_ref, $search_amount, $search_code, $search_signature);
378if (!is_array($blocks)) {
380 setEventMessages($langs->trans(
"TooManyRecordToScanRestrictFilters", $MAXLINES),
null,
'errors');
382 dol_print_error($block_static->db, $block_static->error, $block_static->errors);
388if (
GETPOST(
'withtab',
'alpha')) {
389 $linkback =
'<a href="'.($backtopage ? $backtopage : DOL_URL_ROOT.
'/admin/modules.php').
'">'.$langs->trans(
"BackToModuleList").
'</a>';
394if (
GETPOST(
'withtab',
'alpha')) {
399print
'<div class="opacitymedium hideonsmartphone justify">';
401print $langs->trans(
"FingerprintsDesc").
"<br>";
405$s = $langs->trans(
"FilesIntegrityDesc",
'{s}');
406$s = str_replace(
'{s}', DOL_URL_ROOT.
'/admin/system/filecheck.php', $s);
415if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
416 $param .=
'&contextpage='.urlencode($contextpage);
418if ($limit > 0 && $limit !=
$conf->liste_limit) {
419 $param .=
'&limit='.((int) $limit);
421if ($search_id !=
'') {
422 $param .=
'&search_id='.urlencode($search_id);
424if ($search_fk_user > 0) {
425 $param .=
'&search_fk_user='.urlencode($search_fk_user);
427if ($search_startyear > 0) {
428 $param .=
'&search_startyear='.((int) $search_startyear);
430if ($search_startmonth > 0) {
431 $param .=
'&search_startmonth='.((int) $search_startmonth);
433if ($search_startday > 0) {
434 $param .=
'&search_startday='.((int) $search_startday);
436if ($search_endyear > 0) {
437 $param .=
'&search_endyear='.((int) $search_endyear);
439if ($search_endmonth > 0) {
440 $param .=
'&search_endmonth='.((int) $search_endmonth);
442if ($search_endday > 0) {
443 $param .=
'&search_endday='.((int) $search_endday);
446 $param .=
'&search_amount='.urlencode($search_amount);
448if ($search_signature) {
449 $param .=
'&search_signature='.urlencode($search_signature);
451if ($search_showonlyerrors > 0) {
452 $param .=
'&search_showonlyerrors='.((int) $search_showonlyerrors);
454if ($optioncss !=
'') {
455 $param .=
'&optioncss='.urlencode($optioncss);
457if (
GETPOST(
'withtab',
'alpha')) {
458 $param .=
'&withtab='.urlencode(
GETPOST(
'withtab',
'alpha'));
464print
'<form method="POST" id="searchFormList" action="'.$_SERVER[
"PHP_SELF"].
'?output=file">';
465print
'<input type="hidden" name="token" value="'.newToken().
'">';
467print
'<div class="right">';
468print $langs->trans(
"RestrictYearToExport").
': ';
470print $formother->select_month((
string)
GETPOSTINT(
'monthtoexport'),
'monthtoexport', 1, 0,
'minwidth50 maxwidth75imp valignmiddle',
true);
471print
'<input type="text" name="yeartoexport" class="valignmiddle maxwidth75imp" value="'.GETPOST(
'yeartoexport').
'" placeholder="'.$langs->trans(
"Year").
'">';
472print
'<input type="hidden" name="withtab" value="'.GETPOST(
'withtab',
'alpha').
'">';
473print
'<input type="submit" name="downloadcsv" class="button" value="'.$langs->trans(
'DownloadLogCSV').
'">';
475 print
' | <a href="?action=downloadblockchain'.(GETPOST(
'withtab',
'alpha') ?
'&withtab='.GETPOST(
'withtab',
'alpha') :
'').
'">'.$langs->trans(
'DownloadBlockChain').
'</a>';
481print
'<form method="POST" id="searchFormList" action="'.$_SERVER[
"PHP_SELF"].
'">';
483if ($optioncss !=
'') {
484 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
486print
'<input type="hidden" name="token" value="'.newToken().
'">';
487print
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
488print
'<input type="hidden" name="action" value="list">';
489print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
490print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
491print
'<input type="hidden" name="page" value="'.$page.
'">';
492print
'<input type="hidden" name="contextpage" value="'.$contextpage.
'">';
493print
'<input type="hidden" name="withtab" value="'.GETPOST(
'withtab',
'alpha').
'">';
495print
'<div class="div-table-responsive">';
496print
'<table class="noborder centpercent liste">';
499print
'<tr class="liste_titre_filter">';
503 print
'<td class="liste_titre center">';
504 $searchpicto = $form->showFilterButtons();
509print
'<td class="liste_titre"><input type="text" class="maxwidth50" name="search_id" value="'.dol_escape_htmltag($search_id).
'"></td>';
511print
'<td class="liste_titre">';
513print $form->selectDate($search_start,
'search_start');
516print $form->selectDate($search_end,
'search_end');
520print
'<td class="liste_titre">';
521print $form->select_dolusers($search_fk_user,
'search_fk_user', 1,
null, 0,
'',
'',
'0', 0, 0,
'', 0,
'',
'maxwidth150');
525print
'<td class="liste_titre">';
526print $form->multiselectarray(
'search_code', $block_static->trackedevents, $search_code, 0, 0,
'maxwidth150', 1);
530print
'<td class="liste_titre"><input type="text" class="maxwidth50" name="search_ref" value="'.dol_escape_htmltag($search_ref).
'"></td>';
533print
'<td class="liste_titre right"><input type="text" class="maxwidth50" name="search_amount" value="'.dol_escape_htmltag($search_amount).
'"></td>';
536print
'<td class="liste_titre"></td>';
539print
'<td class="liste_titre"><input type="text" class="maxwidth50" name="search_signature" value="'.dol_escape_htmltag($search_signature).
'"></td>';
542print
'<td class="liste_titre center minwidth75imp parentonrightofpage">';
543$array = array(
"1" =>
"OnlyNonValid");
544print $form->selectarray(
'search_showonlyerrors', $array, $search_showonlyerrors, 1, 0, 0,
'', 1, 0, 0,
'ASC',
'search_status width100 onrightofpage', 1);
551print
'<td class="liste_titre"></td>';
555 print
'<td class="liste_titre center">';
556 $searchpicto = $form->showFilterButtons();
563print
'<tr class="liste_titre">';
566 print
getTitleFieldOfList(
'<span id="blockchainstatus"></span>', 0, $_SERVER[
"PHP_SELF"],
'',
'', $param,
'class="center"', $sortfield, $sortorder,
'').
"\n";
568print
getTitleFieldOfList($langs->trans(
'#'), 0, $_SERVER[
"PHP_SELF"],
'rowid',
'', $param,
'', $sortfield, $sortorder,
'minwidth50 ').
"\n";
569print
getTitleFieldOfList($langs->trans(
'Date'), 0, $_SERVER[
"PHP_SELF"],
'date_creation',
'', $param,
'', $sortfield, $sortorder,
'').
"\n";
570print
getTitleFieldOfList($langs->trans(
'Author'), 0, $_SERVER[
"PHP_SELF"],
'user_fullname',
'', $param,
'', $sortfield, $sortorder,
'').
"\n";
571print
getTitleFieldOfList($langs->trans(
'Action'), 0, $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'').
"\n";
572print
getTitleFieldOfList($langs->trans(
'Ref'), 0, $_SERVER[
"PHP_SELF"],
'ref_object',
'', $param,
'', $sortfield, $sortorder,
'').
"\n";
573print
getTitleFieldOfList($langs->trans(
'Amount'), 0, $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'right ').
"\n";
574print
getTitleFieldOfList($langs->trans(
'DataOfArchivedEvent'), 0, $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'center ', 0, $langs->trans(
'DataOfArchivedEventHelp'), 1).
"\n";
575print
getTitleFieldOfList($langs->trans(
'Fingerprint'), 0, $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'').
"\n";
576print
getTitleFieldOfList($form->textwithpicto($langs->trans(
'Status'), $langs->trans(
'DataOfArchivedEventHelp2')), 0, $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'center ').
"\n";
578print
getTitleFieldOfList(
'', 0, $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'').
"\n";
581 print
getTitleFieldOfList(
'<span id="blockchainstatus"></span>', 0, $_SERVER[
"PHP_SELF"],
'',
'', $param,
'class="center"', $sortfield, $sortorder,
'').
"\n";
585$checkresult = array();
586$checkdetail = array();
596 if (is_array($blocks)) {
597 foreach ($blocks as &$block) {
598 $tmpcheckresult = $block->checkSignature(
'', 1);
600 $checksignature = $tmpcheckresult[
'checkresult'];
602 $checkresult[$block->id] = $checksignature;
603 $checkdetail[$block->id] = $tmpcheckresult;
605 if (!$checksignature) {
606 if (empty($loweridinerror)) {
607 $loweridinerror = $block->id;
609 $loweridinerror = min($loweridinerror, $block->id);
616if (is_array($blocks)) {
619 $object_link_title =
'';
621 foreach ($blocks as &$block) {
623 if (empty($search_showonlyerrors) || !$checkresult[$block->id]) {
626 if ($nbshown < $MAXFORSHOWNLINKS) {
627 $object_link = $block->getObjectLink();
628 $object_link_title =
'';
630 $object_link = $block->element.
'/'.$block->fk_object;
631 $object_link_title = $langs->trans(
'LinkHasBeenDisabledForPerformancePurpose');
634 print
'<tr class="oddeven">';
638 print
'<td class="liste_titre">';
643 print
'<td>'.dol_escape_htmltag((
string) $block->id).
'</td>';
646 print
'<td class="nowraponall">'.dol_print_date($block->date_creation,
'dayhour').
'</td>';
649 print
'<td class="tdoverflowmax200" title="'.dol_escape_htmltag($block->user_fullname).
'">';
655 $labelofaction = $langs->transnoentitiesnoconv(
'log'.$block->action);
656 print
'<td class="tdoverflowmax250" title="'.dol_escape_htmltag($labelofaction).
'">'.
dolPrintHTML($labelofaction).
'</td>';
659 print
'<td class="nowraponall">';
664 print
'<td class="right nowraponall">'.price($block->amounts).
'</td>';
667 print
'<td class="center"><a href="#" data-blockid="'.$block->id.
'" rel="show-info">'.
img_info($langs->trans(
'ShowDetails')).
'</a></td>';
670 print
'<td class="nowraponall">';
672 $texttoshow = $langs->trans(
"Fingerprint").
' - '.$langs->trans(
"SavedOnLine").
' =<br>'.$block->signature;
673 $texttoshow .=
'<br><br>'.$langs->trans(
"Fingerprint").
' - Recalculated sha256('.$langs->trans(
"PreviousHash").
' on previous line + data) =<br>'.$checkdetail[$block->id][
'calculatedsignature'];
674 $texttoshow .=
'<br><span class="opacitymedium">'.$langs->trans(
"PreviousHash").
'='.$checkdetail[$block->id][
'previoushash'].
'</span>';
676 print $form->textwithpicto(
dol_trunc($block->signature, 8), $texttoshow, 1,
'help',
'', 0, 2,
'fingerprint'.$block->id);
680 print
'<td class="center">';
681 if (!$checkresult[$block->id] || ($loweridinerror && $block->id >= $loweridinerror)) {
682 if ($checkresult[$block->id]) {
683 print
'<span class="badge badge-status4 badge-status" title="'.$langs->trans(
'OkCheckFingerprintValidityButChainIsKo').
'">OK</span>';
685 print
'<span class="badge badge-status8 badge-status" title="'.$langs->trans(
'KoCheckFingerprintValidity').
'">KO</span>';
688 print
'<span class="badge badge-status4 badge-status" title="'.$langs->trans(
'OkCheckFingerprintValidity').
'">OK</span>';
694 if (!$checkresult[$block->id] || ($loweridinerror && $block->id >= $loweridinerror)) {
695 if ($checkresult[$block->id]) {
696 print $form->textwithpicto(
'', $langs->trans(
'OkCheckFingerprintValidityButChainIsKo'));
705 print
' '.($block->certified ?
img_picto($langs->trans(
'AddedByAuthority'),
'info') :
img_picto($langs->trans(
'NotAddedByAuthorityYet'),
'info_black'));
710 print
'<td class="tdoverflowmax150"'.(preg_match(
'/<a/', $object_link) ?
'' :
'title="'.dol_escape_htmltag(
dol_string_nohtmltag($object_link.($object_link_title ?
' - '.$object_link_title :
''))).
'"').
'>';
711 print
'<!-- object_link -->';
717 print
'<td class="liste_titre">';
726 print
'<tr><td colspan="12"><span class="opacitymedium">'.$langs->trans(
"NoRecordFound").
'</span></td></tr>';
737print
'<script type="text/javascript">
739jQuery(document).ready(function () {
740 jQuery("#dialogforpopup").dialog(
741 { closeOnEscape: true, classes: { "ui-dialog": "highlight" },
742 maxHeight: window.innerHeight-60, height: window.innerHeight-60, width: '.($conf->browser->layout ==
'phone' ? 400 : 700).
',
744 autoOpen: false }).css("z-index: 5000");
746 $("a[rel=show-info]").click(function() {
748 console.log("We click on tooltip, we open popup and get content using an ajax call");
750 var fk_block = $(this).attr("data-blockid");
755 url:
"'.DOL_URL_ROOT.'/blockedlog/ajax/block-info.php?id="+fk_block,
757 }).done(
function(data) {
758 jQuery(
"#dialogforpopup").html(data);
761 jQuery(
"#dialogforpopup").dialog(
"open");
767if (getDolGlobalString('BLOCKEDLOG_USE_REMOTE_AUTHORITY
') && getDolGlobalString('BLOCKEDLOG_AUTHORITY_URL
')) {
769 <script type="text/javascript">
774 url: '<?php echo DOL_URL_ROOT.
'/blockedlog/ajax/check_signature.php' ?>
',
776 }).done(function(data) {
777 if(data == 'hashisok
') {
778 $('#blockchainstatus
').html('<?php echo $langs->trans(
'AuthorityReconizeFingerprintConformity').
' '.
img_picto($langs->trans(
'SignatureOK'),
'on') ?>
');
781 $('#blockchainstatus
').html('<?php echo $langs->trans(
'AuthorityDidntReconizeFingerprintConformity').
' '.
img_picto($langs->trans(
'SignatureKO'),
'off') ?>
');
790if (GETPOST('withtab
', 'alpha
')) {
791 print dol_get_fiche_end();
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
blockedlogadmin_prepare_head()
Define head array for tabs of blockedlog tools setup pages.
Class to manage certif authority.
Class to manage Blocked Log.
dol_get_first_day($year, $month=1, $gm=false)
Return GMT time for first day of a month or year.
dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforendofmonth=0)
Add a delay to a date.
dol_get_last_day($year, $month=12, $gm=false)
Return GMT time for last day of a month or year.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
dolPrintHTML($s, $allowiframe=0)
Return a string (that can be on several lines) ready to be output on a HTML page.
dol_string_nohtmltag($stringtoclean, $removelinefeed=1, $pagecodeto='UTF-8', $strip_tags=0, $removedoublespaces=1)
Clean a string from all HTML tags and entities.
currentToken()
Return the value of token currently saved into session with name 'token'.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $disablesortlink=0, $tooltip='', $forcenowrapcolumntitle=0)
Get title line of an array.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_print_error($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.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_getdate($timestamp, $fast=false, $forcetimezone='')
Return an array with locale date info.
img_info($titlealt='default')
Show info logo.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.