WIP - Improve skill selection see BT#13586

pull/2487/head
jmontoyaa 8 years ago
parent e84e3830b1
commit dd489549ce
  1. 102
      main/badge/assign.php
  2. 62
      main/inc/lib/skill.lib.php

@ -23,36 +23,23 @@ if (empty($userId)) {
SkillManager::isAllow($userId);
$user = api_get_user_entity($userId);
if (!$user) {
api_not_allowed(true);
}
$entityManager = Database::getManager();
$skillManager = new SkillManager();
$skillRepo = $entityManager->getRepository('ChamiloCoreBundle:Skill');
$skillRelSkill = $entityManager->getRepository('ChamiloCoreBundle:SkillRelSkill');
$skillLevelRepo = $entityManager->getRepository('ChamiloSkillBundle:Level');
$skillUserRepo = $entityManager->getRepository('ChamiloCoreBundle:SkillRelUser');
$user = api_get_user_entity($userId);
if (!$user) {
Display::addFlash(
Display::return_message(get_lang('NoUser'), 'error')
);
header('Location: '.api_get_path(WEB_PATH));
exit;
}
$skills = $skillRepo->findBy([
'status' => Skill::STATUS_ENABLED
]);
$url = api_get_path(WEB_CODE_PATH).'badge/assign.php?user='.$userId.'&id=';
$htmlHeadXtra[] = '<script>
$( document ).ready(function() {
$("#skill").on("change", function() {
$(location).attr("href", "'. $url.'"+$(this).val());
});
});
</script>';
$skillsOptions = [];
$acquiredLevel = [];
$formDefaultValues = [];
@ -61,8 +48,16 @@ foreach ($skills as $skill) {
$skillsOptions[$skill->getId()] = $skill->getName();
}
$skillId = isset($_REQUEST['id']) ? intval($_REQUEST['id']) : key($skillsOptions);
$profile = $skillRepo->find($skillId)->getProfile();
$skillIdFromGet = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : 0;
$currentLevel = isset($_REQUEST['current']) ? (int) str_replace('assign_skill_sub_skill_id_', '', $_REQUEST['current']) : 0;
$subSkillList = isset($_REQUEST['sub_skill_list']) ? explode(',', $_REQUEST['sub_skill_list']) : [];
$skillId = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : key($skillsOptions);
$skill = $skillRepo->find($skillId);
$profile = false;
if ($skill) {
$profile = $skill->getProfile();
}
if (!$profile) {
$skillRelSkill = new SkillRelSkill();
@ -102,7 +97,6 @@ if ($profile) {
$profileId = key($profileLevel);
$acquiredLevel[$profileId] = $profileLevel[$profileId];
}
}
$formDefaultValues = ['skill' => $skillId];
@ -111,6 +105,55 @@ $form = new FormValidator('assign_skill');
$form->addHeader(get_lang('AssignSkill'));
$form->addText('user_name', get_lang('UserName'), false);
$form->addSelect('skill', get_lang('Skill'), $skillsOptions, ['id' => 'skill']);
$newSubSkillList = [];
if (!empty($skillIdFromGet)) {
if (empty($subSkillList)) {
$subSkillList[] = $skillIdFromGet;
}
$subSkillList = array_unique($subSkillList);
$oldSkill = $skillRepo->find($skillIdFromGet);
$counter = 0;
foreach ($subSkillList as $subSkillId) {
if ($skillIdFromGet == $subSkillId) {
//continue;
}
if (!empty($currentLevel)) {
if ($counter == $currentLevel) {
break;
}
}
$children = $skillManager->getChildren($subSkillId);
/*$oldSkill = $skillManager->getDirectParents($subSkillId);
$oldSkill = $oldSkill[0];*/
if (isset($subSkillList[$counter-1])) {
$oldSkill = $skillRepo->find($subSkillList[$counter]);
}
$skillsOptions = [$oldSkill->getId() => ' -- '.$oldSkill->getName()];
foreach ($children as $child) {
$skillsOptions[$child['id']] = $child['data']['name'];
}
$form->addSelect('sub_skill_id_'.$counter, get_lang('SubSkill'), $skillsOptions, ['class' => 'sub_skill']);
if (isset($subSkillList[$counter+1])) {
$nextSkill = $skillRepo->find($subSkillList[$counter+1]);
$formDefaultValues['sub_skill_id_'.$counter] = $nextSkill->getId();
}
$newSubSkillList[] = $subSkillId;
$counter++;
}
$subSkillList = $newSubSkillList;
}
var_dump($formDefaultValues);
$subSkillListToString = implode(',', $subSkillList);
$form->addHidden('sub_skill_list', $subSkillListToString);
$form->addHidden('user', $user->getId());
$form->addHidden('id', $skillId);
$form->addRule('skill', get_lang('ThisFieldIsRequired'), 'required');
@ -223,6 +266,19 @@ if (api_is_drh()) {
);
}
$url = api_get_path(WEB_CODE_PATH).'badge/assign.php?user='.$userId.'&id='.$skillIdFromGet;
$htmlHeadXtra[] = '<script>
$( document ).ready(function() {
$("#skill").on("change", function() {
$(location).attr("href", "'. $url.'"+$(this).val());
});
$(".sub_skill").on("change", function() {
$(location).attr("href", "'.$url.'&current="+$(this).attr("id")+"&sub_skill_list='.$subSkillListToString.',"+$(this).val());
});
});
</script>';
$template = new Template(get_lang('AddSkill'));
$template->assign('content', $form->returnForm());
$template->display_one_col_template();

@ -766,12 +766,12 @@ class Skill extends Model
*/
public function getChildren($skill_id, $load_user_data = false)
{
$skill_rel_skill = new SkillRelSkill();
$skillRelSkill = new SkillRelSkill();
if ($load_user_data) {
$user_id = api_get_user_id();
$skills = $skill_rel_skill->getChildren($skill_id, true, $user_id);
$skills = $skillRelSkill->getChildren($skill_id, true, $user_id);
} else {
$skills = $skill_rel_skill->getChildren($skill_id);
$skills = $skillRelSkill->getChildren($skill_id);
}
return $skills;
}
@ -783,8 +783,8 @@ class Skill extends Model
*/
public function getAllChildren($skillId)
{
$skill_rel_skill = new SkillRelSkill();
$children = $skill_rel_skill->getChildren($skillId);
$skillRelSkill = new SkillRelSkill();
$children = $skillRelSkill->getChildren($skillId);
foreach ($children as $child) {
$subChildren = $this->getAllChildren($child['skill_id']);
}
@ -799,10 +799,10 @@ class Skill extends Model
/**
* Gets all parents from from the wanted skill
*/
public function get_parents($skill_id)
public function get_parents($skillId)
{
$skill_rel_skill = new SkillRelSkill();
$skills = $skill_rel_skill->getSkillParents($skill_id, true);
$skillRelSkill = new SkillRelSkill();
$skills = $skillRelSkill->getSkillParents($skillId, true);
foreach ($skills as &$skill) {
$skill['data'] = self::get($skill['skill_id']);
}
@ -811,14 +811,16 @@ class Skill extends Model
/**
* All direct parents
* @param int $skillId
* @return int
*/
public function getDirectParents($skill_id)
public function getDirectParents($skillId)
{
$skill_rel_skill = new SkillRelSkill();
$skills = $skill_rel_skill->getDirectParents($skill_id, true);
$skillRelSkill = new SkillRelSkill();
$skills = $skillRelSkill->getDirectParents($skillId, true);
foreach ($skills as &$skill) {
$skill['data'] = self::get($skill['skill_id']);
$skill_info2 = $skill_rel_skill->getSkillInfo($skill['skill_id']);
$skill_info2 = $skillRelSkill->getSkillInfo($skill['skill_id']);
$skill['data']['parent_id'] = $skill_info2['parent_id'];
}
return $skills;
@ -839,15 +841,15 @@ class Skill extends Model
$params['parent_id'] = array($params['parent_id']);
}
$skill_rel_skill = new SkillRelSkill();
$skill_rel_gradebook = new SkillRelGradebook();
$skillRelSkill = new SkillRelSkill();
$skillRelGradebook = new SkillRelGradebook();
// Saving name, description
$skill_id = $this->save($params);
if ($skill_id) {
//Saving skill_rel_skill (parent_id, relation_type)
foreach ($params['parent_id'] as $parent_id) {
$relation_exists = $skill_rel_skill->relationExists($skill_id, $parent_id);
$relation_exists = $skillRelSkill->relationExists($skill_id, $parent_id);
if (!$relation_exists) {
$attributes = array(
'skill_id' => $skill_id,
@ -855,7 +857,7 @@ class Skill extends Model
'relation_type' => (isset($params['relation_type']) ? $params['relation_type'] : 0),
//'level' => $params['level'],
);
$skill_rel_skill->save($attributes);
$skillRelSkill->save($attributes);
}
}
@ -864,7 +866,7 @@ class Skill extends Model
$attributes = array();
$attributes['gradebook_id'] = $gradebook_id;
$attributes['skill_id'] = $skill_id;
$skill_rel_gradebook->save($attributes);
$skillRelGradebook->save($attributes);
}
}
return $skill_id;
@ -918,16 +920,16 @@ class Skill extends Model
{
/*$params = array('skill_id' => $skill_id);
$skill_rel_skill = new SkillRelSkill();
$skills = $skill_rel_skill->get_all(array('where'=>array('skill_id = ?' =>$skill_id)));
$skillRelSkill = new SkillRelSkill();
$skills = $skillRelSkill->get_all(array('where'=>array('skill_id = ?' =>$skill_id)));
$skill_rel_profile = new SkillRelProfile();
$skill_rel_gradebook = new SkillRelGradebook();
$skillRelGradebook = new SkillRelGradebook();
$skill_rel_user = new SkillRelUser();
$this->delete($skill_id);
$skill_rel_gradebook->delete($params);*/
$skillRelGradebook->delete($params);*/
}
/**
@ -939,8 +941,8 @@ class Skill extends Model
if (!isset($params['parent_id'])) {
$params['parent_id'] = 1;
}
$skill_rel_skill = new SkillRelSkill();
$skill_rel_gradebook = new SkillRelGradebook();
$skillRelSkill = new SkillRelSkill();
$skillRelGradebook = new SkillRelGradebook();
//Saving name, description
$this->update($params);
@ -955,7 +957,7 @@ class Skill extends Model
}
foreach ($params['parent_id'] as $parent_id) {
$relation_exists = $skill_rel_skill->relationExists($skill_id, $parent_id);
$relation_exists = $skillRelSkill->relationExists($skill_id, $parent_id);
if (!$relation_exists) {
$attributes = array(
'skill_id' => $skill_id,
@ -963,11 +965,11 @@ class Skill extends Model
'relation_type' => $params['relation_type'],
//'level' => $params['level'],
);
$skill_rel_skill->updateBySkill($attributes);
$skillRelSkill->updateBySkill($attributes);
}
}
$skill_rel_gradebook->updateGradeBookListBySkill(
$skillRelGradebook->updateGradeBookListBySkill(
$skill_id,
$params['gradebook_id']
);
@ -1369,19 +1371,19 @@ class Skill extends Model
}
/**
* @param int $skill_id
* @param int $skillId
* @return array
*/
public function getCoursesBySkill($skill_id)
public function getCoursesBySkill($skillId)
{
$skill_id = intval($skill_id);
$skillId = intval($skillId);
$sql = "SELECT c.title, c.code
FROM {$this->table_gradebook} g
INNER JOIN {$this->table_skill_rel_gradebook} sg
ON g.id = sg.gradebook_id
INNER JOIN {$this->table_course} c
ON c.code = g.course_code
WHERE sg.skill_id = $skill_id
WHERE sg.skill_id = $skillId
AND (g.session_id IS NULL OR g.session_id = 0)";
$result = Database::query($sql);

Loading…
Cancel
Save