26 require_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,
'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;
232 $resultvalidate = $this->
validate($user, $notrigger);
233 if ($resultvalidate <= 0) {
234 return $resultvalidate;
248 global $langs, $extrafields;
253 $object =
new self($this->db);
258 $result = $object->fetchCommon($fromid);
259 if ($result > 0 && !empty($object->table_element_line)) {
260 $object->fetchLines();
269 unset($object->fk_user_creat);
270 unset($object->import_key);
273 if (property_exists($object,
'ref')) {
274 $object->ref = empty($this->fields[
'ref'][
'default']) ?
"Copy_Of_".$object->ref : $this->fields[
'ref'][
'default'];
276 if (property_exists($object,
'label')) {
277 $object->label = empty($this->fields[
'label'][
'default']) ? $langs->trans(
"CopyOf").
" ".$object->label : $this->fields[
'label'][
'default'];
279 if (property_exists($object,
'status')) {
280 $object->status = self::STATUS_DRAFT;
282 if (property_exists($object,
'date_creation')) {
283 $object->date_creation =
dol_now();
285 if (property_exists($object,
'date_modification')) {
286 $object->date_modification =
null;
290 if (is_array($object->array_options) && count($object->array_options) > 0) {
291 $extrafields->fetch_name_optionals_label($this->table_element);
292 foreach ($object->array_options as $key => $option) {
293 $shortkey = preg_replace(
'/options_/',
'', $key);
294 if (!empty($extrafields->attributes[$this->table_element][
'unique'][$shortkey])) {
296 unset($object->array_options[$key]);
302 $object->context[
'createfromclone'] =
'createfromclone';
303 $result = $object->createCommon($user);
306 $this->error = $object->error;
307 $this->errors = $object->errors;
319 if (!empty($object->socid) && property_exists($this,
'fk_soc') && $this->fk_soc == $object->socid) {
326 unset($object->context[
'createfromclone']);
333 $this->
db->rollback();
345 public function fetch($id, $ref =
null)
348 if ($result > 0 && !empty($this->table_element_line)) {
361 $this->lines = array();
379 public function fetchAll($sortorder =
'', $sortfield =
'', $limit = 0, $offset = 0, array $filter = array(), $filtermode =
'AND')
389 $sql .=
" FROM ".MAIN_DB_PREFIX.$this->table_element.
" as t";
390 if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) {
391 $sql .=
" WHERE t.entity IN (".getEntity($this->table_element).
")";
393 $sql .=
" WHERE 1 = 1";
397 if (count($filter) > 0) {
398 foreach ($filter as $key => $value) {
399 if ($key ==
't.rowid') {
400 $sqlwhere[] = $key.
" = ".((int) $value);
401 } elseif (in_array($this->fields[$key][
'type'], array(
'date',
'datetime',
'timestamp'))) {
402 $sqlwhere[] = $key.
" = '".$this->
db->idate($value).
"'";
403 } elseif ($key ==
'customsql') {
404 $sqlwhere[] = $value;
405 } elseif (strpos($value,
'%') ===
false) {
406 $sqlwhere[] = $key.
" IN (".$this->
db->sanitize($this->
db->escape($value)).
")";
408 $sqlwhere[] = $key.
" LIKE '%".$this->
db->escape($value).
"%'";
412 if (count($sqlwhere) > 0) {
413 $sql .=
" AND (".implode(
" ".$filtermode.
" ", $sqlwhere).
")";
416 if (!empty($sortfield)) {
417 $sql .= $this->
db->order($sortfield, $sortorder);
419 if (!empty($limit)) {
420 $sql .= $this->
db->plimit($limit, $offset);
427 while ($i < ($limit ? min($limit, $num) : $num)) {
428 $obj = $this->
db->fetch_object(
$resql);
430 $record =
new self($this->db);
431 $record->setVarsFromFetchObj($obj);
433 $records[$record->id] = $record;
441 $this->errors[] =
'Error '.$this->db->lasterror();
442 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
467 public function delete(
User $user, $notrigger =
false)
483 if ($this->status < 0) {
484 $this->error =
'ErrorDeleteLineNotAllowedByObjectStatus';
501 global $conf, $langs;
503 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
508 if ($this->status == self::STATUS_VALIDATED) {
509 dol_syslog(get_class($this).
"::validate action abandonned: already validated", LOG_WARNING);
526 if (!$error && (preg_match(
'/^[\(]?PROV/i', $this->
ref) || empty($this->
ref))) {
531 $this->newref = $num;
535 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
536 $sql .=
" SET ref = '".$this->db->escape($num).
"',";
537 $sql .=
" status = ".self::STATUS_VALIDATED;
538 if (!empty($this->fields[
'date_validation'])) {
539 $sql .=
", date_validation = '".$this->db->idate($now).
"'";
541 if (!empty($this->fields[
'fk_user_valid'])) {
542 $sql .=
", fk_user_valid = ".((int) $user->id);
544 $sql .=
" WHERE rowid = ".((int) $this->
id);
546 dol_syslog(get_class($this).
"::validate()", LOG_DEBUG);
550 $this->error = $this->
db->lasterror();
554 if (!$error && !$notrigger) {
556 $result = $this->
call_trigger(
'TARGET_VALIDATE', $user);
565 $this->oldref = $this->ref;
568 if (preg_match(
'/^[\(]?PROV/i', $this->
ref)) {
570 $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).
"'";
571 $sql .=
" WHERE filename LIKE '".$this->db->escape($this->
ref).
"%' AND filepath = 'target/".$this->
db->escape($this->
ref).
"' and entity = ".$conf->entity;
574 $error++; $this->error = $this->
db->lasterror();
580 $dirsource = $conf->webhook->dir_output.
'/target/'.$oldref;
581 $dirdest = $conf->webhook->dir_output.
'/target/'.$newref;
582 if (!$error && file_exists($dirsource)) {
583 dol_syslog(get_class($this).
"::validate() rename dir ".$dirsource.
" into ".$dirdest);
585 if (@rename($dirsource, $dirdest)) {
588 $listoffiles =
dol_dir_list($conf->webhook->dir_output.
'/target/'.$newref,
'files', 1,
'^'.preg_quote($oldref,
'/'));
589 foreach ($listoffiles as $fileentry) {
590 $dirsource = $fileentry[
'name'];
591 $dirdest = preg_replace(
'/^'.preg_quote($oldref,
'/').
'/', $newref, $dirsource);
592 $dirsource = $fileentry[
'path'].
'/'.$dirsource;
593 $dirdest = $fileentry[
'path'].
'/'.$dirdest;
594 @rename($dirsource, $dirdest);
604 $this->status = self::STATUS_VALIDATED;
611 $this->
db->rollback();
627 if ($this->status <= self::STATUS_DRAFT) {
638 return $this->
setStatusCommon($user, self::STATUS_DRAFT, $notrigger,
'TARGET_UNVALIDATE');
648 public function cancel($user, $notrigger = 0)
651 if ($this->status != self::STATUS_VALIDATED) {
662 return $this->
setStatusCommon($user, self::STATUS_CANCELED, $notrigger,
'TARGET_CANCEL');
672 public function reopen($user, $notrigger = 0)
675 if ($this->status != self::STATUS_CANCELED) {
686 return $this->
setStatusCommon($user, self::STATUS_VALIDATED, $notrigger,
'TARGET_REOPEN');
699 public function getNomUrl($withpicto = 0, $option =
'', $notooltip = 0, $morecss =
'', $save_lastsearch_value = -1)
701 global $conf, $langs, $hookmanager;
703 if (!empty($conf->dol_no_mouse_hover)) {
709 $label =
img_picto(
'', $this->picto).
' <u>'.$langs->trans(
"Target").
'</u>';
710 if (isset($this->status)) {
711 $label .=
' '.$this->getLibStatut(5);
714 $label .=
'<b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
716 $url =
dol_buildpath(
'/webhook/target_card.php', 1).
'?id='.$this->id;
718 if ($option !=
'nolink') {
720 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
721 if ($save_lastsearch_value == -1 && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
722 $add_save_lastsearch_values = 1;
724 if ($url && $add_save_lastsearch_values) {
725 $url .=
'&save_lastsearch_values=1';
730 if (empty($notooltip)) {
731 if (!empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) {
732 $label = $langs->trans(
"ShowTarget");
733 $linkclose .=
' alt="'.dol_escape_htmltag($label, 1).
'"';
735 $linkclose .=
' title="'.dol_escape_htmltag($label, 1).
'"';
736 $linkclose .=
' class="classfortooltip'.($morecss ?
' '.$morecss :
'').
'"';
738 $linkclose = ($morecss ?
' class="'.$morecss.
'"' :
'');
741 if ($option ==
'nolink' || empty($url)) {
742 $linkstart =
'<span';
744 $linkstart =
'<a href="'.$url.
'"';
746 $linkstart .= $linkclose.
'>';
747 if ($option ==
'nolink' || empty($url)) {
748 $linkend =
'</span>';
753 $result .= $linkstart;
755 if (empty($this->showphoto_on_popup)) {
757 $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);
761 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
763 list($class, $module) = explode(
'@', $this->picto);
766 $filename = $filearray[0][
'name'];
767 if (!empty($filename)) {
768 $pospoint = strpos($filearray[0][
'name'],
'.');
770 $pathtophoto = $class.
'/'.$this->
ref.
'/thumbs/'.substr($filename, 0, $pospoint).
'_mini'.substr($filename, $pospoint);
771 if (empty($conf->global->{strtoupper($module.
'_'.$class).
'_FORMATLISTPHOTOSASUSERS'})) {
772 $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>';
774 $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>';
779 $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);
784 if ($withpicto != 2) {
785 $result .= $this->ref;
791 global $action, $hookmanager;
792 $hookmanager->initHooks(array(
'targetdao'));
793 $parameters = array(
'id'=>$this->
id,
'getnomurl' => &$result);
794 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
796 $result = $hookmanager->resPrint;
798 $result .= $hookmanager->resPrint;
812 return $this->LibStatut($this->status, $mode);
823 return $this->LibStatut($this->status, $mode);
837 if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
840 $this->labelStatus[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
841 $this->labelStatus[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Enabled');
842 $this->labelStatus[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Disabled');
843 $this->labelStatusShort[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
844 $this->labelStatusShort[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Enabled');
845 $this->labelStatusShort[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Disabled');
848 $statusType =
'status'.$status;
850 if ($status == self::STATUS_CANCELED) {
851 $statusType =
'status6';
854 return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status],
'', $statusType, $mode);
865 $sql =
"SELECT rowid, date_creation as datec, tms as datem,";
866 $sql .=
" fk_user_creat, fk_user_modif";
867 $sql .=
" FROM ".MAIN_DB_PREFIX.$this->table_element.
" as t";
868 $sql .=
" WHERE t.rowid = ".((int) $id);
870 $result = $this->
db->query($sql);
872 if ($this->
db->num_rows($result)) {
873 $obj = $this->
db->fetch_object($result);
874 $this->
id = $obj->rowid;
877 $this->user_creation_id = $obj->fk_user_creat;
878 $this->user_modification_id = $obj->fk_user_modif;
879 $this->date_creation = $this->
db->jdate($obj->datec);
880 $this->date_modification = empty($obj->datem) ?
'' : $this->
db->jdate($obj->datem);
883 $this->
db->free($result);
897 $this->url =
"https://thisisunurl";
898 $this->trigger_codes =
"ThisIsATestCode";
899 $this->initAsSpecimenCommon();
909 $this->lines = array();
912 $result = $objectline->fetchAll(
'ASC',
'position', 0, 0, array(
'customsql'=>
'fk_target = '.((
int) $this->
id)));
914 if (is_numeric($result)) {
915 $this->error = $objectline->error;
916 $this->errors = $objectline->errors;
919 $this->lines = $result;
931 global $langs, $conf;
933 if (empty($conf->global->WEBHOOK_TARGET_ADDON)) {
934 $conf->global->WEBHOOK_TARGET_ADDON =
'mod_target_standard';
937 if (!empty($conf->global->WEBHOOK_TARGET_ADDON)) {
940 $file = $conf->global->WEBHOOK_TARGET_ADDON.
".php";
941 $classname = $conf->global->WEBHOOK_TARGET_ADDON;
944 $dirmodels = array_merge(array(
'/'), (array) $conf->modules_parts[
'models']);
945 foreach ($dirmodels as $reldir) {
949 $mybool |= @include_once $dir.$file;
952 if ($mybool ===
false) {
957 if (class_exists($classname)) {
958 $obj =
new $classname();
959 $numref = $obj->getNextValue($this);
961 if ($numref !=
'' && $numref !=
'-1') {
964 $this->error = $obj->error;
969 print $langs->trans(
"Error").
" ".$langs->trans(
"ClassNotFound").
' '.$classname;
973 print $langs->trans(
"ErrorNumberingModuleNotSetup", $this->element);
989 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams =
null)
991 global $conf, $langs;
994 $includedocgeneration = 0;
997 $modele =
'standard_target';
999 if (!empty($this->model_pdf)) {
1000 $modele = $this->model_pdf;
1001 } elseif (!empty($conf->global->TARGET_ADDON_PDF)) {
1002 $modele = $conf->global->TARGET_ADDON_PDF;
1006 $modelpath =
"core/modules/webhook/doc/";
1008 if ($includedocgeneration && !empty($modele)) {
1009 $result = $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
1024 global $conf, $langs;
1040 $this->
db->commit();
1047 require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobjectline.class.php';
1060 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.
getFieldList($alias='')
Function to concat keys of fields.
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.
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.
if(isModEnabled('facture') &&!empty($user->rights->facture->lire)) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') &&!empty($user->rights->don->lire)) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $resql
Social contributions to pay.
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)
dolGetStatus($statusLabel='', $statusLabelShort='', $html='', $statusType='status0', $displayMode=0, $url='', $params=array())
Output the badge of a status.
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.
isModEnabled($module)
Is Dolibarr module enabled.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
$conf db
API class for accounts.