/** * Fill table row */ protected function fillRow($a_set) { global $lng, $ilCtrl; $ilCtrl->setParameter($this->parent_obj, "sk_id", $a_set["base_skill"]); $ilCtrl->setParameter($this->parent_obj, "tref_id", $a_set["tref_id"]); $this->tpl->setVariable("COMPETENCE", $a_set["title"]); $this->tpl->setVariable("NR_OF_QUESTIONS", $a_set["nr_of_q"]); $this->tpl->setVariable("MAX_SCALE_POINTS", $a_set["scale_sum"]); $this->tpl->setVariable("CMD", $ilCtrl->getLinkTarget($this->parent_obj, "listSkillThresholds")); $this->tpl->setVariable("ACTION", $lng->txt("edit")); include_once "./Services/Skill/classes/class.ilBasicSkill.php"; $bs = new ilBasicSkill($a_set["base_skill"]); $ld = $bs->getLevelData(); foreach ($ld as $l) { $this->tpl->setCurrentBlock("points"); $this->tpl->setVariable("LEV", $l["title"]); $tr = $this->thresholds[$l["id"]][$a_set["tref_id"]]; if ((int) $tr != 0) { $this->tpl->setVariable("THRESHOLD", (int) $tr); } else { $this->tpl->setVariable("THRESHOLD", ""); } $this->tpl->parseCurrentBlock(); } }
/** * Get gap analysis html * * @param * @return */ function getGapAnalysisHTML($a_user_id = 0, $a_skills = null) { global $ilUser, $lng; // $this->setTabs("list_skills"); if ($a_user_id == 0) { $user_id = $ilUser->getId(); } else { $user_id = $a_user_id; } $skills = array(); if ($this->getProfileId() > 0) { $profile = new ilSkillProfile($this->getProfileId()); $this->profile_levels = $profile->getSkillLevels(); foreach ($this->profile_levels as $l) { $skills[] = array("base_skill_id" => $l["base_skill_id"], "tref_id" => $l["tref_id"], "level_id" => $l["level_id"]); } } else { if (is_array($a_skills)) { $skills = $a_skills; } } // get actual levels for gap analysis $this->actual_levels = array(); include_once "./Services/Skill/classes/class.ilBasicSkill.php"; foreach ($skills as $sk) { $bs = new ilBasicSkill($sk["base_skill_id"]); if ($this->gap_mode == "max_per_type") { $max = $bs->getMaxLevelPerType($sk["tref_id"], $this->gap_mode_type, $user_id); $this->actual_levels[$sk["base_skill_id"]][$sk["tref_id"]] = $max; } else { if ($this->gap_mode == "max_per_object") { $max = $bs->getMaxLevelPerObject($sk["tref_id"], $this->gap_mode_obj_id, $user_id); $this->actual_levels[$sk["base_skill_id"]][$sk["tref_id"]] = $max; } } } $incl_self_eval = false; if (count($this->getGapAnalysisSelfEvalLevels() > 0)) { $incl_self_eval = true; $self_vals = $this->getGapAnalysisSelfEvalLevels(); } // output spider stuff if (count($skills) >= 3) { $max_cnt = 0; $leg_labels = array(); //var_dump($this->profile_levels); //foreach ($this->profile_levels as $k => $l) // write target, actual and self counter to skill array foreach ($skills as $k => $l) { //$bs = new ilBasicSkill($l["base_skill_id"]); $bs = new ilBasicSkill($l["base_skill_id"]); $leg_labels[] = $bs->getTitle(); $levels = $bs->getLevelData(); $cnt = 0; foreach ($levels as $lv) { $cnt++; if ($l["level_id"] == $lv["id"]) { $skills[$k]["target_cnt"] = $cnt; } if ($this->actual_levels[$l["base_skill_id"]][$l["tref_id"]] == $lv["id"]) { $skills[$k]["actual_cnt"] = $cnt; } if ($incl_self_eval) { if ($self_vals[$l["base_skill_id"]][$l["tref_id"]] == $lv["id"]) { $skills[$k]["self_cnt"] = $cnt; } } $max_cnt = max($max_cnt, $cnt); } } // $leg_labels = array("AAAAA", "BBBBB", "CCCCC"); //var_dump($this->profile_levels); //var_dump($this->actual_levels); include_once "./Services/Chart/classes/class.ilChart.php"; $chart = new ilChart("gap_chart", 600, 300); $chart->setYAxisMax($max_cnt); $chart->setLegLabels($leg_labels); // target level $cd = new ilChartData("spider"); $cd->setLabel($lng->txt("skmg_target_level")); $cd->setFill("true", "#A0A0A0"); // other users $cd2 = new ilChartData("spider"); if ($this->gap_cat_title != "") { $cd2->setLabel($this->gap_cat_title); } else { if ($this->gap_mode == "max_per_type") { $cd2->setLabel($lng->txt("objs_" . $this->gap_mode_type)); } else { if ($this->gap_mode == "max_per_object") { $cd2->setLabel(ilObject::_lookupTitle($this->gap_mode_obj_id)); } } } $cd2->setFill("true", "#8080FF"); // self evaluation if ($incl_self_eval) { $cd3 = new ilChartData("spider"); $cd3->setLabel($lng->txt("skmg_self_evaluation")); $cd3->setFill("true", "#FF8080"); } // fill in data $cnt = 0; foreach ($skills as $pl) { $cd->addPoint($cnt, (int) $pl["target_cnt"]); $cd2->addPoint($cnt, (int) $pl["actual_cnt"]); if ($incl_self_eval) { $cd3->addPoint($cnt, (int) $pl["self_cnt"]); } $cnt++; } // add data to chart if ($this->getProfileId() > 0) { $chart->addData($cd); } $chart->addData($cd2); if ($incl_self_eval && count($this->getGapAnalysisSelfEvalLevels()) > 0) { $chart->addData($cd3); } $lg = new ilChartLegend(); $chart->setLegend($lg); $chart_html = $chart->getHTML(); } $stree = new ilSkillTree(); $html = ""; foreach ($skills as $s) { $path = $stree->getSkillTreePath($s["base_skill_id"]); // check draft foreach ($path as $p) { if ($p["draft"]) { continue 2; } } $html .= $this->getSkillHTML($s["base_skill_id"], $user_id, false, $s["tref_id"]); } // list skills // include_once("./Services/Skill/classes/class.ilPersonalSkillTableGUI.php"); // $sktab = new ilPersonalSkillTableGUI($this, "listSkills"); return $chart_html . $html; }
/** * Get average level of user self evaluation * * Note: this method does not make much sense in general, since it * assumes that all basic skills have the same level */ static function getAverageLevel($a_se_id, $a_user_id, $a_top_skill_id) { global $lng; $lng->loadLanguageModule("skmg"); include_once "./Services/Skill/classes/class.ilSkillTree.php"; include_once "./Services/Skill/classes/class.ilBasicSkill.php"; $stree = new ilSkillTree(); $cnt = 0; $sum = 0; if ($stree->isInTree($a_top_skill_id)) { $se = new ilSkillSelfEvaluation($a_se_id); $levels = $se->getLevels(); $cnode = $stree->getNodeData($a_top_skill_id); $childs = $stree->getSubTree($cnode); foreach ($childs as $child) { if ($child["type"] == "skll") { $sk = new ilBasicSkill($child["child"]); $ls = $sk->getLevelData(); $ord = array(); foreach ($ls as $k => $l) { $ord[$l["id"]] = $k + 1; } reset($ls); foreach ($ls as $ld) { if ($ld["id"] == $levels[$child["child"]]) { $sum += $ord[$ld["id"]]; } } $cnt += 1; } } } if ($cnt > 0) { $avg = round($sum / $cnt); if ($avg > 0) { return array("skill_title" => $cnode["title"], "ord" => $avg, "avg_title" => $ls[$avg - 1]["title"]); } else { return array("skill_title" => $cnode["title"], "ord" => $avg, "avg_title" => $lng->txt("skmg_no_skills")); } } return null; }
/** * Determine skill levels for appraisee * * @param $a_appraisee_id int user id of appraisee * @return array array with lots of information */ function determineSkillLevelsForAppraisee($a_appraisee_id, $a_self_eval = false) { $skills = array(); // get all skills $opts = $this->getAllAssignedSkillsAsOptions(); foreach ($opts as $k => $title) { $k = explode(":", $k); $bs = new ilBasicSkill((int) $k[0]); $ld = $bs->getLevelData(); $skills[] = array("base_skill_id" => (int) $k[0], "tref_id" => (int) $k[1], "skill_title" => $title, "level_data" => $ld); } if (!$a_self_eval) { $finished_ids = $this->survey->getFinishedIdsForAppraiseeId($a_appraisee_id, true); } else { $finished_id = $this->survey->getFinishedIdForAppraiseeIdAndRaterId($a_appraisee_id, $a_appraisee_id); if ($finished_id > 0) { $finished_ids = array($finished_id); } } if (!sizeof($finished_ids)) { $finished_ids = array(-1); } $results = $this->survey->getUserSpecificResults($finished_ids); foreach ($skills as $k => $s) { $q_ids = $this->getQuestionsForSkill($s["base_skill_id"], $s["tref_id"]); $mean_sum = 0; foreach ($q_ids as $q_id) { $qmean = 0; if (is_array($results[$q_id])) { $cnt = 0; $sum = 0; foreach ($results[$q_id] as $r) { // this is a workaround, since we only get arrays from // getUserSpecificResults() $r = explode(" - ", $r); $sum += (int) $r[0]; $cnt++; } if ($cnt > 0) { $qmean = $sum / $cnt; } } $mean_sum += $qmean; } $skills[$k]["mean_sum"] = $mean_sum; include_once "./Modules/Survey/classes/class.ilSurveySkillThresholds.php"; $skthr = new ilSurveySkillThresholds($this->survey); $thresholds = $skthr->getThresholds(); foreach ($skills[$k]["level_data"] as $l) { $t = $thresholds[$l["id"]][$s["tref_id"]]; if ($t > 0 && $mean_sum >= $t) { $skills[$k]["new_level"] = $l["title"]; $skills[$k]["new_level_id"] = $l["id"]; } } } return $skills; }
/** * Get levels * * @param * @return */ function getLevels() { include_once "./Services/Skill/classes/class.ilBasicSkill.php"; $bs = new ilBasicSkill($this->base_skill_id); return $bs->getLevelData(); }
private function evaluateSkillPointAccounts($userId) { foreach ($this->skillPointAccounts as $skillKey => $skillPoints) { list($skillBaseId, $skillTrefId) = explode(':', $skillKey); $skill = new ilBasicSkill($skillBaseId); $levels = $skill->getLevelData(); $reachedLevelId = null; foreach ($levels as $level) { $threshold = $this->skillLevelThresholdList->getThreshold($skillBaseId, $skillTrefId, $level['id']); if (!$threshold instanceof ilTestSkillLevelThreshold || !$threshold->getThreshold()) { continue; } $reachedLevelId = $level['id']; if ($skillPoints <= $threshold->getThreshold()) { break; } } if ($reachedLevelId) { $this->reachedSkillLevels[] = array('usrId' => $userId, 'sklBaseId' => $skillBaseId, 'sklTrefId' => $skillTrefId, 'sklLevelId' => $reachedLevelId); } } }