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'),),
127 public $last_main_doc;
131 public $fk_user_creat;
135 public $fk_user_modif;
139 public $fk_user_valid;
220 $this->ismultientitymanaged = 1;
221 $this->isextrafieldmanaged = 1;
224 $this->fields[
'rowid'][
'visible'] = 0;
226 if (!isModEnabled(
'multicompany') && isset($this->fields[
'entity'])) {
227 $this->fields[
'entity'][
'enabled'] = 0;
231 foreach ($this->fields as $key => $val) {
232 if (isset($val[
'enabled']) && empty($val[
'enabled'])) {
233 unset($this->fields[$key]);
238 if (is_object($langs)) {
239 foreach ($this->fields as $key => $val) {
240 if (!empty($val[
'arrayofkeyval']) && is_array($val[
'arrayofkeyval'])) {
241 foreach ($val[
'arrayofkeyval'] as $key2 => $val2) {
242 $this->fields[$key][
'arrayofkeyval'][$key2] = $langs->trans($val2);
270 global $langs, $extrafields;
280 $result =
$object->fetchCommon($fromid);
281 if ($result > 0 && !empty(
$object->table_element_line)) {
295 if (property_exists(
$object,
'ref')) {
297 $object->ref = empty($this->fields[
'ref'][
'default']) ?
"Copy_Of_".$object->ref : $this->fields[
'ref'][
'default'];
299 if (property_exists(
$object,
'question')) {
301 $object->question = empty($this->fields[
'question'][
'default']) ? $langs->trans(
"CopyOf").
" ".
$object->question : $this->fields[
'question'][
'default'];
303 if (property_exists(
$object,
'status')) {
304 $object->status = self::STATUS_DRAFT;
306 if (property_exists(
$object,
'date_creation')) {
309 if (property_exists(
$object,
'date_modification')) {
310 $object->date_modification =
null;
314 if (is_array(
$object->array_options) && count(
$object->array_options) > 0) {
315 $extrafields->fetch_name_optionals_label($this->table_element);
316 foreach (
$object->array_options as $key => $option) {
317 $shortkey = preg_replace(
'/options_/',
'', $key);
318 if (!empty($extrafields->attributes[$this->table_element][
'unique'][$shortkey])) {
321 unset(
$object->array_options[$key]);
327 $object->context[
'createfromclone'] =
'createfromclone';
328 $result =
$object->createCommon($user);
332 $this->errors =
$object->errors;
344 if (property_exists($this,
'fk_soc') && $this->fk_soc ==
$object->socid) {
351 unset(
$object->context[
'createfromclone']);
358 $this->db->rollback();
370 public function fetch($id, $ref =
null)
373 if ($result > 0 && !empty($this->table_element_line)) {
386 $this->lines = array();
404 public function fetchAll($sortorder =
'', $sortfield =
'', $limit = 0, $offset = 0, $filter =
'', $filtermode =
'AND')
412 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
413 if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) {
414 $sql .=
' WHERE t.entity IN ('.getEntity($this->element).
')';
416 $sql .=
' WHERE 1 = 1';
420 if (is_array($filter)) {
422 if (count($filter) > 0) {
423 foreach ($filter as $key => $value) {
424 if ($key ==
't.rowid') {
425 $sqlwhere[] = $this->db->sanitize($key).
" = ".((int) $value);
426 } elseif (array_key_exists($key, $this->fields) && in_array($this->fields[$key][
'type'], array(
'date',
'datetime',
'timestamp'))) {
427 $sqlwhere[] = $this->db->sanitize($key).
" = '".$this->db->idate($value).
"'";
428 } elseif (strpos($value,
'%') ===
false) {
429 $sqlwhere[] = $this->db->sanitize($key).
' IN ('.$this->db->sanitize($this->db->escape($value)).
')';
431 $sqlwhere[] = $this->db->sanitize($key).
" LIKE '%".$this->db->escape($this->db->escapeforlike($value)).
"%'";
435 if (count($sqlwhere) > 0) {
436 $sql .=
' AND ('.implode(
' '.$this->db->escape($filtermode).
' ', $sqlwhere).
')';
446 $this->errors[] = $errormessage;
447 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
451 if (!empty($sortfield)) {
452 $sql .= $this->db->order($sortfield, $sortorder);
454 if (!empty($limit)) {
455 $sql .= $this->db->plimit($limit, $offset);
458 $resql = $this->db->query($sql);
460 $num = $this->db->num_rows($resql);
462 while ($i < ($limit ? min($limit, $num) : $num)) {
463 $obj = $this->db->fetch_object($resql);
465 $record =
new self($this->db);
466 $record->setVarsFromFetchObj($obj);
468 $records[$record->id] = $record;
472 $this->db->free($resql);
476 $this->errors[] =
'Error '.$this->db->lasterror();
477 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
502 public function delete(
User $user, $notrigger = 0)
505 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"categorie_knowledgemanagement WHERE fk_knowledgemanagement = ".((int) $this->
id);
506 dol_syslog(get_class($this).
"::delete", LOG_DEBUG);
507 $resql = $this->db->query($sql);
510 $this->error .= $this->db->lasterror();
516 $elements = array(
'categorie_knowledgemanagement');
517 foreach ($elements as $table) {
519 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.$table;
520 $sql .=
" WHERE fk_knowledgemanagement = ".(int) $this->
id;
522 $result = $this->db->query($sql);
525 $this->errors[] = $this->db->lasterror();
546 $this->error =
'ErrorDeleteLineNotAllowedByObjectStatus';
563 global $conf, $langs;
565 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
570 if ($this->
status == self::STATUS_VALIDATED) {
571 dol_syslog(get_class($this).
"::validate action abandoned: already validated", LOG_WARNING);
588 if (!$error && (preg_match(
'/^[\(]?PROV/i', $this->
ref) || empty($this->
ref))) {
593 $this->newref = $num;
597 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
598 $sql .=
" SET ref = '".$this->db->escape($num).
"',";
599 $sql .=
" status = ".self::STATUS_VALIDATED;
600 if (!empty($this->fields[
'date_validation'])) {
601 $sql .=
", date_validation = '".$this->db->idate($now).
"'";
603 if (!empty($this->fields[
'fk_user_valid'])) {
604 $sql .=
", fk_user_valid = ".((int) $user->id);
606 $sql .=
" WHERE rowid = ".((int) $this->
id);
608 dol_syslog(get_class($this).
"::validate()", LOG_DEBUG);
609 $resql = $this->db->query($sql);
612 $this->error = $this->db->lasterror();
616 if (!$error && !$notrigger) {
618 $result = $this->
call_trigger(
'KNOWLEDGERECORD_VALIDATE', $user);
627 $this->oldref = $this->ref;
630 if (preg_match(
'/^[\(]?PROV/i', $this->
ref)) {
632 $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).
"'";
633 $sql .=
" WHERE filename LIKE '".$this->db->escape($this->
ref).
"%' AND filepath = 'knowledgerecord/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
634 $resql = $this->db->query($sql);
637 $this->error = $this->db->lasterror();
639 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"ecm_files set filepath = 'knowledgerecord/".$this->db->escape($this->newref).
"'";
640 $sql .=
" WHERE filepath = 'knowledgerecord/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
641 $resql = $this->db->query($sql);
644 $this->error = $this->db->lasterror();
650 $dirsource = $conf->knowledgemanagement->dir_output.
'/knowledgerecord/'.$oldref;
651 $dirdest = $conf->knowledgemanagement->dir_output.
'/knowledgerecord/'.$newref;
652 if (!$error && file_exists($dirsource)) {
653 dol_syslog(get_class($this).
"::validate() rename dir ".$dirsource.
" into ".$dirdest);
655 if (@rename($dirsource, $dirdest)) {
658 $listoffiles =
dol_dir_list($conf->knowledgemanagement->dir_output.
'/knowledgerecord/'.$newref,
'files', 1,
'^'.preg_quote($oldref,
'/'));
659 foreach ($listoffiles as $fileentry) {
660 $dirsource = $fileentry[
'name'];
661 $dirdest = preg_replace(
'/^'.preg_quote($oldref,
'/').
'/', $newref, $dirsource);
662 $dirsource = $fileentry[
'path'].
'/'.$dirsource;
663 $dirdest = $fileentry[
'path'].
'/'.$dirdest;
664 @rename($dirsource, $dirdest);
674 $this->
status = self::STATUS_VALIDATED;
681 $this->db->rollback();
697 if ($this->
status <= self::STATUS_DRAFT) {
708 return $this->
setStatusCommon($user, self::STATUS_DRAFT, $notrigger,
'KNOWLEDGERECORD_UNVALIDATE');
718 public function cancel($user, $notrigger = 0)
721 if ($this->
status != self::STATUS_VALIDATED) {
732 return $this->
setStatusCommon($user, self::STATUS_CANCELED, $notrigger,
'KNOWLEDGERECORD_CANCEL');
742 public function reopen($user, $notrigger = 0)
745 if ($this->
status != self::STATUS_CANCELED) {
756 return $this->
setStatusCommon($user, self::STATUS_VALIDATED, $notrigger,
'KNOWLEDGERECORD_REOPEN');
767 global $conf, $langs;
769 $langs->loadLangs([
'knowledgemanagement',
'languages']);
772 $nofetch = !empty($params[
'nofetch']);
774 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"KnowledgeRecord").
'</u>';
775 if (isset($this->statut)) {
776 $datas[
'picto'] .=
' '.$this->getLibStatut(5);
778 $datas[
'label'] =
'<br><b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
779 $datas[
'question'] =
'<br><b>'.$langs->trans(
'Question').
':</b> '.$this->question;
780 $labellang = ($this->lang ? $langs->trans(
'Language_'.$this->lang) :
'');
781 $datas[
'lang'] =
'<br><b>'.$langs->trans(
'Language').
':</b> ' .
picto_from_langcode($this->lang,
'class="paddingrightonly saturatemedium opacitylow"') . $labellang;
783 if (isModEnabled(
'category') && !$nofetch) {
784 require_once DOL_DOCUMENT_ROOT .
'/categories/class/categorie.class.php';
785 $form =
new Form($this->db);
786 $datas[
'categories'] =
'<br>' . $form->showCategories($this->
id, Categorie::TYPE_KNOWLEDGEMANAGEMENT, 1);
802 public function getNomUrl($withpicto = 0, $option =
'', $notooltip = 0, $morecss =
'', $save_lastsearch_value = -1)
804 global $conf, $langs, $hookmanager;
806 if (!empty($conf->dol_no_mouse_hover)) {
814 'objecttype' => $this->element.($this->module ?
'@'.$this->module :
''),
818 $classfortooltip =
'classfortooltip';
821 $classfortooltip =
'classforajaxtooltip';
822 $dataparams =
' data-params="'.dol_escape_htmltag(json_encode($params)).
'"';
828 $url =
dol_buildpath(
'/knowledgemanagement/knowledgerecord_card.php', 1).
'?id='.$this->id;
830 if ($option !=
'nolink') {
832 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
833 if ($save_lastsearch_value == -1 && isset($_SERVER[
"PHP_SELF"]) && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
834 $add_save_lastsearch_values = 1;
836 if ($add_save_lastsearch_values) {
837 $url .=
'&save_lastsearch_values=1';
842 if (empty($notooltip)) {
844 $label = $langs->trans(
"ShowKnowledgeRecord");
845 $linkclose .=
' alt="'.dol_escape_htmltag($label, 1).
'"';
847 $linkclose .= ($label ?
' title="'.dol_escape_htmltag($label, 1).
'"' :
' title="tocomplete"');
848 $linkclose .= $dataparams.
' class="'.$classfortooltip.($morecss ?
' '.$morecss :
'').
'"';
850 $linkclose = ($morecss ?
' class="'.$morecss.
'"' :
'');
853 if ($option ==
'nolink') {
854 $linkstart =
'<span';
856 $linkstart =
'<a href="'.$url.
'"';
858 $linkstart .= $linkclose.
'>';
859 if ($option ==
'nolink') {
860 $linkend =
'</span>';
865 $result .= $linkstart;
867 if (empty($this->showphoto_on_popup)) {
869 $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);
873 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
875 list($class, $module) = explode(
'@', $this->picto);
878 $filename = $filearray[0][
'name'];
879 if (!empty($filename)) {
880 $pospoint = strpos($filearray[0][
'name'],
'.');
882 $pathtophoto = $class.
'/'.$this->
ref.
'/thumbs/'.substr($filename, 0, $pospoint).
'_mini'.substr($filename, $pospoint);
884 $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>';
886 $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>';
891 $result .=
img_object(($notooltip ?
'' : $label), ($this->picto ? $this->picto :
'generic'), (($withpicto != 2) ?
'class="paddingright"' :
''), 0, 0, $notooltip ? 0 : 1);
896 if ($withpicto != 2) {
897 $result .= $this->ref;
903 global $action, $hookmanager;
904 $hookmanager->initHooks(array(
'knowledgerecorddao'));
905 $parameters = array(
'id' => $this->
id,
'getnomurl' => &$result);
906 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
908 $result = $hookmanager->resPrint;
910 $result .= $hookmanager->resPrint;
938 if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
941 $this->labelStatus[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
942 $this->labelStatus[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Validated');
943 $this->labelStatus[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Obsolete');
944 $this->labelStatusShort[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
945 $this->labelStatusShort[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Validated');
946 $this->labelStatusShort[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Obsolete');
949 $statusType =
'status'.$status;
950 if ($status == self::STATUS_VALIDATED) {
951 $statusType =
'status4';
953 if ($status == self::STATUS_CANCELED) {
954 $statusType =
'status6';
957 return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status],
'', $statusType, $mode);
968 $sql =
'SELECT rowid, date_creation as datec, tms as datem,';
969 $sql .=
' fk_user_creat, fk_user_modif';
970 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
971 $sql .=
' WHERE t.rowid = '.((int) $id);
972 $result = $this->db->query($sql);
974 if ($this->db->num_rows($result)) {
975 $obj = $this->db->fetch_object($result);
977 $this->
id = $obj->rowid;
979 $this->user_creation_id = $obj->fk_user_creat;
980 $this->user_modification_id = $obj->fk_user_modif;
981 $this->date_creation = $this->db->jdate($obj->datec);
982 $this->date_modification = empty($obj->datem) ?
'' : $this->db->jdate($obj->datem);
985 $this->db->free($result);
999 $this->question =
"ABCD";
1011 $this->lines = array();
1014 $result = $objectline->fetchAll(
'ASC',
'position', 0, 0,
'(fk_knowledgerecord:=:'.((
int) $this->
id).
')');
1016 if (is_numeric($result)) {
1017 $this->error = $objectline->error;
1018 $this->errors = $objectline->errors;
1021 $this->lines = $result;
1034 global $langs, $conf;
1035 $langs->load(
"knowledgemanagement");
1038 $conf->global->KNOWLEDGEMANAGEMENT_KNOWLEDGERECORD_ADDON =
'mod_knowledgerecord_standard';
1048 $dirmodels = array_merge(array(
'/'), (array) $conf->modules_parts[
'models']);
1049 foreach ($dirmodels as $reldir) {
1050 $dir =
dol_buildpath($reldir.
"core/modules/knowledgemanagement/");
1053 $mybool = ((bool) @include_once $dir.$file) || $mybool;
1061 if (class_exists($classname)) {
1062 $obj =
new $classname();
1063 '@phan-var-force ModeleNumRefKnowledgeRecord $obj';
1064 $numref = $obj->getNextValue($this);
1066 if ($numref !=
'' && $numref !=
'-1') {
1069 $this->error = $obj->error;
1074 print $langs->trans(
"Error").
" ".$langs->trans(
"ClassNotFound").
' '.$classname;
1078 print $langs->trans(
"ErrorNumberingModuleNotSetup", $this->element);
1094 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams =
null)
1096 global $conf, $langs;
1099 $includedocgeneration = 0;
1101 $langs->load(
"knowledgemanagement");
1104 $modele =
'standard_knowledgerecord';
1106 if (!empty($this->model_pdf)) {
1107 $modele = $this->model_pdf;
1113 $modelpath =
"core/modules/knowledgemanagement/doc/";
1115 if ($includedocgeneration && !empty($modele)) {
1116 $result = $this->
commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
1131 global $conf, $langs;
1147 $this->db->commit();
1164 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
1165 return parent::setCategoriesCommon($categories, Categorie::TYPE_KNOWLEDGEMANAGEMENT);
1177 $selected = (empty($arraydata[
'selected']) ? 0 : $arraydata[
'selected']);
1179 $return =
'<div class="box-flex-item box-flex-grow-zero">';
1180 $return .=
'<div class="info-box info-box-sm">';
1181 $return .=
'<span class="info-box-icon bg-infobox-action">';
1183 $return .=
'</span>';
1184 $return .=
'<div class="info-box-content">';
1185 $return .=
'<span class="info-box-ref inline-block tdoverflowmax150 valignmiddle">'.(method_exists($this,
'getNomUrl') ? $this->
getNomUrl(1) : $this->ref).
'</span>';
1186 if ($selected >= 0) {
1187 $return .=
'<input id="cb'.$this->id.
'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->
id.
'"'.($selected ?
' checked="checked"' :
'').
'>';
1189 if (property_exists($this,
'lang') && !empty($this->lang)) {
1191 $return .=
'<br>'.picto_from_langcode($this->lang,
'class="paddingrightonly saturatemedium opacitylow paddingrightonly"');
1193 if (property_exists($this,
'question')) {
1194 $return .=
'<div class="info-box-label tdoverflowmax150 classfortooltip" title="'.dolPrintHTMLForAttribute($this->question).
'">'.
dolGetFirstLineOfText($this->question).
'</div>';
1196 if (method_exists($this,
'getLibStatut')) {
1197 $return .=
'<div class="info-box-status">'.$this->getLibStatut(3).
'</div>';
1199 $return .=
'</div>';
1200 $return .=
'</div>';
1201 $return .=
'</div>';
1207require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobjectline.class.php';
1226 $this->isextrafieldmanaged = 0;
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
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 clickable 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.
print $langs trans("Ref").' m titre as m m statut as status
Or an array listing all the potential status of the object: array: int of the status => translated la...
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 a Dolibarr global constant string value.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.