use Friendica\Model\PermissionSet;
use Friendica\Model\Profile;
use Friendica\Model\User;
+use Friendica\Network\Probe;
use Friendica\Object\Image;
use Friendica\Util\BaseURL;
use Friendica\Util\Crypto;
STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
WHERE `item`.`uid` = %d AND `item`.`wall` AND `item`.`changed` > '%s'
AND `item`.`visible` $sql_extra
- ORDER BY `item`.`parent` ".$sort.", `item`.`created` ASC LIMIT 0, 300",
+ ORDER BY `item`.`parent` ".$sort.", `item`.`received` ASC LIMIT 0, 300",
intval($owner_id),
DBA::escape($check_date),
DBA::escape($sort)
$dest_url = ($public_batch ? $contact["batch"] : $contact["notify"]);
+ if (empty($dest_url)) {
+ Logger::info('Empty destination', ['public' => $public_batch, 'contact' => $contact]);
+ return -24;
+ }
+
$content_type = ($public_batch ? "application/magic-envelope+xml" : "application/json");
$postResult = Network::post($dest_url, $envelope, ["Content-Type: ".$content_type]);
Event::createBirthday($contact, $birthday);
}
- // Get all field names
- $fields = [];
- foreach ($contact_old as $field => $data) {
- $fields[$field] = $data;
- }
+ $fields = ['name' => $contact['name'], 'nick' => $contact['nick'], 'about' => $contact['about'],
+ 'location' => $contact['location'], 'addr' => $contact['addr'], 'keywords' => $contact['keywords'],
+ 'bdyear' => $contact['bdyear'], 'bd' => $contact['bd'], 'hidden' => $contact['hidden'],
+ 'xmpp' => $contact['xmpp'], 'name-date' => DateTimeFormat::utc($contact['name-date']),
+ 'unsearchable' => $contact['hidden'], 'uri-date' => DateTimeFormat::utc($contact['uri-date'])];
- unset($fields["id"]);
- unset($fields["uid"]);
- unset($fields["url"]);
- unset($fields["avatar-date"]);
- unset($fields["avatar"]);
- unset($fields["name-date"]);
- unset($fields["uri-date"]);
+ DBA::update('contact', $fields, ['id' => $contact['id'], 'network' => $contact['network']], $contact_old);
- $update = false;
- // Update check for this field has to be done differently
- $datefields = ["name-date", "uri-date"];
- foreach ($datefields as $field) {
- // The date fields arrives as '2018-07-17T10:44:45Z' - the database return '2018-07-17 10:44:45'
- // The fields have to be in the same format to be comparable, since strtotime does add timezones.
- $contact[$field] = DateTimeFormat::utc($contact[$field]);
+ // 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);
- if (strtotime($contact[$field]) > strtotime($contact_old[$field])) {
- Logger::log("Difference for contact " . $contact["id"] . " in field '" . $field . "'. New value: '" . $contact[$field] . "', old value '" . $contact_old[$field] . "'", Logger::DEBUG);
- $update = true;
- }
- }
+ Contact::updateAvatar($author['avatar'], $importer['importer_uid'], $contact['id']);
- foreach ($fields as $field => $data) {
- if ($contact[$field] != $contact_old[$field]) {
- Logger::log("Difference for contact " . $contact["id"] . " in field '" . $field . "'. New value: '" . $contact[$field] . "', old value '" . $contact_old[$field] . "'", Logger::DEBUG);
- $update = true;
- }
+ $pcid = Contact::getIdForURL($contact_old['url']);
+ if (!empty($pcid)) {
+ Contact::updateAvatar($author['avatar'], 0, $pcid);
}
- if ($update) {
- Logger::log("Update contact data for contact " . $contact["id"] . " (" . $contact["nick"] . ")", Logger::DEBUG);
-
- q(
- "UPDATE `contact` SET `name` = '%s', `nick` = '%s', `about` = '%s', `location` = '%s',
- `addr` = '%s', `keywords` = '%s', `bdyear` = '%s', `bd` = '%s', `hidden` = %d,
- `xmpp` = '%s', `name-date` = '%s', `uri-date` = '%s'
- WHERE `id` = %d AND `network` = '%s'",
- DBA::escape($contact["name"]), DBA::escape($contact["nick"]), DBA::escape($contact["about"]), DBA::escape($contact["location"]),
- DBA::escape($contact["addr"]), DBA::escape($contact["keywords"]), DBA::escape($contact["bdyear"]),
- DBA::escape($contact["bd"]), intval($contact["hidden"]), DBA::escape($contact["xmpp"]),
- DBA::escape(DateTimeFormat::utc($contact["name-date"])), DBA::escape(DateTimeFormat::utc($contact["uri-date"])),
- intval($contact["id"]), DBA::escape($contact["network"])
- );
- }
-
- Contact::updateAvatar(
- $author['avatar'],
- $importer['importer_uid'],
- $contact['id'],
- (strtotime($contact['avatar-date']) > strtotime($contact_old['avatar-date']) || ($author['avatar'] != $contact_old['avatar']))
- );
-
/*
* The generation is a sign for the reliability of the provided data.
* It is used in the socgraph.php to prevent that old contact data
if (($entrytype == DFRN::TOP_LEVEL) && !empty($importer['id'])) {
// The filling of the the "contact" variable is done for legcy reasons
// The functions below are partly used by ostatus.php as well - where we have this variable
- $contact = Contact::select([], ['id' => $importer['id']]);
+ $contact = Contact::selectFirst([], ['id' => $importer['id']]);
// Big question: Do we need these functions? They were part of the "consume_feed" function.
// This function once was responsible for DFRN and OStatus.
return (strcmp($existing_edited, $update_edited) < 0);
}
+
+ /**
+ * Checks if the given contact url does support DFRN
+ *
+ * @param string $url profile url
+ * @param boolean $update Update the profile
+ * @return boolean
+ * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+ * @throws \ImagickException
+ */
+ public static function isSupportedByContactUrl($url, $update = false)
+ {
+ $probe = Probe::uri($url, Protocol::DFRN, 0, !$update);
+ return $probe['network'] == Protocol::DFRN;
+ }
}