31require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobject.class.php';
32require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobjectline.class.php';
42 public $element =
'ecmfiles';
47 public $table_element =
'ecm_files';
52 public $picto =
'folder-open';
68 public $lines = array();
83 public $fullpath_orig;
113 public $gen_or_uploaded;
148 public $src_object_type;
153 public $src_object_id;
165 public $fields = array(
166 'rowid' => array(
'type' =>
'integer',
'label' =>
'TechnicalID',
'enabled' => 1,
'position' => 1,
'notnull' => 1,
'visible' => 0,
'noteditable' => 1,
'index' => 1,
'css' =>
'left',
'comment' =>
"Id"),
167 'ref' => array(
'type' =>
'varchar(128)',
'label' =>
'Ref',
'enabled' => 1,
'position' => 20,
'notnull' => 1,
'visible' => -1,
'index' => 1,
'searchall' => 1,
'showoncombobox' => 1,
'validate' => 1,
'comment' =>
"contains hash from filename+filepath"),
168 'label' => array(
'type' =>
'varchar(128)',
'label' =>
'Label',
'enabled' => 1,
'position' => 30,
'notnull' => 0,
'visible' => -1,
'searchall' => 1,
'css' =>
'minwidth300',
'cssview' =>
'wordbreak',
'showoncombobox' => 2,
'validate' => 1,
'comment' =>
"contains hash of file content"),
169 'share' => array(
'type' =>
'varchar(128)',
'label' =>
'Share',
'enabled' => 1,
'position' => 40,
'notnull' => 0,
'visible' => -1,
'searchall' => 1,
'css' =>
'minwidth300',
'cssview' =>
'wordbreak',
'showoncombobox' => 2,
'validate' => 1,
'comment' =>
"contains hash for file sharing"),
170 'entity' => array(
'type' =>
'integer',
'label' =>
'Entity',
'default' =>
'1',
'enabled' => 1,
'visible' => -2,
'notnull' => -1,
'position' => 50,
'index' => 1),
171 'filepath' => array(
'type' =>
'varchar(255)',
'label' =>
'FilePath',
'enabled' => 1,
'position' => 60,
'notnull' => 0,
'visible' => 0,
'searchall' => 0,
'css' =>
'minwidth300',
'cssview' =>
'wordbreak',
'showoncombobox' => 2,
'validate' => 1,
'comment' =>
"relative to dolibarr document dir. Example module/def"),
172 'filename' => array(
'type' =>
'varchar(255)',
'label' =>
'FileName',
'enabled' => 1,
'position' => 70,
'notnull' => 0,
'visible' => 1,
'searchall' => 1,
'css' =>
'minwidth300',
'cssview' =>
'wordbreak',
'showoncombobox' => 2,
'validate' => 1,
'comment' =>
"file name only without any directory"),
173 'src_object_type' => array(
'type' =>
'varchar(64)',
'label' =>
'SourceType',
'enabled' => 1,
'position' => 80,
'notnull' => 0,
'visible' => 0,
'searchall' => 1,
'css' =>
'minwidth300',
'cssview' =>
'wordbreak',
'showoncombobox' => 2,
'validate' => 1,
'comment' =>
"Source object type ('proposal', 'invoice', ...)"),
174 'src_object_id' => array(
'type' =>
'integer',
'label' =>
'SourceID',
'default' =>
'1',
'enabled' => 1,
'visible' => 0,
'notnull' => 1,
'position' => 90,
'index' => 1,
'comment' =>
"Source object id"),
175 'fullpath_orig' => array(
'type' =>
'varchar(750)',
'label' =>
'FullPathOrig',
'enabled' => 1,
'position' => 100,
'notnull' => 0,
'visible' => 0,
'searchall' => 0,
'css' =>
'minwidth300',
'cssview' =>
'wordbreak',
'showoncombobox' => 2,
'validate' => 1,
'comment' =>
"full path of original filename, when file is uploaded from a local computer"),
176 'description' => array(
'type' =>
'text',
'label' =>
'Description',
'enabled' => 1,
'visible' => 0,
'position' => 110),
177 'keywords' => array(
'type' =>
'varchar(750)',
'label' =>
'Keywords',
'enabled' => 1,
'position' => 120,
'notnull' => 0,
'visible' => 1,
'searchall' => 1,
'css' =>
'minwidth300',
'cssview' =>
'wordbreak',
'showoncombobox' => 2,
'validate' => 1,
'comment' =>
"list of keywords, separated with comma. Must be limited to most important keywords."),
178 'content' => array(
'type' =>
'html',
'label' =>
'Content',
'enabled' =>
'getDolGlobalString("MAIN_SAVE_FILE_CONTENT_AS_TEXT")',
'position' => 120,
'notnull' => 0,
'visible' => 1,
'searchall' => 1,
'css' =>
'minwidth300',
'cssview' =>
'wordbreak',
'csslist' =>
'tdoverflowmax200',
'help' =>
"Text content of file",
'showoncombobox' => 2,
'validate' => 1,
'comment' =>
"Text content if option to store txt content was set."),
179 'cover' => array(
'type' =>
'text',
'label' =>
'Cover',
'enabled' => 1,
'visible' => 0,
'position' => 130,
'comment' =>
"is this file a file to use for a cover"),
180 'position' => array(
'type' =>
'integer',
'label' =>
'Position',
'default' =>
'1',
'enabled' => 1,
'visible' => -2,
'notnull' => 1,
'position' => 140,
'index' => 1,
'comment' =>
"position of file among others"),
181 'gen_or_uploaded' => array(
'type' =>
'varchar(12)',
'label' =>
'GenOrUpload',
'enabled' => 1,
'position' => 150,
'notnull' => 0,
'visible' => -1,
'searchall' => 1,
'css' =>
'minwidth300',
'cssview' =>
'wordbreak',
'showoncombobox' => 2,
'validate' => 1,
'comment' =>
"'generated' or 'uploaded'"),
182 'extraparams' => array(
'type' =>
'varchar(255)',
'label' =>
'ExtraParams',
'enabled' => 1,
'position' => 160,
'notnull' => 0,
'visible' => 1,
'searchall' => 1,
'css' =>
'minwidth300',
'cssview' =>
'wordbreak',
'showoncombobox' => 2,
'validate' => 1,
'comment' =>
"for stocking other parameters with json format"),
183 'date_c' => array(
'type' =>
'datetime',
'label' =>
'DateCreation',
'enabled' => 1,
'visible' => -1,
'position' => 170),
184 'tms' => array(
'type' =>
'timestamp',
'label' =>
'DateModification',
'enabled' => 1,
'visible' => -1,
'notnull' => 1,
'position' => 175),
185 'fk_user_c' => array(
'type' =>
'integer:User:user/class/user.class.php',
'label' =>
'UserAuthor',
'enabled' => 1,
'position' => 510,
'notnull' => 1,
'visible' => -2,
'foreignkey' =>
'user.rowid',),
186 'fk_user_m' => array(
'type' =>
'integer:User:user/class/user.class.php',
'label' =>
'UserModif',
'enabled' => 1,
'position' => 511,
'notnull' => -1,
'visible' => -2,),
187 'note_public' => array(
'type' =>
'text',
'label' =>
'NotePublic',
'enabled' => 1,
'visible' => 0,
'position' => 155),
188 'note_private' => array(
'type' =>
'text',
'label' =>
'NotePrivate',
'enabled' => 1,
'visible' => 0,
'position' => 160),
189 'acl' => array(
'type' =>
'text',
'label' =>
'NotePrivate',
'enabled' => 1,
'visible' => 0,
'position' => 160,
'comment' =>
"for future permission 'per file'"),
190 'agenda_id' => array(
'type' =>
'integer',
'label' =>
'IdAgenda',
'enabled' => 1,
'visible' => 0,
'position' => 180,
'comment' =>
"Link to an actioncomm"),
220 if (isset($this->
ref)) {
221 $this->
ref = trim($this->
ref);
223 if (isset($this->label)) {
224 $this->label = trim($this->label);
226 if (isset($this->share)) {
227 $this->share = trim($this->share);
229 if (isset($this->entity)) {
230 $this->entity = (int) $this->entity;
232 if (isset($this->filename)) {
233 $this->filename = preg_replace(
'/\.noexe$/',
'', trim($this->filename));
235 if (isset($this->filepath)) {
236 $this->filepath = trim($this->filepath);
237 $this->filepath = preg_replace(
'/[\\/]+$/',
'', $this->filepath);
239 if (isset($this->fullpath_orig)) {
240 $this->fullpath_orig = trim($this->fullpath_orig);
245 if (isset($this->keywords)) {
246 $this->keywords = trim($this->keywords);
248 if (isset($this->cover)) {
249 $this->cover = trim($this->cover);
251 if (isset($this->gen_or_uploaded)) {
252 $this->gen_or_uploaded = trim($this->gen_or_uploaded);
254 if (isset($this->fk_user_c)) {
255 $this->fk_user_c = (int) $this->fk_user_c;
257 if (isset($this->fk_user_m)) {
258 $this->fk_user_m = (int) $this->fk_user_m;
260 if (isset($this->acl)) {
261 $this->acl = trim($this->acl);
263 if (isset($this->src_object_type)) {
264 $this->src_object_type = trim($this->src_object_type);
266 if (empty($this->date_c)) {
269 if (empty($this->date_m)) {
274 if (empty($this->
ref)) {
275 include_once DOL_DOCUMENT_ROOT.
'/core/lib/security.lib.php';
276 $this->
ref =
dol_hash($this->filepath.
'/'.$this->filename,
'3');
282 $sql =
"SELECT MAX(position) as maxposition FROM ".MAIN_DB_PREFIX.$this->table_element;
283 $sql .=
" WHERE filepath ='".$this->db->escape($this->filepath).
"'";
285 $resql = $this->db->query($sql);
287 $obj = $this->db->fetch_object($resql);
288 $maxposition = (int) $obj->maxposition;
290 $this->errors[] =
'Error '.$this->db->lasterror();
295 $maxposition = $this->position;
299 if (empty($this->filename) || empty($this->filepath)) {
300 $this->errors[] =
'Bad property filename or filepath';
303 if (!isset($this->entity)) {
304 $this->entity =
$conf->entity;
307 $extraparams = (!empty($this->extraparams) ? json_encode($this->extraparams) :
null);
308 $extraparams =
dol_trunc($extraparams, 250);
311 if (!empty($this->agenda_id)) {
312 $this->agenda_id = (int) $this->agenda_id;
316 $sql =
'INSERT INTO '.MAIN_DB_PREFIX.$this->table_element.
'(';
323 $sql .=
'fullpath_orig,';
324 $sql .=
'description,';
331 $sql .=
'gen_or_uploaded,';
332 $sql .=
'extraparams,';
335 $sql .=
'fk_user_c,';
336 $sql .=
'fk_user_m,';
338 $sql .=
'src_object_type,';
339 $sql .=
'src_object_id,';
341 $sql .=
') VALUES (';
342 $sql .=
" '".$this->db->escape($this->
ref).
"', ";
343 $sql .=
' '.(!isset($this->label) ?
'NULL' :
"'".$this->db->escape($this->label).
"'").
',';
344 $sql .=
' '.(!isset($this->share) ?
'NULL' :
"'".$this->db->escape($this->share).
"'").
',';
345 $sql .=
' '.((int) $this->entity).
',';
346 $sql .=
' '.(!isset($this->filename) ?
'NULL' :
"'".$this->db->escape($this->filename).
"'").
',';
347 $sql .=
' '.(!isset($this->filepath) ?
'NULL' :
"'".$this->db->escape($this->filepath).
"'").
',';
348 $sql .=
' '.(!isset($this->fullpath_orig) ?
'NULL' :
"'".$this->db->escape($this->fullpath_orig).
"'").
',';
350 $sql .=
' '.(!isset($this->keywords) ?
'NULL' :
"'".$this->db->escape($this->keywords).
"'").
',';
352 $sql .=
' '.(!isset($this->content) ?
'NULL' :
"'".$this->db->escape($this->content).
"'").
',';
354 $sql .=
' '.(!isset($this->cover) ?
'NULL' :
"'".$this->db->escape($this->cover).
"'").
',';
355 $sql .=
' '.((int) $maxposition).
',';
356 $sql .=
' '.(!isset($this->gen_or_uploaded) ?
'NULL' :
"'".$this->db->escape($this->gen_or_uploaded).
"'").
',';
357 $sql .=
' '.(!isset($extraparams) ?
'NULL' :
"'".$this->db->escape($extraparams).
"'").
',';
358 $sql .=
" '".$this->db->idate($this->date_c).
"',";
359 $sql .=
' '.(!isset($this->date_m) ||
dol_strlen((
string) $this->date_m) == 0 ?
'NULL' :
"'".$this->db->idate($this->date_m).
"'").
',';
360 $sql .=
' '.(!isset($this->fk_user_c) ? ((int) $user->id) : ((int) $this->fk_user_c)).
',';
361 $sql .=
' '.(!isset($this->fk_user_m) ?
'NULL' : ((int) $this->fk_user_m)).
',';
362 $sql .=
' '.(!isset($this->acl) ?
'NULL' :
"'".$this->db->escape($this->acl).
"'").
',';
363 $sql .=
' '.(!isset($this->src_object_type) ?
'NULL' :
"'".$this->db->escape($this->src_object_type).
"'").
',';
364 $sql .=
' '.(!isset($this->src_object_id) ?
'NULL' : ((int) $this->src_object_id)).
',';
365 $sql .=
' '.(empty($this->agenda_id) ?
'NULL' : ((int) $this->agenda_id));
370 $resql = $this->db->query($sql);
373 if ($this->db->lasterrno() ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
374 $this->errors[] =
'Error DB_ERROR_RECORD_ALREADY_EXISTS : '.$this->db->lasterror();
376 $this->errors[] =
'Error '.$this->db->lasterror();
378 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
382 $this->
id = $this->db->last_insert_id(MAIN_DB_PREFIX.$this->table_element);
388 $result = $this->call_trigger(strtoupper(get_class($this)).
'_CREATE', $user);
398 $this->db->rollback();
421 public function fetch($id, $ref =
'', $relativepath =
'', $hashoffile =
'', $hashforshare =
'', $src_object_type =
'', $src_object_id = 0, $entity =
null)
432 $sql .=
" t.entity,";
433 $sql .=
" t.filename,";
434 $sql .=
" t.filepath,";
435 $sql .=
" t.fullpath_orig,";
436 $sql .=
" t.description,";
437 $sql .=
" t.keywords,";
439 $sql .=
" t.content,";
442 $sql .=
" t.position,";
443 $sql .=
" t.gen_or_uploaded,";
444 $sql .=
" t.extraparams,";
445 $sql .=
" t.date_c,";
446 $sql .=
" t.tms as date_m,";
447 $sql .=
" t.fk_user_c,";
448 $sql .=
" t.fk_user_m,";
449 $sql .=
' t.note_private,';
450 $sql .=
' t.note_public,';
452 $sql .=
" t.src_object_type,";
453 $sql .=
" t.src_object_id,";
454 $sql .=
" t.agenda_id";
455 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
456 $sql .=
' WHERE 1 = 1';
463 $relativepathwithnoexe = preg_replace(
'/\.noexe$/',
'', $relativepath);
464 $sql .=
" AND t.filepath = '".$this->db->escape(dirname($relativepath)).
"'";
465 $filename = basename($relativepathwithnoexe);
466 if ($filename !=
'*') {
467 $sql .=
" AND t.filename = '".$this->db->escape($filename).
"'";
469 if (isset($entity)) {
470 $sql .=
" AND t.entity = " . (int) $entity;
472 $sql .=
" AND t.entity = " . ((int)
$conf->entity);
477 $sql .=
" AND t.ref = '".$this->db->escape($ref).
"'";
478 if (isset($entity)) {
479 $sql .=
" AND t.entity = " . (int) $entity;
481 $sql .=
" AND t.entity = " . ((int)
$conf->entity);
485 if (!empty($hashoffile)) {
486 $sql .=
" AND t.label = '".$this->db->escape($hashoffile).
"'";
487 if (isset($entity)) {
488 $sql .=
" AND t.entity = " . (int) $entity;
490 $sql .=
" AND t.entity = " . ((int)
$conf->entity);
494 if (!empty($hashforshare)) {
495 if ($hashforshare !=
'shared') {
496 $sql .=
" AND t.share = '".$this->db->escape($hashforshare).
"'";
498 $sql .=
" AND t.share IS NOT NULL AND t.share <> ''";
503 if ($src_object_type && $src_object_id) {
504 $sql .=
" AND t.src_object_type = '".$this->db->escape($src_object_type).
"' AND t.src_object_id = ".((int) $src_object_id);
505 if (isset($entity)) {
506 $sql .=
" AND t.entity = " . (int) $entity;
508 $sql .=
" AND t.entity = " . ((int)
$conf->entity);
512 if ($id > 0 || empty($filterfound)) {
513 $sql .=
' AND t.rowid = '.((int) $id);
517 $this->db->plimit(1);
518 $this->db->order(
't.rowid',
'ASC');
520 $resql = $this->db->query($sql);
522 $numrows = $this->db->num_rows($resql);
524 $obj = $this->db->fetch_object($resql);
526 $this->
id = $obj->rowid;
527 $this->
ref = $obj->ref;
528 $this->label = $obj->label;
529 $this->share = $obj->share;
530 $this->entity = $obj->entity;
531 $this->filename = $obj->filename;
532 $this->filepath = $obj->filepath;
533 $this->fullpath_orig = $obj->fullpath_orig;
535 $this->keywords = $obj->keywords;
537 $this->content = $obj->content;
539 $this->cover = $obj->cover;
541 $this->gen_or_uploaded = $obj->gen_or_uploaded;
542 $this->date_c = $this->db->jdate($obj->date_c);
543 $this->date_m = $this->db->jdate($obj->date_m);
544 $this->fk_user_c = $obj->fk_user_c;
545 $this->fk_user_m = $obj->fk_user_m;
546 $this->note_private = $obj->note_private;
547 $this->note_public = $obj->note_public;
548 $this->acl = $obj->acl;
549 $this->src_object_type = $obj->src_object_type;
550 $this->src_object_id = $obj->src_object_id;
551 $this->agenda_id = $obj->agenda_id;
552 $this->extraparams = (isset($obj->extraparams) ? (array) json_decode($obj->extraparams,
true) :
null);
561 $this->db->free($resql);
569 $this->errors[] =
'Error '.$this->db->lasterror();
570 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
587 public function fetchAll($sortorder =
'', $sortfield =
'', $limit = 0, $offset = 0, $filter =
'', $filtermode =
'AND')
595 $sql .=
" t.entity,";
596 $sql .=
" t.filename,";
597 $sql .=
" t.filepath,";
598 $sql .=
" t.fullpath_orig,";
599 $sql .=
" t.description,";
600 $sql .=
" t.keywords,";
602 $sql .=
" t.content,";
605 $sql .=
" t.position,";
606 $sql .=
" t.gen_or_uploaded,";
607 $sql .=
" t.extraparams,";
608 $sql .=
" t.date_c,";
609 $sql .=
" t.tms as date_m,";
610 $sql .=
" t.fk_user_c,";
611 $sql .=
" t.fk_user_m,";
613 $sql .=
" t.src_object_type,";
614 $sql .=
" t.src_object_id,";
615 $sql .=
" t.agenda_id";
616 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
617 $sql .=
' WHERE 1 = 1';
620 if (is_array($filter)) {
622 if (count($filter) > 0) {
623 foreach ($filter as $key => $value) {
624 if ($key ==
't.src_object_id') {
625 $sqlwhere[] = $this->db->sanitize($key).
" = ".((int) $value);
627 $sqlwhere[] = $this->db->sanitize($key).
" LIKE '%".$this->db->escape($this->db->escapeforlike($value)).
"%'";
631 if (count($sqlwhere) > 0) {
632 $sql .=
' AND '.implode(
' '.$this->db->escape($filtermode).
' ', $sqlwhere);
642 $this->errors[] = $errormessage;
643 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
651 if (!empty($sortfield)) {
652 $sql .= $this->db->order($sortfield, $sortorder);
654 if (!empty($limit)) {
655 $sql .= $this->db->plimit($limit, $offset);
658 $this->lines = array();
660 $resql = $this->db->query($sql);
662 $num = $this->db->num_rows($resql);
664 while ($obj = $this->db->fetch_object($resql)) {
667 $line->id = $obj->rowid;
668 $line->ref = $obj->rowid;
669 $line->label = $obj->label;
670 $line->share = $obj->share;
671 $line->entity = $obj->entity;
672 $line->filename = $obj->filename;
673 $line->filepath = $obj->filepath;
674 $line->fullpath_orig = $obj->fullpath_orig;
675 $line->description = $obj->description;
676 $line->keywords = $obj->keywords;
678 $line->content = $obj->content;
680 $line->cover = $obj->cover;
681 $line->position = $obj->position;
682 $line->gen_or_uploaded = $obj->gen_or_uploaded;
683 $line->extraparams = $obj->extraparams;
684 $line->date_c = $this->db->jdate($obj->date_c);
685 $line->date_m = $this->db->jdate($obj->date_m);
686 $line->fk_user_c = $obj->fk_user_c;
687 $line->fk_user_m = $obj->fk_user_m;
688 $line->acl = $obj->acl;
689 $line->src_object_type = $obj->src_object_type;
690 $line->src_object_id = $obj->src_object_id;
691 $line->agenda_id = $obj->agenda_id;
693 $line->fetch_optionals();
695 $this->lines[] = $line;
697 $this->db->free($resql);
701 $this->errors[] =
'Error '.$this->db->lasterror();
702 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
725 if (isset($this->
ref)) {
726 $this->
ref = trim($this->
ref);
728 if (isset($this->label)) {
729 $this->label = trim($this->label);
731 if (isset($this->share)) {
732 $this->share = trim($this->share);
734 if (isset($this->entity)) {
735 $this->entity = (int) $this->entity;
737 if (isset($this->filename)) {
738 $this->filename = preg_replace(
'/\.noexe$/',
'', trim($this->filename));
740 if (isset($this->filepath)) {
741 $this->filepath = trim($this->filepath);
742 $this->filepath = preg_replace(
'/[\\/]+$/',
'', $this->filepath);
744 if (isset($this->fullpath_orig)) {
745 $this->fullpath_orig = trim($this->fullpath_orig);
750 if (isset($this->keywords)) {
751 $this->keywords = trim($this->keywords);
753 if (isset($this->cover)) {
754 $this->cover = trim($this->cover);
756 if (isset($this->gen_or_uploaded)) {
757 $this->gen_or_uploaded = trim($this->gen_or_uploaded);
759 if (isset($this->fk_user_m)) {
760 $this->fk_user_m = (int) $this->fk_user_m;
762 if (isset($this->acl)) {
763 $this->acl = trim($this->acl);
765 if (isset($this->src_object_type)) {
766 $this->src_object_type = trim($this->src_object_type);
768 if (!empty($this->agenda_id)) {
769 $this->agenda_id = (int) $this->agenda_id;
771 $extraparams = (!empty($this->extraparams) ? json_encode($this->extraparams) :
null);
772 $extraparams =
dol_trunc($extraparams, 250);
775 $sql =
'UPDATE '.MAIN_DB_PREFIX.$this->table_element.
' SET';
776 $sql .=
" ref = '".$this->db->escape(
dol_hash($this->filepath.
"/".$this->filename,
'3')).
"',";
777 $sql .=
' label = '.(isset($this->label) ?
"'".$this->db->escape($this->label).
"'" :
"null").
',';
778 $sql .=
' share = '.(!empty($this->share) ?
"'".$this->db->escape($this->share).
"'" :
"null").
',';
779 $sql .=
' entity = '.(isset($this->entity) ? ((int) $this->entity) : ((int)
$conf->entity)).
',';
780 $sql .=
' filename = '.(isset($this->filename) ?
"'".$this->db->escape($this->filename).
"'" :
"null").
',';
781 $sql .=
' filepath = '.(isset($this->filepath) ?
"'".$this->db->escape($this->filepath).
"'" :
"null").
',';
782 $sql .=
' fullpath_orig = '.(isset($this->fullpath_orig) ?
"'".$this->db->escape($this->fullpath_orig).
"'" :
"null").
',';
783 $sql .=
' description = '.(isset($this->
description) ?
"'".$this->db->escape($this->
description).
"'" :
"null").
',';
784 $sql .=
' keywords = '.(isset($this->keywords) ?
"'".$this->db->escape($this->keywords).
"'" :
"null").
',';
786 $sql .=
' content = '.(isset($this->content) ?
"'".$this->db->escape($this->content).
"'" :
"null").
',';
788 $sql .=
' cover = '.(isset($this->cover) ?
"'".$this->db->escape($this->cover).
"'" :
"null").
',';
789 $sql .=
' position = '.(isset($this->
position) ? $this->db->escape((
string) $this->position) :
"0").
',';
790 $sql .=
' gen_or_uploaded = '.(isset($this->gen_or_uploaded) ?
"'".$this->db->escape($this->gen_or_uploaded).
"'" :
"null").
',';
791 $sql .=
' extraparams = '.(isset($extraparams) ?
"'".$this->db->escape($extraparams).
"'" :
"null").
',';
792 $sql .=
' date_c = '.(!isset($this->date_c) ||
dol_strlen($this->date_c) != 0 ?
"'".$this->db->idate($this->date_c).
"'" :
'null').
',';
794 $sql .=
' fk_user_m = '.($this->fk_user_m > 0 ? ((int) $this->fk_user_m) : ((int) $user->id)).
',';
795 $sql .=
' acl = '.(isset($this->acl) ?
"'".$this->db->escape($this->acl).
"'" :
"null").
',';
796 $sql .=
' src_object_id = '.($this->src_object_id > 0 ? ((int) $this->src_object_id) :
"null").
',';
797 $sql .=
' src_object_type = '.(isset($this->src_object_type) ?
"'".$this->db->escape($this->src_object_type).
"'" :
"null").
',';
798 $sql .=
' agenda_id = '.($this->agenda_id > 0 ? ((int) $this->agenda_id) :
"null");
799 $sql .=
' WHERE rowid='.((int) $this->
id);
802 $resql = $this->db->query($sql);
805 $this->errors[] =
'Error '.$this->db->lasterror();
806 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
818 if (!$error && !$notrigger) {
820 $result = $this->call_trigger(strtoupper(get_class($this)).
'_MODIFY', $user);
829 $this->db->rollback();
846 public function delete(
User $user, $notrigger = 0)
857 $result = $this->call_trigger(strtoupper(get_class($this)).
'_DELETE', $user);
868 dol_syslog(get_class($this).
"::delete error ".$this->error, LOG_ERR);
873 $sql =
'DELETE FROM '.MAIN_DB_PREFIX.$this->table_element;
874 $sql .=
' WHERE rowid='.((int) $this->
id);
876 $resql = $this->db->query($sql);
879 $this->errors[] =
'Error '.$this->db->lasterror();
880 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
886 $this->db->rollback();
921 $object->context[
'createfromclone'] =
'createfromclone';
922 $result =
$object->create($user);
927 $this->errors =
$object->errors;
928 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
931 unset(
$object->context[
'createfromclone']);
939 $this->db->rollback();
954 $sql =
'UPDATE '.MAIN_DB_PREFIX.
'ecm_files SET';
955 $sql .=
' filepath = "'.$this->db->escape($newdir).
'"';
958 $sql .=
' filepath = "'.$this->db->escape($olddir).
'"';
961 $this->db->query($sql);
977 $nofetch = !empty($params[
'nofetch']);
980 return [
'optimize' => $langs->trans(
"ShowFile")];
982 $datas[
'picto'] =
img_picto(
'', $this->picto,
'', 0, 0, 0,
'',
'paddingrightonly') .
'<u>' . $langs->trans(
"File") .
'</u>';
983 if (!empty($this->filename)) {
984 $datas[
'name'] =
'<br><b>'.$langs->trans(
'Name').
':</b> '.basename($this->filename);
986 if (!empty($this->
ref)) {
987 $datas[
'ref'] =
'<br><b>'.$langs->trans(
'HashOfFileContent').
':</b> '.$this->ref;
989 if (!empty($this->share)) {
990 $datas[
'share'] =
'<br>'.$langs->trans(
"FileSharedViaALink");
992 $datas[
'share'] =
'<br>'.$langs->trans(
"FileNotShared");
994 if (!empty($this->gen_or_uploaded)) {
995 $datas[
'gen_or_upload'] =
'<br><b>'.$langs->trans(
'GenOrUpload').
':</b> '.$this->gen_or_uploaded;
997 if (!empty($this->content)) {
998 $datas[
'content'] =
'<br>'.$langs->trans(
'FileHasAnIndexedTextContent');
1014 public function getNomUrl($withpicto = 0, $option =
'', $notooltip = 0, $maxlen = 24, $morecss =
'')
1016 global
$conf, $hookmanager, $langs;
1018 if (!empty(
$conf->dol_no_mouse_hover)) {
1026 'objecttype' => $this->element,
1027 'option' => $option,
1030 $classfortooltip =
'classfortooltip';
1033 $classfortooltip =
'classforajaxtooltip';
1034 $dataparams =
' data-params="'.dol_escape_htmltag(json_encode($params)).
'"';
1041 if ($option ==
'facture_fournisseur') {
1042 $tmppath = preg_replace(
'/^(\d+\/)?fournisseur\/facture\//',
'', $this->filepath);
1043 } elseif ($option ==
'commande_fournisseur') {
1044 $tmppath = preg_replace(
'/^(\d+\/)?fournisseur\/commande\//',
'', $this->filepath);
1045 } elseif ($option ==
'tax-vat') {
1046 $tmppath = preg_replace(
'/^(\d+\/)?tax\/vat\//',
'', $this->filepath);
1047 } elseif ($option ==
'remisecheque') {
1048 $tmppath = preg_replace(
'/^bank\/checkdeposits\//',
'', $this->filepath);
1050 if ((
int) $this->entity > 1) {
1052 $tmppath = preg_replace(
'/^\d+\/[^\/]+\//',
'', $this->filepath);
1055 $tmppath = preg_replace(
'/^[^\/]+\//',
'', $this->filepath);
1058 $url = DOL_URL_ROOT.
'/document.php?modulepart='.urlencode($option).
'&file='.urlencode($tmppath.
'/'.$this->filename).
'&entity='.((int) $this->entity);
1060 $url = DOL_URL_ROOT.
'/ecm/file_card.php?id='.$this->id;
1064 if (empty($notooltip)) {
1066 $label = $langs->trans(
"ShowFile");
1067 $linkclose .=
' alt="'.dolPrintHTMLForAttribute($label).
'"';
1069 $linkclose .= ($label ?
' title="'.dolPrintHTMLForAttribute($label).
'"' :
' title="tocomplete"');
1070 $linkclose .= $dataparams.
' class="'.$classfortooltip.
' '.($morecss ?
' '.$morecss :
'').
'"';
1072 $linkclose = ($morecss ?
' class="'.$morecss.
'"' :
'');
1075 $linkstart =
'<a href="'.$url.
'"';
1077 $linkstart .=
'target="_blank" ';
1079 $linkstart .= $linkclose.
'>';
1083 if (empty($this->filename)) {
1084 $result .= ($linkstart.img_object(($notooltip ?
'' : $label),
'label', ($notooltip ?
'' :
'class="paddingright"')).$linkend);
1086 $result .= ($linkstart.img_mime($this->filename, ($notooltip ?
'' :
dol_escape_htmltag($label, 1)), ($notooltip ?
'' :
' paddingright')).$linkend);
1089 $result .= $linkstart.$this->filename.$linkend;
1092 $hookmanager->initHooks(array($this->element .
'dao'));
1093 $parameters = array(
'id' => $this->
id,
'getnomurl' => &$result);
1094 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
1096 $result = $hookmanager->resPrint;
1098 $result .= $hookmanager->resPrint;
1139 global
$conf, $user;
1142 $this->specimen = 1;
1143 $this->label =
'0a1b2c3e4f59999999';
1145 $this->filename =
'myspecimenfilefile.pdf';
1146 $this->filepath =
'/aaa/bbb';
1147 $this->fullpath_orig =
'c:/file on my disk.pdf';
1148 $this->
description =
'This is a description of the file';
1149 $this->keywords =
'key1,key2';
1150 $this->content =
'This is the text content of the file';
1153 $this->gen_or_uploaded =
'uploaded';
1154 $this->extraparams =
'';
1155 $this->date_c = (
dol_now() - 3600 * 24 * 10);
1157 $this->fk_user_c = $user->id;
1158 $this->fk_user_m = $user->id;
1160 $this->src_object_type =
'product';
1161 $this->src_object_id = 1;
1186 public $table_element =
'ecm_files';
1199 public $fullpath_orig;
1204 public $description;
1227 public $gen_or_uploaded;
1231 public $extraparams;
1235 public $date_c =
'';
1239 public $date_m =
'';
1258 public $src_object_type;
1262 public $src_object_id;
if(! $sortfield) if(! $sortorder) $object
Parent class of all other business classes (invoices, contracts, proposals, orders,...
fetch_optionals($rowid=null, $optionsArray=null)
Function to get extra fields of an object into $this->array_options This method is in most cases call...
deleteExtraFields()
Delete all extra fields values for the current object.
insertExtraFields($trigger='', $userused=null)
Add/Update all extra fields values for the current object.
Parent class for class inheritance lines of business objects This class is useless for the moment so ...
Class to manage Dolibarr database access.
Class to manage ECM files.
initAsSpecimen()
Initialise object with example values Id must be 0 if object instance is a specimen.
getTooltipContentArray($params)
getTooltipContentArray
getLibStatut($mode=0)
Return the label of the status.
createFromClone(User $user, $fromid)
Load an object from its id and create a new one in database.
update(User $user, $notrigger=0)
Update object into database.
getNomUrl($withpicto=0, $option='', $notooltip=0, $maxlen=24, $morecss='')
Return a link to the object card (with optionally the picto)
fetch($id, $ref='', $relativepath='', $hashoffile='', $hashforshare='', $src_object_type='', $src_object_id=0, $entity=null)
Load object in memory from the database.
__construct(DoliDB $db)
Constructor.
fetchAll($sortorder='', $sortfield='', $limit=0, $offset=0, $filter='', $filtermode='AND')
Load object in memory from the database.
static LibStatut($status, $mode=0)
Return the status.
updateAfterRename($olddir, $newdir)
updateAfterRename update entries in ecmfiles if exist to avoid losing info
create(User $user, $notrigger=0)
Create object into database.
Class of an index line of a document.
Class to manage Dolibarr users.
print $langs trans("Ref").' m titre as m m statut as status
Or an array listing all the potential status of the object: array: int of the status => translated la...
print $script_file $mode $langs defaultlang(is_numeric($duration_value) ? " delay=". $duration_value :"").(is_numeric($duration_value2) ? " after cd cd cd description as description
Only used if Module[ID]Desc translation string is not found.
dol_now($mode='gmt')
Return date for now.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
forgeSQLFromUniversalSearchCriteria($filter, &$errorstr='', $noand=0, $nopar=0, $noerror=0)
forgeSQLFromUniversalSearchCriteria
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '...' if string larger than length.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
dol_hash($chain, $type='0', $nosalt=0, $mode=0)
Returns a hash (non reversible encryption) of a string.