const REPLY = 1; // Regular reply that is stored locally
const REPLY_RC = 2; // Reply that will be relayed
+ /**
+ * @brief Generates an array of contact and user for DFRN imports
+ *
+ * This array contains not only the receiver but also the sender of the message.
+ *
+ * @param integer $cid Contact id
+ * @param integer $uid User id
+ *
+ * @return array importer
+ */
+ public static function getImporter($cid, $uid = 0)
+ {
+ $condition = ['id' => $cid, 'blocked' => false, 'pending' => false];
+ $contact = DBA::selectFirst('contact', [], $condition);
+ if (!DBA::isResult($contact)) {
+ return [];
+ }
+
+ $contact['cpubkey'] = $contact['pubkey'];
+ $contact['cprvkey'] = $contact['prvkey'];
+ $contact['senderName'] = $contact['name'];
+
+ if ($uid != 0) {
+ $condition = ['uid' => $uid, 'account_expired' => false, 'account_removed' => false];
+ $user = DBA::selectFirst('user', [], $condition);
+ if (!DBA::isResult($user)) {
+ return [];
+ }
+
+ $user['importer_uid'] = $user['uid'];
+ $user['uprvkey'] = $user['prvkey'];
+ } else {
+ $user = ['importer_uid' => 0, 'uprvkey' => '', 'timezone' => 'UTC',
+ 'nickname' => '', 'sprvkey' => '', 'spubkey' => '',
+ 'page-flags' => 0, 'account-type' => 0, 'prvnets' => 0];
+ }
+
+ return array_merge($contact, $user);
+ }
+
/**
* @brief Generates the atom entries for delivery.php
*
* @return int Deliver status. Negative values mean an error.
* @todo Add array type-hint for $owner, $contact
*/
- public static function deliver($owner, $contact, $atom, $dissolve = false)
+ public static function deliver($owner, $contact, $atom, $dissolve = false, $legacy_transport = false)
{
$a = get_app();
// At first try the Diaspora transport layer
- $ret = self::transmit($owner, $contact, $atom);
- if ($ret >= 200) {
- logger('Delivery via Diaspora transport layer was successful with status ' . $ret);
- return $ret;
+ if (!$dissolve && !$legacy_transport) {
+ $ret = self::transmit($owner, $contact, $atom);
+ if ($ret >= 200) {
+ logger('Delivery via Diaspora transport layer was successful with status ' . $ret);
+ return $ret;
+ }
}
$idtosend = $orig_id = (($contact['dfrn-id']) ? $contact['dfrn-id'] : $contact['issued-id']);
$key = openssl_random_pseudo_bytes(16);
$data = self::aesEncrypt($postvars['data'], $key);
break;
+
default:
logger("rino: invalid requested version '$rino_remote_version'");
Contact::markForArchival($contact);
}
}
+ if (empty($author['avatar'])) {
+ logger('Empty author: ' . $xml);
+ }
+
if (DBA::isResult($contact_old) && !$onlyfetch) {
logger("Check if contact details for contact " . $contact_old["id"] . " (" . $contact_old["nick"] . ") have to be updated.", LOGGER_DEBUG);
// 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]);
+
if (strtotime($contact[$field]) > strtotime($contact_old[$field])) {
logger("Difference for contact " . $contact["id"] . " in field '" . $field . "'. New value: '" . $contact[$field] . "', old value '" . $contact_old[$field] . "'", LOGGER_DEBUG);
$update = true;
if ($Blink && link_compare($Blink, System::baseUrl() . "/profile/" . $importer["nickname"])) {
$author = DBA::selectFirst('contact', ['name', 'thumb', 'url'], ['id' => $item['author-id']]);
+ $item['id'] = $posted_id;
+
+ $parent = Item::selectFirst(['id'], ['uri' => $item['parent-uri'], 'uid' => $importer["importer_uid"]]);
+ $item["parent"] = $parent['id'];
+
// send a notification
notification(
[
break;
case "enclosure":
$enclosure = $href;
- if (strlen($item["attach"])) {
+
+ if (!empty($item["attach"])) {
$item["attach"] .= ",";
+ } else {
+ $item["attach"] = "";
}
$item["attach"] .= '[attach]href="' . $href . '" length="' . $length . '" type="' . $type . '" title="' . $title . '"[/attach]';
}
// Fetch the owner
- $owner = self::fetchauthor($xpath, $entry, $importer, "dfrn:owner", true);
+ $owner = self::fetchauthor($xpath, $entry, $importer, "dfrn:owner", true, $xml);
$owner_unknown = (isset($owner["contact-unknown"]) && $owner["contact-unknown"]);
$item["owner-id"] = Contact::getIdForURL($owner["link"], 0);
// fetch the author
- $author = self::fetchauthor($xpath, $entry, $importer, "atom:author", true);
+ $author = self::fetchauthor($xpath, $entry, $importer, "atom:author", true, $xml);
$item["author-name"] = $author["name"];
$item["author-link"] = $author["link"];