31require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobjectline.class.php';
41 public $module =
'hrm';
46 public $element =
'skilldet';
51 public $table_element =
'hrm_skilldet';
66 public $picto =
'skilldet@hrm';
69 const STATUS_DRAFT = 0;
70 const STATUS_VALIDATED = 1;
71 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 'fk_skill' => array(
'type' =>
'integer:Skill:/hrm/class/skill.class.php',
'label' =>
'fk_skill',
'enabled' => 1,
'position' => 5,
'notnull' => 1,
'visible' => 0,),
107 'rankorder' => array(
'type' =>
'integer',
'label' =>
'rank',
'enabled' => 1,
'position' => 10,
'notnull' => 0,
'visible' => 2,),
108 'description' => array(
'type' =>
'text',
'label' =>
'Description',
'enabled' => 1,
'position' => 60,
'notnull' => 0,
'visible' => 1,),
109 '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',),
110 'fk_user_modif' => array(
'type' =>
'integer:User:user/class/user.class.php',
'label' =>
'UserModif',
'enabled' => 1,
'position' => 511,
'notnull' => -1,
'visible' => 0,),
116 public $fk_user_creat;
117 public $fk_user_modif;
164 global $conf, $langs;
168 $this->ismultientitymanaged = 0;
169 $this->isextrafieldmanaged = 1;
172 $this->fields[
'rowid'][
'visible'] = 0;
174 if (!isModEnabled(
'multicompany') && isset($this->fields[
'entity'])) {
175 $this->fields[
'entity'][
'enabled'] = 0;
185 foreach ($this->fields as $key => $val) {
186 if (isset($val[
'enabled']) && empty($val[
'enabled'])) {
187 unset($this->fields[$key]);
192 if (is_object($langs)) {
193 foreach ($this->fields as $key => $val) {
194 if (!empty($val[
'arrayofkeyval']) && is_array($val[
'arrayofkeyval'])) {
195 foreach ($val[
'arrayofkeyval'] as $key2 => $val2) {
196 $this->fields[$key][
'arrayofkeyval'][$key2] = $langs->trans($val2);
216 return $resultcreate;
228 global $langs, $extrafields;
238 $result =
$object->fetchCommon($fromid);
239 if ($result > 0 && !empty(
$object->table_element_line)) {
253 if (property_exists(
$object,
'ref')) {
254 $object->ref = empty($this->fields[
'ref'][
'default']) ?
"Copy_Of_".$object->ref : $this->fields[
'ref'][
'default'];
256 if (property_exists(
$object,
'label')) {
257 $object->label = empty($this->fields[
'label'][
'default']) ? $langs->trans(
"CopyOf").
" ".
$object->label : $this->fields[
'label'][
'default'];
259 if (property_exists(
$object,
'status')) {
260 $object->status = self::STATUS_DRAFT;
262 if (property_exists(
$object,
'date_creation')) {
265 if (property_exists(
$object,
'date_modification')) {
266 $object->date_modification =
null;
270 if (is_array(
$object->array_options) && count(
$object->array_options) > 0) {
271 $extrafields->fetch_name_optionals_label($this->table_element);
272 foreach (
$object->array_options as $key => $option) {
273 $shortkey = preg_replace(
'/options_/',
'', $key);
274 if (!empty($extrafields->attributes[$this->table_element][
'unique'][$shortkey])) {
276 unset(
$object->array_options[$key]);
282 $object->context[
'createfromclone'] =
'createfromclone';
283 $result =
$object->createCommon($user);
298 if (property_exists($this,
'fk_soc') && $this->fk_soc ==
$object->socid) {
305 unset(
$object->context[
'createfromclone']);
312 $this->db->rollback();
324 public function fetch($id, $ref =
null)
327 if ($result > 0 && !empty($this->table_element_line)) {
340 $this->lines = array();
359 public function fetchAll($sortorder =
'', $sortfield =
'', $limit = 0, $offset = 0, $filter =
'', $filtermode =
'AND')
367 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
368 if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) {
369 $sql .=
' WHERE t.entity IN ('.getEntity($this->element).
')';
371 $sql .=
' WHERE 1 = 1';
378 $this->errors[] = $errormessage;
379 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
383 if (!empty($sortfield)) {
384 $sql .= $this->db->order($sortfield, $sortorder);
386 if (!empty($limit)) {
387 $sql .=
" ".$this->db->plimit($limit, $offset);
390 $resql = $this->db->query($sql);
392 $num = $this->db->num_rows($resql);
394 while ($i < ($limit ? min($limit, $num) : $num)) {
395 $obj = $this->db->fetch_object($resql);
397 $record =
new self($this->db);
398 $record->setVarsFromFetchObj($obj);
400 $records[$record->id] = $record;
404 $this->db->free($resql);
408 $this->errors[] =
'Error '.$this->db->lasterror();
409 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
434 public function delete(
User $user, $notrigger = 0)
451 $this->error =
'ErrorDeleteLineNotAllowedByObjectStatus';
468 global $conf, $langs;
470 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
475 if ($this->
status == self::STATUS_VALIDATED) {
476 dol_syslog(get_class($this).
"::validate action abandoned: already validated", LOG_WARNING);
493 if (!$error && (preg_match(
'/^[\(]?PROV/i', $this->
ref) || empty($this->
ref))) {
498 $this->newref = $num;
502 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
503 $sql .=
" SET ref = '".$this->db->escape($num).
"',";
504 $sql .=
" status = ".self::STATUS_VALIDATED;
505 if (!empty($this->fields[
'date_validation'])) {
506 $sql .=
", date_validation = '".$this->db->idate($now).
"'";
508 if (!empty($this->fields[
'fk_user_valid'])) {
509 $sql .=
", fk_user_valid = ".((int) $user->id);
511 $sql .=
" WHERE rowid = ".((int) $this->
id);
513 dol_syslog(get_class($this).
"::validate()", LOG_DEBUG);
514 $resql = $this->db->query($sql);
517 $this->error = $this->db->lasterror();
521 if (!$error && !$notrigger) {
523 $result = $this->
call_trigger(
'HRM_SKILLDET_VALIDATE', $user);
532 $this->oldref = $this->ref;
535 if (preg_match(
'/^[\(]?PROV/i', $this->
ref)) {
537 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"ecm_files set filename = CONCAT('".$this->db->escape($this->newref).
"', SUBSTR(filename, ".(strlen($this->
ref) + 1).
")), filepath = 'skilldet/".$this->db->escape($this->newref).
"'";
538 $sql .=
" WHERE filename LIKE '".$this->db->escape($this->
ref).
"%' AND filepath = 'skilldet/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
539 $resql = $this->db->query($sql);
542 $this->error = $this->db->lasterror();
544 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"ecm_files set filepath = 'skilldet/".$this->db->escape($this->newref).
"'";
545 $sql .=
" WHERE filepath = 'skilldet/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
546 $resql = $this->db->query($sql);
549 $this->error = $this->db->lasterror();
555 $dirsource = $conf->hrm->dir_output.
'/skilldet/'.$oldref;
556 $dirdest = $conf->hrm->dir_output.
'/skilldet/'.$newref;
557 if (!$error && file_exists($dirsource)) {
558 dol_syslog(get_class($this).
"::validate() rename dir ".$dirsource.
" into ".$dirdest);
560 if (@rename($dirsource, $dirdest)) {
563 $listoffiles =
dol_dir_list($conf->hrm->dir_output.
'/skilldet/'.$newref,
'files', 1,
'^'.preg_quote($oldref,
'/'));
564 foreach ($listoffiles as $fileentry) {
565 $dirsource = $fileentry[
'name'];
566 $dirdest = preg_replace(
'/^'.preg_quote($oldref,
'/').
'/', $newref, $dirsource);
567 $dirsource = $fileentry[
'path'].
'/'.$dirsource;
568 $dirdest = $fileentry[
'path'].
'/'.$dirdest;
569 @rename($dirsource, $dirdest);
579 $this->
status = self::STATUS_VALIDATED;
586 $this->db->rollback();
602 if ($this->
status <= self::STATUS_DRAFT) {
613 return $this->
setStatusCommon($user, self::STATUS_DRAFT, $notrigger,
'SKILLDET_UNVALIDATE');
623 public function cancel($user, $notrigger = 0)
626 if ($this->
status != self::STATUS_VALIDATED) {
637 return $this->
setStatusCommon($user, self::STATUS_CANCELED, $notrigger,
'SKILLDET_CANCEL');
647 public function reopen($user, $notrigger = 0)
650 if ($this->
status != self::STATUS_CANCELED) {
661 return $this->
setStatusCommon($user, self::STATUS_VALIDATED, $notrigger,
'SKILLDET_REOPEN');
674 public function getNomUrl($withpicto = 0, $option =
'', $notooltip = 0, $morecss =
'', $save_lastsearch_value = -1)
676 global $conf, $langs, $hookmanager;
678 if (!empty($conf->dol_no_mouse_hover)) {
684 $label =
img_picto(
'', $this->picto).
' <u>'.$langs->trans(
"Skilldet").
'</u>';
685 if (isset($this->
status)) {
686 $label .=
' '.$this->getLibStatut(5);
689 $label .=
'<b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
691 $url =
dol_buildpath(
'/hrm/skilldet_card.php', 1).
'?id='.$this->id;
693 if ($option !=
'nolink') {
695 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
696 if ($save_lastsearch_value == -1 && isset($_SERVER[
"PHP_SELF"]) && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
697 $add_save_lastsearch_values = 1;
699 if ($add_save_lastsearch_values) {
700 $url .=
'&save_lastsearch_values=1';
705 if (empty($notooltip)) {
707 $label = $langs->trans(
"ShowSkilldet");
708 $linkclose .=
' alt="'.dol_escape_htmltag($label, 1).
'"';
710 $linkclose .=
' title="'.dol_escape_htmltag($label, 1).
'"';
711 $linkclose .=
' class="classfortooltip'.($morecss ?
' '.$morecss :
'').
'"';
713 $linkclose = ($morecss ?
' class="'.$morecss.
'"' :
'');
716 if ($option ==
'nolink') {
717 $linkstart =
'<span';
719 $linkstart =
'<a href="'.$url.
'"';
721 $linkstart .= $linkclose.
'>';
722 if ($option ==
'nolink') {
723 $linkend =
'</span>';
728 $result .= $linkstart;
730 if (empty($this->showphoto_on_popup)) {
732 $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);
736 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
738 list($class, $module) = explode(
'@', $this->picto);
741 $filename = $filearray[0][
'name'];
742 if (!empty($filename)) {
743 $pospoint = strpos($filearray[0][
'name'],
'.');
745 $pathtophoto = $class.
'/'.$this->
ref.
'/thumbs/'.substr($filename, 0, $pospoint).
'_mini'.substr($filename, $pospoint);
747 $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>';
749 $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>';
754 $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);
759 if ($withpicto != 2) {
760 $result .= $this->ref;
766 global $action, $hookmanager;
767 $hookmanager->initHooks(array(
'skilldetdao'));
768 $parameters = array(
'id' => $this->
id,
'getnomurl' => &$result);
769 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
771 $result = $hookmanager->resPrint;
773 $result .= $hookmanager->resPrint;
801 if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
804 $this->labelStatus[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
805 $this->labelStatus[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Enabled');
806 $this->labelStatus[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Disabled');
807 $this->labelStatusShort[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
808 $this->labelStatusShort[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Enabled');
809 $this->labelStatusShort[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Disabled');
812 $statusType =
'status'.$status;
814 if ($status == self::STATUS_CANCELED) {
815 $statusType =
'status6';
818 return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status],
'', $statusType, $mode);
829 $sql =
'SELECT rowid, date_creation as datec, tms as datem,';
830 $sql .=
' fk_user_creat, fk_user_modif';
831 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
832 $sql .=
' WHERE t.rowid = '.((int) $id);
833 $result = $this->db->query($sql);
835 if ($this->db->num_rows($result)) {
836 $obj = $this->db->fetch_object($result);
838 $this->
id = $obj->rowid;
840 $this->user_creation_id = $obj->fk_user_creat;
841 $this->user_modification_id = $obj->fk_user_modif;
842 $this->date_creation = $this->db->jdate($obj->datec);
843 $this->date_modification = empty($obj->datem) ?
'' : $this->db->jdate($obj->datem);
846 $this->db->free($result);
875 global $langs, $conf;
879 $conf->global->hrm_SKILLDET_ADDON =
'mod_skilldet_standard';
889 $dirmodels = array_merge(array(
'/'), (array) $conf->modules_parts[
'models']);
890 foreach ($dirmodels as $reldir) {
894 $mybool = ((bool) @include_once $dir.$file) || $mybool;
897 if ($mybool ===
false) {
902 if (class_exists($classname)) {
903 $obj =
new $classname();
904 $numref = $obj->getNextValue($this);
906 if ($numref !=
'' && $numref !=
'-1') {
909 $this->error = $obj->error;
914 print $langs->trans(
"Error").
" ".$langs->trans(
"ClassNotFound").
' '.$classname;
918 print $langs->trans(
"ErrorNumberingModuleNotSetup", $this->element);
934 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams =
null)
936 global $conf, $langs;
939 $includedocgeneration = 0;
944 $modele =
'standard_skilldet';
946 if (!empty($this->model_pdf)) {
947 $modele = $this->model_pdf;
953 $modelpath =
"core/modules/hrm/doc/";
955 if ($includedocgeneration && !empty($modele)) {
956 $result = $this->
commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
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...
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.
setErrorsFromObject($object)
setErrorsFromObject
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.
generateDocument($modele, $outputlangs, $hidedetails=0, $hidedesc=0, $hideref=0, $moreparams=null)
Create a document onto disk according to template module.
update(User $user, $notrigger=0)
Update object into database.
fetchAll($sortorder='', $sortfield='', $limit=0, $offset=0, $filter='', $filtermode='AND')
Load list of objects in memory from the database.
getNextNumRef()
Returns the reference to the following non used object depending on the active numbering module.
initAsSpecimen()
Initialise object with example values Id must be 0 if object instance is a specimen.
cancel($user, $notrigger=0)
Set cancel status.
getLibStatut($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 optionally the picto)
create(User $user, $notrigger=0)
Create object into database.
LibStatut($status, $mode=0)
Return the status.
fetchLines()
Load object lines in memory from the database.
deleteLine(User $user, $idline, $notrigger=0)
Delete a line of object in database.
__construct(DoliDB $db)
Constructor.
fetch($id, $ref=null)
Load object in memory from the database.
createFromClone(User $user, $fromid)
Clone an object into another one.
validate($user, $notrigger=0)
Validate object.
info($id)
Load the info information in the object.
reopen($user, $notrigger=0)
Set back to validated status.
setDraft($user, $notrigger=0)
Set draft status.
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)
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
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.
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.