27require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobject.class.php';
39 public $module =
'knowledgemanagement';
44 public $element =
'knowledgerecord';
49 public $table_element =
'knowledgemanagement_knowledgerecord';
54 public $picto =
'knowledgemanagement';
57 const STATUS_DRAFT = 0;
58 const STATUS_VALIDATED = 1;
59 const STATUS_CANCELED = 9;
93 public $fields = array(
94 'rowid' => array(
'type' =>
'integer',
'label' =>
'TechnicalID',
'enabled' => 1,
'position' => 1,
'notnull' => 1,
'visible' => 0,
'noteditable' => 1,
'index' => 1,
'css' =>
'left',
'comment' =>
"Id"),
95 'ref' => array(
'type' =>
'varchar(128)',
'label' =>
'Ref',
'enabled' => 1,
'position' => 10,
'notnull' => 1,
'default' =>
'(PROV)',
'visible' => 5,
'index' => 1,
'searchall' => 1,
'comment' =>
"Reference of object",
"csslist" =>
"nowraponall",
"showoncombobox" => 1),
96 'entity' => array(
'type' =>
'integer',
'label' =>
'Entity',
'default' =>
'1',
'enabled' => 1,
'visible' => 0,
'notnull' => 1,
'position' => 20,
'index' => 1),
97 'question' => array(
'type' =>
'text',
'label' =>
'Question',
'enabled' => 1,
'position' => 30,
'notnull' => 1,
'visible' => 1,
'searchall' => 1,
'csslist' =>
'tdoverflowmax300 small',
'copytoclipboard' => 1,
'tdcss' =>
'titlefieldcreate nowraponall'),
98 'lang' => array(
'type' =>
'varchar(6)',
'label' =>
'Language',
'enabled' => 1,
'position' => 40,
'notnull' => 0,
'visible' => 1,
'tdcss' =>
'titlefieldcreate nowraponall',
"csslist" =>
"minwidth100 maxwidth200"),
99 'date_creation' => array(
'type' =>
'datetime',
'label' =>
'DateCreation',
'enabled' => 1,
'position' => 500,
'notnull' => 1,
'visible' => -2,
'csslist' =>
'nowraponall'),
100 'tms' => array(
'type' =>
'timestamp',
'label' =>
'DateModification',
'enabled' => 1,
'position' => 501,
'notnull' => 0,
'visible' => 2,),
101 'last_main_doc' => array(
'type' =>
'varchar(255)',
'label' =>
'LastMainDoc',
'enabled' => 1,
'position' => 600,
'notnull' => 0,
'visible' => 0,),
102 'fk_user_creat' => array(
'type' =>
'integer:User:user/class/user.class.php',
'label' =>
'UserCreation',
'enabled' => 1,
'position' => 510,
'notnull' => 1,
'visible' => -2,
'foreignkey' =>
'user.rowid',),
103 'fk_user_modif' => array(
'type' =>
'integer:User:user/class/user.class.php',
'label' =>
'UserModif',
'enabled' => 1,
'position' => 511,
'notnull' => -1,
'visible' => -2,),
104 'fk_user_valid' => array(
'type' =>
'integer:User:user/class/user.class.php',
'label' =>
'UserValidation',
'enabled' => 1,
'position' => 512,
'notnull' => 0,
'visible' => -2,),
105 'import_key' => array(
'type' =>
'varchar(14)',
'label' =>
'ImportId',
'enabled' => 1,
'position' => 1000,
'notnull' => -1,
'visible' => -2,),
106 'model_pdf' => array(
'type' =>
'varchar(255)',
'label' =>
'Model pdf',
'enabled' => 1,
'position' => 1010,
'notnull' => -1,
'visible' => 0,),
108 'fk_c_ticket_category' => array(
'type' =>
'integer:CTicketCategory:ticket/class/cticketcategory.class.php:0:(t.active:=:1):pos',
'label' =>
'SuggestedForTicketsInGroup',
'enabled' =>
'isModEnabled("ticket")',
'position' => 520,
'notnull' => 0,
'visible' => -1,
'help' =>
'YouCanLinkArticleToATicketCategory',
'csslist' =>
'minwidth200 tdoverflowmax250'),
109 'answer' => array(
'type' =>
'html',
'label' =>
'Solution',
'enabled' => 1,
'position' => 600,
'notnull' => 0,
'visible' => 3,
'searchall' => 1,
'csslist' =>
'tdoverflowmax300',
'copytoclipboard' => 1,
'tdcss' =>
'titlefieldcreate nowraponall'),
110 'status' => array(
'type' =>
'integer',
'label' =>
'Status',
'enabled' => 1,
'position' => 1000,
'notnull' => 1,
'visible' => 5,
'default' =>
'0',
'index' => 1,
'arrayofkeyval' => array(
'0' =>
'Draft',
'1' =>
'Validated',
'9' =>
'Obsolete'),),
115 public $last_main_doc;
116 public $fk_user_creat;
117 public $fk_user_modif;
118 public $fk_user_valid;
184 $this->ismultientitymanaged = 1;
185 $this->isextrafieldmanaged = 1;
188 $this->fields[
'rowid'][
'visible'] = 0;
190 if (!isModEnabled(
'multicompany') && isset($this->fields[
'entity'])) {
191 $this->fields[
'entity'][
'enabled'] = 0;
195 foreach ($this->fields as $key => $val) {
196 if (isset($val[
'enabled']) && empty($val[
'enabled'])) {
197 unset($this->fields[$key]);
202 if (is_object($langs)) {
203 foreach ($this->fields as $key => $val) {
204 if (!empty($val[
'arrayofkeyval']) && is_array($val[
'arrayofkeyval'])) {
205 foreach ($val[
'arrayofkeyval'] as $key2 => $val2) {
206 $this->fields[$key][
'arrayofkeyval'][$key2] = $langs->trans($val2);
234 global $langs, $extrafields;
244 $result =
$object->fetchCommon($fromid);
245 if ($result > 0 && !empty(
$object->table_element_line)) {
259 if (property_exists(
$object,
'ref')) {
260 $object->ref = empty($this->fields[
'ref'][
'default']) ?
"Copy_Of_".$object->ref : $this->fields[
'ref'][
'default'];
262 if (property_exists(
$object,
'question')) {
263 $object->question = empty($this->fields[
'question'][
'default']) ? $langs->trans(
"CopyOf").
" ".
$object->question : $this->fields[
'question'][
'default'];
265 if (property_exists(
$object,
'status')) {
266 $object->status = self::STATUS_DRAFT;
268 if (property_exists(
$object,
'date_creation')) {
271 if (property_exists(
$object,
'date_modification')) {
272 $object->date_modification =
null;
276 if (is_array(
$object->array_options) && count(
$object->array_options) > 0) {
277 $extrafields->fetch_name_optionals_label($this->table_element);
278 foreach (
$object->array_options as $key => $option) {
279 $shortkey = preg_replace(
'/options_/',
'', $key);
280 if (!empty($extrafields->attributes[$this->table_element][
'unique'][$shortkey])) {
283 unset(
$object->array_options[$key]);
289 $object->context[
'createfromclone'] =
'createfromclone';
290 $result =
$object->createCommon($user);
294 $this->errors =
$object->errors;
306 if (property_exists($this,
'fk_soc') && $this->fk_soc ==
$object->socid) {
313 unset(
$object->context[
'createfromclone']);
320 $this->db->rollback();
332 public function fetch($id, $ref =
null)
335 if ($result > 0 && !empty($this->table_element_line)) {
348 $this->lines = array();
366 public function fetchAll($sortorder =
'', $sortfield =
'', $limit = 0, $offset = 0, $filter =
'', $filtermode =
'AND')
374 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
375 if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) {
376 $sql .=
' WHERE t.entity IN ('.getEntity($this->element).
')';
378 $sql .=
' WHERE 1 = 1';
382 if (is_array($filter)) {
384 if (count($filter) > 0) {
385 foreach ($filter as $key => $value) {
386 if ($key ==
't.rowid') {
387 $sqlwhere[] = $this->db->sanitize($key).
" = ".((int) $value);
388 } elseif (array_key_exists($key, $this->fields) && in_array($this->fields[$key][
'type'], array(
'date',
'datetime',
'timestamp'))) {
389 $sqlwhere[] = $this->db->sanitize($key).
" = '".$this->db->idate($value).
"'";
390 } elseif (strpos($value,
'%') ===
false) {
391 $sqlwhere[] = $this->db->sanitize($key).
' IN ('.$this->db->sanitize($this->db->escape($value)).
')';
393 $sqlwhere[] = $this->db->sanitize($key).
" LIKE '%".$this->db->escape($this->db->escapeforlike($value)).
"%'";
397 if (count($sqlwhere) > 0) {
398 $sql .=
' AND ('.implode(
' '.$this->db->escape($filtermode).
' ', $sqlwhere).
')';
408 $this->errors[] = $errormessage;
409 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
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__.
' '.implode(
',', $this->errors), LOG_ERR);
464 public function delete(
User $user, $notrigger = 0)
467 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"categorie_knowledgemanagement WHERE fk_knowledgemanagement = ".((int) $this->
id);
468 dol_syslog(get_class($this).
"::delete", LOG_DEBUG);
469 $resql = $this->db->query($sql);
472 $this->error .= $this->db->lasterror();
478 $elements = array(
'categorie_knowledgemanagement');
479 foreach ($elements as $table) {
481 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.$table;
482 $sql .=
" WHERE fk_knowledgemanagement = ".(int) $this->
id;
484 $result = $this->db->query($sql);
487 $this->errors[] = $this->db->lasterror();
508 $this->error =
'ErrorDeleteLineNotAllowedByObjectStatus';
525 global $conf, $langs;
527 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
532 if ($this->
status == self::STATUS_VALIDATED) {
533 dol_syslog(get_class($this).
"::validate action abandoned: already validated", LOG_WARNING);
550 if (!$error && (preg_match(
'/^[\(]?PROV/i', $this->
ref) || empty($this->
ref))) {
555 $this->newref = $num;
559 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
560 $sql .=
" SET ref = '".$this->db->escape($num).
"',";
561 $sql .=
" status = ".self::STATUS_VALIDATED;
562 if (!empty($this->fields[
'date_validation'])) {
563 $sql .=
", date_validation = '".$this->db->idate($now).
"'";
565 if (!empty($this->fields[
'fk_user_valid'])) {
566 $sql .=
", fk_user_valid = ".((int) $user->id);
568 $sql .=
" WHERE rowid = ".((int) $this->
id);
570 dol_syslog(get_class($this).
"::validate()", LOG_DEBUG);
571 $resql = $this->db->query($sql);
574 $this->error = $this->db->lasterror();
578 if (!$error && !$notrigger) {
580 $result = $this->
call_trigger(
'KNOWLEDGERECORD_VALIDATE', $user);
589 $this->oldref = $this->ref;
592 if (preg_match(
'/^[\(]?PROV/i', $this->
ref)) {
594 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"ecm_files set filename = CONCAT('".$this->db->escape($this->newref).
"', SUBSTR(filename, ".(strlen($this->
ref) + 1).
")), filepath = 'knowledgerecord/".$this->db->escape($this->newref).
"'";
595 $sql .=
" WHERE filename LIKE '".$this->db->escape($this->
ref).
"%' AND filepath = 'knowledgerecord/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
596 $resql = $this->db->query($sql);
599 $this->error = $this->db->lasterror();
601 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"ecm_files set filepath = 'knowledgerecord/".$this->db->escape($this->newref).
"'";
602 $sql .=
" WHERE filepath = 'knowledgerecord/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
603 $resql = $this->db->query($sql);
606 $this->error = $this->db->lasterror();
612 $dirsource = $conf->knowledgemanagement->dir_output.
'/knowledgerecord/'.$oldref;
613 $dirdest = $conf->knowledgemanagement->dir_output.
'/knowledgerecord/'.$newref;
614 if (!$error && file_exists($dirsource)) {
615 dol_syslog(get_class($this).
"::validate() rename dir ".$dirsource.
" into ".$dirdest);
617 if (@rename($dirsource, $dirdest)) {
620 $listoffiles =
dol_dir_list($conf->knowledgemanagement->dir_output.
'/knowledgerecord/'.$newref,
'files', 1,
'^'.preg_quote($oldref,
'/'));
621 foreach ($listoffiles as $fileentry) {
622 $dirsource = $fileentry[
'name'];
623 $dirdest = preg_replace(
'/^'.preg_quote($oldref,
'/').
'/', $newref, $dirsource);
624 $dirsource = $fileentry[
'path'].
'/'.$dirsource;
625 $dirdest = $fileentry[
'path'].
'/'.$dirdest;
626 @rename($dirsource, $dirdest);
636 $this->
status = self::STATUS_VALIDATED;
643 $this->db->rollback();
659 if ($this->
status <= self::STATUS_DRAFT) {
670 return $this->
setStatusCommon($user, self::STATUS_DRAFT, $notrigger,
'KNOWLEDGERECORD_UNVALIDATE');
680 public function cancel($user, $notrigger = 0)
683 if ($this->
status != self::STATUS_VALIDATED) {
694 return $this->
setStatusCommon($user, self::STATUS_CANCELED, $notrigger,
'KNOWLEDGERECORD_CANCEL');
704 public function reopen($user, $notrigger = 0)
707 if ($this->
status != self::STATUS_CANCELED) {
718 return $this->
setStatusCommon($user, self::STATUS_VALIDATED, $notrigger,
'KNOWLEDGERECORD_REOPEN');
730 global $conf, $langs;
732 $langs->loadLangs([
'knowledgemanagement',
'languages']);
735 $nofetch = !empty($params[
'nofetch']);
737 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"KnowledgeRecord").
'</u>';
738 if (isset($this->
statut)) {
739 $datas[
'picto'] .=
' '.$this->getLibStatut(5);
741 $datas[
'label'] =
'<br><b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
742 $datas[
'question'] =
'<br><b>'.$langs->trans(
'Question').
':</b> '.$this->question;
743 $labellang = ($this->lang ? $langs->trans(
'Language_'.$this->lang) :
'');
744 $datas[
'lang'] =
'<br><b>'.$langs->trans(
'Language').
':</b> ' .
picto_from_langcode($this->lang,
'class="paddingrightonly saturatemedium opacitylow"') . $labellang;
746 if (isModEnabled(
'category') && !$nofetch) {
747 require_once DOL_DOCUMENT_ROOT .
'/categories/class/categorie.class.php';
748 $form =
new Form($this->db);
749 $datas[
'categories'] =
'<br>' . $form->showCategories($this->
id, Categorie::TYPE_KNOWLEDGEMANAGEMENT, 1);
765 public function getNomUrl($withpicto = 0, $option =
'', $notooltip = 0, $morecss =
'', $save_lastsearch_value = -1)
767 global $conf, $langs, $hookmanager;
769 if (!empty($conf->dol_no_mouse_hover)) {
777 'objecttype' => $this->element.($this->module ?
'@'.$this->module :
''),
781 $classfortooltip =
'classfortooltip';
784 $classfortooltip =
'classforajaxtooltip';
785 $dataparams =
' data-params="'.dol_escape_htmltag(json_encode($params)).
'"';
791 $url =
dol_buildpath(
'/knowledgemanagement/knowledgerecord_card.php', 1).
'?id='.$this->id;
793 if ($option !=
'nolink') {
795 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
796 if ($save_lastsearch_value == -1 && isset($_SERVER[
"PHP_SELF"]) && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
797 $add_save_lastsearch_values = 1;
799 if ($add_save_lastsearch_values) {
800 $url .=
'&save_lastsearch_values=1';
805 if (empty($notooltip)) {
807 $label = $langs->trans(
"ShowKnowledgeRecord");
808 $linkclose .=
' alt="'.dol_escape_htmltag($label, 1).
'"';
810 $linkclose .= ($label ?
' title="'.dol_escape_htmltag($label, 1).
'"' :
' title="tocomplete"');
811 $linkclose .= $dataparams.
' class="'.$classfortooltip.($morecss ?
' '.$morecss :
'').
'"';
813 $linkclose = ($morecss ?
' class="'.$morecss.
'"' :
'');
816 if ($option ==
'nolink') {
817 $linkstart =
'<span';
819 $linkstart =
'<a href="'.$url.
'"';
821 $linkstart .= $linkclose.
'>';
822 if ($option ==
'nolink') {
823 $linkend =
'</span>';
828 $result .= $linkstart;
830 if (empty($this->showphoto_on_popup)) {
832 $result .=
img_object(($notooltip ?
'' : $label), ($this->picto ? $this->picto :
'generic'), ($notooltip ? (($withpicto != 2) ?
'class="paddingright"' :
'') : $dataparams.
' class="'.(($withpicto != 2) ?
'paddingright ' :
'').$classfortooltip.
'"'), 0, 0, $notooltip ? 0 : 1);
836 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
838 list($class, $module) = explode(
'@', $this->picto);
841 $filename = $filearray[0][
'name'];
842 if (!empty($filename)) {
843 $pospoint = strpos($filearray[0][
'name'],
'.');
845 $pathtophoto = $class.
'/'.$this->
ref.
'/thumbs/'.substr($filename, 0, $pospoint).
'_mini'.substr($filename, $pospoint);
847 $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>';
849 $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>';
854 $result .=
img_object(($notooltip ?
'' : $label), ($this->picto ? $this->picto :
'generic'), (($withpicto != 2) ?
'class="paddingright"' :
''), 0, 0, $notooltip ? 0 : 1);
859 if ($withpicto != 2) {
860 $result .= $this->ref;
866 global $action, $hookmanager;
867 $hookmanager->initHooks(array(
'knowledgerecorddao'));
868 $parameters = array(
'id' => $this->
id,
'getnomurl' => &$result);
869 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
871 $result = $hookmanager->resPrint;
873 $result .= $hookmanager->resPrint;
901 if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
904 $this->labelStatus[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
905 $this->labelStatus[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Validated');
906 $this->labelStatus[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Obsolete');
907 $this->labelStatusShort[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
908 $this->labelStatusShort[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Validated');
909 $this->labelStatusShort[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Obsolete');
912 $statusType =
'status'.$status;
913 if ($status == self::STATUS_VALIDATED) {
914 $statusType =
'status4';
916 if ($status == self::STATUS_CANCELED) {
917 $statusType =
'status6';
920 return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status],
'', $statusType, $mode);
931 $sql =
'SELECT rowid, date_creation as datec, tms as datem,';
932 $sql .=
' fk_user_creat, fk_user_modif';
933 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
934 $sql .=
' WHERE t.rowid = '.((int) $id);
935 $result = $this->db->query($sql);
937 if ($this->db->num_rows($result)) {
938 $obj = $this->db->fetch_object($result);
940 $this->
id = $obj->rowid;
942 $this->user_creation_id = $obj->fk_user_creat;
943 $this->user_modification_id = $obj->fk_user_modif;
944 $this->date_creation = $this->db->jdate($obj->datec);
945 $this->date_modification = empty($obj->datem) ?
'' : $this->db->jdate($obj->datem);
948 $this->db->free($result);
962 $this->question =
"ABCD";
974 $this->lines = array();
977 $result = $objectline->fetchAll(
'ASC',
'position', 0, 0,
'(fk_knowledgerecord:=:'.((
int) $this->
id).
')');
979 if (is_numeric($result)) {
980 $this->error = $objectline->error;
981 $this->errors = $objectline->errors;
984 $this->lines = $result;
996 global $langs, $conf;
997 $langs->load(
"knowledgemanagement");
1000 $conf->global->KNOWLEDGEMANAGEMENT_KNOWLEDGERECORD_ADDON =
'mod_knowledgerecord_standard';
1010 $dirmodels = array_merge(array(
'/'), (array) $conf->modules_parts[
'models']);
1011 foreach ($dirmodels as $reldir) {
1012 $dir =
dol_buildpath($reldir.
"core/modules/knowledgemanagement/");
1015 $mybool = ((bool) @include_once $dir.$file) || $mybool;
1018 if ($mybool ===
false) {
1023 if (class_exists($classname)) {
1024 $obj =
new $classname();
1025 $numref = $obj->getNextValue($this);
1027 if ($numref !=
'' && $numref !=
'-1') {
1030 $this->error = $obj->error;
1035 print $langs->trans(
"Error").
" ".$langs->trans(
"ClassNotFound").
' '.$classname;
1039 print $langs->trans(
"ErrorNumberingModuleNotSetup", $this->element);
1055 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams =
null)
1057 global $conf, $langs;
1060 $includedocgeneration = 0;
1062 $langs->load(
"knowledgemanagement");
1065 $modele =
'standard_knowledgerecord';
1067 if (!empty($this->model_pdf)) {
1068 $modele = $this->model_pdf;
1074 $modelpath =
"core/modules/knowledgemanagement/doc/";
1076 if ($includedocgeneration && !empty($modele)) {
1077 $result = $this->
commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
1092 global $conf, $langs;
1108 $this->db->commit();
1125 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
1126 return parent::setCategoriesCommon($categories, Categorie::TYPE_KNOWLEDGEMANAGEMENT);
1138 $selected = (empty($arraydata[
'selected']) ? 0 : $arraydata[
'selected']);
1140 $return =
'<div class="box-flex-item box-flex-grow-zero">';
1141 $return .=
'<div class="info-box info-box-sm">';
1142 $return .=
'<span class="info-box-icon bg-infobox-action">';
1144 $return .=
'</span>';
1145 $return .=
'<div class="info-box-content">';
1146 $return .=
'<span class="info-box-ref inline-block tdoverflowmax150 valignmiddle">'.(method_exists($this,
'getNomUrl') ? $this->
getNomUrl(1) : $this->ref).
'</span>';
1147 if ($selected >= 0) {
1148 $return .=
'<input id="cb'.$this->id.
'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->
id.
'"'.($selected ?
' checked="checked"' :
'').
'>';
1150 if (property_exists($this,
'lang') && !empty($this->lang)) {
1152 $return .=
'<br>'.picto_from_langcode($this->lang,
'class="paddingrightonly saturatemedium opacitylow paddingrightonly"');
1154 if (property_exists($this,
'question')) {
1155 $return .=
'<div class="info-box-label tdoverflowmax150 classfortooltip" title="'.dolPrintHTMLForAttribute($this->question).
'">'.
dolGetFirstLineOfText($this->question).
'</div>';
1157 if (method_exists($this,
'getLibStatut')) {
1158 $return .=
'<div class="info-box-status">'.$this->getLibStatut(3).
'</div>';
1160 $return .=
'</div>';
1161 $return .=
'</div>';
1162 $return .=
'</div>';
1168require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobjectline.class.php';
1187 $this->isextrafieldmanaged = 0;
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
print $langs trans("AuditedSecurityEvents").'</strong >< span class="opacitymedium"></span >< br > status
Or an array listing all the potential status of the object: array: int of the status => translated la...
Parent class of all other business classes (invoices, contracts, proposals, orders,...
deleteLineCommon(User $user, $idline, $notrigger=0)
Delete a line of object in database.
commonGenerateDocument($modelspath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams=null)
Common function for all objects extending CommonObject for generating documents.
createCommon(User $user, $notrigger=0)
Create object in the database.
getFieldList($alias='', $excludefields=array())
Function to concat keys of fields.
updateCommon(User $user, $notrigger=0)
Update object into database.
setStatusCommon($user, $status, $notrigger=0, $triggercode='')
Set to a status.
initAsSpecimenCommon()
Initialise object with example values Id must be 0 if object instance is a specimen.
copy_linked_contact($objFrom, $source='internal')
Copy contact from one element to current.
fetchLinesCommon($morewhere='', $noextrafields=0)
Load object in memory from the database.
fetchCommon($id, $ref=null, $morewhere='', $noextrafields=0)
Load object in memory from the database.
deleteCommon(User $user, $notrigger=0, $forcechilddeletion=0)
Delete object in 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.
Class for KnowledgeRecord.
getKanbanView($option='', $arraydata=null)
Return clicable link of object (with eventually picto)
fetch($id, $ref=null)
Load object in memory from the database.
validate($user, $notrigger=0)
Validate object.
getNextNumRef()
Returns the reference to the following non used object depending on the active numbering module.
fetchAll($sortorder='', $sortfield='', $limit=0, $offset=0, $filter='', $filtermode='AND')
Load list of objects in memory from the database.
info($id)
Load the info information in the object.
cancel($user, $notrigger=0)
Set cancel status.
update(User $user, $notrigger=0)
Update object into database.
fetchLines()
Load object lines in memory from the database.
LibStatut($status, $mode=0)
Return the status.
create(User $user, $notrigger=0)
Create object into database.
getTooltipContentArray($params)
getTooltipContentArray
getNomUrl($withpicto=0, $option='', $notooltip=0, $morecss='', $save_lastsearch_value=-1)
Return a link to the object card (with optionally the picto)
createFromClone(User $user, $fromid)
Clone an object into another one.
deleteLine(User $user, $idline, $notrigger=0)
Delete a line of object in database.
doScheduledJob()
Action executed by scheduler CAN BE A CRON TASK.
setCategories($categories)
Sets object to supplied categories.
initAsSpecimen()
Initialise object with example values Id must be 0 if object instance is a specimen.
getLinesArray()
Create an array of lines.
__construct(DoliDB $db)
Constructor.
getLibStatut($mode=0)
Return the label of the status.
generateDocument($modele, $outputlangs, $hidedetails=0, $hidedesc=0, $hideref=0, $moreparams=null)
Create a document onto disk according to template module.
reopen($user, $notrigger=0)
Set back to validated status.
setDraft($user, $notrigger=0)
Set draft status.
Class KnowledgeRecordLine.
__construct(DoliDB $db)
Constructor.
Class to manage Dolibarr users.
dol_dir_list($utf8_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.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
picto_from_langcode($codelang, $moreatt='', $notitlealt=0)
Return img flag of country for a language code or country code.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
dolGetFirstLineOfText($text, $nboflines=1, $charset='UTF-8')
Return first line of text.
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
forgeSQLFromUniversalSearchCriteria($filter, &$errorstr='', $noand=0, $nopar=0, $noerror=0)
forgeSQLFromUniversalSearchCriteria
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
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_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
publicphonebutton2 phonegreen basiclayout basiclayout TotalHT VATCode TotalVAT TotalLT1 TotalLT2 TotalTTC TotalHT clearboth nowraponall TAKEPOS_SHOW_SUBPRICE right right right takeposterminal SELECT e e e e e statut