33require
'../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';
44require_once DOL_DOCUMENT_ROOT.
'/hrm/class/evaluationdet.class.php';
55$langs->loadLangs(array(
'hrm',
'companies',
'other'));
58$action =
GETPOST(
'action',
'aZ09');
59$confirm =
GETPOST(
'confirm',
'alpha');
60$cancel =
GETPOST(
'cancel',
'aZ09');
61$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'skillcard';
62$backtopage =
GETPOST(
'backtopage',
'alpha');
63$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
66$TSkillsToAdd =
GETPOST(
'fk_skill',
'array');
67$objecttype =
GETPOST(
'objecttype',
'alpha');
68$TNote =
GETPOST(
'TNote',
'array');
71if (empty($objecttype)) {
75$TAuthorizedObjects = array(
'job',
'user');
79if (in_array($objecttype, $TAuthorizedObjects)) {
80 if ($objecttype ==
'job') {
82 } elseif ($objecttype ==
"user") {
89$hookmanager->initHooks(array(
'skilltab',
'globalcard'));
92include DOL_DOCUMENT_ROOT .
'/core/actions_fetchobject.inc.php';
93if (method_exists(
$object,
'loadPersonalConf')) {
98$permissiontoread = $user->hasRight(
'hrm',
'all',
'read');
99$permissiontoadd = $user->hasRight(
'hrm',
'all',
'write');
102if ($user->socid > 0) {
105if (!isModEnabled(
'hrm')) {
108if (!$permissiontoread) {
117$parameters = array();
118$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
123if (empty($reshook)) {
126 $backurlforlist = DOL_URL_ROOT.
'/hrm/skill_list.php';
128 if (empty($backtopage) || ($cancel && empty($id))) {
129 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
130 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
131 $backtopage = $backurlforlist;
133 $backtopage = DOL_URL_ROOT.
'/hrm/skill_list.php?id=' . (
$id > 0 ?
$id :
'__ID__');
139 if ($action ==
'setnational_registration_number' && $permissiontoadd) {
140 $object->national_registration_number = (string)
GETPOST(
'national_registration_number',
'alphanohtml');
141 $result =
$object->update($user);
147 if ($action ==
'addSkill' && $permissiontoadd) {
151 if (empty($TSkillsToAdd)) {
157 foreach ($TSkillsToAdd as $k => $v) {
159 $skillAdded->fk_skill = $v;
160 $skillAdded->fk_object =
$id;
161 $skillAdded->objecttype = $objecttype;
162 $ret = $skillAdded->create($user);
169 $sql_eval =
"SELECT e.rowid FROM ".MAIN_DB_PREFIX.
"hrm_evaluation as e";
170 $sql_eval .=
" WHERE e.status = 0 ";
172 $sql_eval .=
" AND e.fk_job = ".(int)
$object->id;
173 $result = $db->query($sql_eval);
174 $numEvals = $db->num_rows($result);
176 while ($i < $numEvals) {
177 $objEval = $db->fetch_object($result);
179 $line->fk_evaluation = $objEval->rowid;
180 $line->fk_skill = $v;
181 $line->required_rank = 0;
184 $res = $line->create($user);
201 } elseif ($action ==
'saveSkill' && $permissiontoadd) {
202 if (!empty($TNote)) {
205 foreach ($TNote as $skillId => $rank) {
206 $rank = ($rank ==
"NA" ? -1 : $rank);
207 $TSkills = $skill->fetchAll(
'ASC',
't.rowid', 0, 0,
'(fk_object:=:'.((
int) $id).
") AND (objecttype:=:'".$db->escape($objecttype).
"') AND (fk_skill:=:".((int) $skillId).
')');
208 '@phan-var-force SkillRank[] $tSkills';
209 if (is_array($TSkills) && !empty($TSkills)) {
210 foreach ($TSkills as $tmpObj) {
211 $tmpObj->rankorder = $rank;
212 $ret = $tmpObj->update($user);
220 $sql_eval =
"SELECT e.rowid FROM ".MAIN_DB_PREFIX.
"hrm_evaluation as e";
221 $sql_eval .=
" WHERE e.status = 0 ";
222 $sql_eval .=
" AND e.entity = ".getEntity(
$object->element);
223 $sql_eval .=
" AND e.fk_job = ".(int)
$object->id;
224 $result = $db->query($sql_eval);
225 $numEvals = $db->num_rows($result);
227 while ($i < $numEvals) {
228 $objEval = $db->fetch_object($result);
230 $lines = $line->fetchAll(
'',
'', 0, 0,
'((fk_skill:=:'.((
int) $tmpObj->fk_skill).
') AND (fk_evaluation:=:'.((
int) $objEval->rowid).
'))');
231 if (is_array($lines)) {
232 foreach ($lines as $key => $evalline) {
234 if (is_object($evalline) && $evalline instanceof
EvaluationLine) {
235 $evalline->required_rank = $rank;
236 $ret = $evalline->update($user);
265 header(
"Location: " . DOL_URL_ROOT.
'/hrm/skill_tab.php?id=' .
$id.
'&objecttype=job');
268 } elseif ($action ==
'confirm_deleteskill' && $confirm ==
'yes' && $permissiontoadd) {
272 $ret = $skillToDelete->fetch($lineid);
275 $sql_eval =
"SELECT e.rowid FROM ".MAIN_DB_PREFIX.
"hrm_evaluation as e";
276 $sql_eval .=
" WHERE e.status = 0 ";
277 $sql_eval .=
" AND e.entity = ".getEntity(
$object->element);
278 $sql_eval .=
" AND e.fk_job = ".(int)
$object->id;
279 $result = $db->query($sql_eval);
280 $numEvals = $db->num_rows($result);
282 while ($i < $numEvals) {
283 $objEval = $db->fetch_object($result);
285 $lines = $line->fetchAll(
'',
'', 0, 0,
'((fk_skill:=:'.((
int) $skillToDelete->fk_skill).
') AND (fk_evaluation:=:'.((
int) $objEval->rowid).
'))');
286 if (is_array($lines)) {
287 foreach ($lines as $key => $evalline) {
289 if (is_object($evalline) && $evalline instanceof
EvaluationLine) {
290 $ret = $evalline->delete($user);
310 $ret = $skillToDelete->delete($user);
330$form =
new Form($db);
334$title = $langs->trans(
"RequiredSkills");
340if (
$object->id > 0 && (empty($action) || ($action !=
'edit' && $action !=
'create'))) {
341 $res =
$object->fetch_optionals();
344 if ($objecttype ==
'job') {
345 require_once DOL_DOCUMENT_ROOT .
'/hrm/lib/hrm_job.lib.php';
348 } elseif ($objecttype ==
"user") {
349 require_once DOL_DOCUMENT_ROOT .
"/core/lib/usergroups.lib.php";
363 if ($action ==
'ask_deleteskill') {
364 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&objecttype=' . $objecttype .
'&lineid=' . $lineid, $langs->trans(
'DeleteLine'), $langs->trans(
'ConfirmDeleteLine'),
'confirm_deleteskill',
'', 0, 1);
374 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
375 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters,
$object, $action);
376 if (empty($reshook)) {
377 $formconfirm .= $hookmanager->resPrint;
378 } elseif ($reshook > 0) {
379 $formconfirm = $hookmanager->resPrint;
388 if ($objecttype ==
'job') {
389 $linkback =
'<a href="' .
dol_buildpath(
'/hrm/job_list.php', 1) .
'?restore_lastsearch_values=1' . (!empty($socid) ?
'&socid=' . $socid :
'') .
'">' . $langs->trans(
"BackToList") .
'</a>';
391 $morehtmlref =
'<div class="refid">';
392 $morehtmlref .=
$object->label;
393 $morehtmlref .=
'</div>';
395 dol_banner_tab(
$object,
'id', $linkback, 1,
'rowid',
'rowid', $morehtmlref);
396 } elseif ($listLink !==
null) {
397 $linkback =
'<a href="' . $listLink .
'?restore_lastsearch_values=1' . (!empty($socid) ?
'&socid=' . $socid :
'') .
'">' . $langs->trans(
"BackToList") .
'</a>';
399 $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">';
400 $morehtmlref .=
img_picto($langs->trans(
"Download").
' '.$langs->trans(
"VCard"),
'vcard.png',
'class="valignmiddle marginleftonly paddingrightonly"');
401 $morehtmlref .=
'</a>';
403 $urltovirtualcard =
'/user/virtualcard.php?id='.((int)
$object->id);
404 $morehtmlref .=
dolButtonToOpenUrlInDialogPopup(
'publicvirtualcard', $langs->trans(
"PublicVirtualCardUrl").
' - '.
$object->getFullName($langs),
img_picto($langs->trans(
"PublicVirtualCardUrl"),
'card',
'class="valignmiddle marginleftonly paddingrightonly"'), $urltovirtualcard,
'',
'nohover');
406 dol_banner_tab(
$object,
'id', $linkback, 1,
'rowid',
'rowid', $morehtmlref,
'&objecttype='.$objecttype);
410 $static_skill =
new Skill($db);
411 $TAllSkills = $static_skill->fetchAll();
414 $TAllSkillsFormatted = array();
415 if (!empty($TAllSkills)) {
416 foreach ($TAllSkills as $k => $v) {
417 $TAllSkillsFormatted[$k] = $v->label;
423 $sql_skill =
"SELECT sr.fk_object, sr.rowid, s.label,s.skill_type, sr.rankorder, sr.fk_skill";
424 $sql_skill .=
" FROM ".MAIN_DB_PREFIX.
"hrm_skillrank AS sr";
425 $sql_skill .=
" JOIN ".MAIN_DB_PREFIX.
"hrm_skill AS s ON sr.fk_skill = s.rowid";
426 $sql_skill .=
" AND sr.fk_object = ".((int) $id);
427 $result = $db->query($sql_skill);
428 $numSkills = $db->num_rows($result);
429 $TSkillsJob = array();
430 for ($i = 0; $i < $numSkills; $i++) {
431 $objSkillRank = $db->fetch_object($result);
432 $TSkillsJob[] = $objSkillRank;
435 $TAlreadyUsedSkill = array();
436 if (is_array($TSkillsJob) && !empty($TSkillsJob)) {
437 foreach ($TSkillsJob as $skillElement) {
438 $TAlreadyUsedSkill[$skillElement->fk_skill] = $skillElement->fk_skill;
442 print
'<div class="fichecenter">';
443 print
'<div class="fichehalfleft">';
445 print
'<div class="underbanner clearboth"></div>';
446 print
'<table class="border centpercent tableforfield">'.
"\n";
448 if ($objecttype ==
'job') {
453 $object->fields[
'label'][
'visible'] = 0;
454 include DOL_DOCUMENT_ROOT .
'/core/tpl/commonfields_view.tpl.php';
457 include DOL_DOCUMENT_ROOT .
'/core/tpl/extrafields_view.tpl.php';
460 print
'<tr><td class="titlefield">'.$langs->trans(
"Login").
'</td>';
462 print
'<td class="error">';
463 print $langs->trans(
"LoginAccountDisableInDolibarr");
468 if (property_exists(
$object,
'admin')) {
469 if (isModEnabled(
'multicompany') && !empty(
$object->admin) && empty(
$object->entity)) {
470 $addadmin .=
img_picto($langs->trans(
"SuperAdministratorDesc"),
"redstar",
'class="paddingleft"');
471 } elseif (!empty(
$object->admin)) {
472 $addadmin .=
img_picto($langs->trans(
"AdministratorDesc"),
"star",
'class="paddingleft"');
480 $object->fields[
'label'][
'visible'] = 0;
481 $object->fields[
'firstname'][
'visible'] = 0;
482 $object->fields[
'lastname'][
'visible'] = 0;
486 print
'<tr><td class="titlefield">'.$langs->trans(
"RefEmployee").
'</td>';
487 print
'<td class="error">';
493 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>';
495 if ($action ==
'editnational_registration_number') {
496 $ret =
'<form method="post" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&objecttype=user">';
497 $ret .=
'<input type="hidden" name="action" value="setnational_registration_number">';
498 $ret .=
'<input type="hidden" name="token" value="'.newToken().
'">';
499 $ret .=
'<input type="hidden" name="id" value="'.$object->id.
'">';
500 $ret .=
'<input type="text" name="national_registration_number" value="'.$object->national_registration_number.
'">';
501 $ret .=
'<input type="submit" class="button smallpaddingimp" name="modify" value="'.$langs->trans(
"Modify").
'"> ';
502 $ret .=
'<input type="submit" class="button smallpaddingimp button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
518 print
'<div class="clearboth"></div><br>';
520 if ($objecttype !=
'user' && $permissiontoadd) {
523 print
'<form name="addSkill" method="post" action="' . $_SERVER[
'PHP_SELF'] .
'">';
524 print
'<input type="hidden" name="objecttype" value="' . $objecttype .
'">';
525 print
'<input type="hidden" name="id" value="' .
$id .
'">';
526 print
'<input type="hidden" name="action" value="addSkill">';
527 print
'<input type="hidden" name="token" value="'.newToken().
'">';
528 print
'<div class="div-table-responsive-no-min">';
529 print
'<table id="tablelines" class="noborder noshadow" width="100%">';
530 print
'<tr><td style="width:90%">' . $langs->trans(
'AddSkill') .
'</td><td style="width:10%"></td></tr>';
533 print
img_picto(
'',
'shapes',
'class="pictofixedwidth"');
534 print $form->multiselectarray(
'fk_skill', array_diff_key($TAllSkillsFormatted, $TAlreadyUsedSkill), array(), 0, 0,
'widthcentpercentminusx') .
'</td>';
535 print
'<td><input class="button reposition" type="submit" value="' . $langs->trans(
'Add') .
'"></td>';
543 print
'<div class="clearboth"></div>';
545 if ($objecttype !=
'user' && $permissiontoadd) {
546 print
'<form name="saveSkill" method="post" action="' . $_SERVER[
'PHP_SELF'] .
'">';
547 print
'<input type="hidden" name="objecttype" value="' . $objecttype .
'">';
548 print
'<input type="hidden" name="id" value="' .
$id .
'">';
549 print
'<input type="hidden" name="token" value="'.newToken().
'">';
550 print
'<input type="hidden" name="action" value="saveSkill">';
552 if ($objecttype !=
'user') {
553 print
'<div class="div-table-responsive-no-min">';
554 print
'<table id="tablelines" class="noborder centpercent" width="100%">';
555 print
'<tr class="liste_titre">';
556 print
'<th>'.$langs->trans(
'SkillType').
'</th>';
557 print
'<th>'.$langs->trans(
'Label').
'</th>';
558 print
'<th>'.$langs->trans(
'Description').
'</th>';
559 print
'<th>'.$langs->trans($objecttype ===
'job' ?
'RequiredRank' :
'EmployeeRank').
'</th>';
560 if ($objecttype ===
'job') {
561 print
'<th class="linecoledit"></th>';
562 print
'<th class="linecoldelete"></th>';
565 if (!is_array($TSkillsJob) || empty($TSkillsJob)) {
566 print
'<tr><td><span class="opacitymedium">' . $langs->trans(
"NoRecordFound") .
'</span></td></tr>';
568 $sk =
new Skill($db);
569 foreach ($TSkillsJob as $skillElement) {
570 $sk->fetch((
int) $skillElement->fk_skill);
574 print
'</td><td class="linecolfk_skill">';
575 print $sk->getNomUrl(1);
578 print $sk->description;
579 print
'</td><td class="linecolrank">';
580 print
displayRankInfos($skillElement->rankorder, $skillElement->fk_skill,
'TNote', $objecttype ==
'job' && $permissiontoadd ?
'edit' :
'view');
582 if ($objecttype !=
'user' && $permissiontoadd) {
583 print
'<td class="linecoledit"></td>';
584 print
'<td class="linecoldelete">';
585 print
'<a class="reposition" href="' . $_SERVER[
"PHP_SELF"] .
'?id=' . $skillElement->fk_object .
'&objecttype=' . $objecttype .
'&action=ask_deleteskill&lineid=' . $skillElement->rowid .
'&token='.newToken().
'">';
595 if ($objecttype !=
'user' && $permissiontoadd) {
596 print
'<td><input class="button pull-right" type="submit" value="' . $langs->trans(
'SaveRank') .
'"></td>';
599 if ($objecttype !=
'user' && $permissiontoadd) {
606 if ($objecttype ==
'user' && $permissiontoadd) {
609 $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";
610 $sql .=
" FROM ".MAIN_DB_PREFIX.
"hrm_evaluation as e";
611 $sql .=
", ".MAIN_DB_PREFIX.
"hrm_evaluationdet as ed";
612 $sql .=
", ".MAIN_DB_PREFIX.
"hrm_skill as s";
613 $sql .=
" WHERE e.rowid = ed.fk_evaluation";
614 $sql .=
" AND s.rowid = ed.fk_skill";
615 $sql .=
" AND e.fk_user = ".((int) $id);
617 $resql = $db->query($sql);
618 $num = $db->num_rows($resql);
621 $sqlEval =
"SELECT COUNT(rowid) as nb FROM ".MAIN_DB_PREFIX.
"hrm_evaluation as e";
622 $sqlEval .=
" WHERE e.fk_user = ".((int) $id);
623 $rslt = $db->query($sqlEval);
624 $tmpobj = $db->fetch_object($rslt);
627 $numEval = $tmpobj->nb;
631 print_barre_liste($langs->trans(
"Evaluations"), $page, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $numEval, $numEval, $evaltmp->picto, 0);
633 print
'<div class="div-table-responsive-no-min">';
634 print
'<table id="tablelines" class="noborder centpercent">';
635 print
'<tr class="liste_titre">';
636 print
'<th>'.$langs->trans(
'Label').
'</th>';
637 print
'<th>'.$langs->trans(
'Description').
'</th>';
638 print
'<th>'.$langs->trans(
'DateEval').
'</th>';
639 print
'<th>'.$langs->trans(
'Status').
'</th>';
640 print
'<th>'.$langs->trans(
"Result").
' ' .$form->textwithpicto(
'',
GetLegendSkills(), 1) .
'</th>';
643 print
'<tr><td><span class="opacitymedium">' . $langs->trans(
"NoRecordFound") .
'</span></td></tr>';
650 $obj = $db->fetch_object($resql);
658 foreach ($resultArray as
$object) {
660 $evaltmp->fetch(
$object[0]->rowid);
661 $evaltmp->id =
$object[0]->rowid;
662 $evaltmp->ref =
$object[0]->ref;
663 $job->fetch(
$object[0]->fk_job);
666 $evaltmp->fetch(
$object->rowid);
672 print
'<td class="nowraponall">';
673 print $evaltmp->getNomUrl(1);
674 print
'</td><td class="linecolfk_skill">';
675 print $job->getNomUrl(1);
680 print $evaltmp->getLibStatut(2);
682 print
'<td class="linecolrank tdoverflowmax300">';
683 if ($job->status == $job::STATUS_VALIDATED) {
688 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.
Class for EvaluationLine.
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.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $selectlimitsuffix=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
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'.
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.
getEntity($element, $shared=1, $currentobject=null)
Get list of entity id to use.
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.
user_prepare_head(User $object)
Prepare array with list of tabs.