diff --git a/src/Core/Console.php b/src/Core/Console.php index 82c485179e..a5aff4ae80 100644 --- a/src/Core/Console.php +++ b/src/Core/Console.php @@ -21,6 +21,7 @@ class Console extends \Asika\SimpleConsole\Console 'extract' => __NAMESPACE__ . '\Console\Extract', 'globalcommunityblock' => __NAMESPACE__ . '\Console\GlobalCommunityBlock', 'globalcommunitysilence' => __NAMESPACE__ . '\Console\GlobalCommunitySilence', + 'archivecontact' => __NAMESPACE__ . '\Console\ArchiveContact', 'autoinstall' => __NAMESPACE__ . '\Console\AutomaticInstallation', 'maintenance' => __NAMESPACE__ . '\Console\Maintenance', 'newpassword' => __NAMESPACE__ . '\Console\NewPassword', @@ -42,6 +43,7 @@ Commands: extract Generate translation string file for the Friendica project (deprecated) globalcommunityblock Block remote profile from interacting with this node globalcommunitysilence Silence remote profile from global community page + archivecontact Archive a contact when you know that it isn't existing anymore help Show help about a command, e.g (bin/console help config) autoinstall Starts automatic installation of friendica based on values from htconfig.php maintenance Set maintenance mode for this node diff --git a/src/Core/Console/ArchiveContact.php b/src/Core/Console/ArchiveContact.php new file mode 100644 index 0000000000..7a973f3116 --- /dev/null +++ b/src/Core/Console/ArchiveContact.php @@ -0,0 +1,79 @@ + [-h|--help|-?] [-v] + +Description + Archive a contact when you know that it isn't existing anymore. Normally this does happen automatically after a few days. + +Options + -h|--help|-? Show help information + -v Show more debug information. +HELP; + return $help; + } + + protected function doExecute() + { + $a = get_app(); + + if ($this->getOption('v')) { + $this->out('Class: ' . __CLASS__); + $this->out('Arguments: ' . var_export($this->args, true)); + $this->out('Options: ' . var_export($this->options, true)); + } + + if (count($this->args) == 0) { + $this->out($this->getHelp()); + return 0; + } + + if (count($this->args) > 1) { + throw new \Asika\SimpleConsole\CommandArgsException('Too many arguments'); + } + + require_once '.htconfig.php'; + $result = \dba::connect($db_host, $db_user, $db_pass, $db_data); + unset($db_host, $db_user, $db_pass, $db_data); + + if (!$result) { + throw new \RuntimeException('Unable to connect to database'); + } + + $nurl = normalise_link($this->getArgument(0)); + if (!dba::exists('contact', ['nurl' => $nurl, 'archive' => false])) { + throw new \RuntimeException(L10n::t('Could not find any unarchived contact entry for this URL (%s)', $nurl)); + } + if (dba::update('contact', ['archive' => true], ['nurl' => $nurl])) { + $condition = ["`cid` IN (SELECT `id` FROM `contact` WHERE `archive`)"]; + dba::delete('queue', $condition); + $this->out(L10n::t('The contact entries have been archived')); + } else { + throw new \RuntimeException('The contact archival failed.'); + } + + return 0; + } +} diff --git a/src/Worker/Queue.php b/src/Worker/Queue.php index 57f6e92774..345da39abb 100644 --- a/src/Worker/Queue.php +++ b/src/Worker/Queue.php @@ -63,7 +63,7 @@ class Queue return; } - if (empty($contact['notify'])) { + if (empty($contact['notify']) || $contact['archive']) { QueueModel::removeItem($q_item['id']); return; }