X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FWorker%2FExpireAndRemoveUsers.php;h=491ac5d64b77f6b7fdce56e29be91f09bfaaae71;hb=38cf0666bd7a6537a5a6af19b5bd6073ef12e82f;hp=1fda31a179f479280ce2c7e6cd8c954cf28f5272;hpb=d2eac8afd904db595bf99c071536951cad47b938;p=friendica.git diff --git a/src/Worker/ExpireAndRemoveUsers.php b/src/Worker/ExpireAndRemoveUsers.php index 1fda31a179..491ac5d64b 100644 --- a/src/Worker/ExpireAndRemoveUsers.php +++ b/src/Worker/ExpireAndRemoveUsers.php @@ -1,6 +1,6 @@ ? AND `account_expires_on` < UTC_TIMESTAMP() AND `page-flags` = 0", DBA::NULL_DATETIME]; + $condition = ["NOT `account_expired` AND `account_expires_on` > ? AND `account_expires_on` < ? AND `page-flags` = ? AND `uid` != ?", + DBA::NULL_DATETIME, DateTimeFormat::utcNow(), User::PAGE_FLAGS_NORMAL, 0]; DBA::update('user', ['account_expired' => true], $condition); + // Ensure to never remove the user with uid=0 + DBA::update('user', ['account_expired' => false, 'account_removed' => false, + 'account_expires_on' => DBA::NULL_DATETIME], ['uid' => 0]); + // Remove any freshly expired account $users = DBA::select('user', ['uid'], ['account_expired' => true, 'account_removed' => false]); while ($user = DBA::fetch($users)) { - User::remove($user['uid']); + if ($user['uid'] != 0) { + User::remove($user['uid']); + } } DBA::close($users); // delete user records for recently removed accounts - $users = DBA::select('user', ['uid'], ["`account_removed` AND `account_expires_on` < UTC_TIMESTAMP() "]); + $users = DBA::select('user', ['uid'], ["`account_removed` AND `account_expires_on` < ? AND `uid` != ?", DateTimeFormat::utcNow(), 0]); while ($user = DBA::fetch($users)) { + // We have to delete photo entries by hand because otherwise the photo data won't be deleted + Photo::delete(['uid' => $user['uid']]); + // Delete the contacts of this user $self = DBA::selectFirst('contact', ['nurl'], ['self' => true, 'uid' => $user['uid']]); if (DBA::isResult($self)) { DBA::delete('contact', ['nurl' => $self['nurl'], 'self' => false]); } + // Delete all contacts of this user + DBA::delete('contact', ['uid' => $user['uid']]); + + // These tables contain the permissionset which will also be deleted when a user is deleted. + // It seems that sometimes the system wants to delete the records in the wrong order. + // So when the permissionset is deleted and these tables are still filled then an error is thrown. + // So we now delete them before all other user related entries are deleted. + if (DBStructure::existsTable('item')) { + DBA::delete('item', ['uid' => $user['uid']]); + } + DBA::delete('post-user', ['uid' => $user['uid']]); + DBA::delete('profile_field', ['uid' => $user['uid']]); + DBA::delete('user', ['uid' => $user['uid']]); } DBA::close($users);