use Friendica\Model\ItemURI;
use Friendica\Model\Mail;
use Friendica\Model\Notification;
+use Friendica\Model\Photo;
use Friendica\Model\Post;
use Friendica\Model\Profile;
use Friendica\Model\Tag;
DI::config()->set('system', 'site_pubkey', $res['pubkey']);
}
- $rp = q(
- "SELECT `resource-id` , `scale`, type FROM `photo`
- WHERE `profile` = 1 AND `uid` = %d ORDER BY scale;",
- $uid
- );
+ $profilephotos = Photo::selectToArray(['resource-id' , 'scale'], ['profile' => true, 'uid' => $uid], ['order' => ['scale']]);
+
$photos = [];
$ext = Images::supportedTypes();
- foreach ($rp as $p) {
+ foreach ($profilephotos as $p) {
$photos[$p['scale']] = DI::baseUrl().'/photo/'.$p['resource-id'].'-'.$p['scale'].'.'.$ext[$p['type']];
}
$attributes = ["rel" => "photo", "type" => "image/jpeg",
"media:width" => Proxy::PIXEL_SMALL, "media:height" => Proxy::PIXEL_SMALL,
- "href" => Contact::getAvatarUrlForId($owner['id'], Proxy::SIZE_SMALL, $owner['updated'])];
+ "href" => User::getAvatarUrl($owner, Proxy::SIZE_SMALL)];
if (!$public || !$hide) {
$attributes["dfrn:updated"] = $picdate;
XML::addElement($doc, $author, "poco:note", $profile["about"]);
XML::addElement($doc, $author, "poco:preferredUsername", $profile["nickname"]);
- $savetz = date_default_timezone_get();
- date_default_timezone_set($profile["timezone"]);
- XML::addElement($doc, $author, "poco:utcOffset", date("P"));
- date_default_timezone_set($savetz);
+ XML::addElement($doc, $author, "poco:utcOffset", DateTimeFormat::timezoneNow($profile["timezone"], "P"));
if (trim($profile["homepage"]) != "") {
$urls = $doc->createElement("poco:urls");
$content_type = ($public_batch ? "application/magic-envelope+xml" : "application/json");
- $postResult = DI::httpRequest()->post($dest_url, $envelope, ["Content-Type: " . $content_type]);
+ $postResult = DI::httpClient()->post($dest_url, $envelope, ['Content-Type' => $content_type]);
$xml = $postResult->getBody();
$curl_stat = $postResult->getReturnCode();
return -9; // timed out
}
- if (($curl_stat == 503) && (stristr($postResult->getHeader(), 'retry-after'))) {
+ if (($curl_stat == 503) && $postResult->inHeader('retry-after')) {
return -10;
}
'xmpp' => $contact['xmpp'], 'name-date' => DateTimeFormat::utc($contact['name-date']),
'unsearchable' => $contact['hidden'], 'uri-date' => DateTimeFormat::utc($contact['uri-date'])];
- DBA::update('contact', $fields, ['id' => $contact['id'], 'network' => $contact['network']], $contact_old);
+ Contact::update($fields, ['id' => $contact['id'], 'network' => $contact['network']], $contact_old);
// Update the public contact. Don't set the "hidden" value, this is used differently for public contacts
unset($fields['hidden']);
$condition = ['uid' => 0, 'nurl' => Strings::normaliseLink($contact_old['url'])];
- DBA::update('contact', $fields, $condition, true);
+ Contact::update($fields, $condition, true);
Contact::updateAvatar($contact['id'], $author['avatar']);
$cid = Contact::getIdForURL($url);
$note = $xpath->evaluate('string(dfrn:note[1]/text())', $suggestion);
- return FContact::addSuggestion($importer['importer_uid'], $cid, $importer['id'], $note);
+ return self::addSuggestion($importer['importer_uid'], $cid, $importer['id'], $note);
+ }
+
+ /**
+ * Suggest a given contact to a given user from a given contact
+ *
+ * @param integer $uid
+ * @param integer $cid
+ * @param integer $from_cid
+ * @return bool Was the adding successful?
+ */
+ private static function addSuggestion(int $uid, int $cid, int $from_cid, string $note = '')
+ {
+ $owner = User::getOwnerDataById($uid);
+ $contact = Contact::getById($cid);
+ $from_contact = Contact::getById($from_cid);
+
+ if (DBA::exists('contact', ['nurl' => Strings::normaliseLink($contact['url']), 'uid' => $uid])) {
+ return false;
+ }
+
+ // Quit if we already have an introduction for this person
+ if (DBA::exists('intro', ['uid' => $uid, 'suggest-cid' => $cid])) {
+ return false;
+ }
+
+ $suggest = [];
+ $suggest['uid'] = $uid;
+ $suggest['cid'] = $from_cid;
+ $suggest['url'] = $contact['url'];
+ $suggest['name'] = $contact['name'];
+ $suggest['photo'] = $contact['photo'];
+ $suggest['request'] = $contact['request'];
+ $suggest['title'] = '';
+ $suggest['body'] = $note;
+
+ $hash = Strings::getRandomHex();
+ $fields = ['uid' => $suggest['uid'], 'suggest-cid' => $cid, 'contact-id' => $suggest['cid'],
+ 'note' => $suggest['body'], 'hash' => $hash, 'datetime' => DateTimeFormat::utcNow(), 'blocked' => false];
+ DBA::insert('intro', $fields);
+
+ notification([
+ 'type' => Notification\Type::SUGGEST,
+ 'otype' => Notification\ObjectType::INTRO,
+ 'verb' => Activity::REQ_FRIEND,
+ 'uid' => $owner['uid'],
+ 'cid' => $from_contact['uid'],
+ 'item' => $suggest,
+ 'link' => DI::baseUrl().'/notifications/intros',
+ ]);
+
+ return true;
}
/**
}
// update contact
- $r = q(
- "SELECT `photo`, `url` FROM `contact` WHERE `id` = %d AND `uid` = %d",
- intval($importer["id"]),
- intval($importer["importer_uid"])
- );
+ $old = Contact::selectFirst(['photo', 'url'], ['id' => $importer["id"], 'uid' => $importer["importer_uid"]]);
- if (!DBA::isResult($r)) {
- Logger::log("Query failed to execute, no result returned in " . __FUNCTION__);
+ if (!DBA::isResult($old)) {
+ Logger::notice("Query failed to execute, no result returned in " . __FUNCTION__);
return false;
}
- $old = $r[0];
-
// Update the contact table. We try to find every entry.
$fields = ['name' => $relocate["name"], 'avatar' => $relocate["avatar"],
'url' => $relocate["url"], 'nurl' => Strings::normaliseLink($relocate["url"]),
'poll' => $relocate["poll"], 'site-pubkey' => $relocate["sitepubkey"]];
$condition = ["(`id` = ?) OR (`nurl` = ?)", $importer["id"], Strings::normaliseLink($old["url"])];
- DBA::update('contact', $fields, $condition);
+ Contact::update($fields, $condition);
Contact::updateAvatar($importer["id"], $relocate["avatar"], true);
}
if ($activity->match($item["verb"], Activity::UNFOLLOW)) {
Logger::log("Lost follower");
- Contact::removeFollower($importer, $contact, $item);
+ Contact::removeFollower($contact);
return false;
}
if ($activity->match($item["verb"], Activity::REQ_FRIEND)) {
$accounttype = intval(XML::getFirstNodeValue($xpath, "/atom:feed/dfrn:account_type/text()"));
if ($accounttype != $importer["contact-type"]) {
- DBA::update('contact', ['contact-type' => $accounttype], ['id' => $importer['id']]);
+ Contact::update(['contact-type' => $accounttype], ['id' => $importer['id']]);
// Updating the public contact as well
- DBA::update('contact', ['contact-type' => $accounttype], ['uid' => 0, 'nurl' => $importer['nurl']]);
+ Contact::update(['contact-type' => $accounttype], ['uid' => 0, 'nurl' => $importer['nurl']]);
}
// A forum contact can either have set "forum" or "prv" - but not both
if ($accounttype == User::ACCOUNT_TYPE_COMMUNITY) {
// It's a forum, so either set the public or private forum flag
$condition = ['(`forum` != ? OR `prv` != ?) AND `id` = ?', $forum, !$forum, $importer['id']];
- DBA::update('contact', ['forum' => $forum, 'prv' => !$forum], $condition);
+ Contact::update(['forum' => $forum, 'prv' => !$forum], $condition);
// Updating the public contact as well
$condition = ['(`forum` != ? OR `prv` != ?) AND `uid` = 0 AND `nurl` = ?', $forum, !$forum, $importer['nurl']];
- DBA::update('contact', ['forum' => $forum, 'prv' => !$forum], $condition);
+ Contact::update(['forum' => $forum, 'prv' => !$forum], $condition);
} else {
// It's not a forum, so remove the flags
$condition = ['(`forum` OR `prv`) AND `id` = ?', $importer['id']];
- DBA::update('contact', ['forum' => false, 'prv' => false], $condition);
+ Contact::update(['forum' => false, 'prv' => false], $condition);
// Updating the public contact as well
$condition = ['(`forum` OR `prv`) AND `uid` = 0 AND `nurl` = ?', $importer['nurl']];
- DBA::update('contact', ['forum' => false, 'prv' => false], $condition);
+ Contact::update(['forum' => false, 'prv' => false], $condition);
}
} elseif ($forum != $importer["forum"]) { // Deprecated since 3.5.1
$condition = ['`forum` != ? AND `id` = ?', $forum, $importer["id"]];
- DBA::update('contact', ['forum' => $forum], $condition);
+ Contact::update(['forum' => $forum], $condition);
// Updating the public contact as well
$condition = ['`forum` != ? AND `uid` = 0 AND `nurl` = ?', $forum, $importer['nurl']];
- DBA::update('contact', ['forum' => $forum], $condition);
+ Contact::update(['forum' => $forum], $condition);
}