diff --git a/htdocs/admin/ecm.php b/htdocs/admin/ecm.php
index 76bf86993e2..91236c33bd7 100644
--- a/htdocs/admin/ecm.php
+++ b/htdocs/admin/ecm.php
@@ -23,6 +23,7 @@
*/
require '../main.inc.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/ecm.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
// Load translation files required by the page
@@ -70,6 +71,10 @@ $linkback = '';
+$head = ecm_admin_prepare_head();
+
+dol_fiche_head($head, 'ecm', $langs->trans("Sendings"), -1, 'ecm');
+
print '
';
print '';
print '| '.$langs->trans("Description").' | ';
diff --git a/htdocs/core/lib/ecm.lib.php b/htdocs/core/lib/ecm.lib.php
index b9da91093bb..3b0cef1a809 100644
--- a/htdocs/core/lib/ecm.lib.php
+++ b/htdocs/core/lib/ecm.lib.php
@@ -138,3 +138,38 @@ function ecm_prepare_head_fm($object)
return $head;
}
+
+/**
+ * Return array head with list of tabs to view object informations.
+ *
+ * @return array head array with tabs
+ */
+function ecm_admin_prepare_head()
+{
+ global $langs, $conf;
+ $langs->load("ecm");
+
+ $h = 0;
+ $head = array();
+
+ $head[$h][0] = DOL_URL_ROOT."/admin/ecm.php";
+ $head[$h][1] = $langs->trans("Setup");
+ $head[$h][2] = 'ecm';
+ $h++;
+
+ $head[$h][0] = DOL_URL_ROOT.'/admin/ecm_files_extrafields.php';
+ $head[$h][1] = $langs->trans("ExtraFieldsEcmFiles");
+ $head[$h][2] = 'attributes_ecm_files';
+ $h++;
+
+ $head[$h][0] = DOL_URL_ROOT.'/admin/ecm_directories_extrafields.php';
+ $head[$h][1] = $langs->trans("ExtraFieldsEcmDirectories");
+ $head[$h][2] = 'attributes_ecm_directories';
+ $h++;
+
+ complete_head_from_modules($conf, $langs, null, $head, $h, 'ecm_admin');
+
+ complete_head_from_modules($conf, $langs, null, $head, $h, 'ecm_admin', 'remove');
+
+ return $head;
+}
diff --git a/htdocs/ecm/class/ecmdirectory.class.php b/htdocs/ecm/class/ecmdirectory.class.php
index 8799af86017..25673c65c6c 100644
--- a/htdocs/ecm/class/ecmdirectory.class.php
+++ b/htdocs/ecm/class/ecmdirectory.class.php
@@ -25,7 +25,7 @@
/**
* Class to manage ECM directories
*/
-class EcmDirectory // extends CommonObject
+class EcmDirectory extends CommonObject
{
/**
* @var string ID to identify managed object
@@ -35,7 +35,7 @@ class EcmDirectory // extends CommonObject
/**
* @var string Name of table without prefix where object is stored
*/
- //public $table_element='ecm_directories';
+ public $table_element='ecm_directories';
/**
* @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
@@ -345,6 +345,10 @@ class EcmDirectory // extends CommonObject
$this->date_m = $this->db->jdate($obj->date_m);
}
+ // Retrieve all extrafields for ecm_files
+ // fetch optionals attributes and labels
+ $this->fetch_optionals();
+
$this->db->free($resql);
return $obj ? 1 : 0;
diff --git a/htdocs/ecm/class/ecmfiles.class.php b/htdocs/ecm/class/ecmfiles.class.php
index c3cb0e5462b..b0c1df8316f 100644
--- a/htdocs/ecm/class/ecmfiles.class.php
+++ b/htdocs/ecm/class/ecmfiles.class.php
@@ -403,9 +403,9 @@ class EcmFiles extends CommonObject
$this->src_object_id = $obj->src_object_id;
}
- // Retrieve all extrafields for invoice
+ // Retrieve all extrafields for ecm_files
// fetch optionals attributes and labels
- // $this->fetch_optionals();
+ $this->fetch_optionals();
// $this->fetch_lines();
diff --git a/htdocs/ecm/dir_card.php b/htdocs/ecm/dir_card.php
index 27d08e9119f..b1473908c3a 100644
--- a/htdocs/ecm/dir_card.php
+++ b/htdocs/ecm/dir_card.php
@@ -27,6 +27,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
require_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmdirectory.class.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/ecm.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
// Load translation files required by page
$langs->loadLangs(array('ecm', 'companies', 'other'));
@@ -204,6 +205,16 @@ if ($action == 'update' && !GETPOST('cancel', 'alpha'))
// Fetch was already done
$ecmdir->label = dol_sanitizeFileName(GETPOST("label"));
$ecmdir->description = GETPOST("description");
+ $ret = $extrafields->setOptionalsFromPost(null, $ecmdir);
+ if ($ret < 0) $error++;
+ if (!$error) {
+ // Actions on extra fields
+ $result = $ecmdir->insertExtraFields();
+ if ($result < 0) {
+ setEventMessages($ecmdir->error, $ecmdir->errors, 'errors');
+ $error++;
+ }
+ }
$result = $ecmdir->update($user);
if ($result > 0)
{
@@ -266,6 +277,10 @@ if ($action == 'update' && !GETPOST('cancel', 'alpha'))
$form = new Form($db);
$object = new EcmDirectory($db); // Need to create a new one instance
+$extrafields = new ExtraFields($db);
+// fetch optionals attributes and labels
+$extrafields->fetch_name_optionals_label($object->table_element);
+
if ($module == 'ecm')
{
@@ -415,6 +430,7 @@ print '
';
print '| '.$langs->trans("TotalSizeOfAttachedFiles").' | ';
print dol_print_size($totalsize);
print ' |
';
+print $object->showOptionals($extrafields, ($action == 'edit' ? 'edit' : 'view'));
print '
';
if ($action == 'edit')
diff --git a/htdocs/ecm/file_card.php b/htdocs/ecm/file_card.php
index 48c15f92aa2..3b5cca1eebe 100644
--- a/htdocs/ecm/file_card.php
+++ b/htdocs/ecm/file_card.php
@@ -27,6 +27,7 @@ require_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmdirectory.class.php';
require_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/ecm.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
// Load translation files required by page
$langs->loadLangs(array('ecm', 'companies', 'other', 'users', 'orders', 'propal', 'bills', 'contracts', 'categories'));
@@ -94,6 +95,10 @@ $filepathtodocument = $relativetodocument.$file->label;
// Try to load object from index
$object = new ECMFiles($db);
+$extrafields = new ExtraFields($db);
+// fetch optionals attributes and labels
+$extrafields->fetch_name_optionals_label($object->table_element);
+
$result = $object->fetch(0, '', $filepathtodocument);
if ($result < 0)
{
@@ -148,7 +153,6 @@ if ($action == 'update')
// Now we update index of file
$db->begin();
-
//print $oldfile.' - '.$newfile;
if ($newlabel != $oldlabel)
{
@@ -181,6 +185,16 @@ if ($action == 'update')
if ($object->id > 0)
{
+ $ret = $extrafields->setOptionalsFromPost(null, $object);
+ if ($ret < 0) $error++;
+ if (!$error) {
+ // Actions on extra fields
+ $result = $object->insertExtraFields();
+ if ($result < 0) {
+ setEventMessages($object->error, $object->errors, 'errors');
+ $error++;
+ }
+ }
// Call update to set the share key
$result = $object->update($user);
if ($result < 0)
@@ -365,8 +379,9 @@ if (!empty($object->share))
print 'share ? ' checked="checked"' : '').' /> ';
}
}
-print '';
-
+print '';
+print '';
+print $object->showOptionals($extrafields, ($action == 'edit'?'edit':'view'));
print '';
print '';
diff --git a/htdocs/install/mysql/migration/12.0.0-13.0.0.sql b/htdocs/install/mysql/migration/12.0.0-13.0.0.sql
index e76948808bb..af9d40d9449 100644
--- a/htdocs/install/mysql/migration/12.0.0-13.0.0.sql
+++ b/htdocs/install/mysql/migration/12.0.0-13.0.0.sql
@@ -105,28 +105,28 @@ ALTER TABLE llx_c_incoterms ADD COLUMN label varchar(100) NULL;
CREATE TABLE llx_recruitment_recruitmentjobposition(
- rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL,
- ref varchar(128) DEFAULT '(PROV)' NOT NULL,
- entity INTEGER DEFAULT 1 NOT NULL,
- label varchar(255) NOT NULL,
- qty integer DEFAULT 1 NOT NULL,
- fk_soc integer,
- fk_project integer,
- fk_user_recruiter integer,
- fk_user_supervisor integer,
- fk_establishment integer,
- date_planned date,
- remuneration_suggested varchar(255),
- description text,
- note_public text,
- note_private text,
- date_creation datetime NOT NULL,
- tms timestamp,
- fk_user_creat integer NOT NULL,
- fk_user_modif integer,
- last_main_doc varchar(255),
- import_key varchar(14),
- model_pdf varchar(255),
+ rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL,
+ ref varchar(128) DEFAULT '(PROV)' NOT NULL,
+ entity INTEGER DEFAULT 1 NOT NULL,
+ label varchar(255) NOT NULL,
+ qty integer DEFAULT 1 NOT NULL,
+ fk_soc integer,
+ fk_project integer,
+ fk_user_recruiter integer,
+ fk_user_supervisor integer,
+ fk_establishment integer,
+ date_planned date,
+ remuneration_suggested varchar(255),
+ description text,
+ note_public text,
+ note_private text,
+ date_creation datetime NOT NULL,
+ tms timestamp,
+ fk_user_creat integer NOT NULL,
+ fk_user_modif integer,
+ last_main_doc varchar(255),
+ import_key varchar(14),
+ model_pdf varchar(255),
status smallint NOT NULL
) ENGINE=innodb;
@@ -160,24 +160,24 @@ CREATE TABLE llx_recruitment_recruitmentcandidature(
-- BEGIN MODULEBUILDER FIELDS
rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL,
entity integer NOT NULL DEFAULT 1,
- fk_recruitmentjobposition INTEGER NULL,
- ref varchar(128) DEFAULT '(PROV)' NOT NULL,
- description text,
- note_public text,
- note_private text,
- date_creation datetime NOT NULL,
- tms timestamp,
- fk_user_creat integer NOT NULL,
- fk_user_modif integer,
- import_key varchar(14),
- model_pdf varchar(255),
- status smallint NOT NULL,
- firstname varchar(128),
+ fk_recruitmentjobposition INTEGER NULL,
+ ref varchar(128) DEFAULT '(PROV)' NOT NULL,
+ description text,
+ note_public text,
+ note_private text,
+ date_creation datetime NOT NULL,
+ tms timestamp,
+ fk_user_creat integer NOT NULL,
+ fk_user_modif integer,
+ import_key varchar(14),
+ model_pdf varchar(255),
+ status smallint NOT NULL,
+ firstname varchar(128),
lastname varchar(128),
email varchar(255),
phone varchar(64),
date_birth date,
- remuneration_requested integer,
+ remuneration_requested integer,
remuneration_proposed integer,
email_msgid varchar(255),
fk_recruitment_origin INTEGER NULL
@@ -272,8 +272,8 @@ ALTER TABLE llx_recruitment_recruitmentcandidature ADD UNIQUE INDEX uk_recruitme
ALTER TABLE llx_product MODIFY COLUMN seuil_stock_alerte float;
ALTER TABLE llx_product MODIFY COLUMN desiredstock float;
-ALTER TABLE llx_product_warehouse_properties MODIFY COLUMN seuil_stock_alerte float;
-ALTER TABLE llx_product_warehouse_properties MODIFY COLUMN desiredstock float;
+ALTER TABLE llx_product_warehouse_properties MODIFY COLUMN seuil_stock_alerte float;
+ALTER TABLE llx_product_warehouse_properties MODIFY COLUMN desiredstock float;
ALTER TABLE llx_product ADD COLUMN fk_state integer DEFAULT NULL;
@@ -330,3 +330,23 @@ ALTER TABLE llx_bank ADD COLUMN origin_type varchar(64) NULL;
ALTER TABLE llx_bank ADD COLUMN import_key varchar(14);
ALTER TABLE llx_menu MODIFY COLUMN enabled text;
+
+CREATE TABLE llx_ecm_files_extrafields
+(
+ rowid integer AUTO_INCREMENT PRIMARY KEY,
+ tms timestamp,
+ fk_object integer NOT NULL,
+ import_key varchar(14) -- import key
+) ENGINE=innodb;
+
+ALTER TABLE llx_ecm_files_extrafields ADD INDEX idx_ecm_files_extrafields (fk_object);
+
+CREATE TABLE llx_ecm_directories_extrafields
+(
+ rowid integer AUTO_INCREMENT PRIMARY KEY,
+ tms timestamp,
+ fk_object integer NOT NULL,
+ import_key varchar(14) -- import key
+) ENGINE=innodb;
+
+ALTER TABLE llx_ecm_directories_extrafields ADD INDEX idx_ecm_directories_extrafields (fk_object);
diff --git a/htdocs/langs/en_US/ecm.lang b/htdocs/langs/en_US/ecm.lang
index 369ac6dfdfa..aaf81b0f346 100644
--- a/htdocs/langs/en_US/ecm.lang
+++ b/htdocs/langs/en_US/ecm.lang
@@ -50,3 +50,6 @@ ReSyncListOfDir=Resync list of directories
HashOfFileContent=Hash of file content
NoDirectoriesFound=No directories found
FileNotYetIndexedInDatabase=File not yet indexed into database (try to re-upload it)
+ExtraFieldsEcmFiles=Extrafields Ecm Files
+ExtraFieldsEcmDirectories=Extrafields Ecm Directories
+ECMSetup=ECM Setup