/** * 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; }
/** * 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"]); } } } } } }