Skip to content

Commit

Permalink
chore(trash): usage of ELGG_SHOW_DELETED_ENTITIES
Browse files Browse the repository at this point in the history
  • Loading branch information
jeabakker committed Apr 2, 2024
1 parent 89a07e1 commit 220c7bb
Show file tree
Hide file tree
Showing 105 changed files with 1,629 additions and 1,060 deletions.
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
/vendor

# don't ignore bundled plugins
!/mod/bin
!/mod/activity
!/mod/blog/
!/mod/bookmarks/
Expand Down
14 changes: 8 additions & 6 deletions actions/admin/site/settings.php
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,14 @@
elgg_save_config('pagination_behaviour', get_input('pagination_behaviour', 'ajax-replace'));
elgg_save_config('mentions_display_format', get_input('mentions_display_format'));

$trash_retention = (int) get_input('trash_retention', 30);
if ($trash_retention < 0) {
$trash_retention = 30;
}

elgg_save_config('trash_retention', $trash_retention);
elgg_save_config('trash_enabled', (bool) get_input('trash_enabled'));

elgg_save_config('user_joined_river', get_input('user_joined_river') === 'on');
elgg_save_config('can_change_username', get_input('can_change_username') === 'on');

Expand Down Expand Up @@ -131,13 +139,7 @@
$friendly_time_number_of_days = 30;
}

$bin_cleanup_grace_period = get_input('bin_cleanup_grace_period', 30);
if ($bin_cleanup_grace_period === '') {
$bin_cleanup_grace_period = 30;
}

elgg_save_config('friendly_time_number_of_days', (int) $friendly_time_number_of_days);
elgg_save_config('bin_cleanup_grace_period', (int) $bin_cleanup_grace_period);
elgg_save_config('message_delay', (int) get_input('message_delay', 6));

elgg_invalidate_caches();
Expand Down
2 changes: 1 addition & 1 deletion actions/admin/user/bulk/delete.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
return elgg_error_response(elgg_echo('error:missing_data'));
}

elgg_call(ELGG_SHOW_DISABLED_ENTITIES, function() use ($user_guids) {
elgg_call(ELGG_SHOW_DISABLED_ENTITIES | ELGG_SHOW_DELETED_ENTITIES, function() use ($user_guids) {
foreach ($user_guids as $user_guid) {
$user = get_user($user_guid);
if (empty($user)) {
Expand Down
4 changes: 2 additions & 2 deletions actions/admin/user/delete.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
return elgg_error_response(elgg_echo('admin:user:self:delete:no'));
}

$user = elgg_call(ELGG_SHOW_DISABLED_ENTITIES, function() use ($guid) {
$user = elgg_call(ELGG_SHOW_DISABLED_ENTITIES | ELGG_SHOW_DELETED_ENTITIES, function() use ($guid) {
return get_user($guid);
});
if (!$user || !$user->canDelete()) {
Expand All @@ -22,7 +22,7 @@
$name = $user->getDisplayName();
$username = $user->username;

$deleted = elgg_call(ELGG_SHOW_DISABLED_ENTITIES, function() use ($user) {
$deleted = elgg_call(ELGG_SHOW_DISABLED_ENTITIES | ELGG_SHOW_DELETED_ENTITIES, function() use ($user) {
return $user->delete();
});
if (!$deleted) {
Expand Down
93 changes: 24 additions & 69 deletions actions/entity/chooserestoredestination.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,90 +5,45 @@
*/

$guid = (int) get_input('entity_guid');
$deleter_guid = (int) get_input('deleter_guid');
$destination_container_guid = (int) get_input('destination_container_guid');
$destination_container_guid = (array) get_input('destination_container_guid');
$destination_container_guid = array_filter($destination_container_guid, function($value) {
return is_numeric($value);
});
$destination_container_guid = array_map(function($value) {
return (int) $value;
}, $destination_container_guid);

if (empty($guid) || empty($destination_container_guid)) {
return elgg_error_response(elgg_echo('error:missing_data'));
}

$entity = elgg_call(ELGG_SHOW_DELETED_ENTITIES, function () use ($guid) {
return get_entity($guid);
});
if (!$entity instanceof \ElggEntity) {
if (!$entity instanceof \ElggEntity || $entity->deleted !== 'yes') {
return elgg_error_response(elgg_echo('entity:restore:item_not_found'));
}

set_time_limit(0);
$new_container = get_entity($destination_container_guid[0]);
if (!$new_container instanceof \ElggEntity || !$new_container->canWriteToContainer(0, $entity->type, $entity->subtype)) {
return elgg_error_response(elgg_echo('actionunauthorized'));
}

// determine what name to show on success
$display_name = $entity->getDisplayName() ?: elgg_echo('entity:restore:item');

if ($entity->soft_deleted === 'yes') {
// restore-and-move: move the entity to new container. Currently NOT fail-safe against fail restore.
if (!$entity->restore(false)) {
return elgg_error_response(elgg_echo('entity:restore:fail', [$display_name]));
}

if (!$entity->overrideEntityContainerID($destination_container_guid)) {
return elgg_error_response(elgg_echo('entity:restore:fail', [$display_name]));
}
}

$type = $entity->getType();
$subtype = $entity->getSubtype();
$container = $entity->getContainerEntity();

// determine forward URL
$forward_url = get_input('forward_url');
if (!empty($forward_url)) {
$forward_url = elgg_normalize_site_url((string) $forward_url);
if (!$entity->restore()) {
return elgg_error_response(elgg_echo('entity:restore:fail', [$display_name]));
}

if (empty($forward_url)) {
$forward_url = REFERRER;
$referrer_url = elgg_extract('HTTP_REFERER', $_SERVER, '');
$site_url = elgg_get_site_url();

$find_forward_url = function (\ElggEntity $container = null) use ($type, $subtype) {
$routes = _elgg_services()->routes;

// check if there is a collection route (eg. blog/owner/username)
$route_name = false;
if ($container instanceof \ElggUser) {
$route_name = "collection:{$type}:{$subtype}:owner";
} elseif ($container instanceof \ElggGroup) {
$route_name = "collection:{$type}:{$subtype}:group";
}

if ($route_name && $routes->get($route_name)) {
$params = $routes->resolveRouteParameters($route_name, $container);

return elgg_generate_url($route_name, $params);
}

// no route found, fallback to container url
if ($container instanceof \ElggEntity) {
return $container->getURL();
}

// no container
return '';
};

if (!empty($referrer_url) && elgg_strpos($referrer_url, $site_url) === 0) {
// referer is on current site
$referrer_path = elgg_substr($referrer_url, elgg_strlen($site_url));
$segments = explode('/', $referrer_path);

if (in_array($guid, $segments)) {
// referrer URL contains a reference to the entity that will be deleted
$forward_url = $find_forward_url($container);
}
} elseif ($container instanceof \ElggEntity) {
$forward_url = $find_forward_url($container);
}
$entity->container_guid = $new_container->guid;
if (!$entity->save()) {
return elgg_error_response(elgg_echo('entity:restore:fail', [$display_name]));
}

$success_keys = [
"entity:restore:{$type}:{$subtype}:success",
"entity:restore:{$type}:success",
"entity:restore:{$entity->type}:{$entity->subtype}:success",
"entity:restore:{$entity->type}:success",
'entity:restore:success',
];

Expand All @@ -102,4 +57,4 @@
}
}

return elgg_ok_response('', $message, $forward_url);
return elgg_ok_response('', $message);
14 changes: 2 additions & 12 deletions actions/entity/delete.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
*/

$guid = (int) get_input('guid');
$deleter_guid = (int) get_input('deleter_guid');
$entity = elgg_call(ELGG_SHOW_DELETED_ENTITIES, function() use ($guid) {
return get_entity($guid);
});
Expand All @@ -16,24 +15,15 @@
return elgg_error_response(elgg_echo('entity:delete:permission_denied'));
}

set_time_limit(0);

// determine what name to show on success
$display_name = $entity->getDisplayName() ?: elgg_echo('entity:delete:item');

$type = $entity->getType();
$subtype = $entity->getSubtype();
$container = $entity->getContainerEntity();

$non_recursive_delete = (bool) get_input('recursive', true);
if ($entity->soft_deleted === 'no' && $entity->hasCapability('soft_deletable')) {
if (!$entity->softDelete($deleter_guid)) {
return elgg_error_response(elgg_echo('entity:delete:fail', [$display_name]));
}
} else {
if (!$entity->delete($non_recursive_delete)) {
return elgg_error_response(elgg_echo('entity:delete:fail', [$display_name]));
}
if (!$entity->delete(true, true)) {
return elgg_error_response(elgg_echo('entity:delete:fail', [$display_name]));
}

// determine forward URL
Expand Down
76 changes: 9 additions & 67 deletions actions/entity/restore.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,85 +4,27 @@
*/

$guid = (int) get_input('guid');
$deleter_guid = (int) get_input('deleter_guid');
$recursive = (bool) get_input('recursive', true);

$entity = elgg_call(ELGG_SHOW_DELETED_ENTITIES, function() use ($guid) {
return get_entity($guid);
});
if (!$entity instanceof \ElggEntity) {
if (!$entity instanceof \ElggEntity || $entity->deleted !== 'yes') {
return elgg_error_response(elgg_echo('entity:restore:item_not_found'));
}

set_time_limit(0);
if (!$entity->canEdit()) {
return elgg_error_response(elgg_echo('actionunauthorized'));
}

// determine what name to show on success
$display_name = $entity->getDisplayName() ?: elgg_echo('entity:restore:item');

$type = $entity->getType();
$subtype = $entity->getSubtype();
$container = $entity->getContainerEntity();

if ($entity->soft_deleted === 'yes') {
if (!$entity->restore($recursive)) {
return elgg_error_response(elgg_echo('entity:restore:fail', [$display_name]));
}
}

// determine forward URL
$forward_url = get_input('forward_url');
if (!empty($forward_url)) {
$forward_url = elgg_normalize_site_url((string) $forward_url);
}

if (empty($forward_url)) {
$forward_url = REFERRER;
$referrer_url = elgg_extract('HTTP_REFERER', $_SERVER, '');
$site_url = elgg_get_site_url();

$find_forward_url = function(\ElggEntity $container = null) use ($type, $subtype) {
$routes = _elgg_services()->routes;

// check if there is a collection route (eg. blog/owner/username)
$route_name = false;
if ($container instanceof \ElggUser) {
$route_name = "collection:{$type}:{$subtype}:owner";
} elseif ($container instanceof \ElggGroup) {
$route_name = "collection:{$type}:{$subtype}:group";
}

if ($route_name && $routes->get($route_name)) {
$params = $routes->resolveRouteParameters($route_name, $container);

return elgg_generate_url($route_name, $params);
}

// no route found, fallback to container url
if ($container instanceof \ElggEntity) {
return $container->getURL();
}

// no container
return '';
};

if (!empty($referrer_url) && elgg_strpos($referrer_url, $site_url) === 0) {
// referer is on current site
$referrer_path = elgg_substr($referrer_url, elgg_strlen($site_url));
$segments = explode('/', $referrer_path);

if (in_array($guid, $segments)) {
// referrer URL contains a reference to the entity that will be deleted
$forward_url = $find_forward_url($container);
}
} elseif ($container instanceof \ElggEntity) {
$forward_url = $find_forward_url($container);
}
if (!$entity->restore()) {
return elgg_error_response(elgg_echo('entity:restore:fail', [$display_name]));
}

$success_keys = [
"entity:restore:{$type}:{$subtype}:success",
"entity:restore:{$type}:success",
"entity:restore:{$entity->type}:{$entity->subtype}:success",
"entity:restore:{$entity->type}:success",
'entity:restore:success',
];

Expand All @@ -96,4 +38,4 @@
}
}

return elgg_ok_response('', $message, $forward_url);
return elgg_ok_response('', $message);
Loading

0 comments on commit 220c7bb

Please sign in to comment.