Merge pull request #40 from annando/master

Pages removed, a small fix to "showmore" and many changes to the facebook import
This commit is contained in:
friendica 2012-04-08 05:21:46 -07:00
commit c42807e2ef
5 changed files with 148 additions and 137 deletions

View File

@ -268,6 +268,10 @@ function fb_get_friends_sync_full($uid, $access_token, $person) {
$jp->link = 'http://facebook.com/profile.php?id=' . $person->id; $jp->link = 'http://facebook.com/profile.php?id=' . $person->id;
// If its a page then set the first name from the username
if (!$jp->first_name and $jp->username)
$jp->first_name = $jp->username;
// check if we already have a contact // check if we already have a contact
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' LIMIT 1", $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' LIMIT 1",
@ -1174,6 +1178,46 @@ function fb_queue_hook(&$a,&$b) {
} }
} }
function fb_get_timeline($access_token, &$since) {
$entries->data = array();
$newest = 0;
$url = 'https://graph.facebook.com/me/home?access_token='.$access_token;
if ($since != 0)
$url .= "&since=".$since;
do {
$s = fetch_url($url);
$j = json_decode($s);
$oldestdate = time();
if (isset($j->data))
foreach ($j->data as $entry) {
$created = strtotime($entry->created_time);
if ($newest < $created)
$newest = $created;
if ($created >= $since)
$entries->data[] = $entry;
if ($created <= $oldestdate)
$oldestdate = $created;
}
else
break;
$url = $j->paging->next;
} while (($oldestdate > $since) and ($since != 0) and ($url != ''));
if ($newest > $since)
$since = $newest;
return($entries);
}
function fb_consume_all($uid) { function fb_consume_all($uid) {
require_once('include/items.php'); require_once('include/items.php');
@ -1195,23 +1239,25 @@ function fb_consume_all($uid) {
} }
} }
} }
$s = fetch_url('https://graph.facebook.com/me/home?access_token=' . $access_token); // Get the last date
if($s) { $lastdate = get_pconfig($uid,'facebook','lastdate');
$j = json_decode($s); // fetch all items since the last date
if (isset($j->data)) { $j = fb_get_timeline($access_token, &$lastdate);
logger('fb_consume_stream: feed: ' . print_r($j,true), LOGGER_DATA); if (isset($j->data)) {
fb_consume_stream($uid,$j,false); logger('fb_consume_stream: feed: ' . print_r($j,true), LOGGER_DATA);
} else { fb_consume_stream($uid,$j,false);
logger('fb_consume_stream: feed: got no data from Facebook: ' . print_r($j,true), LOGGER_NORMAL);
}
}
// Write back the last date
set_pconfig($uid,'facebook','lastdate', $lastdate);
} else
logger('fb_consume_stream: feed: got no data from Facebook: ' . print_r($j,true), LOGGER_NORMAL);
} }
function fb_get_photo($uid,$link) { function fb_get_photo($uid,$link) {
$access_token = get_pconfig($uid,'facebook','access_token'); $access_token = get_pconfig($uid,'facebook','access_token');
if(! $access_token || (! stristr($link,'facebook.com/photo.php'))) if(! $access_token || (! stristr($link,'facebook.com/photo.php')))
return "\n" . '[url=' . $link . ']' . t('link') . '[/url]'; return "";
//return "\n" . '[url=' . $link . ']' . t('link') . '[/url]';
$ret = preg_match('/fbid=([0-9]*)/',$link,$match); $ret = preg_match('/fbid=([0-9]*)/',$link,$match);
if($ret) if($ret)
$photo_id = $match[1]; $photo_id = $match[1];
@ -1219,8 +1265,8 @@ function fb_get_photo($uid,$link) {
$j = json_decode($x); $j = json_decode($x);
if($j->picture) if($j->picture)
return "\n\n" . '[url=' . $link . '][img]' . $j->picture . '[/img][/url]'; return "\n\n" . '[url=' . $link . '][img]' . $j->picture . '[/img][/url]';
else //else
return "\n" . '[url=' . $link . ']' . t('link') . '[/url]'; // return "\n" . '[url=' . $link . ']' . t('link') . '[/url]';
} }
function fb_consume_stream($uid,$j,$wall = false) { function fb_consume_stream($uid,$j,$wall = false) {
@ -1279,6 +1325,10 @@ function fb_consume_stream($uid,$j,$wall = false) {
if($from->id == $self_id) if($from->id == $self_id)
$datarray['contact-id'] = $self[0]['id']; $datarray['contact-id'] = $self[0]['id'];
else { else {
// Looking if user is known - if not he is added
$access_token = get_pconfig($uid, 'facebook', 'access_token');
fb_get_friends_sync_new($uid, $access_token, $from);
$r = q("SELECT * FROM `contact` WHERE `notify` = '%s' AND `uid` = %d AND `blocked` = 0 AND `readonly` = 0 LIMIT 1", $r = q("SELECT * FROM `contact` WHERE `notify` = '%s' AND `uid` = %d AND `blocked` = 0 AND `readonly` = 0 LIMIT 1",
dbesc($from->id), dbesc($from->id),
intval($uid) intval($uid)
@ -1288,16 +1338,9 @@ function fb_consume_stream($uid,$j,$wall = false) {
} }
// don't store post if we don't have a contact // don't store post if we don't have a contact
if(! x($datarray,'contact-id')) { if(! x($datarray,'contact-id')) {
if (get_config('facebook', 'pages')) { logger('facebook: no contact '.$from->name.' '.$from->id.'. post ignored');
// If no user is found then post it under the own id. continue;
// Definitely a quickhack
$datarray['contact-id'] = $self[0]['id'];
} else {
logger('no contact: post ignored');
continue;
}
} }
$datarray['verb'] = ACTIVITY_POST; $datarray['verb'] = ACTIVITY_POST;
@ -1331,24 +1374,92 @@ function fb_consume_stream($uid,$j,$wall = false) {
$datarray['author-avatar'] = 'https://graph.facebook.com/' . $from->id . '/picture'; $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['plink'] = $datarray['author-link'] . '&v=wall&story_fbid=' . substr($entry->id,strpos($entry->id,'_') + 1);
logger('facebook: post '.$entry->id.' from '.$from->name);
$datarray['body'] = escape_tags($entry->message); $datarray['body'] = escape_tags($entry->message);
if($entry->picture && $entry->link) { if($entry->name and $entry->link)
$datarray['body'] .= "\n\n" . '[url=' . $entry->link . '][img]' . $entry->picture . '[/img][/url]'; $datarray['body'] .= "\n\n[bookmark=".$entry->link."]".$entry->name."[/bookmark]";
elseif ($entry->name)
$datarray['body'] .= "\n\n[b]" . $entry->name."[/b]";
if($entry->caption) {
if(!$entry->name and $entry->link)
$datarray['body'] .= "\n\n[bookmark=".$entry->link."]".$entry->caption."[/bookmark]";
else
$datarray['body'] .= "[i]" . $entry->caption."[/i]\n";
} }
else {
if($entry->picture) if(!$entry->caption and !$entry->name) {
$datarray['body'] .= "\n\n" . '[img]' . $entry->picture . '[/img]'; if ($entry->link)
// if just a link, it may be a wall photo - check $datarray['body'] .= "\n[url]".$entry->link."[/url]\n";
if($entry->link) else
$datarray['body'] .= fb_get_photo($uid,$entry->link); $datarray['body'] .= "\n";
} }
if($entry->name)
$datarray['body'] .= "\n" . $entry->name; $quote = "";
if($entry->caption)
$datarray['body'] .= "\n" . $entry->caption;
if($entry->description) if($entry->description)
$datarray['body'] .= "\n" . $entry->description; $quote = $entry->description;
if ($entry->properties)
foreach ($entry->properties as $property)
$quote .= "\n".$property->name.": [url=".$property->href."]".$property->text."[/url]";
if ($quote)
$datarray['body'] .= "\n[quote]".$quote."[/quote]";
// Only import the picture when the message is no video
// oembed display a picture of the video as well
if ($entry->type != "video") {
if($entry->picture && $entry->link) {
$datarray['body'] .= "\n" . '[url=' . $entry->link . '][img]'.$entry->picture.'[/img][/url]';
}
else {
if($entry->picture)
$datarray['body'] .= "\n" . '[img]' . $entry->picture . '[/img]';
// if just a link, it may be a wall photo - check
if($entry->link)
$datarray['body'] .= fb_get_photo($uid,$entry->link);
}
}
// Just as a test - to see if these are the missing entries
//if(trim($datarray['body']) == '')
// $datarray['body'] = $entry->story;
if(trim($datarray['body']) == '') {
logger('facebook: empty body '.$entry->id.' '.print_r($entry, true));
continue;
}
$datarray['body'] .= "\n";
if ($entry->icon)
$datarray['body'] .= "[img]".$entry->icon."[/img] &nbsp; ";
if ($entry->actions)
foreach ($entry->actions as $action)
if (($action->name != "Comment") and ($action->name != "Like"))
$datarray['body'] .= "[url=".$action->link."]".$action->name."[/url] &nbsp; ";
$datarray['body'] = trim($datarray['body']);
//if(($datarray['body'] != '') and ($uid == 1))
// $datarray['body'] .= "[noparse]".print_r($entry, true)."[/noparse]";
if ($entry->place->name)
$datarray['coord'] = $entry->place->name;
else if ($entry->place->location->street or $entry->place->location->city or $entry->place->location->Denmark) {
if ($entry->place->location->street)
$datarray['coord'] = $entry->place->location->street;
if ($entry->place->location->city)
$datarray['coord'] .= " ".$entry->place->location->city;
if ($entry->place->location->country)
$datarray['coord'] .= " ".$entry->place->location->country;
} else if ($entry->place->location->latitude and $entry->place->location->longitude)
$datarray['coord'] = substr($entry->place->location->latitude, 0, 8)
.' '.substr($entry->place->location->longitude, 0, 8);
$datarray['created'] = datetime_convert('UTC','UTC',$entry->created_time); $datarray['created'] = datetime_convert('UTC','UTC',$entry->created_time);
$datarray['edited'] = datetime_convert('UTC','UTC',$entry->updated_time); $datarray['edited'] = datetime_convert('UTC','UTC',$entry->updated_time);
@ -1360,11 +1471,6 @@ function fb_consume_stream($uid,$j,$wall = false) {
$datarray['allow_cid'] = '<' . $self[0]['id'] . '>'; $datarray['allow_cid'] = '<' . $self[0]['id'] . '>';
} }
if(trim($datarray['body']) == '') {
logger('facebook: empty body');
continue;
}
$top_item = item_store($datarray); $top_item = item_store($datarray);
$r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1", $r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($top_item), intval($top_item),

BIN
pages.tgz

Binary file not shown.

View File

@ -1,3 +0,0 @@
Pages
Shows lists of community pages

View File

@ -1,93 +0,0 @@
<?php
/**
* Name: Pages
* Description: Shows lists of community pages
* Version: 1.0
* Author: Michael Vogel <ike@piratenpartei.de>
*
*/
function pages_install() {
register_hook('page_end', 'addon/pages/pages.php', 'pages_page_end');
}
function pages_uninstall() {
unregister_hook('page_end', 'addon/pages/pages.php', 'pages_page_end');
}
function pages_iscommunity($url, &$pagelist) {
// check every week for the status - should be enough
if ($pagelist[$url]["checked"]<time()-86400*7) {
// When too old or not found fetch the status from the profile
$ch = curl_init();
$url = str_replace("/profile/","/hcard/", $url);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 2);
$page = curl_exec($ch);
curl_close($ch);
$iscommunity = (strpos($page, '<meta name="friendika.community" content="true" />') != 0);
$pagelist[$url] = array("community" => $iscommunity, "checked" => time());
} else // Fetch from cache
$iscommunity = $pagelist[$url]["community"];
return($iscommunity);
}
function pages_getpages($uid) {
// Fetch cached pagelist from configuration
$pagelist = get_pconfig($uid,'pages','pagelist');
if (sizeof($pagelist) == 0)
$pagelist = array();
$contacts = q("SELECT `id`, `url`, `Name` FROM `contact`
WHERE `network`= 'dfrn' AND `uid` = %d",
intval($uid));
$pages = array();
// Look if the profile is a community page
foreach($contacts as $contact) {
if (pages_iscommunity($contact["url"], $pagelist))
$pages[] = array("url"=>$contact["url"], "Name"=>$contact["Name"], "id"=>$contact["id"]);
}
// Write back cached pagelist
set_pconfig($uid,'pages','pagelist', $pagelist);
return($pages);
}
function pages_page_end($a,&$b) {
// Only move on if if it's the "network" module and there is a logged on user
if (($a->module != "network") OR ($a->user['uid'] == 0))
return;
$pages = '<div id="pages-sidebar" class="widget">
<div class="title tool">
<h3>'.t("Community").'</h3></div>
<div id="sidebar-pages-list"><ul>';
$contacts = pages_getpages($a->user['uid']);
foreach($contacts as $contact) {
$pages .= '<li class="tool"><a href="'.$a->get_baseurl().'/redir/'.$contact["id"].'" class="label" target="external-link">'.
$contact["Name"]."</a></li>";
}
$pages .= "</ul></div></div>";
if (sizeof($contacts) > 0) {
$pos = strpos($a->page['aside'], '<div id="saved-search-list"');
if ($pos > 0) {
$a->page['aside'] = substr($a->page['aside'], 0, $pos).$pages.substr($a->page['aside'], $pos);
} else
$a->page['aside'] = $pages.$a->page['aside'];
}
}
?>

View File

@ -46,7 +46,8 @@ function showmore_addon_settings(&$a,&$s) {
$s .= '</div><div class="clear"></div>'; $s .= '</div><div class="clear"></div>';
$s .= '<div class="settings-submit-wrapper" ><input type="submit" id="showmore-submit" name="showmore-submit" class="settings-submit" value="' . t('Submit') . '" /></div>'; $s .= '<div class="settings-submit-wrapper" ><input type="submit" id="showmore-submit" name="showmore-submit" class="settings-submit" value="' . t('Submit') . '" /></div>';
// $s .= '<div class="showmore-desc">' . t('Use /expression/ to provide regular expressions') . '</div></div>'; // $s .= '<div class="showmore-desc">' . t('Use /expression/ to provide regular expressions') . '</div>';
$s .= '</div>';
return; return;
} }