diff --git a/main/css/base.css b/main/css/base.css index 1f32bd685a..8211f19f9e 100644 --- a/main/css/base.css +++ b/main/css/base.css @@ -3947,7 +3947,8 @@ form div.error input, form div.error textarea { .edit_block { - z-index: 100; + font-size:14px; + z-index: 200; } #language_list { diff --git a/main/inc/ajax/skill.ajax.php b/main/inc/ajax/skill.ajax.php index 1f56664f6e..39d8fa2e30 100644 --- a/main/inc/ajax/skill.ajax.php +++ b/main/inc/ajax/skill.ajax.php @@ -18,12 +18,11 @@ $skill_rel_skill = new SkillRelSkill(); switch ($action) { case 'add': - if (isset($_REQUEST['id']) && !empty($_REQUEST['id'])) { + if (isset($_REQUEST['id']) && !empty($_REQUEST['id'])) { $skill->edit($_REQUEST); } else { $skill->add($_REQUEST); - } - + } break; case 'find_skills': $tag = Database::escape_string($_REQUEST['tag']); diff --git a/main/inc/lib/javascript/chosen/chosen.css b/main/inc/lib/javascript/chosen/chosen.css index 7870f053d4..5be744a87a 100644 --- a/main/inc/lib/javascript/chosen/chosen.css +++ b/main/inc/lib/javascript/chosen/chosen.css @@ -364,4 +364,4 @@ background: url('chosen-sprite.png') no-repeat -38px -22px, linear-gradient(top, #ffffff 85%,#eeeeee 99%); padding: 4px 5px 4px 20px; } -/* @end */ +/* @end */ \ No newline at end of file diff --git a/main/inc/lib/skill.lib.php b/main/inc/lib/skill.lib.php index 15b3ae12b3..ba50fbcea8 100644 --- a/main/inc/lib/skill.lib.php +++ b/main/inc/lib/skill.lib.php @@ -77,6 +77,22 @@ class SkillRelSkill extends Model { } return $skills; } + + function update_by_skill($params) { + $result = Database::update($this->table, $params, array('skill_id = ? '=> $params['skill_id'])); + if ($result) { + return true; + } + return false; + } + + function relation_exists($skill_id, $parent_id) { + $result = $this->find('all', array('where'=>array('skill_id = ? AND parent_id = ?' => array($skill_id, $parent_id)))); + if (!empty($result)) { + return true; + } + return false; + } } /** @@ -104,7 +120,55 @@ class SkillRelGradebook extends Model { if (empty($skill_id)) { return array(); } $result = Database::select('*',$this->table, array('where'=>array('skill_id = ? AND gradebook_id = ? '=>array($skill_id, $gradebook_id))),'first'); return $result; - } + } + + public function update_gradebooks_by_skill($skill_id, $gradebook_list) { + $original_gradebook_list = $this->find('all', array('where'=>array('skill_id = ?' => array($skill_id)))); + var_dump($original_gradebook_list); + $gradebooks_to_remove = array(); + $gradebooks_to_add = array(); + + if (!empty($original_gradebook_list)) + foreach ($original_gradebook_list as $gradebook) { + if (!in_array($gradebook['gradebook_id'], $gradebook_list)) { + $gradebooks_to_remove[] = $gradebook['id']; + } + } + + if (!empty($gradebook_list)) + foreach($gradebook_list as $gradebook_id) { + if (!in_array($gradebook_id, array_keys($original_gradebook_list))) { + $gradebooks_to_add[] = $gradebook_id; + } + } + + if (!empty($gradebooks_to_remove)) { + foreach($gradebooks_to_remove as $id) { + $this->delete($id); + } + } + + if (!empty($gradebooks_to_add)) { + foreach($gradebooks_to_add as $gradebook_id) { + $attributes = array('skill_id' => $skill_id, 'gradebook_id' => $gradebook_id); + $this->save($attributes); + } + } + } + + function update_by_skill($params) { + $skill_info = $this->exists_gradebook_skill($params['gradebook_id'], $params['skill_id']); + + if ($skill_info) { + return; + } else { + $result = $this->save($params); + } + if ($result) { + return true; + } + return false; + } } /** @@ -255,6 +319,7 @@ class Skill extends Model { $skill_rel_gradebook = new SkillRelGradebook(); //Saving name, description + var_dump($params); $this->update($params); $skill_id = $params['id']; @@ -266,16 +331,9 @@ class Skill extends Model { 'relation_type' => $params['relation_type'], //'level' => $params['level'], ); - $skill_rel_skill->update($attributes); + $skill_rel_skill->update_by_skill($attributes); - if (!empty($params['gradebook_id'])) { - foreach ($params['gradebook_id'] as $gradebook_id) { - $attributes = array(); - $attributes['gradebook_id'] = $gradebook_id; - $attributes['skill_id'] = $skill_id; - $skill_rel_gradebook->update($attributes); - } - } + $skill_rel_gradebook->update_gradebooks_by_skill($skill_id, $params['gradebook_id']); } } diff --git a/main/template/default/skill/skill_tree.tpl b/main/template/default/skill/skill_tree.tpl index 32765c2360..d2615e9f63 100644 --- a/main/template/default/skill/skill_tree.tpl +++ b/main/template/default/skill/skill_tree.tpl @@ -16,7 +16,6 @@ var space_between_blocks_y = {$skill_visualizer->space_between_blocks_y}; var center_x = {$skill_visualizer->center_x}; var block_size = {$skill_visualizer->block_size}; - //Setting the parent by default var parents = ['block_1']; @@ -115,7 +114,8 @@ jsPlumb.bind("ready", function() { console.log('hidden_parent : ' + hidden_parent); }); - function open_parent(parent_id, id) { + function open_parent(parent_id, id) { + console.log("open_parent call : id " + id + " parent_id:" + parent_id); var numeric_parent_id = parent_id.split('_')[1]; var numeric_id = id.split('_')[1]; load_parent(numeric_parent_id, numeric_id); @@ -148,26 +148,18 @@ jsPlumb.bind("ready", function() { } else { top_value = pos.left; } - jsPlumb.animate(id, { - left: left_value, - top:top_value - }, - { - duration:duration_value - }); + jsPlumb.animate(id, { left: left_value, top:top_value }, { duration:duration_value }); //Modifying root block position pos_parent = $('#'+parents[0]).position(); - jsPlumb.animate(parents[0], { - left: center_x, top:offset_y - }, - { duration:duration_value }); + jsPlumb.animate(parents[0], { left: center_x, top:offset_y }, { duration:duration_value }); - top_value = parents.length * space_between_blocks_y; + top_value = 2*space_between_blocks_y +offset_y ; load_children(numeric_id, top_value); } function load_parent(parent_id, id) { + console.log("load_parent call : id " + id + " parent_id:" + parent_id); var ix= 0; $.ajax({ url: url+'&a=load_direct_parents&id='+id, @@ -186,9 +178,7 @@ jsPlumb.bind("ready", function() { jsPlumb.connect({ source: es, target:es2 }); - jsPlumb.animate("block_" + item.id, { - left: left_value, top : top_value - }, { duration : duration_value}); + jsPlumb.animate("block_" + item.id, { left: left_value, top : top_value }, { duration : duration_value}); if (item.parent_id) { console.log('setting hidden_parent '+item.parent_id); @@ -203,13 +193,14 @@ jsPlumb.bind("ready", function() { }); } - function load_children(my_id, top_value) { + function load_children(my_id, top_value) { + console.log("load_children call : my_id " + my_id + " top_value:" + top_value); //Loading children var ix = 0; $.getJSON(url+'&a=load_children&id='+my_id, {}, function(json) { $.each(json,function(i,item) { - left_value = ix*space_between_blocks_x + center_x/2 + block_size / 2; + left_value = ix*space_between_blocks_x + center_x/2 - block_size / 2; //top_value = 300; //Display::url($skill['name'], '#', array('id'=>'edit_block_'.$block_id, 'class'=>'edit_block')) item.name = ''+item.name+''; @@ -235,6 +226,10 @@ jsPlumb.bind("ready", function() { var my_id = $(this).attr('id'); my_id = my_id.split('_')[2]; + //Cleaning selected + $("#parent_id option:selected").removeAttr('selected'); + $("#gradebook_id option:selected").removeAttr('selected'); + $.ajax({ url: url+'&a=get_skill_info&id='+my_id, success: function(json) { @@ -245,21 +240,32 @@ jsPlumb.bind("ready", function() { //filling parent_id $("#parent_id option[value='"+skill.extra.parent_id+"']").attr('selected', 'selected'); //filling the gradebook_id - jQuery.each(skill.gradebooks, function(index, data) { + jQuery.each(skill.gradebooks, function(index, data) { $("#gradebook_id option[value='"+data.id+"']").attr('selected', 'selected'); }); }, - }); + }); + + + $("#gradebook_id").trigger("liszt:updated"); + $("#parent_id").trigger("liszt:updated"); + + $("#dialog-form").dialog("open"); return false; }); //Filling select - $("#add_item_link").click(function() { + $("#add_item_link").click(function() { + + $("#name").attr('value', ''); + $("#description").attr('value', ''); + + $("#parent_id option:selected").removeAttr('selected'); + $("#gradebook_id option:selected").removeAttr('selected'); + $("#dialog-form").dialog("open"); - $("#gradebook_id").addClass('chzn-select'); - $("#gradebook_id").chosen(); - $("#parent_id").chosen(); + }); var name = $( "#name" ), @@ -345,12 +351,12 @@ jsPlumb.bind("ready", function() { var editEndpoint = { //connectorStyle:connectorPaintStyle, - connector:[ "Flowchart", { stub:10 } ], + connector:[ "Flowchart", { stub:28 } ], hoverPaintStyle:connectorHoverStyle, connectorHoverStyle:connectorHoverStyle, anchors: ['BottomCenter','TopCenter'], endpoint:"Rectangle", - paintStyle:{ width:20, height:20, fillStyle:edit_arrow_color }, + paintStyle:{ width:10, height:10, fillStyle:edit_arrow_color }, isSource:true, scope:'blue rectangle', maxConnections:10, @@ -450,15 +456,7 @@ jsPlumb.bind("ready", function() { jsPlumb.Defaults.Overlays = [ - [ "Arrow", { location:0.9 } ], - [ "Label", { - location:0.1, - label:function(label) { - return label.connection.labelText || ""; - }, - cssClass:"aLabel", - - }] + //[ "Arrow", { location:0.5 } ], if you want to add an arrow in the connection ]; @@ -536,7 +534,8 @@ $(document).ready( function() { jsPlumb.bind("click", function(endpoint) { if (confirm("Delete connection from " + conn.sourceId + " to " + conn.targetId + "?")) jsPlumb.detach(conn); - }) + }); + $(".chzn-select").chosen(); }); ;(function() { @@ -609,7 +608,7 @@ function checkLength( o, n, min, max ) {
-
@@ -618,7 +617,7 @@ function checkLength( o, n, min, max ) {
- Gradebook Description