X-Git-Url: https://git.mxchange.org/?p=friendica-addons.git;a=blobdiff_plain;f=statusnet%2Fstatusnet.php;h=c54ff55f6c923ce65d4b4e3051bf2d770144884c;hp=d74fd3134814147efa3d2fa17f29100304e2e135;hb=3268eecd722126c532f9cef18b8657c10046a89e;hpb=9e3ebd61a206bbb96ccdff445dda1b363b440360 diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index d74fd313..c54ff55f 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -33,18 +33,13 @@ * 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. - * - * Thank you guys for the Twitter compatible API! - */ - define('STATUSNET_DEFAULT_POLL_INTERVAL', 5); // given in minutes -require_once 'library/twitteroauth.php'; +require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'statusnetoauth.php'; require_once 'include/enotify.php'; +use Codebird\Codebird; +use CodebirdSN\CodebirdSN; use Friendica\App; use Friendica\Content\OEmbed; use Friendica\Content\Text\BBCode; @@ -55,96 +50,11 @@ use Friendica\Core\L10n; use Friendica\Core\PConfig; use Friendica\Model\GContact; use Friendica\Model\Group; +use Friendica\Model\Item; use Friendica\Model\Photo; use Friendica\Model\User; - -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) - { - parent::__construct($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret); - $this->host = $apipath; - } - - /** - * Make an HTTP request - * - * @return API results - * - * Copied here from the twitteroauth library and complemented by applying the proxy settings of friendica - */ - function http($url, $method, $postfields = NULL) - { - $this->http_info = []; - $ci = curl_init(); - /* Curl settings */ - $prx = Config::get('system', 'proxy'); - if (strlen($prx)) { - curl_setopt($ci, CURLOPT_HTTPPROXYTUNNEL, 1); - curl_setopt($ci, CURLOPT_PROXY, $prx); - $prxusr = Config::get('system', 'proxyuser'); - 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); - curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE); - curl_setopt($ci, CURLOPT_HTTPHEADER, ['Expect:']); - curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer); - curl_setopt($ci, CURLOPT_HEADERFUNCTION, [$this, 'getHeader']); - curl_setopt($ci, CURLOPT_HEADER, FALSE); - - switch ($method) { - case 'POST': - curl_setopt($ci, CURLOPT_POST, TRUE); - if (!empty($postfields)) { - curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); - } - break; - case 'DELETE': - curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); - if (!empty($postfields)) { - $url = "{$url}?{$postfields}"; - } - } - - curl_setopt($ci, CURLOPT_URL, $url); - $response = curl_exec($ci); - $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); - $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); - $this->url = $url; - curl_close($ci); - return $response; - } -} +use Friendica\Util\DateTimeFormat; +use Friendica\Util\Network; function statusnet_install() { @@ -234,7 +144,7 @@ function statusnet_settings_post(App $a, $post) foreach ($globalsn as $asn) { if ($asn['apiurl'] == $_POST['statusnet-preconf-apiurl']) { $apibase = $asn['apiurl']; - $c = fetch_url($apibase . 'statusnet/version.xml'); + $c = Network::fetchUrl($apibase . 'statusnet/version.xml'); if (strlen($c) > 0) { PConfig::set(local_user(), 'statusnet', 'consumerkey', $asn['consumerkey']); PConfig::set(local_user(), 'statusnet', 'consumersecret', $asn['consumersecret']); @@ -252,7 +162,7 @@ function statusnet_settings_post(App $a, $post) // we'll check the API Version for that, if we don't get one we'll try to fix the path but will // resign quickly after this one try to fix the path ;-) $apibase = $_POST['statusnet-baseapi']; - $c = fetch_url($apibase . 'statusnet/version.xml'); + $c = Network::fetchUrl($apibase . 'statusnet/version.xml'); if (strlen($c) > 0) { // ok the API path is correct, let's save the settings PConfig::set(local_user(), 'statusnet', 'consumerkey', $_POST['statusnet-consumerkey']); @@ -262,7 +172,7 @@ function statusnet_settings_post(App $a, $post) } else { // the API path is not correct, maybe missing trailing / ? $apibase = $apibase . '/'; - $c = fetch_url($apibase . 'statusnet/version.xml'); + $c = Network::fetchUrl($apibase . 'statusnet/version.xml'); if (strlen($c) > 0) { // ok the API path is now correct, let's save the settings PConfig::set(local_user(), 'statusnet', 'consumerkey', $_POST['statusnet-consumerkey']); @@ -634,14 +544,12 @@ function statusnet_post_hook(App $a, &$b) 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/network.php"; $msgarr = BBCode::toPlaintext($b, $max_char, true, 7); $msg = $msgarr["text"]; @@ -651,18 +559,13 @@ function statusnet_post_hook(App $a, &$b) $image = ""; if (isset($msgarr["url"]) && ($msgarr["type"] != "photo")) { - if ((strlen($msgarr["url"]) > 20) && - ((strlen($msg . " \n" . $msgarr["url"]) > $max_char))) { - $msg .= " \n" . short_link($msgarr["url"]); - } else { - $msg .= " \n" . $msgarr["url"]; - } + $msg .= " \n" . $msgarr["url"]; } elseif (isset($msgarr["image"]) && ($msgarr["type"] != "video")) { $image = $msgarr["image"]; } if ($image != "") { - $img_str = fetch_url($image); + $img_str = Network::fetchUrl($image); $tempfile = tempnam(get_temppath(), "cache"); file_put_contents($tempfile, $img_str); $postdata = ["status" => $msg, "media[]" => $tempfile]; @@ -670,7 +573,7 @@ function statusnet_post_hook(App $a, &$b) $postdata = ["status" => $msg]; } - // and now dent it :-) + // and now send it :-) if (strlen($msg)) { if ($iscomment) { $postdata["in_reply_to_status_id"] = substr($orig_post["uri"], $hostlength); @@ -678,7 +581,7 @@ function statusnet_post_hook(App $a, &$b) } // New code that is able to post pictures - require_once "addon/statusnet/codebird.php"; + require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'codebirdsn.php'; $cb = \CodebirdSN\CodebirdSN::getInstance(); $cb->setAPIEndpoint($api); $cb->setConsumerKey($ckey, $csecret); @@ -696,11 +599,7 @@ function statusnet_post_hook(App $a, &$b) logger('Send to GNU Social failed: "' . $result->error . '"'); } elseif ($iscomment) { logger('statusnet_post: Update extid ' . $result->id . " for post id " . $b['id']); - q("UPDATE `item` SET `extid` = '%s', `body` = '%s' WHERE `id` = %d", - dbesc($hostname . "::" . $result->id), - dbesc($result->text), - intval($b['id']) - ); + Item::update(['extid' => $hostname . "::" . $result->id, 'body' => $result->text], ['id' => $b['id']]); } } if ($tempfile != "") { @@ -856,7 +755,7 @@ function statusnet_cron(App $a, $b) $abandon_days = 0; } - $abandon_limit = date("Y-m-d H:i:s", time() - $abandon_days * 86400); + $abandon_limit = date(DateTimeFormat::MYSQL, time() - $abandon_days * 86400); $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'statusnet' AND `k` = 'import' AND `v` ORDER BY RAND()"); if (count($r)) { @@ -1032,7 +931,7 @@ function statusnet_fetch_contact($uid, $contact, $create_user) `location`, `about`, `writable`, `blocked`, `readonly`, `pending` ) VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', %d, 0, 0, 0 ) ", intval($uid), - dbesc(datetime_convert()), + dbesc(DateTimeFormat::utcNow()), dbesc($contact->statusnet_profile_url), dbesc(normalise_link($contact->statusnet_profile_url)), dbesc(statusnet_address($contact)), @@ -1073,13 +972,13 @@ function statusnet_fetch_contact($uid, $contact, $create_user) dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), - dbesc(datetime_convert()), + dbesc(DateTimeFormat::utcNow()), 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 -2 days')) ? true : false); - $update_photo = ($r[0]['avatar-date'] < datetime_convert('', '', 'now -12 hours')); + //$update_photo = (($r[0]['avatar-date'] < DateTimeFormat::convert('now -2 days', '', '', )) ? true : false); + $update_photo = ($r[0]['avatar-date'] < DateTimeFormat::utc('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)) { @@ -1104,9 +1003,9 @@ function statusnet_fetch_contact($uid, $contact, $create_user) dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - dbesc(datetime_convert()), + dbesc(DateTimeFormat::utcNow()), + dbesc(DateTimeFormat::utcNow()), + dbesc(DateTimeFormat::utcNow()), dbesc($contact->statusnet_profile_url), dbesc(normalise_link($contact->statusnet_profile_url)), dbesc(statusnet_address($contact)), @@ -1130,9 +1029,9 @@ function statusnet_fetchuser(App $a, $uid, $screen_name = "", $user_id = "") $otoken = PConfig::get($uid, 'statusnet', 'oauthtoken'); $osecret = PConfig::get($uid, 'statusnet', 'oauthsecret'); - require_once "addon/statusnet/codebird.php"; + require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'codebirdsn.php'; - $cb = \Codebird\Codebird::getInstance(); + $cb = \CodebirdSN\CodebirdSN::getInstance(); $cb->setConsumerKey($ckey, $csecret); $cb->setToken($otoken, $osecret); @@ -1293,8 +1192,8 @@ function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_ex $postarray['body'] = $converted["body"]; $postarray['tag'] = $converted["tags"]; - $postarray['created'] = datetime_convert('UTC', 'UTC', $content->created_at); - $postarray['edited'] = datetime_convert('UTC', 'UTC', $content->created_at); + $postarray['created'] = DateTimeFormat::utc($content->created_at); + $postarray['edited'] = DateTimeFormat::utc($content->created_at); if (is_string($content->place->name)) { $postarray["location"] = $content->place->name; @@ -1371,7 +1270,7 @@ function statusnet_checknotification(App $a, $uid, $own_url, $top_item, $postarr 'to_email' => $user[0]['email'], 'uid' => $user[0]['uid'], 'item' => $postarray, - 'link' => $a->get_baseurl() . '/display/' . urlencode(get_item_guid($top_item)), + 'link' => $a->get_baseurl() . '/display/' . urlencode(Item::getGuidById($top_item)), 'source_name' => $postarray['author-name'], 'source_link' => $postarray['author-link'], 'source_photo' => $postarray['author-avatar'], @@ -1402,7 +1301,6 @@ 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'; $connection = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret); @@ -1495,7 +1393,7 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1) continue; } - $item = item_store($postarray); + $item = Item::insert($postarray); $postarray["id"] = $item; logger('statusnet_fetchhometimeline: User ' . $self["nick"] . ' posted home timeline item ' . $item); @@ -1550,7 +1448,7 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1) continue; } - $item = item_store($postarray); + $item = Item::insert($postarray); $postarray["id"] = $item; logger('statusnet_fetchhometimeline: User ' . $self["nick"] . ' posted mention timeline item ' . $item); @@ -1579,7 +1477,7 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1) 'to_email' => $u[0]['email'], 'uid' => $u[0]['uid'], 'item' => $postarray, - 'link' => $a->get_baseurl() . '/display/' . urlencode(get_item_guid($item)), + 'link' => $a->get_baseurl() . '/display/' . urlencode(Item::getGuidById($item)), 'source_name' => $postarray['author-name'], 'source_link' => $postarray['author-link'], 'source_photo' => $postarray['author-avatar'], @@ -1603,8 +1501,6 @@ 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'; - $connection = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret); $parameters["count"] = 200; @@ -1613,14 +1509,14 @@ function statusnet_complete_conversation(App $a, $uid, $self, $create_user, $nic if (is_array($items)) { $posts = array_reverse($items); - foreach ($posts AS $post) { + foreach ($posts as $post) { $postarray = statusnet_createpost($a, $uid, $post, $self, false, false); if (trim($postarray['body']) == "") { continue; } - $item = item_store($postarray); + $item = Item::insert($postarray); $postarray["id"] = $item; logger('statusnet_complete_conversation: User ' . $self["nick"] . ' posted home timeline item ' . $item); @@ -1635,7 +1531,6 @@ function statusnet_complete_conversation(App $a, $uid, $self, $create_user, $nic function statusnet_convertmsg(App $a, $body, $no_tags = false) { 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); @@ -1653,7 +1548,7 @@ function statusnet_convertmsg(App $a, $body, $no_tags = false) logger("statusnet_convertmsg: expanding url " . $match[1], LOGGER_DEBUG); - $expanded_url = original_url($match[1]); + $expanded_url = Network::finalUrl($match[1]); logger("statusnet_convertmsg: fetching data for " . $expanded_url, LOGGER_DEBUG); @@ -1677,7 +1572,7 @@ function statusnet_convertmsg(App $a, $body, $no_tags = false) } elseif ($oembed_data->type != "link") { $body = str_replace($search, "[url=" . $expanded_url . "]" . $expanded_url . "[/url]", $body); } else { - $img_str = fetch_url($expanded_url, true, $redirects, 4); + $img_str = Network::fetchUrl($expanded_url, true, $redirects, 4); $tempfile = tempnam(get_temppath(), "cache"); file_put_contents($tempfile, $img_str); @@ -1756,8 +1651,6 @@ function statusnet_fetch_own_contact(App $a, $uid) $contact_id = 0; if ($own_url == "") { - require_once 'library/twitteroauth.php'; - $connection = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret); // Fetching user data