Exemplo n.º 1
0
 /**
  * Remove already deleted objects within the objects in trash
  */
 private function removeDeletedNodes($a_node_id, $a_checked, $a_delete_objects, &$a_affected_ids)
 {
     global $log, $ilDB, $tree;
     $q = "SELECT tree FROM tree WHERE parent= " . $ilDB->quote($a_node_id, "integer") . " AND tree < 0";
     $r = $ilDB->query($q);
     while ($row = $ilDB->fetchObject($r)) {
         // only continue recursion if fetched node wasn't touched already!
         if (!in_array($row->tree, $a_checked)) {
             $deleted_tree = new ilTree($row->tree);
             $a_checked[] = $row->tree;
             $row->tree = $row->tree * -1;
             $del_node_data = $deleted_tree->getNodeData($row->tree);
             $del_subtree_nodes = $deleted_tree->getSubTree($del_node_data);
             ilRepUtil::removeDeletedNodes($row->tree, $a_checked, $a_delete_objects, $a_affected_ids);
             if ($a_delete_objects) {
                 foreach ($del_subtree_nodes as $node) {
                     $node_obj =& ilObjectFactory::getInstanceByRefId($node["ref_id"]);
                     // write log entry
                     $log->write("ilObjectGUI::removeDeletedNodes(), delete obj_id: " . $node_obj->getId() . ", ref_id: " . $node_obj->getRefId() . ", type: " . $node_obj->getType() . ", " . "title: " . $node_obj->getTitle());
                     $a_affected_ids[$node["ref_id"]] = array("ref_id" => $node["ref_id"], "obj_id" => $node_obj->getId(), "type" => $node_obj->getType());
                     $node_obj->delete();
                 }
             }
             $tree->deleteTree($del_node_data);
             // write log entry
             $log->write("ilObjectGUI::removeDeletedNodes(), deleted tree, tree_id: " . $del_node_data["tree"] . ", child: " . $del_node_data["child"]);
         }
     }
     return true;
 }