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';
88 public $fullpath_orig;
118 public $gen_or_uploaded;
153 public $src_object_type;
158 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'"),
219 if (isset($this->
ref)) {
220 $this->
ref = trim($this->
ref);
222 if (isset($this->label)) {
223 $this->label = trim($this->label);
225 if (isset($this->share)) {
226 $this->share = trim($this->share);
228 if (isset($this->entity)) {
229 $this->entity = (int) $this->entity;
231 if (isset($this->filename)) {
232 $this->filename = preg_replace(
'/\.noexe$/',
'', trim($this->filename));
234 if (isset($this->filepath)) {
235 $this->filepath = trim($this->filepath);
236 $this->filepath = preg_replace(
'/[\\/]+$/',
'', $this->filepath);
238 if (isset($this->fullpath_orig)) {
239 $this->fullpath_orig = trim($this->fullpath_orig);
244 if (isset($this->keywords)) {
245 $this->keywords = trim($this->keywords);
247 if (isset($this->cover)) {
248 $this->cover = trim($this->cover);
250 if (isset($this->gen_or_uploaded)) {
251 $this->gen_or_uploaded = trim($this->gen_or_uploaded);
253 if (isset($this->extraparams)) {
254 $this->extraparams = trim($this->extraparams);
256 if (isset($this->fk_user_c)) {
257 $this->fk_user_c = (int) $this->fk_user_c;
259 if (isset($this->fk_user_m)) {
260 $this->fk_user_m = (int) $this->fk_user_m;
262 if (isset($this->acl)) {
263 $this->acl = trim($this->acl);
265 if (isset($this->src_object_type)) {
266 $this->src_object_type = trim($this->src_object_type);
268 if (empty($this->date_c)) {
271 if (empty($this->date_m)) {
276 if (empty($this->
ref)) {
277 include_once DOL_DOCUMENT_ROOT.
'/core/lib/security.lib.php';
278 $this->
ref =
dol_hash($this->filepath.
'/'.$this->filename,
'3');
284 $sql =
"SELECT MAX(position) as maxposition FROM ".MAIN_DB_PREFIX.$this->table_element;
285 $sql .=
" WHERE filepath ='".$this->db->escape($this->filepath).
"'";
287 $resql = $this->db->query($sql);
289 $obj = $this->db->fetch_object($resql);
290 $maxposition = (int) $obj->maxposition;
292 $this->errors[] =
'Error '.$this->db->lasterror();
297 $maxposition = $this->position;
301 if (empty($this->filename) || empty($this->filepath)) {
302 $this->errors[] =
'Bad property filename or filepath';
305 if (!isset($this->entity)) {
306 $this->entity =
$conf->entity;
311 $sql =
'INSERT INTO '.MAIN_DB_PREFIX.$this->table_element.
'(';
318 $sql .=
'fullpath_orig,';
319 $sql .=
'description,';
326 $sql .=
'gen_or_uploaded,';
327 $sql .=
'extraparams,';
330 $sql .=
'fk_user_c,';
331 $sql .=
'fk_user_m,';
333 $sql .=
'src_object_type,';
334 $sql .=
'src_object_id';
335 $sql .=
') VALUES (';
336 $sql .=
" '".$this->db->escape($this->
ref).
"', ";
337 $sql .=
' '.(!isset($this->label) ?
'NULL' :
"'".$this->db->escape($this->label).
"'").
',';
338 $sql .=
' '.(!isset($this->share) ?
'NULL' :
"'".$this->db->escape($this->share).
"'").
',';
339 $sql .=
' '.((int) $this->entity).
',';
340 $sql .=
' '.(!isset($this->filename) ?
'NULL' :
"'".$this->db->escape($this->filename).
"'").
',';
341 $sql .=
' '.(!isset($this->filepath) ?
'NULL' :
"'".$this->db->escape($this->filepath).
"'").
',';
342 $sql .=
' '.(!isset($this->fullpath_orig) ?
'NULL' :
"'".$this->db->escape($this->fullpath_orig).
"'").
',';
344 $sql .=
' '.(!isset($this->keywords) ?
'NULL' :
"'".$this->db->escape($this->keywords).
"'").
',';
346 $sql .=
' '.(!isset($this->content) ?
'NULL' :
"'".$this->db->escape($this->content).
"'").
',';
348 $sql .=
' '.(!isset($this->cover) ?
'NULL' :
"'".$this->db->escape($this->cover).
"'").
',';
349 $sql .=
' '.((int) $maxposition).
',';
350 $sql .=
' '.(!isset($this->gen_or_uploaded) ?
'NULL' :
"'".$this->db->escape($this->gen_or_uploaded).
"'").
',';
351 $sql .=
' '.(!isset($this->extraparams) ?
'NULL' :
"'".$this->db->escape($this->extraparams).
"'").
',';
352 $sql .=
" '".$this->db->idate($this->date_c).
"',";
353 $sql .=
' '.(!isset($this->date_m) ||
dol_strlen((
string) $this->date_m) == 0 ?
'NULL' :
"'".$this->db->idate($this->date_m).
"'").
',';
354 $sql .=
' '.(!isset($this->fk_user_c) ? $user->id : $this->fk_user_c).
',';
355 $sql .=
' '.(!isset($this->fk_user_m) ?
'NULL' : $this->fk_user_m).
',';
356 $sql .=
' '.(!isset($this->acl) ?
'NULL' :
"'".$this->db->escape($this->acl).
"'").
',';
357 $sql .=
' '.(!isset($this->src_object_type) ?
'NULL' :
"'".$this->db->escape($this->src_object_type).
"'").
',';
358 $sql .=
' '.(!isset($this->src_object_id) ?
'NULL' : $this->src_object_id);
363 $resql = $this->db->query($sql);
366 if ($this->db->lasterrno() ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
367 $this->errors[] =
'Error DB_ERROR_RECORD_ALREADY_EXISTS : '.$this->db->lasterror();
369 $this->errors[] =
'Error '.$this->db->lasterror();
371 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
375 $this->
id = $this->db->last_insert_id(MAIN_DB_PREFIX.$this->table_element);
381 $result = $this->
call_trigger(strtoupper(get_class($this)).
'_CREATE', $user);
391 $this->db->rollback();
413 public function fetch($id, $ref =
'', $relativepath =
'', $hashoffile =
'', $hashforshare =
'', $src_object_type =
'', $src_object_id = 0)
424 $sql .=
" t.entity,";
425 $sql .=
" t.filename,";
426 $sql .=
" t.filepath,";
427 $sql .=
" t.fullpath_orig,";
428 $sql .=
" t.description,";
429 $sql .=
" t.keywords,";
431 $sql .=
" t.content,";
434 $sql .=
" t.position,";
435 $sql .=
" t.gen_or_uploaded,";
436 $sql .=
" t.extraparams,";
437 $sql .=
" t.date_c,";
438 $sql .=
" t.tms as date_m,";
439 $sql .=
" t.fk_user_c,";
440 $sql .=
" t.fk_user_m,";
441 $sql .=
' t.note_private,';
442 $sql .=
' t.note_public,';
444 $sql .=
" t.src_object_type,";
445 $sql .=
" t.src_object_id";
446 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
447 $sql .=
' WHERE 1 = 1';
454 $relativepathwithnoexe = preg_replace(
'/\.noexe$/',
'', $relativepath);
455 $sql .=
" AND t.filepath = '".$this->db->escape(dirname($relativepath)).
"'";
456 $filename = basename($relativepathwithnoexe);
457 if ($filename !=
'*') {
458 $sql .=
" AND t.filename = '".$this->db->escape($filename).
"'";
460 $sql .=
" AND t.entity = ".$conf->entity;
464 $sql .=
" AND t.ref = '".$this->db->escape($ref).
"'";
465 $sql .=
" AND t.entity = ".$conf->entity;
468 if (!empty($hashoffile)) {
469 $sql .=
" AND t.label = '".$this->db->escape($hashoffile).
"'";
470 $sql .=
" AND t.entity = ".$conf->entity;
473 if (!empty($hashforshare)) {
474 if ($hashforshare !=
'shared') {
475 $sql .=
" AND t.share = '".$this->db->escape($hashforshare).
"'";
477 $sql .=
" AND t.share IS NOT NULL AND t.share <> ''";
482 if ($src_object_type && $src_object_id) {
483 $sql .=
" AND t.src_object_type = '".$this->db->escape($src_object_type).
"' AND t.src_object_id = ".((int) $src_object_id);
484 $sql .=
" AND t.entity = ".((int)
$conf->entity);
487 if ($id > 0 || empty($filterfound)) {
488 $sql .=
' AND t.rowid = '.((int) $id);
492 $this->db->plimit(1);
493 $this->db->order(
't.rowid',
'ASC');
495 $resql = $this->db->query($sql);
497 $numrows = $this->db->num_rows($resql);
499 $obj = $this->db->fetch_object($resql);
501 $this->
id = $obj->rowid;
502 $this->
ref = $obj->ref;
503 $this->label = $obj->label;
504 $this->share = $obj->share;
505 $this->entity = $obj->entity;
506 $this->filename = $obj->filename;
507 $this->filepath = $obj->filepath;
508 $this->fullpath_orig = $obj->fullpath_orig;
510 $this->keywords = $obj->keywords;
512 $this->content = $obj->content;
514 $this->cover = $obj->cover;
516 $this->gen_or_uploaded = $obj->gen_or_uploaded;
517 $this->extraparams = $obj->extraparams;
518 $this->date_c = $this->db->jdate($obj->date_c);
519 $this->date_m = $this->db->jdate($obj->date_m);
520 $this->fk_user_c = $obj->fk_user_c;
521 $this->fk_user_m = $obj->fk_user_m;
522 $this->note_private = $obj->note_private;
523 $this->note_public = $obj->note_public;
524 $this->acl = $obj->acl;
525 $this->src_object_type = $obj->src_object_type;
526 $this->src_object_id = $obj->src_object_id;
535 $this->db->free($resql);
543 $this->errors[] =
'Error '.$this->db->lasterror();
544 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
561 public function fetchAll($sortorder =
'', $sortfield =
'', $limit = 0, $offset = 0, $filter =
'', $filtermode =
'AND')
569 $sql .=
" t.entity,";
570 $sql .=
" t.filename,";
571 $sql .=
" t.filepath,";
572 $sql .=
" t.fullpath_orig,";
573 $sql .=
" t.description,";
574 $sql .=
" t.keywords,";
576 $sql .=
" t.content,";
579 $sql .=
" t.position,";
580 $sql .=
" t.gen_or_uploaded,";
581 $sql .=
" t.extraparams,";
582 $sql .=
" t.date_c,";
583 $sql .=
" t.tms as date_m,";
584 $sql .=
" t.fk_user_c,";
585 $sql .=
" t.fk_user_m,";
587 $sql .=
" t.src_object_type,";
588 $sql .=
" t.src_object_id";
589 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
590 $sql .=
' WHERE 1 = 1';
593 if (is_array($filter)) {
595 if (count($filter) > 0) {
596 foreach ($filter as $key => $value) {
597 if ($key ==
't.src_object_id') {
598 $sqlwhere[] = $this->db->sanitize($key).
" = ".((int) $value);
600 $sqlwhere[] = $this->db->sanitize($key).
" LIKE '%".$this->db->escape($this->db->escapeforlike($value)).
"%'";
604 if (count($sqlwhere) > 0) {
605 $sql .=
' AND '.implode(
' '.$this->db->escape($filtermode).
' ', $sqlwhere);
615 $this->errors[] = $errormessage;
616 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
624 if (!empty($sortfield)) {
625 $sql .= $this->db->order($sortfield, $sortorder);
627 if (!empty($limit)) {
628 $sql .= $this->db->plimit($limit, $offset);
631 $this->lines = array();
633 $resql = $this->db->query($sql);
635 $num = $this->db->num_rows($resql);
637 while ($obj = $this->db->fetch_object($resql)) {
640 $line->id = $obj->rowid;
641 $line->ref = $obj->rowid;
642 $line->label = $obj->label;
643 $line->share = $obj->share;
644 $line->entity = $obj->entity;
645 $line->filename = $obj->filename;
646 $line->filepath = $obj->filepath;
647 $line->fullpath_orig = $obj->fullpath_orig;
648 $line->description = $obj->description;
649 $line->keywords = $obj->keywords;
651 $line->content = $obj->content;
653 $line->cover = $obj->cover;
654 $line->position = $obj->position;
655 $line->gen_or_uploaded = $obj->gen_or_uploaded;
656 $line->extraparams = $obj->extraparams;
657 $line->date_c = $this->db->jdate($obj->date_c);
658 $line->date_m = $this->db->jdate($obj->date_m);
659 $line->fk_user_c = $obj->fk_user_c;
660 $line->fk_user_m = $obj->fk_user_m;
661 $line->acl = $obj->acl;
662 $line->src_object_type = $obj->src_object_type;
663 $line->src_object_id = $obj->src_object_id;
664 $this->lines[] = $line;
666 $this->db->free($resql);
670 $this->errors[] =
'Error '.$this->db->lasterror();
671 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
694 if (isset($this->
ref)) {
695 $this->
ref = trim($this->
ref);
697 if (isset($this->label)) {
698 $this->label = trim($this->label);
700 if (isset($this->share)) {
701 $this->share = trim($this->share);
703 if (isset($this->entity)) {
704 $this->entity = (int) $this->entity;
706 if (isset($this->filename)) {
707 $this->filename = preg_replace(
'/\.noexe$/',
'', trim($this->filename));
709 if (isset($this->filepath)) {
710 $this->filepath = trim($this->filepath);
711 $this->filepath = preg_replace(
'/[\\/]+$/',
'', $this->filepath);
713 if (isset($this->fullpath_orig)) {
714 $this->fullpath_orig = trim($this->fullpath_orig);
719 if (isset($this->keywords)) {
720 $this->keywords = trim($this->keywords);
722 if (isset($this->cover)) {
723 $this->cover = trim($this->cover);
725 if (isset($this->gen_or_uploaded)) {
726 $this->gen_or_uploaded = trim($this->gen_or_uploaded);
728 if (isset($this->extraparams)) {
729 $this->extraparams = trim($this->extraparams);
731 if (isset($this->fk_user_m)) {
732 $this->fk_user_m = (int) $this->fk_user_m;
734 if (isset($this->acl)) {
735 $this->acl = trim($this->acl);
737 if (isset($this->src_object_type)) {
738 $this->src_object_type = trim($this->src_object_type);
745 $sql =
'UPDATE '.MAIN_DB_PREFIX.$this->table_element.
' SET';
746 $sql .=
" ref = '".$this->db->escape(
dol_hash($this->filepath.
"/".$this->filename,
'3')).
"',";
747 $sql .=
' label = '.(isset($this->label) ?
"'".$this->db->escape($this->label).
"'" :
"null").
',';
748 $sql .=
' share = '.(!empty($this->share) ?
"'".$this->db->escape($this->share).
"'" :
"null").
',';
749 $sql .=
' entity = '.(isset($this->entity) ? $this->entity :
$conf->entity).
',';
750 $sql .=
' filename = '.(isset($this->filename) ?
"'".$this->db->escape($this->filename).
"'" :
"null").
',';
751 $sql .=
' filepath = '.(isset($this->filepath) ?
"'".$this->db->escape($this->filepath).
"'" :
"null").
',';
752 $sql .=
' fullpath_orig = '.(isset($this->fullpath_orig) ?
"'".$this->db->escape($this->fullpath_orig).
"'" :
"null").
',';
753 $sql .=
' description = '.(isset($this->
description) ?
"'".$this->db->escape($this->
description).
"'" :
"null").
',';
754 $sql .=
' keywords = '.(isset($this->keywords) ?
"'".$this->db->escape($this->keywords).
"'" :
"null").
',';
756 $sql .=
' content = '.(isset($this->content) ?
"'".$this->db->escape($this->content).
"'" :
"null").
',';
758 $sql .=
' cover = '.(isset($this->cover) ?
"'".$this->db->escape($this->cover).
"'" :
"null").
',';
759 $sql .=
' position = '.(isset($this->
position) ? $this->db->escape($this->
position) :
"0").
',';
760 $sql .=
' gen_or_uploaded = '.(isset($this->gen_or_uploaded) ?
"'".$this->db->escape($this->gen_or_uploaded).
"'" :
"null").
',';
761 $sql .=
' extraparams = '.(isset($this->extraparams) ?
"'".$this->db->escape($this->extraparams).
"'" :
"null").
',';
762 $sql .=
' date_c = '.(!isset($this->date_c) ||
dol_strlen($this->date_c) != 0 ?
"'".$this->db->idate($this->date_c).
"'" :
'null').
',';
764 $sql .=
' fk_user_m = '.($this->fk_user_m > 0 ? $this->fk_user_m : $user->id).
',';
765 $sql .=
' acl = '.(isset($this->acl) ?
"'".$this->db->escape($this->acl).
"'" :
"null").
',';
766 $sql .=
' src_object_id = '.($this->src_object_id > 0 ? $this->src_object_id :
"null").
',';
767 $sql .=
' src_object_type = '.(isset($this->src_object_type) ?
"'".$this->db->escape($this->src_object_type).
"'" :
"null");
768 $sql .=
' WHERE rowid='.((int) $this->
id);
772 $resql = $this->db->query($sql);
775 $this->errors[] =
'Error '.$this->db->lasterror();
776 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
788 if (!$error && !$notrigger) {
790 $result = $this->
call_trigger(strtoupper(get_class($this)).
'_MODIFY', $user);
799 $this->db->rollback();
816 public function delete(
User $user, $notrigger = 0)
827 $result = $this->
call_trigger(strtoupper(get_class($this)).
'_DELETE', $user);
838 dol_syslog(get_class($this).
"::delete error ".$this->error, LOG_ERR);
843 $sql =
'DELETE FROM '.MAIN_DB_PREFIX.$this->table_element;
844 $sql .=
' WHERE rowid='.((int) $this->
id);
846 $resql = $this->db->query($sql);
849 $this->errors[] =
'Error '.$this->db->lasterror();
850 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
856 $this->db->rollback();
891 $object->context[
'createfromclone'] =
'createfromclone';
892 $result =
$object->create($user);
897 $this->errors =
$object->errors;
898 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
901 unset(
$object->context[
'createfromclone']);
909 $this->db->rollback();
924 $sql =
'UPDATE '.MAIN_DB_PREFIX.
'ecm_files SET';
925 $sql .=
' filepath = "'.$this->db->escape($newdir).
'"';
928 $sql .=
' filepath = "'.$this->db->escape($olddir).
'"';
931 $this->db->query($sql);
947 $nofetch = !empty($params[
'nofetch']);
950 return [
'optimize' => $langs->trans(
"ShowFile")];
952 $datas[
'picto'] =
img_picto(
'', $this->picto,
'', 0, 0, 0,
'',
'paddingrightonly') .
'<u>' . $langs->trans(
"File") .
'</u>';
953 if (!empty($this->filename)) {
954 $datas[
'name'] =
'<br><b>'.$langs->trans(
'Name').
':</b> '.basename($this->filename);
956 if (!empty($this->
ref)) {
957 $datas[
'ref'] =
'<br><b>'.$langs->trans(
'HashOfFileContent').
':</b> '.$this->ref;
959 if (!empty($this->share)) {
960 $datas[
'share'] =
'<br>'.$langs->trans(
"FileSharedViaALink");
962 $datas[
'share'] =
'<br>'.$langs->trans(
"FileNotShared");
964 if (!empty($this->gen_or_uploaded)) {
965 $datas[
'gen_or_upload'] =
'<br><b>'.$langs->trans(
'GenOrUpload').
':</b> '.$this->gen_or_uploaded;
967 if (!empty($this->content)) {
968 $datas[
'content'] =
'<br>'.$langs->trans(
'FileHasAnIndexedTextContent');
984 public function getNomUrl($withpicto = 0, $option =
'', $notooltip = 0, $maxlen = 24, $morecss =
'')
986 global
$conf, $hookmanager, $langs;
988 if (!empty(
$conf->dol_no_mouse_hover)) {
996 'objecttype' => $this->element,
1000 $classfortooltip =
'classfortooltip';
1003 $classfortooltip =
'classforajaxtooltip';
1004 $dataparams =
' data-params="'.dol_escape_htmltag(json_encode($params)).
'"';
1011 $url = DOL_URL_ROOT.
'/document.php?modulepart='.$option.
'&file='.urlencode(preg_replace(
'/^[^\/]+\//',
'', $this->filepath).
'/'.$this->filename).
'&entity='.$this->entity;
1013 $url = DOL_URL_ROOT.
'/ecm/file_card.php?id='.$this->id;
1017 if (empty($notooltip)) {
1019 $label = $langs->trans(
"ShowFile");
1020 $linkclose .=
' alt="'.dol_escape_htmltag($label, 1).
'"';
1022 $linkclose .= ($label ?
' title="'.dol_escape_htmltag($label, 1).
'"' :
' title="tocomplete"');
1023 $linkclose .= $dataparams.
' class="'.$classfortooltip.
' '.($morecss ?
' '.$morecss :
'').
'"';
1025 $linkclose = ($morecss ?
' class="'.$morecss.
'"' :
'');
1028 $linkstart =
'<a href="'.$url.
'"';
1030 $linkstart .=
'target="_blank" ';
1032 $linkstart .= $linkclose.
'>';
1036 if (empty($this->filename)) {
1037 $result .= ($linkstart.img_object(($notooltip ?
'' : $label),
'label', ($notooltip ?
'' :
'class="paddingright"')).$linkend);
1039 $result .= ($linkstart.img_mime($this->filename, ($notooltip ?
'' :
dol_escape_htmltag($label, 1)), ($notooltip ?
'' :
' paddingright')).$linkend);
1041 if ($withpicto != 2) {
1045 $result .= $linkstart.$this->filename.$linkend;
1048 $hookmanager->initHooks(array($this->element .
'dao'));
1049 $parameters = array(
'id' => $this->
id,
'getnomurl' => &$result);
1050 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
1052 $result = $hookmanager->resPrint;
1054 $result .= $hookmanager->resPrint;
1095 global
$conf, $user;
1098 $this->specimen = 1;
1099 $this->label =
'0a1b2c3e4f59999999';
1101 $this->filename =
'myspecimenfilefile.pdf';
1102 $this->filepath =
'/aaa/bbb';
1103 $this->fullpath_orig =
'c:/file on my disk.pdf';
1104 $this->
description =
'This is a description of the file';
1105 $this->keywords =
'key1,key2';
1106 $this->content =
'This is the text content of the file';
1109 $this->gen_or_uploaded =
'uploaded';
1110 $this->extraparams =
'';
1111 $this->date_c = (
dol_now() - 3600 * 24 * 10);
1113 $this->fk_user_c = $user->id;
1114 $this->fk_user_m = $user->id;
1116 $this->src_object_type =
'product';
1117 $this->src_object_id = 1;
1150 public $fullpath_orig;
1155 public $description;
1178 public $gen_or_uploaded;
1182 public $extraparams;
1186 public $date_c =
'';
1190 public $date_m =
'';
1209 public $src_object_type;
1213 public $src_object_id;
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $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.
call_trigger($triggerName, $user)
Call trigger based on this instance.
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)
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.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
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
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
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...
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
dol_hash($chain, $type='0', $nosalt=0)
Returns a hash (non reversible encryption) of a string.