2016-12-08 21:58:52 +01:00
< ? php
/* Copyright ( C ) 2007 - 2012 Laurent Destailleur < eldy @ users . sourceforge . net >
* Copyright ( C ) 2014 - 2016 Juanjo Menent < jmenent @ 2 byte . es >
* Copyright ( C ) 2015 Florian Henry < florian . henry @ open - concept . pro >
* Copyright ( C ) 2015 Raphaël Doursenaud < rdoursenaud @ gpcsolutions . fr >
2018-04-13 15:12:36 +02:00
* Copyright ( C ) 2018 Francis Appels < francis . appels @ yahoo . com >
2024-03-02 16:38:35 +01:00
* Copyright ( C ) 2019 - 2024 Frédéric France < frederic . france @ free . fr >
2024-11-07 05:07:41 +01:00
* Copyright ( C ) 2024 MDW < mdeweerd @ users . noreply . github . com >
2016-12-08 21:58:52 +01:00
*
* 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
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2016-12-08 21:58:52 +01:00
*/
/**
2019-12-15 10:02:20 +01:00
* \file htdocs / ecm / class / ecmfiles . class . php
2016-12-08 21:58:52 +01:00
* \ingroup ecm
* \brief Class to manage ECM Files ( Create / Read / Update / Delete )
*/
// Put here all includes required by your class file
2020-04-10 10:59:32 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php' ;
2024-11-19 03:05:06 +01:00
require_once DOL_DOCUMENT_ROOT . '/core/class/commonobjectline.class.php' ;
2016-12-08 21:58:52 +01:00
/**
* Class to manage ECM files
*/
2018-04-13 15:12:36 +02:00
class EcmFiles extends CommonObject
2016-12-08 21:58:52 +01:00
{
/**
* @ var string Id to identify managed objects
*/
public $element = 'ecmfiles' ;
2018-09-02 10:43:34 +02:00
2016-12-08 21:58:52 +01:00
/**
* @ var string Name of table without prefix where object is stored
*/
public $table_element = 'ecm_files' ;
2018-09-02 10:43:34 +02:00
2018-09-05 12:21:13 +02:00
/**
* @ var string String with name of icon for myobject . Must be the part after the 'object_' into object_myobject . png
*/
2021-02-15 20:13:38 +01:00
public $picto = 'folder-open' ;
2016-12-08 21:58:52 +01:00
2018-08-31 18:47:25 +02:00
/**
* @ var string Ref hash of file path
*/
public $ref ;
2018-09-28 14:44:47 +02:00
/**
* hash of file content ( md5_file ( dol_osencode ( $destfull ))
2020-06-18 15:07:43 +02:00
* @ var string Ecm Files label
*/
public $label ;
2018-09-28 14:44:47 +02:00
2020-11-24 21:28:57 +01:00
/**
* @ var string hash for file sharing , empty by default ( example : getRandomPassword ( true ))
*/
public $share ;
2018-08-31 18:27:16 +02:00
/**
* @ var int Entity
*/
2016-12-08 21:58:52 +01:00
public $entity ;
2018-08-31 18:27:16 +02:00
2020-11-24 21:28:57 +01:00
/**
* @ var string filename , Note : Into ecm database record , the entry $filename never ends with . noexe
*/
public $filename ;
/**
* @ var string filepath
*/
2016-12-08 21:58:52 +01:00
public $filepath ;
2020-11-24 21:28:57 +01:00
/**
* @ var string fullpath origin
*/
2016-12-08 21:58:52 +01:00
public $fullpath_orig ;
2018-08-31 19:26:08 +02:00
/**
* @ var string description
*/
2016-12-08 21:58:52 +01:00
public $description ;
2018-08-31 19:26:08 +02:00
2020-11-24 21:28:57 +01:00
/**
* @ var string keywords
*/
2016-12-08 21:58:52 +01:00
public $keywords ;
2020-11-27 09:11:30 +01:00
2024-11-09 13:28:50 +01:00
/**
2024-11-10 11:16:23 +01:00
* @ var ? string content
2024-11-09 13:28:50 +01:00
*/
public $content ;
2020-11-27 09:11:30 +01:00
/**
* @ var string cover
*/
2016-12-08 21:58:52 +01:00
public $cover ;
2020-11-27 09:11:30 +01:00
/**
* @ var int position
*/
2016-12-08 21:58:52 +01:00
public $position ;
2020-11-24 21:28:57 +01:00
/**
2024-11-06 23:57:45 +01:00
* @ var 'generated' | 'uploaded' | 'unknown' | 'copy' | ''
2020-11-24 21:28:57 +01:00
*/
public $gen_or_uploaded ;
/**
* @ var string extraparams
*/
2016-12-08 21:58:52 +01:00
public $extraparams ;
2020-11-24 21:28:57 +01:00
/**
2024-07-04 17:47:31 +02:00
* @ var int | '' date create
2020-11-24 21:28:57 +01:00
*/
2016-12-08 21:58:52 +01:00
public $date_c = '' ;
2020-11-24 21:28:57 +01:00
/**
2024-07-04 17:47:31 +02:00
* @ var int | '' date modify
2020-11-24 21:28:57 +01:00
*/
2016-12-08 21:58:52 +01:00
public $date_m = '' ;
2018-10-10 09:23:55 +02:00
/**
2020-06-18 15:07:43 +02:00
* @ var int ID
*/
2016-12-08 21:58:52 +01:00
public $fk_user_c ;
2018-10-10 09:23:55 +02:00
/**
2020-06-18 15:07:43 +02:00
* @ var int ID
*/
2016-12-08 21:58:52 +01:00
public $fk_user_m ;
2018-10-10 09:23:55 +02:00
2020-11-24 21:28:57 +01:00
/**
* @ var string acl
*/
2016-12-08 21:58:52 +01:00
public $acl ;
2020-11-27 09:11:30 +01:00
/**
* @ var string src object type
*/
2018-04-13 15:12:36 +02:00
public $src_object_type ;
2020-11-27 09:11:30 +01:00
/**
* @ var int src object id
*/
2018-04-13 15:12:36 +02:00
public $src_object_id ;
2018-09-02 10:43:34 +02:00
2020-12-27 20:43:18 +01:00
/**
* @ var int section_id ID of section = ID of EcmDirectory , directory of manual ECM ( not stored into database )
*/
public $section_id ;
2023-03-18 16:14:57 +01:00
public $fields = array (
2024-03-11 21:57:50 +01:00
'rowid' => array ( 'type' => 'integer' , 'label' => 'TechnicalID' , 'enabled' => 1 , 'position' => 1 , 'notnull' => 1 , 'visible' => 0 , 'noteditable' => 1 , 'index' => 1 , 'css' => 'left' , 'comment' => " Id " ),
'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 " ),
2024-11-09 13:28:50 +01:00
'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 " ),
'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 " ),
2024-03-11 22:54:04 +01:00
'entity' => array ( 'type' => 'integer' , 'label' => 'Entity' , 'default' => '1' , 'enabled' => 1 , 'visible' => - 2 , 'notnull' => - 1 , 'position' => 50 , 'index' => 1 ),
2024-11-09 13:28:50 +01:00
'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 " ),
'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 " ),
'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', ...) " ),
2024-03-11 22:54:04 +01:00
'src_object_id' => array ( 'type' => 'integer' , 'label' => 'SourceID' , 'default' => '1' , 'enabled' => 1 , 'visible' => 0 , 'notnull' => 1 , 'position' => 90 , 'index' => 1 , 'comment' => " Source object id " ),
2024-11-09 13:28:50 +01:00
'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 " ),
2023-03-18 16:14:57 +01:00
'description' => array ( 'type' => 'text' , 'label' => 'Description' , 'enabled' => 1 , 'visible' => 0 , 'position' => 110 ),
2024-11-09 13:28:50 +01:00
'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. " ),
2024-11-13 00:01:18 +01:00
'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. " ),
2024-03-11 12:55:55 +01:00
'cover' => array ( 'type' => 'text' , 'label' => 'Cover' , 'enabled' => 1 , 'visible' => 0 , 'position' => 130 , 'comment' => " is this file a file to use for a cover " ),
2024-03-11 22:54:04 +01:00
'position' => array ( 'type' => 'integer' , 'label' => 'Position' , 'default' => '1' , 'enabled' => 1 , 'visible' => - 2 , 'notnull' => 1 , 'position' => 140 , 'index' => 1 , 'comment' => " position of file among others " ),
2024-11-09 13:28:50 +01:00
'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' " ),
'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 " ),
2023-03-18 16:14:57 +01:00
'date_c' => array ( 'type' => 'datetime' , 'label' => 'DateCreation' , 'enabled' => 1 , 'visible' => - 1 , 'position' => 170 ),
'tms' => array ( 'type' => 'timestamp' , 'label' => 'DateModification' , 'enabled' => 1 , 'visible' => - 1 , 'notnull' => 1 , 'position' => 175 ),
2024-03-11 21:57:50 +01:00
'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' ,),
'fk_user_m' => array ( 'type' => 'integer:User:user/class/user.class.php' , 'label' => 'UserModif' , 'enabled' => 1 , 'position' => 511 , 'notnull' => - 1 , 'visible' => - 2 ,),
2023-03-18 16:14:57 +01:00
'note_public' => array ( 'type' => 'text' , 'label' => 'NotePublic' , 'enabled' => 1 , 'visible' => 0 , 'position' => 155 ),
'note_private' => array ( 'type' => 'text' , 'label' => 'NotePrivate' , 'enabled' => 1 , 'visible' => 0 , 'position' => 160 ),
'acl' => array ( 'type' => 'text' , 'label' => 'NotePrivate' , 'enabled' => 1 , 'visible' => 0 , 'position' => 160 , 'comment' => " for future permission 'per file' " ),
);
2020-12-27 20:43:18 +01:00
2016-12-08 21:58:52 +01:00
/**
* Constructor
*
2024-01-13 15:50:02 +01:00
* @ param DoliDB $db Database handler
2016-12-08 21:58:52 +01:00
*/
public function __construct ( DoliDB $db )
{
$this -> db = $db ;
}
/**
* Create object into database
*
2017-10-06 00:26:24 +02:00
* @ param User $user User that creates
2024-01-12 19:48:18 +01:00
* @ param int $notrigger 0 = launch triggers after , 1 = disable triggers
2023-12-01 19:51:32 +01:00
* @ return int Return integer < 0 if KO , Id of created object if OK
2016-12-08 21:58:52 +01:00
*/
2024-01-12 18:07:53 +01:00
public function create ( User $user , $notrigger = 0 )
2016-12-08 21:58:52 +01:00
{
2017-10-07 13:09:31 +02:00
global $conf ;
2017-07-05 11:24:24 +02:00
2016-12-08 21:58:52 +01:00
dol_syslog ( __METHOD__ , LOG_DEBUG );
$error = 0 ;
// Clean parameters
2017-09-21 14:02:42 +02:00
if ( isset ( $this -> ref )) {
2020-06-18 15:07:43 +02:00
$this -> ref = trim ( $this -> ref );
2017-09-21 14:02:42 +02:00
}
2016-12-08 21:58:52 +01:00
if ( isset ( $this -> label )) {
2020-06-18 15:07:43 +02:00
$this -> label = trim ( $this -> label );
2016-12-08 21:58:52 +01:00
}
2017-09-21 14:02:42 +02:00
if ( isset ( $this -> share )) {
2020-06-18 15:07:43 +02:00
$this -> share = trim ( $this -> share );
2017-09-21 14:02:42 +02:00
}
2016-12-08 21:58:52 +01:00
if ( isset ( $this -> entity )) {
2020-11-24 21:28:57 +01:00
$this -> entity = ( int ) $this -> entity ;
2016-12-08 21:58:52 +01:00
}
if ( isset ( $this -> filename )) {
2020-06-18 15:07:43 +02:00
$this -> filename = preg_replace ( '/\.noexe$/' , '' , trim ( $this -> filename ));
2016-12-08 21:58:52 +01:00
}
if ( isset ( $this -> filepath )) {
2020-06-18 15:07:43 +02:00
$this -> filepath = trim ( $this -> filepath );
$this -> filepath = preg_replace ( '/[\\/]+$/' , '' , $this -> filepath ); // Remove last /
2016-12-08 21:58:52 +01:00
}
if ( isset ( $this -> fullpath_orig )) {
2020-06-18 15:07:43 +02:00
$this -> fullpath_orig = trim ( $this -> fullpath_orig );
2016-12-08 21:58:52 +01:00
}
if ( isset ( $this -> description )) {
2020-06-18 15:07:43 +02:00
$this -> description = trim ( $this -> description );
2016-12-08 21:58:52 +01:00
}
if ( isset ( $this -> keywords )) {
2020-06-18 15:07:43 +02:00
$this -> keywords = trim ( $this -> keywords );
2016-12-08 21:58:52 +01:00
}
if ( isset ( $this -> cover )) {
2020-06-18 15:07:43 +02:00
$this -> cover = trim ( $this -> cover );
2016-12-08 21:58:52 +01:00
}
if ( isset ( $this -> gen_or_uploaded )) {
2020-06-18 15:07:43 +02:00
$this -> gen_or_uploaded = trim ( $this -> gen_or_uploaded );
2016-12-08 21:58:52 +01:00
}
if ( isset ( $this -> extraparams )) {
2020-06-18 15:07:43 +02:00
$this -> extraparams = trim ( $this -> extraparams );
2016-12-08 21:58:52 +01:00
}
if ( isset ( $this -> fk_user_c )) {
2020-11-24 21:28:57 +01:00
$this -> fk_user_c = ( int ) $this -> fk_user_c ;
2016-12-08 21:58:52 +01:00
}
if ( isset ( $this -> fk_user_m )) {
2020-11-24 21:28:57 +01:00
$this -> fk_user_m = ( int ) $this -> fk_user_m ;
2016-12-08 21:58:52 +01:00
}
if ( isset ( $this -> acl )) {
2020-06-18 15:07:43 +02:00
$this -> acl = trim ( $this -> acl );
2016-12-08 21:58:52 +01:00
}
2018-04-13 15:12:36 +02:00
if ( isset ( $this -> src_object_type )) {
$this -> src_object_type = trim ( $this -> src_object_type );
}
2020-11-24 21:28:57 +01:00
if ( empty ( $this -> date_c )) {
$this -> date_c = dol_now ();
}
if ( empty ( $this -> date_m )) {
$this -> date_m = dol_now ();
}
2017-07-05 11:24:24 +02:00
2017-10-07 13:09:31 +02:00
// If ref not defined
2023-01-11 16:49:59 +01:00
if ( empty ( $this -> ref )) {
2018-12-10 00:19:46 +01:00
include_once DOL_DOCUMENT_ROOT . '/core/lib/security.lib.php' ;
2024-09-05 16:05:37 +02:00
$this -> ref = dol_hash ( $this -> filepath . '/' . $this -> filename , '3' );
2018-12-07 19:35:38 +01:00
}
2017-09-21 14:02:42 +02:00
2020-04-10 10:59:32 +02:00
$maxposition = 0 ;
2020-11-24 21:28:57 +01:00
if ( empty ( $this -> position )) {
// Get max used
2020-04-10 10:59:32 +02:00
$sql = " SELECT MAX(position) as maxposition FROM " . MAIN_DB_PREFIX . $this -> table_element ;
$sql .= " WHERE filepath =' " . $this -> db -> escape ( $this -> filepath ) . " ' " ;
2017-07-05 11:24:24 +02:00
2017-10-07 13:09:31 +02:00
$resql = $this -> db -> query ( $sql );
2020-11-27 09:11:30 +01:00
if ( $resql ) {
2017-10-07 13:09:31 +02:00
$obj = $this -> db -> fetch_object ( $resql );
$maxposition = ( int ) $obj -> maxposition ;
2020-05-21 15:05:19 +02:00
} else {
2020-04-10 10:59:32 +02:00
$this -> errors [] = 'Error ' . $this -> db -> lasterror ();
2018-04-13 15:12:36 +02:00
return -- $error ;
}
2024-08-07 02:53:45 +02:00
$maxposition += 1 ;
2020-05-21 15:05:19 +02:00
} else {
2020-04-10 10:59:32 +02:00
$maxposition = $this -> position ;
2016-12-13 00:15:21 +01:00
}
2016-12-08 21:58:52 +01:00
// Check parameters
2020-11-27 09:11:30 +01:00
if ( empty ( $this -> filename ) || empty ( $this -> filepath )) {
2017-10-30 00:45:47 +01:00
$this -> errors [] = 'Bad property filename or filepath' ;
2018-04-13 15:12:36 +02:00
return -- $error ;
}
2020-11-27 09:11:30 +01:00
if ( ! isset ( $this -> entity )) {
2018-04-13 15:12:36 +02:00
$this -> entity = $conf -> entity ;
2017-10-30 00:45:47 +01:00
}
2016-12-08 21:58:52 +01:00
// Put here code to add control on parameters values
// Insert request
2020-04-10 10:59:32 +02:00
$sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this -> table_element . '(' ;
$sql .= 'ref,' ;
$sql .= 'label,' ;
$sql .= 'share,' ;
$sql .= 'entity,' ;
$sql .= 'filename,' ;
$sql .= 'filepath,' ;
$sql .= 'fullpath_orig,' ;
$sql .= 'description,' ;
$sql .= 'keywords,' ;
2024-11-13 00:01:18 +01:00
if ( getDolGlobalString ( " MAIN_SAVE_FILE_CONTENT_AS_TEXT " )) {
2024-11-09 13:28:50 +01:00
$sql .= 'content,' ;
}
2020-04-10 10:59:32 +02:00
$sql .= 'cover,' ;
$sql .= 'position,' ;
$sql .= 'gen_or_uploaded,' ;
$sql .= 'extraparams,' ;
$sql .= 'date_c,' ;
2020-08-23 15:15:47 +02:00
$sql .= 'tms,' ;
2020-04-10 10:59:32 +02:00
$sql .= 'fk_user_c,' ;
$sql .= 'fk_user_m,' ;
$sql .= 'acl,' ;
$sql .= 'src_object_type,' ;
$sql .= 'src_object_id' ;
2016-12-08 21:58:52 +01:00
$sql .= ') VALUES (' ;
2023-01-11 16:49:59 +01:00
$sql .= " ' " . $this -> db -> escape ( $this -> ref ) . " ', " ;
2020-04-10 10:59:32 +02:00
$sql .= ' ' . ( ! isset ( $this -> label ) ? 'NULL' : " ' " . $this -> db -> escape ( $this -> label ) . " ' " ) . ',' ;
$sql .= ' ' . ( ! isset ( $this -> share ) ? 'NULL' : " ' " . $this -> db -> escape ( $this -> share ) . " ' " ) . ',' ;
2021-08-28 01:45:53 +02:00
$sql .= ' ' . (( int ) $this -> entity ) . ',' ;
2020-04-10 10:59:32 +02:00
$sql .= ' ' . ( ! isset ( $this -> filename ) ? 'NULL' : " ' " . $this -> db -> escape ( $this -> filename ) . " ' " ) . ',' ;
$sql .= ' ' . ( ! isset ( $this -> filepath ) ? 'NULL' : " ' " . $this -> db -> escape ( $this -> filepath ) . " ' " ) . ',' ;
$sql .= ' ' . ( ! isset ( $this -> fullpath_orig ) ? 'NULL' : " ' " . $this -> db -> escape ( $this -> fullpath_orig ) . " ' " ) . ',' ;
$sql .= ' ' . ( ! isset ( $this -> description ) ? 'NULL' : " ' " . $this -> db -> escape ( $this -> description ) . " ' " ) . ',' ;
$sql .= ' ' . ( ! isset ( $this -> keywords ) ? 'NULL' : " ' " . $this -> db -> escape ( $this -> keywords ) . " ' " ) . ',' ;
2024-11-13 00:01:18 +01:00
if ( getDolGlobalString ( " MAIN_SAVE_FILE_CONTENT_AS_TEXT " )) {
2024-11-09 13:28:50 +01:00
$sql .= ' ' . ( ! isset ( $this -> content ) ? 'NULL' : " ' " . $this -> db -> escape ( $this -> content ) . " ' " ) . ',' ;
}
2020-04-10 10:59:32 +02:00
$sql .= ' ' . ( ! isset ( $this -> cover ) ? 'NULL' : " ' " . $this -> db -> escape ( $this -> cover ) . " ' " ) . ',' ;
2021-08-28 01:45:53 +02:00
$sql .= ' ' . (( int ) $maxposition ) . ',' ;
2020-04-10 10:59:32 +02:00
$sql .= ' ' . ( ! isset ( $this -> gen_or_uploaded ) ? 'NULL' : " ' " . $this -> db -> escape ( $this -> gen_or_uploaded ) . " ' " ) . ',' ;
$sql .= ' ' . ( ! isset ( $this -> extraparams ) ? 'NULL' : " ' " . $this -> db -> escape ( $this -> extraparams ) . " ' " ) . ',' ;
2021-08-28 01:45:53 +02:00
$sql .= " ' " . $this -> db -> idate ( $this -> date_c ) . " ', " ;
2024-09-13 17:40:03 +02:00
$sql .= ' ' . ( ! isset ( $this -> date_m ) || dol_strlen (( string ) $this -> date_m ) == 0 ? 'NULL' : " ' " . $this -> db -> idate ( $this -> date_m ) . " ' " ) . ',' ;
2020-04-10 10:59:32 +02:00
$sql .= ' ' . ( ! isset ( $this -> fk_user_c ) ? $user -> id : $this -> fk_user_c ) . ',' ;
$sql .= ' ' . ( ! isset ( $this -> fk_user_m ) ? 'NULL' : $this -> fk_user_m ) . ',' ;
$sql .= ' ' . ( ! isset ( $this -> acl ) ? 'NULL' : " ' " . $this -> db -> escape ( $this -> acl ) . " ' " ) . ',' ;
$sql .= ' ' . ( ! isset ( $this -> src_object_type ) ? 'NULL' : " ' " . $this -> db -> escape ( $this -> src_object_type ) . " ' " ) . ',' ;
$sql .= ' ' . ( ! isset ( $this -> src_object_id ) ? 'NULL' : $this -> src_object_id );
2016-12-08 21:58:52 +01:00
$sql .= ')' ;
$this -> db -> begin ();
$resql = $this -> db -> query ( $sql );
if ( ! $resql ) {
2020-04-10 10:59:32 +02:00
$error ++ ;
2022-03-07 13:21:32 +01:00
if ( $this -> db -> lasterrno () == 'DB_ERROR_RECORD_ALREADY_EXISTS' ) {
$this -> errors [] = 'Error DB_ERROR_RECORD_ALREADY_EXISTS : ' . $this -> db -> lasterror ();
} else {
$this -> errors [] = 'Error ' . $this -> db -> lasterror ();
}
2020-04-10 10:59:32 +02:00
dol_syslog ( __METHOD__ . ' ' . implode ( ',' , $this -> errors ), LOG_ERR );
2016-12-08 21:58:52 +01:00
}
if ( ! $error ) {
2020-04-10 10:59:32 +02:00
$this -> id = $this -> db -> last_insert_id ( MAIN_DB_PREFIX . $this -> table_element );
2017-10-07 13:09:31 +02:00
$this -> position = $maxposition ;
2017-07-05 11:24:24 +02:00
2018-04-13 15:12:36 +02:00
// Triggers
2020-11-27 09:11:30 +01:00
if ( ! $notrigger ) {
2018-04-13 15:12:36 +02:00
// Call triggers
2020-04-10 10:59:32 +02:00
$result = $this -> call_trigger ( strtoupper ( get_class ( $this )) . '_CREATE' , $user );
2020-11-27 09:11:30 +01:00
if ( $result < 0 ) {
$error ++ ;
}
2018-04-13 15:12:36 +02:00
// End call triggers
2016-12-08 21:58:52 +01:00
}
}
// Commit or rollback
if ( $error ) {
$this -> db -> rollback ();
2020-04-10 10:59:32 +02:00
return - 1 * $error ;
2016-12-08 21:58:52 +01:00
} else {
$this -> db -> commit ();
return $this -> id ;
}
}
/**
* Load object in memory from the database
*
2018-04-20 14:50:11 +02:00
* @ param int $id Id object
* @ param string $ref Hash of file name ( filename + filepath ) . Not always defined on some version .
2020-06-18 15:07:43 +02:00
* @ param string $relativepath Relative path of file from document directory . Example : 'path/path2/file' or 'path/path2/*'
2018-04-20 14:50:11 +02:00
* @ param string $hashoffile Hash of file content . Take the first one found if same file is at different places . This hash will also change if file content is changed .
2023-10-19 12:25:37 +02:00
* @ param string $hashforshare Hash of file sharing , or 'shared'
2020-10-26 18:10:58 +01:00
* @ param string $src_object_type src_object_type to search ( value of object -> table_element )
2024-01-10 17:02:06 +01:00
* @ param int $src_object_id src_object_id to search
2023-12-01 19:51:32 +01:00
* @ return int Return integer < 0 if KO , 0 if not found , > 0 if OK
2016-12-08 21:58:52 +01:00
*/
2019-01-27 15:20:16 +01:00
public function fetch ( $id , $ref = '' , $relativepath = '' , $hashoffile = '' , $hashforshare = '' , $src_object_type = '' , $src_object_id = 0 )
2016-12-08 21:58:52 +01:00
{
2018-07-10 12:00:09 +02:00
global $conf ;
2016-12-08 21:58:52 +01:00
dol_syslog ( __METHOD__ , LOG_DEBUG );
$sql = 'SELECT' ;
$sql .= ' t.rowid,' ;
2017-01-03 11:06:24 +01:00
$sql .= " t.ref, " ;
2016-12-08 21:58:52 +01:00
$sql .= " t.label, " ;
2017-09-21 14:02:42 +02:00
$sql .= " t.share, " ;
2016-12-08 21:58:52 +01:00
$sql .= " t.entity, " ;
$sql .= " t.filename, " ;
$sql .= " t.filepath, " ;
$sql .= " t.fullpath_orig, " ;
$sql .= " t.description, " ;
$sql .= " t.keywords, " ;
2024-11-13 00:01:18 +01:00
if ( getDolGlobalString ( " MAIN_SAVE_FILE_CONTENT_AS_TEXT " )) {
2024-11-09 13:28:50 +01:00
$sql .= " t.content, " ;
}
2016-12-08 21:58:52 +01:00
$sql .= " t.cover, " ;
$sql .= " t.position, " ;
$sql .= " t.gen_or_uploaded, " ;
$sql .= " t.extraparams, " ;
$sql .= " t.date_c, " ;
2020-08-23 15:15:47 +02:00
$sql .= " t.tms as date_m, " ;
2016-12-08 21:58:52 +01:00
$sql .= " t.fk_user_c, " ;
$sql .= " t.fk_user_m, " ;
2020-11-24 18:54:59 +01:00
$sql .= ' t.note_private,' ;
$sql .= ' t.note_public,' ;
2018-04-13 15:12:36 +02:00
$sql .= " t.acl, " ;
$sql .= " t.src_object_type, " ;
$sql .= " t.src_object_id " ;
2020-04-10 10:59:32 +02:00
$sql .= ' FROM ' . MAIN_DB_PREFIX . $this -> table_element . ' as t' ;
$sql .= ' WHERE 1 = 1' ;
2020-05-27 13:12:18 +02:00
/* Fetching this table depends on filepath + filename , it must not depends on entity because filesystem on disk does not know what is Dolibarr entities
2022-08-28 14:08:27 +02:00
if ( isModEnabled ( 'multicompany' )) {
2020-06-18 15:07:43 +02:00
$sql .= " AND entity IN ( " . getEntity ( 'ecmfiles' ) . " ) " ;
} */
2023-10-19 13:11:44 +02:00
$filterfound = 0 ;
2017-08-18 23:16:40 +02:00
if ( $relativepath ) {
2020-10-31 14:32:18 +01:00
$relativepathwithnoexe = preg_replace ( '/\.noexe$/' , '' , $relativepath ); // We must never have the .noexe into the database
2020-06-18 15:07:43 +02:00
$sql .= " AND t.filepath = ' " . $this -> db -> escape ( dirname ( $relativepath )) . " ' " ;
$filename = basename ( $relativepathwithnoexe );
if ( $filename != '*' ) {
$sql .= " AND t.filename = ' " . $this -> db -> escape ( $filename ) . " ' " ;
}
2020-04-10 10:59:32 +02:00
$sql .= " AND t.entity = " . $conf -> entity ; // unique key include the entity so each company has its own index
2023-10-19 13:11:44 +02:00
$filterfound ++ ;
2023-10-19 13:07:36 +02:00
}
if ( ! empty ( $ref )) { // hash of file path
2017-01-03 11:06:24 +01:00
$sql .= " AND t.ref = ' " . $this -> db -> escape ( $ref ) . " ' " ;
2020-04-10 10:59:32 +02:00
$sql .= " AND t.entity = " . $conf -> entity ; // unique key include the entity so each company has its own index
2023-10-19 13:11:44 +02:00
$filterfound ++ ;
2023-10-19 13:07:36 +02:00
}
if ( ! empty ( $hashoffile )) { // hash of content
2017-09-21 12:48:07 +02:00
$sql .= " AND t.label = ' " . $this -> db -> escape ( $hashoffile ) . " ' " ;
2020-04-10 10:59:32 +02:00
$sql .= " AND t.entity = " . $conf -> entity ; // unique key include the entity so each company has its own index
2023-10-19 13:11:44 +02:00
$filterfound ++ ;
2023-10-19 13:07:36 +02:00
}
if ( ! empty ( $hashforshare )) {
2022-03-14 16:20:57 +01:00
if ( $hashforshare != 'shared' ) {
$sql .= " AND t.share = ' " . $this -> db -> escape ( $hashforshare ) . " ' " ;
} else {
$sql .= " AND t.share IS NOT NULL AND t.share <> '' " ;
}
2018-07-10 12:00:09 +02:00
//$sql .= " AND t.entity = ".$conf->entity; // hashforshare already unique
2023-10-19 13:11:44 +02:00
$filterfound ++ ;
2023-10-19 13:07:36 +02:00
}
if ( $src_object_type && $src_object_id ) {
2021-06-09 15:36:47 +02:00
$sql .= " AND t.src_object_type = ' " . $this -> db -> escape ( $src_object_type ) . " ' AND t.src_object_id = " . (( int ) $src_object_id );
2022-03-14 16:20:57 +01:00
$sql .= " AND t.entity = " . (( int ) $conf -> entity );
2023-10-19 13:11:44 +02:00
$filterfound ++ ;
2023-10-19 13:07:36 +02:00
}
2023-10-19 13:11:44 +02:00
if ( $id > 0 || empty ( $filterfound )) {
2021-04-26 19:12:23 +02:00
$sql .= ' AND t.rowid = ' . (( int ) $id ); // rowid already unique
2016-12-08 21:58:52 +01:00
}
2018-08-13 17:26:32 +02:00
2023-10-19 13:07:36 +02:00
// Warning: May return several record, and only first one is returned !
$this -> db -> plimit ( 1 ); // When we search on src, or on hash of content (hashforfile), we take first one only
2017-09-21 14:02:42 +02:00
$this -> db -> order ( 't.rowid' , 'ASC' );
2016-12-08 21:58:52 +01:00
$resql = $this -> db -> query ( $sql );
if ( $resql ) {
$numrows = $this -> db -> num_rows ( $resql );
if ( $numrows ) {
$obj = $this -> db -> fetch_object ( $resql );
$this -> id = $obj -> rowid ;
2017-01-03 11:06:24 +01:00
$this -> ref = $obj -> ref ;
2016-12-08 21:58:52 +01:00
$this -> label = $obj -> label ;
2017-09-21 14:02:42 +02:00
$this -> share = $obj -> share ;
2016-12-08 21:58:52 +01:00
$this -> entity = $obj -> entity ;
$this -> filename = $obj -> filename ;
$this -> filepath = $obj -> filepath ;
$this -> fullpath_orig = $obj -> fullpath_orig ;
$this -> description = $obj -> description ;
$this -> keywords = $obj -> keywords ;
2024-11-13 00:01:18 +01:00
if ( getDolGlobalString ( " MAIN_SAVE_FILE_CONTENT_AS_TEXT " )) {
2024-11-09 13:28:50 +01:00
$this -> content = $obj -> content ;
}
2016-12-08 21:58:52 +01:00
$this -> cover = $obj -> cover ;
$this -> position = $obj -> position ;
$this -> gen_or_uploaded = $obj -> gen_or_uploaded ;
$this -> extraparams = $obj -> extraparams ;
$this -> date_c = $this -> db -> jdate ( $obj -> date_c );
$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 ;
2020-11-24 18:54:59 +01:00
$this -> note_private = $obj -> note_private ;
$this -> note_public = $obj -> note_public ;
2016-12-08 21:58:52 +01:00
$this -> acl = $obj -> acl ;
2018-04-13 15:12:36 +02:00
$this -> src_object_type = $obj -> src_object_type ;
$this -> src_object_id = $obj -> src_object_id ;
2016-12-08 21:58:52 +01:00
}
2017-07-05 11:24:24 +02:00
2020-10-02 00:21:13 +02:00
// Retrieve all extrafields for ecm_files
2016-12-08 21:58:52 +01:00
// fetch optionals attributes and labels
2020-10-02 00:21:13 +02:00
$this -> fetch_optionals ();
2018-04-20 14:50:11 +02:00
2016-12-08 21:58:52 +01:00
// $this->fetch_lines();
2017-07-05 11:24:24 +02:00
2016-12-08 21:58:52 +01:00
$this -> db -> free ( $resql );
if ( $numrows ) {
return 1 ;
} else {
return 0 ;
}
} else {
2020-04-10 10:59:32 +02:00
$this -> errors [] = 'Error ' . $this -> db -> lasterror ();
dol_syslog ( __METHOD__ . ' ' . implode ( ',' , $this -> errors ), LOG_ERR );
2016-12-08 21:58:52 +01:00
2017-10-30 00:45:47 +01:00
return - 1 ;
2016-12-08 21:58:52 +01:00
}
}
/**
* Load object in memory from the database
*
2024-03-11 11:23:34 +01:00
* @ param string $sortorder Sort Order
* @ param string $sortfield Sort field
* @ param int $limit Limit
* @ param int $offset Offset limit
2024-11-06 23:57:45 +01:00
* @ param string | array < string , mixed > $filter filter array
2024-03-11 11:23:34 +01:00
* @ param string $filtermode filter mode ( AND or OR )
* @ return int Return integer < 0 if KO , > 0 if OK
2016-12-08 21:58:52 +01:00
*/
2024-03-11 11:23:34 +01:00
public function fetchAll ( $sortorder = '' , $sortfield = '' , $limit = 0 , $offset = 0 , $filter = '' , $filtermode = 'AND' )
2016-12-08 21:58:52 +01:00
{
dol_syslog ( __METHOD__ , LOG_DEBUG );
$sql = 'SELECT' ;
$sql .= ' t.rowid,' ;
$sql .= " t.label, " ;
2017-09-21 14:02:42 +02:00
$sql .= " t.share, " ;
2016-12-08 21:58:52 +01:00
$sql .= " t.entity, " ;
$sql .= " t.filename, " ;
$sql .= " t.filepath, " ;
$sql .= " t.fullpath_orig, " ;
$sql .= " t.description, " ;
$sql .= " t.keywords, " ;
2024-11-13 00:01:18 +01:00
if ( getDolGlobalString ( " MAIN_SAVE_FILE_CONTENT_AS_TEXT " )) {
2024-11-09 13:28:50 +01:00
$sql .= " t.content, " ;
}
2016-12-08 21:58:52 +01:00
$sql .= " t.cover, " ;
$sql .= " t.position, " ;
$sql .= " t.gen_or_uploaded, " ;
$sql .= " t.extraparams, " ;
$sql .= " t.date_c, " ;
2020-08-23 15:15:47 +02:00
$sql .= " t.tms as date_m, " ;
2016-12-08 21:58:52 +01:00
$sql .= " t.fk_user_c, " ;
$sql .= " t.fk_user_m, " ;
2018-04-13 15:12:36 +02:00
$sql .= " t.acl, " ;
$sql .= " t.src_object_type, " ;
$sql .= " t.src_object_id " ;
2020-04-10 10:59:32 +02:00
$sql .= ' FROM ' . MAIN_DB_PREFIX . $this -> table_element . ' as t' ;
2024-03-11 11:23:34 +01:00
$sql .= ' WHERE 1 = 1' ;
2016-12-08 21:58:52 +01:00
// Manage filter
2024-03-11 11:23:34 +01:00
if ( is_array ( $filter )) {
$sqlwhere = array ();
if ( count ( $filter ) > 0 ) {
foreach ( $filter as $key => $value ) {
if ( $key == 't.src_object_id' ) {
$sqlwhere [] = $this -> db -> sanitize ( $key ) . " = " . (( int ) $value );
} else {
$sqlwhere [] = $this -> db -> sanitize ( $key ) . " LIKE '% " . $this -> db -> escape ( $this -> db -> escapeforlike ( $value )) . " %' " ;
}
2021-05-08 22:03:08 +02:00
}
2016-12-08 21:58:52 +01:00
}
2024-03-11 11:23:34 +01:00
if ( count ( $sqlwhere ) > 0 ) {
$sql .= ' AND ' . implode ( ' ' . $this -> db -> escape ( $filtermode ) . ' ' , $sqlwhere );
}
$filter = '' ;
}
// Manage filter
$errormessage = '' ;
$sql .= forgeSQLFromUniversalSearchCriteria ( $filter , $errormessage );
if ( $errormessage ) {
$this -> errors [] = $errormessage ;
2024-03-11 12:38:21 +01:00
dol_syslog ( __METHOD__ . ' ' . implode ( ',' , $this -> errors ), LOG_ERR );
2024-03-11 11:23:34 +01:00
return - 1 ;
2016-12-08 21:58:52 +01:00
}
2024-03-05 03:51:36 +01:00
2017-01-03 11:06:24 +01:00
/* Fetching this table depends on filepath + filename , it must not depends on entity
2022-08-28 14:08:27 +02:00
if ( isModEnabled ( 'multicompany' )) {
2020-06-18 15:07:43 +02:00
$sql .= " AND entity IN ( " . getEntity ( 'ecmfiles' ) . " ) " ;
} */
2016-12-08 21:58:52 +01:00
if ( ! empty ( $sortfield )) {
2019-01-27 11:55:16 +01:00
$sql .= $this -> db -> order ( $sortfield , $sortorder );
2016-12-08 21:58:52 +01:00
}
if ( ! empty ( $limit )) {
2021-08-27 22:42:04 +02:00
$sql .= $this -> db -> plimit ( $limit , $offset );
2016-12-08 21:58:52 +01:00
}
$this -> lines = array ();
$resql = $this -> db -> query ( $sql );
if ( $resql ) {
$num = $this -> db -> num_rows ( $resql );
while ( $obj = $this -> db -> fetch_object ( $resql )) {
2024-11-06 23:57:45 +01:00
$line = new EcmFilesLine ( $this -> db );
2016-12-08 21:58:52 +01:00
$line -> id = $obj -> rowid ;
2022-06-12 14:23:24 +02:00
$line -> ref = $obj -> rowid ;
2016-12-08 21:58:52 +01:00
$line -> label = $obj -> label ;
2017-09-21 14:02:42 +02:00
$line -> share = $obj -> share ;
2016-12-08 21:58:52 +01:00
$line -> entity = $obj -> entity ;
$line -> filename = $obj -> filename ;
$line -> filepath = $obj -> filepath ;
$line -> fullpath_orig = $obj -> fullpath_orig ;
$line -> description = $obj -> description ;
$line -> keywords = $obj -> keywords ;
2024-11-13 00:01:18 +01:00
if ( getDolGlobalString ( " MAIN_SAVE_FILE_CONTENT_AS_TEXT " )) {
2024-11-09 13:28:50 +01:00
$line -> content = $obj -> content ;
}
2016-12-08 21:58:52 +01:00
$line -> cover = $obj -> cover ;
$line -> position = $obj -> position ;
$line -> gen_or_uploaded = $obj -> gen_or_uploaded ;
$line -> extraparams = $obj -> extraparams ;
$line -> date_c = $this -> db -> jdate ( $obj -> date_c );
$line -> date_m = $this -> db -> jdate ( $obj -> date_m );
$line -> fk_user_c = $obj -> fk_user_c ;
$line -> fk_user_m = $obj -> fk_user_m ;
$line -> acl = $obj -> acl ;
2018-04-13 15:12:36 +02:00
$line -> src_object_type = $obj -> src_object_type ;
$line -> src_object_id = $obj -> src_object_id ;
$this -> lines [] = $line ;
2016-12-08 21:58:52 +01:00
}
$this -> db -> free ( $resql );
return $num ;
} else {
2020-04-10 10:59:32 +02:00
$this -> errors [] = 'Error ' . $this -> db -> lasterror ();
dol_syslog ( __METHOD__ . ' ' . implode ( ',' , $this -> errors ), LOG_ERR );
2016-12-08 21:58:52 +01:00
2020-04-10 10:59:32 +02:00
return - 1 ;
2016-12-08 21:58:52 +01:00
}
}
/**
* Update object into database
*
2024-01-12 19:48:18 +01:00
* @ param User $user User that modifies
* @ param int $notrigger 0 = launch triggers after , 1 = disable triggers
* @ return int Return integer < 0 if KO , > 0 if OK
2016-12-08 21:58:52 +01:00
*/
2024-01-12 18:07:53 +01:00
public function update ( User $user , $notrigger = 0 )
2016-12-08 21:58:52 +01:00
{
2018-04-13 15:12:36 +02:00
global $conf ;
2016-12-08 21:58:52 +01:00
$error = 0 ;
dol_syslog ( __METHOD__ , LOG_DEBUG );
// Clean parameters
2017-07-05 11:24:24 +02:00
2017-09-21 14:02:42 +02:00
if ( isset ( $this -> ref )) {
2020-05-27 13:12:18 +02:00
$this -> ref = trim ( $this -> ref );
2017-09-21 14:02:42 +02:00
}
2016-12-08 21:58:52 +01:00
if ( isset ( $this -> label )) {
2020-05-27 13:12:18 +02:00
$this -> label = trim ( $this -> label );
2016-12-08 21:58:52 +01:00
}
2017-09-21 14:02:42 +02:00
if ( isset ( $this -> share )) {
2020-05-27 13:12:18 +02:00
$this -> share = trim ( $this -> share );
2017-09-21 14:02:42 +02:00
}
2016-12-08 21:58:52 +01:00
if ( isset ( $this -> entity )) {
2024-01-30 22:05:15 +01:00
$this -> entity = ( int ) $this -> entity ;
2016-12-08 21:58:52 +01:00
}
if ( isset ( $this -> filename )) {
2020-05-27 13:12:18 +02:00
$this -> filename = preg_replace ( '/\.noexe$/' , '' , trim ( $this -> filename ));
2016-12-08 21:58:52 +01:00
}
if ( isset ( $this -> filepath )) {
2020-05-27 13:12:18 +02:00
$this -> filepath = trim ( $this -> filepath );
2020-10-31 14:32:18 +01:00
$this -> filepath = preg_replace ( '/[\\/]+$/' , '' , $this -> filepath ); // Remove last /
2016-12-08 21:58:52 +01:00
}
if ( isset ( $this -> fullpath_orig )) {
2020-05-27 13:12:18 +02:00
$this -> fullpath_orig = trim ( $this -> fullpath_orig );
2016-12-08 21:58:52 +01:00
}
if ( isset ( $this -> description )) {
2020-05-27 13:12:18 +02:00
$this -> description = trim ( $this -> description );
2016-12-08 21:58:52 +01:00
}
if ( isset ( $this -> keywords )) {
2020-05-27 13:12:18 +02:00
$this -> keywords = trim ( $this -> keywords );
2016-12-08 21:58:52 +01:00
}
if ( isset ( $this -> cover )) {
2020-05-27 13:12:18 +02:00
$this -> cover = trim ( $this -> cover );
2016-12-08 21:58:52 +01:00
}
if ( isset ( $this -> gen_or_uploaded )) {
2020-05-27 13:12:18 +02:00
$this -> gen_or_uploaded = trim ( $this -> gen_or_uploaded );
2016-12-08 21:58:52 +01:00
}
if ( isset ( $this -> extraparams )) {
2020-05-27 13:12:18 +02:00
$this -> extraparams = trim ( $this -> extraparams );
2016-12-08 21:58:52 +01:00
}
if ( isset ( $this -> fk_user_m )) {
2024-01-30 22:05:15 +01:00
$this -> fk_user_m = ( int ) $this -> fk_user_m ;
2016-12-08 21:58:52 +01:00
}
if ( isset ( $this -> acl )) {
2020-05-27 13:12:18 +02:00
$this -> acl = trim ( $this -> acl );
2016-12-08 21:58:52 +01:00
}
2018-04-13 15:12:36 +02:00
if ( isset ( $this -> src_object_type )) {
$this -> src_object_type = trim ( $this -> src_object_type );
}
2016-12-08 21:58:52 +01:00
// Check parameters
// Put here code to add a control on parameters values
// Update request
2020-04-10 10:59:32 +02:00
$sql = 'UPDATE ' . MAIN_DB_PREFIX . $this -> table_element . ' SET' ;
2024-09-05 16:05:37 +02:00
$sql .= " ref = ' " . $this -> db -> escape ( dol_hash ( $this -> filepath . " / " . $this -> filename , '3' )) . " ', " ;
2020-04-10 10:59:32 +02:00
$sql .= ' label = ' . ( isset ( $this -> label ) ? " ' " . $this -> db -> escape ( $this -> label ) . " ' " : " null " ) . ',' ;
$sql .= ' share = ' . ( ! empty ( $this -> share ) ? " ' " . $this -> db -> escape ( $this -> share ) . " ' " : " null " ) . ',' ;
$sql .= ' entity = ' . ( isset ( $this -> entity ) ? $this -> entity : $conf -> entity ) . ',' ;
$sql .= ' filename = ' . ( isset ( $this -> filename ) ? " ' " . $this -> db -> escape ( $this -> filename ) . " ' " : " null " ) . ',' ;
$sql .= ' filepath = ' . ( isset ( $this -> filepath ) ? " ' " . $this -> db -> escape ( $this -> filepath ) . " ' " : " null " ) . ',' ;
$sql .= ' fullpath_orig = ' . ( isset ( $this -> fullpath_orig ) ? " ' " . $this -> db -> escape ( $this -> fullpath_orig ) . " ' " : " null " ) . ',' ;
$sql .= ' description = ' . ( isset ( $this -> description ) ? " ' " . $this -> db -> escape ( $this -> description ) . " ' " : " null " ) . ',' ;
$sql .= ' keywords = ' . ( isset ( $this -> keywords ) ? " ' " . $this -> db -> escape ( $this -> keywords ) . " ' " : " null " ) . ',' ;
2024-11-13 00:01:18 +01:00
if ( getDolGlobalString ( " MAIN_SAVE_FILE_CONTENT_AS_TEXT " )) {
2024-11-09 13:28:50 +01:00
$sql .= ' content = ' . ( isset ( $this -> content ) ? " ' " . $this -> db -> escape ( $this -> content ) . " ' " : " null " ) . ',' ;
}
2020-04-10 10:59:32 +02:00
$sql .= ' cover = ' . ( isset ( $this -> cover ) ? " ' " . $this -> db -> escape ( $this -> cover ) . " ' " : " null " ) . ',' ;
$sql .= ' position = ' . ( isset ( $this -> position ) ? $this -> db -> escape ( $this -> position ) : " 0 " ) . ',' ;
$sql .= ' gen_or_uploaded = ' . ( isset ( $this -> gen_or_uploaded ) ? " ' " . $this -> db -> escape ( $this -> gen_or_uploaded ) . " ' " : " null " ) . ',' ;
$sql .= ' extraparams = ' . ( isset ( $this -> extraparams ) ? " ' " . $this -> db -> escape ( $this -> extraparams ) . " ' " : " null " ) . ',' ;
$sql .= ' date_c = ' . ( ! isset ( $this -> date_c ) || dol_strlen ( $this -> date_c ) != 0 ? " ' " . $this -> db -> idate ( $this -> date_c ) . " ' " : 'null' ) . ',' ;
2024-09-13 17:40:03 +02:00
//$sql .= ' tms = '.(! isset($this->date_m) || dol_strlen((string) $this->date_m) != 0 ? "'".$this->db->idate($this->date_m)."'" : 'null').','; // Field automatically updated
2020-04-10 10:59:32 +02:00
$sql .= ' fk_user_m = ' . ( $this -> fk_user_m > 0 ? $this -> fk_user_m : $user -> id ) . ',' ;
$sql .= ' acl = ' . ( isset ( $this -> acl ) ? " ' " . $this -> db -> escape ( $this -> acl ) . " ' " : " null " ) . ',' ;
$sql .= ' src_object_id = ' . ( $this -> src_object_id > 0 ? $this -> src_object_id : " null " ) . ',' ;
$sql .= ' src_object_type = ' . ( isset ( $this -> src_object_type ) ? " ' " . $this -> db -> escape ( $this -> src_object_type ) . " ' " : " null " );
2021-03-14 12:20:23 +01:00
$sql .= ' WHERE rowid=' . (( int ) $this -> id );
2016-12-08 21:58:52 +01:00
$this -> db -> begin ();
$resql = $this -> db -> query ( $sql );
if ( ! $resql ) {
2020-04-10 10:59:32 +02:00
$error ++ ;
$this -> errors [] = 'Error ' . $this -> db -> lasterror ();
dol_syslog ( __METHOD__ . ' ' . implode ( ',' , $this -> errors ), LOG_ERR );
2016-12-08 21:58:52 +01:00
}
2024-06-03 13:46:31 +02:00
if ( ! $error ) {
// Update extrafields
$result = $this -> insertExtraFields ();
if ( $result < 0 ) {
$error ++ ;
}
}
2018-04-13 15:12:36 +02:00
// Triggers
2020-11-27 09:11:30 +01:00
if ( ! $error && ! $notrigger ) {
2018-04-13 15:12:36 +02:00
// Call triggers
2020-04-10 10:59:32 +02:00
$result = $this -> call_trigger ( strtoupper ( get_class ( $this )) . '_MODIFY' , $user );
2020-11-27 09:11:30 +01:00
if ( $result < 0 ) {
$error ++ ;
} //Do also here what you must do to rollback action if trigger fail
2018-04-13 15:12:36 +02:00
// End call triggers
2016-12-08 21:58:52 +01:00
}
// Commit or rollback
if ( $error ) {
$this -> db -> rollback ();
2020-04-10 10:59:32 +02:00
return - 1 * $error ;
2016-12-08 21:58:52 +01:00
} else {
$this -> db -> commit ();
return 1 ;
}
}
/**
* Delete object in database
*
2024-01-12 19:48:18 +01:00
* @ param User $user User that deletes
* @ param int $notrigger 0 = launch triggers after , 1 = disable triggers
* @ return int Return integer < 0 if KO , > 0 if OK
2016-12-08 21:58:52 +01:00
*/
2024-01-12 18:07:53 +01:00
public function delete ( User $user , $notrigger = 0 )
2016-12-08 21:58:52 +01:00
{
dol_syslog ( __METHOD__ , LOG_DEBUG );
$error = 0 ;
$this -> db -> begin ();
2018-04-13 15:12:36 +02:00
// Triggers
2020-11-27 09:11:30 +01:00
if ( ! $notrigger ) {
2018-04-13 15:12:36 +02:00
// Call triggers
2020-04-10 10:59:32 +02:00
$result = $this -> call_trigger ( strtoupper ( get_class ( $this )) . '_DELETE' , $user );
2020-11-27 09:11:30 +01:00
if ( $result < 0 ) {
$error ++ ;
} //Do also here what you must do to rollback action if trigger fail
2018-04-13 15:12:36 +02:00
// End call triggers
2016-12-08 21:58:52 +01:00
}
// If you need to delete child tables to, you can insert them here
2022-11-09 14:45:26 +01:00
if ( ! $error ) {
2022-11-09 14:53:42 +01:00
$result = $this -> deleteExtraFields ();
if ( ! $result ) {
2022-11-09 14:55:41 +01:00
dol_syslog ( get_class ( $this ) . " ::delete error " . $this -> error , LOG_ERR );
2022-11-09 14:45:26 +01:00
$error ++ ;
}
}
2016-12-08 21:58:52 +01:00
if ( ! $error ) {
2020-04-10 10:59:32 +02:00
$sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this -> table_element ;
2021-03-14 12:20:23 +01:00
$sql .= ' WHERE rowid=' . (( int ) $this -> id );
2016-12-08 21:58:52 +01:00
$resql = $this -> db -> query ( $sql );
if ( ! $resql ) {
2020-04-10 10:59:32 +02:00
$error ++ ;
$this -> errors [] = 'Error ' . $this -> db -> lasterror ();
dol_syslog ( __METHOD__ . ' ' . implode ( ',' , $this -> errors ), LOG_ERR );
2016-12-08 21:58:52 +01:00
}
}
// Commit or rollback
if ( $error ) {
$this -> db -> rollback ();
2020-04-10 10:59:32 +02:00
return - 1 * $error ;
2016-12-08 21:58:52 +01:00
} else {
$this -> db -> commit ();
return 1 ;
}
}
/**
* Load an object from its id and create a new one in database
*
2019-04-25 12:11:32 +02:00
* @ param User $user User making the clone
* @ param int $fromid Id of object to clone
* @ return int New id of clone
2016-12-08 21:58:52 +01:00
*/
2019-04-25 12:11:32 +02:00
public function createFromClone ( User $user , $fromid )
2016-12-08 21:58:52 +01:00
{
dol_syslog ( __METHOD__ , LOG_DEBUG );
$error = 0 ;
2023-08-05 13:27:56 +02:00
$object = new EcmFiles ( $this -> db );
2016-12-08 21:58:52 +01:00
$this -> db -> begin ();
// Load source object
$object -> fetch ( $fromid );
// Reset object
$object -> id = 0 ;
// Clear fields
// ...
// Create clone
2019-01-19 12:46:38 +01:00
$object -> context [ 'createfromclone' ] = 'createfromclone' ;
2016-12-08 21:58:52 +01:00
$result = $object -> create ( $user );
// Other options
if ( $result < 0 ) {
2020-04-10 10:59:32 +02:00
$error ++ ;
2016-12-08 21:58:52 +01:00
$this -> errors = $object -> errors ;
2020-04-10 10:59:32 +02:00
dol_syslog ( __METHOD__ . ' ' . implode ( ',' , $this -> errors ), LOG_ERR );
2016-12-08 21:58:52 +01:00
}
2019-01-19 12:46:38 +01:00
unset ( $object -> context [ 'createfromclone' ]);
2016-12-08 21:58:52 +01:00
// End
if ( ! $error ) {
$this -> db -> commit ();
return $object -> id ;
} else {
$this -> db -> rollback ();
2020-04-10 10:59:32 +02:00
return - 1 ;
2016-12-08 21:58:52 +01:00
}
}
2024-07-06 14:34:22 +02:00
/**
* updateAfterRename update entries in ecmfiles if exist to avoid losing info
*
* @ param string $olddir old directory
* @ param string $newdir new directory
* @ return void
*/
public function updateAfterRename ( $olddir , $newdir )
{
$sql = 'UPDATE ' . MAIN_DB_PREFIX . 'ecm_files SET' ;
$sql .= ' filepath = "' . $this -> db -> escape ( $newdir ) . '"' ;
//$sql .= ', fullpath_orig = "'.$dbs->escape($newdir)."'";
$sql .= ' WHERE ' ;
$sql .= ' filepath = "' . $this -> db -> escape ( $olddir ) . '"' ;
// $sql .= ' AND fullpath_orig = "'.$dbs->escape($olddir).'"';
$this -> db -> query ( $sql );
}
2024-11-07 05:07:41 +01:00
/**
* getTooltipContentArray
2024-11-10 01:28:16 +01:00
*
* @ param array < string , mixed > $params params to construct tooltip data
* @ return array { picto ? : string , ref ? : string , gen_or_upload ? : string } | array { optimize : string }
2024-11-07 05:07:41 +01:00
* @ since v21
*/
public function getTooltipContentArray ( $params )
{
2024-11-10 01:28:16 +01:00
global $langs ;
2024-11-07 05:07:41 +01:00
$langs -> load ( 'ecm' );
$datas = [];
$nofetch = ! empty ( $params [ 'nofetch' ]);
if ( getDolGlobalString ( 'MAIN_OPTIMIZEFORTEXTBROWSER' )) {
return [ 'optimize' => $langs -> trans ( " ShowFile " )];
}
2024-11-10 01:28:16 +01:00
$datas [ 'picto' ] = img_picto ( '' , $this -> picto , '' , 0 , 0 , 0 , '' , 'paddingrightonly' ) . '<u>' . $langs -> trans ( " File " ) . '</u>' ;
if ( ! empty ( $this -> filename )) {
$datas [ 'name' ] = '<br><b>' . $langs -> trans ( 'Name' ) . ':</b> ' . basename ( $this -> filename );
}
2024-11-07 05:07:41 +01:00
if ( ! empty ( $this -> ref )) {
2024-11-10 01:28:16 +01:00
$datas [ 'ref' ] = '<br><b>' . $langs -> trans ( 'HashOfFileContent' ) . ':</b> ' . $this -> ref ;
}
if ( ! empty ( $this -> share )) {
$datas [ 'share' ] = '<br>' . $langs -> trans ( " FileSharedViaALink " );
} else {
$datas [ 'share' ] = '<br>' . $langs -> trans ( " FileNotShared " );
2024-11-07 05:07:41 +01:00
}
if ( ! empty ( $this -> gen_or_uploaded )) {
2024-11-08 14:41:01 +01:00
$datas [ 'gen_or_upload' ] = '<br><b>' . $langs -> trans ( 'GenOrUpload' ) . ':</b> ' . $this -> gen_or_uploaded ;
2024-11-07 05:07:41 +01:00
}
2024-11-10 01:28:16 +01:00
if ( ! empty ( $this -> content )) {
$datas [ 'content' ] = '<br>' . $langs -> trans ( 'FileHasAnIndexedTextContent' );
}
2024-11-07 05:07:41 +01:00
return $datas ;
}
2016-12-08 21:58:52 +01:00
/**
2024-01-13 19:48:41 +01:00
* Return a link to the object card ( with optionally the picto )
2016-12-08 21:58:52 +01:00
*
* @ param int $withpicto Include picto in link ( 0 = No picto , 1 = Include picto into link , 2 = Only picto )
2024-11-07 05:07:41 +01:00
* @ param string $option On what the link point to ( propal , etc ) module name
2017-10-07 13:09:31 +02:00
* @ param int $notooltip 1 = Disable tooltip
* @ param int $maxlen Max length of visible user name
* @ param string $morecss Add more css on link
2016-12-08 21:58:52 +01:00
* @ return string String with URL
*/
2019-02-26 00:02:39 +01:00
public function getNomUrl ( $withpicto = 0 , $option = '' , $notooltip = 0 , $maxlen = 24 , $morecss = '' )
2016-12-08 21:58:52 +01:00
{
2024-11-07 05:07:41 +01:00
global $conf , $hookmanager , $langs ;
2016-12-08 21:58:52 +01:00
2020-11-27 09:11:30 +01:00
if ( ! empty ( $conf -> dol_no_mouse_hover )) {
$notooltip = 1 ; // Force disable tooltips
}
2017-07-05 11:24:24 +02:00
2017-10-07 13:09:31 +02:00
$result = '' ;
2016-12-08 21:58:52 +01:00
2024-11-07 05:07:41 +01:00
$params = [
'id' => $this -> id ,
'objecttype' => $this -> element ,
'option' => $option ,
'nofetch' => 1 ,
];
$classfortooltip = 'classfortooltip' ;
$dataparams = '' ;
if ( getDolGlobalInt ( 'MAIN_ENABLE_AJAX_TOOLTIP' )) {
$classfortooltip = 'classforajaxtooltip' ;
$dataparams = ' data-params="' . dol_escape_htmltag ( json_encode ( $params )) . '"' ;
$label = '' ;
} else {
$label = implode ( $this -> getTooltipContentArray ( $params ));
}
2016-12-08 21:58:52 +01:00
2024-11-07 05:07:41 +01:00
if ( $option ) {
2024-12-09 22:26:56 +01:00
if ( $option == 'facture_fournisseur' ) {
$tmppath = preg_replace ( '/^fournisseur\/facture\//' , '' , $this -> filepath );
} elseif ( $option == 'commande_fournisseur' ) {
$tmppath = preg_replace ( '/^fournisseur\/commande\//' , '' , $this -> filepath );
} else {
2025-02-12 16:22:06 +01:00
if (( int ) $this -> entity > 1 ) {
// Remove the part "entityid/commande/" into "entityid/commande/REFXXX" to get only the ref
$tmppath = preg_replace ( '/^\d+\/[^\/]+\//' , '' , $this -> filepath );
} else {
// Remove the part "commande/" into "commande/REFXXX" to get only the ref
$tmppath = preg_replace ( '/^[^\/]+\//' , '' , $this -> filepath );
}
2024-12-09 22:26:56 +01:00
}
2025-02-12 16:22:06 +01:00
//var_dump($this->filepath);
$url = DOL_URL_ROOT . '/document.php?modulepart=' . urlencode ( $option ) . '&file=' . urlencode ( $tmppath . '/' . $this -> filename ) . '&entity=' . (( int ) $this -> entity );
2024-11-07 05:07:41 +01:00
} else {
$url = DOL_URL_ROOT . '/ecm/file_card.php?id=' . $this -> id ;
}
2017-07-05 11:24:24 +02:00
2020-04-10 10:59:32 +02:00
$linkclose = '' ;
2020-11-27 09:11:30 +01:00
if ( empty ( $notooltip )) {
2023-11-27 11:41:05 +01:00
if ( getDolGlobalString ( 'MAIN_OPTIMIZEFORTEXTBROWSER' )) {
2024-11-07 05:07:41 +01:00
$label = $langs -> trans ( " ShowFile " );
2025-01-09 01:41:24 +01:00
$linkclose .= ' alt="' . dolPrintHTMLForAttribute ( $label ) . '"' ;
2017-10-07 13:09:31 +02:00
}
2025-01-09 01:41:24 +01:00
$linkclose .= ( $label ? ' title="' . dolPrintHTMLForAttribute ( $label ) . '"' : ' title="tocomplete"' );
2024-11-07 05:07:41 +01:00
$linkclose .= $dataparams . ' class="' . $classfortooltip . ' ' . ( $morecss ? ' ' . $morecss : '' ) . '"' ;
2020-11-27 09:11:30 +01:00
} else {
$linkclose = ( $morecss ? ' class="' . $morecss . '"' : '' );
}
2017-07-05 11:24:24 +02:00
2016-12-08 21:58:52 +01:00
$linkstart = '<a href="' . $url . '"' ;
2024-11-07 05:07:41 +01:00
if ( getDolGlobalInt ( 'MAIN_DISABLE_FORCE_SAVEAS' ) == 2 ) {
$linkstart .= 'target="_blank" ' ;
}
2020-04-10 10:59:32 +02:00
$linkstart .= $linkclose . '>' ;
$linkend = '</a>' ;
2016-12-08 21:58:52 +01:00
2020-11-27 09:11:30 +01:00
if ( $withpicto ) {
2024-11-07 05:07:41 +01:00
if ( empty ( $this -> filename )) {
$result .= ( $linkstart . img_object (( $notooltip ? '' : $label ), 'label' , ( $notooltip ? '' : 'class="paddingright"' )) . $linkend );
} else {
2024-11-08 14:41:01 +01:00
$result .= ( $linkstart . img_mime ( $this -> filename , ( $notooltip ? '' : dol_escape_htmltag ( $label , 1 )), ( $notooltip ? '' : ' paddingright' )) . $linkend );
2024-11-07 05:07:41 +01:00
}
2020-11-27 09:11:30 +01:00
if ( $withpicto != 2 ) {
$result .= ' ' ;
}
2016-12-08 21:58:52 +01:00
}
2024-11-07 05:07:41 +01:00
$result .= $linkstart . $this -> filename . $linkend ;
2021-11-22 19:57:26 +01:00
global $action ;
2022-02-15 19:04:18 +01:00
$hookmanager -> initHooks ( array ( $this -> element . 'dao' ));
2024-03-11 12:55:55 +01:00
$parameters = array ( 'id' => $this -> id , 'getnomurl' => & $result );
2021-11-22 19:57:26 +01:00
$reshook = $hookmanager -> executeHooks ( 'getNomUrl' , $parameters , $this , $action ); // Note that $action and $object may have been modified by some hooks
if ( $reshook > 0 ) {
$result = $hookmanager -> resPrint ;
} else {
$result .= $hookmanager -> resPrint ;
}
2024-11-07 05:07:41 +01:00
2016-12-08 21:58:52 +01:00
return $result ;
}
/**
2023-04-08 15:08:55 +02:00
* Return the label of the status
2016-12-08 21:58:52 +01:00
*
2023-04-08 15:08:55 +02:00
* @ param int $mode 0 = long label , 1 = short label , 2 = Picto + short label , 3 = Picto , 4 = Picto + long label , 5 = Short label + Picto , 6 = Long label + Picto
2016-12-08 21:58:52 +01:00
* @ return string Label of status
*/
2019-02-26 00:02:39 +01:00
public function getLibStatut ( $mode = 0 )
2016-12-08 21:58:52 +01:00
{
2019-01-27 11:55:16 +01:00
return $this -> LibStatut ( $this -> status , $mode );
2016-12-08 21:58:52 +01:00
}
2020-06-18 15:07:43 +02:00
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
2016-12-08 21:58:52 +01:00
/**
* Return the status
*
* @ param int $status Id status
* @ param int $mode 0 = long label , 1 = short label , 2 = Picto + short label , 3 = Picto , 4 = Picto + long label , 5 = Short label + Picto , 5 = Long label + Picto
* @ return string Label of status
*/
2019-02-26 00:02:39 +01:00
public static function LibStatut ( $status , $mode = 0 )
2016-12-08 21:58:52 +01:00
{
2020-06-18 15:07:43 +02:00
// phpcs:enable
2016-12-08 21:58:52 +01:00
global $langs ;
2017-11-10 13:45:38 +01:00
return '' ;
2016-12-08 21:58:52 +01:00
}
/**
* Initialise object with example values
* Id must be 0 if object instance is a specimen
*
2024-03-02 16:38:35 +01:00
* @ return int
2016-12-08 21:58:52 +01:00
*/
public function initAsSpecimen ()
{
2020-04-10 10:59:32 +02:00
global $conf , $user ;
2017-07-05 11:24:24 +02:00
2016-12-08 21:58:52 +01:00
$this -> id = 0 ;
2020-11-28 17:07:08 +01:00
$this -> specimen = 1 ;
2016-12-08 21:58:52 +01:00
$this -> label = '0a1b2c3e4f59999999' ;
2020-11-28 17:07:08 +01:00
$this -> entity = 1 ;
2016-12-08 21:58:52 +01:00
$this -> filename = 'myspecimenfilefile.pdf' ;
$this -> filepath = '/aaa/bbb' ;
$this -> fullpath_orig = 'c:/file on my disk.pdf' ;
2024-11-09 13:28:50 +01:00
$this -> description = 'This is a description of the file' ;
2016-12-08 21:58:52 +01:00
$this -> keywords = 'key1,key2' ;
2024-11-09 13:28:50 +01:00
$this -> content = 'This is the text content of the file' ;
2016-12-08 21:58:52 +01:00
$this -> cover = '1' ;
2020-11-28 17:07:08 +01:00
$this -> position = 5 ;
2016-12-08 21:58:52 +01:00
$this -> gen_or_uploaded = 'uploaded' ;
$this -> extraparams = '' ;
$this -> date_c = ( dol_now () - 3600 * 24 * 10 );
$this -> date_m = '' ;
$this -> fk_user_c = $user -> id ;
2024-01-30 22:05:15 +01:00
$this -> fk_user_m = $user -> id ;
2016-12-08 21:58:52 +01:00
$this -> acl = '' ;
2018-04-13 15:12:36 +02:00
$this -> src_object_type = 'product' ;
$this -> src_object_id = 1 ;
2024-03-02 16:38:35 +01:00
return 1 ;
2016-12-08 21:58:52 +01:00
}
}
2017-07-05 11:24:24 +02:00
2020-05-03 22:47:43 +02:00
/**
* Class of an index line of a document
*/
2024-11-06 23:57:45 +01:00
class EcmFilesLine extends CommonObjectLine
2017-07-05 11:24:24 +02:00
{
2018-09-28 14:44:47 +02:00
/**
2020-06-18 15:07:43 +02:00
* @ var string ECM files line label
*/
public $label ;
2018-08-31 18:27:16 +02:00
/**
* @ var int Entity
*/
2017-07-05 11:24:24 +02:00
public $entity ;
2018-08-31 18:27:16 +02:00
2024-11-06 23:57:45 +01:00
/**
* @ var string
*/
2017-07-05 11:24:24 +02:00
public $filename ;
2024-11-06 23:57:45 +01:00
/**
* @ var string
*/
2017-07-05 11:24:24 +02:00
public $filepath ;
2024-11-06 23:57:45 +01:00
/**
* @ var string
*/
2017-07-05 11:24:24 +02:00
public $fullpath_orig ;
2018-08-31 19:26:08 +02:00
/**
* @ var string description
*/
2017-07-05 11:24:24 +02:00
public $description ;
2018-08-31 19:26:08 +02:00
2024-11-06 23:57:45 +01:00
/**
* @ var string
*/
2017-07-05 11:24:24 +02:00
public $keywords ;
2024-11-09 13:28:50 +01:00
/**
* @ var string
*/
public $content ;
2024-11-06 23:57:45 +01:00
/**
* @ var string
*/
2017-07-05 11:24:24 +02:00
public $cover ;
2024-11-06 23:57:45 +01:00
/**
* @ var int
*/
2017-07-05 11:24:24 +02:00
public $position ;
2024-11-06 23:57:45 +01:00
/**
* @ var 'generated' | 'uploaded' | 'unknown' | 'copy' | ''
*/
2020-04-10 10:59:32 +02:00
public $gen_or_uploaded ; // can be 'generated', 'uploaded', 'unknown'
2024-11-06 23:57:45 +01:00
/**
* @ var string
*/
2017-07-05 11:24:24 +02:00
public $extraparams ;
2024-11-06 23:57:45 +01:00
/**
* @ var int | ''
*/
2017-07-05 11:24:24 +02:00
public $date_c = '' ;
2024-11-06 23:57:45 +01:00
/**
* @ var int | ''
*/
2017-07-05 11:24:24 +02:00
public $date_m = '' ;
2018-10-10 09:23:55 +02:00
/**
2020-06-18 15:07:43 +02:00
* @ var int ID
*/
2017-07-05 11:24:24 +02:00
public $fk_user_c ;
2018-10-10 09:23:55 +02:00
/**
2020-06-18 15:07:43 +02:00
* @ var int ID
*/
2017-07-05 11:24:24 +02:00
public $fk_user_m ;
2018-10-10 09:23:55 +02:00
2024-11-06 23:57:45 +01:00
/**
* @ var string
*/
2017-07-05 11:24:24 +02:00
public $acl ;
2024-11-06 23:57:45 +01:00
/**
* @ var string
*/
2018-04-13 15:12:36 +02:00
public $src_object_type ;
2024-11-06 23:57:45 +01:00
/**
* @ var int
*/
2018-04-13 15:12:36 +02:00
public $src_object_id ;
2017-07-05 11:24:24 +02:00
}