]> git.mxchange.org Git - friendica.git/blobdiff - src/Protocol/DFRN.php
Move ProfileFieldRepository::migrateFromLegacyProfile() & delete old repository
[friendica.git] / src / Protocol / DFRN.php
index 2c2309ba4d31e269ea357d88466040eadfd853d8..081b7f2a3748ed29fa8c45a1473abaf533d76495 100644 (file)
@@ -37,6 +37,7 @@ use Friendica\Model\Item;
 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;
@@ -299,15 +300,12 @@ class DFRN
                        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']];
                }
 
@@ -449,7 +447,7 @@ class DFRN
 
                $attributes = ["rel" => "photo", "type" => "image/jpeg",
                                        "media:width" => Proxy::PIXEL_SMALL, "media:height" => Proxy::PIXEL_SMALL,
-                                       "href" => User::getAvatarUrlForId($owner['uid'], Proxy::SIZE_SMALL)];
+                                       "href" => User::getAvatarUrl($owner, Proxy::SIZE_SMALL)];
 
                if (!$public || !$hide) {
                        $attributes["dfrn:updated"] = $picdate;
@@ -490,10 +488,7 @@ class DFRN
                        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");
@@ -1335,7 +1330,58 @@ class DFRN
                $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;
        }
 
        /**
@@ -1379,19 +1425,13 @@ class DFRN
                }
 
                // 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"]),