diff --git a/htdocs/adherents/admin/website.php b/htdocs/adherents/admin/website.php
index c04cfadec20..dd44ce0cece 100644
--- a/htdocs/adherents/admin/website.php
+++ b/htdocs/adherents/admin/website.php
@@ -60,6 +60,8 @@ if ($action == 'update') {
$amount = price2num(GETPOST('MEMBER_NEWFORM_AMOUNT'), 'MT', 2);
$minamount = GETPOST('MEMBER_MIN_AMOUNT');
$publiccounters = GETPOST('MEMBER_COUNTERS_ARE_PUBLIC');
+ $showtable = GETPOST('MEMBER_SHOW_TABLE');;
+ $showvoteallowed = GETPOST('MEMBER_SHOW_VOTE_ALLOWED');
$payonline = GETPOST('MEMBER_NEWFORM_PAYONLINE');
$forcetype = GETPOST('MEMBER_NEWFORM_FORCETYPE', 'int');
$forcemorphy = GETPOST('MEMBER_NEWFORM_FORCEMORPHY', 'aZ09');
@@ -68,6 +70,8 @@ if ($action == 'update') {
$res = dolibarr_set_const($db, "MEMBER_NEWFORM_AMOUNT", $amount, 'chaine', 0, '', $conf->entity);
$res = dolibarr_set_const($db, "MEMBER_MIN_AMOUNT", $minamount, 'chaine', 0, '', $conf->entity);
$res = dolibarr_set_const($db, "MEMBER_COUNTERS_ARE_PUBLIC", $publiccounters, 'chaine', 0, '', $conf->entity);
+ $res = dolibarr_set_const($db, "MEMBER_SKIP_TABLE", !$showtable, 'chaine', 0, '', $conf->entity); // Logic is reversed for retrocompatibility: "skip -> show"
+ $res = dolibarr_set_const($db, "MEMBER_HIDE_VOTE_ALLOWED", !$showvoteallowed, 'chaine', 0, '', $conf->entity); // Logic is reversed for retrocompatibility: "hide -> show"
$res = dolibarr_set_const($db, "MEMBER_NEWFORM_PAYONLINE", $payonline, 'chaine', 0, '', $conf->entity);
if ($forcetype < 0) {
$res = dolibarr_del_const($db, "MEMBER_NEWFORM_FORCETYPE", $conf->entity);
@@ -246,6 +250,22 @@ if (!empty($conf->global->MEMBER_ENABLE_PUBLIC)) {
print $form->selectyesno("MEMBER_COUNTERS_ARE_PUBLIC", (!empty($conf->global->MEMBER_COUNTERS_ARE_PUBLIC) ? $conf->global->MEMBER_COUNTERS_ARE_PUBLIC : 0), 1);
print "\n";
+ // Show the table of all available membership types. If not, show a form (as the default was for Dolibarr <=16.0)
+ $skiptable = (!empty($conf->global->MEMBER_SKIP_TABLE) ? $conf->global->MEMBER_SKIP_TABLE : 0);
+ print '
';
print $langs->trans("MEMBER_NEWFORM_PAYONLINE");
diff --git a/htdocs/api/class/api_documents.class.php b/htdocs/api/class/api_documents.class.php
index 78442622c7e..d7fd1ea7118 100644
--- a/htdocs/api/class/api_documents.class.php
+++ b/htdocs/api/class/api_documents.class.php
@@ -607,6 +607,7 @@ class Documents extends DolibarrApi
if ($ref) {
$tmpreldir = '';
+ $fetchbyid = false;
if ($modulepart == 'facture' || $modulepart == 'invoice') {
$modulepart = 'facture';
@@ -666,13 +667,22 @@ class Documents extends DolibarrApi
$modulepart = 'propale';
require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php';
$object = new Propal($this->db);
+ } elseif ($modulepart == 'contact' || $modulepart == 'socpeople') {
+ $modulepart = 'contact';
+ require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
+ $object = new Contact($this->db);
+ $fetchbyid = true;
} else {
// TODO Implement additional moduleparts
throw new RestException(500, 'Modulepart '.$modulepart.' not implemented yet.');
}
if (is_object($object)) {
- $result = $object->fetch('', $ref);
+ if ($fetchbyid) {
+ $result = $object->fetch($ref);
+ } else {
+ $result = $object->fetch('', $ref);
+ }
if ($result == 0) {
throw new RestException(404, "Object with ref '".$ref."' was not found.");
diff --git a/htdocs/compta/prelevement/create.php b/htdocs/compta/prelevement/create.php
index 598b86fcda3..85f0be90125 100644
--- a/htdocs/compta/prelevement/create.php
+++ b/htdocs/compta/prelevement/create.php
@@ -4,7 +4,7 @@
* Copyright (C) 2005-2009 Regis Houssin
* Copyright (C) 2010-2012 Juanjo Menent
* Copyright (C) 2018 Nicolas ZABOURI
- * Copyright (C) 2018 Frédéric France
+ * Copyright (C) 2018-2023 Frédéric France
* Copyright (C) 2019 Markus Welters
*
* This program is free software; you can redistribute it and/or modify
@@ -126,8 +126,8 @@ if (empty($reshook)) {
$bprev = new BonPrelevement($db);
if (!$error) {
- // $conf->global->PRELEVEMENT_CODE_BANQUE and $conf->global->PRELEVEMENT_CODE_GUICHET should be empty (we don't use them anymore)
- $result = $bprev->create($conf->global->PRELEVEMENT_CODE_BANQUE, $conf->global->PRELEVEMENT_CODE_GUICHET, $mode, $format, $executiondate, 0, $type);
+ // getDolGlobalString('PRELEVEMENT_CODE_BANQUE') and getDolGlobalString('PRELEVEMENT_CODE_GUICHET') should be empty (we don't use them anymore)
+ $result = $bprev->create(getDolGlobalString('PRELEVEMENT_CODE_BANQUE'), getDolGlobalString('PRELEVEMENT_CODE_GUICHET'), $mode, $format, $executiondate, 0, $type);
if ($result < 0) {
setEventMessages($bprev->error, $bprev->errors, 'errors');
} elseif ($result == 0) {
diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php
index 3bbb40737e0..fd6e9aa6efb 100644
--- a/htdocs/core/class/extrafields.class.php
+++ b/htdocs/core/class/extrafields.class.php
@@ -726,6 +726,8 @@ class ExtraFields
if (is_array($param) && count($param) > 0) {
$params = serialize($param);
+ } elseif (is_array($param)) {
+ $params = '';
} elseif (strlen($param) > 0) {
$params = trim($param);
} else {
diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php
index f04914ad85b..215e729a278 100644
--- a/htdocs/core/class/html.formfile.class.php
+++ b/htdocs/core/class/html.formfile.class.php
@@ -1445,7 +1445,25 @@ class FormFile
if (in_array($modulepart, array('product', 'produit', 'service'))) {
$newmodulepart = 'produit|service';
}
-
+ if (image_format_supported($file['name']) > 0) {
+ if ($permtoeditline) {
+ $moreparaminurl = '';
+ if (!empty($object->id) && $object->id > 0) {
+ $moreparaminurl .= '&id='.$object->id;
+ } elseif (GETPOST('website', 'alpha')) {
+ $moreparaminurl .= '&website='.GETPOST('website', 'alpha');
+ }
+ // Set the backtourl
+ if ($modulepart == 'medias' && !GETPOST('website')) {
+ $moreparaminurl .= '&backtourl='.urlencode(DOL_URL_ROOT.'/ecm/index_medias.php?file_manager=1&modulepart='.$modulepart.'§ion_dir='.$relativepath);
+ }
+ if ($modulepart == 'medias' && !GETPOST('website')) {
+ print ''.img_picto('', 'images', 'class="flip marginrightonly"').'';
+ } elseif ($modulepart == 'medias' && GETPOST('website')) {
+ print ''.img_picto('', 'images', 'class="flip marginrightonly"').'';
+ }
+ }
+ }
if (!$disablecrop && image_format_supported($file['name']) > 0) {
if ($permtoeditline) {
// Link to resize
diff --git a/htdocs/core/lib/modulebuilder.lib.php b/htdocs/core/lib/modulebuilder.lib.php
index a60e9a3a78a..5f8b34442db 100644
--- a/htdocs/core/lib/modulebuilder.lib.php
+++ b/htdocs/core/lib/modulebuilder.lib.php
@@ -416,3 +416,85 @@ function rebuildObjectSql($destdir, $module, $objectname, $newmask, $readdir = '
return $error ? -1 : 1;
}
+
+/**
+ * delete all permissions
+ * @param string $file file with path
+ * @return void
+ */
+function deletePerms($file)
+{
+ $start = "/* BEGIN MODULEBUILDER PERMISSIONS */";
+ $end = "/* END MODULEBUILDER PERMISSIONS */";
+ $i = 1;
+ $array = array();
+ $lines = file($file);
+ // Search for start and end lines
+ foreach ($lines as $i => $line) {
+ if (strpos($line, $start) !== false) {
+ $start_line = $i + 1;
+
+ // Copy lines until the end on array
+ while (($line = $lines[++$i]) !== false) {
+ if (strpos($line, $end) !== false) {
+ $end_line = $i + 1;
+ break;
+ }
+ $array[] = $line;
+ }
+ break;
+ }
+ }
+ $allContent = implode("", $array);
+ dolReplaceInFile($file, array($allContent => ''));
+}
+
+/**
+ * Rewriting all permissions after any actions
+ * @param string $file filename or path
+ * @param array $permissions permissions existing in file
+ * @param int|null $key key for permission needed
+ * @param array|null $right $right to update or add
+ * @param int $action 0 for delete, 1 for add, 2 for update
+ * @return int 1 if OK,-1 if KO
+ */
+function reWriteAllPermissions($file, $permissions, $key, $right, $action)
+{
+ $error = 0;
+ $rights = array();
+ if ($action == 0) {
+ // delete right from permissions array
+ array_splice($permissions, array_search($permissions[$key], $permissions), 1);
+ } elseif ($action == 1) {
+ array_push($permissions, $right);
+ } elseif ($action == 2 && !empty($right)) {
+ // update right from permissions array
+ array_splice($permissions, array_search($permissions[$key], $permissions), 1, $right);
+ } else {
+ $error++;
+ }
+ if (!$error) {
+ // prepare permissions array
+ $count_perms = count($permissions);
+ for ($i = 0;$i<$count_perms;$i++) {
+ $permissions[$i][0] = "\$this->rights[\$r][0] = \$this->numero . sprintf('%02d', \$r + 1)";
+ $permissions[$i][1] = "\$this->rights[\$r][1] = '".$permissions[$i][1]."'";
+ $permissions[$i][4] = "\$this->rights[\$r][4] = '".$permissions[$i][4]."'";
+ $permissions[$i][5] = "\$this->rights[\$r][5] = '".$permissions[$i][5]."';\n\t\t";
+ }
+
+ //convert to string
+ foreach ($permissions as $perms) {
+ $rights[] = implode(";\n\t\t", $perms);
+ $rights[] = "\$r++;\n\t\t";
+ }
+ $rights_str = implode("", $rights);
+ // delete all permission from file
+ deletePerms($file);
+ // rewrite all permission again
+ dolReplaceInFile($file, array('/* BEGIN MODULEBUILDER PERMISSIONS */' => '/* BEGIN MODULEBUILDER PERMISSIONS */'."\n\t\t".$rights_str));
+ return 1;
+ } else {
+ return -1;
+ }
+}
diff --git a/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php b/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php
index 340530d8504..2f0c11d0649 100644
--- a/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php
+++ b/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php
@@ -4,7 +4,7 @@
* Copyright (C) 2014 Marcos García
* Copyright (C) 2016 Charlie Benke
* Copyright (C) 2018-2021 Philippe Grand
- * Copyright (C) 2018 Frédéric France
+ * Copyright (C) 2018-2023 Frédéric France
*
* 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
@@ -342,10 +342,10 @@ class doc_generic_mo_odt extends ModelePDFMo
$odfHandler = new odf(
$srctemplatepath,
array(
- 'PATH_TO_TMP' => $conf->mrp->dir_temp,
- 'ZIP_PROXY' => 'PclZipProxy', // PhpZipProxy or PclZipProxy. Got "bad compression method" error when using PhpZipProxy.
- 'DELIMITER_LEFT' => '{',
- 'DELIMITER_RIGHT' => '}'
+ 'PATH_TO_TMP' => $conf->mrp->dir_temp,
+ 'ZIP_PROXY' => 'PclZipProxy', // PhpZipProxy or PclZipProxy. Got "bad compression method" error when using PhpZipProxy.
+ 'DELIMITER_LEFT' => '{',
+ 'DELIMITER_RIGHT' => '}'
)
);
} catch (Exception $e) {
@@ -359,8 +359,6 @@ class doc_generic_mo_odt extends ModelePDFMo
// [!-- BEGIN lines --]*[!-- END lines --]
//print html_entity_decode($odfHandler->__toString());
//print exit;
- /*
-
// Make substitutions into odt of freetext
try {
@@ -461,7 +459,7 @@ class doc_generic_mo_odt extends ModelePDFMo
$parameters = array('odfHandler'=>&$odfHandler, 'file'=>$file, 'object'=>$object, 'outputlangs'=>$outputlangs, 'substitutionarray'=>&$tmparray);
$reshook = $hookmanager->executeHooks('beforeODTSave', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
- */
+
// Write new file
if (!empty($conf->global->MAIN_ODT_AS_PDF)) {
try {
diff --git a/htdocs/core/tpl/filemanager.tpl.php b/htdocs/core/tpl/filemanager.tpl.php
index b3edcb7984f..da73f5cd4b6 100644
--- a/htdocs/core/tpl/filemanager.tpl.php
+++ b/htdocs/core/tpl/filemanager.tpl.php
@@ -197,18 +197,22 @@ if ($action == 'confirmconvertimgwebp') {
$section_dir=GETPOST('section_dir', 'alpha');
$section=GETPOST('section', 'alpha');
+ $file=GETPOST('filetoregenerate', 'alpha');
$form = new Form($db);
$formquestion['section_dir']=array('type'=>'hidden', 'value'=>$section_dir, 'name'=>'section_dir');
$formquestion['section']=array('type'=>'hidden', 'value'=>$section, 'name'=>'section');
+ $formquestion['filetoregenerate']=array('type'=>'hidden', 'value'=>$file, 'name'=>'filetoregenerate');
if ($module == 'medias') {
$formquestion['website']=array('type'=>'hidden', 'value'=>$website->ref, 'name'=>'website');
}
- print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans('ConfirmImgWebpCreation'), $langs->trans('ConfirmGenerateImgWebp', $object->ref), 'convertimgwebp', $formquestion, "yes", 1);
+ print $form->formconfirm($_SERVER["PHP_SELF"], empty($file) ? $langs->trans('ConfirmImgWebpCreation') : $langs->trans('ConfirmChosenImgWebpCreation'), empty($file) ? $langs->trans('ConfirmGenerateImgWebp') : $langs->trans('ConfirmGenerateChosenImgWebp'), 'convertimgwebp', $formquestion, "yes", 1);
$action = 'file_manager';
}
// Duplicate images into .webp
if ($action == 'convertimgwebp' && $permtoadd) {
+ $file = GETPOST('filetoregenerate', 'alpha');
+
if ($module == 'medias') {
$imagefolder = $conf->website->dir_output.'/'.$websitekey.'/medias/'.dol_sanitizePathName(GETPOST('section_dir', 'alpha'));
} else {
@@ -217,9 +221,14 @@ if ($action == 'convertimgwebp' && $permtoadd) {
include_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php';
- $regeximgext = getListOfPossibleImageExt();
+ if (!empty($file)) {
+ $filelist = array();
+ $filelist[]["fullname"] = dol_osencode($imagefolder.'/'.$file); // get $imagefolder.'/'.$file infos
+ } else {
+ $regeximgext = getListOfPossibleImageExt();
- $filelist = dol_dir_list($imagefolder, "files", 0, $regeximgext);
+ $filelist = dol_dir_list($imagefolder, "files", 0, $regeximgext);
+ }
$nbconverted = 0;
@@ -245,7 +254,11 @@ if ($action == 'convertimgwebp' && $permtoadd) {
}
}
if (!$error) {
- setEventMessages($langs->trans('SucessConvertImgWebp'), null);
+ if (!empty($file)) {
+ setEventMessages($langs->trans('SucessConvertChosenImgWebp'), null);
+ } else {
+ setEventMessages($langs->trans('SucessConvertImgWebp'), null);
+ }
}
$action = 'file_manager';
}
diff --git a/htdocs/langs/en_US/ecm.lang b/htdocs/langs/en_US/ecm.lang
index 724e5aa59d7..2e88812681d 100644
--- a/htdocs/langs/en_US/ecm.lang
+++ b/htdocs/langs/en_US/ecm.lang
@@ -47,6 +47,10 @@ ECMSetup=ECM Setup
GenerateImgWebp=Duplicate all images with another version with .webp format
ConfirmGenerateImgWebp=If you confirm, you will generate an image in .webp format for all images currently into this folder (subfolders are not included)...
ConfirmImgWebpCreation=Confirm all images duplication
+GenerateChosenImgWebp=Duplicate chosen image with another version with .webp format
+ConfirmGenerateChosenImgWebp=If you confirm, you will generate an image in .webp format for chosen image
+ConfirmChosenImgWebpCreation=Confirm chosen images duplication
SucessConvertImgWebp=Images successfully duplicated
+SucessConvertChosenImgWebp=Chosen image successfully duplicated
ECMDirName=Dir name
ECMParentDirectory=Parent directory
diff --git a/htdocs/langs/en_US/members.lang b/htdocs/langs/en_US/members.lang
index 1d6704b2858..87402b77050 100644
--- a/htdocs/langs/en_US/members.lang
+++ b/htdocs/langs/en_US/members.lang
@@ -27,6 +27,8 @@ MembersListNotUpToDate=List of valid members with out-of-date contribution
MembersListExcluded=List of excluded members
MembersListResiliated=List of terminated members
MembersListQualified=List of qualified members
+MembersShowMembershipTypesTable=Show a table of all available membership types (if no, show directly the registration form)
+MembersShowVotesAllowed=Show whether votes are allowed, in the table of membership types
MenuMembersToValidate=Draft members
MenuMembersValidated=Validated members
MenuMembersExcluded=Excluded members
diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php
index 04d0f290732..0ede69fae56 100644
--- a/htdocs/modulebuilder/index.php
+++ b/htdocs/modulebuilder/index.php
@@ -2146,6 +2146,7 @@ if ($dirins && $action == 'addright' && !empty($module) && empty($cancel)) {
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Rights")), null, 'errors');
}
+ $id = GETPOST('id', 'alpha');
$label = GETPOST('label', 'alpha');
$objectForPerms = strtolower(GETPOST('permissionObj', 'alpha'));
$crud = GETPOST('crud', 'alpha');
@@ -2168,8 +2169,6 @@ if ($dirins && $action == 'addright' && !empty($module) && empty($cancel)) {
$counter = 0;
$permsForObject =array();
$permissions = $moduleobj->rights;
- $firstRight = 0;
- $existRight = 0;
$allObject = array();
$countPerms = count($permissions);
@@ -2188,53 +2187,34 @@ if ($dirins && $action == 'addright' && !empty($module) && empty($cancel)) {
$countPermsObj = count($permsForObject);
for ($j = 0; $j<$countPermsObj; $j++) {
if (in_array($label, $permsForObject[$j])) {
- $existRight++;
+ $error++;
setEventMessages($langs->trans("ErrorExistingPermission", $langs->transnoentities($label), $langs->transnoentities($objectForPerms)), null, 'errors');
}
}
- // if not found permission for the object
- if (!in_array($objectForPerms, array_unique($allObject))) {
- $firstRight++;
- $existRight++;
- }
+
if (!$error) {
+ $key = $countPerms + 1;
+ //prepare right to add
+ $rightToAdd = [
+ 0=> $id,
+ 1=>$label,
+ 4=>$objectForPerms,
+ 5=>$crud
+ ];
+
+ $moduledescriptorfile = $dirins.'/'.strtolower($module).'/core/modules/mod'.$module.'.class.php';
+ //rewriting all permissions after add a right
+ reWriteAllPermissions($moduledescriptorfile, $permissions, $key, $rightToAdd, 1);
+ setEventMessages($langs->trans('PermissionAddedSuccesfuly'), null);
+
if (isModEnabled(strtolower($module))) {
$result = unActivateModule(strtolower($module));
dolibarr_set_const($db, "MAIN_IHM_PARAMS_REV", (int) $conf->global->MAIN_IHM_PARAMS_REV + 1, 'chaine', 0, '', $conf->entity);
if ($result) {
setEventMessages($result, null, 'errors');
}
- header("Location: ".DOL_URL_ROOT.'/modulebuilder/index.php?tab=permissions&module='.$module);
setEventMessages($langs->trans('WarningModuleNeedRefrech', $langs->transnoentities($module)), null, 'warnings');
}
- //prepare stirng to add
- $rightToAdd = "
- \$this->rights[\$r][0] = \$this->numero . sprintf('%02d', \$r + 1);
- \$this->rights[\$r][1] = '$label';
- \$this->rights[\$r][4] = '$objectForPerms';
- \$this->rights[\$r][5] = '$crud';
- \$r++;
- ";
- $moduledescriptorfile = $dirins.'/'.strtolower($module).'/core/modules/mod'.$module.'.class.php';
-
- //var_dump($existRight.' '.$firstRight);exit;
- if (!$existRight) {
- dolReplaceInFile($moduledescriptorfile, array('/*END '.strtoupper($objectForPerms).'*/' => $rightToAdd.'/*END '.strtoupper($objectForPerms).'*/'));
- setEventMessages($langs->trans('PermissionAddedSuccesfuly'), null);
- }
- if ($firstRight > 0) {
- $filecontentbefore = file_get_contents($moduledescriptorfile);
-
- $result = dolReplaceInFile($moduledescriptorfile, array('/* END MODULEBUILDER PERMISSIONS */' => '/*'.strtoupper($objectForPerms).'*/'.$rightToAdd."/*END ".strtoupper($objectForPerms).'*/'."\n\t\t".'/* END MODULEBUILDER PERMISSIONS */'));
-
- $filecontentafter = file_get_contents($moduledescriptorfile);
-
- if ($filecontentbefore != $filecontentafter) {
- setEventMessages($langs->trans('PermissionAddedSuccesfuly'), null);
- } else {
- setEventMessages($langs->trans('FailedToAddCodeIntoDescriptor', 'END MODULEBUILDER PERMISSIONS'), null, 'warnings');
- }
- }
}
clearstatcache(true);
@@ -2291,11 +2271,11 @@ if ($dirins && GETPOST('action') == 'update_right' && GETPOST('modifyright')&& e
}
$permissions = $moduleobj->rights;
- $r =(int) GETPOST('counter');
+ $key =(int) GETPOST('counter')-1;
//get permission want to delete from permissions array
- $x1 = $permissions[$r-1][1];
- $x2 = $permissions[$r-1][4];
- $x3 = $permissions[$r-1][5];
+ $x1 = $permissions[$key][1];
+ $x2 = $permissions[$key][4];
+ $x3 = $permissions[$key][5];
//check existing object permission
$counter = 0;
$permsForObject =array();
@@ -2325,24 +2305,6 @@ if ($dirins && GETPOST('action') == 'update_right' && GETPOST('modifyright')&& e
}
}
- // TODO ALI Update of permission must be done by rewriting completely the permission section
- //prepare right want to delete
- $right = "
- \$this->rights[\$r][0] = \$this->numero . sprintf('%02d', \$r + 1);
- \$this->rights[\$r][1] = '$x1';
- \$this->rights[\$r][4] = '$x2';
- \$this->rights[\$r][5] = '$x3';
- \$r++;
- ";
- // right after editing
- $rightUpdated = "
- \$this->rights[\$r][0] = \$this->numero . sprintf('%02d', \$r + 1);
- \$this->rights[\$r][1] = '$label';
- \$this->rights[\$r][4] = '$objectForPerms';
- \$this->rights[\$r][5] = '$crud';
- \$r++;
- ";
-
if (!$error) {
if (isModEnabled(strtolower($module))) {
$result = unActivateModule(strtolower($module));
@@ -2350,12 +2312,12 @@ if ($dirins && GETPOST('action') == 'update_right' && GETPOST('modifyright')&& e
if ($result) {
setEventMessages($result, null, 'errors');
}
- header("Location: ".DOL_URL_ROOT.'/modulebuilder/index.php?tab=permissions&module='.$module);
setEventMessages($langs->trans('WarningModuleNeedRefrech', $langs->transnoentities($module)), null, 'warnings');
}
$moduledescriptorfile = $dirins.'/'.strtolower($module).'/core/modules/mod'.$module.'.class.php';
- $check = dolReplaceInFile($moduledescriptorfile, array($right => $rightUpdated));
+ // rewriting all permissions after update permission needed
+ reWriteAllPermissions($moduledescriptorfile, $permissions, $key, $rightUpdated, 2);
setEventMessages($langs->trans('PermissionUpdatedSuccesfuly'), null);
@@ -2386,36 +2348,13 @@ if ($dirins && $action == 'confirm_deleteright' && !empty($module) && GETPOST('p
$permissions = $moduleobj->rights;
$key = (int) GETPOST('permskey', 'int')-1;
- //get permission want to delete from permissions array
- $x1 = $permissions[$key][1];
- $x2 = $permissions[$key][4];
- $x3 = $permissions[$key][5];
- //prepare right want to delete
- $rightTodelete = "
- \$this->rights[\$r][0] = \$this->numero . sprintf('%02d', \$r + 1);
- \$this->rights[\$r][1] = '$x1';
- \$this->rights[\$r][4] = '$x2';
- \$this->rights[\$r][5] = '$x3';
- \$r++;
- ";
- $moduledescriptorfile = $dirins.'/'.strtolower($module).'/core/modules/mod'.$module.'.class.php';
-
- // TODO ALI The delete must be done by rewriting all content between /* BEGIN MODULEBUILDER PERMISSIONS */ and /* END MODULEBUILDER PERMISSIONS */
- $check = dolReplaceInFile($moduledescriptorfile, array($rightTodelete => "\n\t\t"));
-
- if ($check > 0) {
- //check if all permissions of object was deleted
- $permsForObj = array();
- foreach ($permissions as $perms) {
- $permsForObj[] = $perms[4];
- }
- $permsForObj = array_count_values($permsForObj);
- if ($permsForObj[$permissions[$key][4]] == 1) {
- $delObjStart = dolReplaceInFile($moduledescriptorfile, array('/*'.strtoupper($permissions[$key][4].'*/') => '','/*END '.strtoupper($permissions[$key][4].'*/') => ''));
- }
- }
if (!$error) {
+ $moduledescriptorfile = $dirins.'/'.strtolower($module).'/core/modules/mod'.$module.'.class.php';
+
+ // rewriting all permissions
+ reWriteAllPermissions($moduledescriptorfile, $permissions, $key, '', 0);
+
// check if module is enabled
if (isModEnabled(strtolower($module))) {
$result = unActivateModule(strtolower($module));
diff --git a/htdocs/product/stock/movement_list.php b/htdocs/product/stock/movement_list.php
index 4da0c259bc9..422b1317672 100644
--- a/htdocs/product/stock/movement_list.php
+++ b/htdocs/product/stock/movement_list.php
@@ -630,6 +630,12 @@ if (!empty($extrafields->attributes[$object->table_element]['label']) && is_arra
}
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u ON m.fk_user_author = u.rowid";
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product_lot as pl ON m.batch = pl.batch AND m.fk_product = pl.fk_product";
+
+// Add table from hooks
+$parameters = array();
+$reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
+$sql .= $hookmanager->resPrint;
+
$sql .= " WHERE m.fk_product = p.rowid";
if ($msid > 0) {
$sql .= " AND m.rowid = ".((int) $msid);
diff --git a/htdocs/public/members/new.php b/htdocs/public/members/new.php
index 2655af04012..ed46b8f1dae 100644
--- a/htdocs/public/members/new.php
+++ b/htdocs/public/members/new.php
@@ -836,6 +836,7 @@ if (!empty($conf->global->MEMBER_SKIP_TABLE) || !empty($conf->global->MEMBER_NEW
$units[$lines->short_label] = $langs->trans(ucfirst($lines->label));
$publiccounters = getDolGlobalString("MEMBER_COUNTERS_ARE_PUBLIC");
+ $hidevoteallowed = getDolGlobalString("MEMBER_HIDE_VOTE_ALLOWED");
$sql = "SELECT d.rowid, d.libelle as label, d.subscription, d.amount, d.caneditamount, d.vote, d.note, d.duration, d.statut as status, d.morphy,";
$sql .= " COUNT(a.rowid) AS membercount";
@@ -859,7 +860,7 @@ if (!empty($conf->global->MEMBER_SKIP_TABLE) || !empty($conf->global->MEMBER_NEW
print '| '.$langs->trans("MembershipDuration").' | ';
print ''.$langs->trans("Amount").' | ';
print ''.$langs->trans("MembersNature").' | ';
- print ''.$langs->trans("VoteAllowed").' | ';
+ if (empty($hidevoteallowed)) print ''.$langs->trans("VoteAllowed").' | ';
if ($publiccounters) print ''.$langs->trans("Members").' | ';
print ''.$langs->trans("NewSubscription").' | ';
print " |
\n";
@@ -899,7 +900,7 @@ if (!empty($conf->global->MEMBER_SKIP_TABLE) || !empty($conf->global->MEMBER_NEW
print $langs->trans("MorAndPhy");
}
print '';
- print '