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();
414 public function fetch($id, $ref =
'', $relativepath =
'', $hashoffile =
'', $hashforshare =
'', $src_object_type =
'', $src_object_id = 0, $entity = 0)
425 $sql .=
" t.entity,";
426 $sql .=
" t.filename,";
427 $sql .=
" t.filepath,";
428 $sql .=
" t.fullpath_orig,";
429 $sql .=
" t.description,";
430 $sql .=
" t.keywords,";
432 $sql .=
" t.content,";
435 $sql .=
" t.position,";
436 $sql .=
" t.gen_or_uploaded,";
437 $sql .=
" t.extraparams,";
438 $sql .=
" t.date_c,";
439 $sql .=
" t.tms as date_m,";
440 $sql .=
" t.fk_user_c,";
441 $sql .=
" t.fk_user_m,";
442 $sql .=
' t.note_private,';
443 $sql .=
' t.note_public,';
445 $sql .=
" t.src_object_type,";
446 $sql .=
" t.src_object_id";
447 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
448 $sql .=
' WHERE 1 = 1';
455 $relativepathwithnoexe = preg_replace(
'/\.noexe$/',
'', $relativepath);
456 $sql .=
" AND t.filepath = '".$this->db->escape(dirname($relativepath)).
"'";
457 $filename = basename($relativepathwithnoexe);
458 if ($filename !=
'*') {
459 $sql .=
" AND t.filename = '".$this->db->escape($filename).
"'";
461 if (! empty($entity)) {
462 $sql .=
" AND t.entity = " . (int) $entity;
464 $sql .=
" AND t.entity = " .
$conf->entity;
469 $sql .=
" AND t.ref = '".$this->db->escape($ref).
"'";
470 if (! empty($entity)) {
471 $sql .=
" AND t.entity = " . (int) $entity;
473 $sql .=
" AND t.entity = " .
$conf->entity;
477 if (!empty($hashoffile)) {
478 $sql .=
" AND t.label = '".$this->db->escape($hashoffile).
"'";
479 if (! empty($entity)) {
480 $sql .=
" AND t.entity = " . (int) $entity;
482 $sql .=
" AND t.entity = " .
$conf->entity;
486 if (!empty($hashforshare)) {
487 if ($hashforshare !=
'shared') {
488 $sql .=
" AND t.share = '".$this->db->escape($hashforshare).
"'";
490 $sql .=
" AND t.share IS NOT NULL AND t.share <> ''";
495 if ($src_object_type && $src_object_id) {
496 $sql .=
" AND t.src_object_type = '".$this->db->escape($src_object_type).
"' AND t.src_object_id = ".((int) $src_object_id);
497 if (! empty($entity)) {
498 $sql .=
" AND t.entity = " . (int) $entity;
500 $sql .=
" AND t.entity = " .
$conf->entity;
504 if ($id > 0 || empty($filterfound)) {
505 $sql .=
' AND t.rowid = '.((int) $id);
509 $this->db->plimit(1);
510 $this->db->order(
't.rowid',
'ASC');
512 $resql = $this->db->query($sql);
514 $numrows = $this->db->num_rows($resql);
516 $obj = $this->db->fetch_object($resql);
518 $this->
id = $obj->rowid;
519 $this->
ref = $obj->ref;
520 $this->label = $obj->label;
521 $this->share = $obj->share;
522 $this->entity = $obj->entity;
523 $this->filename = $obj->filename;
524 $this->filepath = $obj->filepath;
525 $this->fullpath_orig = $obj->fullpath_orig;
527 $this->keywords = $obj->keywords;
529 $this->content = $obj->content;
531 $this->cover = $obj->cover;
533 $this->gen_or_uploaded = $obj->gen_or_uploaded;
534 $this->extraparams = $obj->extraparams;
535 $this->date_c = $this->db->jdate($obj->date_c);
536 $this->date_m = $this->db->jdate($obj->date_m);
537 $this->fk_user_c = $obj->fk_user_c;
538 $this->fk_user_m = $obj->fk_user_m;
539 $this->note_private = $obj->note_private;
540 $this->note_public = $obj->note_public;
541 $this->acl = $obj->acl;
542 $this->src_object_type = $obj->src_object_type;
543 $this->src_object_id = $obj->src_object_id;
552 $this->db->free($resql);
560 $this->errors[] =
'Error '.$this->db->lasterror();
561 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
578 public function fetchAll($sortorder =
'', $sortfield =
'', $limit = 0, $offset = 0, $filter =
'', $filtermode =
'AND')
586 $sql .=
" t.entity,";
587 $sql .=
" t.filename,";
588 $sql .=
" t.filepath,";
589 $sql .=
" t.fullpath_orig,";
590 $sql .=
" t.description,";
591 $sql .=
" t.keywords,";
593 $sql .=
" t.content,";
596 $sql .=
" t.position,";
597 $sql .=
" t.gen_or_uploaded,";
598 $sql .=
" t.extraparams,";
599 $sql .=
" t.date_c,";
600 $sql .=
" t.tms as date_m,";
601 $sql .=
" t.fk_user_c,";
602 $sql .=
" t.fk_user_m,";
604 $sql .=
" t.src_object_type,";
605 $sql .=
" t.src_object_id";
606 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
607 $sql .=
' WHERE 1 = 1';
610 if (is_array($filter)) {
612 if (count($filter) > 0) {
613 foreach ($filter as $key => $value) {
614 if ($key ==
't.src_object_id') {
615 $sqlwhere[] = $this->db->sanitize($key).
" = ".((int) $value);
617 $sqlwhere[] = $this->db->sanitize($key).
" LIKE '%".$this->db->escape($this->db->escapeforlike($value)).
"%'";
621 if (count($sqlwhere) > 0) {
622 $sql .=
' AND '.implode(
' '.$this->db->escape($filtermode).
' ', $sqlwhere);
632 $this->errors[] = $errormessage;
633 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
641 if (!empty($sortfield)) {
642 $sql .= $this->db->order($sortfield, $sortorder);
644 if (!empty($limit)) {
645 $sql .= $this->db->plimit($limit, $offset);
648 $this->lines = array();
650 $resql = $this->db->query($sql);
652 $num = $this->db->num_rows($resql);
654 while ($obj = $this->db->fetch_object($resql)) {
657 $line->id = $obj->rowid;
658 $line->ref = $obj->rowid;
659 $line->label = $obj->label;
660 $line->share = $obj->share;
661 $line->entity = $obj->entity;
662 $line->filename = $obj->filename;
663 $line->filepath = $obj->filepath;
664 $line->fullpath_orig = $obj->fullpath_orig;
665 $line->description = $obj->description;
666 $line->keywords = $obj->keywords;
668 $line->content = $obj->content;
670 $line->cover = $obj->cover;
671 $line->position = $obj->position;
672 $line->gen_or_uploaded = $obj->gen_or_uploaded;
673 $line->extraparams = $obj->extraparams;
674 $line->date_c = $this->db->jdate($obj->date_c);
675 $line->date_m = $this->db->jdate($obj->date_m);
676 $line->fk_user_c = $obj->fk_user_c;
677 $line->fk_user_m = $obj->fk_user_m;
678 $line->acl = $obj->acl;
679 $line->src_object_type = $obj->src_object_type;
680 $line->src_object_id = $obj->src_object_id;
681 $this->lines[] = $line;
683 $this->db->free($resql);
687 $this->errors[] =
'Error '.$this->db->lasterror();
688 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
711 if (isset($this->
ref)) {
712 $this->
ref = trim($this->
ref);
714 if (isset($this->label)) {
715 $this->label = trim($this->label);
717 if (isset($this->share)) {
718 $this->share = trim($this->share);
720 if (isset($this->entity)) {
721 $this->entity = (int) $this->entity;
723 if (isset($this->filename)) {
724 $this->filename = preg_replace(
'/\.noexe$/',
'', trim($this->filename));
726 if (isset($this->filepath)) {
727 $this->filepath = trim($this->filepath);
728 $this->filepath = preg_replace(
'/[\\/]+$/',
'', $this->filepath);
730 if (isset($this->fullpath_orig)) {
731 $this->fullpath_orig = trim($this->fullpath_orig);
736 if (isset($this->keywords)) {
737 $this->keywords = trim($this->keywords);
739 if (isset($this->cover)) {
740 $this->cover = trim($this->cover);
742 if (isset($this->gen_or_uploaded)) {
743 $this->gen_or_uploaded = trim($this->gen_or_uploaded);
745 if (isset($this->extraparams)) {
746 $this->extraparams = trim($this->extraparams);
748 if (isset($this->fk_user_m)) {
749 $this->fk_user_m = (int) $this->fk_user_m;
751 if (isset($this->acl)) {
752 $this->acl = trim($this->acl);
754 if (isset($this->src_object_type)) {
755 $this->src_object_type = trim($this->src_object_type);
762 $sql =
'UPDATE '.MAIN_DB_PREFIX.$this->table_element.
' SET';
763 $sql .=
" ref = '".$this->db->escape(
dol_hash($this->filepath.
"/".$this->filename,
'3')).
"',";
764 $sql .=
' label = '.(isset($this->label) ?
"'".$this->db->escape($this->label).
"'" :
"null").
',';
765 $sql .=
' share = '.(!empty($this->share) ?
"'".$this->db->escape($this->share).
"'" :
"null").
',';
766 $sql .=
' entity = '.(isset($this->entity) ? $this->entity :
$conf->entity).
',';
767 $sql .=
' filename = '.(isset($this->filename) ?
"'".$this->db->escape($this->filename).
"'" :
"null").
',';
768 $sql .=
' filepath = '.(isset($this->filepath) ?
"'".$this->db->escape($this->filepath).
"'" :
"null").
',';
769 $sql .=
' fullpath_orig = '.(isset($this->fullpath_orig) ?
"'".$this->db->escape($this->fullpath_orig).
"'" :
"null").
',';
770 $sql .=
' description = '.(isset($this->
description) ?
"'".$this->db->escape($this->
description).
"'" :
"null").
',';
771 $sql .=
' keywords = '.(isset($this->keywords) ?
"'".$this->db->escape($this->keywords).
"'" :
"null").
',';
773 $sql .=
' content = '.(isset($this->content) ?
"'".$this->db->escape($this->content).
"'" :
"null").
',';
775 $sql .=
' cover = '.(isset($this->cover) ?
"'".$this->db->escape($this->cover).
"'" :
"null").
',';
776 $sql .=
' position = '.(isset($this->
position) ? $this->db->escape($this->
position) :
"0").
',';
777 $sql .=
' gen_or_uploaded = '.(isset($this->gen_or_uploaded) ?
"'".$this->db->escape($this->gen_or_uploaded).
"'" :
"null").
',';
778 $sql .=
' extraparams = '.(isset($this->extraparams) ?
"'".$this->db->escape($this->extraparams).
"'" :
"null").
',';
779 $sql .=
' date_c = '.(!isset($this->date_c) ||
dol_strlen($this->date_c) != 0 ?
"'".$this->db->idate($this->date_c).
"'" :
'null').
',';
781 $sql .=
' fk_user_m = '.($this->fk_user_m > 0 ? $this->fk_user_m : $user->id).
',';
782 $sql .=
' acl = '.(isset($this->acl) ?
"'".$this->db->escape($this->acl).
"'" :
"null").
',';
783 $sql .=
' src_object_id = '.($this->src_object_id > 0 ? $this->src_object_id :
"null").
',';
784 $sql .=
' src_object_type = '.(isset($this->src_object_type) ?
"'".$this->db->escape($this->src_object_type).
"'" :
"null");
785 $sql .=
' WHERE rowid='.((int) $this->
id);
788 $resql = $this->db->query($sql);
791 $this->errors[] =
'Error '.$this->db->lasterror();
792 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
804 if (!$error && !$notrigger) {
806 $result = $this->
call_trigger(strtoupper(get_class($this)).
'_MODIFY', $user);
815 $this->db->rollback();
832 public function delete(
User $user, $notrigger = 0)
843 $result = $this->
call_trigger(strtoupper(get_class($this)).
'_DELETE', $user);
854 dol_syslog(get_class($this).
"::delete error ".$this->error, LOG_ERR);
859 $sql =
'DELETE FROM '.MAIN_DB_PREFIX.$this->table_element;
860 $sql .=
' WHERE rowid='.((int) $this->
id);
862 $resql = $this->db->query($sql);
865 $this->errors[] =
'Error '.$this->db->lasterror();
866 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
872 $this->db->rollback();
907 $object->context[
'createfromclone'] =
'createfromclone';
908 $result =
$object->create($user);
913 $this->errors =
$object->errors;
914 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
917 unset(
$object->context[
'createfromclone']);
925 $this->db->rollback();
940 $sql =
'UPDATE '.MAIN_DB_PREFIX.
'ecm_files SET';
941 $sql .=
' filepath = "'.$this->db->escape($newdir).
'"';
944 $sql .=
' filepath = "'.$this->db->escape($olddir).
'"';
947 $this->db->query($sql);
963 $nofetch = !empty($params[
'nofetch']);
966 return [
'optimize' => $langs->trans(
"ShowFile")];
968 $datas[
'picto'] =
img_picto(
'', $this->picto,
'', 0, 0, 0,
'',
'paddingrightonly') .
'<u>' . $langs->trans(
"File") .
'</u>';
969 if (!empty($this->filename)) {
970 $datas[
'name'] =
'<br><b>'.$langs->trans(
'Name').
':</b> '.basename($this->filename);
972 if (!empty($this->
ref)) {
973 $datas[
'ref'] =
'<br><b>'.$langs->trans(
'HashOfFileContent').
':</b> '.$this->ref;
975 if (!empty($this->share)) {
976 $datas[
'share'] =
'<br>'.$langs->trans(
"FileSharedViaALink");
978 $datas[
'share'] =
'<br>'.$langs->trans(
"FileNotShared");
980 if (!empty($this->gen_or_uploaded)) {
981 $datas[
'gen_or_upload'] =
'<br><b>'.$langs->trans(
'GenOrUpload').
':</b> '.$this->gen_or_uploaded;
983 if (!empty($this->content)) {
984 $datas[
'content'] =
'<br>'.$langs->trans(
'FileHasAnIndexedTextContent');
1000 public function getNomUrl($withpicto = 0, $option =
'', $notooltip = 0, $maxlen = 24, $morecss =
'')
1002 global
$conf, $hookmanager, $langs;
1004 if (!empty(
$conf->dol_no_mouse_hover)) {
1012 'objecttype' => $this->element,
1013 'option' => $option,
1016 $classfortooltip =
'classfortooltip';
1019 $classfortooltip =
'classforajaxtooltip';
1020 $dataparams =
' data-params="'.dol_escape_htmltag(json_encode($params)).
'"';
1027 if ($option ==
'facture_fournisseur') {
1028 $tmppath = preg_replace(
'/^(\d+\/)?fournisseur\/facture\//',
'', $this->filepath);
1029 } elseif ($option ==
'commande_fournisseur') {
1030 $tmppath = preg_replace(
'/^(\d+\/)?fournisseur\/commande\//',
'', $this->filepath);
1031 } elseif ($option ==
'tax-vat') {
1032 $tmppath = preg_replace(
'/^(\d+\/)?tax\/vat\//',
'', $this->filepath);
1033 } elseif ($option ==
'remisecheque') {
1034 $tmppath = preg_replace(
'/^bank\/checkdeposits\//',
'', $this->filepath);
1036 if ((
int) $this->entity > 1) {
1038 $tmppath = preg_replace(
'/^\d+\/[^\/]+\//',
'', $this->filepath);
1041 $tmppath = preg_replace(
'/^[^\/]+\//',
'', $this->filepath);
1044 $url = DOL_URL_ROOT.
'/document.php?modulepart='.urlencode($option).
'&file='.urlencode($tmppath.
'/'.$this->filename).
'&entity='.((int) $this->entity);
1046 $url = DOL_URL_ROOT.
'/ecm/file_card.php?id='.$this->id;
1050 if (empty($notooltip)) {
1052 $label = $langs->trans(
"ShowFile");
1053 $linkclose .=
' alt="'.dolPrintHTMLForAttribute($label).
'"';
1055 $linkclose .= ($label ?
' title="'.dolPrintHTMLForAttribute($label).
'"' :
' title="tocomplete"');
1056 $linkclose .= $dataparams.
' class="'.$classfortooltip.
' '.($morecss ?
' '.$morecss :
'').
'"';
1058 $linkclose = ($morecss ?
' class="'.$morecss.
'"' :
'');
1061 $linkstart =
'<a href="'.$url.
'"';
1063 $linkstart .=
'target="_blank" ';
1065 $linkstart .= $linkclose.
'>';
1069 if (empty($this->filename)) {
1070 $result .= ($linkstart.img_object(($notooltip ?
'' : $label),
'label', ($notooltip ?
'' :
'class="paddingright"')).$linkend);
1072 $result .= ($linkstart.img_mime($this->filename, ($notooltip ?
'' :
dol_escape_htmltag($label, 1)), ($notooltip ?
'' :
' paddingright')).$linkend);
1074 if ($withpicto != 2) {
1078 $result .= $linkstart.$this->filename.$linkend;
1081 $hookmanager->initHooks(array($this->element .
'dao'));
1082 $parameters = array(
'id' => $this->
id,
'getnomurl' => &$result);
1083 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
1085 $result = $hookmanager->resPrint;
1087 $result .= $hookmanager->resPrint;
1128 global
$conf, $user;
1131 $this->specimen = 1;
1132 $this->label =
'0a1b2c3e4f59999999';
1134 $this->filename =
'myspecimenfilefile.pdf';
1135 $this->filepath =
'/aaa/bbb';
1136 $this->fullpath_orig =
'c:/file on my disk.pdf';
1137 $this->
description =
'This is a description of the file';
1138 $this->keywords =
'key1,key2';
1139 $this->content =
'This is the text content of the file';
1142 $this->gen_or_uploaded =
'uploaded';
1143 $this->extraparams =
'';
1144 $this->date_c = (
dol_now() - 3600 * 24 * 10);
1146 $this->fk_user_c = $user->id;
1147 $this->fk_user_m = $user->id;
1149 $this->src_object_type =
'product';
1150 $this->src_object_id = 1;
1183 public $fullpath_orig;
1188 public $description;
1211 public $gen_or_uploaded;
1215 public $extraparams;
1219 public $date_c =
'';
1223 public $date_m =
'';
1242 public $src_object_type;
1246 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.
fetch($id, $ref='', $relativepath='', $hashoffile='', $hashforshare='', $src_object_type='', $src_object_id=0, $entity=0)
Load object in memory from the database.
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)
__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, $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
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, $mode=0)
Returns a hash (non reversible encryption) of a string.