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