From 66ad0e5b1397ff34b5d31198e8a5d8cec12dbacb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 24 Nov 2020 18:54:59 +0100 Subject: [PATCH] add note on ecm files --- htdocs/core/class/commonobject.class.php | 21 ++- htdocs/core/lib/ecm.lib.php | 10 ++ htdocs/core/tpl/notes.tpl.php | 9 +- htdocs/ecm/class/ecmfiles.class.php | 4 + htdocs/ecm/file_note.php | 176 +++++++++++++++++++++++ 5 files changed, 211 insertions(+), 9 deletions(-) create mode 100644 htdocs/ecm/file_note.php diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index ac0900f0c29..4160f281fc8 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -2934,18 +2934,25 @@ abstract class CommonObject // Special cas if ($this->table_element == 'product' && $newsuffix == '_private') $newsuffix = ''; - + if (in_array($this->table_element, array('actioncomm', 'adherent', 'advtargetemailing', 'cronjob', 'establishment'))) { + $fieldusermod = "fk_user_mod"; + } elseif ($this->table_element == 'ecm_files') { + $fieldusermod = "fk_user_m"; + } else { + $fieldusermod = "fk_user_modif"; + } $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; $sql .= " SET note".$newsuffix." = ".(!empty($note) ? ("'".$this->db->escape($note)."'") : "NULL"); - $sql .= " ,".(in_array($this->table_element, array('actioncomm', 'adherent', 'advtargetemailing', 'cronjob', 'establishment')) ? "fk_user_mod" : "fk_user_modif")." = ".$user->id; + $sql .= " ,".$fieldusermod." = ".$user->id; $sql .= " WHERE rowid =".$this->id; dol_syslog(get_class($this)."::update_note", LOG_DEBUG); - if ($this->db->query($sql)) - { - if ($suffix == '_public') $this->note_public = $note; - elseif ($suffix == '_private') $this->note_private = $note; - else { + if ($this->db->query($sql)) { + if ($suffix == '_public') { + $this->note_public = $note; + } elseif ($suffix == '_private') { + $this->note_private = $note; + } else { $this->note = $note; // deprecated $this->note_private = $note; } diff --git a/htdocs/core/lib/ecm.lib.php b/htdocs/core/lib/ecm.lib.php index 1f22e464358..2c1edc5e675 100644 --- a/htdocs/core/lib/ecm.lib.php +++ b/htdocs/core/lib/ecm.lib.php @@ -111,6 +111,16 @@ function ecm_file_prepare_head($object) $head[$h][2] = 'card'; $h++; + // Notes + $head[$h][0] = DOL_URL_ROOT.'/ecm/file_note.php?section='.$object->section_id.'&urlfile='.urlencode($object->label); + $head[$h][1] = $langs->trans("Notes"); + $nbNote = 0; + if (!empty($object->note_private)) $nbNote++; + if (!empty($object->note_public)) $nbNote++; + if ($nbNote > 0) $head[$h][1] .= ''.$nbNote.''; + $head[$h][2] = 'note'; + $h++; + return $head; } diff --git a/htdocs/core/tpl/notes.tpl.php b/htdocs/core/tpl/notes.tpl.php index 283f9eeb873..ec098be9db7 100644 --- a/htdocs/core/tpl/notes.tpl.php +++ b/htdocs/core/tpl/notes.tpl.php @@ -79,11 +79,16 @@ if ($module == 'propal') { $permission = $user->rights->expedition->creer; } elseif ($module == 'product') { $permission = $user->rights->produit->creer; +} elseif ($module == 'ecmfiles') { + $permission = $user->rights->ecm->setup; } //else dol_print_error('','Bad value '.$module.' for param module'); -if (!empty($conf->fckeditor->enabled) && !empty($conf->global->FCKEDITOR_ENABLE_SOCIETE)) $typeofdata = 'ckeditor:dolibarr_notes:100%:200::1:12:95%:0'; // Rem: This var is for all notes, not only thirdparties note. -else $typeofdata = 'textarea:12:95%'; +if (!empty($conf->fckeditor->enabled) && !empty($conf->global->FCKEDITOR_ENABLE_SOCIETE)) { + $typeofdata = 'ckeditor:dolibarr_notes:100%:200::1:12:95%:0'; // Rem: This var is for all notes, not only thirdparties note. +} else { + $typeofdata = 'textarea:12:95%'; +} print ''."\n"; print '
'."\n"; diff --git a/htdocs/ecm/class/ecmfiles.class.php b/htdocs/ecm/class/ecmfiles.class.php index e229663e55f..136a3ebc7e2 100644 --- a/htdocs/ecm/class/ecmfiles.class.php +++ b/htdocs/ecm/class/ecmfiles.class.php @@ -336,6 +336,8 @@ class EcmFiles extends CommonObject $sql .= " t.tms as date_m,"; $sql .= " t.fk_user_c,"; $sql .= " t.fk_user_m,"; + $sql .= ' t.note_private,'; + $sql .= ' t.note_public,'; $sql .= " t.acl,"; $sql .= " t.src_object_type,"; $sql .= " t.src_object_id"; @@ -398,6 +400,8 @@ class EcmFiles extends CommonObject $this->date_m = $this->db->jdate($obj->date_m); $this->fk_user_c = $obj->fk_user_c; $this->fk_user_m = $obj->fk_user_m; + $this->note_private = $obj->note_private; + $this->note_public = $obj->note_public; $this->acl = $obj->acl; $this->src_object_type = $obj->src_object_type; $this->src_object_id = $obj->src_object_id; diff --git a/htdocs/ecm/file_note.php b/htdocs/ecm/file_note.php new file mode 100644 index 00000000000..f7810dec887 --- /dev/null +++ b/htdocs/ecm/file_note.php @@ -0,0 +1,176 @@ + + * Copyright (C) 2004-2016 Laurent Destailleur + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2013 Florian Henry + * Copyright (C) 2017 Ferran Marcet + * + * 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/ecm/file_note.php + * \ingroup ecm + * \brief Fiche de notes sur une ecm file + */ + +require '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/ecm.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmdirectory.class.php'; +require_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php'; + +// Load translation files required by the page +$langs->loadLangs(array('ecm')); + +$id = GETPOST('id', 'int'); +$ref = GETPOST('ref', 'alpha'); +$socid = GETPOST('socid', 'int'); +$action = GETPOST('action', 'aZ09'); + +if (!$user->rights->ecm->setup) accessforbidden(); + +// Get parameters +$socid = GETPOST("socid", "int"); +// Security check +if ($user->socid > 0) { + $action = ''; + $socid = $user->socid; +} + +$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$sortfield = GETPOST("sortfield", 'alpha'); +$sortorder = GETPOST("sortorder", 'alpha'); +$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 +$offset = $limit * $page; +$pageprev = $page - 1; +$pagenext = $page + 1; +if (!$sortorder) $sortorder = "ASC"; +if (!$sortfield) $sortfield = "label"; + +$section = GETPOST("section", 'alpha'); +if (!$section) { + dol_print_error('', 'Error, section parameter missing'); + exit; +} +$urlfile = GETPOST("urlfile"); +if (!$urlfile) { + dol_print_error('', "ErrorParamNotDefined"); + exit; +} + +// Load ecm object +$ecmdir = new EcmDirectory($db); +$result = $ecmdir->fetch(GETPOST("section", 'alpha')); +if (!$result > 0) { + dol_print_error($db, $ecmdir->error); + exit; +} +$relativepath = $ecmdir->getRelativePath(); +$upload_dir = $conf->ecm->dir_output.'/'.$relativepath; + +$fullpath = $conf->ecm->dir_output.'/'.$relativepath.$urlfile; + +$file = new stdClass(); +$file->section_id = $ecmdir->id; +$file->label = $urlfile; + +$relativetodocument = 'ecm/'.$relativepath; // $relativepath is relative to ECM dir, we need relative to document +$filepath = $relativepath.$file->label; +$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) { + dol_print_error($db, $object->error, $object->errors); + exit; +} + +$permissionnote = $user->rights->ecm->setup; // Used by the include of actions_setnotes.inc.php + +/* + * Actions + */ + +include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once + + +/* + * View + */ + +llxHeader('', $langs->trans('EcmFiles')); + +$form = new Form($db); + +$head = ecm_file_prepare_head($file); + +print dol_get_fiche_head($head, 'note', $langs->trans("File"), -1, 'generic'); + +$s = ''; +$tmpecmdir = new EcmDirectory($db); // Need to create a new one +$tmpecmdir->fetch($ecmdir->id); +$result = 1; +$i = 0; +while ($tmpecmdir && $result > 0) { + $tmpecmdir->ref = $tmpecmdir->label; + $s = $tmpecmdir->getNomUrl(1).$s; + if ($tmpecmdir->fk_parent) + { + $s = ' -> '.$s; + $result = $tmpecmdir->fetch($tmpecmdir->fk_parent); + } else { + $tmpecmdir = 0; + } + $i++; +} + +$urlfiletoshow = preg_replace('/\.noexe$/', '', $urlfile); + +$s = img_picto('', 'object_dir').' '.$langs->trans("ECMRoot").' -> '.$s.' -> '; +if ($action == 'edit') $s .= ''; +else $s .= $urlfiletoshow; + +$linkback = ''; +if ($backtopage) { + $linkback = ''.$langs->trans("BackToTree").''; +} + +$object->ref = ''; // Force to hide ref +dol_banner_tab($object, '', $linkback, 0, '', '', $s); + + + +print '
'; +print '
'; + + +$cssclass = "titlefield"; +$moreparam = '&section='.$section.'&urlfile='.$urlfile; +include DOL_DOCUMENT_ROOT.'/core/tpl/notes.tpl.php'; + +print '
'; + +print dol_get_fiche_end(); + + +// End of page +llxFooter(); +$db->close();