From 84dee178b609abe84ab7bbfd97b66d9634df3d4e Mon Sep 17 00:00:00 2001 From: Julio Date: Mon, 20 Nov 2017 09:43:40 +0100 Subject: [PATCH] Show only children of root if "skill_levels_names" setting is on See BT 13586 --- main/badge/assign.php | 48 ++++++++++++++++++++------------------ main/inc/lib/skill.lib.php | 24 ++++++++++++------- 2 files changed, 40 insertions(+), 32 deletions(-) diff --git a/main/badge/assign.php b/main/badge/assign.php index 6b94718edd..2a34ddc290 100644 --- a/main/badge/assign.php +++ b/main/badge/assign.php @@ -36,18 +36,28 @@ $skillRelSkill = $entityManager->getRepository('ChamiloCoreBundle:SkillRelSkill' $skillLevelRepo = $entityManager->getRepository('ChamiloSkillBundle:Level'); $skillUserRepo = $entityManager->getRepository('ChamiloCoreBundle:SkillRelUser'); -$skills = $skillRepo->findBy([ - 'status' => Skill::STATUS_ENABLED -]); +$levels = api_get_configuration_value('skill_levels_names'); $skillsOptions = []; $acquiredLevel = []; $formDefaultValues = []; -foreach ($skills as $skill) { - $skillsOptions[$skill->getId()] = $skill->getName(); -} +if (empty($levels)) { + $skills = $skillRepo->findBy([ + 'status' => Skill::STATUS_ENABLED, + ]); + /** @var Skill $skill */ + foreach ($skills as $skill) { + $skillsOptions[$skill->getId()] = $skill->getName(); + } +} else { + // Get only root elements + $skills = $skillManager->getChildren(1); + foreach ($skills as $skill) { + $skillsOptions[$skill['data']['id']] = $skill['data']['name']; + } +} $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']) : []; @@ -62,7 +72,6 @@ if (!empty($currentLevel)) { } } - $skillId = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : key($skillsOptions); $skill = $skillRepo->find($skillId); $profile = false; @@ -71,7 +80,6 @@ if ($skill) { } if (!empty($subSkillList)) { - // $skillId = end($subSkillList); $skillFromLastSkill = $skillRepo->find(end($subSkillList)); if ($skillFromLastSkill) { $profile = $skillFromLastSkill->getProfile(); @@ -82,7 +90,6 @@ if (!$profile) { $skillRelSkill = new SkillRelSkill(); $parents = $skillRelSkill->getSkillParents($skillId); krsort($parents); - foreach ($parents as $parent) { $skillParentId = $parent['skill_id']; $profile = $skillRepo->find($skillParentId)->getProfile(); @@ -101,7 +108,7 @@ if (!$profile) { if ($profile) { $profileId = $profile->getId(); $levels = $skillLevelRepo->findBy([ - 'profile' => $profileId + 'profile' => $profileId, ]); $profileLevels = []; foreach ($levels as $level) { @@ -116,9 +123,6 @@ if ($profile) { } } - - - $formDefaultValues = ['skill' => $skillId]; $newSubSkillList = []; $disableList = []; @@ -129,8 +133,6 @@ $form = new FormValidator('assign_skill', 'POST', $currentUrl); $form->addHeader(get_lang('AssignSkill')); $form->addText('user_name', get_lang('UserName'), false); -$levels = api_get_configuration_value('skill_levels_names'); - $levelName = get_lang('Skill'); if (!empty($levels)) { if (isset($levels['levels'][1])) { @@ -178,7 +180,7 @@ if (!empty($skillIdFromGet)) { $skillsOptions, [ 'id' => 'sub_skill_id_'.($counter+1), - 'class' => 'sub_skill' + 'class' => 'sub_skill', ] ); @@ -287,35 +289,35 @@ $form->freeze(['user_name']); if (api_is_drh()) { $interbreadcrumb[] = array( 'url' => api_get_path(WEB_CODE_PATH).'mySpace/index.php', - "name" => get_lang('MySpace') + "name" => get_lang('MySpace'), ); if ($user->getStatus() == COURSEMANAGER) { $interbreadcrumb[] = array( "url" => api_get_path(WEB_CODE_PATH).'mySpace/teachers.php', - 'name' => get_lang('Teachers') + 'name' => get_lang('Teachers'), ); } else { $interbreadcrumb[] = array( "url" => api_get_path(WEB_CODE_PATH).'mySpace/student.php', - 'name' => get_lang('MyStudents') + 'name' => get_lang('MyStudents'), ); } $interbreadcrumb[] = array( 'url' => api_get_path(WEB_CODE_PATH).'mySpace/myStudents.php?student='.$userId, - 'name' => $user->getCompleteName() + 'name' => $user->getCompleteName(), ); } else { $interbreadcrumb[] = array( 'url' => api_get_path(WEB_CODE_PATH).'admin/index.php', - 'name' => get_lang('PlatformAdmin') + 'name' => get_lang('PlatformAdmin'), ); $interbreadcrumb[] = array( 'url' => api_get_path(WEB_CODE_PATH).'admin/user_list.php', - 'name' => get_lang('UserList') + 'name' => get_lang('UserList'), ); $interbreadcrumb[] = array( 'url' => api_get_path(WEB_CODE_PATH).'admin/user_information.php?user_id='.$userId, - 'name' => $user->getCompleteName() + 'name' => $user->getCompleteName(), ); } diff --git a/main/inc/lib/skill.lib.php b/main/inc/lib/skill.lib.php index 9b9221bc14..5e1afab64a 100755 --- a/main/inc/lib/skill.lib.php +++ b/main/inc/lib/skill.lib.php @@ -170,6 +170,7 @@ class SkillRelSkill extends Model public function __construct() { $this->table = Database::get_main_table(TABLE_MAIN_SKILL_REL_SKILL); + $this->tableSkill = Database::get_main_table(TABLE_MAIN_SKILL); } /** @@ -250,18 +251,23 @@ class SkillRelSkill extends Model public function getChildren( $skill_id, $load_user_data = false, - $user_id = false + $user_id = false, + $order = '' ) { - $skills = $this->find( - 'all', - array('where' => array('parent_id = ? ' => $skill_id)) - ); + $sql = 'SELECT parent.* FROM '.$this->tableSkill.' skill + INNER JOIN '.$this->table.' parent + ON parent.id = skill.id + WHERE parent_id = '.$skill_id.' + ORDER BY skill.name ASC'; + $result = Database::query($sql); + $skills = Database::store_result($result, 'ASSOC'); + $skill_obj = new Skill(); $skill_rel_user = new SkillRelUser(); if ($load_user_data) { $passed_skills = $skill_rel_user->getUserSkills($user_id); - $done_skills = array(); + $done_skills = array(); foreach ($passed_skills as $done_skill) { $done_skills[] = $done_skill['skill_id']; } @@ -652,7 +658,7 @@ class Skill extends Model $skill_list = array_map('intval', $skill_list); $skill_list = implode("', '", $skill_list); - $sql = "SELECT * FROM {$this->table} + $sql = "SELECT * FROM {$this->table} WHERE id IN ('$skill_list') "; $result = Database::query($sql); @@ -1566,9 +1572,9 @@ class Skill extends Model $sql = "SELECT s.id, s.name FROM {$this->table_gradebook} g - INNER JOIN {$this->table_skill_rel_gradebook} sg + INNER JOIN {$this->table_skill_rel_gradebook} sg ON g.id = sg.gradebook_id - INNER JOIN {$this->sessionTable} s + INNER JOIN {$this->sessionTable} s ON g.session_id = s.id WHERE sg.skill_id = $skillId AND g.session_id > 0";