1 | <?php |
||||
2 | /** |
||||
3 | * Default entity delete action |
||||
4 | */ |
||||
5 | $guid = (int) get_input('guid'); |
||||
6 | $entity = get_entity($guid); |
||||
7 | |||||
8 | if (!$entity instanceof ElggEntity) { |
||||
1 ignored issue
–
show
introduced
by
Loading history...
|
|||||
9 | return elgg_error_response(elgg_echo('entity:delete:item_not_found')); |
||||
10 | } |
||||
11 | |||||
12 | if (!$entity->canDelete() || $entity instanceof ElggPlugin || $entity instanceof ElggSite) { |
||||
13 | return elgg_error_response(elgg_echo('entity:delete:permission_denied')); |
||||
14 | } |
||||
15 | |||||
16 | set_time_limit(0); |
||||
17 | |||||
18 | // determine what name to show on success |
||||
19 | $display_name = $entity->getDisplayName() ?: elgg_echo('entity:delete:item'); |
||||
20 | |||||
21 | $type = $entity->getType(); |
||||
22 | $subtype = $entity->getSubtype(); |
||||
23 | $container = $entity->getContainerEntity(); |
||||
24 | |||||
25 | if (!$entity->delete()) { |
||||
26 | return elgg_error_response(elgg_echo('entity:delete:fail', [$display_name])); |
||||
27 | } |
||||
28 | |||||
29 | // determine forward URL |
||||
30 | $forward_url = elgg_normalize_site_url(get_input('forward_url')); |
||||
31 | if (!$forward_url) { |
||||
32 | $forward_url = REFERER; |
||||
33 | $referrer_url = $_SERVER['HTTP_REFERER'] ?: ''; |
||||
34 | $site_url = elgg_get_site_url(); |
||||
35 | |||||
36 | $find_forward_url = function (ElggEntity $container = null) use ($type, $subtype) { |
||||
37 | $routes = _elgg_services()->routes; |
||||
38 | |||||
39 | // check if there is a collection route (eg. blog/owner/username) |
||||
40 | $route_name = false; |
||||
41 | if ($container instanceof ElggUser) { |
||||
42 | $route_name = "collection:{$type}:{$subtype}:owner"; |
||||
43 | } elseif ($container instanceof ElggGroup) { |
||||
44 | $route_name = "collection:{$type}:{$subtype}:group"; |
||||
45 | } |
||||
46 | |||||
47 | if ($route_name && $routes->get($route_name)) { |
||||
48 | $params = $routes->resolveRouteParameters($route_name, $container); |
||||
49 | |||||
50 | return elgg_generate_url($route_name, $params); |
||||
1 ignored issue
–
show
It seems like
$params can also be of type false ; however, parameter $parameters of elgg_generate_url() does only seem to accept array , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||
51 | } |
||||
52 | |||||
53 | // no route found, fallback to container url |
||||
54 | if ($container instanceof ElggEntity) { |
||||
55 | return $container->getURL(); |
||||
56 | } |
||||
57 | |||||
58 | // no container |
||||
59 | return ''; |
||||
60 | }; |
||||
61 | |||||
62 | if ($referrer_url && 0 == strpos($referrer_url, $site_url)) { |
||||
63 | // referer is on current site |
||||
64 | $referrer_path = substr($referrer_url, strlen($site_url)); |
||||
65 | $segments = explode('/', $referrer_path); |
||||
66 | |||||
67 | if (in_array($guid, $segments)) { |
||||
68 | // referrer URL contains a reference to the entity that will be deleted |
||||
69 | $forward_url = $find_forward_url($container); |
||||
70 | } |
||||
71 | } elseif ($container) { |
||||
1 ignored issue
–
show
|
|||||
72 | $forward_url = $find_forward_url($container); |
||||
73 | } |
||||
74 | } |
||||
75 | |||||
76 | $success_keys = [ |
||||
77 | "entity:delete:$type:$subtype:success", |
||||
78 | "entity:delete:$type:success", |
||||
79 | "entity:delete:success", |
||||
80 | ]; |
||||
81 | |||||
82 | $message = ''; |
||||
83 | foreach ($success_keys as $success_key) { |
||||
84 | if (elgg_language_key_exists($success_key)) { |
||||
85 | $message = elgg_echo($success_key, [$display_name]); |
||||
86 | break; |
||||
87 | } |
||||
88 | } |
||||
89 | |||||
90 | return elgg_ok_response('', $message, $forward_url); |
||||
91 |