32require
'../main.inc.php';
34require_once DOL_DOCUMENT_ROOT .
'/core/class/html.formcompany.class.php';
35require_once DOL_DOCUMENT_ROOT .
'/core/class/html.formfile.class.php';
36require_once DOL_DOCUMENT_ROOT .
'/core/class/html.formprojet.class.php';
37require_once DOL_DOCUMENT_ROOT .
'/user/class/user.class.php';
38require_once DOL_DOCUMENT_ROOT .
'/hrm/class/job.class.php';
39require_once DOL_DOCUMENT_ROOT .
'/hrm/class/skill.class.php';
40require_once DOL_DOCUMENT_ROOT .
'/hrm/class/skillrank.class.php';
41require_once DOL_DOCUMENT_ROOT .
'/hrm/lib/hrm_skill.lib.php';
42require_once DOL_DOCUMENT_ROOT .
'/hrm/class/evaluation.class.php';
43require_once DOL_DOCUMENT_ROOT.
'/hrm/lib/hrm_evaluation.lib.php';
46$langs->loadLangs(array(
'hrm',
'other'));
49$action =
GETPOST(
'action',
'aZ09');
50$confirm =
GETPOST(
'confirm',
'alpha');
51$cancel =
GETPOST(
'cancel',
'aZ09');
52$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'skillcard';
53$backtopage =
GETPOST(
'backtopage',
'alpha');
54$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
57$TSkillsToAdd =
GETPOST(
'fk_skill',
'array');
58$objecttype =
GETPOST(
'objecttype',
'alpha');
59$TNote =
GETPOST(
'TNote',
'array');
62if (empty($objecttype)) {
66$TAuthorizedObjects = array(
'job',
'user');
70if (in_array($objecttype, $TAuthorizedObjects)) {
71 if ($objecttype ==
'job') {
73 } elseif ($objecttype ==
"user") {
80$hookmanager->initHooks(array(
'skilltab',
'globalcard'));
83include DOL_DOCUMENT_ROOT .
'/core/actions_fetchobject.inc.php';
84if (method_exists(
$object,
'loadPersonalConf')) {
89$permissiontoread = $user->hasRight(
'hrm',
'all',
'read');
90$permissiontoadd = $user->hasRight(
'hrm',
'all',
'write');
93if ($user->socid > 0) {
96if (!isModEnabled(
'hrm')) {
99if (!$permissiontoread) {
108$parameters = array();
109$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
114if (empty($reshook)) {
117 $backurlforlist = DOL_URL_ROOT.
'/hrm/skill_list.php';
119 if (empty($backtopage) || ($cancel && empty($id))) {
120 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
121 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
122 $backtopage = $backurlforlist;
124 $backtopage = DOL_URL_ROOT.
'/hrm/skill_list.php?id=' . (
$id > 0 ?
$id :
'__ID__');
130 if ($action ==
'setnational_registration_number' && $permissiontoadd) {
131 $object->national_registration_number = (string)
GETPOST(
'national_registration_number',
'alphanohtml');
132 $result =
$object->update($user);
138 if ($action ==
'addSkill' && $permissiontoadd) {
141 if (empty($TSkillsToAdd)) {
146 foreach ($TSkillsToAdd as $k => $v) {
148 $skillAdded->fk_skill = $v;
149 $skillAdded->fk_object =
$id;
150 $skillAdded->objecttype = $objecttype;
151 $ret = $skillAdded->create($user);
161 } elseif ($action ==
'saveSkill' && $permissiontoadd) {
162 if (!empty($TNote)) {
163 foreach ($TNote as $skillId => $rank) {
164 $TSkills = $skill->fetchAll(
'ASC',
't.rowid', 0, 0,
'(fk_object:=:'.((
int) $id).
") AND (objecttype:=:'".$db->escape($objecttype).
"') AND (fk_skill:=:".((
int) $skillId).
')');
165 if (is_array($TSkills) && !empty($TSkills)) {
166 foreach ($TSkills as $tmpObj) {
167 $tmpObj->rankorder = $rank;
168 $tmpObj->update($user);
173 header(
"Location: " . DOL_URL_ROOT.
'/hrm/skill_tab.php?id=' .
$id.
'&objecttype=job');
176 } elseif ($action ==
'confirm_deleteskill' && $confirm ==
'yes' && $permissiontoadd) {
178 $ret = $skillToDelete->fetch($lineid);
181 $skillToDelete->delete($user);
191$form =
new Form($db);
195$title = $langs->trans(
"RequiredSkills");
200if (
$object->id > 0 && (empty($action) || ($action !=
'edit' && $action !=
'create'))) {
201 $res =
$object->fetch_optionals();
204 if ($objecttype ==
'job') {
205 require_once DOL_DOCUMENT_ROOT .
'/hrm/lib/hrm_job.lib.php';
208 } elseif ($objecttype ==
"user") {
209 require_once DOL_DOCUMENT_ROOT .
"/core/lib/usergroups.lib.php";
221 if ($action ==
'ask_deleteskill') {
222 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&objecttype=' . $objecttype .
'&lineid=' . $lineid, $langs->trans(
'DeleteLine'), $langs->trans(
'ConfirmDeleteLine'),
'confirm_deleteskill',
'', 0, 1);
232 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
233 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters,
$object, $action);
234 if (empty($reshook)) {
235 $formconfirm .= $hookmanager->resPrint;
236 } elseif ($reshook > 0) {
237 $formconfirm = $hookmanager->resPrint;
246 if ($objecttype ==
'job') {
247 $linkback =
'<a href="' .
dol_buildpath(
'/hrm/job_list.php', 1) .
'?restore_lastsearch_values=1' . (!empty($socid) ?
'&socid=' . $socid :
'') .
'">' . $langs->trans(
"BackToList") .
'</a>';
249 $morehtmlref =
'<div class="refid">';
250 $morehtmlref .=
$object->label;
251 $morehtmlref .=
'</div>';
253 dol_banner_tab(
$object,
'id', $linkback, 1,
'rowid',
'rowid', $morehtmlref);
255 $linkback =
'<a href="' . $listLink .
'?restore_lastsearch_values=1' . (!empty($socid) ?
'&socid=' . $socid :
'') .
'">' . $langs->trans(
"BackToList") .
'</a>';
257 $morehtmlref =
'<a href="'.DOL_URL_ROOT.
'/user/vcard.php?id='.
$object->id.
'&output=file&file='.urlencode(
dol_sanitizeFileName(
$object->getFullName($langs).
'.vcf')).
'" class="refid" rel="noopener">';
258 $morehtmlref .=
img_picto($langs->trans(
"Download").
' '.$langs->trans(
"VCard"),
'vcard.png',
'class="valignmiddle marginleftonly paddingrightonly"');
259 $morehtmlref .=
'</a>';
261 $urltovirtualcard =
'/user/virtualcard.php?id='.((int)
$object->id);
262 $morehtmlref .=
dolButtonToOpenUrlInDialogPopup(
'publicvirtualcard', $langs->trans(
"PublicVirtualCardUrl").
' - '.
$object->getFullName($langs),
img_picto($langs->trans(
"PublicVirtualCardUrl"),
'card',
'class="valignmiddle marginleftonly paddingrightonly"'), $urltovirtualcard,
'',
'nohover');
264 dol_banner_tab(
$object,
'id', $linkback, 1,
'rowid',
'rowid', $morehtmlref,
'&objecttype='.$objecttype);
268 $static_skill =
new Skill($db);
269 $TAllSkills = $static_skill->fetchAll();
272 $TAllSkillsFormatted = array();
273 if (!empty($TAllSkills)) {
274 foreach ($TAllSkills as $k => $v) {
275 $TAllSkillsFormatted[$k] = $v->label;
281 $sql_skill =
"SELECT sr.fk_object, sr.rowid, s.label,s.skill_type, sr.rankorder, sr.fk_skill";
282 $sql_skill .=
" FROM ".MAIN_DB_PREFIX.
"hrm_skillrank AS sr";
283 $sql_skill .=
" JOIN ".MAIN_DB_PREFIX.
"hrm_skill AS s ON sr.fk_skill = s.rowid";
284 $sql_skill .=
" AND sr.fk_object = ".((int) $id);
285 $result = $db->query($sql_skill);
286 $numSkills = $db->num_rows($result);
287 $TSkillsJob = array();
288 for ($i = 0; $i < $numSkills; $i++) {
289 $objSkillRank = $db->fetch_object($result);
290 $TSkillsJob[] = $objSkillRank;
293 $TAlreadyUsedSkill = array();
294 if (is_array($TSkillsJob) && !empty($TSkillsJob)) {
295 foreach ($TSkillsJob as $skillElement) {
296 $TAlreadyUsedSkill[$skillElement->fk_skill] = $skillElement->fk_skill;
300 print
'<div class="fichecenter">';
301 print
'<div class="fichehalfleft">';
303 print
'<div class="underbanner clearboth"></div>';
304 print
'<table class="border centpercent tableforfield">'.
"\n";
306 if ($objecttype ==
'job') {
311 $object->fields[
'label'][
'visible'] = 0;
312 include DOL_DOCUMENT_ROOT .
'/core/tpl/commonfields_view.tpl.php';
315 include DOL_DOCUMENT_ROOT .
'/core/tpl/extrafields_view.tpl.php';
318 print
'<tr><td class="titlefield">'.$langs->trans(
"Login").
'</td>';
320 print
'<td class="error">';
321 print $langs->trans(
"LoginAccountDisableInDolibarr");
326 if (property_exists(
$object,
'admin')) {
327 if (isModEnabled(
'multicompany') && !empty(
$object->admin) && empty(
$object->entity)) {
328 $addadmin .=
img_picto($langs->trans(
"SuperAdministratorDesc"),
"redstar",
'class="paddingleft"');
329 } elseif (!empty(
$object->admin)) {
330 $addadmin .=
img_picto($langs->trans(
"AdministratorDesc"),
"star",
'class="paddingleft"');
338 $object->fields[
'label'][
'visible'] = 0;
339 $object->fields[
'firstname'][
'visible'] = 0;
340 $object->fields[
'lastname'][
'visible'] = 0;
344 print
'<tr><td class="titlefield">'.$langs->trans(
"RefEmployee").
'</td>';
345 print
'<td class="error">';
351 print
'<tr><td class="titlefield">'.$langs->trans(
"NationalRegistrationNumber").
' <a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&objecttype=user&action=editnational_registration_number&token='.
newToken().
'">'.
img_picto($langs->trans(
"Edit"),
'edit').
'</a></td>';
353 if ($action ==
'editnational_registration_number') {
354 $ret =
'<form method="post" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&objecttype=user">';
355 $ret .=
'<input type="hidden" name="action" value="setnational_registration_number">';
356 $ret .=
'<input type="hidden" name="token" value="'.newToken().
'">';
357 $ret .=
'<input type="hidden" name="id" value="'.$object->id.
'">';
358 $ret .=
'<input type="text" name="national_registration_number" value="'.$object->national_registration_number.
'">';
359 $ret .=
'<input type="submit" class="button smallpaddingimp" name="modify" value="'.$langs->trans(
"Modify").
'"> ';
360 $ret .=
'<input type="submit" class="button smallpaddingimp button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
376 print
'<div class="clearboth"></div><br>';
378 if ($objecttype !=
'user' && $permissiontoadd) {
381 print
'<form name="addSkill" method="post" action="' . $_SERVER[
'PHP_SELF'] .
'">';
382 print
'<input type="hidden" name="objecttype" value="' . $objecttype .
'">';
383 print
'<input type="hidden" name="id" value="' .
$id .
'">';
384 print
'<input type="hidden" name="action" value="addSkill">';
385 print
'<input type="hidden" name="token" value="'.newToken().
'">';
386 print
'<div class="div-table-responsive-no-min">';
387 print
'<table id="tablelines" class="noborder noshadow" width="100%">';
388 print
'<tr><td style="width:90%">' . $langs->trans(
'AddSkill') .
'</td><td style="width:10%"></td></tr>';
391 print
img_picto(
'',
'shapes',
'class="pictofixedwidth"');
392 print $form->multiselectarray(
'fk_skill', array_diff_key($TAllSkillsFormatted, $TAlreadyUsedSkill), array(), 0, 0,
'widthcentpercentminusx') .
'</td>';
393 print
'<td><input class="button reposition" type="submit" value="' . $langs->trans(
'Add') .
'"></td>';
401 print
'<div class="clearboth"></div>';
403 if ($objecttype !=
'user' && $permissiontoadd) {
404 print
'<form name="saveSkill" method="post" action="' . $_SERVER[
'PHP_SELF'] .
'">';
405 print
'<input type="hidden" name="objecttype" value="' . $objecttype .
'">';
406 print
'<input type="hidden" name="id" value="' .
$id .
'">';
407 print
'<input type="hidden" name="token" value="'.newToken().
'">';
408 print
'<input type="hidden" name="action" value="saveSkill">';
410 if ($objecttype !=
'user') {
411 print
'<div class="div-table-responsive-no-min">';
412 print
'<table id="tablelines" class="noborder centpercent" width="100%">';
413 print
'<tr class="liste_titre">';
414 print
'<th>'.$langs->trans(
'SkillType').
'</th>';
415 print
'<th>'.$langs->trans(
'Label').
'</th>';
416 print
'<th>'.$langs->trans(
'Description').
'</th>';
417 print
'<th>'.$langs->trans($objecttype ===
'job' ?
'RequiredRank' :
'EmployeeRank').
'</th>';
418 if ($objecttype ===
'job') {
419 print
'<th class="linecoledit"></th>';
420 print
'<th class="linecoldelete"></th>';
423 if (!is_array($TSkillsJob) || empty($TSkillsJob)) {
424 print
'<tr><td><span class="opacitymedium">' . $langs->trans(
"NoRecordFound") .
'</span></td></tr>';
426 $sk =
new Skill($db);
427 foreach ($TSkillsJob as $skillElement) {
428 $sk->fetch((
int) $skillElement->fk_skill);
432 print
'</td><td class="linecolfk_skill">';
433 print $sk->getNomUrl(1);
436 print $sk->description;
437 print
'</td><td class="linecolrank">';
438 print
displayRankInfos($skillElement->rankorder, $skillElement->fk_skill,
'TNote', $objecttype ==
'job' && $permissiontoadd ?
'edit' :
'view');
440 if ($objecttype !=
'user' && $permissiontoadd) {
441 print
'<td class="linecoledit"></td>';
442 print
'<td class="linecoldelete">';
443 print
'<a class="reposition" href="' . $_SERVER[
"PHP_SELF"] .
'?id=' . $skillElement->fk_object .
'&objecttype=' . $objecttype .
'&action=ask_deleteskill&lineid=' . $skillElement->rowid .
'">';
453 if ($objecttype !=
'user' && $permissiontoadd) {
454 print
'<td><input class="button pull-right" type="submit" value="' . $langs->trans(
'SaveRank') .
'"></td>';
457 if ($objecttype !=
'user' && $permissiontoadd) {
464 if ($objecttype ==
'user' && $permissiontoadd) {
467 $sql =
"select e.rowid,e.ref,e.fk_user,e.fk_job,e.date_eval,ed.rankorder,ed.required_rank,ed.fk_skill,s.label";
468 $sql .=
" FROM ".MAIN_DB_PREFIX.
"hrm_evaluation as e";
469 $sql .=
", ".MAIN_DB_PREFIX.
"hrm_evaluationdet as ed";
470 $sql .=
", ".MAIN_DB_PREFIX.
"hrm_skill as s";
471 $sql .=
" WHERE e.rowid = ed.fk_evaluation";
472 $sql .=
" AND s.rowid = ed.fk_skill";
473 $sql .=
" AND e.fk_user = ".((int) $id);
474 $sql .=
" AND e.status > 0";
475 $resql = $db->query($sql);
476 $num = $db->num_rows($resql);
479 $sqlEval =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"hrm_evaluation as e";
480 $sqlEval .=
" WHERE e.fk_user = ".((int) $id);
481 $rslt = $db->query($sqlEval);
482 $numEval = $db->num_rows($sqlEval);
485 print_barre_liste($langs->trans(
"Evaluations"), $page, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $numEval, $numEval, $evaltmp->picto, 0);
487 print
'<div class="div-table-responsive-no-min">';
488 print
'<table id="tablelines" class="noborder centpercent" width="100%">';
489 print
'<tr class="liste_titre">';
490 print
'<th>'.$langs->trans(
'Label').
'</th>';
491 print
'<th>'.$langs->trans(
'Description').
'</th>';
492 print
'<th>'.$langs->trans(
'DateEval').
'</th>';
493 print
'<th>'.$langs->trans(
'Status').
'</th>';
494 print
'<th>'.$langs->trans(
"Result").
' ' .$form->textwithpicto(
'',
GetLegendSkills(), 1) .
'</th>';
497 print
'<tr><td><span class="opacitymedium">' . $langs->trans(
"NoRecordFound") .
'</span></td></tr>';
504 $obj = $db->fetch_object($resql);
511 foreach ($resultArray as
$object) {
514 $evaltmp->id =
$object[0]->rowid;
515 $evaltmp->ref =
$object[0]->ref;
516 $job->fetch(
$object[0]->fk_job);
519 $evaltmp->fetch(
$object->rowid);
526 print $evaltmp->getNomUrl(1);
527 print
'</td><td class="linecolfk_skill">';
528 print $job->getNomUrl(1);
533 print $evaltmp->getLibStatut(2);
535 print
'<td class="linecolrank tdoverflowmax300">';
541 print $skill->result;
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
static typeCodeToLabel($code)
Class to manage Dolibarr users.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
showValueWithClipboardCPButton($valuetocopy, $showonlyonhover=1, $texttoshow='')
Create a button to copy $valuetocopy in the clipboard (for copy and paste feature).
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dolButtonToOpenUrlInDialogPopup($name, $label, $buttonstring, $url, $disabled='', $morecss='classlink button bordertransp', $jsonopen='', $backtopagejsfields='', $accesskey='')
Return HTML code to output a button to open a dialog popup box.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
setEventMessage($mesgs, $style='mesgs', $noduplicate=0, $attop=0)
Set event message in dol_events session object.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
newToken()
Return the value of token currently saved into session with name 'newtoken'.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
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.
getRankOrderResults($obj)
getGroupedEval($objects)
Grouped rows with same ref in array.
jobPrepareHead($object)
Prepare array of tabs for Job.
displayRankInfos($selected_rank, $fk_skill, $inputname='TNote', $mode='view')
Used to print ranks of a skill into several case, view or edit pour js necessary to select a rank.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
publicphonebutton2 phonegreen basiclayout basiclayout TotalHT VATCode TotalVAT TotalLT1 TotalLT2 TotalTTC TotalHT clearboth nowraponall TAKEPOS_SHOW_SUBPRICE right right right takeposterminal SELECT e rowid
user_prepare_head(User $object)
Prepare array with list of tabs.