Browse Source

Show only children of root if "skill_levels_names" setting is on

See BT 13586
Julio 7 years ago
parent
commit
84dee178b6
2 changed files with 40 additions and 32 deletions
  1. 25 23
      main/badge/assign.php
  2. 15 9
      main/inc/lib/skill.lib.php

+ 25 - 23
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(),
     );
 }
 

+ 15 - 9
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";