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 $date_creation;
116 public $last_main_doc;
117 public $fk_user_creat;
118 public $fk_user_modif;
119 public $fk_user_valid;
185 $this->ismultientitymanaged = 1;
186 $this->isextrafieldmanaged = 1;
189 $this->fields[
'rowid'][
'visible'] = 0;
191 if (!isModEnabled(
'multicompany') && isset($this->fields[
'entity'])) {
192 $this->fields[
'entity'][
'enabled'] = 0;
196 foreach ($this->fields as $key => $val) {
197 if (isset($val[
'enabled']) && empty($val[
'enabled'])) {
198 unset($this->fields[$key]);
203 if (is_object($langs)) {
204 foreach ($this->fields as $key => $val) {
205 if (!empty($val[
'arrayofkeyval']) && is_array($val[
'arrayofkeyval'])) {
206 foreach ($val[
'arrayofkeyval'] as $key2 => $val2) {
207 $this->fields[$key][
'arrayofkeyval'][$key2] = $langs->trans($val2);
235 global $langs, $extrafields;
245 $result =
$object->fetchCommon($fromid);
246 if ($result > 0 && !empty(
$object->table_element_line)) {
260 if (property_exists(
$object,
'ref')) {
261 $object->ref = empty($this->fields[
'ref'][
'default']) ?
"Copy_Of_".$object->ref : $this->fields[
'ref'][
'default'];
263 if (property_exists(
$object,
'question')) {
264 $object->question = empty($this->fields[
'question'][
'default']) ? $langs->trans(
"CopyOf").
" ".
$object->question : $this->fields[
'question'][
'default'];
266 if (property_exists(
$object,
'status')) {
267 $object->status = self::STATUS_DRAFT;
269 if (property_exists(
$object,
'date_creation')) {
272 if (property_exists(
$object,
'date_modification')) {
273 $object->date_modification =
null;
277 if (is_array(
$object->array_options) && count(
$object->array_options) > 0) {
278 $extrafields->fetch_name_optionals_label($this->table_element);
279 foreach (
$object->array_options as $key => $option) {
280 $shortkey = preg_replace(
'/options_/',
'', $key);
281 if (!empty($extrafields->attributes[$this->table_element][
'unique'][$shortkey])) {
284 unset(
$object->array_options[$key]);
290 $object->context[
'createfromclone'] =
'createfromclone';
291 $result =
$object->createCommon($user);
295 $this->errors =
$object->errors;
307 if (property_exists($this,
'fk_soc') && $this->fk_soc ==
$object->socid) {
314 unset(
$object->context[
'createfromclone']);
321 $this->db->rollback();
333 public function fetch($id, $ref =
null)
336 if ($result > 0 && !empty($this->table_element_line)) {
349 $this->lines = array();
367 public function fetchAll($sortorder =
'', $sortfield =
'', $limit = 0, $offset = 0, $filter =
'', $filtermode =
'AND')
375 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
376 if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) {
377 $sql .=
' WHERE t.entity IN ('.getEntity($this->element).
')';
379 $sql .=
' WHERE 1 = 1';
383 if (is_array($filter)) {
385 if (count($filter) > 0) {
386 foreach ($filter as $key => $value) {
387 if ($key ==
't.rowid') {
388 $sqlwhere[] = $this->db->sanitize($key).
" = ".((int) $value);
389 } elseif (array_key_exists($key, $this->fields) && in_array($this->fields[$key][
'type'], array(
'date',
'datetime',
'timestamp'))) {
390 $sqlwhere[] = $this->db->sanitize($key).
" = '".$this->db->idate($value).
"'";
391 } elseif (strpos($value,
'%') ===
false) {
392 $sqlwhere[] = $this->db->sanitize($key).
' IN ('.$this->db->sanitize($this->db->escape($value)).
')';
394 $sqlwhere[] = $this->db->sanitize($key).
" LIKE '%".$this->db->escape($this->db->escapeforlike($value)).
"%'";
398 if (count($sqlwhere) > 0) {
399 $sql .=
' AND ('.implode(
' '.$this->db->escape($filtermode).
' ', $sqlwhere).
')';
409 $this->errors[] = $errormessage;
410 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
414 if (!empty($sortfield)) {
415 $sql .= $this->db->order($sortfield, $sortorder);
417 if (!empty($limit)) {
418 $sql .= $this->db->plimit($limit, $offset);
421 $resql = $this->db->query($sql);
423 $num = $this->db->num_rows($resql);
425 while ($i < ($limit ? min($limit, $num) : $num)) {
426 $obj = $this->db->fetch_object($resql);
428 $record =
new self($this->db);
429 $record->setVarsFromFetchObj($obj);
431 $records[$record->id] = $record;
435 $this->db->free($resql);
439 $this->errors[] =
'Error '.$this->db->lasterror();
440 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
465 public function delete(
User $user, $notrigger = 0)
468 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"categorie_knowledgemanagement WHERE fk_knowledgemanagement = ".((int) $this->
id);
469 dol_syslog(get_class($this).
"::delete", LOG_DEBUG);
470 $resql = $this->db->query($sql);
473 $this->error .= $this->db->lasterror();
479 $elements = array(
'categorie_knowledgemanagement');
480 foreach ($elements as $table) {
482 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.$table;
483 $sql .=
" WHERE fk_knowledgemanagement = ".(int) $this->
id;
485 $result = $this->db->query($sql);
488 $this->errors[] = $this->db->lasterror();
509 $this->error =
'ErrorDeleteLineNotAllowedByObjectStatus';
526 global $conf, $langs;
528 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
533 if ($this->
status == self::STATUS_VALIDATED) {
534 dol_syslog(get_class($this).
"::validate action abandoned: already validated", LOG_WARNING);
551 if (!$error && (preg_match(
'/^[\(]?PROV/i', $this->
ref) || empty($this->
ref))) {
556 $this->newref = $num;
560 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
561 $sql .=
" SET ref = '".$this->db->escape($num).
"',";
562 $sql .=
" status = ".self::STATUS_VALIDATED;
563 if (!empty($this->fields[
'date_validation'])) {
564 $sql .=
", date_validation = '".$this->db->idate($now).
"'";
566 if (!empty($this->fields[
'fk_user_valid'])) {
567 $sql .=
", fk_user_valid = ".((int) $user->id);
569 $sql .=
" WHERE rowid = ".((int) $this->
id);
571 dol_syslog(get_class($this).
"::validate()", LOG_DEBUG);
572 $resql = $this->db->query($sql);
575 $this->error = $this->db->lasterror();
579 if (!$error && !$notrigger) {
581 $result = $this->
call_trigger(
'KNOWLEDGERECORD_VALIDATE', $user);
590 $this->oldref = $this->ref;
593 if (preg_match(
'/^[\(]?PROV/i', $this->
ref)) {
595 $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).
"'";
596 $sql .=
" WHERE filename LIKE '".$this->db->escape($this->
ref).
"%' AND filepath = 'knowledgerecord/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
597 $resql = $this->db->query($sql);
600 $this->error = $this->db->lasterror();
602 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"ecm_files set filepath = 'knowledgerecord/".$this->db->escape($this->newref).
"'";
603 $sql .=
" WHERE filepath = 'knowledgerecord/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
604 $resql = $this->db->query($sql);
607 $this->error = $this->db->lasterror();
613 $dirsource = $conf->knowledgemanagement->dir_output.
'/knowledgerecord/'.$oldref;
614 $dirdest = $conf->knowledgemanagement->dir_output.
'/knowledgerecord/'.$newref;
615 if (!$error && file_exists($dirsource)) {
616 dol_syslog(get_class($this).
"::validate() rename dir ".$dirsource.
" into ".$dirdest);
618 if (@rename($dirsource, $dirdest)) {
621 $listoffiles =
dol_dir_list($conf->knowledgemanagement->dir_output.
'/knowledgerecord/'.$newref,
'files', 1,
'^'.preg_quote($oldref,
'/'));
622 foreach ($listoffiles as $fileentry) {
623 $dirsource = $fileentry[
'name'];
624 $dirdest = preg_replace(
'/^'.preg_quote($oldref,
'/').
'/', $newref, $dirsource);
625 $dirsource = $fileentry[
'path'].
'/'.$dirsource;
626 $dirdest = $fileentry[
'path'].
'/'.$dirdest;
627 @rename($dirsource, $dirdest);
637 $this->
status = self::STATUS_VALIDATED;
644 $this->db->rollback();
660 if ($this->
status <= self::STATUS_DRAFT) {
671 return $this->
setStatusCommon($user, self::STATUS_DRAFT, $notrigger,
'KNOWLEDGERECORD_UNVALIDATE');
681 public function cancel($user, $notrigger = 0)
684 if ($this->
status != self::STATUS_VALIDATED) {
695 return $this->
setStatusCommon($user, self::STATUS_CANCELED, $notrigger,
'KNOWLEDGERECORD_CANCEL');
705 public function reopen($user, $notrigger = 0)
708 if ($this->
status != self::STATUS_CANCELED) {
719 return $this->
setStatusCommon($user, self::STATUS_VALIDATED, $notrigger,
'KNOWLEDGERECORD_REOPEN');
731 global $conf, $langs;
733 $langs->loadLangs([
'knowledgemanagement',
'languages']);
736 $nofetch = !empty($params[
'nofetch']);
738 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"KnowledgeRecord").
'</u>';
739 if (isset($this->
statut)) {
740 $datas[
'picto'] .=
' '.$this->getLibStatut(5);
742 $datas[
'label'] =
'<br><b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
743 $datas[
'question'] =
'<br><b>'.$langs->trans(
'Question').
':</b> '.$this->question;
744 $labellang = ($this->lang ? $langs->trans(
'Language_'.$this->lang) :
'');
745 $datas[
'lang'] =
'<br><b>'.$langs->trans(
'Language').
':</b> ' .
picto_from_langcode($this->lang,
'class="paddingrightonly saturatemedium opacitylow"') . $labellang;
747 if (isModEnabled(
'category') && !$nofetch) {
748 require_once DOL_DOCUMENT_ROOT .
'/categories/class/categorie.class.php';
749 $form =
new Form($this->db);
750 $datas[
'categories'] =
'<br>' . $form->showCategories($this->
id, Categorie::TYPE_KNOWLEDGEMANAGEMENT, 1);
766 public function getNomUrl($withpicto = 0, $option =
'', $notooltip = 0, $morecss =
'', $save_lastsearch_value = -1)
768 global $conf, $langs, $hookmanager;
770 if (!empty($conf->dol_no_mouse_hover)) {
778 'objecttype' => $this->element.($this->module ?
'@'.$this->module :
''),
782 $classfortooltip =
'classfortooltip';
785 $classfortooltip =
'classforajaxtooltip';
786 $dataparams =
' data-params="'.dol_escape_htmltag(json_encode($params)).
'"';
792 $url =
dol_buildpath(
'/knowledgemanagement/knowledgerecord_card.php', 1).
'?id='.$this->id;
794 if ($option !=
'nolink') {
796 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
797 if ($save_lastsearch_value == -1 && isset($_SERVER[
"PHP_SELF"]) && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
798 $add_save_lastsearch_values = 1;
800 if ($add_save_lastsearch_values) {
801 $url .=
'&save_lastsearch_values=1';
806 if (empty($notooltip)) {
808 $label = $langs->trans(
"ShowKnowledgeRecord");
809 $linkclose .=
' alt="'.dol_escape_htmltag($label, 1).
'"';
811 $linkclose .= ($label ?
' title="'.dol_escape_htmltag($label, 1).
'"' :
' title="tocomplete"');
812 $linkclose .= $dataparams.
' class="'.$classfortooltip.($morecss ?
' '.$morecss :
'').
'"';
814 $linkclose = ($morecss ?
' class="'.$morecss.
'"' :
'');
817 if ($option ==
'nolink') {
818 $linkstart =
'<span';
820 $linkstart =
'<a href="'.$url.
'"';
822 $linkstart .= $linkclose.
'>';
823 if ($option ==
'nolink') {
824 $linkend =
'</span>';
829 $result .= $linkstart;
831 if (empty($this->showphoto_on_popup)) {
833 $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);
837 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
839 list($class, $module) = explode(
'@', $this->picto);
842 $filename = $filearray[0][
'name'];
843 if (!empty($filename)) {
844 $pospoint = strpos($filearray[0][
'name'],
'.');
846 $pathtophoto = $class.
'/'.$this->
ref.
'/thumbs/'.substr($filename, 0, $pospoint).
'_mini'.substr($filename, $pospoint);
848 $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>';
850 $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>';
855 $result .=
img_object(($notooltip ?
'' : $label), ($this->picto ? $this->picto :
'generic'), (($withpicto != 2) ?
'class="paddingright"' :
''), 0, 0, $notooltip ? 0 : 1);
860 if ($withpicto != 2) {
861 $result .= $this->ref;
867 global $action, $hookmanager;
868 $hookmanager->initHooks(array(
'knowledgerecorddao'));
869 $parameters = array(
'id' => $this->
id,
'getnomurl' => &$result);
870 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
872 $result = $hookmanager->resPrint;
874 $result .= $hookmanager->resPrint;
902 if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
905 $this->labelStatus[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
906 $this->labelStatus[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Validated');
907 $this->labelStatus[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Obsolete');
908 $this->labelStatusShort[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
909 $this->labelStatusShort[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Validated');
910 $this->labelStatusShort[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Obsolete');
913 $statusType =
'status'.$status;
914 if ($status == self::STATUS_VALIDATED) {
915 $statusType =
'status4';
917 if ($status == self::STATUS_CANCELED) {
918 $statusType =
'status6';
921 return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status],
'', $statusType, $mode);
932 $sql =
'SELECT rowid, date_creation as datec, tms as datem,';
933 $sql .=
' fk_user_creat, fk_user_modif';
934 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
935 $sql .=
' WHERE t.rowid = '.((int) $id);
936 $result = $this->db->query($sql);
938 if ($this->db->num_rows($result)) {
939 $obj = $this->db->fetch_object($result);
941 $this->
id = $obj->rowid;
943 $this->user_creation_id = $obj->fk_user_creat;
944 $this->user_modification_id = $obj->fk_user_modif;
945 $this->date_creation = $this->db->jdate($obj->datec);
946 $this->date_modification = empty($obj->datem) ?
'' : $this->db->jdate($obj->datem);
949 $this->db->free($result);
963 $this->question =
"ABCD";
975 $this->lines = array();
978 $result = $objectline->fetchAll(
'ASC',
'position', 0, 0,
'(fk_knowledgerecord:=:'.((
int) $this->
id).
')');
980 if (is_numeric($result)) {
981 $this->error = $objectline->error;
982 $this->errors = $objectline->errors;
985 $this->lines = $result;
997 global $langs, $conf;
998 $langs->load(
"knowledgemanagement");
1001 $conf->global->KNOWLEDGEMANAGEMENT_KNOWLEDGERECORD_ADDON =
'mod_knowledgerecord_standard';
1011 $dirmodels = array_merge(array(
'/'), (array) $conf->modules_parts[
'models']);
1012 foreach ($dirmodels as $reldir) {
1013 $dir =
dol_buildpath($reldir.
"core/modules/knowledgemanagement/");
1016 $mybool = ((bool) @include_once $dir.$file) || $mybool;
1019 if ($mybool ===
false) {
1024 if (class_exists($classname)) {
1025 $obj =
new $classname();
1026 $numref = $obj->getNextValue($this);
1028 if ($numref !=
'' && $numref !=
'-1') {
1031 $this->error = $obj->error;
1036 print $langs->trans(
"Error").
" ".$langs->trans(
"ClassNotFound").
' '.$classname;
1040 print $langs->trans(
"ErrorNumberingModuleNotSetup", $this->element);
1056 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams =
null)
1058 global $conf, $langs;
1061 $includedocgeneration = 0;
1063 $langs->load(
"knowledgemanagement");
1066 $modele =
'standard_knowledgerecord';
1068 if (!empty($this->model_pdf)) {
1069 $modele = $this->model_pdf;
1075 $modelpath =
"core/modules/knowledgemanagement/doc/";
1077 if ($includedocgeneration && !empty($modele)) {
1078 $result = $this->
commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
1093 global $conf, $langs;
1109 $this->db->commit();
1126 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
1127 return parent::setCategoriesCommon($categories, Categorie::TYPE_KNOWLEDGEMANAGEMENT);
1139 $selected = (empty($arraydata[
'selected']) ? 0 : $arraydata[
'selected']);
1141 $return =
'<div class="box-flex-item box-flex-grow-zero">';
1142 $return .=
'<div class="info-box info-box-sm">';
1143 $return .=
'<span class="info-box-icon bg-infobox-action">';
1145 $return .=
'</span>';
1146 $return .=
'<div class="info-box-content">';
1147 $return .=
'<span class="info-box-ref inline-block tdoverflowmax150 valignmiddle">'.(method_exists($this,
'getNomUrl') ? $this->
getNomUrl(1) : $this->ref).
'</span>';
1148 if ($selected >= 0) {
1149 $return .=
'<input id="cb'.$this->id.
'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->
id.
'"'.($selected ?
' checked="checked"' :
'').
'>';
1151 if (property_exists($this,
'lang') && !empty($this->lang)) {
1153 $return .=
'<br>'.picto_from_langcode($this->lang,
'class="paddingrightonly saturatemedium opacitylow paddingrightonly"');
1155 if (property_exists($this,
'question')) {
1156 $return .=
'<div class="info-box-label tdoverflowmax150 classfortooltip" title="'.dolPrintHTMLForAttribute($this->question).
'">'.
dolGetFirstLineOfText($this->question).
'</div>';
1158 if (method_exists($this,
'getLibStatut')) {
1159 $return .=
'<div class="info-box-status">'.$this->getLibStatut(3).
'</div>';
1161 $return .=
'</div>';
1162 $return .=
'</div>';
1163 $return .=
'</div>';
1169require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobjectline.class.php';
1188 $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