commit | author | age
|
a35062
|
1 |
#!/usr/bin/env php |
T |
2 |
<?php |
|
3 |
/* |
|
4 |
|
|
5 |
+-----------------------------------------------------------------------+ |
30aa4c
|
6 |
| bin/cleandb.sh | |
a35062
|
7 |
| | |
T |
8 |
| This file is part of the RoundCube Webmail client | |
|
9 |
| Copyright (C) 2010, RoundCube Dev. - Switzerland | |
|
10 |
| Licensed under the GNU GPL | |
|
11 |
| | |
|
12 |
| PURPOSE: | |
|
13 |
| Finally remove all db records marked as deleted some time ago | |
|
14 |
| | |
|
15 |
+-----------------------------------------------------------------------+ |
|
16 |
| Author: Thomas Bruederli <roundcube@gmail.com> | |
|
17 |
+-----------------------------------------------------------------------+ |
|
18 |
|
|
19 |
$Id$ |
|
20 |
|
|
21 |
*/ |
|
22 |
|
|
23 |
if (php_sapi_name() != 'cli') { |
|
24 |
die('Not on the "shell" (php-cli).'); |
|
25 |
} |
|
26 |
|
|
27 |
define('INSTALL_PATH', realpath(dirname(__FILE__) . '/..') . '/' ); |
|
28 |
require INSTALL_PATH.'program/include/iniset.php'; |
|
29 |
|
|
30 |
// mapping for table name => primary key |
|
31 |
$primary_keys = array( |
60ff01
|
32 |
'contacts' => "contact_id", |
A |
33 |
'contactgroups' => "contactgroup_id", |
a35062
|
34 |
); |
T |
35 |
|
|
36 |
// connect to DB |
|
37 |
$RCMAIL = rcmail::get_instance(); |
|
38 |
$db = $RCMAIL->get_dbh(); |
|
39 |
|
|
40 |
if (!$db->is_connected() || $db->is_error) |
60ff01
|
41 |
die("No DB connection"); |
a35062
|
42 |
|
5ba5fd
|
43 |
if (!empty($_SERVER['argv'][1])) |
60ff01
|
44 |
$days = intval($_SERVER['argv'][1]); |
5ba5fd
|
45 |
else |
60ff01
|
46 |
$days = 7; |
5ba5fd
|
47 |
|
a35062
|
48 |
// remove all deleted records older than two days |
5ba5fd
|
49 |
$threshold = date('Y-m-d 00:00:00', time() - $days * 86400); |
a35062
|
50 |
|
T |
51 |
foreach (array('contacts','contactgroups','identities') as $table) { |
|
52 |
|
60ff01
|
53 |
$sqltable = get_table_name($table); |
a35062
|
54 |
|
60ff01
|
55 |
// also delete linked records |
A |
56 |
// could be skipped for databases which respect foreign key constraints |
|
57 |
if ($db->db_provider == 'sqlite' |
|
58 |
&& ($table == 'contacts' || $table == 'contactgroups') |
|
59 |
) { |
|
60 |
$pk = $primary_keys[$table]; |
|
61 |
$memberstable = get_table_name('contactgroupmembers'); |
a35062
|
62 |
|
60ff01
|
63 |
$db->query( |
A |
64 |
"DELETE FROM $memberstable". |
|
65 |
" WHERE $pk IN (". |
|
66 |
"SELECT $pk FROM $sqltable". |
|
67 |
" WHERE del=1 AND changed < ?". |
|
68 |
")", |
|
69 |
$threshold); |
a35062
|
70 |
|
60ff01
|
71 |
echo $db->affected_rows() . " records deleted from '$memberstable'\n"; |
a35062
|
72 |
} |
T |
73 |
|
60ff01
|
74 |
// delete outdated records |
A |
75 |
$db->query("DELETE FROM $sqltable WHERE del=1 AND changed < ?", $threshold); |
|
76 |
|
|
77 |
echo $db->affected_rows() . " records deleted from '$table'\n"; |
a35062
|
78 |
} |
T |
79 |
|
|
80 |
?> |