]> git.mxchange.org Git - friendica.git/commitdiff
Move Object\Contact to Model\Contact
authorHypolite Petovan <mrpetovan@gmail.com>
Thu, 7 Dec 2017 14:04:24 +0000 (09:04 -0500)
committerHypolite Petovan <mrpetovan@gmail.com>
Thu, 7 Dec 2017 14:04:24 +0000 (09:04 -0500)
51 files changed:
boot.php
include/acl_selectors.php
include/api.php
include/bb2diaspora.php
include/bbcode.php
include/conversation.php
include/follow.php
include/identity.php
include/items.php
include/like.php
include/post_update.php
include/tags.php
include/threads.php
mod/admin.php
mod/allfriends.php
mod/cal.php
mod/common.php
mod/contacts.php
mod/crepair.php
mod/dfrn_confirm.php
mod/dfrn_notify.php
mod/dfrn_request.php
mod/directory.php
mod/dirfind.php
mod/display.php
mod/follow.php
mod/hovercard.php
mod/item.php
mod/match.php
mod/message.php
mod/network.php
mod/nogroup.php
mod/photos.php
mod/ping.php
mod/suggest.php
mod/unfollow.php
mod/videos.php
mod/viewcontacts.php
src/Core/NotificationsManager.php
src/Model/Contact.php [new file with mode: 0644]
src/Model/GlobalContact.php
src/Model/User.php
src/Object/Contact.php [deleted file]
src/Protocol/DFRN.php
src/Protocol/Diaspora.php
src/Protocol/OStatus.php
src/Worker/CronJobs.php
src/Worker/Delivery.php
src/Worker/Notifier.php
src/Worker/OnePoll.php
util/global_community_block.php

index 148ca5e6e2f2bc2175b54a7c7d19465be3f829c3..fa26028113251db526161ea8380a07f4b92b1d48 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -27,8 +27,7 @@ use Friendica\Core\Config;
 use Friendica\Core\PConfig;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
-use Friendica\Util\Lock;
+use Friendica\Model\Contact;
 
 require_once 'include/network.php';
 require_once 'include/plugin.php';
index f971d462b2109f9f9877adab0fe84e5e6b3e6d09..4ef6733035a64e091abcfa3b0393b1c1b026ea07 100644 (file)
@@ -6,8 +6,8 @@ use Friendica\App;
 use Friendica\Content\Feature;
 use Friendica\Core\Config;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Model\GlobalContact;
-use Friendica\Object\Contact;
 
 require_once "include/contact_selectors.php";
 require_once "include/contact_widgets.php";
index 37cf1eba05338084816a84a93f56ef6c14c24035..e5963fb8fac871ec9f69d45c37784eb60cf29760 100644 (file)
@@ -12,6 +12,7 @@ use Friendica\Core\Config;
 use Friendica\Core\NotificationsManager;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Model\Photo;
 use Friendica\Model\User;
 use Friendica\Network\FKOAuth1;
@@ -24,7 +25,6 @@ use Friendica\Network\HTTPException\NotFoundException;
 use Friendica\Network\HTTPException\NotImplementedException;
 use Friendica\Network\HTTPException\UnauthorizedException;
 use Friendica\Network\HTTPException\TooManyRequestsException;
-use Friendica\Object\Contact;
 use Friendica\Object\Image;
 use Friendica\Protocol\Diaspora;
 use Friendica\Util\XML;
index 3b1540473a31d2172218056afe68eafff56accd5..e1a67d432d261600cae885ed2185b422275288cd 100644 (file)
@@ -2,8 +2,8 @@
 
 use Friendica\App;
 use Friendica\Core\System;
+use Friendica\Model\Contact;
 use Friendica\Network\Probe;
-use Friendica\Object\Contact;
 
 use League\HTMLToMarkdown\HtmlConverter;
 
index 196c3ca3c1578e76bf3954ecf542aa53b6ec24b5..b445fd01b047b3370284b8e35bd53dded972c718 100644 (file)
@@ -5,7 +5,7 @@ use Friendica\Content\Smilies;
 use Friendica\Core\Cache;
 use Friendica\Core\System;
 use Friendica\Core\Config;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 
 require_once 'include/oembed.php';
 require_once 'include/event.php';
index 2543a5170e80ac6d1b198a2f0f31333396d0b7d2..ddf5701628b2e387bb5dccdf5edd3591a4258f00 100644 (file)
@@ -8,7 +8,7 @@ use Friendica\Core\Config;
 use Friendica\Core\PConfig;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 use Friendica\Object\Conversation;
 use Friendica\Object\Item;
 
index 14b9c68ed59fd3476154a2ec367ab84d63adde71..e08136cab1e925bf48d93a55cefb0945372c7663 100644 (file)
@@ -7,8 +7,8 @@ use Friendica\Core\Config;
 use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Network\Probe;
-use Friendica\Object\Contact;
 use Friendica\Protocol\Diaspora;
 use Friendica\Protocol\OStatus;
 use Friendica\Protocol\PortableContact;
index a3a007cc18a12c0edf97239ce9f5ffc77898fac1..9a0900dc1f14db2fe74bf50d02228985a84c2291 100644 (file)
@@ -12,7 +12,7 @@ use Friendica\Core\PConfig;
 use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 
 require_once 'include/bbcode.php';
 require_once 'mod/proxy.php';
index c32b4a0ba55ea32f5704f53d31d38ee543c603a4..44fca51d8f9713648b06bf42157f38c44bb2548d 100644 (file)
@@ -10,8 +10,8 @@ use Friendica\Core\PConfig;
 use Friendica\Core\Worker;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Model\GlobalContact;
-use Friendica\Object\Contact;
 use Friendica\Object\Image;
 use Friendica\Protocol\DFRN;
 use Friendica\Protocol\OStatus;
index 1dcadde705ef93e9885edf07a07af5509e75fa21..9a8b9b957b0db24fd2d7f459eb5c24be1132ca4f 100644 (file)
@@ -4,7 +4,7 @@ use Friendica\App;
 use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 use Friendica\Protocol\Diaspora;
 
 /**
index f67c064daf2f527f21bd9b5aed2e2523b80a9b83..7cbc6ece0db3fead0789f22a3049f9cda96d896f 100644 (file)
@@ -5,8 +5,8 @@
 
 use Friendica\Core\Config;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Model\GlobalContact;
-use Friendica\Object\Contact;
 
 /**
  * @brief Calls the post update functions
index 45a17f9c96791987d32465b44c557c105cba3572..8d8fb765595ddd9f90f84325c94500db2abd0bc2 100644 (file)
@@ -6,7 +6,7 @@ use Friendica\App;
 use Friendica\Content\Feature;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 
 function create_tags_from_item($itemid) {
        $profile_base = System::baseUrl();
@@ -157,13 +157,13 @@ function update_items() {
 /**
  * @brief Get alphabetical sorted array of used tags/terms of an user including
  * a weighting by frequency of use.
- * 
+ *
  * @param int $uid      The user ID.
  * @param int $count    Max number of displayed tags/terms.
  * @param int $owner_id The contact id of the owner of the tagged items.
  * @param string $flags Special item flags.
  * @param int $type     The tag/term type.
- * 
+ *
  * @return arr          Alphabetical sorted array of used tags of an user.
  */
 function tagadelic($uid, $count = 0, $owner_id = 0, $flags = '', $type = TERM_HASHTAG) {
@@ -197,19 +197,19 @@ function tagadelic($uid, $count = 0, $owner_id = 0, $flags = '', $type = TERM_HA
        if(!DBM::is_result($r)) {
                return array();
        }
-               
+
        return tag_calc($r);
 }
 
 /**
  * @brief Construct a tag/term cloud block for an user.
- * 
+ *
  * @param int $uid      The user ID.
  * @param int $count    Max number of displayed tags/terms.
  * @param int $owner_id The contact ID of the owner of the tagged items.
  * @param string $flags Special item flags.
  * @param int $type     The tag/term type.
- * 
+ *
  * @return string       HTML formatted output.
  */
 function wtagblock($uid, $count = 0,$owner_id = 0, $flags = '', $type = TERM_HASHTAG) {
@@ -244,7 +244,7 @@ function wtagblock($uid, $count = 0,$owner_id = 0, $flags = '', $type = TERM_HAS
 
 /**
  * @brief Calculate weighting of tags according to the frequency of use.
- * 
+ *
  * @param array $arr Array of tags/terms with tag/term name and total count of use.
  * @return array     Alphabetical sorted array of used tags/terms of an user.
  */
@@ -279,10 +279,10 @@ function tag_calc($arr) {
 
 /**
  * @brief Compare function to sort tags/terms alphabetically.
- * 
+ *
  * @param type $a
  * @param type $b
- * 
+ *
  * @return int
  */
 function tags_sort($a, $b) {
@@ -294,7 +294,7 @@ function tags_sort($a, $b) {
 
 /**
  * @brief Insert a tag cloud widget for the present profile.
- * 
+ *
  * @param int     $limit Max number of displayed tags.
  * @return string HTML formattat output.
  */
index 00848ccc6e328e55a6c28c82719f9f8e56688f35..494fbe1ce33a0ccdecd127e13d52a0efa50c4e0b 100644 (file)
@@ -3,7 +3,7 @@
 use Friendica\App;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 
 function add_thread($itemid, $onlyshadow = false) {
        $items = q("SELECT `uid`, `created`, `edited`, `commented`, `received`, `changed`, `wall`, `private`, `pubmail`,
index 29e10bda8301088be9b97f74c196008b69d3b69a..321e7b617204576a1286afa891bbbda0e9b17d01 100644 (file)
@@ -10,8 +10,8 @@ use Friendica\Core\System;
 use Friendica\Core\Config;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Model\User;
-use Friendica\Object\Contact;
 
 require_once 'include/enotify.php';
 require_once 'include/text.php';
index 3cfe6c0f9efaa164cea1710ad55d02f438bade50..1eb4b0e1c4fd3de82f863e59ce53e7755cf2a82a 100644 (file)
@@ -5,8 +5,8 @@
 use Friendica\App;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Model\GlobalContact;
-use Friendica\Object\Contact;
 
 require_once 'include/contact_selectors.php';
 require_once 'mod/contacts.php';
index 7eb31905b8ee80fb773dd26c6540bf8b971c03b3..cef9857ea934d84bf794682d2c4744453b6784c4 100644 (file)
@@ -11,7 +11,7 @@ use Friendica\Core\Config;
 use Friendica\Core\PConfig;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 
 require_once 'include/event.php';
 require_once 'include/redir.php';
index 9933c3f51fc2178a76a47bb9ef52f91d90852307..d50dfcba783ccc0a3ff07bb66ac295f1e5434f02 100644 (file)
@@ -4,8 +4,8 @@
  */
 use Friendica\App;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Model\GlobalContact;
-use Friendica\Object\Contact;
 
 require_once 'include/contact_selectors.php';
 require_once 'mod/contacts.php';
index 9feacaf5e38f2e2044f0fdd3aa06f4ed24f8b510..e9e55570dfe774be0ff18e26d6f5d660340701f5 100644 (file)
@@ -6,9 +6,9 @@ use Friendica\App;
 use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Model\GlobalContact;
 use Friendica\Network\Probe;
-use Friendica\Object\Contact;
 
 require_once 'include/contact_selectors.php';
 require_once 'mod/proxy.php';
index 7e1921f304124539d84a3114e5c6cbfd27c6b90b..32db9be92ca6b526735d31afccb1cd2e369427c3 100644 (file)
@@ -5,7 +5,7 @@
 use Friendica\App;
 use Friendica\Core\Config;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 
 require_once 'include/contact_selectors.php';
 require_once 'mod/contacts.php';
index 18d9f25bf598c2a40b2fc938e46de4b4434808d0..c999013eff121007f427610591ea21b1b56f40d0 100644 (file)
@@ -24,8 +24,8 @@ use Friendica\Core\PConfig;
 use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Network\Probe;
-use Friendica\Object\Contact;
 use Friendica\Protocol\Diaspora;
 
 require_once 'include/enotify.php';
index 61be7966e06b95a036a59bab13d318a08edbb1b1..b81f26db9df41219ffd28f1271756c150c40e81c 100644 (file)
@@ -9,7 +9,7 @@
 use Friendica\App;
 use Friendica\Core\Config;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 use Friendica\Protocol\DFRN;
 
 require_once 'include/items.php';
index 67395a9fcc714abb740ab9eecf15e1ac5177d278..bff1464ae47a1cb41db4e0750c9d3dca01ebbf17 100644 (file)
@@ -15,8 +15,8 @@ use Friendica\Core\Config;
 use Friendica\Core\PConfig;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Network\Probe;
-use Friendica\Object\Contact;
 
 require_once 'include/enotify.php';
 require_once 'include/group.php';
index d8ad6aeaba9c64c3039c54c2e61033ad8aed4188..f29e3eb69ba8e057fa375a71d25a3e42de83276d 100644 (file)
@@ -3,7 +3,7 @@
 use Friendica\App;
 use Friendica\Core\Config;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 
 function directory_init(App $a) {
        $a->set_pager_itemspage(60);
index 4ba122b566e278f3ac7f72941b2e0f97a09184ca..52dbf7512e136341af75c2eb0fb7e058bfd30242 100644 (file)
@@ -6,9 +6,9 @@ use Friendica\App;
 use Friendica\Core\Config;
 use Friendica\Core\System;
 use Friendica\Core\Worker;
+use Friendica\Model\Contact;
 use Friendica\Model\GlobalContact;
 use Friendica\Network\Probe;
-use Friendica\Object\Contact;
 use Friendica\Protocol\PortableContact;
 
 require_once 'include/contact_widgets.php';
index e81e654acb5528e2327d9c94a2d5d10c317d01be..2d22637ece0278e882c741efad75a09ae27a9d24 100644 (file)
@@ -4,7 +4,7 @@ use Friendica\App;
 use Friendica\Core\Config;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 use Friendica\Protocol\DFRN;
 
 function display_init(App $a) {
index b5e73ca9a44676be10b9f46d4c820ca4a14891ea..f0cffff4a1afb860e8dc0b8e05d52b7fcbc98ba8 100644 (file)
@@ -3,8 +3,8 @@
 use Friendica\App;
 use Friendica\Core\Config;
 use Friendica\Core\System;
+use Friendica\Model\Contact;
 use Friendica\Network\Probe;
-use Friendica\Object\Contact;
 
 require_once 'include/follow.php';
 require_once 'include/contact_selectors.php';
index 5542fe5b9837738da8f93fec7b6d525b5c4ae746..496c5e02907345ed0388226aea116d2c0584de81 100644 (file)
@@ -10,8 +10,8 @@
 
 use Friendica\App;
 use Friendica\Core\Config;
+use Friendica\Model\Contact;
 use Friendica\Model\GlobalContact;
-use Friendica\Object\Contact;
 
 function hovercard_init(App $a) {
        // Just for testing purposes
index ffac1c8e445deb4dddb6c824212d77d83b7bb3fe..c6478d99a0e6b501bfd1f20d7add211fe5bb3e45 100644 (file)
@@ -22,9 +22,9 @@ use Friendica\Core\Config;
 use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Model\GlobalContact;
 use Friendica\Network\Probe;
-use Friendica\Object\Contact;
 use Friendica\Protocol\Diaspora;
 use Friendica\Protocol\Email;
 use Friendica\Util\Emailer;
index 3a0d10c3191873f05590bdbdf6aece32209bf629..563ce5bedcbcb3aaac8190b6edf553cf7f5bd8ee 100644 (file)
@@ -6,7 +6,7 @@ use Friendica\App;
 use Friendica\Core\Config;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 
 require_once 'include/text.php';
 require_once 'include/contact_widgets.php';
index cefc44356f34a01101f1942ffa35c3e6444cd77c..7bb17f39068011e63d7241caf6a9c6cd546cf917 100644 (file)
@@ -4,7 +4,7 @@ use Friendica\App;
 use Friendica\Content\Smilies;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 
 require_once 'include/acl_selectors.php';
 require_once 'include/message.php';
index 7e61d083f68d8e87f338ce7ac323dc8b2bca19d8..3ac13b24e01c76a359d5a0e4e5e8ec39d878ffbe 100644 (file)
@@ -9,7 +9,7 @@ use Friendica\Core\System;
 use Friendica\Core\Config;
 use Friendica\Core\PConfig;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 
 require_once 'include/conversation.php';
 require_once 'include/group.php';
index 5fb9afc2ac48c77e1a2d5135994e597ddc326cc9..d7df8cb187d75c5b4af48fb018e5d573baa4d0c4 100644 (file)
@@ -4,7 +4,7 @@
  */
 use Friendica\App;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 
 require_once 'include/contact_selectors.php';
 
index 36a7d925d2f07c5a311ce74436d5e890264b6f9c..cc3ec71a658a940127b31b8264bc105b4dce43d6 100644 (file)
@@ -8,9 +8,9 @@ use Friendica\Core\System;
 use Friendica\Core\Config;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Model\Photo;
 use Friendica\Network\Probe;
-use Friendica\Object\Contact;
 use Friendica\Object\Image;
 
 require_once 'include/photos.php';
index 0f2a9584b863daf54454370990e53b29fb007f62..883129d14f1c22f2215e0de4e22ccba07dd60d8d 100644 (file)
@@ -9,7 +9,7 @@ use Friendica\Core\Cache;
 use Friendica\Core\System;
 use Friendica\Core\PConfig;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 use Friendica\Util\XML;
 
 require_once 'include/datetime.php';
index f05c76cedae20573a43994f4836dc61b68713fc1..716f7962485c9d2775963e745cecd873c87e4233 100644 (file)
@@ -5,8 +5,8 @@
 use Friendica\App;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Model\GlobalContact;
-use Friendica\Object\Contact;
 
 require_once 'include/contact_widgets.php';
 
index 3f94fb5760eb48ad69986fab4cf162d10019ac21..907982cd8a023eccbe842c2114d44150c5dd0237 100644 (file)
@@ -3,7 +3,7 @@
 use Friendica\App;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 
 require_once 'include/follow.php';
 require_once 'include/contact_selectors.php';
index 412966f862b7e3138085f9d92679377010054b2d..bb0e0c237fd432aff144e5cd804dcdf853432ab5 100644 (file)
@@ -5,7 +5,7 @@ use Friendica\Core\Config;
 use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 
 require_once('include/items.php');
 require_once('include/acl_selectors.php');
index 30ae92f8e32e7d2a6a5c530bc380b2109cc56a1b..1b4ff69c00285ad4b61f6536b0f4db084d479774 100644 (file)
@@ -3,7 +3,7 @@
 use Friendica\App;
 use Friendica\Core\Config;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 
 require_once('include/contact_selectors.php');
 
index 42d514e618eb227aa0dadd59c10f3de1e9bd600a..9adac10c921b6b98af1c0b7922ba318c2a44609e 100644 (file)
@@ -9,7 +9,7 @@ namespace Friendica\Core;
 use Friendica\Core\Pconfig;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 
 require_once 'include/html2plain.php';
 require_once 'include/datetime.php';
diff --git a/src/Model/Contact.php b/src/Model/Contact.php
new file mode 100644 (file)
index 0000000..3708603
--- /dev/null
@@ -0,0 +1,947 @@
+<?php
+
+/**
+ * @file src/Model/Contact.php
+ */
+
+namespace Friendica\Model;
+
+use Friendica\BaseObject;
+use Friendica\Core\PConfig;
+use Friendica\Core\System;
+use Friendica\Core\Worker;
+use Friendica\Database\DBM;
+use Friendica\Network\Probe;
+use Friendica\Object\Image;
+use Friendica\Protocol\Diaspora;
+use Friendica\Protocol\DFRN;
+use Friendica\Protocol\OStatus;
+use Friendica\Protocol\Salmon;
+use dba;
+
+require_once 'boot.php';
+require_once 'include/text.php';
+
+/**
+ * @brief functions for interacting with a contact
+ */
+class Contact extends BaseObject
+{
+       /**
+        * Creates the self-contact for the provided user id
+        *
+        * @param int $uid
+        * @return bool Operation success
+        */
+       public static function createSelfFromUserId($uid)
+       {
+               // Only create the entry if it doesn't exist yet
+               if (dba::exists('contact', ['uid' => intval($uid), 'self'])) {
+                       return true;
+               }
+
+               $user = dba::select('user', ['uid', 'username', 'nickname'], ['uid' => intval($uid)], ['limit' => 1]);
+               if (!DBM::is_result($user)) {
+                       return false;
+               }
+
+               $return = dba::insert('contact', [
+                       'uid'         => $user['uid'],
+                       'created'     => datetime_convert(),
+                       'self'        => 1,
+                       'name'        => $user['username'],
+                       'nick'        => $user['nickname'],
+                       'photo'       => System::baseUrl() . '/photo/profile/' . $user['uid'] . '.jpg',
+                       'thumb'       => System::baseUrl() . '/photo/avatar/'  . $user['uid'] . '.jpg',
+                       'micro'       => System::baseUrl() . '/photo/micro/'   . $user['uid'] . '.jpg',
+                       'blocked'     => 0,
+                       'pending'     => 0,
+                       'url'         => System::baseUrl() . '/profile/' . $user['nickname'],
+                       'nurl'        => normalise_link(System::baseUrl() . '/profile/' . $user['nickname']),
+                       'addr'        => $user['nickname'] . '@' . substr(System::baseUrl(), strpos(System::baseUrl(), '://') + 3),
+                       'request'     => System::baseUrl() . '/dfrn_request/' . $user['nickname'],
+                       'notify'      => System::baseUrl() . '/dfrn_notify/'  . $user['nickname'],
+                       'poll'        => System::baseUrl() . '/dfrn_poll/'    . $user['nickname'],
+                       'confirm'     => System::baseUrl() . '/dfrn_confirm/' . $user['nickname'],
+                       'poco'        => System::baseUrl() . '/poco/'         . $user['nickname'],
+                       'name-date'   => datetime_convert(),
+                       'uri-date'    => datetime_convert(),
+                       'avatar-date' => datetime_convert(),
+                       'closeness'   => 0
+               ]);
+
+               return $return;
+       }
+
+       /**
+        * @brief Marks a contact for removal
+        *
+        * @param int $id contact id
+        * @return null
+        */
+       public static function remove($id)
+       {
+               // We want just to make sure that we don't delete our "self" contact
+               $r = dba::select('contact', array('uid'), array('id' => $id, 'self' => false), array('limit' => 1));
+
+               if (!DBM::is_result($r) || !intval($r['uid'])) {
+                       return;
+               }
+
+               $archive = PConfig::get($r['uid'], 'system', 'archive_removed_contacts');
+               if ($archive) {
+                       dba::update('contact', array('archive' => true, 'network' => 'none', 'writable' => false), array('id' => $id));
+                       return;
+               }
+
+               dba::delete('contact', array('id' => $id));
+
+               // Delete the rest in the background
+               Worker::add(PRIORITY_LOW, 'RemoveContact', $id);
+       }
+
+       /**
+        * @brief Sends an unfriend message. Does not remove the contact
+        *
+        * @param array $user    User unfriending
+        * @param array $contact Contact unfriended
+        * @return void
+        */
+       public static function terminateFriendship(array $user, array $contact)
+       {
+               if ($contact['network'] === NETWORK_OSTATUS) {
+                       // create an unfollow slap
+                       $item = array();
+                       $item['verb'] = NAMESPACE_OSTATUS . "/unfollow";
+                       $item['follow'] = $contact["url"];
+                       $slap = OStatus::salmon($item, $user);
+
+                       if ((x($contact, 'notify')) && (strlen($contact['notify']))) {
+                               Salmon::slapper($user, $contact['notify'], $slap);
+                       }
+               } elseif ($contact['network'] === NETWORK_DIASPORA) {
+                       Diaspora::sendUnshare($user, $contact);
+               } elseif ($contact['network'] === NETWORK_DFRN) {
+                       DFRN::deliver($user, $contact, 'placeholder', 1);
+               }
+       }
+
+       /**
+        * @brief Marks a contact for archival after a communication issue delay
+        *
+        * Contact has refused to recognise us as a friend. We will start a countdown.
+        * If they still don't recognise us in 32 days, the relationship is over,
+        * and we won't waste any more time trying to communicate with them.
+        * This provides for the possibility that their database is temporarily messed
+        * up or some other transient event and that there's a possibility we could recover from it.
+        *
+        * @param array $contact contact to mark for archival
+        * @return type
+        */
+       public static function markForArchival(array $contact)
+       {
+               // Contact already archived or "self" contact? => nothing to do
+               if ($contact['archive'] || $contact['self']) {
+                       return;
+               }
+
+               if ($contact['term-date'] <= NULL_DATE) {
+                       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` = ? AND `term-date` <= ? AND NOT `self`', normalise_link($contact['url']), NULL_DATE));
+                       }
+               } else {
+                       /* @todo
+                        * We really should send a notification to the owner after 2-3 weeks
+                        * so they won't be surprised when the contact vanishes and can take
+                        * remedial action if this was a serious mistake or glitch
+                        */
+
+                       /// @todo Check for contact vitality via probing
+                       $expiry = $contact['term-date'] . ' + 32 days ';
+                       if (datetime_convert() > datetime_convert('UTC', 'UTC', $expiry)) {
+                               /* Relationship is really truly dead. archive them rather than
+                                * delete, though if the owner tries to unarchive them we'll start
+                                * the whole process over again.
+                                */
+                               dba::update('contact', array('archive' => 1), array('id' => $contact['id']));
+
+                               if ($contact['url'] != '') {
+                                       dba::update('contact', array('archive' => 1), array('nurl' => normalise_link($contact['url']), 'self' => false));
+                               }
+                       }
+               }
+       }
+
+       /**
+        * @brief Cancels the archival countdown
+        *
+        * @see Contact::markForArchival()
+        *
+        * @param array $contact contact to be unmarked for archival
+        * @return null
+        */
+       public static function unmarkForArchival(array $contact)
+       {
+               $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 (!$exists) {
+                       return;
+               }
+
+               // It's a miracle. Our dead contact has inexplicably come back to life.
+               $fields = array('term-date' => NULL_DATE, 'archive' => false);
+               dba::update('contact', $fields, array('id' => $contact['id']));
+
+               if ($contact['url'] != '') {
+                       dba::update('contact', $fields, array('nurl' => normalise_link($contact['url'])));
+               }
+       }
+
+       /**
+        * @brief Get contact data for a given profile link
+        *
+        * The function looks at several places (contact table and gcontact table) for the contact
+        * It caches its result for the same script execution to prevent duplicate calls
+        *
+        * @param string $url     The profile link
+        * @param int    $uid     User id
+        * @param array  $default If not data was found take this data as default value
+        *
+        * @return array Contact data
+        */
+       public static function getDetailsByURL($url, $uid = -1, array $default = [])
+       {
+               static $cache = array();
+
+               if ($url == '') {
+                       return $default;
+               }
+
+               if ($uid == -1) {
+                       $uid = local_user();
+               }
+
+               if (isset($cache[$url][$uid])) {
+                       return $cache[$url][$uid];
+               }
+
+               $ssl_url = str_replace('http://', 'https://', $url);
+
+               // Fetch contact data from the contact table for the given user
+               $s = dba::p("SELECT `id`, `id` AS `cid`, 0 AS `gid`, 0 AS `zid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, `xmpp`,
+                       `keywords`, `gender`, `photo`, `thumb`, `micro`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `contact-type`, `bd` AS `birthday`, `self`
+               FROM `contact` WHERE `nurl` = ? AND `uid` = ?", normalise_link($url), $uid);
+               $r = dba::inArray($s);
+
+               // Fetch contact data from the contact table for the given user, checking with the alias
+               if (!DBM::is_result($r)) {
+                       $s = dba::p("SELECT `id`, `id` AS `cid`, 0 AS `gid`, 0 AS `zid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, `xmpp`,
+                               `keywords`, `gender`, `photo`, `thumb`, `micro`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `contact-type`, `bd` AS `birthday`, `self`
+                       FROM `contact` WHERE `alias` IN (?, ?, ?) AND `uid` = ?", normalise_link($url), $url, $ssl_url, $uid);
+                       $r = dba::inArray($s);
+               }
+
+               // Fetch the data from the contact table with "uid=0" (which is filled automatically)
+               if (!DBM::is_result($r)) {
+                       $s = dba::p("SELECT `id`, 0 AS `cid`, `id` AS `zid`, 0 AS `gid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, `xmpp`,
+                       `keywords`, `gender`, `photo`, `thumb`, `micro`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `contact-type`, `bd` AS `birthday`, 0 AS `self`
+                       FROM `contact` WHERE `nurl` = ? AND `uid` = 0", normalise_link($url));
+                       $r = dba::inArray($s);
+               }
+
+               // Fetch the data from the contact table with "uid=0" (which is filled automatically) - checked with the alias
+               if (!DBM::is_result($r)) {
+                       $s = dba::p("SELECT `id`, 0 AS `cid`, `id` AS `zid`, 0 AS `gid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, `xmpp`,
+                       `keywords`, `gender`, `photo`, `thumb`, `micro`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `contact-type`, `bd` AS `birthday`, 0 AS `self`
+                       FROM `contact` WHERE `alias` IN (?, ?, ?) AND `uid` = 0", normalise_link($url), $url, $ssl_url);
+                       $r = dba::inArray($s);
+               }
+
+               // Fetch the data from the gcontact table
+               if (!DBM::is_result($r)) {
+                       $s = dba::p("SELECT 0 AS `id`, 0 AS `cid`, `id` AS `gid`, 0 AS `zid`, 0 AS `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, '' AS `xmpp`,
+                       `keywords`, `gender`, `photo`, `photo` AS `thumb`, `photo` AS `micro`, `community` AS `forum`, 0 AS `prv`, `community`, `contact-type`, `birthday`, 0 AS `self`
+                       FROM `gcontact` WHERE `nurl` = ?", normalise_link($url));
+                       $r = dba::inArray($s);
+               }
+
+               if (DBM::is_result($r)) {
+                       // If there is more than one entry we filter out the connector networks
+                       if (count($r) > 1) {
+                               foreach ($r as $id => $result) {
+                                       if ($result["network"] == NETWORK_STATUSNET) {
+                                               unset($r[$id]);
+                                       }
+                               }
+                       }
+
+                       $profile = array_shift($r);
+
+                       // "bd" always contains the upcoming birthday of a contact.
+                       // "birthday" might contain the birthday including the year of birth.
+                       if ($profile["birthday"] > '0001-01-01') {
+                               $bd_timestamp = strtotime($profile["birthday"]);
+                               $month = date("m", $bd_timestamp);
+                               $day = date("d", $bd_timestamp);
+
+                               $current_timestamp = time();
+                               $current_year = date("Y", $current_timestamp);
+                               $current_month = date("m", $current_timestamp);
+                               $current_day = date("d", $current_timestamp);
+
+                               $profile["bd"] = $current_year . "-" . $month . "-" . $day;
+                               $current = $current_year . "-" . $current_month . "-" . $current_day;
+
+                               if ($profile["bd"] < $current) {
+                                       $profile["bd"] = ( ++$current_year) . "-" . $month . "-" . $day;
+                               }
+                       } else {
+                               $profile["bd"] = '0001-01-01';
+                       }
+               } else {
+                       $profile = $default;
+               }
+
+               if (($profile["photo"] == "") && isset($default["photo"])) {
+                       $profile["photo"] = $default["photo"];
+               }
+
+               if (($profile["name"] == "") && isset($default["name"])) {
+                       $profile["name"] = $default["name"];
+               }
+
+               if (($profile["network"] == "") && isset($default["network"])) {
+                       $profile["network"] = $default["network"];
+               }
+
+               if (($profile["thumb"] == "") && isset($profile["photo"])) {
+                       $profile["thumb"] = $profile["photo"];
+               }
+
+               if (($profile["micro"] == "") && isset($profile["thumb"])) {
+                       $profile["micro"] = $profile["thumb"];
+               }
+
+               if ((($profile["addr"] == "") || ($profile["name"] == "")) && ($profile["gid"] != 0)
+                       && in_array($profile["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS))
+               ) {
+                       Worker::add(PRIORITY_LOW, "UpdateGContact", $profile["gid"]);
+               }
+
+               // Show contact details of Diaspora contacts only if connected
+               if (($profile["cid"] == 0) && ($profile["network"] == NETWORK_DIASPORA)) {
+                       $profile["location"] = "";
+                       $profile["about"] = "";
+                       $profile["gender"] = "";
+                       $profile["birthday"] = '0001-01-01';
+               }
+
+               $cache[$url][$uid] = $profile;
+
+               return $profile;
+       }
+
+       /**
+        * @brief Get contact data for a given address
+        *
+        * The function looks at several places (contact table and gcontact table) for the contact
+        *
+        * @param string $addr The profile link
+        * @param int    $uid  User id
+        *
+        * @return array Contact data
+        */
+       public static function getDetailsByAddr($addr, $uid = -1)
+       {
+               static $cache = array();
+
+               if ($addr == '') {
+                       return array();
+               }
+
+               if ($uid == -1) {
+                       $uid = local_user();
+               }
+
+               // Fetch contact data from the contact table for the given user
+               $r = q("SELECT `id`, `id` AS `cid`, 0 AS `gid`, 0 AS `zid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, `xmpp`,
+                       `keywords`, `gender`, `photo`, `thumb`, `micro`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `contact-type`, `bd` AS `birthday`, `self`
+               FROM `contact` WHERE `addr` = '%s' AND `uid` = %d", dbesc($addr), intval($uid));
+
+               // Fetch the data from the contact table with "uid=0" (which is filled automatically)
+               if (!DBM::is_result($r))
+                       $r = q("SELECT `id`, 0 AS `cid`, `id` AS `zid`, 0 AS `gid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, `xmpp`,
+                       `keywords`, `gender`, `photo`, `thumb`, `micro`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `contact-type`, `bd` AS `birthday`, 0 AS `self`
+                       FROM `contact` WHERE `addr` = '%s' AND `uid` = 0", dbesc($addr));
+
+               // Fetch the data from the gcontact table
+               if (!DBM::is_result($r))
+                       $r = q("SELECT 0 AS `id`, 0 AS `cid`, `id` AS `gid`, 0 AS `zid`, 0 AS `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, '' AS `xmpp`,
+                       `keywords`, `gender`, `photo`, `photo` AS `thumb`, `photo` AS `micro`, `community` AS `forum`, 0 AS `prv`, `community`, `contact-type`, `birthday`, 0 AS `self`
+                       FROM `gcontact` WHERE `addr` = '%s'", dbesc($addr));
+
+               if (!DBM::is_result($r)) {
+                       $data = Probe::uri($addr);
+
+                       $profile = self::getDetailsByURL($data['url'], $uid);
+               } else {
+                       $profile = $r[0];
+               }
+
+               return $profile;
+       }
+
+       /**
+        * @brief Returns the data array for the photo menu of a given contact
+        *
+        * @param array $contact contact
+        * @param int   $uid     optional, default 0
+        * @return array
+        */
+       public static function photoMenu(array $contact, $uid = 0)
+       {
+               // @todo Unused, to be removed
+               $a = get_app();
+
+               $contact_url = '';
+               $pm_url = '';
+               $status_link = '';
+               $photos_link = '';
+               $posts_link = '';
+               $contact_drop_link = '';
+               $poke_link = '';
+
+               if ($uid == 0) {
+                       $uid = local_user();
+               }
+
+               if ($contact['uid'] != $uid) {
+                       if ($uid == 0) {
+                               $profile_link = zrl($contact['url']);
+                               $menu = array('profile' => array(t('View Profile'), $profile_link, true));
+
+                               return $menu;
+                       }
+
+                       $r = dba::select('contact', array(), array('nurl' => $contact['nurl'], 'network' => $contact['network'], 'uid' => $uid), array('limit' => 1));
+                       if ($r) {
+                               return self::photoMenu($r, $uid);
+                       } else {
+                               $profile_link = zrl($contact['url']);
+                               $connlnk = 'follow/?url=' . $contact['url'];
+                               $menu = array(
+                                       'profile' => array(t('View Profile'), $profile_link, true),
+                                       'follow' => array(t('Connect/Follow'), $connlnk, true)
+                               );
+
+                               return $menu;
+                       }
+               }
+
+               $sparkle = false;
+               if ($contact['network'] === NETWORK_DFRN) {
+                       $sparkle = true;
+                       $profile_link = System::baseUrl() . '/redir/' . $contact['id'];
+               } else {
+                       $profile_link = $contact['url'];
+               }
+
+               if ($profile_link === 'mailbox') {
+                       $profile_link = '';
+               }
+
+               if ($sparkle) {
+                       $status_link = $profile_link . '?url=status';
+                       $photos_link = $profile_link . '?url=photos';
+                       $profile_link = $profile_link . '?url=profile';
+               }
+
+               if (in_array($contact['network'], array(NETWORK_DFRN, NETWORK_DIASPORA))) {
+                       $pm_url = System::baseUrl() . '/message/new/' . $contact['id'];
+               }
+
+               if ($contact['network'] == NETWORK_DFRN) {
+                       $poke_link = System::baseUrl() . '/poke/?f=&c=' . $contact['id'];
+               }
+
+               $contact_url = System::baseUrl() . '/contacts/' . $contact['id'];
+
+               $posts_link = System::baseUrl() . '/contacts/' . $contact['id'] . '/posts';
+               $contact_drop_link = System::baseUrl() . '/contacts/' . $contact['id'] . '/drop?confirm=1';
+
+               /**
+                * Menu array:
+                * "name" => [ "Label", "link", (bool)Should the link opened in a new tab? ]
+                */
+               $menu = array(
+                       'status' => array(t("View Status"), $status_link, true),
+                       'profile' => array(t("View Profile"), $profile_link, true),
+                       'photos' => array(t("View Photos"), $photos_link, true),
+                       'network' => array(t("Network Posts"), $posts_link, false),
+                       'edit' => array(t("View Contact"), $contact_url, false),
+                       'drop' => array(t("Drop Contact"), $contact_drop_link, false),
+                       'pm' => array(t("Send PM"), $pm_url, false),
+                       'poke' => array(t("Poke"), $poke_link, false),
+               );
+
+
+               $args = array('contact' => $contact, 'menu' => &$menu);
+
+               call_hooks('contact_photo_menu', $args);
+
+               $menucondensed = array();
+
+               foreach ($menu as $menuname => $menuitem) {
+                       if ($menuitem[1] != '') {
+                               $menucondensed[$menuname] = $menuitem;
+                       }
+               }
+
+               return $menucondensed;
+       }
+
+       /**
+        * @brief Returns ungrouped contact count or list for user
+        *
+        * Returns either the total number of ungrouped contacts for the given user
+        * id or a paginated list of ungrouped contacts.
+        *
+        * @param int $uid   uid
+        * @param int $start optional, default 0
+        * @param int $count optional, default 0
+        *
+        * @return array
+        */
+       public static function getUngroupedList($uid, $start = 0, $count = 0)
+       {
+               if (!$count) {
+                       $r = q(
+                               "SELECT COUNT(*) AS `total`
+                                FROM `contact`
+                                WHERE `uid` = %d
+                                AND NOT `self`
+                                AND NOT `blocked`
+                                AND NOT `pending`
+                                AND `id` NOT IN (
+                                       SELECT DISTINCT(`contact-id`)
+                                       FROM `group_member`
+                                       WHERE `uid` = %d
+                               )", intval($uid), intval($uid)
+                       );
+
+                       return $r;
+               }
+
+               $r = q(
+                       "SELECT *
+                       FROM `contact`
+                       WHERE `uid` = %d
+                       AND NOT `self`
+                       AND NOT `blocked`
+                       AND NOT `pending`
+                       AND `id` NOT IN (
+                               SELECT DISTINCT(`contact-id`)
+                               FROM `group_member` WHERE `uid` = %d
+                       )
+                       LIMIT %d, %d", intval($uid), intval($uid), intval($start), intval($count)
+               );
+               return $r;
+       }
+
+       /**
+        * @brief Fetch the contact id for a given url and user
+        *
+        * First lookup in the contact table to find a record matching either `url`, `nurl`,
+        * `addr` or `alias`.
+        *
+        * If there's no record and we aren't looking for a public contact, we quit.
+        * If there's one, we check that it isn't time to update the picture else we
+        * directly return the found contact id.
+        *
+        * Second, we probe the provided $url wether it's http://server.tld/profile or
+        * nick@server.tld. We quit if we can't get any info back.
+        *
+        * Third, we create the contact record if it doesn't exist
+        *
+        * Fourth, we update the existing record with the new data (avatar, alias, nick)
+        * if there's any updates
+        *
+        * @param string  $url       Contact URL
+        * @param integer $uid       The user id for the contact (0 = public contact)
+        * @param boolean $no_update Don't update the contact
+        *
+        * @return integer Contact ID
+        */
+       public static function getIdForURL($url, $uid = 0, $no_update = false)
+       {
+               logger("Get contact data for url " . $url . " and user " . $uid . " - " . System::callstack(), LOGGER_DEBUG);
+
+               $contact_id = 0;
+
+               if ($url == '') {
+                       return 0;
+               }
+
+               /// @todo Verify if we can't use Contact::getDetailsByUrl instead of the following
+               // We first try the nurl (http://server.tld/nick), most common case
+               $contact = dba::select('contact', array('id', 'avatar-date'), array('nurl' => normalise_link($url), 'uid' => $uid), array('limit' => 1));
+
+               // Then the addr (nick@server.tld)
+               if (!DBM::is_result($contact)) {
+                       $contact = dba::select('contact', array('id', 'avatar-date'), array('addr' => $url, 'uid' => $uid), array('limit' => 1));
+               }
+
+               // Then the alias (which could be anything)
+               if (!DBM::is_result($contact)) {
+                       // The link could be provided as http although we stored it as https
+                       $ssl_url = str_replace('http://', 'https://', $url);
+                       $r = dba::select('contact', array('id', 'avatar-date'), array('`alias` IN (?, ?, ?) AND `uid` = ?', $url, normalise_link($url), $ssl_url, $uid), array('limit' => 1));
+                       $contact = dba::fetch($r);
+                       dba::close($r);
+               }
+
+               if (DBM::is_result($contact)) {
+                       $contact_id = $contact["id"];
+
+                       // Update the contact every 7 days
+                       $update_contact = ($contact['avatar-date'] < datetime_convert('', '', 'now -7 days'));
+
+                       // We force the update if the avatar is empty
+                       if ($contact['avatar'] == '') {
+                               $update_contact = true;
+                       }
+
+                       if (!$update_contact || $no_update) {
+                               return $contact_id;
+                       }
+               } elseif ($uid != 0) {
+                       // Non-existing user-specific contact, exiting
+                       return 0;
+               }
+
+               $data = Probe::uri($url, "", $uid);
+
+               // Last try in gcontact for unsupported networks
+               if (!in_array($data["network"], array(NETWORK_DFRN, NETWORK_OSTATUS, NETWORK_DIASPORA, NETWORK_PUMPIO, NETWORK_MAIL))) {
+                       if ($uid != 0) {
+                               return 0;
+                       }
+
+                       // Get data from the gcontact table
+                       $gcontacts = dba::select('gcontact', array('name', 'nick', 'url', 'photo', 'addr', 'alias', 'network'), array('nurl' => normalise_link($url)), array('limit' => 1));
+                       if (!DBM::is_result($gcontacts)) {
+                               return 0;
+                       }
+
+                       $data = array_merge($data, $gcontacts);
+               }
+
+               if (!$contact_id && ($data["alias"] != '') && ($data["alias"] != $url)) {
+                       $contact_id = self::getIdForURL($data["alias"], $uid, true);
+               }
+
+               $url = $data["url"];
+               if (!$contact_id) {
+                       dba::insert(
+                               'contact', array('uid' => $uid, 'created' => datetime_convert(), 'url' => $data["url"],
+                               'nurl' => normalise_link($data["url"]), 'addr' => $data["addr"],
+                               'alias' => $data["alias"], 'notify' => $data["notify"], 'poll' => $data["poll"],
+                               'name' => $data["name"], 'nick' => $data["nick"], 'photo' => $data["photo"],
+                               'keywords' => $data["keywords"], 'location' => $data["location"], 'about' => $data["about"],
+                               'network' => $data["network"], 'pubkey' => $data["pubkey"],
+                               'rel' => CONTACT_IS_SHARING, 'priority' => $data["priority"],
+                               'batch' => $data["batch"], 'request' => $data["request"],
+                               'confirm' => $data["confirm"], 'poco' => $data["poco"],
+                               'name-date' => datetime_convert(), 'uri-date' => datetime_convert(),
+                               'avatar-date' => datetime_convert(), 'writable' => 1, 'blocked' => 0,
+                               'readonly' => 0, 'pending' => 0)
+                       );
+
+                       $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;
+                       }
+
+                       $contact_id = $contacts[0]["id"];
+
+                       // Update the newly created contact from data in the gcontact table
+                       $gcontact = dba::select('gcontact', array('location', 'about', 'keywords', 'gender'), array('nurl' => normalise_link($data["url"])), array('limit' => 1));
+                       if (DBM::is_result($gcontact)) {
+                               // Only use the information when the probing hadn't fetched these values
+                               if ($data['keywords'] != '') {
+                                       unset($gcontact['keywords']);
+                               }
+                               if ($data['location'] != '') {
+                                       unset($gcontact['location']);
+                               }
+                               if ($data['about'] != '') {
+                                       unset($gcontact['about']);
+                               }
+                               dba::update('contact', $gcontact, array('id' => $contact_id));
+                       }
+
+                       if (count($contacts) > 1 && $uid == 0 && $contact_id != 0 && $data["url"] != "") {
+                               dba::delete('contact', array("`nurl` = ? AND `uid` = 0 AND `id` != ? AND NOT `self`",
+                                       normalise_link($data["url"]), $contact_id));
+                       }
+               }
+
+               self::updateAvatar($data["photo"], $uid, $contact_id);
+
+               $fields = array('url', 'nurl', 'addr', 'alias', 'name', 'nick', 'keywords', 'location', 'about', 'avatar-date', 'pubkey');
+               $contact = dba::select('contact', $fields, array('id' => $contact_id), array('limit' => 1));
+
+               // This condition should always be true
+               if (!DBM::is_result($contact)) {
+                       return $contact_id;
+               }
+
+               $updated = array('addr' => $data['addr'],
+                       'alias' => $data['alias'],
+                       'url' => $data['url'],
+                       'nurl' => normalise_link($data['url']),
+                       'name' => $data['name'],
+                       'nick' => $data['nick']);
+
+               // Only fill the pubkey if it was empty before. We have to prevent identity theft.
+               if (!empty($contact['pubkey'])) {
+                       unset($contact['pubkey']);
+               } else {
+                       $updated['pubkey'] = $data['pubkey'];
+               }
+
+               if ($data['keywords'] != '') {
+                       $updated['keywords'] = $data['keywords'];
+               }
+               if ($data['location'] != '') {
+                       $updated['location'] = $data['location'];
+               }
+               if ($data['about'] != '') {
+                       $updated['about'] = $data['about'];
+               }
+
+               if (($data["addr"] != $contact["addr"]) || ($data["alias"] != $contact["alias"])) {
+                       $updated['uri-date'] = datetime_convert();
+               }
+               if (($data["name"] != $contact["name"]) || ($data["nick"] != $contact["nick"])) {
+                       $updated['name-date'] = datetime_convert();
+               }
+
+               $updated['avatar-date'] = datetime_convert();
+
+               dba::update('contact', $updated, array('id' => $contact_id), $contact);
+
+               return $contact_id;
+       }
+
+       /**
+        * @brief Checks if the contact is blocked
+        *
+        * @param int $cid contact id
+        *
+        * @return boolean Is the contact blocked?
+        */
+       public static function isBlocked($cid)
+       {
+               if ($cid == 0) {
+                       return false;
+               }
+
+               $blocked = dba::select('contact', array('blocked'), array('id' => $cid), array('limit' => 1));
+               if (!DBM::is_result($blocked)) {
+                       return false;
+               }
+               return (bool) $blocked['blocked'];
+       }
+
+       /**
+        * @brief Checks if the contact is hidden
+        *
+        * @param int $cid contact id
+        *
+        * @return boolean Is the contact hidden?
+        */
+       public static function isHidden($cid)
+       {
+               if ($cid == 0) {
+                       return false;
+               }
+
+               $hidden = dba::select('contact', array('hidden'), array('id' => $cid), array('limit' => 1));
+               if (!DBM::is_result($hidden)) {
+                       return false;
+               }
+               return (bool) $hidden['hidden'];
+       }
+
+       /**
+        * @brief Returns posts from a given contact url
+        *
+        * @param string $contact_url Contact URL
+        *
+        * @return string posts in HTML
+        */
+       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 = 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 '';
+               }
+
+               if (in_array($r[0]["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS, ""))) {
+                       $sql = "(`item`.`uid` = 0 OR (`item`.`uid` = %d AND NOT `item`.`global`))";
+               } else {
+                       $sql = "`item`.`uid` = %d";
+               }
+
+               $author_id = intval($r[0]["author-id"]);
+
+               $contact = ($r[0]["contact-type"] == ACCOUNT_TYPE_COMMUNITY ? 'owner-id' : 'author-id');
+
+               $r = q(item_query() . " AND `item`.`" . $contact . "` = %d AND " . $sql .
+                       " ORDER BY `item`.`created` DESC LIMIT %d, %d", intval($author_id), intval(local_user()), intval($a->pager['start']), intval($a->pager['itemspage'])
+               );
+
+
+               $o = conversation($a, $r, 'community', false);
+
+               $o .= alt_pager($a, count($r));
+
+               return $o;
+       }
+
+       /**
+        * @brief Returns the account type name
+        *
+        * The function can be called with either the user or the contact array
+        *
+        * @param array $contact contact or user array
+        * @return string
+        */
+       public static function getAccountType(array $contact)
+       {
+               // There are several fields that indicate that the contact or user is a forum
+               // "page-flags" is a field in the user table,
+               // "forum" and "prv" are used in the contact table. They stand for PAGE_COMMUNITY and PAGE_PRVGROUP.
+               // "community" is used in the gcontact table and is true if the contact is PAGE_COMMUNITY or PAGE_PRVGROUP.
+               if ((isset($contact['page-flags']) && (intval($contact['page-flags']) == PAGE_COMMUNITY))
+                       || (isset($contact['page-flags']) && (intval($contact['page-flags']) == PAGE_PRVGROUP))
+                       || (isset($contact['forum']) && intval($contact['forum']))
+                       || (isset($contact['prv']) && intval($contact['prv']))
+                       || (isset($contact['community']) && intval($contact['community']))
+               ) {
+                       $type = ACCOUNT_TYPE_COMMUNITY;
+               } else {
+                       $type = ACCOUNT_TYPE_PERSON;
+               }
+
+               // The "contact-type" (contact table) and "account-type" (user table) are more general then the chaos from above.
+               if (isset($contact["contact-type"])) {
+                       $type = $contact["contact-type"];
+               }
+               if (isset($contact["account-type"])) {
+                       $type = $contact["account-type"];
+               }
+
+               switch ($type) {
+                       case ACCOUNT_TYPE_ORGANISATION:
+                               $account_type = t("Organisation");
+                               break;
+                       case ACCOUNT_TYPE_NEWS:
+                               $account_type = t('News');
+                               break;
+                       case ACCOUNT_TYPE_COMMUNITY:
+                               $account_type = t("Forum");
+                               break;
+                       default:
+                               $account_type = "";
+                               break;
+               }
+
+               return $account_type;
+       }
+
+       /**
+        * @brief Blocks a contact
+        *
+        * @param int $uid
+        * @return bool
+        */
+       public static function block($uid)
+       {
+               $return = dba::update('contact', ['blocked' => true], ['id' => $uid]);
+
+               return $return;
+       }
+
+       /**
+        * @brief Unblocks a contact
+        *
+        * @param int $uid
+        * @return bool
+        */
+       public static function unblock($uid)
+       {
+               $return = dba::update('contact', ['blocked' => false], ['id' => $uid]);
+
+               return $return;
+  }
+
+  /**
+   * @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 = Image::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;
+       }
+}
index 6ec1101775df0f636f838a7e6c29499fce4166ce..d0ebe85020dad9808cdebb10a5f0519c9b79344d 100644 (file)
@@ -10,7 +10,7 @@ use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
 use Friendica\Network\Probe;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 use Friendica\Object\Profile;
 use Friendica\Protocol\PortableContact;
 use dba;
index 1f70bfb158d3be8273641654028bfa29df33c86f..54d2d3bc60f9a8bc222bfa2f24911f9b8b5954ec 100644 (file)
@@ -11,8 +11,8 @@ use Friendica\Core\Config;
 use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Model\Photo;
-use Friendica\Object\Contact;
 use Friendica\Object\Image;
 use dba;
 
diff --git a/src/Object/Contact.php b/src/Object/Contact.php
deleted file mode 100644 (file)
index f72ec02..0000000
+++ /dev/null
@@ -1,948 +0,0 @@
-<?php
-
-/**
- * @file src/Object/Contact.php
- */
-
-namespace Friendica\Object;
-
-use Friendica\App;
-use Friendica\BaseObject;
-use Friendica\Core\PConfig;
-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;
-use Friendica\Protocol\Salmon;
-use dba;
-
-require_once 'boot.php';
-require_once 'include/text.php';
-
-/**
- * @brief functions for interacting with a contact
- */
-class Contact extends BaseObject
-{
-       /**
-        * Creates the self-contact for the provided user id
-        *
-        * @param int $uid
-        * @return bool Operation success
-        */
-       public static function createSelfFromUserId($uid)
-       {
-               // Only create the entry if it doesn't exist yet
-               if (dba::exists('contact', ['uid' => intval($uid), 'self'])) {
-                       return true;
-               }
-
-               $user = dba::select('user', ['uid', 'username', 'nickname'], ['uid' => intval($uid)], ['limit' => 1]);
-               if (!DBM::is_result($user)) {
-                       return false;
-               }
-
-               $return = dba::insert('contact', [
-                       'uid'         => $user['uid'],
-                       'created'     => datetime_convert(),
-                       'self'        => 1,
-                       'name'        => $user['username'],
-                       'nick'        => $user['nickname'],
-                       'photo'       => System::baseUrl() . '/photo/profile/' . $user['uid'] . '.jpg',
-                       'thumb'       => System::baseUrl() . '/photo/avatar/'  . $user['uid'] . '.jpg',
-                       'micro'       => System::baseUrl() . '/photo/micro/'   . $user['uid'] . '.jpg',
-                       'blocked'     => 0,
-                       'pending'     => 0,
-                       'url'         => System::baseUrl() . '/profile/' . $user['nickname'],
-                       'nurl'        => normalise_link(System::baseUrl() . '/profile/' . $user['nickname']),
-                       'addr'        => $user['nickname'] . '@' . substr(System::baseUrl(), strpos(System::baseUrl(), '://') + 3),
-                       'request'     => System::baseUrl() . '/dfrn_request/' . $user['nickname'],
-                       'notify'      => System::baseUrl() . '/dfrn_notify/'  . $user['nickname'],
-                       'poll'        => System::baseUrl() . '/dfrn_poll/'    . $user['nickname'],
-                       'confirm'     => System::baseUrl() . '/dfrn_confirm/' . $user['nickname'],
-                       'poco'        => System::baseUrl() . '/poco/'         . $user['nickname'],
-                       'name-date'   => datetime_convert(),
-                       'uri-date'    => datetime_convert(),
-                       'avatar-date' => datetime_convert(),
-                       'closeness'   => 0
-               ]);
-
-               return $return;
-       }
-
-       /**
-        * @brief Marks a contact for removal
-        *
-        * @param int $id contact id
-        * @return null
-        */
-       public static function remove($id)
-       {
-               // We want just to make sure that we don't delete our "self" contact
-               $r = dba::select('contact', array('uid'), array('id' => $id, 'self' => false), array('limit' => 1));
-
-               if (!DBM::is_result($r) || !intval($r['uid'])) {
-                       return;
-               }
-
-               $archive = PConfig::get($r['uid'], 'system', 'archive_removed_contacts');
-               if ($archive) {
-                       dba::update('contact', array('archive' => true, 'network' => 'none', 'writable' => false), array('id' => $id));
-                       return;
-               }
-
-               dba::delete('contact', array('id' => $id));
-
-               // Delete the rest in the background
-               Worker::add(PRIORITY_LOW, 'RemoveContact', $id);
-       }
-
-       /**
-        * @brief Sends an unfriend message. Does not remove the contact
-        *
-        * @param array $user    User unfriending
-        * @param array $contact Contact unfriended
-        * @return void
-        */
-       public static function terminateFriendship(array $user, array $contact)
-       {
-               if ($contact['network'] === NETWORK_OSTATUS) {
-                       // create an unfollow slap
-                       $item = array();
-                       $item['verb'] = NAMESPACE_OSTATUS . "/unfollow";
-                       $item['follow'] = $contact["url"];
-                       $slap = OStatus::salmon($item, $user);
-
-                       if ((x($contact, 'notify')) && (strlen($contact['notify']))) {
-                               Salmon::slapper($user, $contact['notify'], $slap);
-                       }
-               } elseif ($contact['network'] === NETWORK_DIASPORA) {
-                       Diaspora::sendUnshare($user, $contact);
-               } elseif ($contact['network'] === NETWORK_DFRN) {
-                       DFRN::deliver($user, $contact, 'placeholder', 1);
-               }
-       }
-
-       /**
-        * @brief Marks a contact for archival after a communication issue delay
-        *
-        * Contact has refused to recognise us as a friend. We will start a countdown.
-        * If they still don't recognise us in 32 days, the relationship is over,
-        * and we won't waste any more time trying to communicate with them.
-        * This provides for the possibility that their database is temporarily messed
-        * up or some other transient event and that there's a possibility we could recover from it.
-        *
-        * @param array $contact contact to mark for archival
-        * @return type
-        */
-       public static function markForArchival(array $contact)
-       {
-               // Contact already archived or "self" contact? => nothing to do
-               if ($contact['archive'] || $contact['self']) {
-                       return;
-               }
-
-               if ($contact['term-date'] <= NULL_DATE) {
-                       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` = ? AND `term-date` <= ? AND NOT `self`', normalise_link($contact['url']), NULL_DATE));
-                       }
-               } else {
-                       /* @todo
-                        * We really should send a notification to the owner after 2-3 weeks
-                        * so they won't be surprised when the contact vanishes and can take
-                        * remedial action if this was a serious mistake or glitch
-                        */
-
-                       /// @todo Check for contact vitality via probing
-                       $expiry = $contact['term-date'] . ' + 32 days ';
-                       if (datetime_convert() > datetime_convert('UTC', 'UTC', $expiry)) {
-                               /* Relationship is really truly dead. archive them rather than
-                                * delete, though if the owner tries to unarchive them we'll start
-                                * the whole process over again.
-                                */
-                               dba::update('contact', array('archive' => 1), array('id' => $contact['id']));
-
-                               if ($contact['url'] != '') {
-                                       dba::update('contact', array('archive' => 1), array('nurl' => normalise_link($contact['url']), 'self' => false));
-                               }
-                       }
-               }
-       }
-
-       /**
-        * @brief Cancels the archival countdown
-        *
-        * @see Contact::markForArchival()
-        *
-        * @param array $contact contact to be unmarked for archival
-        * @return null
-        */
-       public static function unmarkForArchival(array $contact)
-       {
-               $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 (!$exists) {
-                       return;
-               }
-
-               // It's a miracle. Our dead contact has inexplicably come back to life.
-               $fields = array('term-date' => NULL_DATE, 'archive' => false);
-               dba::update('contact', $fields, array('id' => $contact['id']));
-
-               if ($contact['url'] != '') {
-                       dba::update('contact', $fields, array('nurl' => normalise_link($contact['url'])));
-               }
-       }
-
-       /**
-        * @brief Get contact data for a given profile link
-        *
-        * The function looks at several places (contact table and gcontact table) for the contact
-        * It caches its result for the same script execution to prevent duplicate calls
-        *
-        * @param string $url     The profile link
-        * @param int    $uid     User id
-        * @param array  $default If not data was found take this data as default value
-        *
-        * @return array Contact data
-        */
-       public static function getDetailsByURL($url, $uid = -1, array $default = [])
-       {
-               static $cache = array();
-
-               if ($url == '') {
-                       return $default;
-               }
-
-               if ($uid == -1) {
-                       $uid = local_user();
-               }
-
-               if (isset($cache[$url][$uid])) {
-                       return $cache[$url][$uid];
-               }
-
-               $ssl_url = str_replace('http://', 'https://', $url);
-
-               // Fetch contact data from the contact table for the given user
-               $s = dba::p("SELECT `id`, `id` AS `cid`, 0 AS `gid`, 0 AS `zid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, `xmpp`,
-                       `keywords`, `gender`, `photo`, `thumb`, `micro`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `contact-type`, `bd` AS `birthday`, `self`
-               FROM `contact` WHERE `nurl` = ? AND `uid` = ?", normalise_link($url), $uid);
-               $r = dba::inArray($s);
-
-               // Fetch contact data from the contact table for the given user, checking with the alias
-               if (!DBM::is_result($r)) {
-                       $s = dba::p("SELECT `id`, `id` AS `cid`, 0 AS `gid`, 0 AS `zid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, `xmpp`,
-                               `keywords`, `gender`, `photo`, `thumb`, `micro`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `contact-type`, `bd` AS `birthday`, `self`
-                       FROM `contact` WHERE `alias` IN (?, ?, ?) AND `uid` = ?", normalise_link($url), $url, $ssl_url, $uid);
-                       $r = dba::inArray($s);
-               }
-
-               // Fetch the data from the contact table with "uid=0" (which is filled automatically)
-               if (!DBM::is_result($r)) {
-                       $s = dba::p("SELECT `id`, 0 AS `cid`, `id` AS `zid`, 0 AS `gid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, `xmpp`,
-                       `keywords`, `gender`, `photo`, `thumb`, `micro`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `contact-type`, `bd` AS `birthday`, 0 AS `self`
-                       FROM `contact` WHERE `nurl` = ? AND `uid` = 0", normalise_link($url));
-                       $r = dba::inArray($s);
-               }
-
-               // Fetch the data from the contact table with "uid=0" (which is filled automatically) - checked with the alias
-               if (!DBM::is_result($r)) {
-                       $s = dba::p("SELECT `id`, 0 AS `cid`, `id` AS `zid`, 0 AS `gid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, `xmpp`,
-                       `keywords`, `gender`, `photo`, `thumb`, `micro`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `contact-type`, `bd` AS `birthday`, 0 AS `self`
-                       FROM `contact` WHERE `alias` IN (?, ?, ?) AND `uid` = 0", normalise_link($url), $url, $ssl_url);
-                       $r = dba::inArray($s);
-               }
-
-               // Fetch the data from the gcontact table
-               if (!DBM::is_result($r)) {
-                       $s = dba::p("SELECT 0 AS `id`, 0 AS `cid`, `id` AS `gid`, 0 AS `zid`, 0 AS `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, '' AS `xmpp`,
-                       `keywords`, `gender`, `photo`, `photo` AS `thumb`, `photo` AS `micro`, `community` AS `forum`, 0 AS `prv`, `community`, `contact-type`, `birthday`, 0 AS `self`
-                       FROM `gcontact` WHERE `nurl` = ?", normalise_link($url));
-                       $r = dba::inArray($s);
-               }
-
-               if (DBM::is_result($r)) {
-                       // If there is more than one entry we filter out the connector networks
-                       if (count($r) > 1) {
-                               foreach ($r as $id => $result) {
-                                       if ($result["network"] == NETWORK_STATUSNET) {
-                                               unset($r[$id]);
-                                       }
-                               }
-                       }
-
-                       $profile = array_shift($r);
-
-                       // "bd" always contains the upcoming birthday of a contact.
-                       // "birthday" might contain the birthday including the year of birth.
-                       if ($profile["birthday"] > '0001-01-01') {
-                               $bd_timestamp = strtotime($profile["birthday"]);
-                               $month = date("m", $bd_timestamp);
-                               $day = date("d", $bd_timestamp);
-
-                               $current_timestamp = time();
-                               $current_year = date("Y", $current_timestamp);
-                               $current_month = date("m", $current_timestamp);
-                               $current_day = date("d", $current_timestamp);
-
-                               $profile["bd"] = $current_year . "-" . $month . "-" . $day;
-                               $current = $current_year . "-" . $current_month . "-" . $current_day;
-
-                               if ($profile["bd"] < $current) {
-                                       $profile["bd"] = ( ++$current_year) . "-" . $month . "-" . $day;
-                               }
-                       } else {
-                               $profile["bd"] = '0001-01-01';
-                       }
-               } else {
-                       $profile = $default;
-               }
-
-               if (($profile["photo"] == "") && isset($default["photo"])) {
-                       $profile["photo"] = $default["photo"];
-               }
-
-               if (($profile["name"] == "") && isset($default["name"])) {
-                       $profile["name"] = $default["name"];
-               }
-
-               if (($profile["network"] == "") && isset($default["network"])) {
-                       $profile["network"] = $default["network"];
-               }
-
-               if (($profile["thumb"] == "") && isset($profile["photo"])) {
-                       $profile["thumb"] = $profile["photo"];
-               }
-
-               if (($profile["micro"] == "") && isset($profile["thumb"])) {
-                       $profile["micro"] = $profile["thumb"];
-               }
-
-               if ((($profile["addr"] == "") || ($profile["name"] == "")) && ($profile["gid"] != 0)
-                       && in_array($profile["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS))
-               ) {
-                       Worker::add(PRIORITY_LOW, "UpdateGContact", $profile["gid"]);
-               }
-
-               // Show contact details of Diaspora contacts only if connected
-               if (($profile["cid"] == 0) && ($profile["network"] == NETWORK_DIASPORA)) {
-                       $profile["location"] = "";
-                       $profile["about"] = "";
-                       $profile["gender"] = "";
-                       $profile["birthday"] = '0001-01-01';
-               }
-
-               $cache[$url][$uid] = $profile;
-
-               return $profile;
-       }
-
-       /**
-        * @brief Get contact data for a given address
-        *
-        * The function looks at several places (contact table and gcontact table) for the contact
-        *
-        * @param string $addr The profile link
-        * @param int    $uid  User id
-        *
-        * @return array Contact data
-        */
-       public static function getDetailsByAddr($addr, $uid = -1)
-       {
-               static $cache = array();
-
-               if ($addr == '') {
-                       return array();
-               }
-
-               if ($uid == -1) {
-                       $uid = local_user();
-               }
-
-               // Fetch contact data from the contact table for the given user
-               $r = q("SELECT `id`, `id` AS `cid`, 0 AS `gid`, 0 AS `zid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, `xmpp`,
-                       `keywords`, `gender`, `photo`, `thumb`, `micro`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `contact-type`, `bd` AS `birthday`, `self`
-               FROM `contact` WHERE `addr` = '%s' AND `uid` = %d", dbesc($addr), intval($uid));
-
-               // Fetch the data from the contact table with "uid=0" (which is filled automatically)
-               if (!DBM::is_result($r))
-                       $r = q("SELECT `id`, 0 AS `cid`, `id` AS `zid`, 0 AS `gid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, `xmpp`,
-                       `keywords`, `gender`, `photo`, `thumb`, `micro`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `contact-type`, `bd` AS `birthday`, 0 AS `self`
-                       FROM `contact` WHERE `addr` = '%s' AND `uid` = 0", dbesc($addr));
-
-               // Fetch the data from the gcontact table
-               if (!DBM::is_result($r))
-                       $r = q("SELECT 0 AS `id`, 0 AS `cid`, `id` AS `gid`, 0 AS `zid`, 0 AS `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, '' AS `xmpp`,
-                       `keywords`, `gender`, `photo`, `photo` AS `thumb`, `photo` AS `micro`, `community` AS `forum`, 0 AS `prv`, `community`, `contact-type`, `birthday`, 0 AS `self`
-                       FROM `gcontact` WHERE `addr` = '%s'", dbesc($addr));
-
-               if (!DBM::is_result($r)) {
-                       $data = Probe::uri($addr);
-
-                       $profile = self::getDetailsByURL($data['url'], $uid);
-               } else {
-                       $profile = $r[0];
-               }
-
-               return $profile;
-       }
-
-       /**
-        * @brief Returns the data array for the photo menu of a given contact
-        *
-        * @param array $contact contact
-        * @param int   $uid     optional, default 0
-        * @return array
-        */
-       public static function photoMenu(array $contact, $uid = 0)
-       {
-               // @todo Unused, to be removed
-               $a = get_app();
-
-               $contact_url = '';
-               $pm_url = '';
-               $status_link = '';
-               $photos_link = '';
-               $posts_link = '';
-               $contact_drop_link = '';
-               $poke_link = '';
-
-               if ($uid == 0) {
-                       $uid = local_user();
-               }
-
-               if ($contact['uid'] != $uid) {
-                       if ($uid == 0) {
-                               $profile_link = zrl($contact['url']);
-                               $menu = array('profile' => array(t('View Profile'), $profile_link, true));
-
-                               return $menu;
-                       }
-
-                       $r = dba::select('contact', array(), array('nurl' => $contact['nurl'], 'network' => $contact['network'], 'uid' => $uid), array('limit' => 1));
-                       if ($r) {
-                               return self::photoMenu($r, $uid);
-                       } else {
-                               $profile_link = zrl($contact['url']);
-                               $connlnk = 'follow/?url=' . $contact['url'];
-                               $menu = array(
-                                       'profile' => array(t('View Profile'), $profile_link, true),
-                                       'follow' => array(t('Connect/Follow'), $connlnk, true)
-                               );
-
-                               return $menu;
-                       }
-               }
-
-               $sparkle = false;
-               if ($contact['network'] === NETWORK_DFRN) {
-                       $sparkle = true;
-                       $profile_link = System::baseUrl() . '/redir/' . $contact['id'];
-               } else {
-                       $profile_link = $contact['url'];
-               }
-
-               if ($profile_link === 'mailbox') {
-                       $profile_link = '';
-               }
-
-               if ($sparkle) {
-                       $status_link = $profile_link . '?url=status';
-                       $photos_link = $profile_link . '?url=photos';
-                       $profile_link = $profile_link . '?url=profile';
-               }
-
-               if (in_array($contact['network'], array(NETWORK_DFRN, NETWORK_DIASPORA))) {
-                       $pm_url = System::baseUrl() . '/message/new/' . $contact['id'];
-               }
-
-               if ($contact['network'] == NETWORK_DFRN) {
-                       $poke_link = System::baseUrl() . '/poke/?f=&c=' . $contact['id'];
-               }
-
-               $contact_url = System::baseUrl() . '/contacts/' . $contact['id'];
-
-               $posts_link = System::baseUrl() . '/contacts/' . $contact['id'] . '/posts';
-               $contact_drop_link = System::baseUrl() . '/contacts/' . $contact['id'] . '/drop?confirm=1';
-
-               /**
-                * Menu array:
-                * "name" => [ "Label", "link", (bool)Should the link opened in a new tab? ]
-                */
-               $menu = array(
-                       'status' => array(t("View Status"), $status_link, true),
-                       'profile' => array(t("View Profile"), $profile_link, true),
-                       'photos' => array(t("View Photos"), $photos_link, true),
-                       'network' => array(t("Network Posts"), $posts_link, false),
-                       'edit' => array(t("View Contact"), $contact_url, false),
-                       'drop' => array(t("Drop Contact"), $contact_drop_link, false),
-                       'pm' => array(t("Send PM"), $pm_url, false),
-                       'poke' => array(t("Poke"), $poke_link, false),
-               );
-
-
-               $args = array('contact' => $contact, 'menu' => &$menu);
-
-               call_hooks('contact_photo_menu', $args);
-
-               $menucondensed = array();
-
-               foreach ($menu as $menuname => $menuitem) {
-                       if ($menuitem[1] != '') {
-                               $menucondensed[$menuname] = $menuitem;
-                       }
-               }
-
-               return $menucondensed;
-       }
-
-       /**
-        * @brief Returns ungrouped contact count or list for user
-        *
-        * Returns either the total number of ungrouped contacts for the given user
-        * id or a paginated list of ungrouped contacts.
-        *
-        * @param int $uid   uid
-        * @param int $start optional, default 0
-        * @param int $count optional, default 0
-        *
-        * @return array
-        */
-       public static function getUngroupedList($uid, $start = 0, $count = 0)
-       {
-               if (!$count) {
-                       $r = q(
-                               "SELECT COUNT(*) AS `total`
-                                FROM `contact`
-                                WHERE `uid` = %d
-                                AND NOT `self`
-                                AND NOT `blocked`
-                                AND NOT `pending`
-                                AND `id` NOT IN (
-                                       SELECT DISTINCT(`contact-id`)
-                                       FROM `group_member`
-                                       WHERE `uid` = %d
-                               )", intval($uid), intval($uid)
-                       );
-
-                       return $r;
-               }
-
-               $r = q(
-                       "SELECT *
-                       FROM `contact`
-                       WHERE `uid` = %d
-                       AND NOT `self`
-                       AND NOT `blocked`
-                       AND NOT `pending`
-                       AND `id` NOT IN (
-                               SELECT DISTINCT(`contact-id`)
-                               FROM `group_member` WHERE `uid` = %d
-                       )
-                       LIMIT %d, %d", intval($uid), intval($uid), intval($start), intval($count)
-               );
-               return $r;
-       }
-
-       /**
-        * @brief Fetch the contact id for a given url and user
-        *
-        * First lookup in the contact table to find a record matching either `url`, `nurl`,
-        * `addr` or `alias`.
-        *
-        * If there's no record and we aren't looking for a public contact, we quit.
-        * If there's one, we check that it isn't time to update the picture else we
-        * directly return the found contact id.
-        *
-        * Second, we probe the provided $url wether it's http://server.tld/profile or
-        * nick@server.tld. We quit if we can't get any info back.
-        *
-        * Third, we create the contact record if it doesn't exist
-        *
-        * Fourth, we update the existing record with the new data (avatar, alias, nick)
-        * if there's any updates
-        *
-        * @param string  $url       Contact URL
-        * @param integer $uid       The user id for the contact (0 = public contact)
-        * @param boolean $no_update Don't update the contact
-        *
-        * @return integer Contact ID
-        */
-       public static function getIdForURL($url, $uid = 0, $no_update = false)
-       {
-               logger("Get contact data for url " . $url . " and user " . $uid . " - " . System::callstack(), LOGGER_DEBUG);
-
-               $contact_id = 0;
-
-               if ($url == '') {
-                       return 0;
-               }
-
-               /// @todo Verify if we can't use Contact::getDetailsByUrl instead of the following
-               // We first try the nurl (http://server.tld/nick), most common case
-               $contact = dba::select('contact', array('id', 'avatar-date'), array('nurl' => normalise_link($url), 'uid' => $uid), array('limit' => 1));
-
-               // Then the addr (nick@server.tld)
-               if (!DBM::is_result($contact)) {
-                       $contact = dba::select('contact', array('id', 'avatar-date'), array('addr' => $url, 'uid' => $uid), array('limit' => 1));
-               }
-
-               // Then the alias (which could be anything)
-               if (!DBM::is_result($contact)) {
-                       // The link could be provided as http although we stored it as https
-                       $ssl_url = str_replace('http://', 'https://', $url);
-                       $r = dba::select('contact', array('id', 'avatar-date'), array('`alias` IN (?, ?, ?) AND `uid` = ?', $url, normalise_link($url), $ssl_url, $uid), array('limit' => 1));
-                       $contact = dba::fetch($r);
-                       dba::close($r);
-               }
-
-               if (DBM::is_result($contact)) {
-                       $contact_id = $contact["id"];
-
-                       // Update the contact every 7 days
-                       $update_contact = ($contact['avatar-date'] < datetime_convert('', '', 'now -7 days'));
-
-                       // We force the update if the avatar is empty
-                       if ($contact['avatar'] == '') {
-                               $update_contact = true;
-                       }
-
-                       if (!$update_contact || $no_update) {
-                               return $contact_id;
-                       }
-               } elseif ($uid != 0) {
-                       // Non-existing user-specific contact, exiting
-                       return 0;
-               }
-
-               $data = Probe::uri($url, "", $uid);
-
-               // Last try in gcontact for unsupported networks
-               if (!in_array($data["network"], array(NETWORK_DFRN, NETWORK_OSTATUS, NETWORK_DIASPORA, NETWORK_PUMPIO, NETWORK_MAIL))) {
-                       if ($uid != 0) {
-                               return 0;
-                       }
-
-                       // Get data from the gcontact table
-                       $gcontacts = dba::select('gcontact', array('name', 'nick', 'url', 'photo', 'addr', 'alias', 'network'), array('nurl' => normalise_link($url)), array('limit' => 1));
-                       if (!DBM::is_result($gcontacts)) {
-                               return 0;
-                       }
-
-                       $data = array_merge($data, $gcontacts);
-               }
-
-               if (!$contact_id && ($data["alias"] != '') && ($data["alias"] != $url)) {
-                       $contact_id = self::getIdForURL($data["alias"], $uid, true);
-               }
-
-               $url = $data["url"];
-               if (!$contact_id) {
-                       dba::insert(
-                               'contact', array('uid' => $uid, 'created' => datetime_convert(), 'url' => $data["url"],
-                               'nurl' => normalise_link($data["url"]), 'addr' => $data["addr"],
-                               'alias' => $data["alias"], 'notify' => $data["notify"], 'poll' => $data["poll"],
-                               'name' => $data["name"], 'nick' => $data["nick"], 'photo' => $data["photo"],
-                               'keywords' => $data["keywords"], 'location' => $data["location"], 'about' => $data["about"],
-                               'network' => $data["network"], 'pubkey' => $data["pubkey"],
-                               'rel' => CONTACT_IS_SHARING, 'priority' => $data["priority"],
-                               'batch' => $data["batch"], 'request' => $data["request"],
-                               'confirm' => $data["confirm"], 'poco' => $data["poco"],
-                               'name-date' => datetime_convert(), 'uri-date' => datetime_convert(),
-                               'avatar-date' => datetime_convert(), 'writable' => 1, 'blocked' => 0,
-                               'readonly' => 0, 'pending' => 0)
-                       );
-
-                       $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;
-                       }
-
-                       $contact_id = $contacts[0]["id"];
-
-                       // Update the newly created contact from data in the gcontact table
-                       $gcontact = dba::select('gcontact', array('location', 'about', 'keywords', 'gender'), array('nurl' => normalise_link($data["url"])), array('limit' => 1));
-                       if (DBM::is_result($gcontact)) {
-                               // Only use the information when the probing hadn't fetched these values
-                               if ($data['keywords'] != '') {
-                                       unset($gcontact['keywords']);
-                               }
-                               if ($data['location'] != '') {
-                                       unset($gcontact['location']);
-                               }
-                               if ($data['about'] != '') {
-                                       unset($gcontact['about']);
-                               }
-                               dba::update('contact', $gcontact, array('id' => $contact_id));
-                       }
-
-                       if (count($contacts) > 1 && $uid == 0 && $contact_id != 0 && $data["url"] != "") {
-                               dba::delete('contact', array("`nurl` = ? AND `uid` = 0 AND `id` != ? AND NOT `self`",
-                                       normalise_link($data["url"]), $contact_id));
-                       }
-               }
-
-               self::updateAvatar($data["photo"], $uid, $contact_id);
-
-               $fields = array('url', 'nurl', 'addr', 'alias', 'name', 'nick', 'keywords', 'location', 'about', 'avatar-date', 'pubkey');
-               $contact = dba::select('contact', $fields, array('id' => $contact_id), array('limit' => 1));
-
-               // This condition should always be true
-               if (!DBM::is_result($contact)) {
-                       return $contact_id;
-               }
-
-               $updated = array('addr' => $data['addr'],
-                       'alias' => $data['alias'],
-                       'url' => $data['url'],
-                       'nurl' => normalise_link($data['url']),
-                       'name' => $data['name'],
-                       'nick' => $data['nick']);
-
-               // Only fill the pubkey if it was empty before. We have to prevent identity theft.
-               if (!empty($contact['pubkey'])) {
-                       unset($contact['pubkey']);
-               } else {
-                       $updated['pubkey'] = $data['pubkey'];
-               }
-
-               if ($data['keywords'] != '') {
-                       $updated['keywords'] = $data['keywords'];
-               }
-               if ($data['location'] != '') {
-                       $updated['location'] = $data['location'];
-               }
-               if ($data['about'] != '') {
-                       $updated['about'] = $data['about'];
-               }
-
-               if (($data["addr"] != $contact["addr"]) || ($data["alias"] != $contact["alias"])) {
-                       $updated['uri-date'] = datetime_convert();
-               }
-               if (($data["name"] != $contact["name"]) || ($data["nick"] != $contact["nick"])) {
-                       $updated['name-date'] = datetime_convert();
-               }
-
-               $updated['avatar-date'] = datetime_convert();
-
-               dba::update('contact', $updated, array('id' => $contact_id), $contact);
-
-               return $contact_id;
-       }
-
-       /**
-        * @brief Checks if the contact is blocked
-        *
-        * @param int $cid contact id
-        *
-        * @return boolean Is the contact blocked?
-        */
-       public static function isBlocked($cid)
-       {
-               if ($cid == 0) {
-                       return false;
-               }
-
-               $blocked = dba::select('contact', array('blocked'), array('id' => $cid), array('limit' => 1));
-               if (!DBM::is_result($blocked)) {
-                       return false;
-               }
-               return (bool) $blocked['blocked'];
-       }
-
-       /**
-        * @brief Checks if the contact is hidden
-        *
-        * @param int $cid contact id
-        *
-        * @return boolean Is the contact hidden?
-        */
-       public static function isHidden($cid)
-       {
-               if ($cid == 0) {
-                       return false;
-               }
-
-               $hidden = dba::select('contact', array('hidden'), array('id' => $cid), array('limit' => 1));
-               if (!DBM::is_result($hidden)) {
-                       return false;
-               }
-               return (bool) $hidden['hidden'];
-       }
-
-       /**
-        * @brief Returns posts from a given contact url
-        *
-        * @param string $contact_url Contact URL
-        *
-        * @return string posts in HTML
-        */
-       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 = 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 '';
-               }
-
-               if (in_array($r[0]["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS, ""))) {
-                       $sql = "(`item`.`uid` = 0 OR (`item`.`uid` = %d AND NOT `item`.`global`))";
-               } else {
-                       $sql = "`item`.`uid` = %d";
-               }
-
-               $author_id = intval($r[0]["author-id"]);
-
-               $contact = ($r[0]["contact-type"] == ACCOUNT_TYPE_COMMUNITY ? 'owner-id' : 'author-id');
-
-               $r = q(item_query() . " AND `item`.`" . $contact . "` = %d AND " . $sql .
-                       " ORDER BY `item`.`created` DESC LIMIT %d, %d", intval($author_id), intval(local_user()), intval($a->pager['start']), intval($a->pager['itemspage'])
-               );
-
-
-               $o = conversation($a, $r, 'community', false);
-
-               $o .= alt_pager($a, count($r));
-
-               return $o;
-       }
-
-       /**
-        * @brief Returns the account type name
-        *
-        * The function can be called with either the user or the contact array
-        *
-        * @param array $contact contact or user array
-        * @return string
-        */
-       public static function getAccountType(array $contact)
-       {
-               // There are several fields that indicate that the contact or user is a forum
-               // "page-flags" is a field in the user table,
-               // "forum" and "prv" are used in the contact table. They stand for PAGE_COMMUNITY and PAGE_PRVGROUP.
-               // "community" is used in the gcontact table and is true if the contact is PAGE_COMMUNITY or PAGE_PRVGROUP.
-               if ((isset($contact['page-flags']) && (intval($contact['page-flags']) == PAGE_COMMUNITY))
-                       || (isset($contact['page-flags']) && (intval($contact['page-flags']) == PAGE_PRVGROUP))
-                       || (isset($contact['forum']) && intval($contact['forum']))
-                       || (isset($contact['prv']) && intval($contact['prv']))
-                       || (isset($contact['community']) && intval($contact['community']))
-               ) {
-                       $type = ACCOUNT_TYPE_COMMUNITY;
-               } else {
-                       $type = ACCOUNT_TYPE_PERSON;
-               }
-
-               // The "contact-type" (contact table) and "account-type" (user table) are more general then the chaos from above.
-               if (isset($contact["contact-type"])) {
-                       $type = $contact["contact-type"];
-               }
-               if (isset($contact["account-type"])) {
-                       $type = $contact["account-type"];
-               }
-
-               switch ($type) {
-                       case ACCOUNT_TYPE_ORGANISATION:
-                               $account_type = t("Organisation");
-                               break;
-                       case ACCOUNT_TYPE_NEWS:
-                               $account_type = t('News');
-                               break;
-                       case ACCOUNT_TYPE_COMMUNITY:
-                               $account_type = t("Forum");
-                               break;
-                       default:
-                               $account_type = "";
-                               break;
-               }
-
-               return $account_type;
-       }
-
-       /**
-        * @brief Blocks a contact
-        *
-        * @param int $uid
-        * @return bool
-        */
-       public static function block($uid)
-       {
-               $return = dba::update('contact', ['blocked' => true], ['id' => $uid]);
-
-               return $return;
-       }
-
-       /**
-        * @brief Unblocks a contact
-        *
-        * @param int $uid
-        * @return bool
-        */
-       public static function unblock($uid)
-       {
-               $return = dba::update('contact', ['blocked' => false], ['id' => $uid]);
-
-               return $return;
-  }
-
-  /**
-   * @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;
-       }
-}
index c1956c45711cbae9191e99824b94c5e7b1d732e0..cddbb4d7c084403542677d538d9ed1a1ee76d064 100644 (file)
@@ -13,9 +13,9 @@ use Friendica\Core\Config;
 use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Model\GlobalContact;
 use Friendica\Model\Profile;
-use Friendica\Object\Contact;
 use Friendica\Object\Image;
 use Friendica\Protocol\OStatus;
 use Friendica\Util\XML;
index 907c93478b564d6df656f9f53a29f17cd9ae3d47..ef132a68be6b96a2a628d153f10dc083dfa4dac3 100644 (file)
@@ -16,10 +16,10 @@ use Friendica\Core\Config;
 use Friendica\Core\PConfig;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Model\GlobalContact;
 use Friendica\Model\Profile;
 use Friendica\Network\Probe;
-use Friendica\Object\Contact;
 use Friendica\Util\XML;
 
 use dba;
index 0f14c77c39747ab8d0010dbfd97ab052b97bffb1..b96eeeb3ec2f2f5d9313ee7b02121328a3d7918d 100644 (file)
@@ -9,9 +9,9 @@ use Friendica\Core\Cache;
 use Friendica\Core\Config;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Model\GlobalContact;
 use Friendica\Network\Probe;
-use Friendica\Object\Contact;
 use Friendica\Object\Image;
 use Friendica\Util\Lock;
 use Friendica\Util\XML;
index 7df7d030cbd15da10c656e77d946139bb0dcd4b7..18c1d2b5312c3f315da9e5f7179017335a053220 100644 (file)
@@ -10,9 +10,9 @@ use Friendica\App;
 use Friendica\Core\Cache;
 use Friendica\Core\Config;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Model\GlobalContact;
 use Friendica\Network\Probe;
-use Friendica\Object\Contact;
 use Friendica\Protocol\PortableContact;
 use dba;
 
index bb30fc3bf4bef41f477563ea661eeaef735fd48c..c20bb8d8f83cefd13f12e50c4f3c16fb87a13b2c 100644 (file)
@@ -9,7 +9,7 @@ use Friendica\App;
 use Friendica\Core\System;
 use Friendica\Core\Config;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 use Friendica\Protocol\Diaspora;
 use Friendica\Protocol\DFRN;
 use Friendica\Protocol\Email;
index a3a03055ec9f13040bc289652f5eb4e99cd3a923..18fff2afda1c50f493811b8b83b870e1c127636c 100644 (file)
@@ -7,8 +7,8 @@ namespace Friendica\Worker;
 use Friendica\Core\Config;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Network\Probe;
-use Friendica\Object\Contact;
 use Friendica\Protocol\Diaspora;
 use Friendica\Protocol\OStatus;
 use Friendica\Protocol\Salmon;
index 1190c77f5fc3e5a4db7fdeaed134accba2fc7896..9024d0d4c9008be47ec9eae5071efe9046febe2a 100644 (file)
@@ -7,7 +7,7 @@ namespace Friendica\Worker;
 use Friendica\Core\Config;
 use Friendica\Core\PConfig;
 use Friendica\Database\DBM;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 use Friendica\Protocol\Email;
 use Friendica\Protocol\PortableContact;
 use dba;
index ab586b651017c5ec0acc08a9838b0c187c5dc4b7..87044bb4e439599062de34287cc59aa91bbc194c 100755 (executable)
@@ -29,7 +29,7 @@ if ($argc != 2 || $argv[1] == "-h" || $argv[1] == "--help" || $argv[1] == "-?")
 }
 
 use Friendica\BaseObject;
-use Friendica\Object\Contact;
+use Friendica\Model\Contact;
 
 require_once 'boot.php';
 require_once 'include/dba.php';