X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=pumpio%2Fpumpio.php;h=b90d8b608dfa4cf10ed017404a48c086ed89d71b;hb=3b54203d80b63101d064581081ec7a2a5236e322;hp=55d0433a1b4295e3060da314c3be365f52e768d1;hpb=986e149eabffa8c045d0bb2c673155eba7a82241;p=friendica-addons.git
diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php
index 55d0433a..b90d8b60 100644
--- a/pumpio/pumpio.php
+++ b/pumpio/pumpio.php
@@ -1,7 +1,7 @@
*/
@@ -68,8 +68,10 @@ function pumpio_registerclient(&$a, $host) {
if ($application_name == "")
$application_name = $a->get_hostname();
+ $adminlist = explode(",", str_replace(" ", "", $a->config['admin_email']));
+
$params["type"] = "client_associate";
- $params["contacts"] = $a->config['admin_email'];
+ $params["contacts"] = $adminlist[0];
$params["application_type"] = "native";
$params["application_name"] = $application_name;
$params["logo_url"] = $a->get_baseurl()."/images/friendica-256.png";
@@ -302,6 +304,7 @@ function pumpio_settings_post(&$a,&$b) {
set_pconfig(local_user(),'pumpio','mirror',false);
set_pconfig(local_user(),'pumpio','post_by_default',false);
set_pconfig(local_user(),'pumpio','lastdate', 0);
+ set_pconfig(local_user(),'pumpio','last_id', '');
} else {
// filtering the username if it is filled wrong
$user = $_POST['pumpio_user'];
@@ -433,9 +436,6 @@ function pumpio_send(&$a,&$b) {
$title = trim($b['title']);
- if ($title != '')
- $title = "
".$title."
";
-
$content = bbcode($b['body'], false, false, 4);
// Enhance the way, videos are displayed
@@ -454,7 +454,10 @@ function pumpio_send(&$a,&$b) {
if (!$iscomment) {
$params["object"] = array(
'objectType' => "note",
- 'content' => $title.$content);
+ 'content' => $content);
+
+ if ($title != "")
+ $params["object"]["displayName"] = $title;
if (count($receiver["to"]))
$params["to"] = $receiver["to"];
@@ -477,8 +480,11 @@ function pumpio_send(&$a,&$b) {
$params["object"] = array(
'objectType' => "comment",
- 'content' => $title.$content,
+ 'content' => $content,
'inReplyTo' => $inReplyTo);
+
+ if ($title != "")
+ $params["object"]["displayName"] = $title;
}
$client = new oauth_client_class;
@@ -493,9 +499,16 @@ function pumpio_send(&$a,&$b) {
$username = $user.'@'.$host;
$url = 'https://'.$host.'/api/user/'.$user.'/feed';
- $success = $client->CallAPI($url, 'POST', $params, array('FailOnAccessError'=>true, 'RequestContentType'=>'application/json'), $user);
+ if (pumpio_reachable($url))
+ $success = $client->CallAPI($url, 'POST', $params, array('FailOnAccessError'=>true, 'RequestContentType'=>'application/json'), $user);
+ else
+ $success = false;
if($success) {
+
+ if ($user->generator->displayName)
+ set_pconfig($b["uid"], "pumpio", "application_name", $user->generator->displayName);
+
$post_id = $user->object->id;
logger('pumpio_send '.$username.': success '.$post_id);
if($post_id AND $iscomment) {
@@ -575,7 +588,10 @@ function pumpio_action(&$a, $uid, $uri, $action, $content = "") {
$url = 'https://'.$hostname.'/api/user/'.$username.'/feed';
- $success = $client->CallAPI($url, 'POST', $params, array('FailOnAccessError'=>true, 'RequestContentType'=>'application/json'), $user);
+ if (pumpio_reachable($url))
+ $success = $client->CallAPI($url, 'POST', $params, array('FailOnAccessError'=>true, 'RequestContentType'=>'application/json'), $user);
+ else
+ $success = false;
if($success)
logger('pumpio_action '.$username.' '.$action.': success '.$uri);
@@ -593,8 +609,13 @@ function pumpio_action(&$a, $uid, $uri, $action, $content = "") {
}
}
+function pumpio_sync(&$a) {
+ $r = q("SELECT * FROM `addon` WHERE `installed` = 1 AND `name` = 'pumpio'",
+ $plugin);
+
+ if (!count($r))
+ return;
-function pumpio_cron(&$a,$b) {
$last = get_config('pumpio','last_poll');
$poll_interval = intval(get_config('pumpio','poll_interval'));
@@ -618,9 +639,23 @@ function pumpio_cron(&$a,$b) {
}
}
+ $abandon_days = intval(get_config('system','account_abandon_days'));
+ if ($abandon_days < 1)
+ $abandon_days = 0;
+
+ $abandon_limit = date("Y-m-d H:i:s", time() - $abandon_days * 86400);
+
$r = q("SELECT * FROM `pconfig` WHERE `cat` = 'pumpio' AND `k` = 'import' AND `v` = '1' ORDER BY RAND() ");
if(count($r)) {
foreach($r as $rr) {
+ if ($abandon_days != 0) {
+ $user = q("SELECT `login_date` FROM `user` WHERE uid=%d AND `login_date` >= '%s'", $rr['uid'], $abandon_limit);
+ if (!count($user)) {
+ logger('abandoned account: timeline from user '.$rr['uid'].' will not be imported');
+ continue;
+ }
+ }
+
logger('pumpio: importing timeline from user '.$rr['uid']);
pumpio_fetchinbox($a, $rr['uid']);
@@ -643,6 +678,11 @@ function pumpio_cron(&$a,$b) {
set_config('pumpio','last_poll', time());
}
+function pumpio_cron(&$a,$b) {
+ //pumpio_sync($a);
+ proc_run("php","addon/pumpio/pumpio_sync.php");
+}
+
function pumpio_fetchtimeline(&$a, $uid) {
$ckey = get_pconfig($uid, 'pumpio', 'consumer_key');
$csecret = get_pconfig($uid, 'pumpio', 'consumer_secret');
@@ -652,8 +692,12 @@ function pumpio_fetchtimeline(&$a, $uid) {
$hostname = get_pconfig($uid, 'pumpio','host');
$username = get_pconfig($uid, "pumpio", "user");
- $application_name = get_config('pumpio', 'application_name');
-
+ // get the application name for the pump.io app
+ // 1st try personal config, then system config and fallback to the
+ // hostname of the node if neither one is set.
+ $application_name = get_pconfig( $uid, 'pumpio', 'application_name');
+ if ($application_name == "")
+ $application_name = get_config('pumpio', 'application_name');
if ($application_name == "")
$application_name = $a->get_hostname();
@@ -675,7 +719,10 @@ function pumpio_fetchtimeline(&$a, $uid) {
$username = $user.'@'.$host;
- $success = $client->CallAPI($url, 'GET', array(), array('FailOnAccessError'=>true), $user);
+ if (pumpio_reachable($url))
+ $success = $client->CallAPI($url, 'GET', array(), array('FailOnAccessError'=>true), $user);
+ else
+ $success = false;
if (!$success) {
logger('pumpio: error fetching posts for user '.$uid." ".$username." ".print_r($user, true));
@@ -711,7 +758,7 @@ function pumpio_fetchtimeline(&$a, $uid) {
if ($receiver->id == "http://activityschema.org/collection/public")
$public = true;
- if ($public AND !strstr($post->generator->displayName, $application_name)) {
+ if ($public AND !stristr($post->generator->displayName, $application_name)) {
require_once('include/html2bbcode.php');
$_SESSION["authenticated"] = true;
@@ -805,7 +852,8 @@ function pumpio_dounlike(&$a, $uid, $self, $post, $own_id) {
logger("pumpio_dounlike: not found. User ".$own_id." ".$uid." Contact: ".$contactid." Url ".$orig_post['uri']);
}
-function pumpio_dolike(&$a, $uid, $self, $post, $own_id) {
+function pumpio_dolike(&$a, $uid, $self, $post, $own_id, $threadcompletion = true) {
+ require_once('include/items.php');
// Searching for the liked post
// Two queries for speed issues
@@ -828,6 +876,10 @@ function pumpio_dolike(&$a, $uid, $self, $post, $own_id) {
$orig_post = $r[0];
}
+ // thread completion
+ if ($threadcompletion)
+ pumpio_fetchallcomments($a, $uid, $post->object->id);
+
$contactid = 0;
if(link_compare($post->actor->url, $own_id)) {
@@ -892,6 +944,13 @@ function pumpio_dolike(&$a, $uid, $self, $post, $own_id) {
function pumpio_get_contact($uid, $contact) {
+ if (function_exists("update_gcontact"))
+ update_gcontact($contact->url,
+ NETWORK_PUMPIO, $contact->image->url,
+ $contact->displayName, $contact->preferredUsername,
+ $contact->location->displayName, $contact->summary,
+ str_replace("acct:", "", $contact->id));
+
$r = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1",
dbesc(normalise_link($contact->url)));
@@ -908,6 +967,12 @@ function pumpio_get_contact($uid, $contact) {
dbesc($contact->image->url),
dbesc(normalise_link($contact->url)));
+ if (DB_UPDATE_VERSION >= "1177")
+ q("UPDATE `unique_contacts` SET `location` = '%s', `about` = '%s' WHERE url = '%s'",
+ dbesc($contact->location->displayName),
+ dbesc($contact->summary),
+ dbesc(normalise_link($contact->url)));
+
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' LIMIT 1",
intval($uid), dbesc($contact->url));
@@ -973,10 +1038,19 @@ function pumpio_get_contact($uid, $contact) {
dbesc(datetime_convert()),
intval($contact_id)
);
+
+ if (DB_UPDATE_VERSION >= "1177")
+ q("UPDATE `contact` SET `location` = '%s',
+ `about` = '%s'
+ WHERE `id` = %d",
+ dbesc($contact->location->displayName),
+ dbesc($contact->summary),
+ intval($contact_id)
+ );
} else {
// update profile photos once every two weeks as we have no notification of when they change.
-
- $update_photo = (($r[0]['avatar-date'] < datetime_convert('','','now -14 days')) ? true : false);
+ //$update_photo = (($r[0]['avatar-date'] < datetime_convert('','','now -14 days')) ? true : false);
+ $update_photo = ($r[0]['avatar-date'] < datetime_convert('','','now -12 hours'));
// check that we have all the photos, this has been known to fail on occasion
@@ -1005,6 +1079,15 @@ function pumpio_get_contact($uid, $contact) {
dbesc($contact->preferredUsername),
intval($r[0]['id'])
);
+
+ if (DB_UPDATE_VERSION >= "1177")
+ q("UPDATE `contact` SET `location` = '%s',
+ `about` = '%s'
+ WHERE `id` = %d",
+ dbesc($contact->location->displayName),
+ dbesc($contact->summary),
+ intval($r[0]['id'])
+ );
}
}
@@ -1032,7 +1115,7 @@ function pumpio_dodelete(&$a, $uid, $self, $post, $own_id) {
return drop_item($r[0]["id"], $false);
}
-function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcompletion = false) {
+function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcompletion = true) {
require_once('include/items.php');
require_once('include/html2bbcode.php');
@@ -1081,6 +1164,7 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet
$public = true;
$postarray = array();
+ $postarray['network'] = NETWORK_PUMPIO;
$postarray['gravity'] = 0;
$postarray['uid'] = $uid;
$postarray['wall'] = 0;
@@ -1094,6 +1178,11 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet
$contact_id = $self[0]['id'];
$postarray['parent-uri'] = $post->object->id;
+
+ if (!$public) {
+ $postarray['private'] = 1;
+ $postarray['allow_cid'] = '<' . $self[0]['id'] . '>';
+ }
} else {
$contact_id = 0;
@@ -1139,7 +1228,7 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet
$reply->published = $post->object->inReplyTo->published;
$reply->received = $post->object->inReplyTo->updated;
$reply->url = $post->object->inReplyTo->url;
- pumpio_dopost($a, $client, $uid, $self, $reply, $own_id);
+ pumpio_dopost($a, $client, $uid, $self, $reply, $own_id, false);
$postarray['parent-uri'] = $post->object->inReplyTo->id;
}
@@ -1167,16 +1256,13 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet
$postarray['created'] = datetime_convert('UTC','UTC',$post->published);
$postarray['edited'] = datetime_convert('UTC','UTC',$post->received);
- if (!$public) {
- $postarray['private'] = 1;
- $postarray['allow_cid'] = '<' . $self[0]['id'] . '>';
- }
if ($post->verb == "share") {
if (!intval(get_config('system','wall-to-wall_share'))) {
$postarray['body'] = "[share author='".$post->object->author->displayName.
"' profile='".$post->object->author->url.
"' avatar='".$post->object->author->image->url.
+ "' posted='".datetime_convert('UTC','UTC',$post->object->created).
"' link='".$post->links->self->href."']".$postarray['body']."[/share]";
} else {
// Let shares look like wall-to-wall posts
@@ -1190,6 +1276,7 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet
return false;
$top_item = item_store($postarray);
+ $postarray["id"] = $top_item;
if (($top_item == 0) AND ($post->verb == "update")) {
$r = q("UPDATE `item` SET `title` = '%s', `body` = '%s' , `changed` = '%s' WHERE `uri` = '%s' AND `uid` = %d",
@@ -1276,6 +1363,13 @@ function pumpio_fetchinbox(&$a, $uid) {
$self = q("SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1",
intval($uid));
+ $lastitems = q("SELECT uri FROM `item` WHERE `network` = '%s' AND `uid` = %d AND
+ `extid` != '' AND `id` = `parent`
+ ORDER BY `commented` DESC LIMIT 10",
+ dbesc(NETWORK_PUMPIO),
+ intval($uid)
+ );
+
$client = new oauth_client_class;
$client->oauth_version = '1.0a';
$client->authorization_header = true;
@@ -1293,7 +1387,10 @@ function pumpio_fetchinbox(&$a, $uid) {
if ($last_id != "")
$url .= '?since='.urlencode($last_id);
- $success = $client->CallAPI($url, 'GET', array(), array('FailOnAccessError'=>true), $user);
+ if (pumpio_reachable($url))
+ $success = $client->CallAPI($url, 'GET', array(), array('FailOnAccessError'=>true), $user);
+ else
+ $success = false;
if ($user->items) {
$posts = array_reverse($user->items);
@@ -1301,10 +1398,13 @@ function pumpio_fetchinbox(&$a, $uid) {
if (count($posts))
foreach ($posts as $post) {
$last_id = $post->id;
- pumpio_dopost($a, $client, $uid, $self, $post, $own_id);
+ pumpio_dopost($a, $client, $uid, $self, $post, $own_id, true);
}
}
+ foreach ($lastitems AS $item)
+ pumpio_fetchallcomments($a, $uid, $item["uri"]);
+
set_pconfig($uid,'pumpio','last_id', $last_id);
}
@@ -1328,12 +1428,18 @@ function pumpio_getallusers(&$a, $uid) {
$url = 'https://'.$hostname.'/api/user/'.$username.'/following';
- $success = $client->CallAPI($url, 'GET', array(), array('FailOnAccessError'=>true), $users);
+ if (pumpio_reachable($url))
+ $success = $client->CallAPI($url, 'GET', array(), array('FailOnAccessError'=>true), $users);
+ else
+ $success = false;
if ($users->totalItems > count($users->items)) {
$url = 'https://'.$hostname.'/api/user/'.$username.'/following?count='.$users->totalItems;
- $success = $client->CallAPI($url, 'GET', array(), array('FailOnAccessError'=>true), $users);
+ if (pumpio_reachable($url))
+ $success = $client->CallAPI($url, 'GET', array(), array('FailOnAccessError'=>true), $users);
+ else
+ $success = false;
}
foreach ($users->items AS $user)
@@ -1394,7 +1500,10 @@ function pumpio_queue_hook(&$a,&$b) {
$client->client_id = $consumer_key;
$client->client_secret = $consumer_secret;
- $success = $client->CallAPI($z['url'], 'POST', $z['post'], array('FailOnAccessError'=>true, 'RequestContentType'=>'application/json'), $user);
+ if (pumpio_reachable($z['url']))
+ $success = $client->CallAPI($z['url'], 'POST', $z['post'], array('FailOnAccessError'=>true, 'RequestContentType'=>'application/json'), $user);
+ else
+ $success = false;
if($success) {
$post_id = $user->object->id;
@@ -1512,33 +1621,23 @@ function pumpio_fetchallcomments(&$a, $uid, $id) {
$hostname = get_pconfig($uid, 'pumpio','host');
$username = get_pconfig($uid, "pumpio", "user");
- $own_id = "https://".$hostname."/".$username;
+ logger("pumpio_fetchallcomments: completing comment for user ".$uid." post id ".$id);
- logger("pumpio_fetchallcomments: completing comment for user ".$uid." url ".$url);
+ $own_id = "https://".$hostname."/".$username;
$self = q("SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1",
intval($uid));
- // Fetching the original post - Two queries for speed issues
- $r = q("SELECT extid FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
- dbesc($url),
+ // Fetching the original post
+ $r = q("SELECT `extid` FROM `item` WHERE `uri` = '%s' AND `uid` = %d AND `extid` != '' LIMIT 1",
+ dbesc($id),
intval($uid)
);
- if (!count($r)) {
- $r = q("SELECT extid FROM `item` WHERE `extid` = '%s' AND `uid` = %d LIMIT 1",
- dbesc($url),
- intval($uid)
- );
-
- if (!count($r))
- return false;
- }
+ if (!count($r))
+ return false;
- if ($r[0]["extid"])
- $url = $r[0]["extid"];
- else
- $url = $id;
+ $url = $r[0]["extid"];
$client = new oauth_client_class;
$client->oauth_version = '1.0a';
@@ -1552,11 +1651,30 @@ function pumpio_fetchallcomments(&$a, $uid, $id) {
logger("pumpio_fetchallcomments: fetching comment for user ".$uid." url ".$url);
- $success = $client->CallAPI($url, 'GET', array(), array('FailOnAccessError'=>true), $item);
+ if (pumpio_reachable($url))
+ $success = $client->CallAPI($url, 'GET', array(), array('FailOnAccessError'=>true), $item);
+ else
+ $success = false;
if (!$success)
return;
+ if ($item->likes->totalItems != 0) {
+ foreach ($item->likes->items AS $post) {
+ $like = new stdClass;
+ $like->object = new stdClass;
+ $like->object->id = $item->id;
+ $like->actor = new stdClass;
+ $like->actor->displayName = $item->displayName;
+ $like->actor->preferredUsername = $item->preferredUsername;
+ $like->actor->url = $item->url;
+ $like->actor->image = $item->image;
+ $like->generator = new stdClass;
+ $like->generator->displayName = "pumpio";
+ pumpio_dolike($a, $uid, $self, $post, $own_id, false);
+ }
+ }
+
if ($item->replies->totalItems == 0)
return;
@@ -1566,7 +1684,7 @@ function pumpio_fetchallcomments(&$a, $uid, $id) {
// Checking if the comment already exists - Two queries for speed issues
$r = q("SELECT extid FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
- dbesc($url),
+ dbesc($item->id),
intval($uid)
);
@@ -1574,18 +1692,21 @@ function pumpio_fetchallcomments(&$a, $uid, $id) {
continue;
$r = q("SELECT extid FROM `item` WHERE `extid` = '%s' AND `uid` = %d LIMIT 1",
- dbesc($url),
+ dbesc($item->id),
intval($uid)
);
if (count($r))
continue;
+ $post = new stdClass;
$post->verb = "post";
$post->actor = $item->author;
$post->published = $item->published;
$post->received = $item->updated;
+ $post->generator = new stdClass;
$post->generator->displayName = "pumpio";
+ // To-Do: Check for public post
unset($item->author);
unset($item->published);
@@ -1593,17 +1714,19 @@ function pumpio_fetchallcomments(&$a, $uid, $id) {
$post->object = $item;
- logger("pumpio_fetchallcomments: posting comment ".$post->object->id);
+ logger("pumpio_fetchallcomments: posting comment ".$post->object->id." ".print_r($post, true));
pumpio_dopost($a, $client, $uid, $self, $post, $own_id, false);
}
}
-/*
-Bugs:
- - refresh after post doesn't always happen
+function pumpio_reachable($url) {
+ $data = z_fetch_url($url, false, $redirects, array('timeout'=>10));
+ return(intval($data['return_code']) != 0);
+}
+
+/*
To-Do:
- edit own notes
- delete own notes
-
*/