Merge pull request #539 from MrPetovan/bug/4555-remove-active-users-feature
[friendica-addons.git] / statusnet / statusnet.php
index 7308f223de5ad70267e65f5e5339758c87a61ad0..c54ff55f6c923ce65d4b4e3051bf2d770144884c 100644 (file)
  * 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;
@@ -58,96 +53,9 @@ use Friendica\Model\Group;
 use Friendica\Model\Item;
 use Friendica\Model\Photo;
 use Friendica\Model\User;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
 
-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;
-       }
-}
-
 function statusnet_install()
 {
        //  we need some hooks, for the configuration and for sending tweets
@@ -636,7 +544,6 @@ 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
 
@@ -652,12 +559,7 @@ 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" . Network::shortenUrl($msgarr["url"]);
-                       } else {
-                               $msg .= " \n" . $msgarr["url"];
-                       }
+                       $msg .= " \n" . $msgarr["url"];
                } elseif (isset($msgarr["image"]) && ($msgarr["type"] != "video")) {
                        $image = $msgarr["image"];
                }
@@ -671,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);
@@ -679,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);
@@ -697,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 != "") {
@@ -857,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)) {
@@ -1033,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)),
@@ -1074,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)) {
@@ -1105,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)),
@@ -1131,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);
 
@@ -1294,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;
@@ -1403,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);
@@ -1604,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;
@@ -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