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;
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;
197 foreach ($this->fields as $key => $val) {
198 if (isset($val[
'enabled']) && empty($val[
'enabled'])) {
199 unset($this->fields[$key]);
204 if (is_object($langs)) {
205 foreach ($this->fields as $key => $val) {
206 if (!empty($val[
'arrayofkeyval']) && is_array($val[
'arrayofkeyval'])) {
207 foreach ($val[
'arrayofkeyval'] as $key2 => $val2) {
208 $this->fields[$key][
'arrayofkeyval'][$key2] = $langs->trans($val2);
228 return $resultcreate;
251 $result =
$object->fetchCommon($fromid);
252 if ($result > 0 && !empty(
$object->table_element_line)) {
263 unset(
$object->user_creation_id);
267 if (property_exists(
$object,
'ref')) {
268 $object->ref = empty($this->fields[
'ref'][
'default']) ?
"Copy_Of_".$object->ref : $this->fields[
'ref'][
'default'];
270 if (property_exists(
$object,
'status')) {
271 $object->status = self::STATUS_DRAFT;
273 if (property_exists(
$object,
'date_creation')) {
276 if (property_exists(
$object,
'date_modification')) {
277 $object->date_modification =
null;
281 if (is_array(
$object->array_options) && count(
$object->array_options) > 0) {
282 $extrafields->fetch_name_optionals_label($this->table_element);
283 foreach (
$object->array_options as $key => $option) {
284 $shortkey = preg_replace(
'/options_/',
'', $key);
285 if (!empty($extrafields->attributes[$this->table_element][
'unique'][$shortkey])) {
287 unset(
$object->array_options[$key]);
293 $object->context[
'createfromclone'] =
'createfromclone';
294 $result =
$object->createCommon($user);
309 if (property_exists($this,
'fk_soc') && $this->fk_soc ==
$object->socid) {
316 unset(
$object->context[
'createfromclone']);
323 $this->db->rollback();
335 public function fetch($id, $ref =
null)
338 if ($result > 0 && !empty($this->table_element_line)) {
351 $this->lines = array();
370 public function fetchAll($sortorder =
'', $sortfield =
'', $limit = 0, $offset = 0, $filter =
'', $filtermode =
'AND')
378 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
379 if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) {
380 $sql .=
' WHERE t.entity IN ('.getEntity($this->element).
')';
382 $sql .=
' WHERE 1 = 1';
389 $this->errors[] = $errormessage;
390 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
394 if (!empty($sortfield)) {
395 $sql .= $this->db->order($sortfield, $sortorder);
397 if (!empty($limit)) {
398 $sql .=
" ".$this->db->plimit($limit, $offset);
401 $resql = $this->db->query($sql);
403 $num = $this->db->num_rows($resql);
405 while ($i < ($limit ? min($limit, $num) : $num)) {
406 $obj = $this->db->fetch_object($resql);
408 $record =
new self($this->db);
409 $record->setVarsFromFetchObj($obj);
411 $records[$record->id] = $record;
415 $this->db->free($resql);
419 $this->errors[] =
'Error '.$this->db->lasterror();
420 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
445 public function delete(
User $user, $notrigger = 0)
462 $this->error =
'ErrorDeleteLineNotAllowedByObjectStatus';
481 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
486 if ($this->
status == self::STATUS_VALIDATED) {
487 dol_syslog(get_class($this).
"::validate action abandoned: already validated", LOG_WARNING);
504 if (!$error && (preg_match(
'/^[\(]?PROV/i', $this->
ref) || empty($this->
ref))) {
509 $this->newref = $num;
513 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
514 $sql .=
" SET ref = '".$this->db->escape($num).
"',";
515 $sql .=
" status = ".self::STATUS_VALIDATED;
516 if (!empty($this->fields[
'date_validation'])) {
517 $sql .=
", date_validation = '".$this->db->idate($now).
"'";
519 if (!empty($this->fields[
'fk_user_valid'])) {
520 $sql .=
", fk_user_valid = ".((int) $user->id);
522 $sql .=
" WHERE rowid = ".((int) $this->
id);
524 dol_syslog(get_class($this).
"::validate()", LOG_DEBUG);
525 $resql = $this->db->query($sql);
528 $this->error = $this->db->lasterror();
532 if (!$error && !$notrigger) {
534 $result = $this->
call_trigger(
'HRM_SKILLDET_VALIDATE', $user);
543 $this->oldref = $this->ref;
546 if (preg_match(
'/^[\(]?PROV/i', $this->
ref)) {
548 $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).
"'";
549 $sql .=
" WHERE filename LIKE '".$this->db->escape($this->
ref).
"%' AND filepath = 'skilldet/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
550 $resql = $this->db->query($sql);
553 $this->error = $this->db->lasterror();
555 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"ecm_files set filepath = 'skilldet/".$this->db->escape($this->newref).
"'";
556 $sql .=
" WHERE filepath = 'skilldet/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
557 $resql = $this->db->query($sql);
560 $this->error = $this->db->lasterror();
566 $dirsource =
$conf->hrm->dir_output.
'/skilldet/'.$oldref;
567 $dirdest =
$conf->hrm->dir_output.
'/skilldet/'.$newref;
568 if (!$error && file_exists($dirsource)) {
569 dol_syslog(get_class($this).
"::validate() rename dir ".$dirsource.
" into ".$dirdest);
571 if (@rename($dirsource, $dirdest)) {
574 $listoffiles =
dol_dir_list(
$conf->hrm->dir_output.
'/skilldet/'.$newref,
'files', 1,
'^'.preg_quote($oldref,
'/'));
575 foreach ($listoffiles as $fileentry) {
576 $dirsource = $fileentry[
'name'];
577 $dirdest = preg_replace(
'/^'.preg_quote($oldref,
'/').
'/', $newref, $dirsource);
578 $dirsource = $fileentry[
'path'].
'/'.$dirsource;
579 $dirdest = $fileentry[
'path'].
'/'.$dirdest;
580 @rename($dirsource, $dirdest);
590 $this->
status = self::STATUS_VALIDATED;
597 $this->db->rollback();
613 if ($this->
status <= self::STATUS_DRAFT) {
624 return $this->
setStatusCommon($user, self::STATUS_DRAFT, $notrigger,
'SKILLDET_UNVALIDATE');
634 public function cancel($user, $notrigger = 0)
637 if ($this->
status != self::STATUS_VALIDATED) {
648 return $this->
setStatusCommon($user, self::STATUS_CANCELED, $notrigger,
'SKILLDET_CANCEL');
658 public function reopen($user, $notrigger = 0)
661 if ($this->
status != self::STATUS_CANCELED) {
672 return $this->
setStatusCommon($user, self::STATUS_VALIDATED, $notrigger,
'SKILLDET_REOPEN');
685 public function getNomUrl($withpicto = 0, $option =
'', $notooltip = 0, $morecss =
'', $save_lastsearch_value = -1)
687 global
$conf, $langs, $hookmanager;
689 if (!empty(
$conf->dol_no_mouse_hover)) {
695 $label =
img_picto(
'', $this->picto).
' <u>'.$langs->trans(
"Skilldet").
'</u>';
696 if (isset($this->
status)) {
697 $label .=
' '.$this->getLibStatut(5);
700 $label .=
'<b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
702 $url =
dol_buildpath(
'/hrm/skilldet_card.php', 1).
'?id='.$this->id;
704 if ($option !=
'nolink') {
706 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
707 if ($save_lastsearch_value == -1 && isset($_SERVER[
"PHP_SELF"]) && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
708 $add_save_lastsearch_values = 1;
710 if ($add_save_lastsearch_values) {
711 $url .=
'&save_lastsearch_values=1';
716 if (empty($notooltip)) {
718 $label = $langs->trans(
"ShowSkilldet");
719 $linkclose .=
' alt="'.dolPrintHTMLForAttribute($label).
'"';
721 $linkclose .=
' title="'.dolPrintHTMLForAttribute($label).
'"';
722 $linkclose .=
' class="classfortooltip'.($morecss ?
' '.$morecss :
'').
'"';
724 $linkclose = ($morecss ?
' class="'.$morecss.
'"' :
'');
727 if ($option ==
'nolink') {
728 $linkstart =
'<span';
730 $linkstart =
'<a href="'.$url.
'"';
732 $linkstart .= $linkclose.
'>';
733 if ($option ==
'nolink') {
734 $linkend =
'</span>';
739 $result .= $linkstart;
741 if (empty($this->showphoto_on_popup)) {
743 $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);
747 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
749 list($class, $module) = explode(
'@', $this->picto);
752 $filename = $filearray[0][
'name'];
753 if (!empty($filename)) {
754 $pospoint = strpos($filearray[0][
'name'],
'.');
756 $pathtophoto = $class.
'/'.$this->
ref.
'/thumbs/'.substr($filename, 0, $pospoint).
'_mini'.substr($filename, $pospoint);
758 $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>';
760 $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>';
765 $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);
770 if ($withpicto != 2) {
771 $result .= $this->ref;
777 global $action, $hookmanager;
778 $hookmanager->initHooks(array(
'skilldetdao'));
779 $parameters = array(
'id' => $this->
id,
'getnomurl' => &$result);
780 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
782 $result = $hookmanager->resPrint;
784 $result .= $hookmanager->resPrint;
812 if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
815 $this->labelStatus[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
816 $this->labelStatus[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Enabled');
817 $this->labelStatus[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Disabled');
818 $this->labelStatusShort[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
819 $this->labelStatusShort[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Enabled');
820 $this->labelStatusShort[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Disabled');
823 $statusType =
'status'.$status;
825 if ($status == self::STATUS_CANCELED) {
826 $statusType =
'status6';
829 return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status],
'', $statusType, $mode);
840 $sql =
'SELECT rowid, date_creation as datec, tms as datem,';
841 $sql .=
' fk_user_creat, fk_user_modif';
842 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
843 $sql .=
' WHERE t.rowid = '.((int) $id);
844 $result = $this->db->query($sql);
846 if ($this->db->num_rows($result)) {
847 $obj = $this->db->fetch_object($result);
849 $this->
id = $obj->rowid;
851 $this->user_creation_id = $obj->fk_user_creat;
852 $this->user_modification_id = $obj->fk_user_modif;
853 $this->date_creation = $this->db->jdate($obj->datec);
854 $this->date_modification = empty($obj->datem) ?
'' : $this->db->jdate($obj->datem);
857 $this->db->free($result);
886 global $langs,
$conf;
890 $conf->global->hrm_SKILLDET_ADDON =
'mod_skilldet_standard';
900 $dirmodels = array_merge(array(
'/'), (array)
$conf->modules_parts[
'models']);
901 foreach ($dirmodels as $reldir) {
905 $mybool = ((bool) @include_once $dir.$file) || $mybool;
913 if (class_exists($classname)) {
914 $obj =
new $classname();
915 '@phan-var-force ModeleNumRefEvaluation $obj';
916 $numref = $obj->getNextValue($this);
918 if ($numref !=
'' && $numref !=
'-1') {
921 $this->error = $obj->error;
926 print $langs->trans(
"Error").
" ".$langs->trans(
"ClassNotFound").
' '.$classname;
930 print $langs->trans(
"ErrorNumberingModuleNotSetup", $this->element);
946 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams =
null)
951 $includedocgeneration = 0;
956 $modele =
'standard_skilldet';
958 if (!empty($this->model_pdf)) {
959 $modele = $this->model_pdf;
965 $modelpath =
"core/modules/hrm/doc/";
967 if ($includedocgeneration && !empty($modele)) {
968 $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_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $allowothertags=array())
Show a picto called object_picto (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_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_sanitizeFileName($str, $newstr='_', $unaccent=1, $includequotes=0)
Clean a string to use it as a file name.
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...