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