/**
  * Get personal selected user skills
  *
  * @param int $a_user_id user id
  * @return array 
  */
 static function getSelectedUserSkills($a_user_id)
 {
     global $ilDB;
     include_once "Services/Skill/classes/class.ilSkillTreeNode.php";
     include_once "./Services/Skill/classes/class.ilSkillTree.php";
     $stree = new ilSkillTree();
     $set = $ilDB->query("SELECT * FROM skl_personal_skill " . " WHERE user_id = " . $ilDB->quote($a_user_id, "integer"));
     $pskills = array();
     while ($rec = $ilDB->fetchAssoc($set)) {
         if ($stree->isInTree($rec["skill_node_id"])) {
             $pskills[$rec["skill_node_id"]] = array("skill_node_id" => $rec["skill_node_id"], "title" => ilSkillTreeNode::_lookupTitle($rec["skill_node_id"]));
         }
     }
     return $pskills;
 }
 /**
  * Determine steps
  *
  * @param
  * @return
  */
 static function determineSteps($a_sn_id)
 {
     $steps = array();
     if ($a_sn_id > 0) {
         include_once "./Services/Skill/classes/class.ilSkillTree.php";
         include_once "./Services/Skill/classes/class.ilSkillSelfEvalSkillTableGUI.php";
         $stree = new ilSkillTree();
         if ($stree->isInTree($a_sn_id)) {
             $cnode = $stree->getNodeData($a_sn_id);
             $childs = $stree->getSubTree($cnode);
             foreach ($childs as $child) {
                 if ($child["type"] == "skll") {
                     $steps[] = $child["child"];
                 }
             }
         }
     }
     return $steps;
 }
Пример #3
0
 /**
  * Is id in tree?
  *
  * @param
  * @return
  */
 static function isInTree($a_id)
 {
     $skill_tree = new ilSkillTree();
     if ($skill_tree->isInTree($a_id)) {
         return true;
     }
     return false;
 }
 /**
  * Get basic skills under node
  *
  * @param
  * @return
  */
 static function getSkillTreeNodes($a_node_id, $a_only_basic = false)
 {
     $skills = array();
     if ($a_node_id > 0) {
         include_once "./Services/Skill/classes/class.ilSkillTemplateReference.php";
         include_once "./Services/Skill/classes/class.ilSkillTree.php";
         $stree = new ilSkillTree();
         if ($stree->isInTree($a_node_id)) {
             $cnode = $stree->getNodeData($a_node_id);
             // is node basic skill?
             if ($cnode["type"] == "skll" || !$a_only_basic) {
                 $skills[] = array("id" => $a_node_id, "type" => $cnode["type"], "parent" => $cnode["parent"], "tref" => 0);
             }
             // is node skill template reference?
             if ($cnode["type"] == "sktr") {
                 $tr_ref = new ilSkillTemplateReference($cnode["child"]);
                 if ($tr_ref->getSkillTemplateId() > 0) {
                     $cnode2 = $stree->getNodeData($tr_ref->getSkillTemplateId());
                     if ($cnode2["child"] > 0) {
                         $childs2 = $stree->getSubTree($cnode2);
                         foreach ($childs2 as $child2) {
                             // find basic skills templates
                             if ($child2["type"] == "sktp" || !$a_only_basic) {
                                 $par = $tr_ref->getSkillTemplateId() == $child2["child"] ? $cnode["child"] : $child2["parent"];
                                 $skills[] = array("id" => $child2["child"], "type" => $child2["type"], "parent" => $par, "tref" => $cnode["child"]);
                             }
                         }
                     }
                 }
             } else {
                 $childs = $stree->getSubTree($cnode);
                 foreach ($childs as $child) {
                     // getSubTree($cnode) will also return $cnode
                     if ($child["child"] == $cnode["child"]) {
                         continue;
                     }
                     // find basic skills
                     if ($child["type"] == "skll" || !$a_only_basic) {
                         $skills[] = array("id" => $child["child"], "type" => $child["type"], "parent" => $child["parent"], "tref" => 0);
                     }
                     // handle template references
                     if ($child["type"] == "sktr") {
                         $tr_ref = new ilSkillTemplateReference($child["child"]);
                         $cnode2 = $stree->getNodeData($tr_ref->getSkillTemplateId());
                         if ($tr_ref->getSkillTemplateId() > 0) {
                             if ($cnode2["child"] > 0) {
                                 $childs2 = $stree->getSubTree($cnode2);
                                 foreach ($childs2 as $child2) {
                                     $par = $tr_ref->getSkillTemplateId() == $child2["child"] ? $cnode2["child"] : $child2["parent"];
                                     // find basic skills templates
                                     if ($child2["type"] == "sktp" || !$a_only_basic) {
                                         $skills[] = array("id" => $child2["child"], "type" => $child2["type"], "parent" => $par, "tref" => $child["child"]);
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     //var_dump($skills);
     return $skills;
 }
 /**
  * Execute Drag Drop Action
  *
  * @param	string	$source_id		Source element ID
  * @param	string	$target_id		Target element ID
  * @param	string	$first_child	Insert as first child of target
  * @param	string	$movecopy		Position ("move" | "copy")
  */
 function executeDragDrop($source_id, $target_id, $first_child, $as_subitem = false, $movecopy = "move")
 {
     include_once "./Services/Skill/classes/class.ilSkillTree.php";
     $tree = new ilSkillTree();
     include_once "./Services/Skill/classes/class.ilSkillTreeNodeFactory.php";
     $source_obj = ilSkillTreeNodeFactory::getInstance($source_id);
     if (!$first_child) {
         $target_obj = ilSkillTreeNodeFactory::getInstance($target_id);
         $target_parent = $tree->getParentId($target_id);
     }
     // handle skills
     if ($source_obj->getType() == "skll") {
         if ($tree->isInTree($source_obj->getId())) {
             $node_data = $tree->getNodeData($source_obj->getId());
             // cut on move
             if ($movecopy == "move") {
                 $parent_id = $tree->getParentId($source_obj->getId());
                 $tree->deleteTree($node_data);
             }
             // paste page
             if (!$tree->isInTree($source_obj->getId())) {
                 if ($first_child) {
                     $target_pos = IL_FIRST_NODE;
                     $parent = $target_id;
                 } else {
                     if ($as_subitem) {
                         $parent = $target_id;
                         $target_pos = IL_FIRST_NODE;
                         $childs = $tree->getChildsByType($parent, array("skll", "scat"));
                         if (count($childs) != 0) {
                             $target_pos = $childs[count($childs) - 1]["obj_id"];
                         }
                     } else {
                         $target_pos = $target_id;
                         $parent = $target_parent;
                     }
                 }
                 // insert skill into tree
                 $tree->insertNode($source_obj->getId(), $parent, $target_pos);
             }
         }
     }
     // handle skil categories
     if ($source_obj->getType() == "scat") {
         $source_node = $tree->getNodeData($source_id);
         $subnodes = $tree->getSubtree($source_node);
         // check, if target is within subtree
         foreach ($subnodes as $subnode) {
             if ($subnode["obj_id"] == $target_id) {
                 return;
             }
         }
         $target_pos = $target_id;
         if ($first_child) {
             $target_pos = IL_FIRST_NODE;
             $target_parent = $target_id;
         } else {
             if ($as_subitem) {
                 $target_parent = $target_id;
                 $target_pos = IL_FIRST_NODE;
                 $childs = $tree->getChilds($target_parent);
                 if (count($childs) != 0) {
                     $target_pos = $childs[count($childs) - 1]["obj_id"];
                 }
             }
         }
         // delete source tree
         if ($movecopy == "move") {
             $tree->deleteTree($source_node);
         }
         if (!$tree->isInTree($source_id)) {
             $tree->insertNode($source_id, $target_parent, $target_pos);
             // insert moved tree
             if ($movecopy == "move") {
                 foreach ($subnodes as $node) {
                     if ($node["obj_id"] != $source_id) {
                         $tree->insertNode($node["obj_id"], $node["parent"]);
                     }
                 }
             }
         }
     }
 }