/**
  * Get Options.
  *
  * @return	array	Options. Array ("value" => "option_text")
  */
 function getOptions()
 {
     global $lng;
     if ($this->include_please_select) {
         $options = array("" => $lng->txt("please_select"));
     }
     include_once "./Services/Taxonomy/classes/class.ilTaxonomyTree.php";
     $tax_tree = new ilTaxonomyTree($this->getTaxonomyId());
     $nodes = $tax_tree->getSubtree($tax_tree->getNodeData($tax_tree->readRootId()));
     foreach ($nodes as $n) {
         if ($n["type"] == "taxn") {
             $options[$n["child"]] = str_repeat(" ", ($n["depth"] - 2) * 2) . $n["title"];
         }
     }
     return $options;
 }
 /**
  * Get tree html
  *
  * @param
  * @return
  */
 static function getTreeHTML($a_tax_id, $a_class, $a_cmd, $a_root_node_title = "")
 {
     global $ilUser, $tpl, $ilCtrl, $lng;
     $lng->loadLanguageModule("tax");
     include_once "./Services/Taxonomy/classes/class.ilTaxonomyTree.php";
     require_once "./Services/Taxonomy/classes/class.ilTaxonomyExplorer.php";
     $a_tax_tree = new ilTaxonomyTree($a_tax_id);
     $exp = new ilTaxonomyExplorer($ilCtrl->getLinkTargetByClass($a_class, $a_cmd), $a_tax_tree, $a_class, $a_cmd);
     $exp->setTargetGet("tax_node");
     if ($a_root_node_title != "") {
         $exp->setRootNodeTitle($a_root_node_title);
     }
     $exp->setExpandTarget($ilCtrl->getLinkTargetByClass($a_class, $a_cmd));
     if ($_GET["txexpand"] == "") {
         $expanded = $a_tax_tree->readRootId();
     } else {
         $expanded = $_GET["txexpand"];
     }
     if ($_GET["tax_node"] > 0) {
         $path = $a_tax_tree->getPathId($_GET["tax_node"]);
         $exp->setForceOpenPath($path);
         $exp->highlightNode($_GET["tax_node"]);
     } else {
         $exp->highlightNode($a_tax_tree->readRootId());
     }
     $exp->setExpand($expanded);
     // build html-output
     $exp->setOutput(0);
     $output = $exp->getOutput();
     return $output;
 }
 /**
  * Get all assigned items under a node
  *
  * @param
  * @return
  */
 static function getSubTreeItems($a_comp, $a_obj_id, $a_item_type, $a_tax_id, $a_node)
 {
     include_once "./Services/Taxonomy/classes/class.ilTaxonomyTree.php";
     $tree = new ilTaxonomyTree($a_tax_id);
     $sub_nodes = $tree->getSubTreeIds($a_node);
     $sub_nodes[] = $a_node;
     include_once "./Services/Taxonomy/classes/class.ilTaxNodeAssignment.php";
     $tn_ass = new ilTaxNodeAssignment($a_comp, $a_obj_id, $a_item_type, $a_tax_id);
     $items = $tn_ass->getAssignmentsOfNode($sub_nodes);
     return $items;
 }
 private function getTaxonomyFilterExpressions()
 {
     $expressions = array();
     require_once 'Services/Taxonomy/classes/class.ilTaxonomyTree.php';
     require_once 'Services/Taxonomy/classes/class.ilTaxNodeAssignment.php';
     foreach ($this->getTaxonomyFilters() as $taxId => $taxNodes) {
         $questionIds = array();
         $forceBypass = true;
         foreach ($taxNodes as $taxNode) {
             $forceBypass = false;
             $taxTree = new ilTaxonomyTree($taxId);
             $taxNodeAssignment = new ilTaxNodeAssignment('tst', $this->getTestObjId(), 'quest', $taxId);
             $subNodes = $taxTree->getSubTreeIds($taxNode);
             $subNodes[] = $taxNode;
             $taxItems = $taxNodeAssignment->getAssignmentsOfNode($subNodes);
             foreach ($taxItems as $taxItem) {
                 $questionIds[$taxItem['item_id']] = $taxItem['item_id'];
             }
         }
         if (!$forceBypass) {
             $expressions[] = $this->db->in('question_id', $questionIds, false, 'integer');
         }
     }
     return $expressions;
 }
 private function loadTaxonomyAssignmentData($parentObjId, $questionId)
 {
     $taxAssignmentData = array();
     foreach ($this->getAvailableTaxonomyIds() as $taxId) {
         require_once 'Services/Taxonomy/classes/class.ilTaxonomyTree.php';
         require_once 'Services/Taxonomy/classes/class.ilTaxNodeAssignment.php';
         $taxTree = new ilTaxonomyTree($taxId);
         $taxAssignment = new ilTaxNodeAssignment('qpl', $parentObjId, 'quest', $taxId);
         $assignments = $taxAssignment->getAssignmentsOfItem($questionId);
         foreach ($assignments as $assData) {
             if (!isset($taxAssignmentData[$assData['tax_id']])) {
                 $taxAssignmentData[$assData['tax_id']] = array();
             }
             $nodeData = $taxTree->getNodeData($assData['node_id']);
             $assData['node_lft'] = $nodeData['lft'];
             $taxAssignmentData[$assData['tax_id']][$assData['node_id']] = $assData;
         }
     }
     return $taxAssignmentData;
 }
 /**
  * Fix order numbers
  *
  * @param
  * @return
  */
 static function fixOrderNumbers($a_tax_id, $a_parent_id)
 {
     include_once "./Services/Taxonomy/classes/class.ilTaxonomyTree.php";
     $tax_tree = new ilTaxonomyTree($a_tax_id);
     if ($a_parent_id == 0) {
         $a_parent_id = $tax_tree->readRootId();
     }
     $childs = $tax_tree->getChilds($a_parent_id);
     $childs = ilUtil::sortArray($childs, "order_nr", "asc", false);
     $cnt = 10;
     foreach ($childs as $c) {
         self::writeOrderNr($c["child"], $cnt);
         $cnt += 10;
     }
 }
 public function getFilteredObjects()
 {
     include_once "Services/Taxonomy/classes/class.ilTaxonomyTree.php";
     include_once "Services/Taxonomy/classes/class.ilTaxNodeAssignment.php";
     include_once "Services/Taxonomy/classes/class.ilTaxonomyNode.php";
     $tax_obj_ids = $tax_map = array();
     // :TODO: this could be smarter
     foreach ($this->selection as $node_id) {
         $node = new ilTaxonomyNode($node_id);
         $tax_map[$node->getTaxonomyId()][] = $node_id;
     }
     foreach ($tax_map as $tax_id => $node_ids) {
         $tax_tree = new ilTaxonomyTree($tax_id);
         // combine taxonomy nodes OR
         $tax_nodes = array();
         foreach ($node_ids as $node_id) {
             $tax_nodes = array_merge($tax_nodes, $tax_tree->getSubTreeIds($node_id));
             $tax_nodes[] = $node_id;
         }
         $tax_obj_ids[$tax_id] = ilTaxNodeAssignment::findObjectsByNode($tax_id, $tax_nodes, "obj");
     }
     // combine taxonomies AND
     $obj_ids = null;
     foreach ($tax_obj_ids as $tax_objs) {
         if ($obj_ids === null) {
             $obj_ids = $tax_objs;
         } else {
             $obj_ids = array_intersect($obj_ids, $tax_objs);
         }
     }
     return (array) $obj_ids;
 }