X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FWorker%2FRemoveUnusedContacts.php;h=1cbb3775cd89e197b52f8ca3f6667f6643331ac9;hb=a1d57abfe45d832aa36f9615eea35c6900c6f5b8;hp=0201c54d9921ef69cc9cc10da049b404b8a90daa;hpb=e56a53647bd5469551bf4f9ef2df50a5dd16b943;p=friendica.git diff --git a/src/Worker/RemoveUnusedContacts.php b/src/Worker/RemoveUnusedContacts.php index 0201c54d99..1cbb3775cd 100644 --- a/src/Worker/RemoveUnusedContacts.php +++ b/src/Worker/RemoveUnusedContacts.php @@ -21,11 +21,14 @@ namespace Friendica\Worker; +use Friendica\Contact\Avatar; use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Database\DBA; use Friendica\Database\DBStructure; +use Friendica\Model\Contact; use Friendica\Model\Photo; +use Friendica\Util\DateTimeFormat; /** * Removes public contacts that aren't in use @@ -35,48 +38,53 @@ class RemoveUnusedContacts public static function execute() { $condition = ["`id` != ? AND `uid` = ? AND NOT `self` AND NOT `nurl` IN (SELECT `nurl` FROM `contact` WHERE `uid` != ?) - AND (NOT `network` IN (?, ?, ?, ?, ?, ?) OR (`archive` AND `success_update` < UTC_TIMESTAMP() - INTERVAL ? DAY)) - AND NOT `id` IN (SELECT `author-id` FROM `post-user`) AND NOT `id` IN (SELECT `owner-id` FROM `post-user`) - AND NOT `id` IN (SELECT `causer-id` FROM `post-user`) AND NOT `id` IN (SELECT `cid` FROM `post-tag`) - AND NOT `id` IN (SELECT `contact-id` FROM `post-user`) AND NOT `id` IN (SELECT `cid` FROM `user-contact`) - AND NOT `id` IN (SELECT `cid` FROM `event`) AND NOT `id` IN (SELECT `contact-id` FROM `group_member`) - AND `created` < UTC_TIMESTAMP() - INTERVAL ? DAY", - 0, 0, 0, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, Protocol::FEED, Protocol::MAIL, Protocol::ACTIVITYPUB, 365, 30]; + AND (NOT `network` IN (?, ?, ?, ?, ?, ?) OR (`archive` AND `success_update` < ?)) + AND NOT `id` IN (SELECT `author-id` FROM `post-user` WHERE `author-id` = `contact`.`id`) + AND NOT `id` IN (SELECT `owner-id` FROM `post-user` WHERE `owner-id` = `contact`.`id`) + AND NOT `id` IN (SELECT `causer-id` FROM `post-user` WHERE `causer-id` IS NOT NULL AND `causer-id` = `contact`.`id`) + AND NOT `id` IN (SELECT `cid` FROM `post-tag` WHERE `cid` = `contact`.`id`) + AND NOT `id` IN (SELECT `contact-id` FROM `post-user` WHERE `contact-id` = `contact`.`id`) + AND NOT `id` IN (SELECT `cid` FROM `user-contact` WHERE `cid` = `contact`.`id`) + AND NOT `id` IN (SELECT `cid` FROM `event` WHERE `cid` = `contact`.`id`) + AND NOT `id` IN (SELECT `contact-id` FROM `group_member` WHERE `contact-id` = `contact`.`id`) + AND `created` < ?", + 0, 0, 0, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, Protocol::FEED, Protocol::MAIL, Protocol::ACTIVITYPUB, DateTimeFormat::utc('now - 365 days'), DateTimeFormat::utc('now - 30 days')]; $total = DBA::count('contact', $condition); Logger::notice('Starting removal', ['total' => $total]); $count = 0; - $contacts = DBA::select('contact', ['id', 'uid'], $condition); + $contacts = DBA::select('contact', ['id', 'uid', 'photo', 'thumb', 'micro'], $condition); while ($contact = DBA::fetch($contacts)) { - if (Photo::delete(['uid' => $contact['uid'], 'contact-id' => $contact['id']])) { - if (DBStructure::existsTable('thread')) { - DBA::delete('thread', ['owner-id' => $contact['id']]); - DBA::delete('thread', ['author-id' => $contact['id']]); - } - if (DBStructure::existsTable('item')) { - DBA::delete('item', ['owner-id' => $contact['id']]); - DBA::delete('item', ['author-id' => $contact['id']]); - DBA::delete('item', ['causer-id' => $contact['id']]); - } + Photo::delete(['uid' => $contact['uid'], 'contact-id' => $contact['id']]); + Avatar::deleteCache($contact); - // There should be none entry for the contact in these tables when none was found in "post-user". - // But we want to be sure since the foreign key prohibits deletion otherwise. - DBA::delete('post', ['owner-id' => $contact['id']]); - DBA::delete('post', ['author-id' => $contact['id']]); - DBA::delete('post', ['causer-id' => $contact['id']]); - - DBA::delete('post-thread', ['owner-id' => $contact['id']]); - DBA::delete('post-thread', ['author-id' => $contact['id']]); - DBA::delete('post-thread', ['causer-id' => $contact['id']]); + if (DBStructure::existsTable('thread')) { + DBA::delete('thread', ['owner-id' => $contact['id']]); + DBA::delete('thread', ['author-id' => $contact['id']]); + } + if (DBStructure::existsTable('item')) { + DBA::delete('item', ['owner-id' => $contact['id']]); + DBA::delete('item', ['author-id' => $contact['id']]); + DBA::delete('item', ['causer-id' => $contact['id']]); + } + + // There should be none entry for the contact in these tables when none was found in "post-user". + // But we want to be sure since the foreign key prohibits deletion otherwise. + DBA::delete('post', ['owner-id' => $contact['id']]); + DBA::delete('post', ['author-id' => $contact['id']]); + DBA::delete('post', ['causer-id' => $contact['id']]); + + DBA::delete('post-thread', ['owner-id' => $contact['id']]); + DBA::delete('post-thread', ['author-id' => $contact['id']]); + DBA::delete('post-thread', ['causer-id' => $contact['id']]); - DBA::delete('post-thread-user', ['owner-id' => $contact['id']]); - DBA::delete('post-thread-user', ['author-id' => $contact['id']]); - DBA::delete('post-thread-user', ['causer-id' => $contact['id']]); + DBA::delete('post-thread-user', ['owner-id' => $contact['id']]); + DBA::delete('post-thread-user', ['author-id' => $contact['id']]); + DBA::delete('post-thread-user', ['causer-id' => $contact['id']]); - DBA::delete('contact', ['id' => $contact['id']]); - if ((++$count % 1000) == 0) { - Logger::notice('In removal', ['count' => $count, 'total' => $total]); - } + Contact::deleteById($contact['id']); + if ((++$count % 1000) == 0) { + Logger::info('In removal', ['count' => $count, 'total' => $total]); } } DBA::close($contacts);