Merge branch 'master', remote-tracking branch 'remotes/upstream/master'
* remotes/upstream/master: package updates Facebook: Removed the test output of empty posts. facebook: Bug fixed that prevent old posts from being fetched. Facebook: Now the last fetched date is saved. Showmore: A little html bug was fixed (missing </div>) Facebook: Pages are now imported. Formatting of the import is improved. Removed plugin "pages" because it was absolete. (Replaced by "page") Facebook: The import is now formatted in another way to make it look nicer * master:pull/43/head
commit
6b8b076352
BIN
facebook.tgz
BIN
facebook.tgz
Binary file not shown.
|
@ -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
|
||||||
|
$j = fb_get_timeline($access_token, &$lastdate);
|
||||||
if (isset($j->data)) {
|
if (isset($j->data)) {
|
||||||
logger('fb_consume_stream: feed: ' . print_r($j,true), LOGGER_DATA);
|
logger('fb_consume_stream: feed: ' . print_r($j,true), LOGGER_DATA);
|
||||||
fb_consume_stream($uid,$j,false);
|
fb_consume_stream($uid,$j,false);
|
||||||
} else {
|
|
||||||
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,17 +1338,10 @@ 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.
|
|
||||||
// Definitely a quickhack
|
|
||||||
$datarray['contact-id'] = $self[0]['id'];
|
|
||||||
} else {
|
|
||||||
logger('no contact: post ignored');
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
$datarray['verb'] = ACTIVITY_POST;
|
$datarray['verb'] = ACTIVITY_POST;
|
||||||
if($wall) {
|
if($wall) {
|
||||||
|
@ -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->name and $entry->link)
|
||||||
|
$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";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$entry->caption and !$entry->name) {
|
||||||
|
if ($entry->link)
|
||||||
|
$datarray['body'] .= "\n[url]".$entry->link."[/url]\n";
|
||||||
|
else
|
||||||
|
$datarray['body'] .= "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$quote = "";
|
||||||
|
if($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) {
|
if($entry->picture && $entry->link) {
|
||||||
$datarray['body'] .= "\n\n" . '[url=' . $entry->link . '][img]' . $entry->picture . '[/img][/url]';
|
$datarray['body'] .= "\n" . '[url=' . $entry->link . '][img]'.$entry->picture.'[/img][/url]';
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if($entry->picture)
|
if($entry->picture)
|
||||||
$datarray['body'] .= "\n\n" . '[img]' . $entry->picture . '[/img]';
|
$datarray['body'] .= "\n" . '[img]' . $entry->picture . '[/img]';
|
||||||
// if just a link, it may be a wall photo - check
|
// if just a link, it may be a wall photo - check
|
||||||
if($entry->link)
|
if($entry->link)
|
||||||
$datarray['body'] .= fb_get_photo($uid,$entry->link);
|
$datarray['body'] .= fb_get_photo($uid,$entry->link);
|
||||||
}
|
}
|
||||||
if($entry->name)
|
}
|
||||||
$datarray['body'] .= "\n" . $entry->name;
|
|
||||||
if($entry->caption)
|
// Just as a test - to see if these are the missing entries
|
||||||
$datarray['body'] .= "\n" . $entry->caption;
|
//if(trim($datarray['body']) == '')
|
||||||
if($entry->description)
|
// $datarray['body'] = $entry->story;
|
||||||
$datarray['body'] .= "\n" . $entry->description;
|
|
||||||
|
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] ";
|
||||||
|
|
||||||
|
if ($entry->actions)
|
||||||
|
foreach ($entry->actions as $action)
|
||||||
|
if (($action->name != "Comment") and ($action->name != "Like"))
|
||||||
|
$datarray['body'] .= "[url=".$action->link."]".$action->name."[/url] ";
|
||||||
|
|
||||||
|
$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
impressum.tgz
BIN
impressum.tgz
Binary file not shown.
Binary file not shown.
|
@ -1,3 +0,0 @@
|
||||||
Pages
|
|
||||||
|
|
||||||
Shows lists of community pages
|
|
|
@ -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'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
BIN
showmore.tgz
BIN
showmore.tgz
Binary file not shown.
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
BIN
statusnet.tgz
BIN
statusnet.tgz
Binary file not shown.
BIN
twitter.tgz
BIN
twitter.tgz
Binary file not shown.
Loading…
Reference in New Issue