. * */ namespace Friendica\Worker; use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\Worker; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Util\DateTimeFormat; /** * Update federated contacts */ class UpdateContacts { public static function execute() { $update_limit = DI::config()->get('system', 'contact_update_limit'); if (empty($update_limit)) { return; } $updating = Worker::countWorkersByCommand('UpdateContact'); $limit = $update_limit - $updating; if ($limit <= 0) { Logger::info('The number of currently running jobs exceed the limit'); return; } Logger::info('Updating contact', ['count' => $limit]); $condition = ['self' => false]; if (DI::config()->get('system', 'update_active_contacts')) { $condition = array_merge(['local-data' => true], $condition); } $condition = DBA::mergeConditions(["`next-update` < ?", DateTimeFormat::utcNow()], $condition); $contacts = DBA::select('contact', ['id'], $condition, ['order' => ['next-update'], 'limit' => $limit]); $count = 0; while ($contact = DBA::fetch($contacts)) { if (Worker::add(['priority' => PRIORITY_LOW, 'dont_fork' => true], "UpdateContact", $contact['id'])) { ++$count; } } DBA::close($contacts); Logger::info('Initiated update for federated contacts', ['count' => $count]); } }