34 $this->db = $DIC->database();
35 $this->tree = $DIC->repositoryTree();
48 bool $throw_error_on_already_deleted =
true 52 $ilAppEventHandler = $DIC[
"ilAppEventHandler"];
53 $rbacsystem = $DIC->rbac()->system();
54 $rbacadmin = $DIC->rbac()->admin();
55 $ilLog = $DIC[
"ilLog"];
56 $tree = $DIC->repositoryTree();
57 $lng = $DIC->language();
68 $a_ids = array_unique($a_ids);
73 foreach ($a_ids as
$id) {
75 if (!$throw_error_on_already_deleted) {
78 $log->write(__METHOD__ .
': Object with ref_id: ' . $id .
' already deleted.');
84 $subtree_nodes = $tree->
getSubTree($node_data);
86 $all_node_data[] = $node_data;
87 $all_subtree_nodes[] = $subtree_nodes;
90 foreach ($subtree_nodes as $node) {
91 if ($node[
'type'] ===
'rolf') {
94 if (!$rbacsystem->checkAccess(
'delete', $node[
"child"])) {
95 $not_deletable[] = $node[
"child"];
96 $perform_delete =
false;
102 if (is_array($not_deletable) && count($not_deletable) > 0) {
103 $not_deletable_titles = [];
111 $lng->txt(
"msg_no_perm_delete") .
" " . implode(
', ', $not_deletable_titles) .
"<br/>" .
$lng->txt(
"msg_cancel")
116 if (!$all_node_data[0][
"type"]) {
124 $affected_parents = [];
125 foreach ($a_ids as $id) {
127 if (!$throw_error_on_already_deleted) {
130 $log->write(__METHOD__ .
': Object with ref_id: ' . $id .
' already deleted.');
135 $subnodes = $tree->getSubtree($tree->
getNodeData($id));
137 foreach ($subnodes as $subnode) {
138 $rbacadmin->revokePermission((
int) $subnode[
"child"]);
140 $affected_ids[$subnode[
"child"]] = $subnode[
"child"];
141 $affected_parents[$subnode[
"child"]] = $subnode[
"parent"];
147 if (!$tree->
moveToTrash($id,
true, $user->getId())) {
148 $log->write(__METHOD__ .
': Object with ref_id: ' . $id .
' already deleted.');
153 $log->write(
"ilObjectGUI::confirmedDeleteObject(), moved ref_id " . $id .
160 foreach ($affected_ids as $aid) {
161 $ilAppEventHandler->raise(
167 "old_parent_ref_id" => $affected_parents[$aid]
173 self::removeObjectsFromSystem($a_ids);
188 bool $a_from_recovery_folder =
false 192 $ilLog = $DIC[
"ilLog"];
193 $ilAppEventHandler = $DIC[
"ilAppEventHandler"];
194 $tree = $DIC->repositoryTree();
195 $logger = $DIC->logger()->rep();
202 $a_ref_ids = array_map(
'intval', $a_ref_ids);
203 foreach ($a_ref_ids as
$id) {
206 if (!$a_from_recovery_folder) {
208 $tree_id = end($trees);
211 $saved_tree =
new ilTree($tree_id);
212 $node_data = $saved_tree->getNodeData($id);
213 $subtree_nodes = $saved_tree->getSubTree($node_data);
219 $subtree_nodes = $tree->
getSubTree($node_data);
225 $tree = $DIC->repositoryTree();
228 $node_data[
'obj_id'],
236 if (!$a_from_recovery_folder) {
243 self::removeDeletedNodes($id, $checked,
true, $affected_ids);
245 foreach ($subtree_nodes as $node) {
251 'delete obj_id: ' . $node_obj->getId() .
252 ', ref_id: ' . $node_obj->getRefId() .
253 ', type: ' . $node_obj->getType() .
254 ', title: ' . $node_obj->getTitle()
256 $affected_ids[$node[
"ref_id"]] = [
257 "ref_id" => $node[
"ref_id"],
258 "obj_id" => $node_obj->getId(),
259 "type" => $node_obj->getType(),
260 "old_parent_ref_id" => $node[
"parent"]
267 if (!$a_from_recovery_folder || $node_obj->getType() !==
"fold") {
273 if (!$a_from_recovery_folder) {
275 $saved_tree->deleteTree($node_data);
282 'deleted tree, tree_id: ' . $node_data[
'tree'] .
283 ', child: ' . $node_data[
'child']
288 foreach ($affected_ids as $aid) {
289 $ilAppEventHandler->raise(
293 "obj_id" => $aid[
"obj_id"],
294 "ref_id" => $aid[
"ref_id"],
295 "type" => $aid[
"type"],
296 "old_parent_ref_id" => $aid[
"old_parent_ref_id"]
308 bool $a_delete_objects,
309 array &$a_affected_ids
313 $ilLog = $DIC[
"ilLog"];
314 $ilDB = $DIC->database();
315 $tree = $DIC->repositoryTree();
316 $logger = $DIC->logger()->rep();
323 ' AND tree = -1 * child' ;
325 $r =
$ilDB->query($q);
327 while ($row =
$ilDB->fetchObject($r)) {
329 if (!in_array($row->tree, $a_checked)) {
330 $deleted_tree =
new ilTree($row->tree);
331 $a_checked[] = $row->tree;
334 $del_node_data = $deleted_tree->getNodeData($row->tree);
335 $del_subtree_nodes = $deleted_tree->getSubTree($del_node_data);
337 self::removeDeletedNodes($row->tree, $a_checked, $a_delete_objects, $a_affected_ids);
339 if ($a_delete_objects) {
340 foreach ($del_subtree_nodes as $node) {
343 'removeDeletedNodes: delete obj_id: ' . $node_obj->getId() .
344 ', ref_id: ' . $node_obj->getRefId() .
345 ', type: ' . $node_obj->getType() .
346 ', title: ' . $node_obj->getTitle()
348 $a_affected_ids[$node[
"ref_id"]] = [
349 "ref_id" => $node[
"ref_id"],
350 "obj_id" => $node_obj->getId(),
351 "type" => $node_obj->getType(),
352 "old_parent_ref_id" => $node[
"parent"]
358 $trash_tree =
new ilTree($del_node_data[
'tree']);
359 $trash_tree->deleteTree($del_node_data);
361 'removeDeltedNodes: deleted tree, tree_id: ' . $del_node_data[
'tree'] .
362 ', child: ' . $del_node_data[
'child']
382 $rbacsystem = $DIC->rbac()->system();
383 $ilAppEventHandler = $DIC[
"ilAppEventHandler"];
384 $lng = $DIC->language();
385 $tree = $DIC->repositoryTree();
391 foreach ($a_ref_ids as
$id) {
394 if (!$rbacsystem->checkAccess(
'create', $a_cur_ref_id, $obj_data->getType())) {
399 if (count($no_create)) {
405 foreach ($a_ref_ids as $id) {
411 $tree_id = $tree_ids[0];
412 self::insertSavedNodes($id, $a_cur_ref_id, $tree_id, $affected_ids);
438 foreach ($affected_ids as $id) {
440 $ilAppEventHandler->raise(
455 array &$a_affected_ids
459 $tree = $DIC->repositoryTree();
461 ilLoggerFactory::getLogger(
'rep')->debug(
'Restoring from trash: source_id: ' . $a_source_id .
', dest_id: ' . $a_dest_id .
', tree_id:' . $a_tree_id);
465 $saved_tree =
new ilTree($a_tree_id);
466 $childs = $saved_tree->getChilds($a_source_id);
478 $lroles =
$GLOBALS[
'rbacreview']->getRolesOfRoleFolder($a_source_id,
true);
479 foreach ($lroles as $role_id) {
481 $role->setParent($a_source_id);
485 $ref_obj->setPermissions($a_dest_id);
488 foreach ($childs as $child) {
489 self::insertSavedNodes($child[
"child"], $a_source_id, $a_tree_id, $a_affected_ids);
506 $set =
$ilDB->query(
"SELECT child" .
508 " JOIN object_reference ref ON (tree.child = ref.ref_id)" .
509 " JOIN object_data od ON (od.obj_id = ref.obj_id)" .
510 " WHERE tree.tree < " .
$ilDB->quote(0,
"integer") .
511 " AND od.type = " .
$ilDB->quote($a_type,
"text"));
512 while ($row =
$ilDB->fetchAssoc($set)) {
513 $res[] = $row[
"child"];
524 $set =
$ilDB->query(
"SELECT obj_id" .
525 " FROM object_data " .
526 " WHERE type = " .
$ilDB->quote(
"typ",
"text") .
527 " AND title = " .
$ilDB->quote($a_type,
"text"));
528 $row =
$ilDB->fetchAssoc($set);
529 return (
int) $row[
"obj_id"];
542 if ($ref_ids_in_tree) {
543 self::deleteObjects(0, $ref_ids_in_tree);
548 if ($ref_ids_in_trash) {
549 self::removeObjectsFromSystem($ref_ids_in_trash);
558 $ilDB->manipulate(
"DELETE FROM object_data" .
559 " WHERE obj_id = " .
$ilDB->quote($type_id,
"integer"));
564 $ilDB->manipulate(
"DELETE FROM rbac_ta" .
565 " WHERE typ_id = " .
$ilDB->quote($type_id,
"integer")
569 $set =
$ilDB->query(
"SELECT ops_id" .
570 " FROM rbac_operations " .
571 " WHERE class = " .
$ilDB->quote(
"create",
"text") .
572 " AND operation = " .
$ilDB->quote(
"create_" . $a_type,
"text"));
573 $row =
$ilDB->fetchAssoc($set);
574 $create_ops_id = $row[
"ops_id"];
575 if ($create_ops_id) {
576 $ilDB->manipulate(
"DELETE FROM rbac_operations" .
577 " WHERE ops_id = " .
$ilDB->quote($create_ops_id,
"integer"));
579 $ilDB->manipulate(
"DELETE FROM rbac_templates" .
580 " WHERE ops_id = " .
$ilDB->quote($create_ops_id,
"integer"));
583 foreach ([
"root",
"cat",
"crs",
"grp",
"fold"] as $parent_type) {
585 if ($parent_type_id) {
586 $ilDB->manipulate(
"DELETE FROM rbac_ta" .
587 " WHERE typ_id = " .
$ilDB->quote($parent_type_id,
"integer") .
588 " AND ops_id = " .
$ilDB->quote($create_ops_id,
"integer"));
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static deleteObjects(int $a_cur_ref_id, array $a_ids, bool $throw_error_on_already_deleted=true)
Delete objects.
getNodeData(int $a_node_id, ?int $a_tree_pk=null)
get all information of a node.
static getLogger(string $a_component_id)
Get component logger.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _handleDelete(array $a_subbtree_nodes)
handle delete Objects that are moved to the trash call ECS-Remove
isDeleted(int $a_node_id)
This is a wrapper for isSaved() with a more useful name.
useCache(bool $a_use=true)
Use Cache (usually activated)
static lookupTreesForNode(int $node_id)
deleteTree(array $a_node)
delete node and the whole subtree under this node
static _lookupObjId(int $ref_id)
static deleteObjectType(string $a_type)
deleteObjectType(string $a_type)
static _lookupTitle(int $obj_id)
static restoreObjects(int $a_cur_ref_id, array $a_ref_ids)
Move objects from trash back to repository.
static getInstanceByRefId(int $ref_id, bool $stop_on_error=true)
get an instance of an Ilias object by reference id
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
static _recordWriteEvent(int $obj_id, int $usr_id, string $action, ?int $parent_obj_id=null)
Records a write event.
getParentId(int $a_node_id)
get parent id of given node
static removeObjectsFromSystem(array $a_ref_ids, bool $a_from_recovery_folder=false)
remove objects from trash bin and all entries therefore every object needs a specific deleteObject() ...
getObjectTypeId(string $a_type)
insertNodeFromTrash(int $a_source_id, int $a_target_id, int $a_tree_id, int $a_pos=self::POS_LAST_NODE, bool $a_reset_deleted_date=false)
Insert node from trash deletes trash entry.
findTypeInTrash(string $a_type)
static removeDeletedNodes(int $a_node_id, array $a_checked, bool $a_delete_objects, array &$a_affected_ids)
Remove already deleted objects within the objects in trash.
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
getSubTree(array $a_node, bool $a_with_data=true, array $a_type=[])
get all nodes in the subtree under specified node
static _catchupWriteEvents(int $obj_id, int $usr_id, ?string $timestamp=null)
Catches up with all write events which occured before the specified timestamp.
static clear(string $a_var)
static insertSavedNodes(int $a_source_id, int $a_dest_id, int $a_tree_id, array &$a_affected_ids)
Recursive method to insert all saved nodes of the clipboard.
moveToTrash(int $a_node_id, bool $a_set_deleted=false, int $a_deleted_by=0)
Move node to trash bin.