diff --git a/main/badge/assign.php b/main/badge/assign.php index fad371f927..f3514bba77 100644 --- a/main/badge/assign.php +++ b/main/badge/assign.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[] = ''; - $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[] = ''; + $template = new Template(get_lang('AddSkill')); $template->assign('content', $form->returnForm()); $template->display_one_col_template(); diff --git a/main/inc/lib/skill.lib.php b/main/inc/lib/skill.lib.php index fe092a2f17..9b9221bc14 100755 --- a/main/inc/lib/skill.lib.php +++ b/main/inc/lib/skill.lib.php @@ -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);