1 | <?php |
||||||||||
2 | /** |
||||||||||
3 | * Elgg garbage collector. |
||||||||||
4 | * |
||||||||||
5 | * @package ElggGarbageCollector |
||||||||||
6 | */ |
||||||||||
7 | |||||||||||
8 | /** |
||||||||||
9 | * Garbage collection init |
||||||||||
10 | * |
||||||||||
11 | * @return void |
||||||||||
12 | */ |
||||||||||
13 | function garbagecollector_init() { |
||||||||||
14 | 31 | $period = elgg_get_plugin_setting('period', 'garbagecollector'); |
|||||||||
15 | 31 | switch ($period) { |
|||||||||
16 | 31 | case 'weekly': |
|||||||||
17 | 31 | case 'monthly': |
|||||||||
18 | 31 | case 'yearly': |
|||||||||
19 | break; |
||||||||||
20 | default: |
||||||||||
21 | 31 | $period = 'monthly'; |
|||||||||
22 | } |
||||||||||
23 | |||||||||||
24 | // Register cron hook |
||||||||||
25 | 31 | elgg_register_plugin_hook_handler('cron', $period, 'garbagecollector_cron'); |
|||||||||
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||||||||||
26 | 31 | } |
|||||||||
27 | |||||||||||
28 | /** |
||||||||||
29 | * Cron job |
||||||||||
30 | * |
||||||||||
31 | * @param string $hook 'cron' |
||||||||||
32 | * @param string $type interval |
||||||||||
33 | * @param mixed $returnvalue current return value |
||||||||||
34 | * @param array $params supplied params |
||||||||||
35 | * |
||||||||||
36 | * @return void |
||||||||||
37 | */ |
||||||||||
38 | function garbagecollector_cron($hook, $type, $returnvalue, $params) { |
||||||||||
3 ignored issues
–
show
The parameter
$hook is not used and could be removed.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check looks for parameters that have been defined for a function or method, but which are not used in the method body.
Loading history...
The parameter
$params is not used and could be removed.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check looks for parameters that have been defined for a function or method, but which are not used in the method body.
Loading history...
The parameter
$type is not used and could be removed.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check looks for parameters that have been defined for a function or method, but which are not used in the method body.
Loading history...
The parameter
$returnvalue is not used and could be removed.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check looks for parameters that have been defined for a function or method, but which are not used in the method body.
Loading history...
|
|||||||||||
39 | |||||||||||
40 | echo elgg_echo('garbagecollector') . "\n"; |
||||||||||
41 | |||||||||||
42 | // Now, because we are nice, trigger a plugin hook to let other plugins do some GC |
||||||||||
43 | $rv = true; |
||||||||||
0 ignored issues
–
show
|
|||||||||||
44 | $period = elgg_get_plugin_setting('period', 'garbagecollector'); |
||||||||||
45 | elgg_trigger_plugin_hook('gc', 'system', ['period' => $period]); |
||||||||||
46 | |||||||||||
47 | // Now we optimize all tables |
||||||||||
48 | $tables = garbagecollector_get_tables(); |
||||||||||
49 | foreach ($tables as $table) { |
||||||||||
50 | echo elgg_echo('garbagecollector:optimize', [$table]); |
||||||||||
51 | |||||||||||
52 | if (garbagecollector_optimize_table($table) !== false) { |
||||||||||
53 | echo elgg_echo('ok'); |
||||||||||
54 | } else { |
||||||||||
55 | echo elgg_echo('error'); |
||||||||||
56 | } |
||||||||||
57 | |||||||||||
58 | echo "\n"; |
||||||||||
59 | } |
||||||||||
60 | |||||||||||
61 | echo elgg_echo('garbagecollector:done'); |
||||||||||
62 | } |
||||||||||
63 | |||||||||||
64 | /** |
||||||||||
65 | * Get array of table names |
||||||||||
66 | * |
||||||||||
67 | * @return array |
||||||||||
68 | */ |
||||||||||
69 | function garbagecollector_get_tables() { |
||||||||||
70 | static $tables; |
||||||||||
71 | |||||||||||
72 | if (isset($tables)) { |
||||||||||
73 | return $tables; |
||||||||||
74 | } |
||||||||||
75 | |||||||||||
76 | $table_prefix = elgg_get_config('dbprefix'); |
||||||||||
77 | $result = get_data("SHOW TABLES LIKE '$table_prefix%'"); |
||||||||||
78 | |||||||||||
79 | $tables = []; |
||||||||||
80 | if (is_array($result) && !empty($result)) { |
||||||||||
81 | foreach ($result as $row) { |
||||||||||
82 | $row = (array) $row; |
||||||||||
83 | if (is_array($row) && !empty($row)) { |
||||||||||
84 | foreach ($row as $element) { |
||||||||||
85 | $tables[] = $element; |
||||||||||
86 | } |
||||||||||
87 | } |
||||||||||
88 | } |
||||||||||
89 | } |
||||||||||
90 | |||||||||||
91 | return $tables; |
||||||||||
92 | } |
||||||||||
93 | |||||||||||
94 | /** |
||||||||||
95 | * Optimize a table |
||||||||||
96 | * |
||||||||||
97 | * @param string $table Database table name |
||||||||||
98 | * @return bool |
||||||||||
99 | */ |
||||||||||
100 | function garbagecollector_optimize_table($table) { |
||||||||||
101 | $table = sanitise_string($table); |
||||||||||
102 | return update_data("OPTIMIZE TABLE $table"); |
||||||||||
103 | } |
||||||||||
104 | |||||||||||
105 | return function() { |
||||||||||
106 | 18 | elgg_register_event_handler('init', 'system', 'garbagecollector_init'); |
|||||||||
107 | }; |
||||||||||
108 |