<?php
/**
- * @copyright Copyright (C) 2010-2021, the Friendica project
+ * @copyright Copyright (C) 2010-2022, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
use Console_Table;
use Friendica\App;
-use Friendica\Content\Pager;
+use Friendica\DI;
use Friendica\Model\Contact as ContactModel;
use Friendica\Model\User as UserModel;
+use Friendica\Network\Probe;
use Friendica\Util\Temporal;
use RuntimeException;
use Seld\CliPrompt\CliPrompt;
$this->appMode = $appMode;
}
- protected function doExecute()
+ protected function doExecute(): int
{
if ($this->getOption('v')) {
$this->out('Class: ' . __CLASS__);
}
}
+ $url = Probe::cleanURI($url);
+
$contact = ContactModel::getByURLForUser($url, $user['uid']);
if (!empty($contact)) {
throw new RuntimeException('Contact already exists');
}
$network = $this->getArgument(3);
- if (empty($network) && $network !== '') {
+ if ($network === null) {
$this->out('Enter network, or leave blank: ');
$network = CliPrompt::prompt();
}
- $result = ContactModel::createFromProbe($user, $url, false, $network);
+ $result = ContactModel::createFromProbeForUser($user['uid'], $url, $network);
if ($result['success']) {
$this->out('User ' . $user['nickname'] . ' now connected to ' . $url . ', contact ID ' . $result['cid']);
- }
- else {
+ } else {
throw new RuntimeException($result['message']);
}
}
/**
- * Sends an unfriend message. Does not remove the contact
+ * Sends an unfriend message.
*
* @return bool True, if the command was successful
+ * @throws \Exception
*/
- private function terminateContact()
+ private function terminateContact(): bool
{
$cid = $this->getArgument(1);
if (empty($cid)) {
throw new RuntimeException('Contact not found');
}
- $user = UserModel::getById($contact['uid']);
+ if (empty($contact['uid'])) {
+ throw new RuntimeException('Contact must be user-specific (uid != 0)');
+ }
+
+ try {
+ ContactModel::unfollow($contact);
- $result = ContactModel::terminateFriendship($user, $contact);
+ $this->out('Contact was successfully unfollowed');
+
+ return true;
+ } catch (\Exception $e) {
+ DI::logger()->error($e->getMessage(), ['contact' => $contact]);
+ throw new RuntimeException('Unable to unfollow this contact, please check the log');
+ }
}
/**
* Marks a contact for removal
- *
- * @return bool True, if the command was successful
*/
private function removeContact()
{
}
}
- $result = ContactModel::remove($cid);
+ ContactModel::remove($cid);
}
/**
$table = new Console_Table();
$table->setHeaders(['ID', 'UID', 'Network', 'Name', 'Nick', 'URL', 'E-Mail', 'Created', 'Updated', 'Blocked', 'Deleted']);
- $addRow = function($row) use (&$table) {
+ $addRow = function ($row) use (&$table) {
$table->addRow([
$row['id'],
$row['uid'],
};
switch ($subCmd) {
case 'id':
- $cid = $this->getArgument(2);
+ $cid = $this->getArgument(2);
$contact = ContactModel::getById($cid, $fields);
if (!empty($contact)) {
$addRow($contact);
}
break;
case 'url':
- $user = $this->getUserByNick(2);
- $url = $this->getArgument(3);
+ $user = $this->getUserByNick(2);
+ $url = $this->getArgument(3);
$contact = ContactModel::getByURLForUser($url, $user['uid'], false, $fields);
if (!empty($contact)) {
$addRow($contact);