26require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobject.class.php';
38 public $module =
'webhook';
43 public $element =
'target';
48 public $table_element =
'webhook_target';
54 public $ismultientitymanaged = 0;
59 public $isextrafieldmanaged = 0;
64 public $picto =
'webhook';
67 const STATUS_DRAFT = 0;
68 const STATUS_VALIDATED = 1;
69 const STATUS_CANCELED = 9;
104 public $fields=array(
105 'rowid' => array(
'type'=>
'integer',
'label'=>
'TechnicalID',
'enabled'=>
'1',
'position'=>1,
'notnull'=>1,
'visible'=>0,
'noteditable'=>
'1',
'index'=>1,
'css'=>
'left',
'comment'=>
"Id"),
106 'ref' => array(
'type'=>
'varchar(128)',
'label'=>
'Ref',
'enabled'=>
'1',
'position'=>20,
'notnull'=>1,
'visible'=>4,
'noteditable'=>
'1',
'index'=>1,
'searchall'=>1,
'validate'=>
'1',
'comment'=>
"Reference of object"),
107 'label' => array(
'type'=>
'varchar(255)',
'label'=>
'Label',
'enabled'=>
'1',
'position'=>30,
'notnull'=>0,
'visible'=>1,
'searchall'=>1,
'css'=>
'minwidth300',
'cssview'=>
'wordbreak',
'help'=>
"Help text",
'showoncombobox'=>
'2',
'validate'=>
'1',),
108 'url' => array(
'type'=>
'varchar(255)',
'label'=>
'Url',
'enabled'=>
'1',
'position'=>50,
'notnull'=>1,
'visible'=>1,),
109 'trigger_codes' => array(
'type'=>
'text',
'label'=>
'TriggerCodes',
'enabled'=>
'1',
'position'=>55,
'notnull'=>1,
'visible'=>1,
'help'=>
"TriggerCodeInfo",),
110 'description' => array(
'type'=>
'text',
'label'=>
'Description',
'enabled'=>
'1',
'position'=>60,
'notnull'=>0,
'visible'=>3,
'validate'=>
'1',),
111 'note_public' => array(
'type'=>
'html',
'label'=>
'NotePublic',
'enabled'=>
'1',
'position'=>61,
'notnull'=>0,
'visible'=>0,
'cssview'=>
'wordbreak',
'validate'=>
'1',),
112 'note_private' => array(
'type'=>
'html',
'label'=>
'NotePrivate',
'enabled'=>
'1',
'position'=>62,
'notnull'=>0,
'visible'=>0,
'cssview'=>
'wordbreak',
'validate'=>
'1',),
113 'date_creation' => array(
'type'=>
'datetime',
'label'=>
'DateCreation',
'enabled'=>
'1',
'position'=>500,
'notnull'=>1,
'visible'=>-2,),
114 'tms' => array(
'type'=>
'timestamp',
'label'=>
'DateModification',
'enabled'=>
'1',
'position'=>501,
'notnull'=>0,
'visible'=>-2,),
115 'fk_user_creat' => array(
'type'=>
'integer:User:user/class/user.class.php',
'label'=>
'UserAuthor',
'enabled'=>
'1',
'position'=>510,
'notnull'=>1,
'visible'=>-2,
'foreignkey'=>
'user.rowid',),
116 'fk_user_modif' => array(
'type'=>
'integer:User:user/class/user.class.php',
'label'=>
'UserModif',
'enabled'=>
'1',
'position'=>511,
'notnull'=>-1,
'visible'=>-2,),
117 'import_key' => array(
'type'=>
'varchar(14)',
'label'=>
'ImportId',
'enabled'=>
'1',
'position'=>1000,
'notnull'=>-1,
'visible'=>-2,),
118 'status' => array(
'type'=>
'integer',
'label'=>
'Status',
'enabled'=>
'1',
'position'=>2000,
'notnull'=>1,
'default'=>1,
'visible'=>1,
'index'=>1,
'arrayofkeyval'=>array(
'0'=>
'Disabled',
'1'=>
'Enabled'),
'validate'=>
'1',),
125 public $note_private;
126 public $date_creation;
128 public $fk_user_creat;
129 public $fk_user_modif;
133 public $trigger_codes;
180 global $conf, $langs;
184 if (empty($conf->global->MAIN_SHOW_TECHNICAL_ID) && isset($this->fields[
'rowid'])) {
185 $this->fields[
'rowid'][
'visible'] = 0;
187 if (!isModEnabled(
'multicompany') && isset($this->fields[
'entity'])) {
188 $this->fields[
'entity'][
'enabled'] = 0;
198 foreach ($this->fields as $key => $val) {
199 if (isset($val[
'enabled']) && empty($val[
'enabled'])) {
200 unset($this->fields[$key]);
205 if (is_object($langs)) {
206 foreach ($this->fields as $key => $val) {
207 if (!empty($val[
'arrayofkeyval']) && is_array($val[
'arrayofkeyval'])) {
208 foreach ($val[
'arrayofkeyval'] as $key2 => $val2) {
209 $this->fields[$key][
'arrayofkeyval'][$key2] = $langs->trans($val2);
226 $this->
ref = $this->id;
228 if ($resultcreate <= 0) {
229 return $resultcreate;
244 global $langs, $extrafields;
249 $object =
new self($this->db);
254 $result = $object->fetchCommon($fromid);
255 if ($result > 0 && !empty($object->table_element_line)) {
256 $object->fetchLines();
265 unset($object->fk_user_creat);
266 unset($object->import_key);
269 if (property_exists($object,
'ref')) {
270 $object->ref = empty($this->fields[
'ref'][
'default']) ?
"Copy_Of_".$object->ref : $this->fields[
'ref'][
'default'];
272 if (property_exists($object,
'label')) {
273 $object->label = empty($this->fields[
'label'][
'default']) ? $langs->trans(
"CopyOf").
" ".$object->label : $this->fields[
'label'][
'default'];
275 if (property_exists($object,
'status')) {
276 $object->status = self::STATUS_DRAFT;
278 if (property_exists($object,
'date_creation')) {
279 $object->date_creation =
dol_now();
281 if (property_exists($object,
'date_modification')) {
282 $object->date_modification =
null;
286 if (is_array($object->array_options) && count($object->array_options) > 0) {
287 $extrafields->fetch_name_optionals_label($this->table_element);
288 foreach ($object->array_options as $key => $option) {
289 $shortkey = preg_replace(
'/options_/',
'', $key);
290 if (!empty($extrafields->attributes[$this->table_element][
'unique'][$shortkey])) {
292 unset($object->array_options[$key]);
298 $object->context[
'createfromclone'] =
'createfromclone';
299 $result = $object->createCommon($user);
302 $this->error = $object->error;
303 $this->errors = $object->errors;
315 if (!empty($object->socid) && property_exists($this,
'fk_soc') && $this->fk_soc == $object->socid) {
322 unset($object->context[
'createfromclone']);
329 $this->db->rollback();
341 public function fetch($id, $ref =
null)
344 if (empty($this->
ref)) {
345 $this->
ref = $this->id;
358 $this->lines = array();
376 public function fetchAll($sortorder =
'', $sortfield =
'', $limit = 0, $offset = 0, array $filter = array(), $filtermode =
'AND')
386 $sql .=
" FROM ".MAIN_DB_PREFIX.$this->table_element.
" as t";
387 if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) {
388 $sql .=
" WHERE t.entity IN (".getEntity($this->element).
")";
390 $sql .=
" WHERE 1 = 1";
394 if (count($filter) > 0) {
395 foreach ($filter as $key => $value) {
396 if ($key ==
't.rowid') {
397 $sqlwhere[] = $key.
" = ".((int) $value);
398 } elseif (in_array($this->fields[$key][
'type'], array(
'date',
'datetime',
'timestamp'))) {
399 $sqlwhere[] = $key.
" = '".$this->db->idate($value).
"'";
400 } elseif ($key ==
'customsql') {
401 $sqlwhere[] = $value;
402 } elseif (strpos($value,
'%') ===
false) {
403 $sqlwhere[] = $key.
" IN (".$this->db->sanitize($this->db->escape($value)).
")";
405 $sqlwhere[] = $key.
" LIKE '%".$this->db->escape($value).
"%'";
409 if (count($sqlwhere) > 0) {
410 $sql .=
" AND (".implode(
" ".$filtermode.
" ", $sqlwhere).
")";
413 if (!empty($sortfield)) {
414 $sql .= $this->db->order($sortfield, $sortorder);
416 if (!empty($limit)) {
417 $sql .= $this->db->plimit($limit, $offset);
420 $resql = $this->db->query($sql);
422 $num = $this->db->num_rows($resql);
424 while ($i < ($limit ? min($limit, $num) : $num)) {
425 $obj = $this->db->fetch_object($resql);
427 $record =
new self($this->db);
428 $record->setVarsFromFetchObj($obj);
430 $records[$record->id] = $record;
434 $this->db->free($resql);
438 $this->errors[] =
'Error '.$this->db->lasterror();
439 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
464 public function delete(
User $user, $notrigger =
false)
480 if ($this->status < 0) {
481 $this->error =
'ErrorDeleteLineNotAllowedByObjectStatus';
498 global $conf, $langs;
500 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
505 if ($this->status == self::STATUS_VALIDATED) {
506 dol_syslog(get_class($this).
"::validate action abandonned: already validated", LOG_WARNING);
523 if (!$error && (preg_match(
'/^[\(]?PROV/i', $this->
ref) || empty($this->
ref))) {
528 $this->newref = $num;
532 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
533 $sql .=
" SET ref = '".$this->db->escape($num).
"',";
534 $sql .=
" status = ".self::STATUS_VALIDATED;
535 if (!empty($this->fields[
'date_validation'])) {
536 $sql .=
", date_validation = '".$this->db->idate($now).
"'";
538 if (!empty($this->fields[
'fk_user_valid'])) {
539 $sql .=
", fk_user_valid = ".((int) $user->id);
541 $sql .=
" WHERE rowid = ".((int) $this->
id);
543 dol_syslog(get_class($this).
"::validate()", LOG_DEBUG);
544 $resql = $this->db->query($sql);
547 $this->error = $this->db->lasterror();
551 if (!$error && !$notrigger) {
553 $result = $this->
call_trigger(
'TARGET_VALIDATE', $user);
562 $this->oldref = $this->ref;
565 if (preg_match(
'/^[\(]?PROV/i', $this->
ref)) {
567 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"ecm_files set filename = CONCAT('".$this->db->escape($this->newref).
"', SUBSTR(filename, ".(strlen($this->
ref) + 1).
")), filepath = 'target/".$this->db->escape($this->newref).
"'";
568 $sql .=
" WHERE filename LIKE '".$this->db->escape($this->
ref).
"%' AND filepath = 'target/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
569 $resql = $this->db->query($sql);
571 $error++; $this->error = $this->db->lasterror();
573 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"ecm_files set filepath = 'target/".$this->db->escape($this->newref).
"'";
574 $sql .=
" WHERE filepath = 'target/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
575 $resql = $this->db->query($sql);
577 $error++; $this->error = $this->db->lasterror();
583 $dirsource = $conf->webhook->dir_output.
'/target/'.$oldref;
584 $dirdest = $conf->webhook->dir_output.
'/target/'.$newref;
585 if (!$error && file_exists($dirsource)) {
586 dol_syslog(get_class($this).
"::validate() rename dir ".$dirsource.
" into ".$dirdest);
588 if (@rename($dirsource, $dirdest)) {
591 $listoffiles =
dol_dir_list($conf->webhook->dir_output.
'/target/'.$newref,
'files', 1,
'^'.preg_quote($oldref,
'/'));
592 foreach ($listoffiles as $fileentry) {
593 $dirsource = $fileentry[
'name'];
594 $dirdest = preg_replace(
'/^'.preg_quote($oldref,
'/').
'/', $newref, $dirsource);
595 $dirsource = $fileentry[
'path'].
'/'.$dirsource;
596 $dirdest = $fileentry[
'path'].
'/'.$dirdest;
597 @rename($dirsource, $dirdest);
607 $this->status = self::STATUS_VALIDATED;
614 $this->db->rollback();
630 if ($this->status <= self::STATUS_DRAFT) {
641 return $this->
setStatusCommon($user, self::STATUS_DRAFT, $notrigger,
'TARGET_UNVALIDATE');
651 public function cancel($user, $notrigger = 0)
654 if ($this->status != self::STATUS_VALIDATED) {
665 return $this->
setStatusCommon($user, self::STATUS_CANCELED, $notrigger,
'TARGET_CANCEL');
675 public function reopen($user, $notrigger = 0)
678 if ($this->status != self::STATUS_CANCELED) {
689 return $this->
setStatusCommon($user, self::STATUS_VALIDATED, $notrigger,
'TARGET_REOPEN');
702 public function getNomUrl($withpicto = 0, $option =
'', $notooltip = 0, $morecss =
'', $save_lastsearch_value = -1)
704 global $conf, $langs, $hookmanager;
706 if (!empty($conf->dol_no_mouse_hover)) {
712 $label =
img_picto(
'', $this->picto).
' <u>'.$langs->trans(
"Target").
'</u>';
713 if (isset($this->status)) {
714 $label .=
' '.$this->getLibStatut(5);
717 $label .=
'<b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
719 $url =
dol_buildpath(
'/webhook/target_card.php', 1).
'?id='.$this->id;
721 if ($option !=
'nolink') {
723 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
724 if ($save_lastsearch_value == -1 && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
725 $add_save_lastsearch_values = 1;
727 if ($url && $add_save_lastsearch_values) {
728 $url .=
'&save_lastsearch_values=1';
733 if (empty($notooltip)) {
734 if (!empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) {
735 $label = $langs->trans(
"ShowTarget");
736 $linkclose .=
' alt="'.dol_escape_htmltag($label, 1).
'"';
738 $linkclose .=
' title="'.dol_escape_htmltag($label, 1).
'"';
739 $linkclose .=
' class="classfortooltip'.($morecss ?
' '.$morecss :
'').
'"';
741 $linkclose = ($morecss ?
' class="'.$morecss.
'"' :
'');
744 if ($option ==
'nolink' || empty($url)) {
745 $linkstart =
'<span';
747 $linkstart =
'<a href="'.$url.
'"';
749 $linkstart .= $linkclose.
'>';
750 if ($option ==
'nolink' || empty($url)) {
751 $linkend =
'</span>';
756 $result .= $linkstart;
758 if (empty($this->showphoto_on_popup)) {
760 $result .=
img_object(($notooltip ?
'' : $label), ($this->picto ? $this->picto :
'generic'), ($notooltip ? (($withpicto != 2) ?
'class="paddingright"' :
'') :
'class="'.(($withpicto != 2) ?
'paddingright ' :
'').
'classfortooltip"'), 0, 0, $notooltip ? 0 : 1);
764 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
766 list($class, $module) = explode(
'@', $this->picto);
769 $filename = $filearray[0][
'name'];
770 if (!empty($filename)) {
771 $pospoint = strpos($filearray[0][
'name'],
'.');
773 $pathtophoto = $class.
'/'.$this->
ref.
'/thumbs/'.substr($filename, 0, $pospoint).
'_mini'.substr($filename, $pospoint);
774 if (empty($conf->global->{strtoupper($module.
'_'.$class).
'_FORMATLISTPHOTOSASUSERS'})) {
775 $result .=
'<div class="floatleft inline-block valignmiddle divphotoref"><div class="photoref"><img class="photo'.$module.
'" alt="No photo" border="0" src="'.DOL_URL_ROOT.
'/viewimage.php?modulepart='.$module.
'&entity='.$conf->entity.
'&file='.urlencode($pathtophoto).
'"></div></div>';
777 $result .=
'<div class="floatleft inline-block valignmiddle divphotoref"><img class="photouserphoto userphoto" alt="No photo" border="0" src="'.DOL_URL_ROOT.
'/viewimage.php?modulepart='.$module.
'&entity='.$conf->entity.
'&file='.urlencode($pathtophoto).
'"></div>';
782 $result .=
img_object(($notooltip ?
'' : $label), ($this->picto ? $this->picto :
'generic'), ($notooltip ? (($withpicto != 2) ?
'class="paddingright"' :
'') :
'class="'.(($withpicto != 2) ?
'paddingright ' :
'').
'classfortooltip"'), 0, 0, $notooltip ? 0 : 1);
787 if ($withpicto != 2) {
788 $result .= $this->ref;
794 global $action, $hookmanager;
795 $hookmanager->initHooks(array(
'targetdao'));
796 $parameters = array(
'id'=>$this->
id,
'getnomurl' => &$result);
797 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
799 $result = $hookmanager->resPrint;
801 $result .= $hookmanager->resPrint;
815 return $this->LibStatut($this->status, $mode);
826 return $this->LibStatut($this->status, $mode);
840 if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
843 $this->labelStatus[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
844 $this->labelStatus[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Enabled');
845 $this->labelStatus[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Disabled');
846 $this->labelStatusShort[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
847 $this->labelStatusShort[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Enabled');
848 $this->labelStatusShort[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Disabled');
851 $statusType =
'status'.$status;
853 if ($status == self::STATUS_CANCELED) {
854 $statusType =
'status6';
857 return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status],
'', $statusType, $mode);
868 $sql =
"SELECT rowid, date_creation as datec, tms as datem,";
869 $sql .=
" fk_user_creat, fk_user_modif";
870 $sql .=
" FROM ".MAIN_DB_PREFIX.$this->table_element.
" as t";
871 $sql .=
" WHERE t.rowid = ".((int) $id);
873 $result = $this->db->query($sql);
875 if ($this->db->num_rows($result)) {
876 $obj = $this->db->fetch_object($result);
877 $this->
id = $obj->rowid;
880 $this->user_creation_id = $obj->fk_user_creat;
881 $this->user_modification_id = $obj->fk_user_modif;
882 $this->date_creation = $this->db->jdate($obj->datec);
883 $this->date_modification = empty($obj->datem) ?
'' : $this->db->jdate($obj->datem);
886 $this->db->free($result);
900 $this->url =
"https://thisisunurl";
901 $this->trigger_codes =
"ThisIsATestCode";
902 $this->initAsSpecimenCommon();
912 $this->lines = array();
915 $result = $objectline->fetchAll(
'ASC',
'position', 0, 0, array(
'customsql'=>
'fk_target = '.((
int) $this->
id)));
917 if (is_numeric($result)) {
918 $this->error = $objectline->error;
919 $this->errors = $objectline->errors;
922 $this->lines = $result;
934 global $langs, $conf;
936 if (empty($conf->global->WEBHOOK_TARGET_ADDON)) {
937 $conf->global->WEBHOOK_TARGET_ADDON =
'mod_target_standard';
940 if (!empty($conf->global->WEBHOOK_TARGET_ADDON)) {
943 $file = $conf->global->WEBHOOK_TARGET_ADDON.
".php";
944 $classname = $conf->global->WEBHOOK_TARGET_ADDON;
947 $dirmodels = array_merge(array(
'/'), (array) $conf->modules_parts[
'models']);
948 foreach ($dirmodels as $reldir) {
952 $mybool |= @include_once $dir.$file;
955 if ($mybool ===
false) {
960 if (class_exists($classname)) {
961 $obj =
new $classname();
962 $numref = $obj->getNextValue($this);
964 if ($numref !=
'' && $numref !=
'-1') {
967 $this->error = $obj->error;
972 print $langs->trans(
"Error").
" ".$langs->trans(
"ClassNotFound").
' '.$classname;
976 print $langs->trans(
"ErrorNumberingModuleNotSetup", $this->element);
992 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams =
null)
994 global $conf, $langs;
997 $includedocgeneration = 0;
1000 $modele =
'standard_target';
1002 if (!empty($this->model_pdf)) {
1003 $modele = $this->model_pdf;
1004 } elseif (!empty($conf->global->TARGET_ADDON_PDF)) {
1005 $modele = $conf->global->TARGET_ADDON_PDF;
1009 $modelpath =
"core/modules/webhook/doc/";
1011 if ($includedocgeneration && !empty($modele)) {
1012 $result = $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
1027 global $conf, $langs;
1043 $this->db->commit();
1050require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobjectline.class.php';
1063 public $isextrafieldmanaged = 0;
Parent class of all other business classes (invoices, contracts, proposals, orders,...
deleteLineCommon(User $user, $idline, $notrigger=false)
Delete a line of object in database.
fetchCommon($id, $ref=null, $morewhere='')
Load object in memory from the database.
createCommon(User $user, $notrigger=false)
Create object into database.
deleteCommon(User $user, $notrigger=false, $forcechilddeletion=0)
Delete object in database.
getFieldList($alias='', $excludefields=array())
Function to concat keys of fields.
setStatusCommon($user, $status, $notrigger=0, $triggercode='')
Set to a status.
copy_linked_contact($objFrom, $source='internal')
Copy contact from one element to current.
updateCommon(User $user, $notrigger=false)
Update object into database.
fetchLinesCommon($morewhere='')
Load object in memory from the database.
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.
fetchAll($sortorder='', $sortfield='', $limit=0, $offset=0, array $filter=array(), $filtermode='AND')
Load list of objects in memory from the database.
update(User $user, $notrigger=false)
Update object into database.
deleteLine(User $user, $idline, $notrigger=false)
Delete a line of object in database.
generateDocument($modele, $outputlangs, $hidedetails=0, $hidedesc=0, $hideref=0, $moreparams=null)
Create a document onto disk according to template module.
getLinesArray()
Create an array of lines.
getLabelStatus($mode=0)
Return the label of the status.
getNomUrl($withpicto=0, $option='', $notooltip=0, $morecss='', $save_lastsearch_value=-1)
Return a link to the object card (with optionaly the picto)
fetchLines()
Load object lines in memory from the database.
info($id)
Load the info information in the object.
fetch($id, $ref=null)
Load object in memory from the database.
doScheduledJob()
Action executed by scheduler CAN BE A CRON TASK.
__construct(DoliDB $db)
Constructor.
getLibStatut($mode=0)
Return the label of the status.
reopen($user, $notrigger=0)
Set back to validated status.
createFromClone(User $user, $fromid)
Clone an object into another one.
LibStatut($status, $mode=0)
Return the status.
initAsSpecimen()
Initialise object with example values Id must be 0 if object instance is a specimen.
getNextNumRef()
Returns the reference to the following non used object depending on the active numbering module.
cancel($user, $notrigger=0)
Set cancel status.
create(User $user, $notrigger=false)
Create object into database.
validate($user, $notrigger=0)
Validate object.
setDraft($user, $notrigger=0)
Set draft status.
__construct(DoliDB $db)
Constructor.
Class to manage Dolibarr users.
dol_dir_list($path, $types="all", $recursive=0, $filter="", $excludefilter=null, $sortcriteria="name", $sortorder=SORT_ASC, $mode=0, $nohook=0, $relativename="", $donotfollowsymlinks=0, $nbsecondsold=0)
Scan a directory and return a list of files/directories.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
dol_now($mode='auto')
Return date for now.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.