Fixes calls to auth_user_* from ml moderation cron.
[platal.git] / bin / cron / compliance.php
CommitLineData
3eecf0af
VZ
1#!/usr/bin/php5 -q
2<?php
3/***************************************************************************
9f5bd98e 4* Copyright (C) 2003-2010 Polytechnique.org *
3eecf0af
VZ
5* http://opensource.polytechnique.org/ *
6* *
7* This program is free software; you can redistribute it and/or modify *
8* it under the terms of the GNU General Public License as published by *
9* the Free Software Foundation; either version 2 of the License, or *
10* (at your option) any later version. *
11* *
12* This program is distributed in the hope that it will be useful, *
13* but WITHOUT ANY WARRANTY; without even the implied warranty of *
14* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15* GNU General Public License for more details. *
16* *
17* You should have received a copy of the GNU General Public License *
18* along with this program; if not, write to the Free Software *
19* Foundation, Inc., *
20* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
21***************************************************************************/
22
23require('./connect.db.inc.php');
24
25/**
26 * Discards from the logger database session details for users.
27 *
28 * @param userPerms Permission level to use for that round of discards.
29 * @param retentionPeriod Minimal number of months to keep entries for.
30 * @param minimalBacklog Minimal number of entries to keep for any given user,
31 * no matter what.
32 */
33function discardExpiredSessions($userPerms, $retentionPeriod, $minimalBacklog) {
34 XDB::execute(
6586a74f
FB
35 "DELETE s
36 FROM log_sessions AS s
3eecf0af
VZ
37 JOIN (SELECT u.user_id,
38 (SELECT us.start
6586a74f 39 FROM log_sessions AS us
3eecf0af
VZ
40 WHERE us.uid = u.user_id
41 ORDER BY us.start DESC
42 LIMIT {?}, 1) AS no_discard_limit
00112b2e 43 FROM #x4dat#.auth_user_md5 AS u
3eecf0af
VZ
44 WHERE u.perms = {?}
45 ORDER BY u.user_id ASC) AS ut ON (ut.user_id = s.uid)
46 WHERE s.start < DATE_SUB(NOW(), INTERVAL {?} MONTH)
47 AND s.start < ut.no_discard_limit",
48 $minimalBacklog - 1, $userPerms, $retentionPeriod);
49
50 $affectedRows = XDB::affectedRows();
51 echo "Users with permission '$userPerms': removed $affectedRows sessions.\n";
52}
53
54/**
55 * Checks for sessions without a valid associated user id.
56 */
57function checkOrphanedSessions() {
58 $res = XDB::query(
59 "SELECT COUNT(*)
6586a74f 60 FROM log_sessions AS s
00112b2e 61 LEFT JOIN #x4dat#.auth_user_md5 AS u ON (u.user_id = s.uid)
3eecf0af
VZ
62 WHERE u.user_id IS NULL");
63 if (($count = $res->fetchOneCell())) {
64 echo "Orphaned sessions: found $count orphaned sessions. Please fix that.\n";
65 }
66}
67
68/**
69 * Purges session events without a valid session.
70 */
71function purgeOrphanedEvents() {
72 XDB::execute(
6586a74f
FB
73 "DELETE e
74 FROM log_events AS e
75 LEFT JOIN log_sessions AS s ON (s.id = e.session)
3eecf0af
VZ
76 WHERE s.id IS NULL");
77 $affectedRows = XDB::affectedRows();
78 echo "Orphaned events: removed $affectedRows events.\n";
79}
80
81// Remove expired sessions.
82// For normal user, we only keep 12 months of data (and at least the last two sessions).
83// For administrator, we also keep data for 12 months, but with a backlog of at least 20 sessions.
84// For disabled users, we keep data for 5 years, and with a backlog of at least 2 sessions.
85// For other users, no data are discarded.
86discardExpiredSessions('user', 12, 2);
87discardExpiredSessions('admin', 12, 20);
88discardExpiredSessions('disabled', 60, 2);
89
90// Purge orphaned entries; events are purged automatically, sessions require explicit
91// action from the administrator.
92checkOrphanedSessions();
93purgeOrphanedEvents();
94
95// Many rows have been removed from the two logger tables. Let's optimize them.
6586a74f
FB
96XDB::execute("OPTIMIZE TABLE log_events");
97XDB::execute("OPTIMIZE TABLE log_sessions");
3eecf0af
VZ
98
99// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
100?>