]> git.mxchange.org Git - friendica.git/blobdiff - src/Object/Contact.php
Review and Use statements
[friendica.git] / src / Object / Contact.php
index ffa71be27ddb5b300e67a84cb73f3c91625dab21..083982dda6ac95d8924e60e2c6d85e4e5b75ea9c 100644 (file)
@@ -13,6 +13,7 @@ use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
 use Friendica\Network\Probe;
+use Friendica\Object\Photo;
 use Friendica\Protocol\Diaspora;
 use Friendica\Protocol\DFRN;
 use Friendica\Protocol\OStatus;
@@ -35,16 +36,15 @@ class Contact extends BaseObject
        public static function remove($id)
        {
                // We want just to make sure that we don't delete our "self" contact
-               $condition = array('`id` = ? AND NOT `self`', $id);
-               $r = dba::select('contact', array('uid'), $condition, array('limit' => 1));
+               $r = dba::select('contact', array('uid'), array('id' => $id, 'self' => false), array('limit' => 1));
 
-               if (!DBM::is_result($r) || !intval($r[0]['uid'])) {
+               if (!DBM::is_result($r) || !intval($r['uid'])) {
                        return;
                }
 
-               $archive = PConfig::get($r[0]['uid'], 'system', 'archive_removed_contacts');
+               $archive = PConfig::get($r['uid'], 'system', 'archive_removed_contacts');
                if ($archive) {
-                       dba::update('contact', array('archive' => 1, 'network' => 'none', 'writable' => 0), array('id' => $id));
+                       dba::update('contact', array('archive' => true, 'network' => 'none', 'writable' => false), array('id' => $id));
                        return;
                }
 
@@ -59,6 +59,7 @@ class Contact extends BaseObject
         *
         * @param array $user    User unfriending
         * @param array $contact Contact unfriended
+        * @return void
         */
        public static function terminateFriendship(array $user, array $contact)
        {
@@ -103,7 +104,7 @@ class Contact extends BaseObject
                        dba::update('contact', array('term-date' => datetime_convert()), array('id' => $contact['id']));
 
                        if ($contact['url'] != '') {
-                               dba::update('contact', array('term-date' => datetime_convert()), array('nurl' => normalise_link($contact['url']), 'term-date' <= NULL_DATE));
+                               dba::update('contact', array('term-date' => datetime_convert()), array('`nurl` = ? AND `term-date` <= ?', normalise_link($contact['url']), NULL_DATE));
                        }
                } else {
                        /* @todo
@@ -138,11 +139,11 @@ class Contact extends BaseObject
         */
        public static function unmarkForArchival(array $contact)
        {
-               $condition = array('`id` => ? AND (`term-date` > ? OR `archive`)', $contact[`id`], NULL_DATE);
-               $r = dba::select('contact', array('term-date'), $condition);
+               $condition = array('`id` = ? AND (`term-date` > ? OR `archive`)', $contact[`id`], NULL_DATE);
+               $exists = dba::exists('contact', $condition);
 
                // We don't need to update, we never marked this contact for archival
-               if (!DBM::is_result($r)) {
+               if (!$exists) {
                        return;
                }
 
@@ -381,9 +382,9 @@ class Contact extends BaseObject
                                return $menu;
                        }
 
-                       $r = dba::select('contact', array(), array('nurl' => $contact['nurl'], 'network' => $contact['network'], 'uid' => $uid));
+                       $r = dba::select('contact', array(), array('nurl' => $contact['nurl'], 'network' => $contact['network'], 'uid' => $uid), array('limit' => 1));
                        if ($r) {
-                               return self::photoMenu($r[0], $uid);
+                               return self::photoMenu($r, $uid);
                        } else {
                                $profile_link = zrl($contact['url']);
                                $connlnk = 'follow/?url=' . $contact['url'];
@@ -473,16 +474,34 @@ class Contact extends BaseObject
        public static function getUngroupedList($uid, $start = 0, $count = 0)
        {
                if (!$count) {
-                       $fields = array('COUNT(*) AS `total`');
-                       $condition = array('`uid` = ? AND `self` = 0 AND `id` NOT IN (SELECT DISTINCT(`contact-id`)     FROM `group_member`     WHERE `uid` = ?', $uid, $uid);
-                       $r = dba::select('contact', $fields, $condition);
+                       $r = q(
+                               "SELECT COUNT(*) AS `total`
+                                FROM `contact`
+                                WHERE `uid` = %d
+                                AND `self` = 0
+                                AND `id` NOT IN (
+                                       SELECT DISTINCT(`contact-id`)
+                                       FROM `group_member`
+                                       WHERE `uid` = %d
+                               ) ", intval($uid), intval($uid)
+                       );
 
                        return $r;
                }
 
-               $innerCondition = array('`id` NOT IN (SELECT DISTINCT(`contact-id`) FROM `group_member` WHERE `uid` = ?', $uid);
-               $r = dba::select('contact', array(), array('uid' => $uid, 'self' => 0, $innerCondition, 'blocked' => 0, 'pending' => 0), array('limit ?, ?', $start, $count));
-
+               $r = q(
+                       "SELECT *
+                       FROM `contact`
+                       WHERE `uid` = %d
+                       AND `self` = 0
+                       AND `id` NOT IN (
+                               SELECT DISTINCT(`contact-id`)
+                               FROM `group_member` WHERE `uid` = %d
+                       )
+                       AND `blocked` = 0
+                       AND `pending` = 0
+                       LIMIT %d, %d", intval($uid), intval($uid), intval($start), intval($count)
+               );
                return $r;
        }
 
@@ -595,7 +614,7 @@ class Contact extends BaseObject
                                'readonly' => 0, 'pending' => 0)
                        );
 
-                       $s = dba::select('contact', array('id'), array('nurl' => normalise_link($data["url"]), 'uid' => $uid), array('order' => 'id', 'limit' => 2));
+                       $s = dba::select('contact', array('id'), array('nurl' => normalise_link($data["url"]), 'uid' => $uid), array('order' => array('id'), 'limit' => 2));
                        $contacts = dba::inArray($s);
                        if (!DBM::is_result($contacts)) {
                                return 0;
@@ -625,9 +644,7 @@ class Contact extends BaseObject
                        }
                }
 
-               require_once 'include/Photo.php';
-
-               update_contact_avatar($data["photo"], $uid, $contact_id);
+               self::updateAvatar($data["photo"], $uid, $contact_id);
 
                $contact = dba::select('contact', array('url', 'nurl', 'addr', 'alias', 'name', 'nick', 'keywords', 'location', 'about', 'avatar-date'), array('id' => $contact_id), array('limit' => 1));
 
@@ -716,11 +733,14 @@ class Contact extends BaseObject
         */
        public static function getPostsFromUrl($contact_url)
        {
+               $a = self::getApp();
+
                require_once 'include/conversation.php';
 
                // There are no posts with "uid = 0" with connector networks
                // This speeds up the query a lot
-               $r = dba::select('contact', array('network', 'id AS author-id', 'contact-type'), array('nurl' => normalise_link($contact_url), 'uid' => 0));
+               $r = q("SELECT `network`, `id` AS `author-id`, `contact-type` FROM `contact`
+                       WHERE `contact`.`nurl` = '%s' AND `contact`.`uid` = 0", dbesc(normalise_link($contact_url)));
 
                if (!DBM::is_result($r)) {
                        return '';
@@ -740,7 +760,6 @@ class Contact extends BaseObject
                        " ORDER BY `item`.`created` DESC LIMIT %d, %d", intval($author_id), intval(local_user()), intval($a->pager['start']), intval($a->pager['itemspage'])
                );
 
-               $a = self::getApp();
 
                $o = conversation($a, $r, 'community', false);
 
@@ -799,4 +818,49 @@ class Contact extends BaseObject
 
                return $account_type;
        }
+
+       /**
+        * @brief Updates the avatar links in a contact only if needed
+        *
+        * @param string $avatar Link to avatar picture
+        * @param int    $uid    User id of contact owner
+        * @param int    $cid    Contact id
+        * @param bool   $force  force picture update
+        *
+        * @return array Returns array of the different avatar sizes
+        */
+       public static function updateAvatar($avatar, $uid, $cid, $force = false)
+       {
+               // Limit = 1 returns the row so no need for dba:inArray()
+               $r = dba::select('contact', array('avatar', 'photo', 'thumb', 'micro', 'nurl'), array('id' => $cid), array('limit' => 1));
+               if (!DBM::is_result($r)) {
+                       return false;
+               } else {
+                       $data = array($r["photo"], $r["thumb"], $r["micro"]);
+               }
+
+               if (($r["avatar"] != $avatar) || $force) {
+                       $photos = Photo::importProfilePhoto($avatar, $uid, $cid, true);
+
+                       if ($photos) {
+                               dba::update(
+                                       'contact',
+                                       array('avatar' => $avatar, 'photo' => $photos[0], 'thumb' => $photos[1], 'micro' => $photos[2], 'avatar-date' => datetime_convert()),
+                                       array('id' => $cid)
+                               );
+
+                               // Update the public contact (contact id = 0)
+                               if ($uid != 0) {
+                                       $pcontact = dba::select('contact', array('id'), array('nurl' => $r[0]['nurl']), array('limit' => 1));
+                                       if (DBM::is_result($pcontact)) {
+                                               self::updateAvatar($avatar, 0, $pcontact['id'], $force);
+                                       }
+                               }
+
+                               return $photos;
+                       }
+               }
+
+               return $data;
+       }
 }