Merge pull request #7911 from atm-alexis/NEW_blockedlog_reset_warning

NEW warning on module blocked log reset if country code is FR
This commit is contained in:
Laurent Destailleur 2017-12-08 13:47:44 +01:00 committed by GitHub
commit 56b5eab2e4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 204 additions and 9 deletions

View File

@ -69,6 +69,7 @@ if ( ($action == 'update' && ! GETPOST("cancel",'alpha'))
$s=$mysoc->country_id.':'.$mysoc->country_code.':'.$mysoc->country_label;
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_COUNTRY", $s,'chaine',0,'',$conf->entity);
module_require_by_country($mysoc->country_code);
}
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_NOM", GETPOST("nom",'nohtml'),'chaine',0,'',$conf->entity);

View File

@ -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 '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?id='.$objMod->numero.'&amp;module_position='.$module_position.'&amp;action=reset&amp;value=' . $modName . '&amp;mode=' . $mode . $param . '">';
print img_picto($langs->trans("Activated"),'switch_on');
print '</a>';
if(!empty($objMod->warnings_unactivation[$mysoc->country_code]) && method_exists($objMod, 'alreadyUsed') && $objMod->alreadyUsed()) {
print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?id='.$objMod->numero.'&amp;module_position='.$module_position.'&amp;action=reset_confirm&amp;confirm_message_code='.$objMod->warnings_unactivation[$mysoc->country_code].'&amp;value=' . $modName . '&amp;mode=' . $mode . $param . '">';
print img_picto($langs->trans("Activated"),'switch_on');
print '</a>';
}
else {
print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?id='.$objMod->numero.'&amp;module_position='.$module_position.'&amp;action=reset&amp;value=' . $modName . '&amp;mode=' . $mode .'&amp;confirm=yes' . $param . '">';
print img_picto($langs->trans("Activated"),'switch_on');
print '</a>';
}
}
print '</td>'."\n";

View File

@ -41,7 +41,10 @@ $action = GETPOST('action','alpha');
if (preg_match('/set_(.*)/',$action,$reg))
{
$code=$reg[1];
if (dolibarr_set_const($db, $code, GETPOST($code), 'chaine', 0, '', $conf->entity) > 0)
$values = GETPOST($code);
if(is_array($values))$values = implode(',', $values);
if (dolibarr_set_const($db, $code, $values, 'chaine', 0, '', $conf->entity) > 0)
{
header("Location: ".$_SERVER["PHP_SELF"]);
exit;
@ -115,6 +118,35 @@ if (!empty($conf->global->BLOCKEDLOG_USE_REMOTE_AUTHORITY)) {
print '</td></tr>';
}
$var=!$var;
print '<tr '.$bc[$var].'>';
print '<td>'.$langs->trans("BlockedLogDisableNotAllowedForCountry").'</td>';
print '<td align="right" width="300">';
print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="set_BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY">';
$sql = "SELECT rowid, code as code_iso, code_iso as code_iso3, label, favorite";
$sql.= " FROM ".MAIN_DB_PREFIX."c_country";
$sql.= " WHERE active > 0";
$countryArray=array();
$resql=$db->query($sql);
if ($resql)
{
while ($obj = $db->fetch_object($resql))
{
$countryArray[$obj->code_iso] = ($obj->code_iso && $langs->transnoentitiesnoconv("Country".$obj->code_iso)!="Country".$obj->code_iso?$langs->transnoentitiesnoconv("Country".$obj->code_iso):($obj->label!='-'?$obj->label:''));
}
}
$seledted = empty($conf->global->BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY) ? array() : explode(',',$conf->global->BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY);
print $form->multiselectarray('BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY', $countryArray, $seledted);
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print '</form>';
print '</td></tr>';
print '</table>';
dol_fiche_end();

View File

@ -1132,6 +1132,82 @@ function complete_dictionary_with_modules(&$taborder,&$tabname,&$tablib,&$tabsql
return 1;
}
/**
* Activate external modules for country if neccessary
*
* @param string $country_code CountryCode
* @return int 1
*/
function module_require_by_country($country_code)
{
global $db, $conf, $langs;
$modulesdir = dolGetModulesDirs();
foreach ($modulesdir as $dir)
{
// Load modules attributes in arrays (name, numero, orders) from dir directory
dol_syslog("Scan directory ".$dir." for modules");
$handle=@opendir(dol_osencode($dir));
if (is_resource($handle))
{
while (($file = readdir($handle))!==false)
{
if (is_readable($dir.$file) && substr($file, 0, 3) == 'mod' && substr($file, dol_strlen($file) - 10) == '.class.php')
{
$modName = substr($file, 0, dol_strlen($file) - 10);
if ($modName)
{
include_once $dir.$file;
$objMod = new $modName($db);
if ($objMod->numero > 0)
{
$j = $objMod->numero;
}
else
{
$j = 1000 + $i;
}
$modulequalified=1;
// We discard modules according to features level (PS: if module is activated we always show it)
$const_name = 'MAIN_MODULE_'.strtoupper(preg_replace('/^mod/i','',get_class($objMod)));
if ($objMod->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) $modulequalified=0;
if ($objMod->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) $modulequalified=0;
if(!empty($conf->global->$const_name)) $modulequalified=0; // already activated
if ($modulequalified)
{
// Load languages files of module
if (isset($objMod->automatic_activation) && is_array($objMod->automatic_activation) && isset($objMod->automatic_activation[$country_code]))
{
activateModule($modName);
setEventMessage($objMod->automatic_activation[$country_code],'warnings');
}
}
else dol_syslog("Module ".get_class($objMod)." not qualified");
}
}
}
closedir($handle);
}
else
{
dol_syslog("htdocs/admin/modules.php: Failed to open directory ".$dir.". See permission and open_basedir option.", LOG_WARNING);
}
}
return 1;
}
/**
* Add external modules to list of contact element
*

View File

@ -36,7 +36,7 @@ class modBlockedLog extends DolibarrModules
*/
function __construct($db)
{
global $langs,$conf;
global $langs,$conf,$mysoc;
$this->db = $db;
$this->numero = 3200;
@ -69,8 +69,12 @@ 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');
$this->automatic_activation = array('FR'=>'BlockedLogActivatedBecauseRequiredByYourCountryLegislation');
// Constants
//-----------
@ -86,5 +90,55 @@ class modBlockedLog extends DolibarrModules
// Main menu entries
//------------------
$this->menu = array();
$this->always_enabled = !empty($conf->blockedlog->enabled) && !empty($conf->global->BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY) && in_array($mysoc->country_code, explode(',', $conf->global->BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY));
}
/**
* 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);
}
}

View File

@ -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

View File

@ -26,4 +26,7 @@ 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
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.
BlockedLogActivatedBecauseRequiredByYourCountryLegislation=Unalterable logs module was activated because of 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.
BlockedLogDisableNotAllowedForCountry=Disable not allowed for this countries