Adding elements in the skill profile + fixing wheel when clicking in a skill name see #1791

skala
Julio Montoya 13 years ago
parent c5e6d35f8f
commit 4cc609e726
  1. 6
      main/admin/skills_wheel.php
  2. 11
      main/css/base.css
  3. 43
      main/inc/ajax/skill.ajax.php
  4. 48
      main/inc/lib/skill.lib.php
  5. 111
      main/template/default/skill/skill_wheel.tpl

@ -39,12 +39,14 @@ if (isset($_GET['load_user'])) {
$skill_condition = '';
if (isset($_GET['skill_id'])) {
$skill_condition = 'skill_id='.intval($_GET['skill_id']);
$skill_condition = '&skill_id='.intval($_GET['skill_id']);
$tpl->assign('skill_id_to_load', $_GET['skill_id']);
}
$url = api_get_path(WEB_AJAX_PATH)."skill.ajax.php?a=get_skills_tree_json&load_user=$load_user&$skill_condition";
$url = api_get_path(WEB_AJAX_PATH)."skill.ajax.php?a=get_skills_tree_json&load_user=$load_user";
$tpl->assign('wheel_url', $url);
$url = api_get_path(WEB_AJAX_PATH).'skill.ajax.php?1=1';
$tpl->assign('url', $url);

@ -4635,7 +4635,12 @@ i.size-32.icon-new-work{
stroke-width: 1.5;
}
#skill_holder li {
float:left;
width: 120px;
}
#filepaths input{
margin-bottom:5px;
}
margin-bottom:5px;
}

@ -33,6 +33,43 @@ switch ($action) {
$return_skills[] = $skill;
}
echo json_encode($return_skills);
break;
case 'profile_matches':
$skill_rel_user = new SkillRelUser();
$skills = $_REQUEST['skills'];
$users = $skill_rel_user->get_user_by_skills($skills);
$total_skills_to_search = array();
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);
}
}
break;
case 'get_gradebooks':
$gradebooks = $gradebook_list = $gradebook->get_all();
@ -162,9 +199,9 @@ switch ($action) {
}
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;
$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;

@ -343,7 +343,7 @@ class Skill extends Model {
$sql = "SELECT s.id, s.name, s.description, ss.parent_id, ss.relation_type
FROM {$this->table} s INNER JOIN {$this->table_skill_rel_skill} ss ON (s.id = ss.skill_id) $id_condition
ORDER BY ss.id, ss.parent_id";
$result = Database::query($sql);
$skills = array();
@ -367,6 +367,17 @@ class Skill extends Model {
}
}
}
//Load all children of the parent_id
if (!empty($skills) && !empty($parent_id)) {
foreach ($skills as $skill) {
$children = self::get_all($load_user_data, $user_id, $id, $skill['id']);
if (!empty($children)) {
//$skills = array_merge($skills, $children);
$skills = $skills + $children;
}
}
}
return $skills;
}
@ -575,6 +586,10 @@ class Skill extends Model {
$skills = $this->get_all(false, false, null, $skill_id);
}
$original_skill = $skills;
//var_dump($skills);
//Show 1 item
if ($add_root) {
if (!empty($skill_id)) {
@ -584,16 +599,15 @@ class Skill extends Model {
$skills[$skill_id]['parent_id'] = $skill_info['extra']['parent_id'];
}
}
$refs = array();
$skills_tree = null;
// Create references for all nodes
$flat_array = array();
$css_attributes = array('fill' => 'red');
$flat_array = array();
$css_attributes = array('fill' => 'red');
$family = array();
if (!empty($skills)) {
foreach ($skills as &$skill) {
@ -636,13 +650,19 @@ class Skill extends Model {
}
$new_family_array[$main_family_id] = $family_id;
$family_id++;
}
}
// Moving node to the children index of their parents
foreach ($skills as $skillInd => &$skill) {
$skill['data']['family_id'] = $new_family_array[$skill['id']];
$refs[$skill['parent_id']]['children'][] = &$skill;
$flat_array[$skillInd] = $skill;
if (empty($original_skill)) {
$refs['root']['children'][0] = $skills[1];
$refs['root']['children'][0]['children'][0] = $skills[$skill_id];
$flat_array[$skill_id] = $skills[$skill_id];
} else {
// Moving node to the children index of their parents
foreach ($skills as $my_skill_id => &$skill) {
$skill['data']['family_id'] = $new_family_array[$skill['id']];
$refs[$skill['parent_id']]['children'][] = &$skill;
$flat_array[$my_skill_id] = $skill;
}
}
$skills_tree = array(
@ -650,7 +670,7 @@ class Skill extends Model {
'id' => 'root',
'children' => $refs['root']['children'],
'data' => array()
);
);
}
if ($return_flat_array) {
@ -665,7 +685,7 @@ class Skill extends Model {
*
*/
public function get_skills_tree_json($user_id = null, $skill_id = null, $return_flat_array = false, $main_depth = 2) {
$tree = $this->get_skills_tree($user_id, $skill_id, $return_flat_array, true);
$tree = $this->get_skills_tree($user_id, $skill_id, $return_flat_array, true);
$simple_tree = array();
if (!empty($tree['children'])) {

@ -3,6 +3,8 @@
var url = '{{ url }}';
var skill_to_load_from_get = '{{ skill_id_to_load }}';
function get_skill_info(my_id) {
var skill = false;
$.ajax({
@ -40,8 +42,9 @@ function add_skill(params) {
});
}
/* Skill search input in the left menu */
function check_skills_sidebar() {
//selecting only selected users
//Selecting only selected skills
$("#skill_id option:selected").each(function() {
var skill_id = $(this).val();
if (skill_id != "" ) {
@ -71,8 +74,11 @@ function check_skills_sidebar() {
}
});
skill_info = get_skill_info(skill_id);
$("#skill_holder").append('<li><input id="checkbox_'+skill_id+'" class="skill_to_select" type="checkbox" value=""> <a href="#" class="load_wheel" rel="'+skill_id+'">'+skill_info.name+'</a></li>');
if ($('#skill_to_select_id_'+skill_id).length == 0) {
skill_info = get_skill_info(skill_id);
li = fill_skill_search_li(skill_id, skill_info.name);
$("#skill_holder").append(li);
}
}
},
});
@ -80,7 +86,11 @@ function check_skills_sidebar() {
});
}
function fill_skill_search_li(skill_id, skill_name) {
return '<li><input id="skill_to_select_id_'+skill_id+'" rel="'+skill_id+'" name="'+skill_name+'" class="skill_to_select" type="checkbox" value=""> <a href="#" class="load_wheel" rel="'+skill_id+'">'+skill_name+'</a></li>';
}
function check_skills_edit_form() {
//selecting only selected users
$("#parent_id option:selected").each(function() {
@ -172,7 +182,7 @@ function delete_gradebook_from_skill(skill_id, gradebook_id) {
success: function(result) {
//if (result == 1) {
$('#gradebook_item_'+gradebook_id).remove();
$("#gradebook_id option").each(function () {
$("#gradebook_id option").each(function() {
if ($(this).attr("value") == gradebook_id) {
$(this).remove();
}
@ -185,15 +195,64 @@ function delete_gradebook_from_skill(skill_id, gradebook_id) {
$(document).ready(function() {
$("#search_profile_form").submit(function() {
$("#skill_wheel").remove();
var skill_list=[];
$("#profile_search li").each(function() {
id = $(this).attr("id");
if (id) {
console.log(id);
skill_list.push(id);
}
});
skill_list = { 'skill_id': skill_list};
skill_params = $.param(skill_list);
console.log(skill_params);
$.ajax({
url: url+'&a=profile_matches&skills='+skill_params,
async: false,
success: function(json) {
skill = jQuery.parseJSON(json);
return skill;
}
});
return skill;
});
$("#skill_holder").on("click", "input.skill_to_select", function() {
skill_id = $(this).attr('rel');
skill_name = $(this).attr('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();
}
});
/* Close button in gradebook select */
$("#gradebook_holder").on("click", "a.closebutton", function() {
gradebook_id = $(this).attr('rel');
skill_id = $('#id').attr('value');
delete_gradebook_from_skill(skill_id, gradebook_id);
});
});
/* Close button in profile matcher */
$("#profile_search").on("click", "a.closebutton", function() {
skill_id = $(this).attr('rel');
$('input[id=skill_to_select_id_'+skill_id+']').attr('checked', false);
$('#profile_match_item_'+skill_id).remove();
});
/* URL link when searching skills in the sidebar*/
$("#skill_holder").on("click", "a.load_wheel", function() {
skill_id = $(this).attr('rel');
skill_to_load_from_get = 0;
load_nodes(skill_id, main_depth);
});
@ -301,8 +360,7 @@ $(document).ready(function() {
reduce_top = 1;
/* Locate the #div id element */
$("#skill_wheel").remove();
$("#skill_wheel").remove();
$("#wheel_container").append('<div id="skill_wheel"></div>');
var div = d3.select("#skill_wheel");
@ -353,6 +411,13 @@ $(document).ready(function() {
});
load_skill_condition = '';
//First the $_GET value
if (skill_to_load_from_get != 0) {
load_skill_condition = 'skill_id=' + skill_to_load_from_get;
}
//The JS load
if (load_skill_id != 0) {
load_skill_condition = 'skill_id=' + load_skill_id;
}
@ -759,39 +824,49 @@ $(document).ready(function() {
<div class="container-fluid">
<div class="row-fluid">
<div class="span2">
<div class="span3">
<div class="well">
<h3>{{ 'Skills'|get_lang }}</h3>
<hr>
<form id="skill_search" class="form-search">
<select id="skill_id" name="skill_id" />
</select>
<br />
<br /><br />
<ul id="skill_holder" class="holder holder_simple">
<li><a class="load_wheel" rel="1" href="#">Root</a></li>
</ul>
</form>
<h3>{{ 'ProfileSearch'|get_lang }}</h3>
<hr>
{{ 'WhatSkillsAreYouLookinFor'|get_lang }}
{{ 'RightClickOnSkillsInTheWheelToAddThemToThisProfileSearchBox'|get_lang }}
<ul id="profile_search" class="holder holder_simple">
</ul>
{{ 'RightClickOnSkillsInTheWheelToAddThemToThisProfileSearchBox'|get_lang }}
<form class="form-search">
<input class="btn" type="button" value="{{ "SearchProfileMatches"|get_lang }}">
<form id="search_profile_form" class="form-search">
<input class="btn" type="submit" value="{{ "SearchProfileMatches"|get_lang }}">
</form>
<h3>{{ 'MySkills'|get_lang }}</h3>
<hr>
<h3>{{ 'GetNewSkills'|get_lang }}</h3>
<h3>{{ 'SkillInfo'|get_lang }}</h3>
<hr>
<h3>{{ 'SkillInfo'|get_lang }}</h3>
<hr>
</div>
</div>
</div>
<div id="wheel_container" class="span10">
<div id="wheel_container" class="span9">
<div id="skill_wheel">
<img src="">
</div>

Loading…
Cancel
Save