X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FObject%2FContact.php;h=083982dda6ac95d8924e60e2c6d85e4e5b75ea9c;hb=0373056448aec398ee765065adc998aa0da02ac0;hp=ffa71be27ddb5b300e67a84cb73f3c91625dab21;hpb=c25578a2e2ffd8a311f25c3f08e96f62af233983;p=friendica.git diff --git a/src/Object/Contact.php b/src/Object/Contact.php index ffa71be27d..083982dda6 100644 --- a/src/Object/Contact.php +++ b/src/Object/Contact.php @@ -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; + } }