* Copyright (C) 2017-2018 Laurent Destailleur * Copyright (C) 2018-2026 Frédéric France * Copyright (C) 2024-2025 MDW * Copyright (C) 2024 Alexandre Spangaro * * 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/blockedlog/admin/blockedlog_control.php * \ingroup blockedlog * \brief Page to view if a registered instance has done a backup restoration */ // Load Dolibarr environment require '../../main.inc.php'; /** * @var Conf $conf * @var DoliDB $db * @var HookManager $hookmanager * @var Societe $mysoc * @var Translate $langs * @var User $user * * @var string $dolibarr_main_db_name */ require_once DOL_DOCUMENT_ROOT.'/blockedlog/lib/blockedlog.lib.php'; require_once DOL_DOCUMENT_ROOT.'/blockedlog/class/blockedlog.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.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.'/core/class/html.formother.class.php'; // Load translation files required by the page $langs->loadLangs(array('admin', 'banks', 'bills', 'blockedlog', 'other')); // Get Parameters $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'aZ09'); // Used by the actions_linkedfiles.inc.php $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : getDolDefaultContextPage(__FILE__); // To manage different context of search $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') $withtab = GETPOSTISSET('withtab') ? GETPOSTINT('withtab') : 1; //$hmacexportkey = GETPOST('hmacexportkey', 'password'); $inputregistrationnumber = GETPOST('inputregistrationnumber'); $search_showonlyerrors = GETPOSTINT('search_showonlyerrors'); if ($search_showonlyerrors < 0) { $search_showonlyerrors = 0; } $search_startyear = GETPOSTINT('search_startyear'); $search_startmonth = GETPOSTINT('search_startmonth'); $search_startday = GETPOSTINT('search_startday'); $search_endyear = GETPOSTINT('search_endyear'); $search_endmonth = GETPOSTINT('search_endmonth'); $search_endday = GETPOSTINT('search_endday'); $search_id = GETPOST('search_id', 'alpha'); $search_fk_user = GETPOST('search_fk_user', 'intcomma'); $search_start = -1; if (GETPOST('search_startyear') != '') { $search_start = dol_mktime(0, 0, 0, $search_startmonth, $search_startday, $search_startyear); } $search_end = -1; if (GETPOST('search_endyear') != '') { $search_end = dol_mktime(23, 59, 59, $search_endmonth, $search_endday, $search_endyear); } $search_code = GETPOST('search_code', 'array:alpha'); $search_ref = GETPOST('search_ref', 'alpha'); $search_amount = GETPOST('search_amount', 'alpha'); $search_signature = GETPOST('search_signature', 'alpha'); if (($search_start == -1 || empty($search_start)) && !GETPOSTISSET('search_startmonth') && !GETPOSTISSET('begin')) { $search_start = dol_time_plus_duree(dol_now(), -1, 'w'); $tmparray = dol_getdate($search_start); $search_startday = $tmparray['mday']; $search_startmonth = $tmparray['mon']; $search_startyear = $tmparray['year']; } // Load variable for pagination $limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); $page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 $offset = $limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; if (empty($sortfield)) { $sortfield = 'rowid'; } if (empty($sortorder)) { $sortorder = 'DESC'; } $block_static = new BlockedLog($db); $block_static->loadTrackedEvents(); // Access Control if (((!$user->admin && !$user->hasRight('blockedlog', 'read')) || !isModEnabled('blockedlog')) && !userIsTaxAuditor()) { accessforbidden('Access to this page is reserved to an allowed tax auditors'); } $result = restrictedArea($user, 'blockedlog', 0, ''); $permission = $user->hasRight('blockedlog', 'read'); $permissiontoadd = $user->hasRight('blockedlog', 'read'); // Permission is to upload new files to scan them $permtoedit = $permissiontoadd; $upload_dir = getMultidirOutput($block_static, 'blockedlog').'/archives'; /* * Actions */ if ($action == 'control' && $user->hasRight('blockedlog', 'read')) { // read is read/export for blockedlog $action = ''; } /* * View */ $form = new Form($db); $formother = new FormOther($db); $title = $langs->trans("BrowseBlockedLog"); $help_url = "EN:Module_Unalterable_Archives_-_Logs|FR:Module_Archives_-_Logs_Inaltérable"; llxHeader('', $title, $help_url, '', 0, 0, '', '', '', 'bodyforlist mod-blockedlog page-admin_blockedlog_list'); $linkback = ''; $morehtmlcenter = ''; $texttop = ''; $registrationnumber = getHashUniqueIdOfRegistration(); if (!userIsTaxAuditor()) { $texttop = ''.$langs->trans("RegistrationNumber").': '.dol_trunc($registrationnumber, 10).''; if (!isRegistrationDataSavedAndPushed()) { $texttop = ''; } } print load_fiche_titre($title.'
'.$texttop, $linkback, 'blockedlog', 0, '', '', $morehtmlcenter); $head = blockedlogadmin_prepare_head($withtab); print dol_get_fiche_head($head, 'control', '', -1); //print $texttop; //print '

'; print '
'; print $langs->trans("ControlDesc")."
"; print "
\n"; print '
'; print ''; print ''; print '
'; print ''.$langs->trans("PleaseEnterPartialRegistrationNumber").': '; print ''; print '
'; print '
'; print '
'; print ''; print '
'; print '
'; print '
'; print dol_get_fiche_end(); print '
'; if ($inputregistrationnumber && strlen($inputregistrationnumber) < 8) { // Message print img_picto('', 'cross', 'class="pictofixedwidth"').$langs->trans("RegistrationNumberIsTooShort"); } elseif ($inputregistrationnumber) { // Return known information on this registration number if (!isModEnabled('captureserver')) { print 'The module captureserver to capture the signals from installed instance is not enabled. Is this instance the master instance of the Dolibarr foundation ?'; } else { // Report registration $sql = "SELECT rowid, registerid, registername, registerprofid, registeremail, date_creation, tms, content, comment,"; $sql .= " versiondolibarr, versionblockedlog, country_code"; $sql .= " FROM ".MAIN_DB_PREFIX."captureserver_captureserver"; $sql .= " WHERE registerid LIKE '".$db->escape($inputregistrationnumber)."%'"; $sql .= " AND type = 'dolibarrregistration'"; $sql .= " LIMIT 100"; // Should have only 1 record, so a limit of 100 is enough $resql = $db->query($sql); if ($resql) { $num = 0; while ($obj = $db->fetch_object($resql)) { $num++; print img_picto('', 'tick', 'class="pictofixedwidth"').' '.dol_print_date($obj->date_creation, 'dayhour', 'gmt').'   '; print $langs->trans("RegistrationDone"); print ' - '.$langs->trans("BlockedLogInstance").' '.dolPrintHTML($obj->registerid); print '
'; print $langs->trans("LastRegistrationUpdate").' '.dol_print_date($obj->tms, 'dayhour', 'gmt'); print '
'; print $obj->registername.' - '.$obj->registerprofid.' - '.$obj->country_code.' - '.$obj->registeremail; print '
'; print $langs->trans("Version").': '.$obj->versiondolibarr.' - '.$langs->trans("VersionOfModule", $langs->transnoentitiesnoconv("BlockedLog")).': '.$obj->versionblockedlog; /* print '
'; print $langs->trans("Note").': '; print $obj->comment; print '
'; */ print '
'; } if ($num == 0) { print img_picto('', 'cross', 'class="pictofixedwidth error"').$langs->trans("NoRegistrationFound"); print '
'; } } else { dol_print_error($db); } print '
'; // Report backup restoration or last lines deletion $sql = "SELECT rowid, registerid, date_creation, content, comment from ".MAIN_DB_PREFIX."captureserver_captureserver"; $sql .= " WHERE registerid LIKE '".$db->escape($inputregistrationnumber)."%'"; $sql .= " AND type = 'deletion_or_backup_restoration'"; $sql .= " LIMIT 100"; // Should not happen, so a limit of 100 is enough $resql = $db->query($sql); if ($resql) { $num = 0; while ($obj = $db->fetch_object($resql)) { $num++; print img_picto('', 'cross', 'class="pictofixedwidth"').' '.dol_print_date($obj->date_creation, 'dayhour').'   '; print $langs->trans("BackupRestorationOrLastLineDeletionDetected"); print ' - '.$langs->trans("BlockedLogInstance").' '.dolPrintHTML($obj->registerid); print '
'; print '
'; print $langs->trans("Note").': '; print $obj->comment; print '
'; print '
'; /* print ''; */ print '
'; } if ($num == 0) { print img_picto('', 'tick', 'class="pictofixedwidth"').$langs->trans("NoBackupRestorationOrLastLineDeletionDetected"); } } else { dol_print_error($db); } print '
'; } } // End of page llxFooter(); $db->close();