Browse Source

Skills management, looping through blocks works

Julio Montoya 13 years ago
parent
commit
1185f45df3
3 changed files with 147 additions and 42 deletions
  1. 93 37
      main/admin/skills.php
  2. 13 3
      main/inc/ajax/skill.ajax.php
  3. 41 2
      main/inc/lib/skill.lib.php

+ 93 - 37
main/admin/skills.php

@@ -42,12 +42,15 @@ $url = api_get_path(WEB_AJAX_PATH).'skill.ajax.php?1=1';
 <script>
 
 var url     = '<?php echo $url; ?>';
-var skills  = [];
-var parents = [];
+var skills  = []; //current window divs
+var parents = []; //list of parents normally there should be only 2
+
+var hidden_parent = '';
 
 var parents = ['block_1'];
 
 jsPlumb.bind("ready", function() {
+    
     $("#dialog-form").dialog({
         autoOpen: false,
         modal   : true, 
@@ -77,37 +80,99 @@ jsPlumb.bind("ready", function() {
     
     //On click box
     $(".open_block").live('click', function() {
-       var original_id = $(this).attr('id');
-       var id = $(this).attr('id');
-       
-       if (jQuery.inArray(id, parents) == -1) {
-        parents.push(id);
-       }
-       console.log(parents);
-       open_block(original_id, id);       
+        
+        var id = $(this).attr('id');
+        //console.log(skills);
+        //console.log('parents : '+parents[1] + ' id: '+id);
+        
+        //if is root
+        if (parents[0] == id) {
+            parents = [id];
+        }
+        
+        if (parents[1] != id) {
+            //means that we have 2 parents   
+            if (parents.length == 2) {            
+                //removing father
+                for (var i = 0; i < skills.length; i++) {           
+                    if ( skills[i].element == parents[0] ) {                         
+                         jsPlumb.deleteEndpoint(skills[i].endp);
+                         $("#"+skills[i].element).remove();
+                    }
+                }
+                hidden_parent = parents[0];
+                                
+                parents.splice(0,1);                
+                parents.push(id);                
+            }
+              
+            if (parents.length == 1 && hidden_parent != ''){
+                //show the hidden_parent
+                
+                parents = [hidden_parent, id];
+               //    console.log(parents);
+                open_parent(hidden_parent, id);
+                hidden_parent = '';
+            } 
+            
+            if (jQuery.inArray(id, parents) == -1) {                              
+                parents.push(id);
+            }
+            
+           console.log(parents);
+           open_block(id);  
+                
+            
+        }
+        console.log('hidden_parent : ' + hidden_parent);
+         
     });
     
+    function open_parent(parent_id, id) {                 
+        var numeric_parent_id = parent_id.split('_')[1];
+        var numeric_id = id.split('_')[1];        
+        load_parent(numeric_parent_id, numeric_id);               
+    }
+    
     //open block function
-    function open_block(original_id, id) {         
-        my_id = original_id.split('_')[1];  
-        for (var i = 0; i < skills.length; i++) {            
-            window_id = id.split('_')[1];
+    function open_block(id) {         
+        var numeric_id = id.split('_')[1];  
+        for (var i = 0; i < skills.length; i++) {
+            //Remove everything except parents
             if (jQuery.inArray(skills[i].element, parents) == -1) {
                  jsPlumb.deleteEndpoint(skills[i].endp);
                  $("#"+skills[i].element).remove();
+                 //console.log('Removing '+skills[i].element);
             }
         }
-        jsPlumb.animate(original_id, {left: 900}, { duration:1000 });
-        
-        pos = $('#'+original_id).position();
+        /*if ($('#'+id).length == 0) {
+            $('body').append('<div id="'+id+'" class="open_block window " >'+id+'</div>'); 
+        }*/
+        jsPlumb.animate(id, {left: 900}, { duration:1000 });        
+        pos = $('#'+id).position();        
         top_value = pos.top + 200 ;     
-        load_children(my_id, top_value);   
+        load_children(numeric_id, top_value);   
     }
     
-    
-    function load_children(my_id, top_value) {
+    function load_parent(parent_id, id) {
+         var ix = 1;
+         $.getJSON(url+'&a=load_direct_parents&id='+id, {},         
+             function(json) {
+                $.each(json,function(i,item) {
+                    //top_value   = 300;
+                    $('body').append('<div id="block_'+item.id+ '" class="open_block window " >'+item.name+'</div>');                
+                    var es = prepare("block_" + item.id,  jsPlumbDemo.editEndpoint);    
+                    jsPlumb.connect({source: es, target:"block_"+id});                    
+                    jsPlumb.animate("block_" + item.id, {left: 900, top : 0}, { duration:1000 });
+                    hidden_parent = "block_" + item.parent_id;
+                    ix++;   
+                });
+            }
+        ); 
         
-        // var a = '<div style="top:300px; left:100px;" class="window edit_window ui-draggable" id="block_15">aaaa</div>';
+    }
+    
+    function load_children(my_id, top_value) {        
         //Loading children
         var ix = 1;
         $.getJSON(url+'&a=load_children&id='+my_id, {},         
@@ -115,13 +180,12 @@ jsPlumb.bind("ready", function() {
                 $.each(json,function(i,item) {
                     left_value  = 130*ix+500;
                     //top_value   = 300;
-                    $('body').append('<div id="block_'+item.id+ '" class="open_block window " >'+item.name+i+'</div>')
-                    
+                    $('body').append('<div id="block_'+item.id+ '" class="open_block window " >'+item.name+i+'</div>');                    
                     
                     var es = prepare("block_" + item.id,  jsPlumbDemo.editEndpoint);    
-                    jsPlumb.connect({source: es, target:"block_"+my_id});
-                    
-                    jsPlumb.animate("block_" + item.id, {left: left_value, top : top_value}, { duration:1000 });                     
+                    jsPlumb.connect({source: es, target:"block_"+my_id});                    
+                    jsPlumb.animate("block_" + item.id, {left: left_value, top : top_value}, { duration:1000 });
+                                         
                     
                     ix++;   
                 });
@@ -213,24 +277,16 @@ jsPlumb.bind("ready", function() {
         //jsPlumbDemo.initAnimation(elId);        
         var e = jsPlumb.addEndpoint(elId, endpoint);
         jsPlumbDemo.initjulio(e);
-        skills.push({element:elId, endp:e});        
+        skills.push({element:elId, endp:e});
         return e;
-    },    
-    
+    },
     window.jsPlumbDemo = {    
         initjulio :function(e) {
         },      
         initHover :function(elId) {            
             
             $("#" + elId).click(function() {
-                var  all = jsPlumb.getConnections({source:elId});
-               
-                //var all  = jsPlumb.getConnections({scope:"DEFAULT", source:elId});     
-                   
-                //console.log(all);
-            
-                //alert(elId);
-               // jsPlumb.hide(elId);
+                var  all = jsPlumb.getConnections({source:elId});               
             });
             
             /*$("#" + elId).hover(

+ 13 - 3
main/inc/ajax/skill.ajax.php

@@ -11,9 +11,10 @@ require_once api_get_path(LIBRARY_PATH).'gradebook.lib.php';
 
 $action = isset($_REQUEST['a']) ? $_REQUEST['a'] : null;
 
-$skill = new Skill();
-$gradebook = new Gradebook();
+$skill           = new Skill();
+$gradebook       = new Gradebook();
 $skill_gradebook = new SkillRelGradebook();
+$skill_rel_skill = new SkillRelSkill();
 
 switch ($action) {
     case 'add':     
@@ -61,7 +62,16 @@ switch ($action) {
             $return [$skill['data']['id']] = array('name' => $skill['data']['name'], 'id'=>$skill['data']['id']);
         }
         echo json_encode($return);
-        break;        
+        break;
+    case 'load_direct_parents':
+        $id = isset($_REQUEST['id']) ? $_REQUEST['id'] : null;
+        $skills = $skill->get_direct_parents($id);
+        $return = array();
+        foreach($skills as $skill) {
+            $return [$skill['data']['id']] = array('name' => $skill['data']['name'], 'id'=>$skill['data']['id']);
+        }
+        echo json_encode($return);        
+        break;    
     case 'skill_exists':
         $skill_data = $skill->get($_REQUEST['skill_id']);        
         if (!empty($skill_data)) {

+ 41 - 2
main/inc/lib/skill.lib.php

@@ -34,7 +34,8 @@ class SkillRelSkill extends Model {
     
     public function get_skill_parents($skill_id, $add_child_info = true) {
         $skill_id = intval($skill_id);        
-        $sql = 'SELECT child.* FROM '.$this->table.' child LEFT JOIN '.$this->table.' parent ON child.parent_id = parent.skill_id
+        $sql = 'SELECT child.* FROM '.$this->table.' child LEFT JOIN '.$this->table.' parent 
+                ON child.parent_id = parent.skill_id
                 WHERE child.skill_id = '.$skill_id.' ';
         $result = Database::query($sql);
         $skill  = Database::store_result($result,'ASSOC');
@@ -52,6 +53,20 @@ class SkillRelSkill extends Model {
         return $parents;
     }
     
+    public function get_direct_parents($skill_id) {
+        $skill_id = intval($skill_id);        
+        $sql = 'SELECT parent_id as skill_id FROM '.$this->table.'
+                WHERE skill_id = '.$skill_id.' ';
+        $result = Database::query($sql);
+        $skill  = Database::store_result($result,'ASSOC');
+        $skill  = isset($skill[0]) ? $skill[0] : null;
+        $parents = array();
+        if (!empty($skill)) {
+            $parents[] = $skill;            
+        }        
+        return $parents;
+    }
+    
     public function get_children($skill_id, $add_child_info = true) {
         $skills = $this->find('all', array('where'=> array('parent_id = ? '=> $skill_id)));
         $skill_obj = new Skill();
@@ -118,7 +133,6 @@ class Skill extends Model {
     
     public function skill_exists($skill_id) {
         
-        
     }
      
     function get_all($load_user_data = false) {
@@ -167,6 +181,31 @@ class Skill extends Model {
         $skills = $skill_rel_skill->get_children($skill_id, true);
         return $skills;
     }    
+    
+    /**
+     * All parents from root to n
+     */
+    function get_parents($skill_id) {
+        $skill_rel_skill = new SkillRelSkill();
+        $skills = $skill_rel_skill->get_skill_parents($skill_id, true);        
+        foreach($skills as &$skill) {
+            $skill['data'] = self::get($skill['skill_id']);             
+        }
+        return $skills;
+    }
+    
+    /**
+     * All direct parents
+     */
+    function get_direct_parents($skill_id) {
+        $skill_rel_skill = new SkillRelSkill();
+        $skills = $skill_rel_skill->get_direct_parents($skill_id, true);        
+        foreach($skills as &$skill) {
+            $skill['data'] = self::get($skill['skill_id']);             
+        }
+        return $skills;
+    }
+       
     public function add($params) {
         if (!isset($params['parent_id'])) {
             $params['parent_id'] = 1;