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,),
131 public $fk_user_creat;
135 public $fk_user_modif;
182 global
$conf, $langs;
186 $this->ismultientitymanaged = 0;
187 $this->isextrafieldmanaged = 1;
190 $this->fields[
'rowid'][
'visible'] = 0;
192 if (!isModEnabled(
'multicompany') && isset($this->fields[
'entity'])) {
193 $this->fields[
'entity'][
'enabled'] = 0;
203 foreach ($this->fields as $key => $val) {
204 if (isset($val[
'enabled']) && empty($val[
'enabled'])) {
205 unset($this->fields[$key]);
210 if (is_object($langs)) {
211 foreach ($this->fields as $key => $val) {
212 if (!empty($val[
'arrayofkeyval']) && is_array($val[
'arrayofkeyval'])) {
213 foreach ($val[
'arrayofkeyval'] as $key2 => $val2) {
214 $this->fields[$key][
'arrayofkeyval'][$key2] = $langs->trans($val2);
234 return $resultcreate;
246 global $langs, $extrafields;
256 $result =
$object->fetchCommon($fromid);
257 if ($result > 0 && !empty(
$object->table_element_line)) {
271 if (property_exists(
$object,
'ref')) {
272 $object->ref = empty($this->fields[
'ref'][
'default']) ?
"Copy_Of_".$object->ref : $this->fields[
'ref'][
'default'];
274 if (property_exists(
$object,
'label')) {
275 $object->label = empty($this->fields[
'label'][
'default']) ? $langs->trans(
"CopyOf").
" ".
$object->label : $this->fields[
'label'][
'default'];
277 if (property_exists(
$object,
'status')) {
278 $object->status = self::STATUS_DRAFT;
280 if (property_exists(
$object,
'date_creation')) {
283 if (property_exists(
$object,
'date_modification')) {
284 $object->date_modification =
null;
288 if (is_array(
$object->array_options) && count(
$object->array_options) > 0) {
289 $extrafields->fetch_name_optionals_label($this->table_element);
290 foreach (
$object->array_options as $key => $option) {
291 $shortkey = preg_replace(
'/options_/',
'', $key);
292 if (!empty($extrafields->attributes[$this->table_element][
'unique'][$shortkey])) {
294 unset(
$object->array_options[$key]);
300 $object->context[
'createfromclone'] =
'createfromclone';
301 $result =
$object->createCommon($user);
316 if (property_exists($this,
'fk_soc') && $this->fk_soc ==
$object->socid) {
323 unset(
$object->context[
'createfromclone']);
330 $this->db->rollback();
342 public function fetch($id, $ref =
null)
345 if ($result > 0 && !empty($this->table_element_line)) {
358 $this->lines = array();
377 public function fetchAll($sortorder =
'', $sortfield =
'', $limit = 0, $offset = 0, $filter =
'', $filtermode =
'AND')
385 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
386 if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) {
387 $sql .=
' WHERE t.entity IN ('.getEntity($this->element).
')';
389 $sql .=
' WHERE 1 = 1';
396 $this->errors[] = $errormessage;
397 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
401 if (!empty($sortfield)) {
402 $sql .= $this->db->order($sortfield, $sortorder);
404 if (!empty($limit)) {
405 $sql .=
" ".$this->db->plimit($limit, $offset);
408 $resql = $this->db->query($sql);
410 $num = $this->db->num_rows($resql);
412 while ($i < ($limit ? min($limit, $num) : $num)) {
413 $obj = $this->db->fetch_object($resql);
415 $record =
new self($this->db);
416 $record->setVarsFromFetchObj($obj);
418 $records[$record->id] = $record;
422 $this->db->free($resql);
426 $this->errors[] =
'Error '.$this->db->lasterror();
427 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
452 public function delete(
User $user, $notrigger = 0)
469 $this->error =
'ErrorDeleteLineNotAllowedByObjectStatus';
486 global
$conf, $langs;
488 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
493 if ($this->
status == self::STATUS_VALIDATED) {
494 dol_syslog(get_class($this).
"::validate action abandoned: already validated", LOG_WARNING);
511 if (!$error && (preg_match(
'/^[\(]?PROV/i', $this->
ref) || empty($this->
ref))) {
516 $this->newref = $num;
520 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
521 $sql .=
" SET ref = '".$this->db->escape($num).
"',";
522 $sql .=
" status = ".self::STATUS_VALIDATED;
523 if (!empty($this->fields[
'date_validation'])) {
524 $sql .=
", date_validation = '".$this->db->idate($now).
"'";
526 if (!empty($this->fields[
'fk_user_valid'])) {
527 $sql .=
", fk_user_valid = ".((int) $user->id);
529 $sql .=
" WHERE rowid = ".((int) $this->
id);
531 dol_syslog(get_class($this).
"::validate()", LOG_DEBUG);
532 $resql = $this->db->query($sql);
535 $this->error = $this->db->lasterror();
539 if (!$error && !$notrigger) {
541 $result = $this->
call_trigger(
'HRM_SKILLDET_VALIDATE', $user);
550 $this->oldref = $this->ref;
553 if (preg_match(
'/^[\(]?PROV/i', $this->
ref)) {
555 $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).
"'";
556 $sql .=
" WHERE filename LIKE '".$this->db->escape($this->
ref).
"%' AND filepath = 'skilldet/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
557 $resql = $this->db->query($sql);
560 $this->error = $this->db->lasterror();
562 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"ecm_files set filepath = 'skilldet/".$this->db->escape($this->newref).
"'";
563 $sql .=
" WHERE filepath = 'skilldet/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
564 $resql = $this->db->query($sql);
567 $this->error = $this->db->lasterror();
573 $dirsource =
$conf->hrm->dir_output.
'/skilldet/'.$oldref;
574 $dirdest =
$conf->hrm->dir_output.
'/skilldet/'.$newref;
575 if (!$error && file_exists($dirsource)) {
576 dol_syslog(get_class($this).
"::validate() rename dir ".$dirsource.
" into ".$dirdest);
578 if (@rename($dirsource, $dirdest)) {
581 $listoffiles =
dol_dir_list(
$conf->hrm->dir_output.
'/skilldet/'.$newref,
'files', 1,
'^'.preg_quote($oldref,
'/'));
582 foreach ($listoffiles as $fileentry) {
583 $dirsource = $fileentry[
'name'];
584 $dirdest = preg_replace(
'/^'.preg_quote($oldref,
'/').
'/', $newref, $dirsource);
585 $dirsource = $fileentry[
'path'].
'/'.$dirsource;
586 $dirdest = $fileentry[
'path'].
'/'.$dirdest;
587 @rename($dirsource, $dirdest);
597 $this->
status = self::STATUS_VALIDATED;
604 $this->db->rollback();
620 if ($this->
status <= self::STATUS_DRAFT) {
631 return $this->
setStatusCommon($user, self::STATUS_DRAFT, $notrigger,
'SKILLDET_UNVALIDATE');
641 public function cancel($user, $notrigger = 0)
644 if ($this->
status != self::STATUS_VALIDATED) {
655 return $this->
setStatusCommon($user, self::STATUS_CANCELED, $notrigger,
'SKILLDET_CANCEL');
665 public function reopen($user, $notrigger = 0)
668 if ($this->
status != self::STATUS_CANCELED) {
679 return $this->
setStatusCommon($user, self::STATUS_VALIDATED, $notrigger,
'SKILLDET_REOPEN');
692 public function getNomUrl($withpicto = 0, $option =
'', $notooltip = 0, $morecss =
'', $save_lastsearch_value = -1)
694 global
$conf, $langs, $hookmanager;
696 if (!empty(
$conf->dol_no_mouse_hover)) {
702 $label =
img_picto(
'', $this->picto).
' <u>'.$langs->trans(
"Skilldet").
'</u>';
703 if (isset($this->
status)) {
704 $label .=
' '.$this->getLibStatut(5);
707 $label .=
'<b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
709 $url =
dol_buildpath(
'/hrm/skilldet_card.php', 1).
'?id='.$this->id;
711 if ($option !=
'nolink') {
713 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
714 if ($save_lastsearch_value == -1 && isset($_SERVER[
"PHP_SELF"]) && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
715 $add_save_lastsearch_values = 1;
717 if ($add_save_lastsearch_values) {
718 $url .=
'&save_lastsearch_values=1';
723 if (empty($notooltip)) {
725 $label = $langs->trans(
"ShowSkilldet");
726 $linkclose .=
' alt="'.dol_escape_htmltag($label, 1).
'"';
728 $linkclose .=
' title="'.dol_escape_htmltag($label, 1).
'"';
729 $linkclose .=
' class="classfortooltip'.($morecss ?
' '.$morecss :
'').
'"';
731 $linkclose = ($morecss ?
' class="'.$morecss.
'"' :
'');
734 if ($option ==
'nolink') {
735 $linkstart =
'<span';
737 $linkstart =
'<a href="'.$url.
'"';
739 $linkstart .= $linkclose.
'>';
740 if ($option ==
'nolink') {
741 $linkend =
'</span>';
746 $result .= $linkstart;
748 if (empty($this->showphoto_on_popup)) {
750 $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);
754 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
756 list($class, $module) = explode(
'@', $this->picto);
759 $filename = $filearray[0][
'name'];
760 if (!empty($filename)) {
761 $pospoint = strpos($filearray[0][
'name'],
'.');
763 $pathtophoto = $class.
'/'.$this->
ref.
'/thumbs/'.substr($filename, 0, $pospoint).
'_mini'.substr($filename, $pospoint);
765 $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>';
767 $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>';
772 $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);
777 if ($withpicto != 2) {
778 $result .= $this->ref;
784 global $action, $hookmanager;
785 $hookmanager->initHooks(array(
'skilldetdao'));
786 $parameters = array(
'id' => $this->
id,
'getnomurl' => &$result);
787 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
789 $result = $hookmanager->resPrint;
791 $result .= $hookmanager->resPrint;
819 if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
822 $this->labelStatus[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
823 $this->labelStatus[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Enabled');
824 $this->labelStatus[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Disabled');
825 $this->labelStatusShort[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
826 $this->labelStatusShort[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Enabled');
827 $this->labelStatusShort[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Disabled');
830 $statusType =
'status'.$status;
832 if ($status == self::STATUS_CANCELED) {
833 $statusType =
'status6';
836 return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status],
'', $statusType, $mode);
847 $sql =
'SELECT rowid, date_creation as datec, tms as datem,';
848 $sql .=
' fk_user_creat, fk_user_modif';
849 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
850 $sql .=
' WHERE t.rowid = '.((int) $id);
851 $result = $this->db->query($sql);
853 if ($this->db->num_rows($result)) {
854 $obj = $this->db->fetch_object($result);
856 $this->
id = $obj->rowid;
858 $this->user_creation_id = $obj->fk_user_creat;
859 $this->user_modification_id = $obj->fk_user_modif;
860 $this->date_creation = $this->db->jdate($obj->datec);
861 $this->date_modification = empty($obj->datem) ?
'' : $this->db->jdate($obj->datem);
864 $this->db->free($result);
893 global $langs,
$conf;
897 $conf->global->hrm_SKILLDET_ADDON =
'mod_skilldet_standard';
907 $dirmodels = array_merge(array(
'/'), (array)
$conf->modules_parts[
'models']);
908 foreach ($dirmodels as $reldir) {
912 $mybool = ((bool) @include_once $dir.$file) || $mybool;
920 if (class_exists($classname)) {
921 $obj =
new $classname();
922 '@phan-var-force ModeleNumRefEvaluation $obj';
923 $numref = $obj->getNextValue($this);
925 if ($numref !=
'' && $numref !=
'-1') {
928 $this->error = $obj->error;
933 print $langs->trans(
"Error").
" ".$langs->trans(
"ClassNotFound").
' '.$classname;
937 print $langs->trans(
"ErrorNumberingModuleNotSetup", $this->element);
953 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams =
null)
955 global
$conf, $langs;
958 $includedocgeneration = 0;
963 $modele =
'standard_skilldet';
965 if (!empty($this->model_pdf)) {
966 $modele = $this->model_pdf;
972 $modelpath =
"core/modules/hrm/doc/";
974 if ($includedocgeneration && !empty($modele)) {
975 $result = $this->
commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
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.
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)
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.
dolGetStatus($statusLabel='', $statusLabelShort='', $html='', $statusType='status0', $displayMode=0, $url='', $params=array())
Output the badge of a status.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
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.
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...