Переглянути джерело

Adding skills ranking page + other bugfixes in the admin skill wheel see #1791

Julio Montoya 12 роки тому
батько
коміт
e9badfb14a

+ 45 - 7
main/inc/ajax/model.ajax.php

@@ -20,8 +20,9 @@ $sord   = $_REQUEST['sord'];         //asc or desc
 if (!in_array($sord, array('asc','desc'))) {
     $sord = 'desc'; 
 }
+	
 
-if (!in_array($action, array('get_exercise_results', 'get_work_user_list', 'get_timelines'))) {
+if (!in_array($action, array('get_exercise_results', 'get_work_user_list', 'get_timelines', 'get_user_skill_ranking'))) {
 	api_protect_admin_script(true);
 }
 
@@ -97,6 +98,10 @@ if (!$sidx) $sidx = 1;
 //@todo rework this
 
 switch ($action) {
+	case 'get_user_skill_ranking':
+    	$skill = new Skill();
+	    $count = $skill->get_user_list_skill_ranking_count();
+	    break;
     case 'get_work_user_list':
         require_once api_get_path(SYS_CODE_PATH).'work/work.lib.php';
         $work_id = $_REQUEST['work_id'];
@@ -179,10 +184,32 @@ $is_allowedToEdit = api_is_allowed_to_edit(null,true) || api_is_allowed_to_edit(
 //5. Querying the DB for the elements
 $columns = array();
 
-switch ($action) {    
+switch ($action) { 
+	case 'get_user_skill_ranking':	
+        $columns = array('photo', 'firstname', 'lastname', 'skills_acquired', 'currently_learning', 'rank');
+	    $result = $skill->get_user_list_skill_ranking($start, $limit, $sidx, $sord, $where_condition);
+        $result = msort($result, 'skills_acquired', 'asc');
+	    
+	    if (!empty($result)) {
+    	    $counter = 1;
+	        foreach ($result as &$item) {
+                $user_info = api_get_user_info($item['user_id']);
+                $personal_course_list = UserManager::get_personal_session_course_list($item['user_id']);
+                $count_skill_by_course = array();
+                foreach ($personal_course_list  as $course_item) {
+                    $$count_skill_by_course[$course_item['code']]= $skill->get_count_skills_by_course($course_item['code']);                
+                }                
+	            $item['photo'] = Display::img($user_info['avatar_small']);
+	            $item['currently_learning'] = !empty($count_skill_by_course) ? array_sum($count_skill_by_course) : 0;
+                $item['rank'] = $counter;
+                $counter++;
+	        }
+	    }
+
+    	break;
     case 'get_work_user_list':        
         if (isset($_GET['type'])  && $_GET['type'] == 'simple') {
-            $columns = array('type', 'firstname', 'lastname',  'username', 'title', 'qualification', 'sent_date', 'qualificator_id', 'actions');	
+            $columns = array('type', 'firstname', 'lastname',  'username', 'title', 'qualification', 'sent_date', 'qualificator_id', 'actions');
         } else {
             $columns = array('type', 'firstname', 'lastname',  'username', 'title', 'sent_date', 'actions');	
         }
@@ -351,13 +378,23 @@ switch ($action) {
 }
 //var_dump($result);
 
-$allowed_actions = array('get_careers', 'get_promotions', 'get_usergroups', 'get_gradebooks', 
-                         'get_sessions', 'get_exercise_results', 'get_work_user_list', 'get_timelines', 'get_grade_models', 'get_event_email_template');
+$allowed_actions = array('get_careers', 
+                         'get_promotions', 
+                         'get_usergroups', 
+                         'get_gradebooks', 
+                         'get_sessions', 
+                         'get_exercise_results', 
+                         'get_work_user_list', 
+                         'get_timelines', 
+                         'get_grade_models', 
+                         'get_event_email_template',
+                         'get_user_skill_ranking');
+                         	
 //5. Creating an obj to return a json
 if (in_array($action, $allowed_actions)) {
     $response           = new stdClass();           
     $response->page     = $page; 
-    $response->total    = $total_pages; 
+    $response->total    = $total_pages;
     $response->records  = $count; 
     $i=0;
     if (!empty($result)) {
@@ -377,6 +414,7 @@ if (in_array($action, $allowed_actions)) {
             $i++; 
         }
     }    
+
     echo json_encode($response);
 }
-exit;
+exit;

+ 89 - 68
main/inc/ajax/skill.ajax.php

@@ -23,6 +23,8 @@ switch ($action) {
             $skill_id = $skill->add($_REQUEST);    
         }        
         echo $skill_id;
+    case 'delete_skill':
+        echo $skill->delete($_REQUEST['skill_id']);
         break;      
     case 'find_skills':        
         $skills = $skill->find('all', array('where' => array('name LIKE %?% '=>$_REQUEST['tag'])));
@@ -34,64 +36,7 @@ switch ($action) {
         }            
         echo json_encode($return_skills);
         break;
-    case 'profile_matches':        
-        $skill_rel_user  = new SkillRelUser();
-        $skills = $_REQUEST['skill_id'];  
-        
-        $total_skills_to_search = $skills;
-                
-        $users  = $skill_rel_user->get_user_by_skills($skills);
-        
-        $user_list = array();
-        
-        $count_skills = count($skills);
-        
-        if (!empty($users)) {
-            foreach ($users as $user) {            
-                $user_info = api_get_user_info($user['user_id']);
-                $user_list[$user['user_id']]['user'] = $user_info;
-                $my_user_skills = $skill_rel_user->get_user_skills($user['user_id']);
-                $user_skills = array();
-                $found_counts = 0 ;
-                foreach($my_user_skills as $my_skill) {
-
-                    $found = false;
-                    if (in_array($my_skill['skill_id'], $skills)) {
-                        $found = true;
-                        $found_counts++;
-                    }
-                    $user_skills[] = array('skill_id' => $my_skill['skill_id'], 'found' => $found);
-                    $total_skills_to_search[$my_skill['skill_id']] = $my_skill['skill_id']; 
-                }
-                $user_list[$user['user_id']]['skills'] = $user_skills;
-                $user_list[$user['user_id']]['total_found_skills'] = $found_counts;
-            }
-            $ordered_user_list = array();
-            foreach ($user_list as $user_id => $user_data) {
-                $ordered_user_list[$user_data['total_found_skills']][] = $user_data;
-            }
-            if (!empty($ordered_user_list)) {
-                asort($ordered_user_list);
-            }
-        }
-        
-        Display::display_no_header();        
-        Display::$global_template->assign('order_user_list', $ordered_user_list);
-        Display::$global_template->assign('total_search_skills', $count_skills);
-        
-        $skill_list = array();
-        
-        if (!empty($total_skills_to_search)) {
-            $total_skills_to_search = $skill->get_skills_info($total_skills_to_search);
-
-            foreach ($total_skills_to_search as $skill_info) {                        
-                $skill_list[$skill_info['id']] = $skill_info;        
-            }
-        }
-
-        Display::$global_template->assign('skill_list', $skill_list);
-        echo Display::$global_template->fetch('default/skill/profile.tpl');        
-        break;
+    
     case 'get_gradebooks':        
         $gradebooks = $gradebook_list = $gradebook->get_all();
         
@@ -145,7 +90,7 @@ switch ($action) {
         Display::$global_template->assign('profiles', $profiles);
         echo Display::$global_template->fetch('default/skill/profile_item.tpl');            
         
-        break;
+        break;    
     case 'get_skills':
         $load_user_data = isset($_REQUEST['load_user_data']) ? $_REQUEST['load_user_data'] : null;
         //$parent_id = intval($_REQUEST['parent_id']);
@@ -157,7 +102,14 @@ switch ($action) {
         $id = isset($_REQUEST['id']) ? $_REQUEST['id'] : null;
         $skill_info = $skill->get_skill_info($id);                    
         echo json_encode($skill_info);
-        break;     
+        break;
+    case 'get_skills_tree_json':        
+        $user_id    = isset($_REQUEST['load_user']) && $_REQUEST['load_user'] == 1 ? api_get_user_id() : 0;
+        $skill_id   = isset($_REQUEST['skill_id']) ? $_REQUEST['skill_id'] : 0;
+        $depth      = isset($_REQUEST['main_depth']) ? $_REQUEST['main_depth'] : 2;        
+        $all = $skill->get_skills_tree_json($user_id, $skill_id, false, $depth);
+        echo $all;
+        break;             
     case 'get_gradebook_info':
         $id = isset($_REQUEST['id']) ? $_REQUEST['id'] : null;
         $info = $gradebook->get($id);                    
@@ -200,7 +152,83 @@ switch ($action) {
                                                 );
         }
         echo json_encode($return);        
-        break;        
+        break;
+    case 'profile_matches':        
+        $skill_rel_user  = new SkillRelUser();
+        $skills = $_REQUEST['skill_id'];  
+
+        
+        $total_skills_to_search = $skills;
+                
+        $users  = $skill_rel_user->get_user_by_skills($skills);
+        
+        $user_list = array();
+        
+        $count_skills = count($skills);
+
+        
+        if (!empty($users)) {
+            foreach ($users as $user) {            
+                $user_info = api_get_user_info($user['user_id']);
+                $user_list[$user['user_id']]['user'] = $user_info;
+                $my_user_skills = $skill_rel_user->get_user_skills($user['user_id']);
+                
+                $user_skill_list = array();
+                foreach ($my_user_skills as $skill_item) {
+                    $user_skill_list[] = $skill_item['skill_id'];
+                }
+
+                $user_skills = array();
+                $found_counts = 0;
+                
+                foreach ($skills as $skill_id) {
+                    $found = false;
+                    if (in_array($skill_id, $user_skill_list)) {
+                        $found = true;
+                        $found_counts++;
+                        $user_skills[$skill_id] = array('skill_id' => $skill_id, 'found' => $found);                        
+                    }
+                }
+
+
+                
+                foreach ($my_user_skills as $my_skill) {                    
+                    if (!isset($user_skills[$my_skill['skill_id']])) {
+                        $user_skills[$my_skill['skill_id']] = array('skill_id' => $my_skill['skill_id'], 'found' => false);
+                    }
+                    $total_skills_to_search[$my_skill['skill_id']] = $my_skill['skill_id']; 
+                }
+                $user_list[$user['user_id']]['skills'] = $user_skills;
+                $user_list[$user['user_id']]['total_found_skills'] = $found_counts;
+            }
+            
+            $ordered_user_list = array();
+            foreach ($user_list as $user_id => $user_data) {
+                $ordered_user_list[$user_data['total_found_skills']][] = $user_data;
+            }
+
+            if (!empty($ordered_user_list)) {
+                arsort($ordered_user_list);
+            }
+        }
+        
+        Display::display_no_header();        
+        Display::$global_template->assign('order_user_list', $ordered_user_list);
+        Display::$global_template->assign('total_search_skills', $count_skills);
+        
+        $skill_list = array();
+
+        if (!empty($total_skills_to_search)) {
+            $total_skills_to_search = $skill->get_skills_info($total_skills_to_search);
+
+            foreach ($total_skills_to_search as $skill_info) {                        
+                $skill_list[$skill_info['id']] = $skill_info;        
+            }
+        }
+
+        Display::$global_template->assign('skill_list', $skill_list);
+        echo Display::$global_template->fetch('default/skill/profile.tpl');        
+        break;                
     case 'delete_gradebook_from_skill':
     case 'remove_skill':
         if (!empty($_REQUEST['skill_id']) && !empty($_REQUEST['gradebook_id'])) {            
@@ -235,13 +263,6 @@ switch ($action) {
             echo 0;
         }
         break;   
-    case 'get_skills_tree_json':        
-        $user_id    = isset($_REQUEST['load_user']) && $_REQUEST['load_user'] == 1 ? api_get_user_id() : 0;
-        $skill_id   = isset($_REQUEST['skill_id']) ? $_REQUEST['skill_id'] : 0;
-        $depth      = isset($_REQUEST['main_depth']) ? $_REQUEST['main_depth'] : 2;        
-        $all = $skill->get_skills_tree_json($user_id, $skill_id, false, $depth);
-        echo $all;
-        break;
     default:
         echo '';
 }

+ 11 - 9
main/inc/lib/gradebook.lib.php

@@ -10,7 +10,17 @@
  */
    
 class Gradebook extends Model {    
+
+    public $columns = array('id', 'name', 'description', 'course_code', 'parent_id', 'grade_model_id', 'session_id', 'weight', 'user_id');
+
+    
+    public function __construct() {
+        $this->table                        = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CATEGORY);
+        $this->table_skill                  = Database::get_main_table(TABLE_MAIN_SKILL);
+        $this->table_skill_rel_gradebook    = Database::get_main_table(TABLE_MAIN_SKILL_REL_GRADEBOOK); 
+    }
     
+        
     /**
      * Returns true if the gradebook is active and visible in a course, false
      * otherwise.
@@ -39,14 +49,6 @@ class Gradebook extends Model {
         return $item['visibility'] == '1';
     }
     
-    var $columns = array('id', 'name', 'description', 'course_code', 'parent_id', 'grade_model_id', 'session_id', 'weight', 'user_id');
-    
-    public function __construct() {
-        $this->table                        = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CATEGORY);
-        $this->table_skill                  = Database::get_main_table(TABLE_MAIN_SKILL);
-        $this->table_skill_rel_gradebook    = Database::get_main_table(TABLE_MAIN_SKILL_REL_GRADEBOOK); 
-    }
-    
     public function get_all($options = array()) {
         $gradebooks = parent::get_all($options);
         foreach($gradebooks as &$gradebook) {
@@ -159,4 +161,4 @@ class Gradebook extends Model {
         // action links
         echo Display::grid_html('gradebooks');  
     }
-}
+}

+ 108 - 18
main/inc/lib/skill.lib.php

@@ -278,6 +278,7 @@ class SkillRelUser extends Model {
 class Skill extends Model {
     var $columns  = array('id', 'name','description', 'access_url_id', 'short_code');
     var $required = array('name');
+    
     /** Array of colours by depth, for the coffee wheel. Each depth has 4 col */
     var $colours = array(
       0 => array('#f9f0ab', '#ecc099', '#e098b0', '#ebe378'),
@@ -295,6 +296,7 @@ class Skill extends Model {
 
     public function __construct() {
         $this->table                      = Database::get_main_table(TABLE_MAIN_SKILL);
+        $this->table_user                      = Database::get_main_table(TABLE_MAIN_USER);
         $this->table_skill_rel_gradebook  = Database::get_main_table(TABLE_MAIN_SKILL_REL_GRADEBOOK);
         $this->table_skill_rel_user       = Database::get_main_table(TABLE_MAIN_SKILL_REL_USER);
         $this->table_course               = Database::get_main_table(TABLE_MAIN_COURSE);
@@ -447,6 +449,11 @@ class Skill extends Model {
         if (!isset($params['parent_id'])) {
             $params['parent_id'] = 1;
         }
+        
+        if (!is_array($params['parent_id'])) {
+            $params['parent_id'] = array($params['parent_id']);
+        }
+        
         $skill_rel_skill     = new SkillRelSkill();
         $skill_rel_gradebook = new SkillRelGradebook();
 
@@ -455,13 +462,19 @@ class Skill extends Model {
         $skill_id = $this->save($params);
         if ($skill_id) {
             //Saving skill_rel_skill (parent_id, relation_type)
-            $attributes = array(
-                            'skill_id'      => $skill_id,
-                            'parent_id'     => $params['parent_id'],
-                            'relation_type' => $params['relation_type'],
-                            //'level'         => $params['level'],
-            );
-            $skill_rel_skill->save($attributes);
+            
+            foreach ($params['parent_id'] as $parent_id) {   
+                $relation_exists = $skill_rel_skill->relation_exists($skill_id, $parent_id);                
+                if (!$relation_exists) {
+                    $attributes = array(
+                                    'skill_id'      => $skill_id,
+                                    'parent_id'     => $parent_id,
+                                    'relation_type' => $params['relation_type'],
+                                    //'level'         => $params['level'],
+                    );
+                    $skill_rel_skill->save($attributes);
+                }
+            }   
 
             if (!empty($params['gradebook_id'])) {
                 foreach ($params['gradebook_id'] as $gradebook_id) {
@@ -475,6 +488,23 @@ class Skill extends Model {
         }
         return null;
     }
+    
+    public function delete($skill_id) {
+        /*$params = array('skill_id' => $skill_id);
+        
+        $skill_rel_skill     = new SkillRelSkill();
+        $skills = $skill_rel_skill->get_all(array('where'=>array('skill_id = ?' =>$skill_id)));
+        
+        $skill_rel_profile     = new SkillRelProfile();
+        $skill_rel_gradebook = new SkillRelGradebook();
+        $skill_rel_user     = new SkillRelUser();
+        
+        $this->delete($skill_id);
+        
+        $skill_rel_gradebook->delete($params);*/
+        
+    
+    }
 
     public function edit($params) {        
         if (!isset($params['parent_id'])) {
@@ -577,7 +607,7 @@ class Skill extends Model {
             }
         }
         return $clean_skill;
-    }
+    }    
 
     public function get_skills_tree($user_id = null, $skill_id = null, $return_flat_array = false, $add_root = false) {
         if (isset($user_id) && !empty($user_id)) {
@@ -614,19 +644,25 @@ class Skill extends Model {
         if (!empty($skills)) {
             foreach ($skills as &$skill) {
                 
-                if (!empty($skill_id)) {
-                    if ($skill['id'] == $skill_id) {
-                        $skill['parent_id'] = 'root';                    
-                    }
-                } else {
+                if (empty($skill_id)) {
                     if ($skill['parent_id'] == 0) {
                         $skill['parent_id'] = 'root';
                     }
+                } else {
+                    if ($skill['id'] == $skill_id) {
+                        $skill['parent_id'] = 'root';                    
+                    }
                 }
                 
                 //In order to paint all members of a family with the same color
-                if ($skill['parent_id'] == 1) {
-                    $family[$skill['id']] = $this->get_all_children($skill['id']);        
+                if (empty($skill_id)) {
+                    if ($skill['parent_id'] == 1) {
+                        $family[$skill['id']] = $this->get_all_children($skill['id']);        
+                    }
+                } else {
+                    if ($skill['parent_id'] == $skill_id) {
+                        $family[$skill['id']] = $this->get_all_children($skill['id']);        
+                    }
                 }
                 
                 // because except main keys (id, name, children) others keys are not saved while in the space tree
@@ -663,13 +699,13 @@ class Skill extends Model {
                 $new_family_array[$main_family_id] = $family_id;                
                 $family_id++;
             }  
-                        
+
             if (empty($original_skill)) {
                 $refs['root']['children'][0] = $skills[1];
+                $skills[$skill_id]['data']['family_id'] = 1;
                 $refs['root']['children'][0]['children'][0] = $skills[$skill_id];
                 $flat_array[$skill_id] =  $skills[$skill_id];                
-            } else {
-            
+            } else {            
 
                 
                 // Moving node to the children index of their parents
@@ -749,4 +785,58 @@ class Skill extends Model {
         }
         return null;
     }
+    
+    function get_user_skill_ranking($user_id) {
+        $user_id = intval($user_id);        
+        $sql = "SELECT count(skill_id) count FROM {$this->table} s INNER JOIN {$this->table_skill_rel_user} su ON (s.id = su.skill_id)
+                WHERE user_id = $user_id";
+        $result = Database::query($sql);        
+        if (Database::num_rows($result)) {
+            $result = Database::fetch_row($result);
+            return $result[0];
+        }
+        return false;        
+    }
+    
+    function get_user_list_skill_ranking($start, $limit, $sidx, $sord, $where_condition) {
+        $start = intval($start);
+        $limit = intval($limit);
+        
+        $sql = "SELECT u.user_id, firstname, lastname, count(username) skills_acquired
+                    FROM {$this->table} s INNER JOIN {$this->table_skill_rel_user} su ON (s.id = su.skill_id)
+                    INNER JOIN {$this->table_user} u ON u.user_id = su.user_id
+                    WHERE 1=1 $where_condition
+                    GROUP BY username
+                    ORDER BY $sidx $sord 
+                    LIMIT  $start , $limit ";
+                    
+        $result = Database::query($sql);        
+        if (Database::num_rows($result)) {
+            return Database::store_result($result, 'ASSOC');
+        }
+        return array();
+
+    }
+    
+    function get_user_list_skill_ranking_count() {
+        $sql = "SELECT count(skill_id) count FROM {$this->table} s INNER JOIN {$this->table_skill_rel_user} su ON (s.id = su.skill_id)";
+        $result = Database::query($sql);
+        if (Database::num_rows($result)) {
+            $result = Database::fetch_row($result);
+            return $result[0];
+        }
+        return 0;
+    }
+    
+    function get_count_skills_by_course($course_code) {
+        $sql = "SELECT count(skill_id) as count FROM {$this->table_gradebook} g INNER JOIN {$this->table_skill_rel_gradebook} sg ON g.id = sg.gradebook_id
+                WHERE course_code = '$course_code'";
+        $result = Database::query($sql);
+        if (Database::num_rows($result)) {
+            $result = Database::fetch_row($result);
+            return $result[0];
+        }
+        return 0;
+        
+    }
 }

+ 1 - 102
main/template/default/skill/profile.tpl

@@ -1,104 +1,3 @@
-<script>
-$(document).ready( function() {     
-    
-    /*$("#skills").fcbkcomplete({
-        json_url: "{{url}}?a=find_skills",
-        cache: false,
-        filter_case: false,
-        filter_hide: true,
-        complete_text:"{{'StartToType'|get_lang}}",
-        firstselected: true,
-        //onremove: "testme",
-        onselect:"check_skills",
-        filter_selected: true,
-        newel: true
-    });*/
-    
-    
-    //Open dialog
-    /*$("#dialog-form").dialog({
-        autoOpen: false,
-        modal   : true, 
-        width   : 550, 
-        height  : 350,
-    });
-    
-    var name = $( "#name" ),
-    description = $( "#description" ),  
-    allFields = $( [] ).add( name ).add( description ), tips = $(".validateTips");    
-        
-    
-    $("#dialog-form").dialog({              
-        buttons: {
-            "Add" : function() {                
-                var bValid = true;
-                bValid = bValid && checkLength( name, "name", 1, 255 );
-                var params = $("#save_profile_form").serialize();          
-                      
-                $.ajax({
-                    url: '{{url}}?a=save_profile&'+params,
-                    success:function(data) {    
-                        $("#dialog-form").dialog("close");
-                        alert("{{"Saved"|get_lang}}");
-                    }                           
-                });
-            },            
-        },              
-        close: function() {     
-            $("#name").attr('value', '');
-            $("#description").attr('value', '');                
-        }
-    });*/
-
-    $("#add_profile").click(function() {
-        $("#name").attr('value', '');
-        $("#description").attr('value', '');            
-        $("#dialog-form").dialog("open");
-    });
-});
-
-function check_skills() {
-    //selecting only selected users
-    $("#skills option:selected").each(function() {
-        var skill_id = $(this).val();        
-        if (skill_id != "" ) {            
-            $.ajax({ 
-                url: "{{url}}?a=skill_exists", 
-                data: "skill_id="+skill_id,
-                success: function(return_value) {                    
-                if (return_value == 0 ) {
-                        alert("{{'SkillDoesNotExist'|get_lang}}");                                                
-                        //Deleting select option tag
-                        $("#skills option[value="+skill_id+"]").remove();                        
-                        //Deleting holder
-                        $(".holder li").each(function () {
-                            if ($(this).attr("rel") == skill_id) {
-                                $(this).remove();
-                            }
-                        });                        
-                    }                    
-                },            
-            });                
-        }        
-    });
-}
-
-
-function checkLength( o, n, min, max ) {
-    if ( o.val().length > max || o.val().length < min ) {
-        o.addClass( "ui-state-error" );
-        updateTips( "Length of " + n + " must be between " +
-            min + " and " + max + "." );
-        return false;
-    } else {
-        return true;
-    }
-}    
-</script>
-{{ form }}
-
-
-
 {% if search_skill_list is not null %}    
     <div class="skills-skills">
         <h3>{{"Skills"|get_lang}}</h3>
@@ -137,7 +36,7 @@ function checkLength( o, n, min, max ) {
                 {% if count == total_search_skills %}
                     {{ "CompleteMatch"|get_lang }}
                 {% else %}
-                    {% if count == 1 %}
+                    {% if (total_search_skills - count) == 1 %}
                         {{ "MissingOneStepToMatch"|get_lang }}</h2>
                     {% else %}
                         {{ "MissingXStepsToMatch"|get_lang | format(total_search_skills - count)}}                        

+ 94 - 16
main/template/default/skill/skill_wheel.tpl

@@ -78,7 +78,8 @@ function check_skills_sidebar() {
                             skill_info = get_skill_info(skill_id);                        
                             li = fill_skill_search_li(skill_id, skill_info.name);
                             $("#skill_holder").append(li); 
-                        }
+                        }                        
+
                     }
                 },            
             });                
@@ -87,6 +88,7 @@ function check_skills_sidebar() {
 }
 
 function fill_skill_search_li(skill_id, skill_name, checked) {
+
     checked_condition = '';
     if (checked == 1) {
         checked_condition = 'checked=checked';
@@ -235,10 +237,17 @@ function submit_profile_search_form() {
 
 function add_skill_in_profile_list(skill_id, skill_name) {
     if ($('#profile_match_item_'+skill_id).length == 0 ) {
+        
         $('#profile_search').append('<li class="bit-box" id="profile_match_item_'+skill_id+'">'+skill_name+'  <a rel="'+skill_id+'" class="closebutton" href="#"></a> </li>');        
     } else {            
         $('#profile_match_item_'+skill_id).remove();
     }
+    //Hiding showing the save this search
+    if ($('#profile_search li').length == 0) {
+        $('#profile-options-container').hide();    
+    } else {
+        $('#profile-options-container').show();
+    }
 }
 
 $(document).ready(function() {
@@ -258,6 +267,17 @@ $(document).ready(function() {
         load_nodes(skill_id, main_depth);
     });
     
+     /* URL link when searching skills */
+    $("#skill_search").on("click", "a.load_root", function() {
+        skill_id = $(this).attr('rel');
+        skill_to_load_from_get = 0;
+        load_nodes(skill_id, main_depth);
+    });
+    
+    /*$("#skill_search").on("click", "a#clear_selection", function() {
+        
+    });*/
+    
     
     /* Profile matcher */
             
@@ -289,7 +309,9 @@ $(document).ready(function() {
         $.ajax({
            url: '{{ url }}&a=get_skills_by_profile&profile_id='+profile_id,
            success:function(json) {
-               skill_list = jQuery.parseJSON(json);               
+               skill_list = jQuery.parseJSON(json); 
+               
+               $('#profile_search').empty();
                $('#skill_holder').empty();               
                jQuery.each(skill_list, function(index, skill_id) {                    
                     skill_info = get_skill_info(skill_id);                        
@@ -630,7 +652,7 @@ $(document).ready(function() {
                 //alert('Middle mouse button pressed');
                 break;                        
             case 3:                        
-                open_popup(d);                        
+                open_popup(d.id);                        
                 //alert('Right mouse button pressed');
                 break;
             default:
@@ -682,7 +704,7 @@ $(document).ready(function() {
         });
     }
     
-    function open_popup(d) {
+    function open_popup(skill_id, parent_id) {
         //Cleaning selected        
         $("#gradebook_id").find('option').remove();        
         $("#parent_id").find('option').remove();
@@ -690,7 +712,15 @@ $(document).ready(function() {
         $("#gradebook_holder").find('li').remove();
         $("#skill_edit_holder").find('li').remove();
                 
-        var skill = get_skill_info(d.id);       
+        var skill = false;
+        if (skill_id) {
+            skill = get_skill_info(skill_id);
+        }        
+        
+        var parent = false;
+        if (parent_id) {
+            parent = get_skill_info(parent_id);
+        }
         
         if (skill) {
             var parent_info = get_skill_info(skill.extra.parent_id);
@@ -717,19 +747,61 @@ $(document).ready(function() {
                          var params = $("#add_item").find(':input').serialize();
                          add_skill(params);                     
                       },                                    
-                      "{{ "Delete"|get_lang }}" : function() {
+                      /*"{{ "Delete"|get_lang }}" : function() {
+                      },*/
+                      "{{ "CreateChildSkill"|get_lang }}" : function() {                          
+                          open_popup(0, skill.id);
+
                       },
                       "{{ "AddSkillToProfileSearch"|get_lang }}" : function() {                          
                           add_skill_in_profile_list(skill.id, skill.name);
                       }
                 },
                 close: function() {     
-                    $("#name").attr('value', '');
-                    $("#description").attr('value', '');                
+                    $("#name").attr('value','');
+                    $("#description").attr('value', '');
+                    //Redirect to the main root
+                    load_nodes(0, main_depth);
+                                 
                 }
             });
+            
             $("#dialog-form").dialog("open");            
-        }        
+        }  
+        
+        if (parent) {
+            $("#id").attr('value','');
+            $("#name").attr('value', '');
+            $("#short_code").attr('value', '');
+            $("#description").attr('value', '');
+            
+            //Filling parent_id                        
+            $("#parent_id").append('<option class="selected" value="'+parent.id+'" selected="selected" >');            
+            
+            $("#skill_edit_holder").append('<li class="bit-box">'+parent.name+'</li>');
+            
+            //Filling the gradebook_id
+            jQuery.each(parent.gradebooks, function(index, data) {                    
+                $("#gradebook_id").append('<option class="selected" value="'+data.id+'" selected="selected" >');
+                $("#gradebook_holder").append('<li id="gradebook_item_'+data.id+'" class="bit-box">'+data.name+' <a rel="'+data.id+'" class="closebutton" href="#"></a> </li>');    
+            });            
+            
+            $("#dialog-form").dialog({
+                buttons: {
+                     "{{ "Save"|get_lang }}" : function() {
+                         var params = $("#add_item").find(':input').serialize();
+                         add_skill(params);                     
+                      }
+           
+                },
+                close: function() {     
+                    $("#name").attr('value', '');
+                    $("#description").attr('value', '');
+ 	                   load_nodes(0, main_depth);              
+                }
+            });
+            $("#dialog-form").dialog("open");        
+        }
     }
     
     var colors1 = $.xcolor.analogous('#da0'); //8 colors
@@ -947,9 +1019,11 @@ $(document).ready(function() {
                     <select id="skill_id" name="skill_id" />
                     </select>
                     <br /><br />
-                    
+                    <div class="btn-group">
+                        <a class="btn load_root" rel="1" href="#">{{ "Root"|get_lang }}</a>
+                        <!-- <a id="clear_selection" class="btn">{{ "Clear"|get_lang }}</a> -->	
+                    </div>
                     <ul id="skill_holder" class="holder holder_simple">
-                        <li><a class="load_wheel" rel="1" href="#">Root</a></li>
                     </ul>
                 </form>
                 
@@ -966,15 +1040,19 @@ $(document).ready(function() {
                     <input class="btn" type="submit" value="{{ "SearchProfileMatches"|get_lang }}">
                 </form>
                 
+                <div id="profile-options-container" style="display:none">
                 
-                {{ 'IsThisWhatYouWereLookingFor'|get_lang }}
-                <form id="save_profile_form_button" class="form-search">
-                    <input class="btn" type="submit" value="{{ "SaveThisSearch"|get_lang }}">
-                </form>
-               
+                    {{ 'IsThisWhatYouWereLookingFor'|get_lang }}
+                    <form id="save_profile_form_button" class="form-search">
+                        <input class="btn" type="submit" value="{{ "SaveThisSearch"|get_lang }}">
+                    </form>                  
+                </div>
+                
+                 
                 <div id="saved_profiles">
                 </div>
                 
+                
                 <h3>{{ 'MySkills'|get_lang }}</h3>
                 <hr>