diff --git a/htdocs/core/modules/DolibarrModules.class.php b/htdocs/core/modules/DolibarrModules.class.php
index 9ecb73234de..1ed58b2905a 100644
--- a/htdocs/core/modules/DolibarrModules.class.php
+++ b/htdocs/core/modules/DolibarrModules.class.php
@@ -1049,15 +1049,19 @@ class DolibarrModules // Can not be abstract, because we need to instantiate it
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps,PEAR.NamingConventions.ValidFunctionName.PublicUnderscore
/**
- * Create tables and keys required by module.
- * Files module.sql and module.key.sql with create table and create keys
- * commands must be stored in directory reldir='/module/sql/'
- * This function is called by this->init
+ * Create tables and keys required by module:
+ * - Files module.sql files with create table instructions
+ * - Then files modules.key.sql with create keys instructions
+ * - Then data_xxx.sql (usualy provided by external modules only)
+ * - Then update_xxx.sql (usualy provided by external modules only)
+ * Files must be stored in directory defined by reldir (Example: '/install/mysql/tables' or '/module/sql/')
+ * This function is usually called by the this->init of module descriptors.
*
- * @param string $reldir Relative directory where to scan files
- * @return int <=0 if KO, >0 if OK
+ * @param string $reldir Relative directory where to scan files. Example: '/install/mysql/tables' or '/module/sql/'
+ * @param string $onlywithsuffix Only with the defined suffix
+ * @return int <=0 if KO, >0 if OK
*/
- protected function _load_tables($reldir)
+ protected function _load_tables($reldir, $onlywithsuffix = '')
{
// phpcs:enable
global $conf;
@@ -1088,6 +1092,14 @@ class DolibarrModules // Can not be abstract, because we need to instantiate it
}
sort($files);
foreach ($files as $file) {
+ if ($onlywithsuffix) {
+ if (!preg_match('/\-'.preg_quote($onlywithsuffix, '/').'\./i', $file)) {
+ //print 'File '.$file.' does not match suffix '.$onlywithsuffix.' so it is discarded
'."\n";
+ continue;
+ } else {
+ //print 'File '.$file.' match suffix '.$onlywithsuffix.' so we keep it
'."\n";
+ }
+ }
if (preg_match('/\.sql$/i', $file) && !preg_match('/\.key\.sql$/i', $file) && substr($file, 0, 4) == 'llx_' && substr($file, 0, 4) != 'data') {
$result = run_sql($dir.$file, empty($conf->global->MAIN_DISPLAY_SQL_INSTALL_LOG) ? 1 : 0, '', 1);
if ($result <= 0) {
@@ -1105,6 +1117,14 @@ class DolibarrModules // Can not be abstract, because we need to instantiate it
}
sort($files);
foreach ($files as $file) {
+ if ($onlywithsuffix) {
+ if (!preg_match('/\-'.preg_quote($onlywithsuffix, '/').'\./i', $file)) {
+ //print 'File '.$file.' does not match suffix '.$onlywithsuffix.' so it is discarded
'."\n";
+ continue;
+ } else {
+ //print 'File '.$file.' match suffix '.$onlywithsuffix.' so we keep it
'."\n";
+ }
+ }
if (preg_match('/\.key\.sql$/i', $file) && substr($file, 0, 4) == 'llx_' && substr($file, 0, 4) != 'data') {
$result = run_sql($dir.$file, empty($conf->global->MAIN_DISPLAY_SQL_INSTALL_LOG) ? 1 : 0, '', 1);
if ($result <= 0) {
@@ -1122,6 +1142,14 @@ class DolibarrModules // Can not be abstract, because we need to instantiate it
}
sort($files);
foreach ($files as $file) {
+ if ($onlywithsuffix) {
+ if (!preg_match('/\-'.preg_quote($onlywithsuffix, '/').'\./i', $file)) {
+ //print 'File '.$file.' does not match suffix '.$onlywithsuffix.' so it is discarded
'."\n";
+ continue;
+ } else {
+ //print 'File '.$file.' match suffix '.$onlywithsuffix.' so we keep it
'."\n";
+ }
+ }
if (preg_match('/\.sql$/i', $file) && !preg_match('/\.key\.sql$/i', $file) && substr($file, 0, 4) == 'data') {
$result = run_sql($dir.$file, empty($conf->global->MAIN_DISPLAY_SQL_INSTALL_LOG) ? 1 : 0, '', 1);
if ($result <= 0) {
@@ -1139,6 +1167,14 @@ class DolibarrModules // Can not be abstract, because we need to instantiate it
}
sort($files);
foreach ($files as $file) {
+ if ($onlywithsuffix) {
+ if (!preg_match('/\-'.preg_quote($onlywithsuffix, '/').'\./i', $file)) {
+ //print 'File '.$file.' does not match suffix '.$onlywithsuffix.' so it is discarded
'."\n";
+ continue;
+ } else {
+ //print 'File '.$file.' match suffix '.$onlywithsuffix.' so we keep it
'."\n";
+ }
+ }
if (preg_match('/\.sql$/i', $file) && !preg_match('/\.key\.sql$/i', $file) && substr($file, 0, 6) == 'update') {
$result = run_sql($dir.$file, empty($conf->global->MAIN_DISPLAY_SQL_INSTALL_LOG) ? 1 : 0, '', 1);
if ($result <= 0) {
diff --git a/htdocs/core/modules/modHRM.class.php b/htdocs/core/modules/modHRM.class.php
index 8feb6bd7ac0..a72479115c5 100644
--- a/htdocs/core/modules/modHRM.class.php
+++ b/htdocs/core/modules/modHRM.class.php
@@ -56,7 +56,7 @@ class modHRM extends DolibarrModules
// Module description, used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module)
$this->description = "HRM";
// Possible values for version are: 'development', 'experimental', 'dolibarr' or version
- $this->version = 'development';
+ $this->version = 'experimental';
// Key used in llx_const table to save module status enabled/disabled (where MYMODULE is value of property name of module in uppercase)
$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
// Name of image file used for this module.
@@ -268,10 +268,10 @@ class modHRM extends DolibarrModules
// Permissions
$this->remove($options);
- /*$result = $this->_load_tables('/hrm/sql/');
+ $result = $this->_load_tables('/install/mysql/tables/', 'hrm');
if ($result < 0) {
return -1; // Do not activate module if error 'not allowed' returned when loading module SQL queries (the _load_table run sql with run_sql with the error allowed parameter set to 'default')
- }*/
+ }
$sql = array();
diff --git a/htdocs/install/mysql/tables/llx_hrm_evaluationdet-hrm.key.sql b/htdocs/install/mysql/tables/llx_hrm_evaluationdet-hrm.key.sql
index 05309ce57e2..5a3bbc844c2 100644
--- a/htdocs/install/mysql/tables/llx_hrm_evaluationdet-hrm.key.sql
+++ b/htdocs/install/mysql/tables/llx_hrm_evaluationdet-hrm.key.sql
@@ -25,5 +25,5 @@ ALTER TABLE llx_hrm_evaluationdet ADD INDEX idx_hrm_evaluationdet_fk_evaluation
--ALTER TABLE llx_hrm_evaluationdet ADD UNIQUE INDEX uk_hrm_evaluationdet_fieldxy(fieldx, fieldy);
---ALTER TABLE llx_hrm_evaluationdet ADD CONSTRAINT llx_hrm_evaluationdet_fk_field FOREIGN KEY (fk_field) REFERENCES llx_hrm_myotherobject(rowid);
+ALTER TABLE llx_hrm_evaluationdet ADD CONSTRAINT llx_hrm_evaluationdet_fk_evaluation FOREIGN KEY (fk_evaluation) REFERENCES llx_hrm_evaluation(rowid);
diff --git a/htdocs/install/mysql/tables/llx_hrm_skilldet-hrm.key.sql b/htdocs/install/mysql/tables/llx_hrm_skilldet-hrm.key.sql
index 289276e07b5..00dd26e6817 100644
--- a/htdocs/install/mysql/tables/llx_hrm_skilldet-hrm.key.sql
+++ b/htdocs/install/mysql/tables/llx_hrm_skilldet-hrm.key.sql
@@ -23,5 +23,5 @@ ALTER TABLE llx_hrm_skilldet ADD CONSTRAINT llx_hrm_skilldet_fk_user_creat FOREI
--ALTER TABLE llx_hrm_skilldet ADD UNIQUE INDEX uk_hrm_skilldet_fieldxy(fieldx, fieldy);
---ALTER TABLE llx_hrm_skilldet ADD CONSTRAINT llx_hrm_skilldet_fk_field FOREIGN KEY (fk_field) REFERENCES llx_hrm_myotherobject(rowid);
+ALTER TABLE llx_hrm_skilldet ADD CONSTRAINT llx_hrm_skilldet_fk_skill FOREIGN KEY (fk_skill) REFERENCES llx_hrm_skill(rowid);
diff --git a/htdocs/install/mysql/tables/llx_hrm_skillrank-hrm.key.sql b/htdocs/install/mysql/tables/llx_hrm_skillrank-hrm.key.sql
index 11d89b0187c..c8cc19641b2 100644
--- a/htdocs/install/mysql/tables/llx_hrm_skillrank-hrm.key.sql
+++ b/htdocs/install/mysql/tables/llx_hrm_skillrank-hrm.key.sql
@@ -23,5 +23,5 @@ ALTER TABLE llx_hrm_skillrank ADD CONSTRAINT llx_hrm_skillrank_fk_user_creat FOR
--ALTER TABLE llx_hrm_skillrank ADD UNIQUE INDEX uk_hrm_skillrank_fieldxy(fieldx, fieldy);
---ALTER TABLE llx_hrm_skillrank ADD CONSTRAINT llx_hrm_skillrank_fk_field FOREIGN KEY (fk_field) REFERENCES llx_hrm_myotherobject(rowid);
+ALTER TABLE llx_hrm_skillrank ADD CONSTRAINT llx_hrm_skillrank_fk_skill FOREIGN KEY (fk_skill) REFERENCES llx_hrm_skill(rowid);