31 require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobjectline.class.php';
41 public $module =
'hrm';
46 public $element =
'skilldet';
51 public $table_element =
'hrm_skilldet';
56 public $picto =
'skilldet@hrm';
59 const STATUS_DRAFT = 0;
60 const STATUS_VALIDATED = 1;
61 const STATUS_CANCELED = 9;
94 public $fields = array(
95 'rowid' => array(
'type' =>
'integer',
'label' =>
'TechnicalID',
'enabled' => 1,
'position' => 1,
'notnull' => 1,
'visible' => 0,
'noteditable' => 1,
'index' => 1,
'css' =>
'left',
'comment' =>
"Id"),
96 'fk_skill' => array(
'type' =>
'integer:Skill:/hrm/class/skill.class.php',
'label' =>
'fk_skill',
'enabled' => 1,
'position' => 5,
'notnull' => 1,
'visible' => 0,),
97 'rankorder' => array(
'type' =>
'integer',
'label' =>
'rank',
'enabled' => 1,
'position' => 10,
'notnull' => 0,
'visible' => 2,),
98 'description' => array(
'type' =>
'text',
'label' =>
'Description',
'enabled' => 1,
'position' => 60,
'notnull' => 0,
'visible' => 1,),
99 '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',),
100 'fk_user_modif' => array(
'type' =>
'integer:User:user/class/user.class.php',
'label' =>
'UserModif',
'enabled' => 1,
'position' => 511,
'notnull' => -1,
'visible' => 0,),
106 public $fk_user_creat;
107 public $fk_user_modif;
154 global $conf, $langs;
158 $this->ismultientitymanaged = 0;
159 $this->isextrafieldmanaged = 1;
162 $this->fields[
'rowid'][
'visible'] = 0;
164 if (!
isModEnabled(
'multicompany') && isset($this->fields[
'entity'])) {
165 $this->fields[
'entity'][
'enabled'] = 0;
175 foreach ($this->fields as $key => $val) {
176 if (isset($val[
'enabled']) && empty($val[
'enabled'])) {
177 unset($this->fields[$key]);
182 if (is_object($langs)) {
183 foreach ($this->fields as $key => $val) {
184 if (!empty($val[
'arrayofkeyval']) && is_array($val[
'arrayofkeyval'])) {
185 foreach ($val[
'arrayofkeyval'] as $key2 => $val2) {
186 $this->fields[$key][
'arrayofkeyval'][$key2] = $langs->trans($val2);
206 return $resultcreate;
218 global $langs, $extrafields;
228 $result =
$object->fetchCommon($fromid);
229 if ($result > 0 && !empty(
$object->table_element_line)) {
243 if (property_exists(
$object,
'ref')) {
244 $object->ref = empty($this->fields[
'ref'][
'default']) ?
"Copy_Of_".$object->ref : $this->fields[
'ref'][
'default'];
246 if (property_exists(
$object,
'label')) {
247 $object->label = empty($this->fields[
'label'][
'default']) ? $langs->trans(
"CopyOf").
" ".
$object->label : $this->fields[
'label'][
'default'];
249 if (property_exists(
$object,
'status')) {
250 $object->status = self::STATUS_DRAFT;
252 if (property_exists(
$object,
'date_creation')) {
255 if (property_exists(
$object,
'date_modification')) {
256 $object->date_modification =
null;
260 if (is_array(
$object->array_options) && count(
$object->array_options) > 0) {
261 $extrafields->fetch_name_optionals_label($this->table_element);
262 foreach (
$object->array_options as $key => $option) {
263 $shortkey = preg_replace(
'/options_/',
'', $key);
264 if (!empty($extrafields->attributes[$this->table_element][
'unique'][$shortkey])) {
266 unset(
$object->array_options[$key]);
272 $object->context[
'createfromclone'] =
'createfromclone';
273 $result =
$object->createCommon($user);
288 if (property_exists($this,
'fk_soc') && $this->fk_soc ==
$object->socid) {
295 unset(
$object->context[
'createfromclone']);
302 $this->db->rollback();
314 public function fetch($id, $ref =
null)
317 if ($result > 0 && !empty($this->table_element_line)) {
330 $this->lines = array();
349 public function fetchAll($sortorder =
'', $sortfield =
'', $limit = 0, $offset = 0, $filter =
'', $filtermode =
'AND')
357 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
358 if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) {
359 $sql .=
' WHERE t.entity IN ('.getEntity($this->element).
')';
361 $sql .=
' WHERE 1 = 1';
368 $this->errors[] = $errormessage;
369 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
373 if (!empty($sortfield)) {
374 $sql .= $this->db->order($sortfield, $sortorder);
376 if (!empty($limit)) {
377 $sql .=
" ".$this->db->plimit($limit, $offset);
380 $resql = $this->db->query(
$sql);
382 $num = $this->db->num_rows($resql);
384 while ($i < ($limit ? min($limit, $num) : $num)) {
385 $obj = $this->db->fetch_object($resql);
387 $record =
new self($this->db);
388 $record->setVarsFromFetchObj($obj);
390 $records[$record->id] = $record;
394 $this->db->free($resql);
398 $this->errors[] =
'Error '.$this->db->lasterror();
399 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
424 public function delete(
User $user, $notrigger = 0)
441 $this->error =
'ErrorDeleteLineNotAllowedByObjectStatus';
458 global $conf, $langs;
460 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
465 if ($this->
status == self::STATUS_VALIDATED) {
466 dol_syslog(get_class($this).
"::validate action abandoned: already validated", LOG_WARNING);
483 if (!$error && (preg_match(
'/^[\(]?PROV/i', $this->
ref) || empty($this->
ref))) {
488 $this->newref = $num;
492 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
493 $sql .=
" SET ref = '".$this->db->escape($num).
"',";
494 $sql .=
" status = ".self::STATUS_VALIDATED;
495 if (!empty($this->fields[
'date_validation'])) {
496 $sql .=
", date_validation = '".$this->db->idate($now).
"'";
498 if (!empty($this->fields[
'fk_user_valid'])) {
499 $sql .=
", fk_user_valid = ".((int) $user->id);
501 $sql .=
" WHERE rowid = ".((int) $this->
id);
503 dol_syslog(get_class($this).
"::validate()", LOG_DEBUG);
504 $resql = $this->db->query(
$sql);
507 $this->error = $this->db->lasterror();
511 if (!$error && !$notrigger) {
513 $result = $this->
call_trigger(
'HRM_SKILLDET_VALIDATE', $user);
522 $this->oldref = $this->ref;
525 if (preg_match(
'/^[\(]?PROV/i', $this->
ref)) {
527 $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).
"'";
528 $sql .=
" WHERE filename LIKE '".$this->db->escape($this->
ref).
"%' AND filepath = 'skilldet/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
529 $resql = $this->db->query(
$sql);
532 $this->error = $this->db->lasterror();
534 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"ecm_files set filepath = 'skilldet/".$this->db->escape($this->newref).
"'";
535 $sql .=
" WHERE filepath = 'skilldet/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
536 $resql = $this->db->query(
$sql);
539 $this->error = $this->db->lasterror();
545 $dirsource = $conf->hrm->dir_output.
'/skilldet/'.$oldref;
546 $dirdest = $conf->hrm->dir_output.
'/skilldet/'.$newref;
547 if (!$error && file_exists($dirsource)) {
548 dol_syslog(get_class($this).
"::validate() rename dir ".$dirsource.
" into ".$dirdest);
550 if (@rename($dirsource, $dirdest)) {
553 $listoffiles =
dol_dir_list($conf->hrm->dir_output.
'/skilldet/'.$newref,
'files', 1,
'^'.preg_quote($oldref,
'/'));
554 foreach ($listoffiles as $fileentry) {
555 $dirsource = $fileentry[
'name'];
556 $dirdest = preg_replace(
'/^'.preg_quote($oldref,
'/').
'/', $newref, $dirsource);
557 $dirsource = $fileentry[
'path'].
'/'.$dirsource;
558 $dirdest = $fileentry[
'path'].
'/'.$dirdest;
559 @rename($dirsource, $dirdest);
569 $this->
status = self::STATUS_VALIDATED;
576 $this->db->rollback();
592 if ($this->
status <= self::STATUS_DRAFT) {
603 return $this->
setStatusCommon($user, self::STATUS_DRAFT, $notrigger,
'SKILLDET_UNVALIDATE');
613 public function cancel($user, $notrigger = 0)
616 if ($this->
status != self::STATUS_VALIDATED) {
627 return $this->
setStatusCommon($user, self::STATUS_CANCELED, $notrigger,
'SKILLDET_CANCEL');
637 public function reopen($user, $notrigger = 0)
640 if ($this->
status != self::STATUS_CANCELED) {
651 return $this->
setStatusCommon($user, self::STATUS_VALIDATED, $notrigger,
'SKILLDET_REOPEN');
664 public function getNomUrl($withpicto = 0, $option =
'', $notooltip = 0, $morecss =
'', $save_lastsearch_value = -1)
666 global $conf, $langs, $hookmanager;
668 if (!empty($conf->dol_no_mouse_hover)) {
674 $label =
img_picto(
'', $this->picto).
' <u>'.$langs->trans(
"Skilldet").
'</u>';
675 if (isset($this->
status)) {
676 $label .=
' '.$this->getLibStatut(5);
679 $label .=
'<b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
681 $url =
dol_buildpath(
'/hrm/skilldet_card.php', 1).
'?id='.$this->id;
683 if ($option !=
'nolink') {
685 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
686 if ($save_lastsearch_value == -1 && isset($_SERVER[
"PHP_SELF"]) && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
687 $add_save_lastsearch_values = 1;
689 if ($add_save_lastsearch_values) {
690 $url .=
'&save_lastsearch_values=1';
695 if (empty($notooltip)) {
697 $label = $langs->trans(
"ShowSkilldet");
698 $linkclose .=
' alt="'.dol_escape_htmltag($label, 1).
'"';
700 $linkclose .=
' title="'.dol_escape_htmltag($label, 1).
'"';
701 $linkclose .=
' class="classfortooltip'.($morecss ?
' '.$morecss :
'').
'"';
703 $linkclose = ($morecss ?
' class="'.$morecss.
'"' :
'');
706 if ($option ==
'nolink') {
707 $linkstart =
'<span';
709 $linkstart =
'<a href="'.$url.
'"';
711 $linkstart .= $linkclose.
'>';
712 if ($option ==
'nolink') {
713 $linkend =
'</span>';
718 $result .= $linkstart;
720 if (empty($this->showphoto_on_popup)) {
722 $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);
726 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
728 list($class, $module) = explode(
'@', $this->picto);
731 $filename = $filearray[0][
'name'];
732 if (!empty($filename)) {
733 $pospoint = strpos($filearray[0][
'name'],
'.');
735 $pathtophoto = $class.
'/'.$this->
ref.
'/thumbs/'.substr($filename, 0, $pospoint).
'_mini'.substr($filename, $pospoint);
737 $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>';
739 $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>';
744 $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);
749 if ($withpicto != 2) {
750 $result .= $this->ref;
756 global $action, $hookmanager;
757 $hookmanager->initHooks(array(
'skilldetdao'));
758 $parameters = array(
'id' => $this->
id,
'getnomurl' => &$result);
759 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
761 $result = $hookmanager->resPrint;
763 $result .= $hookmanager->resPrint;
791 if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
794 $this->labelStatus[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
795 $this->labelStatus[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Enabled');
796 $this->labelStatus[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Disabled');
797 $this->labelStatusShort[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
798 $this->labelStatusShort[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Enabled');
799 $this->labelStatusShort[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Disabled');
802 $statusType =
'status'.$status;
804 if ($status == self::STATUS_CANCELED) {
805 $statusType =
'status6';
808 return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status],
'', $statusType, $mode);
819 $sql =
'SELECT rowid, date_creation as datec, tms as datem,';
820 $sql .=
' fk_user_creat, fk_user_modif';
821 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
822 $sql .=
' WHERE t.rowid = '.((int) $id);
823 $result = $this->db->query(
$sql);
825 if ($this->db->num_rows($result)) {
826 $obj = $this->db->fetch_object($result);
828 $this->
id = $obj->rowid;
830 $this->user_creation_id = $obj->fk_user_creat;
831 $this->user_modification_id = $obj->fk_user_modif;
832 $this->date_creation = $this->db->jdate($obj->datec);
833 $this->date_modification = empty($obj->datem) ?
'' : $this->db->jdate($obj->datem);
836 $this->db->free($result);
865 global $langs, $conf;
869 $conf->global->hrm_SKILLDET_ADDON =
'mod_skilldet_standard';
879 $dirmodels = array_merge(array(
'/'), (array) $conf->modules_parts[
'models']);
880 foreach ($dirmodels as $reldir) {
884 $mybool = ((bool) @include_once $dir.$file) || $mybool;
887 if ($mybool ===
false) {
892 if (class_exists($classname)) {
893 $obj =
new $classname();
894 $numref = $obj->getNextValue($this);
896 if ($numref !=
'' && $numref !=
'-1') {
899 $this->error = $obj->error;
904 print $langs->trans(
"Error").
" ".$langs->trans(
"ClassNotFound").
' '.$classname;
908 print $langs->trans(
"ErrorNumberingModuleNotSetup", $this->element);
924 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams =
null)
926 global $conf, $langs;
929 $includedocgeneration = 0;
934 $modele =
'standard_skilldet';
936 if (!empty($this->model_pdf)) {
937 $modele = $this->model_pdf;
943 $modelpath =
"core/modules/hrm/doc/";
945 if ($includedocgeneration && !empty($modele)) {
946 $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.
if(isModEnabled('invoice') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&!getDolGlobalString('MAIN_USE_NEW_SUPPLIERMOD') && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') && $user->hasRight('don', 'lire')) if(isModEnabled('tax') && $user->hasRight('tax', 'charges', 'lire')) if(isModEnabled('invoice') &&isModEnabled('order') && $user->hasRight("commande", "lire") &&!getDolGlobalString('WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER')) $sql
Social contributions to pay.
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 dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.