+ $no_linking = get_pconfig($uid,'facebook','no_linking');
+ if($no_linking)
+ return;
+
+ $self = q("SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1",
+ intval($uid)
+ );
+
+ $user = q("SELECT `nickname` FROM `user` WHERE `uid` = %d LIMIT 1",
+ intval($uid)
+ );
+ if(count($user))
+ $my_local_url = $a->get_baseurl() . '/profile/' . $user[0]['nickname'];
+
+
+ $self_id = get_pconfig($uid,'facebook','self_id');
+ if(! count($j->data) || (! strlen($self_id)))
+ return;
+
+ foreach($j->data as $entry) {
+ logger('fb_consume: entry: ' . print_r($entry,true), LOGGER_DATA);
+ $datarray = array();
+
+ $r = q("SELECT * FROM `item` WHERE ( `uri` = '%s' OR `extid` = '%s') AND `uid` = %d LIMIT 1",
+ dbesc('fb::' . $entry->id),
+ dbesc('fb::' . $entry->id),
+ intval($uid)
+ );
+ if(count($r)) {
+ $post_exists = true;
+ $orig_post = $r[0];
+ $top_item = $r[0]['id'];
+ }
+ else {
+ $post_exists = false;
+ $orig_post = null;
+ }
+
+ if(! $orig_post) {
+ $datarray['gravity'] = 0;
+ $datarray['uid'] = $uid;
+ $datarray['wall'] = (($wall) ? 1 : 0);
+ $datarray['uri'] = $datarray['parent-uri'] = 'fb::' . $entry->id;
+ $from = $entry->from;
+ if($from->id == $self_id)
+ $datarray['contact-id'] = $self[0]['id'];
+ else {
+ $r = q("SELECT * FROM `contact` WHERE `notify` = '%s' AND `uid` = %d AND `blocked` = 0 AND `readonly` = 0 LIMIT 1",
+ dbesc($from->id),
+ intval($uid)
+ );
+ if(count($r))
+ $datarray['contact-id'] = $r[0]['id'];
+ }
+
+ // don't store post if we don't have a contact
+
+ if(! x($datarray,'contact-id')) {
+ logger('no contact: post ignored');
+ continue;
+ }
+
+ $datarray['verb'] = ACTIVITY_POST;
+ if($wall) {
+ $datarray['owner-name'] = $self[0]['name'];
+ $datarray['owner-link'] = $self[0]['url'];
+ $datarray['owner-avatar'] = $self[0]['thumb'];
+ }
+ $datarray['author-name'] = $from->name;
+ $datarray['author-link'] = 'http://facebook.com/profile.php?id=' . $from->id;
+ $datarray['author-avatar'] = 'https://graph.facebook.com/' . $from->id . '/picture';
+ $datarray['plink'] = $datarray['author-link'] . '&v=wall&story_fbid=' . substr($entry->id,strpos($entry->id,'_') + 1);
+
+ $datarray['body'] = $entry->message;
+ if($entry->picture)
+ $datarray['body'] .= "\n\n" . '[img]' . $entry->picture . '[/img]';
+ if($entry->link)
+ $datarray['body'] .= "\n" . linkify($entry->link);
+ if($entry->name)
+ $datarray['body'] .= "\n" . $entry->name;
+ if($entry->caption)
+ $datarray['body'] .= "\n" . $entry->caption;
+ if($entry->description)
+ $datarray['body'] .= "\n" . $entry->description;
+ $datarray['created'] = datetime_convert('UTC','UTC',$entry->created_time);
+ $datarray['edited'] = datetime_convert('UTC','UTC',$entry->updated_time);
+ if($entry->privacy && $entry->privacy->value !== 'EVERYONE')
+ $datarray['private'] = 1;
+ $top_item = item_store($datarray);
+ $r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
+ intval($top_item),
+ intval($uid)
+ );
+ if(count($r)) {
+ $orig_post = $r[0];
+ logger('fb: new top level item posted');
+ }
+ }
+
+ if(isset($entry->likes) && isset($entry->likes->data))
+ $likers = $entry->likes->data;
+ else
+ $likers = null;
+
+ if(isset($entry->comments) && isset($entry->comments->data))
+ $comments = $entry->comments->data;
+ else
+ $comments = null;
+
+ if(is_array($likers)) {
+ foreach($likers as $likes) {
+
+ if(! $orig_post)
+ continue;
+
+ // If we posted the like locally, it will be found with our url, not the FB url.
+
+ $second_url = (($likes->id == $self_id) ? $self[0]['url'] : 'http://facebook.com/profile.php?id=' . $likes->id);
+
+ $r = q("SELECT * FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `verb` = '%s'
+ AND ( `author-link` = '%s' OR `author-link` = '%s' ) LIMIT 1",
+ dbesc($orig_post['uri']),
+ intval($uid),
+ dbesc(ACTIVITY_LIKE),
+ dbesc('http://facebook.com/profile.php?id=' . $likes->id),
+ dbesc($second_url)
+ );
+
+ if(count($r))
+ continue;
+
+ $likedata = array();
+ $likedata['parent'] = $top_item;
+ $likedata['verb'] = ACTIVITY_LIKE;
+ $likedata['gravity'] = 3;
+ $likedata['uid'] = $uid;
+ $likedata['wall'] = (($wall) ? 1 : 0);
+ $likedata['uri'] = item_new_uri($a->get_baseurl(), $uid);
+ $likedata['parent-uri'] = $orig_post['uri'];
+ if($likes->id == $self_id)
+ $likedata['contact-id'] = $self[0]['id'];
+ else {
+ $r = q("SELECT * FROM `contact` WHERE `notify` = '%s' AND `uid` = %d AND `blocked` = 0 AND `readonly` = 0 LIMIT 1",
+ dbesc($likes->id),
+ intval($uid)
+ );
+ if(count($r))
+ $likedata['contact-id'] = $r[0]['id'];
+ }
+ if(! x($likedata,'contact-id'))
+ $likedata['contact-id'] = $orig_post['contact-id'];
+
+ $likedata['verb'] = ACTIVITY_LIKE;
+ $likedata['author-name'] = $likes->name;
+ $likedata['author-link'] = 'http://facebook.com/profile.php?id=' . $likes->id;
+ $likedata['author-avatar'] = 'https://graph.facebook.com/' . $likes->id . '/picture';
+
+ $author = '[url=' . $likedata['author-link'] . ']' . $likedata['author-name'] . '[/url]';
+ $objauthor = '[url=' . $orig_post['author-link'] . ']' . $orig_post['author-name'] . '[/url]';
+ $post_type = t('status');
+ $plink = '[url=' . $orig_post['plink'] . ']' . $post_type . '[/url]';
+ $likedata['object-type'] = ACTIVITY_OBJ_NOTE;
+
+ $likedata['body'] = sprintf( t('%1$s likes %2$s\'s %3$s'), $author, $objauthor, $plink);
+ $likedata['object'] = '<object><type>' . ACTIVITY_OBJ_NOTE . '</type><local>1</local>' .
+ '<id>' . $orig_post['uri'] . '</id><link>' . xmlify('<link rel="alternate" type="text/html" href="' . xmlify($orig_post['plink']) . '" />') . '</link><title>' . $orig_post['title'] . '</title><content>' . $orig_post['body'] . '</content></object>';
+
+ $item = item_store($likedata);
+ }
+ }
+ if(is_array($comments)) {
+ foreach($comments as $cmnt) {
+
+ if(! $orig_post)
+ continue;
+
+ $r = q("SELECT * FROM `item` WHERE `uid` = %d AND ( `uri` = '%s' OR `extid` = '%s' ) LIMIT 1",
+ intval($uid),
+ dbesc('fb::' . $cmnt->id),
+ dbesc('fb::' . $cmnt->id)
+ );
+ if(count($r))
+ continue;
+
+ $cmntdata = array();
+ $cmntdata['parent'] = $top_item;
+ $cmntdata['verb'] = ACTIVITY_POST;
+ $cmntdata['gravity'] = 6;
+ $cmntdata['uid'] = $uid;
+ $cmntdata['wall'] = (($wall) ? 1 : 0);
+ $cmntdata['uri'] = 'fb::' . $cmnt->id;
+ $cmntdata['parent-uri'] = $orig_post['uri'];
+ if($cmnt->from->id == $self_id) {
+ $cmntdata['contact-id'] = $self[0]['id'];
+ }
+ else {
+ $r = q("SELECT * FROM `contact` WHERE `notify` = '%s' AND `uid` = %d LIMIT 1",
+ dbesc($cmnt->from->id),
+ intval($uid)
+ );
+ if(count($r)) {
+ $cmntdata['contact-id'] = $r[0]['id'];
+ if($r[0]['blocked'] || $r[0]['readonly'])
+ continue;
+ }