Revert "Move objects to src"

This commit is contained in:
Michael Vogel 2017-12-08 05:24:41 +01:00 committed by GitHub
commit cf45cafea2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 1162 additions and 1317 deletions

View file

@ -11,7 +11,7 @@ define('FROMGPLUS_DEFAULT_POLL_INTERVAL', 30); // given in minutes
use Friendica\Core\Config;
use Friendica\Core\PConfig;
use Friendica\Object\Image;
use Friendica\Object\Photo;
require_once 'mod/share.php';
require_once 'mod/parse_url.php';
@ -264,12 +264,12 @@ function fromgplus_cleanupgoogleproxy($fullImage, $image) {
}
if ($cleaned["full"] != "")
$infoFull = Image::getInfoFromURL($cleaned["full"]);
$infoFull = Photo::getInfoFromURL($cleaned["full"]);
else
$infoFull = array("0" => 0, "1" => 0);
if ($cleaned["preview"] != "")
$infoPreview = Image::getInfoFromURL($cleaned["preview"]);
$infoPreview = Photo::getInfoFromURL($cleaned["preview"]);
else
$infoFull = array("0" => 0, "1" => 0);
@ -352,9 +352,9 @@ function fromgplus_handleattachments($a, $uid, $item, $displaytext, $shared) {
$images = fromgplus_cleanupgoogleproxy($attachment->fullImage, $attachment->image);
} else {
if ($attachment->fullImage->url != "") {
$images = Image::storePhoto($a, $uid, "", $attachment->fullImage->url);
$images = Photo::storePhoto($a, $uid, "", $attachment->fullImage->url);
} elseif ($attachment->image->url != "") {
$images = Image::storePhoto($a, $uid, "", $attachment->image->url);
$images = Photo::storePhoto($a, $uid, "", $attachment->image->url);
}
}

View file

@ -8,8 +8,8 @@
use Friendica\Core\Config;
use Friendica\Core\PConfig;
use Friendica\Core\Worker;
use Friendica\Model\Contact;
use Friendica\Model\GContact;
use Friendica\Model\GlobalContact;
use Friendica\Object\Contact;
require 'addon/pumpio/oauth/http.php';
require 'addon/pumpio/oauth/oauth_client.php';
@ -974,7 +974,7 @@ function pumpio_dolike(&$a, $uid, $self, $post, $own_id, $threadcompletion = tru
function pumpio_get_contact($uid, $contact, $no_insert = false) {
GContact::update(array("url" => $contact->url, "network" => NETWORK_PUMPIO, "generation" => 2,
GlobalContact::update(array("url" => $contact->url, "network" => NETWORK_PUMPIO, "generation" => 2,
"photo" => $contact->image->url, "name" => $contact->displayName, "hide" => true,
"nick" => $contact->preferredUsername, "location" => $contact->location->displayName,
"about" => $contact->summary, "addr" => str_replace("acct:", "", $contact->id)));

View file

@ -1,5 +1,4 @@
<?php
/**
* Name: GNU Social Connector
* Description: Bidirectional (posting, relaying and reading) connector for GNU Social.
@ -33,7 +32,9 @@
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/*
/***
* We have to alter the TwitterOAuth class a little bit to work with any GNU Social
* installation abroad. Basically it's only make the API path variable and be happy.
*
@ -45,46 +46,24 @@ define('STATUSNET_DEFAULT_POLL_INTERVAL', 5); // given in minutes
require_once 'library/twitteroauth.php';
require_once 'include/enotify.php';
use Friendica\App;
use Friendica\Core\Config;
use Friendica\Core\PConfig;
use Friendica\Model\GContact;
use Friendica\Model\Photo;
use Friendica\Model\GlobalContact;
use Friendica\Object\Photo;
class StatusNetOAuth extends TwitterOAuth
{
function get_maxlength()
{
class StatusNetOAuth extends TwitterOAuth {
function get_maxlength() {
$config = $this->get($this->host . 'statusnet/config.json');
return $config->site->textlimit;
}
function accessTokenURL()
{
return $this->host . 'oauth/access_token';
}
function authenticateURL()
{
return $this->host . 'oauth/authenticate';
}
function authorizeURL()
{
return $this->host . 'oauth/authorize';
}
function requestTokenURL()
{
return $this->host . 'oauth/request_token';
}
function __construct($apipath, $consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL)
{
function accessTokenURL() { return $this->host.'oauth/access_token'; }
function authenticateURL() { return $this->host.'oauth/authenticate'; }
function authorizeURL() { return $this->host.'oauth/authorize'; }
function requestTokenURL() { return $this->host.'oauth/request_token'; }
function __construct($apipath, $consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) {
parent::__construct($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret);
$this->host = $apipath;
}
/**
* Make an HTTP request
*
@ -92,8 +71,7 @@ class StatusNetOAuth extends TwitterOAuth
*
* Copied here from the twitteroauth library and complemented by applying the proxy settings of friendica
*/
function http($url, $method, $postfields = NULL)
{
function http($url, $method, $postfields = NULL) {
$this->http_info = array();
$ci = curl_init();
/* Curl settings */
@ -102,10 +80,9 @@ class StatusNetOAuth extends TwitterOAuth
curl_setopt($ci, CURLOPT_HTTPPROXYTUNNEL, 1);
curl_setopt($ci, CURLOPT_PROXY, $prx);
$prxusr = Config::get('system','proxyuser');
if (strlen($prxusr)) {
if(strlen($prxusr))
curl_setopt($ci, CURLOPT_PROXYUSERPWD, $prxusr);
}
}
curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
@ -139,8 +116,7 @@ class StatusNetOAuth extends TwitterOAuth
}
}
function statusnet_install()
{
function statusnet_install() {
// we need some hooks, for the configuration and for sending tweets
register_hook('connector_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings');
register_hook('connector_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post');
@ -153,8 +129,8 @@ function statusnet_install()
logger("installed GNU Social");
}
function statusnet_uninstall()
{
function statusnet_uninstall() {
unregister_hook('connector_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings');
unregister_hook('connector_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post');
unregister_hook('notifier_normal', 'addon/statusnet/statusnet.php', 'statusnet_post_hook');
@ -168,18 +144,16 @@ function statusnet_uninstall()
unregister_hook('post_local_end', 'addon/statusnet/statusnet.php', 'statusnet_post_hook');
unregister_hook('plugin_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings');
unregister_hook('plugin_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post');
}
function statusnet_check_item_notification(App $a, &$notification_data)
{
function statusnet_check_item_notification($a, &$notification_data) {
$notification_data["profiles"][] = PConfig::get($notification_data["uid"], 'statusnet', 'own_url');
}
function statusnet_jot_nets(App $a, &$b)
{
if (!local_user()) {
function statusnet_jot_nets(&$a,&$b) {
if(! local_user())
return;
}
$statusnet_post = PConfig::get(local_user(),'statusnet','post');
if(intval($statusnet_post) == 1) {
@ -190,15 +164,12 @@ function statusnet_jot_nets(App $a, &$b)
}
}
function statusnet_settings_post(App $a, $post)
{
if (!local_user()) {
function statusnet_settings_post ($a,$post) {
if(! local_user())
return;
}
// don't check GNU Social settings if GNU Social submit button is not clicked
if (!x($_POST, 'statusnet-submit')) {
if (!x($_POST,'statusnet-submit'))
return;
}
if (isset($_POST['statusnet-disconnect'])) {
/***
@ -298,17 +269,11 @@ function statusnet_settings_post(App $a, $post)
PConfig::delete(local_user(),'statusnet','lastid');
info( t('GNU Social settings updated.') . EOL);
}}}}
}
}
}
}
}
function statusnet_settings(App $a, &$s)
{
if (!local_user()) {
function statusnet_settings(&$a,&$s) {
if(! local_user())
return;
}
$a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . $a->get_baseurl() . '/addon/statusnet/statusnet.css' . '" media="all" />' . "\r\n";
/***
* 1) Check that we have a base api url and a consumer key & secret
@ -466,8 +431,8 @@ function statusnet_settings(App $a, &$s)
$s .= '</div><div class="clear"></div>';
}
function statusnet_post_local(App $a, &$b)
{
function statusnet_post_local(&$a, &$b) {
if ($b['edit']) {
return;
}
@ -495,8 +460,7 @@ function statusnet_post_local(App $a, &$b)
$b['postopts'] .= 'statusnet';
}
function statusnet_action(App $a, $uid, $pid, $action)
{
function statusnet_action($a, $uid, $pid, $action) {
$api = PConfig::get($uid, 'statusnet', 'baseapi');
$ckey = PConfig::get($uid, 'statusnet', 'consumerkey');
$csecret = PConfig::get($uid, 'statusnet', 'consumersecret');
@ -521,11 +485,12 @@ function statusnet_action(App $a, $uid, $pid, $action)
logger("statusnet_action '".$action."' send, result: " . print_r($result, true), LOGGER_DEBUG);
}
function statusnet_post_hook(App $a, &$b)
{
function statusnet_post_hook(&$a,&$b) {
/**
* Post to GNU Social
*/
if (!PConfig::get($b["uid"],'statusnet','import')) {
if($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited']))
return;
@ -539,14 +504,17 @@ function statusnet_post_hook(App $a, &$b)
// Looking if its a reply to a GNU Social post
$hostlength = strlen($hostname) + 2;
if ((substr($b["parent-uri"], 0, $hostlength) != $hostname . "::") && (substr($b["extid"], 0, $hostlength) != $hostname . "::") && (substr($b["thr-parent"], 0, $hostlength) != $hostname . "::")) {
if ((substr($b["parent-uri"], 0, $hostlength) != $hostname."::") && (substr($b["extid"], 0, $hostlength) != $hostname."::")
&& (substr($b["thr-parent"], 0, $hostlength) != $hostname."::")) {
logger("statusnet_post_hook: no GNU Social post ".$b["parent"]);
return;
}
$r = q("SELECT `item`.`author-link`, `item`.`uri`, `contact`.`nick` AS contact_nick
FROM `item` INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
WHERE `item`.`uri` = '%s' AND `item`.`uid` = %d LIMIT 1", dbesc($b["thr-parent"]), intval($b["uid"]));
WHERE `item`.`uri` = '%s' AND `item`.`uid` = %d LIMIT 1",
dbesc($b["thr-parent"]),
intval($b["uid"]));
if(!count($r)) {
logger("statusnet_post_hook: no parent found ".$b["thr-parent"]);
@ -583,9 +551,8 @@ function statusnet_post_hook(App $a, &$b)
}
}
if (($b['verb'] == ACTIVITY_POST) && $b['deleted']) {
if (($b['verb'] == ACTIVITY_POST) && $b['deleted'])
statusnet_action($a, $b["uid"], substr($orig_post["uri"], $hostlength), "delete");
}
if($b['verb'] == ACTIVITY_LIKE) {
logger("statusnet_post_hook: parameter 2 ".substr($b["thr-parent"], $hostlength), LOGGER_DEBUG);
@ -596,18 +563,15 @@ function statusnet_post_hook(App $a, &$b)
return;
}
if ($b['deleted'] || ($b['created'] !== $b['edited'])) {
if($b['deleted'] || ($b['created'] !== $b['edited']))
return;
}
// if posts comes from GNU Social don't send it back
if ($b['extid'] == NETWORK_STATUSNET) {
if($b['extid'] == NETWORK_STATUSNET)
return;
}
if ($b['app'] == "StatusNet") {
if($b['app'] == "StatusNet")
return;
}
logger('GNU Socialpost invoked');
@ -620,20 +584,20 @@ function statusnet_post_hook(App $a, &$b)
$osecret = PConfig::get($b['uid'], 'statusnet', 'oauthsecret');
if($ckey && $csecret && $otoken && $osecret) {
// If it's a repeated message from GNU Social then do a native retweet and exit
if (statusnet_is_retweet($a, $b['uid'], $b['body'])) {
return;
}
require_once 'include/bbcode.php';
// If it's a repeated message from GNU Social then do a native retweet and exit
if (statusnet_is_retweet($a, $b['uid'], $b['body']))
return;
require_once('include/bbcode.php');
$dent = new StatusNetOAuth($api,$ckey,$csecret,$otoken,$osecret);
$max_char = $dent->get_maxlength(); // max. length for a dent
PConfig::set($b['uid'], 'statusnet', 'max_char', $max_char);
$tempfile = "";
require_once "include/plaintext.php";
require_once "include/network.php";
require_once("include/plaintext.php");
require_once("include/network.php");
$msgarr = plaintext($a, $b, $max_char, true, 7);
$msg = $msgarr["text"];
@ -644,33 +608,31 @@ function statusnet_post_hook(App $a, &$b)
if (isset($msgarr["url"]) && ($msgarr["type"] != "photo")) {
if ((strlen($msgarr["url"]) > 20) &&
((strlen($msg . " \n" . $msgarr["url"]) > $max_char))) {
((strlen($msg." \n".$msgarr["url"]) > $max_char)))
$msg .= " \n".short_link($msgarr["url"]);
} else {
else
$msg .= " \n".$msgarr["url"];
}
} elseif (isset($msgarr["image"]) && ($msgarr["type"] != "video")) {
} elseif (isset($msgarr["image"]) && ($msgarr["type"] != "video"))
$image = $msgarr["image"];
}
if ($image != "") {
$img_str = fetch_url($image);
$tempfile = tempnam(get_temppath(), "cache");
file_put_contents($tempfile, $img_str);
$postdata = array("status" => $msg, "media[]" => $tempfile);
} else {
} else
$postdata = array("status"=>$msg);
}
// and now dent it :-)
if(strlen($msg)) {
if ($iscomment) {
$postdata["in_reply_to_status_id"] = substr($orig_post["uri"], $hostlength);
logger('statusnet_post send reply '.print_r($postdata, true), LOGGER_DEBUG);
}
// New code that is able to post pictures
require_once "addon/statusnet/codebird.php";
require_once("addon/statusnet/codebird.php");
$cb = \CodebirdSN\CodebirdSN::getInstance();
$cb->setAPIEndpoint($api);
$cb->setConsumerKey($ckey, $csecret);
@ -680,9 +642,8 @@ function statusnet_post_hook(App $a, &$b)
logger('statusnet_post send, result: ' . print_r($result, true).
"\nmessage: ".$msg, LOGGER_DEBUG."\nOriginal post: ".print_r($b, true)."\nPost Data: ".print_r($postdata, true));
if ($result->source) {
if ($result->source)
PConfig::set($b["uid"], "statusnet", "application_name", strip_tags($result->source));
}
if ($result->error) {
logger('Send to GNU Social failed: "'.$result->error.'"');
@ -695,22 +656,20 @@ function statusnet_post_hook(App $a, &$b)
);
}
}
if ($tempfile != "") {
if ($tempfile != "")
unlink($tempfile);
}
}
}
function statusnet_plugin_admin_post(App $a)
{
function statusnet_plugin_admin_post(&$a){
$sites = array();
foreach($_POST['sitename'] as $id=>$sitename){
$sitename=trim($sitename);
$apiurl=trim($_POST['apiurl'][$id]);
if (!(substr($apiurl, -1) == '/')) {
if (! (substr($apiurl, -1)=='/'))
$apiurl=$apiurl.'/';
}
$secret=trim($_POST['secret'][$id]);
$key=trim($_POST['key'][$id]);
//$applicationname = ((x($_POST, 'applicationname')) ? notags(trim($_POST['applicationname'][$id])):'');
@ -731,10 +690,11 @@ function statusnet_plugin_admin_post(App $a)
}
$sites = Config::set('statusnet','sites', $sites);
}
function statusnet_plugin_admin(App $a, &$o)
{
function statusnet_plugin_admin(&$a, &$o){
$sites = Config::get('statusnet','sites');
$sitesform=array();
if (is_array($sites)){
@ -766,19 +726,16 @@ function statusnet_plugin_admin(App $a, &$o)
));
}
function statusnet_prepare_body(App $a, &$b)
{
if ($b["item"]["network"] != NETWORK_STATUSNET) {
function statusnet_prepare_body(&$a,&$b) {
if ($b["item"]["network"] != NETWORK_STATUSNET)
return;
}
if ($b["preview"]) {
$max_char = PConfig::get(local_user(),'statusnet','max_char');
if (intval($max_char) == 0) {
if (intval($max_char) == 0)
$max_char = 140;
}
require_once "include/plaintext.php";
require_once("include/plaintext.php");
$item = $b["item"];
$item["plink"] = $a->get_baseurl()."/display/".$a->user["nickname"]."/".$item["parent"];
@ -798,34 +755,30 @@ function statusnet_prepare_body(App $a, &$b)
$nickname = "@[url=".$orig_post["author-link"]."]".$nick."[/url]";
$nicknameplain = "@".$nick;
if ((strpos($item["body"], $nickname) === false) && (strpos($item["body"], $nicknameplain) === false)) {
if ((strpos($item["body"], $nickname) === false) && (strpos($item["body"], $nicknameplain) === false))
$item["body"] = $nickname." ".$item["body"];
}
}
$msgarr = plaintext($a, $item, $max_char, true, 7);
$msg = $msgarr["text"];
if (isset($msgarr["url"]) && ($msgarr["type"] != "photo")) {
if (isset($msgarr["url"]) && ($msgarr["type"] != "photo"))
$msg .= " ".$msgarr["url"];
}
if (isset($msgarr["image"])) {
if (isset($msgarr["image"]))
$msg .= " ".$msgarr["image"];
}
$b['html'] = nl2br(htmlspecialchars($msg));
}
}
function statusnet_cron(App $a, $b)
{
function statusnet_cron($a,$b) {
$last = Config::get('statusnet','last_poll');
$poll_interval = intval(Config::get('statusnet','poll_interval'));
if (!$poll_interval) {
if(! $poll_interval)
$poll_interval = STATUSNET_DEFAULT_POLL_INTERVAL;
}
if($last) {
$next = $last + ($poll_interval * 60);
@ -845,9 +798,8 @@ function statusnet_cron(App $a, $b)
}
$abandon_days = intval(Config::get('system','account_abandon_days'));
if ($abandon_days < 1) {
if ($abandon_days < 1)
$abandon_days = 0;
}
$abandon_limit = date("Y-m-d H:i:s", time() - $abandon_days * 86400);
@ -872,8 +824,7 @@ function statusnet_cron(App $a, $b)
Config::set('statusnet','last_poll', time());
}
function statusnet_fetchtimeline(App $a, $uid)
{
function statusnet_fetchtimeline($a, $uid) {
$ckey = PConfig::get($uid, 'statusnet', 'consumerkey');
$csecret = PConfig::get($uid, 'statusnet', 'consumersecret');
$api = PConfig::get($uid, 'statusnet', 'baseapi');
@ -881,19 +832,17 @@ function statusnet_fetchtimeline(App $a, $uid)
$osecret = PConfig::get($uid, 'statusnet', 'oauthsecret');
$lastid = PConfig::get($uid, 'statusnet', 'lastid');
require_once 'mod/item.php';
require_once 'include/items.php';
require_once('mod/item.php');
require_once('include/items.php');
// get the application name for the SN app
// 1st try personal config, then system config and fallback to the
// hostname of the node if neither one is set.
$application_name = PConfig::get( $uid, 'statusnet', 'application_name');
if ($application_name == "") {
if ($application_name == "")
$application_name = Config::get('statusnet', 'application_name');
}
if ($application_name == "") {
if ($application_name == "")
$application_name = $a->get_hostname();
}
$connection = new StatusNetOAuth($api, $ckey,$csecret,$otoken,$osecret);
@ -901,15 +850,13 @@ function statusnet_fetchtimeline(App $a, $uid)
$first_time = ($lastid == "");
if ($lastid <> "") {
if ($lastid <> "")
$parameters["since_id"] = $lastid;
}
$items = $connection->get('statuses/user_timeline', $parameters);
if (!is_array($items)) {
if (!is_array($items))
return;
}
$posts = array_reverse($items);
@ -918,21 +865,17 @@ function statusnet_fetchtimeline(App $a, $uid)
if ($post->id > $lastid)
$lastid = $post->id;
if ($first_time) {
if ($first_time)
continue;
}
if ($post->source == "activity") {
if ($post->source == "activity")
continue;
}
if (is_object($post->retweeted_status)) {
if (is_object($post->retweeted_status))
continue;
}
if ($post->in_reply_to_status_id != "") {
if ($post->in_reply_to_status_id != "")
continue;
}
if (!stristr($post->source, $application_name)) {
$_SESSION["authenticated"] = true;
@ -955,21 +898,17 @@ function statusnet_fetchtimeline(App $a, $uid)
$_REQUEST["title"] = "";
$_REQUEST["body"] = add_page_info_to_body($post->text, true);
if (is_string($post->place->name)) {
if (is_string($post->place->name))
$_REQUEST["location"] = $post->place->name;
}
if (is_string($post->place->full_name)) {
if (is_string($post->place->full_name))
$_REQUEST["location"] = $post->place->full_name;
}
if (is_array($post->geo->coordinates)) {
if (is_array($post->geo->coordinates))
$_REQUEST["coord"] = $post->geo->coordinates[0]." ".$post->geo->coordinates[1];
}
if (is_array($post->coordinates->coordinates)) {
if (is_array($post->coordinates->coordinates))
$_REQUEST["coord"] = $post->coordinates->coordinates[1]." ".$post->coordinates->coordinates[0];
}
//print_r($_REQUEST);
if ($_REQUEST["body"] != "") {
@ -983,8 +922,7 @@ function statusnet_fetchtimeline(App $a, $uid)
PConfig::set($uid, 'statusnet', 'lastid', $lastid);
}
function statusnet_address($contact)
{
function statusnet_address($contact) {
$hostname = normalise_link($contact->statusnet_profile_url);
$nickname = $contact->screen_name;
@ -992,30 +930,28 @@ function statusnet_address($contact)
$address = $contact->screen_name."@".$hostname;
return $address;
return($address);
}
function statusnet_fetch_contact($uid, $contact, $create_user)
{
if ($contact->statusnet_profile_url == "") {
return -1;
}
function statusnet_fetch_contact($uid, $contact, $create_user) {
if ($contact->statusnet_profile_url == "")
return(-1);
GContact::update(array("url" => $contact->statusnet_profile_url,
GlobalContact::update(array("url" => $contact->statusnet_profile_url,
"network" => NETWORK_STATUSNET, "photo" => $contact->profile_image_url,
"name" => $contact->name, "nick" => $contact->screen_name,
"location" => $contact->location, "about" => $contact->description,
"addr" => statusnet_address($contact), "generation" => 3));
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `alias` = '%s' AND `network` = '%s'LIMIT 1", intval($uid), dbesc(normalise_link($contact->statusnet_profile_url)), dbesc(NETWORK_STATUSNET));
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `alias` = '%s' AND `network` = '%s'LIMIT 1",
intval($uid), dbesc(normalise_link($contact->statusnet_profile_url)), dbesc(NETWORK_STATUSNET));
if (!count($r) && !$create_user) {
return 0;
}
if(!count($r) && !$create_user)
return(0);
if (count($r) && ($r[0]["readonly"] || $r[0]["blocked"])) {
logger("statusnet_fetch_contact: Contact '".$r[0]["nick"]."' is blocked or readonly.", LOGGER_DEBUG);
return -1;
return(-1);
}
if(!count($r)) {
@ -1048,9 +984,8 @@ function statusnet_fetch_contact($uid, $contact, $create_user)
intval($uid),
dbesc(NETWORK_STATUSNET));
if (!count($r)) {
return false;
}
if(! count($r))
return(false);
$contact_id = $r[0]['id'];
@ -1059,7 +994,7 @@ function statusnet_fetch_contact($uid, $contact, $create_user)
);
if($g && intval($g[0]['def_gid'])) {
require_once 'include/group.php';
require_once('include/group.php');
group_add_member($uid,'',$contact_id,$g[0]['def_gid']);
}
@ -1078,11 +1013,14 @@ function statusnet_fetch_contact($uid, $contact, $create_user)
);
} 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 -2 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
if((!$r[0]['photo']) || (!$r[0]['thumb']) || (!$r[0]['micro']) || ($update_photo)) {
logger("statusnet_fetch_contact: Updating contact ".$contact->screen_name, LOGGER_DEBUG);
$photos = Photo::importProfilePhoto($contact->profile_image_url, $uid, $r[0]['id']);
@ -1119,18 +1057,17 @@ function statusnet_fetch_contact($uid, $contact, $create_user)
}
}
return $r[0]["id"];
return($r[0]["id"]);
}
function statusnet_fetchuser(App $a, $uid, $screen_name = "", $user_id = "")
{
function statusnet_fetchuser($a, $uid, $screen_name = "", $user_id = "") {
$ckey = PConfig::get($uid, 'statusnet', 'consumerkey');
$csecret = PConfig::get($uid, 'statusnet', 'consumersecret');
$api = PConfig::get($uid, 'statusnet', 'baseapi');
$otoken = PConfig::get($uid, 'statusnet', 'oauthtoken');
$osecret = PConfig::get($uid, 'statusnet', 'oauthsecret');
require_once "addon/statusnet/codebird.php";
require_once("addon/statusnet/codebird.php");
$cb = \Codebird\Codebird::getInstance();
$cb->setConsumerKey($ckey, $csecret);
@ -1141,35 +1078,31 @@ function statusnet_fetchuser(App $a, $uid, $screen_name = "", $user_id = "")
if(count($r)) {
$self = $r[0];
} else {
} else
return;
}
$parameters = array();
if ($screen_name != "") {
if ($screen_name != "")
$parameters["screen_name"] = $screen_name;
}
if ($user_id != "") {
if ($user_id != "")
$parameters["user_id"] = $user_id;
}
// Fetching user data
$user = $cb->users_show($parameters);
if (!is_object($user)) {
if (!is_object($user))
return;
}
$contact_id = statusnet_fetch_contact($uid, $user, true);
return $contact_id;
}
function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_existing_contact)
{
require_once "include/html2bbcode.php";
function statusnet_createpost($a, $uid, $post, $self, $create_user, $only_existing_contact) {
require_once("include/html2bbcode.php");
logger("statusnet_createpost: start", LOGGER_DEBUG);
@ -1185,9 +1118,8 @@ function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_ex
if (is_object($post->retweeted_status)) {
$content = $post->retweeted_status;
statusnet_fetch_contact($uid, $content->user, false);
} else {
} else
$content = $post;
}
$postarray['uri'] = $hostname."::".$content->id;
@ -1196,9 +1128,8 @@ function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_ex
intval($uid)
);
if (count($r)) {
return array();
}
if (count($r))
return(array());
$contactid = 0;
@ -1245,9 +1176,8 @@ function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_ex
$postarray['owner-name'] = $r[0]["name"];
$postarray['owner-link'] = $r[0]["url"];
$postarray['owner-avatar'] = $r[0]["photo"];
} else {
return array();
}
} else
return(array());
}
// Don't create accounts of people who just comment something
$create_user = false;
@ -1262,11 +1192,10 @@ function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_ex
$postarray['owner-link'] = $post->user->statusnet_profile_url;
$postarray['owner-avatar'] = $post->user->profile_image_url;
}
if (($contactid == 0) && !$only_existing_contact) {
if(($contactid == 0) && !$only_existing_contact)
$contactid = $self['id'];
} elseif ($contactid <= 0) {
return array();
}
elseif ($contactid <= 0)
return(array());
$postarray['contact-id'] = $contactid;
@ -1296,56 +1225,62 @@ function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_ex
$postarray['created'] = datetime_convert('UTC','UTC',$content->created_at);
$postarray['edited'] = datetime_convert('UTC','UTC',$content->created_at);
if (is_string($content->place->name)) {
if (is_string($content->place->name))
$postarray["location"] = $content->place->name;
}
if (is_string($content->place->full_name)) {
if (is_string($content->place->full_name))
$postarray["location"] = $content->place->full_name;
}
if (is_array($content->geo->coordinates)) {
if (is_array($content->geo->coordinates))
$postarray["coord"] = $content->geo->coordinates[0]." ".$content->geo->coordinates[1];
}
if (is_array($content->coordinates->coordinates)) {
if (is_array($content->coordinates->coordinates))
$postarray["coord"] = $content->coordinates->coordinates[1]." ".$content->coordinates->coordinates[0];
}
/*if (is_object($post->retweeted_status)) {
$postarray['body'] = html2bbcode($post->retweeted_status->statusnet_html);
$converted = statusnet_convertmsg($a, $postarray['body'], false);
$postarray['body'] = $converted["body"];
$postarray['tag'] = $converted["tags"];
statusnet_fetch_contact($uid, $post->retweeted_status->user, false);
// Let retweets look like wall-to-wall posts
$postarray['author-name'] = $post->retweeted_status->user->name;
$postarray['author-link'] = $post->retweeted_status->user->statusnet_profile_url;
$postarray['author-avatar'] = $post->retweeted_status->user->profile_image_url;
}*/
logger("statusnet_createpost: end", LOGGER_DEBUG);
return $postarray;
return($postarray);
}
function statusnet_checknotification(App $a, $uid, $own_url, $top_item, $postarray)
{
function statusnet_checknotification($a, $uid, $own_url, $top_item, $postarray) {
// This function necer worked and need cleanup
$user = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` LIMIT 1",
intval($uid)
);
if (!count($user)) {
if(!count($user))
return;
}
// Is it me?
if (link_compare($user[0]["url"], $postarray['author-link'])) {
if (link_compare($user[0]["url"], $postarray['author-link']))
return;
}
$own_user = q("SELECT * FROM `contact` WHERE `uid` = %d AND `alias` = '%s' LIMIT 1",
intval($uid),
dbesc($own_url)
);
if (!count($own_user)) {
if(!count($own_user))
return;
}
// Is it me from GNU Social?
if (link_compare($own_user[0]["url"], $postarray['author-link'])) {
if (link_compare($own_user[0]["url"], $postarray['author-link']))
return;
}
$myconv = q("SELECT `author-link`, `author-avatar`, `parent` FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `parent` != 0 AND `deleted` = 0",
dbesc($postarray['parent-uri']),
@ -1353,13 +1288,14 @@ function statusnet_checknotification(App $a, $uid, $own_url, $top_item, $postarr
);
if(count($myconv)) {
foreach($myconv as $conv) {
// now if we find a match, it means we're in this conversation
if (!link_compare($conv['author-link'], $user[0]["url"]) && !link_compare($conv['author-link'], $own_user[0]["url"])) {
continue;
}
require_once 'include/enotify.php';
if(!link_compare($conv['author-link'],$user[0]["url"]) && !link_compare($conv['author-link'],$own_user[0]["url"]))
continue;
require_once('include/enotify.php');
$conv_parent = $conv['parent'];
@ -1386,8 +1322,7 @@ function statusnet_checknotification(App $a, $uid, $own_url, $top_item, $postarr
}
}
function statusnet_fetchhometimeline(App $a, $uid, $mode = 1)
{
function statusnet_fetchhometimeline($a, $uid, $mode = 1) {
$conversations = array();
$ckey = PConfig::get($uid, 'statusnet', 'consumerkey');
@ -1402,8 +1337,8 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1)
logger("statusnet_fetchhometimeline: Fetching for user ".$uid, LOGGER_DEBUG);
require_once 'library/twitteroauth.php';
require_once 'include/items.php';
require_once('library/twitteroauth.php');
require_once('include/items.php');
$connection = new StatusNetOAuth($api, $ckey,$csecret,$otoken,$osecret);
@ -1447,22 +1382,20 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1)
$first_time = ($lastid == "");
if ($lastid != "") {
if ($lastid <> "")
$parameters["since_id"] = $lastid;
}
$items = $connection->get('statuses/home_timeline', $parameters);
if (!is_array($items)) {
if (is_object($items) && isset($items->error)) {
if (is_object($items) && isset($items->error))
$errormsg = $items->error;
} elseif (is_object($items)) {
elseif (is_object($items))
$errormsg = print_r($items, true);
} elseif (is_string($items) || is_float($items) || is_int($items)) {
elseif (is_string($items) || is_float($items) || is_int($items))
$errormsg = $items;
} else {
else
$errormsg = "Unknown error";
}
logger("statusnet_fetchhometimeline: Error fetching home timeline: ".$errormsg, LOGGER_DEBUG);
return;
@ -1475,13 +1408,11 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1)
if (count($posts)) {
foreach ($posts as $post) {
if ($post->id > $lastid) {
if ($post->id > $lastid)
$lastid = $post->id;
}
if ($first_time) {
if ($first_time)
continue;
}
if (isset($post->statusnet_conversation_id)) {
if (!isset($conversations[$post->statusnet_conversation_id])) {
@ -1491,19 +1422,18 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1)
} else {
$postarray = statusnet_createpost($a, $uid, $post, $self, $create_user, true);
if (trim($postarray['body']) == "") {
if (trim($postarray['body']) == "")
continue;
}
$item = item_store($postarray);
$postarray["id"] = $item;
logger('statusnet_fetchhometimeline: User '.$self["nick"].' posted home timeline item '.$item);
if ($item && !function_exists("check_item_notification")) {
if ($item && !function_exists("check_item_notification"))
statusnet_checknotification($a, $uid, $nick, $item, $postarray);
}
}
}
}
PConfig::set($uid, 'statusnet', 'lasthometimelineid', $lastid);
@ -1513,9 +1443,8 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1)
$lastid = PConfig::get($uid, 'statusnet', 'lastmentionid');
$first_time = ($lastid == "");
if ($lastid != "") {
if ($lastid <> "")
$parameters["since_id"] = $lastid;
}
$items = $connection->get('statuses/mentions_timeline', $parameters);
@ -1530,13 +1459,11 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1)
if (count($posts)) {
foreach ($posts as $post) {
if ($post->id > $lastid) {
if ($post->id > $lastid)
$lastid = $post->id;
}
if ($first_time) {
if ($first_time)
continue;
}
$postarray = statusnet_createpost($a, $uid, $post, $self, false, false);
@ -1546,16 +1473,15 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1)
$conversations[$post->statusnet_conversation_id] = $post->statusnet_conversation_id;
}
} else {
if (trim($postarray['body']) == "") {
if (trim($postarray['body']) != "") {
continue;
}
$item = item_store($postarray);
$postarray["id"] = $item;
logger('statusnet_fetchhometimeline: User '.$self["nick"].' posted mention timeline item '.$item);
if ($item && function_exists("check_item_notification")) {
if ($item && function_exists("check_item_notification"))
check_item_notification($item, $uid, NOTIFY_TAGSELF);
}
}
@ -1570,7 +1496,7 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1)
}
if (($item != 0) && !function_exists("check_item_notification")) {
require_once 'include/enotify.php';
require_once('include/enotify.php');
notification(array(
'type' => NOTIFY_TAGSELF,
'notify_flags' => $u[0]['notify-flags'],
@ -1594,8 +1520,7 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1)
PConfig::set($uid, 'statusnet', 'lastmentionid', $lastid);
}
function statusnet_complete_conversation(App $a, $uid, $self, $create_user, $nick, $conversation)
{
function statusnet_complete_conversation($a, $uid, $self, $create_user, $nick, $conversation) {
$ckey = PConfig::get($uid, 'statusnet', 'consumerkey');
$csecret = PConfig::get($uid, 'statusnet', 'consumersecret');
$api = PConfig::get($uid, 'statusnet', 'baseapi');
@ -1603,7 +1528,7 @@ function statusnet_complete_conversation(App $a, $uid, $self, $create_user, $nic
$osecret = PConfig::get($uid, 'statusnet', 'oauthsecret');
$own_url = PConfig::get($uid, 'statusnet', 'own_url');
require_once 'library/twitteroauth.php';
require_once('library/twitteroauth.php');
$connection = new StatusNetOAuth($api, $ckey,$csecret,$otoken,$osecret);
@ -1616,27 +1541,26 @@ function statusnet_complete_conversation(App $a, $uid, $self, $create_user, $nic
foreach($posts AS $post) {
$postarray = statusnet_createpost($a, $uid, $post, $self, false, false);
if (trim($postarray['body']) == "") {
if (trim($postarray['body']) == "")
continue;
}
//print_r($postarray);
$item = item_store($postarray);
$postarray["id"] = $item;
logger('statusnet_complete_conversation: User '.$self["nick"].' posted home timeline item '.$item);
if ($item && !function_exists("check_item_notification")) {
if ($item && !function_exists("check_item_notification"))
statusnet_checknotification($a, $uid, $nick, $item, $postarray);
}
}
}
}
function statusnet_convertmsg(App $a, $body, $no_tags = false)
{
require_once "include/oembed.php";
require_once "include/items.php";
require_once "include/network.php";
function statusnet_convertmsg($a, $body, $no_tags = false) {
require_once("include/oembed.php");
require_once("include/items.php");
require_once("include/network.php");
$body = preg_replace("=\[url\=https?://([0-9]*).([0-9]*).([0-9]*).([0-9]*)/([0-9]*)\](.*?)\[\/url\]=ism","$1.$2.$3.$4/$5",$body);
@ -1662,10 +1586,8 @@ function statusnet_convertmsg(App $a, $body, $no_tags = false)
logger("statusnet_convertmsg: fetching data: done", LOGGER_DEBUG);
if ($type == "") {
if ($type == "")
$type = $oembed_data->type;
}
if ($oembed_data->type == "video") {
//$body = str_replace($search, "[video]".$expanded_url."[/video]", $body);
$type = $oembed_data->type;
@ -1673,11 +1595,11 @@ function statusnet_convertmsg(App $a, $body, $no_tags = false)
$footerlink = "[url=".$expanded_url."]".$expanded_url."[/url]";
$body = str_replace($search, $footerlink, $body);
} elseif (($oembed_data->type == "photo") && isset($oembed_data->url) && !$dontincludemedia) {
} elseif (($oembed_data->type == "photo") && isset($oembed_data->url) && !$dontincludemedia)
$body = str_replace($search, "[url=".$expanded_url."][img]".$oembed_data->url."[/img][/url]", $body);
} elseif ($oembed_data->type != "link") {
elseif ($oembed_data->type != "link")
$body = str_replace($search, "[url=".$expanded_url."]".$expanded_url."[/url]", $body);
} else {
else {
$img_str = fetch_url($expanded_url, true, $redirects, 4);
$tempfile = tempnam(get_temppath(), "cache");
@ -1698,33 +1620,29 @@ function statusnet_convertmsg(App $a, $body, $no_tags = false)
}
}
if ($footerurl != "") {
if ($footerurl != "")
$footer = add_page_info($footerurl);
}
if (($footerlink != "") && (trim($footer) != "")) {
$removedlink = trim(str_replace($footerlink, "", $body));
if (($removedlink == "") || strstr($body, $removedlink)) {
if (($removedlink == "") || strstr($body, $removedlink))
$body = $removedlink;
}
$body .= $footer;
}
}
if ($no_tags) {
return array("body" => $body, "tags" => "");
}
if ($no_tags)
return(array("body" => $body, "tags" => ""));
$str_tags = '';
$cnt = preg_match_all("/([!#@])\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism",$body,$matches,PREG_SET_ORDER);
if($cnt) {
foreach($matches as $mtch) {
if (strlen($str_tags)) {
if(strlen($str_tags))
$str_tags .= ',';
}
if ($mtch[1] == "#") {
// Replacing the hash tags that are directed to the GNU Social server with internal links
@ -1733,20 +1651,19 @@ function statusnet_convertmsg(App $a, $body, $no_tags = false)
$body = str_replace($snhash, $frdchash, $body);
$str_tags .= $frdchash;
} else {
} else
$str_tags .= "@[url=".$mtch[2]."]".$mtch[3]."[/url]";
}
// To-Do:
// There is a problem with links with to GNU Social groups, so these links are stored with "@" like friendica groups
//$str_tags .= $mtch[1]."[url=".$mtch[2]."]".$mtch[3]."[/url]";
}
}
return array("body" => $body, "tags" => $str_tags);
return(array("body"=>$body, "tags"=>$str_tags));
}
function statusnet_fetch_own_contact(App $a, $uid)
{
function statusnet_fetch_own_contact($a, $uid) {
$ckey = PConfig::get($uid, 'statusnet', 'consumerkey');
$csecret = PConfig::get($uid, 'statusnet', 'consumersecret');
$api = PConfig::get($uid, 'statusnet', 'baseapi');
@ -1757,7 +1674,7 @@ function statusnet_fetch_own_contact(App $a, $uid)
$contact_id = 0;
if ($own_url == "") {
require_once 'library/twitteroauth.php';
require_once('library/twitteroauth.php');
$connection = new StatusNetOAuth($api, $ckey,$csecret,$otoken,$osecret);
@ -1767,49 +1684,44 @@ function statusnet_fetch_own_contact(App $a, $uid)
PConfig::set($uid, 'statusnet', 'own_url', normalise_link($user->statusnet_profile_url));
$contact_id = statusnet_fetch_contact($uid, $user, true);
} else {
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `alias` = '%s' LIMIT 1",
intval($uid), dbesc($own_url));
if (count($r)) {
if(count($r))
$contact_id = $r[0]["id"];
} else {
else
PConfig::delete($uid, 'statusnet', 'own_url');
}
}
return $contact_id;
return($contact_id);
}
function statusnet_is_retweet(App $a, $uid, $body)
{
function statusnet_is_retweet($a, $uid, $body) {
$body = trim($body);
// Skip if it isn't a pure repeated messages
// Does it start with a share?
if (strpos($body, "[share") > 0) {
return false;
}
if (strpos($body, "[share") > 0)
return(false);
// Does it end with a share?
if (strlen($body) > (strrpos($body, "[/share]") + 8)) {
return false;
}
if (strlen($body) > (strrpos($body, "[/share]") + 8))
return(false);
$attributes = preg_replace("/\[share(.*?)\]\s?(.*?)\s?\[\/share\]\s?/ism","$1",$body);
// Skip if there is no shared message in there
if ($body == $attributes) {
return false;
}
if ($body == $attributes)
return(false);
$link = "";
preg_match("/link='(.*?)'/ism", $attributes, $matches);
if ($matches[1] != "") {
if ($matches[1] != "")
$link = $matches[1];
}
preg_match('/link="(.*?)"/ism', $attributes, $matches);
if ($matches[1] != "") {
if ($matches[1] != "")
$link = $matches[1];
}
$ckey = PConfig::get($uid, 'statusnet', 'consumerkey');
$csecret = PConfig::get($uid, 'statusnet', 'consumersecret');
@ -1820,9 +1732,8 @@ function statusnet_is_retweet(App $a, $uid, $body)
$id = preg_replace("=https?://".$hostname."/notice/(.*)=ism", "$1", $link);
if ($id == $link) {
return false;
}
if ($id == $link)
return(false);
logger('statusnet_is_retweet: Retweeting id '.$id.' for user '.$uid, LOGGER_DEBUG);
@ -1831,6 +1742,5 @@ function statusnet_is_retweet(App $a, $uid, $body)
$result = $connection->post('statuses/retweet/'.$id);
logger('statusnet_is_retweet: result '.print_r($result, true), LOGGER_DEBUG);
return isset($result->id);
return(isset($result->id));
}

View file

@ -1,5 +1,4 @@
<?php
/**
* Name: Twitter Connector
* Description: Bidirectional (posting, relaying and reading) connector for Twitter.
@ -33,6 +32,7 @@
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* Twitter Plugin for Friendica
*
* Author: Tobias Diekershoff
@ -60,20 +60,18 @@
* Requirements: PHP5, curl [Slinky library]
*/
use Friendica\App;
use Friendica\Core\Config;
use Friendica\Core\PConfig;
use Friendica\Core\Worker;
use Friendica\Model\GContact;
use Friendica\Model\Photo;
use Friendica\Object\Image;
use Friendica\Model\GlobalContact;
use Friendica\Object\Photo;
require_once 'include/enotify.php';
define('TWITTER_DEFAULT_POLL_INTERVAL', 5); // given in minutes
function twitter_install()
{
function twitter_install() {
// we need some hooks, for the configuration and for sending tweets
register_hook('connector_settings', 'addon/twitter/twitter.php', 'twitter_settings');
register_hook('connector_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post');
@ -89,8 +87,8 @@ function twitter_install()
logger("installed twitter");
}
function twitter_uninstall()
{
function twitter_uninstall() {
unregister_hook('connector_settings', 'addon/twitter/twitter.php', 'twitter_settings');
unregister_hook('connector_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post');
unregister_hook('post_local', 'addon/twitter/twitter.php', 'twitter_post_local');
@ -107,10 +105,10 @@ function twitter_uninstall()
unregister_hook('post_local_end', 'addon/twitter/twitter.php', 'twitter_post_hook');
unregister_hook('plugin_settings', 'addon/twitter/twitter.php', 'twitter_settings');
unregister_hook('plugin_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post');
}
function twitter_check_item_notification(App $a, &$notification_data)
{
function twitter_check_item_notification($a, &$notification_data) {
$own_id = PConfig::get($notification_data["uid"], 'twitter', 'own_id');
$own_user = q("SELECT `url` FROM `contact` WHERE `uid` = %d AND `alias` = '%s' LIMIT 1",
@ -118,18 +116,16 @@ function twitter_check_item_notification(App $a, &$notification_data)
dbesc("twitter::".$own_id)
);
if ($own_user) {
if ($own_user)
$notification_data["profiles"][] = $own_user[0]["url"];
}
}
function twitter_follow(App $a, &$contact)
{
function twitter_follow($a, &$contact) {
logger("twitter_follow: Check if contact is twitter contact. ".$contact["url"], LOGGER_DEBUG);
if (!strstr($contact["url"], "://twitter.com") && !strstr($contact["url"], "@twitter.com")) {
if (!strstr($contact["url"], "://twitter.com") && !strstr($contact["url"], "@twitter.com"))
return;
}
// contact seems to be a twitter contact, so continue
$nickname = preg_replace("=https?://twitter.com/(.*)=ism", "$1", $contact["url"]);
@ -142,7 +138,7 @@ function twitter_follow(App $a, &$contact)
$otoken = PConfig::get($uid, 'twitter', 'oauthtoken');
$osecret = PConfig::get($uid, 'twitter', 'oauthsecret');
require_once "addon/twitter/codebird.php";
require_once("addon/twitter/codebird.php");
$cb = \Codebird\Codebird::getInstance();
$cb->setConsumerKey($ckey, $csecret);
@ -159,16 +155,13 @@ function twitter_follow(App $a, &$contact)
FROM `contact` WHERE `uid` = %d AND `nick` = '%s'",
intval($uid),
dbesc($nickname));
if (count($r)) {
if (count($r))
$contact["contact"] = $r[0];
}
}
function twitter_jot_nets(App $a, &$b)
{
if (!local_user()) {
function twitter_jot_nets(&$a,&$b) {
if(! local_user())
return;
}
$tw_post = PConfig::get(local_user(),'twitter','post');
if(intval($tw_post) == 1) {
@ -179,15 +172,12 @@ function twitter_jot_nets(App $a, &$b)
}
}
function twitter_settings_post(App $a, $post)
{
if (!local_user()) {
function twitter_settings_post($a,$post) {
if(! local_user())
return;
}
// don't check twitter settings if twitter submit button is not clicked
if (!x($_POST, 'twitter-submit')) {
if (!x($_POST,'twitter-submit'))
return;
}
if (isset($_POST['twitter-disconnect'])) {
/***
@ -209,7 +199,7 @@ function twitter_settings_post(App $a, $post)
if (isset($_POST['twitter-pin'])) {
// if the user supplied us with a PIN from Twitter, let the magic of OAuth happen
logger('got a Twitter PIN');
require_once 'library/twitteroauth.php';
require_once('library/twitteroauth.php');
$ckey = Config::get('twitter', 'consumerkey');
$csecret = Config::get('twitter', 'consumersecret');
// the token and secret for which the PIN was generated were hidden in the settings
@ -232,20 +222,15 @@ function twitter_settings_post(App $a, $post)
PConfig::set(local_user(), 'twitter', 'import', intval($_POST['twitter-import']));
PConfig::set(local_user(), 'twitter', 'create_user', intval($_POST['twitter-create_user']));
if (!intval($_POST['twitter-mirror'])) {
if (!intval($_POST['twitter-mirror']))
PConfig::delete(local_user(),'twitter','lastid');
}
info(t('Twitter settings updated.') . EOL);
}}
}
}
}
function twitter_settings(App $a, &$s)
{
if (!local_user()) {
function twitter_settings(&$a,&$s) {
if(! local_user())
return;
}
$a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . $a->get_baseurl() . '/addon/twitter/twitter.css' . '" media="all" />' . "\r\n";
/***
* 1) Check that we have global consumer key & secret
@ -294,7 +279,7 @@ function twitter_settings(App $a, &$s)
* which the user can request a PIN to connect the account to a
* account at Twitter.
*/
require_once 'library/twitteroauth.php';
require_once('library/twitteroauth.php');
$connection = new TwitterOAuth($ckey, $csecret);
$request_token = $connection->getRequestToken();
$token = $request_token['oauth_token'];
@ -315,7 +300,7 @@ function twitter_settings(App $a, &$s)
* we have an OAuth key / secret pair for the user
* so let's give a chance to disable the postings to Twitter
*/
require_once 'library/twitteroauth.php';
require_once('library/twitteroauth.php');
$connection = new TwitterOAuth($ckey,$csecret,$otoken,$osecret);
$details = $connection->get('account/verify_credentials');
$s .= '<div id="twitter-info" ><img id="twitter-avatar" src="'.$details->profile_image_url.'" /><p id="twitter-info-block">'. t('Currently connected to: ') .'<a href="https://twitter.com/'.$details->screen_name.'" target="_twitter">'.$details->screen_name.'</a><br /><em>'.$details->description.'</em></p></div>';
@ -354,8 +339,9 @@ function twitter_settings(App $a, &$s)
$s .= '</div><div class="clear"></div>';
}
function twitter_post_local(App $a, &$b)
{
function twitter_post_local(&$a, &$b) {
if ($b['edit']) {
return;
}
@ -383,14 +369,14 @@ function twitter_post_local(App $a, &$b)
$b['postopts'] .= 'twitter';
}
function twitter_action(App $a, $uid, $pid, $action)
{
function twitter_action($a, $uid, $pid, $action) {
$ckey = Config::get('twitter', 'consumerkey');
$csecret = Config::get('twitter', 'consumersecret');
$otoken = PConfig::get($uid, 'twitter', 'oauthtoken');
$osecret = PConfig::get($uid, 'twitter', 'oauthsecret');
require_once "addon/twitter/codebird.php";
require_once("addon/twitter/codebird.php");
$cb = \Codebird\Codebird::getInstance();
$cb->setConsumerKey($ckey, $csecret);
@ -414,13 +400,16 @@ function twitter_action(App $a, $uid, $pid, $action)
logger("twitter_action '".$action."' send, result: " . print_r($result, true), LOGGER_DEBUG);
}
function twitter_post_hook(App $a, &$b)
{
// Post to Twitter
require_once "include/network.php";
function twitter_post_hook(&$a,&$b) {
if (!PConfig::get($b["uid"], 'twitter', 'import')
&& ($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited']))) {
/**
* Post to Twitter
*/
require_once("include/network.php");
if (!PConfig::get($b["uid"],'twitter','import')) {
if($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited']))
return;
}
@ -451,9 +440,8 @@ function twitter_post_hook(App $a, &$b)
$nicknameplain = "@".$nicknameplain;
logger("twitter_post_hook: comparing ".$nickname." and ".$nicknameplain." with ".$b["body"], LOGGER_DEBUG);
if ((strpos($b["body"], $nickname) === false) && (strpos($b["body"], $nicknameplain) === false)) {
if ((strpos($b["body"], $nickname) === false) && (strpos($b["body"], $nicknameplain) === false))
$b["body"] = $nickname." ".$b["body"];
}
logger("twitter_post_hook: parent found ".print_r($orig_post, true), LOGGER_DATA);
} else {
@ -471,9 +459,8 @@ function twitter_post_hook(App $a, &$b)
}
}
if (($b['verb'] == ACTIVITY_POST) && $b['deleted']) {
if (($b['verb'] == ACTIVITY_POST) && $b['deleted'])
twitter_action($a, $b["uid"], substr($orig_post["uri"], 9), "delete");
}
if($b['verb'] == ACTIVITY_LIKE) {
logger("twitter_post_hook: parameter 2 ".substr($b["thr-parent"], 9), LOGGER_DEBUG);
@ -484,21 +471,19 @@ function twitter_post_hook(App $a, &$b)
return;
}
if ($b['deleted'] || ($b['created'] !== $b['edited'])) {
if($b['deleted'] || ($b['created'] !== $b['edited']))
return;
}
// if post comes from twitter don't send it back
if ($b['extid'] == NETWORK_TWITTER) {
if($b['extid'] == NETWORK_TWITTER)
return;
}
if ($b['app'] == "Twitter") {
if($b['app'] == "Twitter")
return;
}
logger('twitter post invoked');
PConfig::load($b['uid'], 'twitter');
$ckey = Config::get('twitter', 'consumerkey');
@ -510,32 +495,28 @@ function twitter_post_hook(App $a, &$b)
logger('twitter: we have customer key and oauth stuff, going to send.', LOGGER_DEBUG);
// If it's a repeated message from twitter then do a native retweet and exit
if (twitter_is_retweet($a, $b['uid'], $b['body'])) {
if (twitter_is_retweet($a, $b['uid'], $b['body']))
return;
}
require_once 'library/twitteroauth.php';
require_once 'include/bbcode.php';
require_once('library/twitteroauth.php');
require_once('include/bbcode.php');
$tweet = new TwitterOAuth($ckey,$csecret,$otoken,$osecret);
$max_char = 280;
require_once "include/plaintext.php";
require_once("include/plaintext.php");
$msgarr = plaintext($a, $b, $max_char, true, 8);
$msg = $msgarr["text"];
if (($msg == "") && isset($msgarr["title"])) {
if (($msg == "") && isset($msgarr["title"]))
$msg = shortenmsg($msgarr["title"], $max_char - 50);
}
$image = "";
if (isset($msgarr["url"]) && ($msgarr["type"] != "photo")) {
if (isset($msgarr["url"]) && ($msgarr["type"] != "photo"))
$msg .= "\n".$msgarr["url"];
}
if (isset($msgarr["image"]) && ($msgarr["type"] != "video")) {
if (isset($msgarr["image"]) && ($msgarr["type"] != "video"))
$image = $msgarr["image"];
}
// and now tweet it :-)
if(strlen($msg) && ($image != "")) {
@ -548,7 +529,7 @@ function twitter_post_hook(App $a, &$b)
// so we are using a new library for twitter
// To-Do:
// Switching completely to this library with all functions
require_once "addon/twitter/codebird.php";
require_once("addon/twitter/codebird.php");
$cb = \Codebird\Codebird::getInstance();
$cb->setConsumerKey($ckey, $csecret);
@ -556,18 +537,16 @@ function twitter_post_hook(App $a, &$b)
$post = array('status' => $msg, 'media[]' => $tempfile);
if ($iscomment) {
if ($iscomment)
$post["in_reply_to_status_id"] = substr($orig_post["uri"], 9);
}
$result = $cb->statuses_updateWithMedia($post);
unlink($tempfile);
logger('twitter_post_with_media send, result: ' . print_r($result, true), LOGGER_DEBUG);
if ($result->source) {
if ($result->source)
Config::set("twitter", "application_name", strip_tags($result->source));
}
if ($result->errors || $result->error) {
logger('Send to Twitter failed: "' . print_r($result->errors, true) . '"');
@ -588,42 +567,37 @@ function twitter_post_hook(App $a, &$b)
if(strlen($msg) && ($image == "")) {
// -----------------
$max_char = 280;
require_once "include/plaintext.php";
require_once("include/plaintext.php");
$msgarr = plaintext($a, $b, $max_char, true, 8);
$msg = $msgarr["text"];
if (($msg == "") && isset($msgarr["title"])) {
if (($msg == "") && isset($msgarr["title"]))
$msg = shortenmsg($msgarr["title"], $max_char - 50);
}
if (isset($msgarr["url"])) {
if (isset($msgarr["url"]))
$msg .= "\n".$msgarr["url"];
}
// -----------------
$url = 'statuses/update';
$post = array('status' => $msg, 'weighted_character_count' => 'true');
if ($iscomment) {
if ($iscomment)
$post["in_reply_to_status_id"] = substr($orig_post["uri"], 9);
}
$result = $tweet->post($url, $post);
logger('twitter_post send, result: ' . print_r($result, true), LOGGER_DEBUG);
if ($result->source) {
if ($result->source)
Config::set("twitter", "application_name", strip_tags($result->source));
}
if ($result->errors) {
logger('Send to Twitter failed: "' . print_r($result->errors, true) . '"');
$r = q("SELECT `id` FROM `contact` WHERE `uid` = %d AND `self`", intval($b['uid']));
if (count($r)) {
if (count($r))
$a->contact = $r[0]["id"];
}
$s = serialize(array('url' => $url, 'item' => $b['id'], 'post' => $post));
require_once 'include/queue_fn.php';
require_once('include/queue_fn.php');
add_to_queue($a->contact,NETWORK_TWITTER,$s);
notice(t('Twitter post failed. Queued for retry.').EOL);
} elseif ($iscomment) {
@ -632,22 +606,26 @@ function twitter_post_hook(App $a, &$b)
dbesc("twitter::".$result->id_str),
intval($b['id'])
);
//q("UPDATE `item` SET `extid` = '%s', `body` = '%s' WHERE `id` = %d",
// dbesc("twitter::".$result->id_str),
// dbesc($result->text),
// intval($b['id'])
//);
}
}
}
}
function twitter_plugin_admin_post(App $a)
{
$consumerkey = x($_POST, 'consumerkey') ? notags(trim($_POST['consumerkey'])) : '';
$consumersecret = x($_POST, 'consumersecret') ? notags(trim($_POST['consumersecret'])) : '';
function twitter_plugin_admin_post(&$a){
$consumerkey = ((x($_POST,'consumerkey')) ? notags(trim($_POST['consumerkey'])) : '');
$consumersecret = ((x($_POST,'consumersecret')) ? notags(trim($_POST['consumersecret'])): '');
$applicationname = ((x($_POST, 'applicationname')) ? notags(trim($_POST['applicationname'])):'');
Config::set('twitter','consumerkey',$consumerkey);
Config::set('twitter','consumersecret',$consumersecret);
//Config::set('twitter','application_name',$applicationname);
info( t('Settings updated.'). EOL );
}
function twitter_plugin_admin(App $a, &$o)
{
function twitter_plugin_admin(&$a, &$o){
$t = get_markup_template( "admin.tpl", "addon/twitter/" );
$o = replace_macros($t, array(
@ -655,17 +633,16 @@ function twitter_plugin_admin(App $a, &$o)
// name, label, value, help, [extra values]
'$consumerkey' => array('consumerkey', t('Consumer key'), Config::get('twitter', 'consumerkey' ), ''),
'$consumersecret' => array('consumersecret', t('Consumer secret'), Config::get('twitter', 'consumersecret' ), ''),
//'$applicationname' => array('applicationname', t('Name of the Twitter Application'), Config::get('twitter','application_name'),t('Set this to the exact name you gave the app on twitter.com/apps to avoid mirroring postings from ~friendica back to ~friendica'))
));
}
function twitter_cron(App $a, $b)
{
function twitter_cron($a,$b) {
$last = Config::get('twitter','last_poll');
$poll_interval = intval(Config::get('twitter','poll_interval'));
if (!$poll_interval) {
if(! $poll_interval)
$poll_interval = TWITTER_DEFAULT_POLL_INTERVAL;
}
if($last) {
$next = $last + ($poll_interval * 60);
@ -717,6 +694,7 @@ function twitter_cron(App $a, $b)
PConfig::set($rr['uid'],'pumpio','contact_check',time());
}
*/
}
}
@ -725,13 +703,12 @@ function twitter_cron(App $a, $b)
Config::set('twitter','last_poll', time());
}
function twitter_expire(App $a, $b)
{
function twitter_expire($a,$b) {
$days = Config::get('twitter', 'expire');
if ($days == 0) {
if ($days == 0)
return;
}
if (method_exists('dba', 'delete')) {
$r = dba::select('item', array('id'), array('deleted' => true, 'network' => NETWORK_TWITTER));
@ -743,7 +720,7 @@ function twitter_expire(App $a, $b)
$r = q("DELETE FROM `item` WHERE `deleted` AND `network` = '%s'", dbesc(NETWORK_TWITTER));
}
require_once "include/items.php";
require_once("include/items.php");
logger('twitter_expire: expire_start');
@ -758,15 +735,13 @@ function twitter_expire(App $a, $b)
logger('twitter_expire: expire_end');
}
function twitter_prepare_body(App $a, &$b)
{
if ($b["item"]["network"] != NETWORK_TWITTER) {
function twitter_prepare_body(&$a,&$b) {
if ($b["item"]["network"] != NETWORK_TWITTER)
return;
}
if ($b["preview"]) {
$max_char = 280;
require_once "include/plaintext.php";
require_once("include/plaintext.php");
$item = $b["item"];
$item["plink"] = $a->get_baseurl()."/display/".$a->user["nickname"]."/".$item["parent"];
@ -781,21 +756,19 @@ function twitter_prepare_body(App $a, &$b)
$nickname = "@[url=".$orig_post["author-link"]."]".$nicknameplain."[/url]";
$nicknameplain = "@".$nicknameplain;
if ((strpos($item["body"], $nickname) === false) && (strpos($item["body"], $nicknameplain) === false)) {
if ((strpos($item["body"], $nickname) === false) && (strpos($item["body"], $nicknameplain) === false))
$item["body"] = $nickname." ".$item["body"];
}
}
$msgarr = plaintext($a, $item, $max_char, true, 8);
$msg = $msgarr["text"];
if (isset($msgarr["url"]) && ($msgarr["type"] != "photo")) {
if (isset($msgarr["url"]) && ($msgarr["type"] != "photo"))
$msg .= " ".$msgarr["url"];
}
if (isset($msgarr["image"])) {
if (isset($msgarr["image"]))
$msg .= " ".$msgarr["image"];
}
$b['html'] = nl2br(htmlspecialchars($msg));
}
@ -804,14 +777,13 @@ function twitter_prepare_body(App $a, &$b)
/**
* @brief Build the item array for the mirrored post
*
* @param App $a Application class
* @param object $a Application class
* @param integer $uid User id
* @param object $post Twitter object with the post
*
* @return array item data to be posted
*/
function twitter_do_mirrorpost(App $a, $uid, $post)
{
function twitter_do_mirrorpost($a, $uid, $post) {
$datarray["type"] = "wall";
$datarray["api_source"] = true;
$datarray["profile_uid"] = $uid;
@ -824,7 +796,8 @@ function twitter_do_mirrorpost(App $a, $uid, $post)
// We don't support nested shares, so we mustn't show quotes as shares on retweets
$item = twitter_createpost($a, $uid, $post->retweeted_status, array('id' => 0), false, false, true);
$datarray['body'] = "\n" . share_header($item['author-name'], $item['author-link'], $item['author-avatar'], "", $item['created'], $item['plink']);
$datarray['body'] = "\n".share_header($item['author-name'], $item['author-link'], $item['author-avatar'], "",
$item['created'], $item['plink']);
$datarray['body'] .= $item['body'].'[/share]';
} else {
@ -847,8 +820,7 @@ function twitter_do_mirrorpost(App $a, $uid, $post)
return $datarray;
}
function twitter_fetchtimeline(App $a, $uid)
{
function twitter_fetchtimeline($a, $uid) {
$ckey = Config::get('twitter', 'consumerkey');
$csecret = Config::get('twitter', 'consumersecret');
$otoken = PConfig::get($uid, 'twitter', 'oauthtoken');
@ -857,32 +829,29 @@ function twitter_fetchtimeline(App $a, $uid)
$application_name = Config::get('twitter', 'application_name');
if ($application_name == "") {
if ($application_name == "")
$application_name = $a->get_hostname();
}
$has_picture = false;
require_once 'mod/item.php';
require_once 'include/items.php';
require_once 'mod/share.php';
require_once('mod/item.php');
require_once('include/items.php');
require_once('mod/share.php');
require_once 'library/twitteroauth.php';
require_once('library/twitteroauth.php');
$connection = new TwitterOAuth($ckey,$csecret,$otoken,$osecret);
$parameters = array("exclude_replies" => true, "trim_user" => false, "contributor_details" => true, "include_rts" => true, "tweet_mode" => "extended");
$first_time = ($lastid == "");
if ($lastid != "") {
if ($lastid <> "")
$parameters["since_id"] = $lastid;
}
$items = $connection->get('statuses/user_timeline', $parameters);
if (!is_array($items)) {
if (!is_array($items))
return;
}
$posts = array_reverse($items);
@ -893,11 +862,11 @@ function twitter_fetchtimeline(App $a, $uid)
PConfig::set($uid, 'twitter', 'lastid', $lastid);
}
if ($first_time) {
if ($first_time)
continue;
}
if (!stristr($post->source, $application_name)) {
$_SESSION["authenticated"] = true;
$_SESSION["uid"] = $uid;
@ -912,21 +881,19 @@ function twitter_fetchtimeline(App $a, $uid)
PConfig::set($uid, 'twitter', 'lastid', $lastid);
}
function twitter_queue_hook(App $a, &$b)
{
function twitter_queue_hook(&$a,&$b) {
$qi = q("SELECT * FROM `queue` WHERE `network` = '%s'",
dbesc(NETWORK_TWITTER)
);
if (!count($qi)) {
if(! count($qi))
return;
}
require_once 'include/queue_fn.php';
require_once('include/queue_fn.php');
foreach($qi as $x) {
if ($x['network'] !== NETWORK_TWITTER) {
if($x['network'] !== NETWORK_TWITTER)
continue;
}
logger('twitter_queue: run');
@ -934,9 +901,8 @@ function twitter_queue_hook(App $a, &$b)
WHERE `contact`.`self` = 1 AND `contact`.`id` = %d LIMIT 1",
intval($x['cid'])
);
if (!count($r)) {
if(! count($r))
continue;
}
$user = $r[0];
@ -948,31 +914,30 @@ function twitter_queue_hook(App $a, &$b)
$success = false;
if ($ckey && $csecret && $otoken && $osecret) {
logger('twitter_queue: able to post');
$z = unserialize($x['content']);
require_once "addon/twitter/codebird.php";
require_once("addon/twitter/codebird.php");
$cb = \Codebird\Codebird::getInstance();
$cb->setConsumerKey($ckey, $csecret);
$cb->setToken($otoken, $osecret);
if ($z['url'] == "statuses/update") {
if ($z['url'] == "statuses/update")
$result = $cb->statuses_update($z['post']);
}
logger('twitter_queue: post result: ' . print_r($result, true), LOGGER_DEBUG);
if ($result->errors) {
if ($result->errors)
logger('twitter_queue: Send to Twitter failed: "' . print_r($result->errors, true) . '"');
} else {
else {
$success = true;
remove_queue_item($x['id']);
}
} else {
} else
logger("twitter_queue: Error getting tokens for user ".$user['uid']);
}
if (!$success) {
logger('twitter_queue: delayed');
@ -981,27 +946,24 @@ function twitter_queue_hook(App $a, &$b)
}
}
function twitter_fix_avatar($avatar)
{
function twitter_fix_avatar($avatar) {
$new_avatar = str_replace("_normal.", ".", $avatar);
$info = Image::getInfoFromURL($new_avatar);
if (!$info) {
$info = Photo::getInfoFromURL($new_avatar);
if (!$info)
$new_avatar = $avatar;
}
return $new_avatar;
}
function twitter_fetch_contact($uid, $contact, $create_user)
{
if ($contact->id_str == "") {
return -1;
}
function twitter_fetch_contact($uid, $contact, $create_user) {
if ($contact->id_str == "")
return(-1);
$avatar = twitter_fix_avatar($contact->profile_image_url_https);
GContact::update(array("url" => "https://twitter.com/" . $contact->screen_name,
GlobalContact::update(array("url" => "https://twitter.com/".$contact->screen_name,
"network" => NETWORK_TWITTER, "photo" => $avatar, "hide" => true,
"name" => $contact->name, "nick" => $contact->screen_name,
"location" => $contact->location, "about" => $contact->description,
@ -1010,13 +972,12 @@ function twitter_fetch_contact($uid, $contact, $create_user)
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `alias` = '%s' LIMIT 1",
intval($uid), dbesc("twitter::".$contact->id_str));
if (!count($r) && !$create_user) {
return 0;
}
if(!count($r) && !$create_user)
return(0);
if (count($r) && ($r[0]["readonly"] || $r[0]["blocked"])) {
logger("twitter_fetch_contact: Contact '".$r[0]["nick"]."' is blocked or readonly.", LOGGER_DEBUG);
return -1;
return(-1);
}
if(!count($r)) {
@ -1049,9 +1010,8 @@ function twitter_fetch_contact($uid, $contact, $create_user)
intval($uid)
);
if (!count($r)) {
return false;
}
if(! count($r))
return(false);
$contact_id = $r[0]['id'];
@ -1060,7 +1020,7 @@ function twitter_fetch_contact($uid, $contact, $create_user)
);
if($g && intval($g[0]['def_gid'])) {
require_once 'include/group.php';
require_once('include/group.php');
group_add_member($uid,'',$contact_id,$g[0]['def_gid']);
}
@ -1085,11 +1045,14 @@ function twitter_fetch_contact($uid, $contact, $create_user)
}
} 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 -2 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
if((! $r[0]['photo']) || (! $r[0]['thumb']) || (! $r[0]['micro']) || ($update_photo)) {
logger("twitter_fetch_contact: Updating contact ".$contact->screen_name, LOGGER_DEBUG);
$photos = Photo::importProfilePhoto($avatar, $uid, $r[0]['id'], true);
@ -1128,17 +1091,16 @@ function twitter_fetch_contact($uid, $contact, $create_user)
}
}
return $r[0]["id"];
return($r[0]["id"]);
}
function twitter_fetchuser(App $a, $uid, $screen_name = "", $user_id = "")
{
function twitter_fetchuser($a, $uid, $screen_name = "", $user_id = "") {
$ckey = Config::get('twitter', 'consumerkey');
$csecret = Config::get('twitter', 'consumersecret');
$otoken = PConfig::get($uid, 'twitter', 'oauthtoken');
$osecret = PConfig::get($uid, 'twitter', 'oauthsecret');
require_once "addon/twitter/codebird.php";
require_once("addon/twitter/codebird.php");
$cb = \Codebird\Codebird::getInstance();
$cb->setConsumerKey($ckey, $csecret);
@ -1149,36 +1111,31 @@ function twitter_fetchuser(App $a, $uid, $screen_name = "", $user_id = "")
if(count($r)) {
$self = $r[0];
} else {
} else
return;
}
$parameters = array();
if ($screen_name != "") {
if ($screen_name != "")
$parameters["screen_name"] = $screen_name;
}
if ($user_id != "") {
if ($user_id != "")
$parameters["user_id"] = $user_id;
}
// Fetching user data
$user = $cb->users_show($parameters);
if (!is_object($user)) {
if (!is_object($user))
return;
}
$contact_id = twitter_fetch_contact($uid, $user, true);
return $contact_id;
}
function twitter_expand_entities(App $a, $body, $item, $no_tags = false, $picture)
{
require_once "include/oembed.php";
require_once "include/network.php";
function twitter_expand_entities($a, $body, $item, $no_tags = false, $picture) {
require_once("include/oembed.php");
require_once("include/network.php");
$tags = "";
@ -1191,21 +1148,21 @@ function twitter_expand_entities(App $a, $body, $item, $no_tags = false, $pictur
$footer = "";
foreach ($item->entities->urls AS $url) {
$plain = str_replace($url->url, '', $plain);
if ($url->url && $url->expanded_url && $url->display_url) {
$expanded_url = original_url($url->expanded_url);
$oembed_data = oembed_fetch_url($expanded_url);
// Quickfix: Workaround for URL with "[" and "]" in it
if (strpos($expanded_url, "[") || strpos($expanded_url, "]")) {
if (strpos($expanded_url, "[") || strpos($expanded_url, "]"))
$expanded_url = $url->url;
}
if ($type == "") {
if ($type == "")
$type = $oembed_data->type;
}
if ($oembed_data->type == "video") {
//$body = str_replace($url->url,
@ -1218,11 +1175,15 @@ function twitter_expand_entities(App $a, $body, $item, $no_tags = false, $pictur
$body = str_replace($url->url, $footerlink, $body);
//} elseif (($oembed_data->type == "photo") AND isset($oembed_data->url) AND !$dontincludemedia) {
} elseif (($oembed_data->type == "photo") && isset($oembed_data->url)) {
$body = str_replace($url->url, "[url=" . $expanded_url . "][img]" . $oembed_data->url . "[/img][/url]", $body);
$body = str_replace($url->url,
"[url=".$expanded_url."][img]".$oembed_data->url."[/img][/url]",
$body);
//$dontincludemedia = true;
} elseif ($oembed_data->type != "link") {
$body = str_replace($url->url, "[url=" . $expanded_url . "]" . $expanded_url . "[/url]", $body);
} else {
} elseif ($oembed_data->type != "link")
$body = str_replace($url->url,
"[url=".$expanded_url."]".$expanded_url."[/url]",
$body);
else {
$img_str = fetch_url($expanded_url, true, $redirects, 4);
$tempfile = tempnam(get_temppath(), "cache");
@ -1245,29 +1206,25 @@ function twitter_expand_entities(App $a, $body, $item, $no_tags = false, $pictur
}
}
if ($footerurl != "") {
if ($footerurl != "")
$footer = add_page_info($footerurl, false, $picture);
}
if (($footerlink != "") && (trim($footer) != "")) {
$removedlink = trim(str_replace($footerlink, "", $body));
if (($removedlink == "") || strstr($body, $removedlink)) {
if (($removedlink == "") || strstr($body, $removedlink))
$body = $removedlink;
}
$body .= $footer;
}
if (($footer == "") && ($picture != "")) {
if (($footer == "") && ($picture != ""))
$body .= "\n\n[img]".$picture."[/img]\n";
} elseif (($footer == "") && ($picture == "")) {
elseif (($footer == "") && ($picture == ""))
$body = add_page_info_to_body($body);
}
if ($no_tags) {
if ($no_tags)
return array("body" => $body, "tags" => "", "plain" => $plain);
}
$tags_arr = array();
@ -1288,31 +1245,28 @@ function twitter_expand_entities(App $a, $body, $item, $no_tags = false, $pictur
if(count($tags)) {
foreach($tags as $tag) {
if (strstr(trim($tag), " ")) {
if (strstr(trim($tag), " "))
continue;
}
if(strpos($tag,'#') === 0) {
if (strpos($tag, '[url=')) {
if(strpos($tag,'[url='))
continue;
}
// don't link tags that are already embedded in links
if (preg_match('/\[(.*?)' . preg_quote($tag, '/') . '(.*?)\]/', $body)) {
if(preg_match('/\[(.*?)' . preg_quote($tag,'/') . '(.*?)\]/',$body))
continue;
}
if (preg_match('/\[(.*?)\]\((.*?)' . preg_quote($tag, '/') . '(.*?)\)/', $body)) {
if(preg_match('/\[(.*?)\]\((.*?)' . preg_quote($tag,'/') . '(.*?)\)/',$body))
continue;
}
$basetag = str_replace('_',' ',substr($tag,1));
$url = '#[url='.$a->get_baseurl().'/search?tag='.rawurlencode($basetag).']'.$basetag.'[/url]';
$body = str_replace($tag,$url,$body);
$tags_arr["#".$basetag] = $url;
} elseif (strpos($tag, '@') === 0) {
if (strpos($tag, '[url=')) {
continue;
}
} elseif(strpos($tag,'@') === 0) {
if(strpos($tag,'[url='))
continue;
$basetag = substr($tag,1);
$url = '@[url=https://twitter.com/'.rawurlencode($basetag).']'.$basetag.'[/url]';
@ -1322,7 +1276,9 @@ function twitter_expand_entities(App $a, $body, $item, $no_tags = false, $pictur
}
}
$tags = implode($tags_arr, ",");
}
return array("body" => $body, "tags" => $tags, "plain" => $plain);
}
@ -1335,8 +1291,8 @@ function twitter_expand_entities(App $a, $body, $item, $no_tags = false, $pictur
*
* @return $picture string Returns a a single picture string if it isn't a media post
*/
function twitter_media_entities($post, &$postarray)
{
function twitter_media_entities($post, &$postarray) {
// There are no media entities? So we quit.
if (!is_array($post->extended_entities->media)) {
return "";
@ -1391,8 +1347,8 @@ function twitter_media_entities($post, &$postarray)
return "";
}
function twitter_createpost(App $a, $uid, $post, $self, $create_user, $only_existing_contact, $noquote)
{
function twitter_createpost($a, $uid, $post, $self, $create_user, $only_existing_contact, $noquote) {
$postarray = array();
$postarray['network'] = NETWORK_TWITTER;
$postarray['gravity'] = 0;
@ -1409,12 +1365,13 @@ function twitter_createpost(App $a, $uid, $post, $self, $create_user, $only_exis
if (count($r)) {
logger("Item with extid ".$postarray['uri']." found.", LOGGER_DEBUG);
return array();
return(array());
}
$contactid = 0;
if ($post->in_reply_to_status_id_str != "") {
$parent = "twitter::".$post->in_reply_to_status_id_str;
$r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
@ -1458,7 +1415,7 @@ function twitter_createpost(App $a, $uid, $post, $self, $create_user, $only_exis
$postarray['owner-avatar'] = $r[0]["photo"];
} else {
logger("No self contact for user ".$uid, LOGGER_DEBUG);
return array();
return(array());
}
}
// Don't create accounts of people who just comment something
@ -1480,7 +1437,7 @@ function twitter_createpost(App $a, $uid, $post, $self, $create_user, $only_exis
$contactid = $self['id'];
} elseif ($contactid <= 0) {
logger("Contact ID is zero or less than zero.", LOGGER_DEBUG);
return array();
return(array());
}
$postarray['contact-id'] = $contactid;
@ -1550,43 +1507,41 @@ function twitter_createpost(App $a, $uid, $post, $self, $create_user, $only_exis
$postarray['body'] = $statustext;
$postarray['body'] .= "\n" . share_header($quoted['author-name'], $quoted['author-link'], $quoted['author-avatar'], "", $quoted['created'], $quoted['plink']);
$postarray['body'] .= "\n".share_header($quoted['author-name'], $quoted['author-link'], $quoted['author-avatar'], "",
$quoted['created'], $quoted['plink']);
$postarray['body'] .= $quoted['body'].'[/share]';
}
return $postarray;
return($postarray);
}
function twitter_checknotification(App $a, $uid, $own_id, $top_item, $postarray)
{
/// TODO: this whole function doesn't seem to work. Needs complete check
function twitter_checknotification($a, $uid, $own_id, $top_item, $postarray) {
// this whole function doesn't seem to work. Needs complete check
$user = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` LIMIT 1",
intval($uid)
);
if (!count($user)) {
if(!count($user))
return;
}
// Is it me?
if (link_compare($user[0]["url"], $postarray['author-link'])) {
if (link_compare($user[0]["url"], $postarray['author-link']))
return;
}
$own_user = q("SELECT * FROM `contact` WHERE `uid` = %d AND `alias` = '%s' LIMIT 1",
intval($uid),
dbesc("twitter::".$own_id)
);
if (!count($own_user)) {
if(!count($own_user))
return;
}
// Is it me from twitter?
if (link_compare($own_user[0]["url"], $postarray['author-link'])) {
if (link_compare($own_user[0]["url"], $postarray['author-link']))
return;
}
$myconv = q("SELECT `author-link`, `author-avatar`, `parent` FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `parent` != 0 AND `deleted` = 0",
dbesc($postarray['parent-uri']),
@ -1594,13 +1549,14 @@ function twitter_checknotification(App $a, $uid, $own_id, $top_item, $postarray)
);
if(count($myconv)) {
foreach($myconv as $conv) {
// now if we find a match, it means we're in this conversation
if (!link_compare($conv['author-link'], $user[0]["url"]) && !link_compare($conv['author-link'], $own_user[0]["url"])) {
continue;
}
require_once 'include/enotify.php';
if(!link_compare($conv['author-link'],$user[0]["url"]) && !link_compare($conv['author-link'],$own_user[0]["url"]))
continue;
require_once('include/enotify.php');
$conv_parent = $conv['parent'];
@ -1627,8 +1583,7 @@ function twitter_checknotification(App $a, $uid, $own_id, $top_item, $postarray)
}
}
function twitter_fetchparentposts(App $a, $uid, $post, $connection, $self, $own_id)
{
function twitter_fetchparentposts($a, $uid, $post, $connection, $self, $own_id) {
logger("twitter_fetchparentposts: Fetching for user ".$uid." and post ".$post->id_str, LOGGER_DEBUG);
$posts = array();
@ -1648,9 +1603,8 @@ function twitter_fetchparentposts(App $a, $uid, $post, $connection, $self, $own_
intval($uid)
);
if (count($r)) {
if (count($r))
break;
}
$posts[] = $post;
}
@ -1671,15 +1625,13 @@ function twitter_fetchparentposts(App $a, $uid, $post, $connection, $self, $own_
logger('twitter_fetchparentpost: User '.$self["nick"].' posted parent timeline item '.$item);
if ($item && !function_exists("check_item_notification")) {
if ($item && !function_exists("check_item_notification"))
twitter_checknotification($a, $uid, $own_id, $item, $postarray);
}
}
}
}
function twitter_fetchhometimeline(App $a, $uid)
{
function twitter_fetchhometimeline($a, $uid) {
$ckey = Config::get('twitter', 'consumerkey');
$csecret = Config::get('twitter', 'consumersecret');
$otoken = PConfig::get($uid, 'twitter', 'oauthtoken');
@ -1691,12 +1643,11 @@ function twitter_fetchhometimeline(App $a, $uid)
$application_name = Config::get('twitter', 'application_name');
if ($application_name == "") {
if ($application_name == "")
$application_name = $a->get_hostname();
}
require_once 'library/twitteroauth.php';
require_once 'include/items.php';
require_once('library/twitteroauth.php');
require_once('include/items.php');
$connection = new TwitterOAuth($ckey,$csecret,$otoken,$osecret);
@ -1732,14 +1683,15 @@ function twitter_fetchhometimeline(App $a, $uid)
$parameters = array("exclude_replies" => false, "trim_user" => false, "contributor_details" => true, "include_rts" => true, "tweet_mode" => "extended");
//$parameters["count"] = 200;
// Fetching timeline
$lastid = PConfig::get($uid, 'twitter', 'lasthometimelineid');
$first_time = ($lastid == "");
if ($lastid != "") {
if ($lastid <> "")
$parameters["since_id"] = $lastid;
}
$items = $connection->get('statuses/home_timeline', $parameters);
@ -1759,9 +1711,8 @@ function twitter_fetchhometimeline(App $a, $uid)
PConfig::set($uid, 'twitter', 'lasthometimelineid', $lastid);
}
if ($first_time) {
if ($first_time)
continue;
}
if (stristr($post->source, $application_name) && $post->user->screen_name == $own_id) {
logger("twitter_fetchhometimeline: Skip previously sended post", LOGGER_DEBUG);
@ -1773,24 +1724,22 @@ function twitter_fetchhometimeline(App $a, $uid)
continue;
}
if ($post->in_reply_to_status_id_str != "") {
if ($post->in_reply_to_status_id_str != "")
twitter_fetchparentposts($a, $uid, $post, $connection, $self, $own_id);
}
$postarray = twitter_createpost($a, $uid, $post, $self, $create_user, true, false);
if (trim($postarray['body']) == "") {
if (trim($postarray['body']) == "")
continue;
}
$item = item_store($postarray);
$postarray["id"] = $item;
logger('twitter_fetchhometimeline: User '.$self["nick"].' posted home timeline item '.$item);
if ($item && !function_exists("check_item_notification")) {
if ($item && !function_exists("check_item_notification"))
twitter_checknotification($a, $uid, $own_id, $item, $postarray);
}
}
}
PConfig::set($uid, 'twitter', 'lasthometimelineid', $lastid);
@ -1800,9 +1749,8 @@ function twitter_fetchhometimeline(App $a, $uid)
$first_time = ($lastid == "");
if ($lastid != "") {
if ($lastid <> "")
$parameters["since_id"] = $lastid;
}
$items = $connection->get('statuses/mentions_timeline', $parameters);
@ -1817,34 +1765,28 @@ function twitter_fetchhometimeline(App $a, $uid)
if (count($posts)) {
foreach ($posts as $post) {
if ($post->id_str > $lastid) {
if ($post->id_str > $lastid)
$lastid = $post->id_str;
}
if ($first_time) {
if ($first_time)
continue;
}
if ($post->in_reply_to_status_id_str != "") {
if ($post->in_reply_to_status_id_str != "")
twitter_fetchparentposts($a, $uid, $post, $connection, $self, $own_id);
}
$postarray = twitter_createpost($a, $uid, $post, $self, false, false, false);
if (trim($postarray['body']) == "") {
if (trim($postarray['body']) == "")
continue;
}
$item = item_store($postarray);
$postarray["id"] = $item;
if ($item && function_exists("check_item_notification")) {
if ($item && function_exists("check_item_notification"))
check_item_notification($item, $uid, NOTIFY_TAGSELF);
}
if (!isset($postarray["parent"]) || ($postarray["parent"] == 0)) {
if (!isset($postarray["parent"]) || ($postarray["parent"] == 0))
$postarray["parent"] = $item;
}
logger('twitter_fetchhometimeline: User '.$self["nick"].' posted mention timeline item '.$item);
@ -1861,7 +1803,7 @@ function twitter_fetchhometimeline(App $a, $uid)
$parent_id = $postarray['parent'];
if (($item != 0) && !function_exists("check_item_notification")) {
require_once 'include/enotify.php';
require_once('include/enotify.php');
notification(array(
'type' => NOTIFY_TAGSELF,
'notify_flags' => $u[0]['notify-flags'],
@ -1885,8 +1827,7 @@ function twitter_fetchhometimeline(App $a, $uid)
PConfig::set($uid, 'twitter', 'lastmentionid', $lastid);
}
function twitter_fetch_own_contact(App $a, $uid)
{
function twitter_fetch_own_contact($a, $uid) {
$ckey = Config::get('twitter', 'consumerkey');
$csecret = Config::get('twitter', 'consumersecret');
$otoken = PConfig::get($uid, 'twitter', 'oauthtoken');
@ -1897,7 +1838,7 @@ function twitter_fetch_own_contact(App $a, $uid)
$contact_id = 0;
if ($own_id == "") {
require_once 'library/twitteroauth.php';
require_once('library/twitteroauth.php');
$connection = new TwitterOAuth($ckey,$csecret,$otoken,$osecret);
@ -1907,56 +1848,49 @@ function twitter_fetch_own_contact(App $a, $uid)
PConfig::set($uid, 'twitter', 'own_id', $user->id_str);
$contact_id = twitter_fetch_contact($uid, $user, true);
} else {
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `alias` = '%s' LIMIT 1",
intval($uid),
dbesc("twitter::" . $own_id));
if (count($r)) {
intval($uid), dbesc("twitter::".$own_id));
if(count($r))
$contact_id = $r[0]["id"];
} else {
else
PConfig::delete($uid, 'twitter', 'own_id');
}
}
return $contact_id;
return($contact_id);
}
function twitter_is_retweet(App $a, $uid, $body)
{
function twitter_is_retweet($a, $uid, $body) {
$body = trim($body);
// Skip if it isn't a pure repeated messages
// Does it start with a share?
if (strpos($body, "[share") > 0) {
return false;
}
if (strpos($body, "[share") > 0)
return(false);
// Does it end with a share?
if (strlen($body) > (strrpos($body, "[/share]") + 8)) {
return false;
}
if (strlen($body) > (strrpos($body, "[/share]") + 8))
return(false);
$attributes = preg_replace("/\[share(.*?)\]\s?(.*?)\s?\[\/share\]\s?/ism","$1",$body);
// Skip if there is no shared message in there
if ($body == $attributes) {
return false;
}
if ($body == $attributes)
return(false);
$link = "";
preg_match("/link='(.*?)'/ism", $attributes, $matches);
if ($matches[1] != "") {
if ($matches[1] != "")
$link = $matches[1];
}
preg_match('/link="(.*?)"/ism', $attributes, $matches);
if ($matches[1] != "") {
if ($matches[1] != "")
$link = $matches[1];
}
$id = preg_replace("=https?://twitter.com/(.*)/status/(.*)=ism", "$2", $link);
if ($id == $link) {
return false;
}
if ($id == $link)
return(false);
logger('twitter_is_retweet: Retweeting id '.$id.' for user '.$uid, LOGGER_DEBUG);
@ -1965,12 +1899,13 @@ function twitter_is_retweet(App $a, $uid, $body)
$otoken = PConfig::get($uid, 'twitter', 'oauthtoken');
$osecret = PConfig::get($uid, 'twitter', 'oauthsecret');
require_once 'library/twitteroauth.php';
require_once('library/twitteroauth.php');
$connection = new TwitterOAuth($ckey,$csecret,$otoken,$osecret);
$result = $connection->post('statuses/retweet/'.$id);
logger('twitter_is_retweet: result '.print_r($result, true), LOGGER_DEBUG);
return !isset($result->errors);
return(!isset($result->errors));
}
?>