diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php
index 25352372d8d..82f1df1b7d5 100644
--- a/htdocs/admin/modules.php
+++ b/htdocs/admin/modules.php
@@ -94,6 +94,8 @@ $hookmanager->initHooks(array('adminmodules','globaladmin'));
* Actions
*/
+$formconfirm = '';
+
$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');
@@ -236,8 +238,7 @@ if ($action == 'set' && $user->admin)
header("Location: ".$_SERVER["PHP_SELF"]."?mode=".$mode.$param.($page_y?'&page_y='.$page_y:''));
exit;
}
-
-if ($action == 'reset' && $user->admin)
+else if ($action == 'reset' && $user->admin && GETPOST('confirm') == 'yes')
{
$result=unActivateModule($value);
if ($result) setEventMessages($result, null, 'errors');
@@ -423,6 +424,22 @@ foreach ($modulesdir as $dir)
}
}
+if ($action == 'reset_confirm' && $user->admin)
+{
+ if(!empty($modules[$value])) {
+ $objMod = $modules[$value];
+
+ if(!empty($objMod->langfiles)) $langs->loadLangs($objMod->langfiles);
+
+ $form = new Form($db);
+ $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?value='.$value.'&mode='.$mode.$param, $langs->trans('ConfirmUnactivation'), $langs->trans(GETPOST('confirm_message_code')), 'reset', '', 'no', 1);
+
+ }
+
+}
+
+print $formconfirm;
+
asort($orders);
//var_dump($orders);
//var_dump($categ);
@@ -679,9 +696,20 @@ if ($mode == 'common')
}
else
{
- print 'numero.'&module_position='.$module_position.'&action=reset&value=' . $modName . '&mode=' . $mode . $param . '">';
- print img_picto($langs->trans("Activated"),'switch_on');
- print '';
+ if(!empty($objMod->warnings_unactivation[$mysoc->country_code]) && method_exists($objMod, 'alreadyUsed') && $objMod->alreadyUsed()) {
+ print 'numero.'&module_position='.$module_position.'&action=reset_confirm&confirm_message_code='.$objMod->warnings_unactivation[$mysoc->country_code].'&value=' . $modName . '&mode=' . $mode . $param . '">';
+ print img_picto($langs->trans("Activated"),'switch_on');
+ print '';
+
+ }
+ else {
+
+ print 'numero.'&module_position='.$module_position.'&action=reset&value=' . $modName . '&mode=' . $mode .'&confirm=yes' . $param . '">';
+ print img_picto($langs->trans("Activated"),'switch_on');
+ print '';
+
+ }
+
}
print ''."\n";
diff --git a/htdocs/core/modules/modBlockedLog.class.php b/htdocs/core/modules/modBlockedLog.class.php
index 6928c6f6f1c..493c0ad513a 100644
--- a/htdocs/core/modules/modBlockedLog.class.php
+++ b/htdocs/core/modules/modBlockedLog.class.php
@@ -69,8 +69,10 @@ class modBlockedLog extends DolibarrModules
$this->depends = array('always'=>'modFacture'); // List of modules id that must be enabled if this module is enabled
$this->requiredby = array(); // List of modules id to disable if this one is disabled
$this->conflictwith = array(); // List of modules id this module is in conflict with
- $this->langfiles = array();
+ $this->langfiles = array('blockedlog');
+ $this->warnings_unactivation = array('FR'=>'BlockedLogAreRequiredByYourCountryLegislation');
+
// Constants
//-----------
@@ -87,4 +89,51 @@ class modBlockedLog extends DolibarrModules
//------------------
$this->menu = array();
}
+
+ /**
+ * Check if module was already used before unactivation linked to warnings_unactivation property
+ */
+ function alreadyUsed() {
+
+ $res = $this->db->query("SELECT count(*) as nb FROM ".MAIN_DB_PREFIX."blockedlog");
+ if($res!==false) {
+ $obj = $this->db->fetch_object($res);
+ return ($obj->nb > 0);
+ }
+
+ return false;
+ }
+
+ /**
+ * Function called when module is disabled.
+ * The remove function removes tabs, constants, boxes, permissions and menus from Dolibarr database.
+ * Data directories are not deleted
+ *
+ * @param string $options Options when enabling module ('', 'noboxes')
+ * @return int 1 if OK, 0 if KO
+ */
+ function remove($options = '') {
+
+ global $user;
+
+ require_once DOL_DOCUMENT_ROOT.'/blockedlog/class/blockedlog.class.php';
+
+ $object=new stdClass;
+ $object->id = 1;
+ $object->element = 'module';
+ $object->ref = 'module';
+ $object->date = time();
+
+ $b=new BlockedLog($this->db);
+ $b->setObjectData($object, 'MODULE_RESET', -1);
+
+ $res = $b->create($user);
+ if($res<=0) {
+ $this->error = $b->error;
+ return $res;
+ }
+
+ return $this->_remove(array(), $options);
+
+ }
}
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index b8673911f7f..fc3caa74657 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -1765,3 +1765,4 @@ ResourceSetup=Configuration du module Resource
UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
DisabledResourceLinkUser=Disabled resource link to user
DisabledResourceLinkContact=Disabled resource link to contact
+ConfirmUnactivation=Confirm module reset
diff --git a/htdocs/langs/en_US/blockedlog.lang b/htdocs/langs/en_US/blockedlog.lang
index 9c4edd35a52..5c4c84eb2ab 100644
--- a/htdocs/langs/en_US/blockedlog.lang
+++ b/htdocs/langs/en_US/blockedlog.lang
@@ -26,4 +26,5 @@ DownloadLogCSV=Download archive logs (CSV)
logDOC_PREVIEW=Preview of a validated document in order to print or download
logDOC_DOWNLOAD=Download of a validated document in order to print or send
DataOfArchivedEvent=Full datas of archived event
-ImpossibleToReloadObject=Object (type %s, id %s) removed
\ No newline at end of file
+ImpossibleToReloadObject=Object (type %s, id %s) removed
+BlockedLogAreRequiredByYourCountryLegislation=Unalterable logs are required by the legislation of your country. Disabling this module may render any future transactions invalid with respect to the law and the use of non-legal software as it can not be validated by a tax audit.
\ No newline at end of file