X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=twitter%2Ftwitter.php;h=b01345b74959931fc7257890004afe58f3419fd5;hb=c2dfda5d721215b0796a1214be312cc3a5b09476;hp=7b2e424c20a9e4fe103ef1d237a71d854a76ddbd;hpb=fb9e6e5df666f6a609d6cde89869fddf74a71413;p=friendica-addons.git diff --git a/twitter/twitter.php b/twitter/twitter.php index 7b2e424c..b01345b7 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -94,12 +94,25 @@ function twitter_settings_post() return; } + $api_key = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'api_key'); + $api_secret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'api_secret'); + $access_token = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'access_token'); + $access_secret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'access_secret'); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'post', (bool)$_POST['twitter-enable']); DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'post_by_default', (bool)$_POST['twitter-default']); DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'api_key', $_POST['twitter-api-key']); DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'api_secret', $_POST['twitter-api-secret']); DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'access_token', $_POST['twitter-access-token']); DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'access_secret', $_POST['twitter-access-secret']); + + if ( + empty(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'last_status')) || + ($api_key != $_POST['twitter-api-key']) || ($api_secret != $_POST['twitter-api-secret']) || + ($access_token != $_POST['twitter-access-token']) || ($access_secret != $_POST['twitter-access-secret']) + ) { + twitter_test_connection(DI::userSession()->getLocalUserId()); + } } function twitter_settings(array &$data) @@ -115,15 +128,14 @@ function twitter_settings(array &$data) $api_secret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'api_secret'); $access_token = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'access_token'); $access_secret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'access_secret'); - + $last_status = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'last_status'); - if (empty($last_status)) { - $status = DI::l10n()->t('No status.'); - } elseif (!empty($last_status['code'])) { - $status = print_r($last_status, true); + if (!empty($last_status['code']) && !empty($last_status['reason'])) { + $status_title = sprintf('%d - %s', $last_status['code'], $last_status['reason']); } else { - $status = print_r($last_status, true); + $status_title = DI::l10n()->t('No status.'); } + $status_content = $last_status['content'] ?? ''; $t = Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/twitter/'); $html = Renderer::replaceMacros($t, [ @@ -134,7 +146,8 @@ function twitter_settings(array &$data) '$access_token' => ['twitter-access-token', DI::l10n()->t('Access Token'), $access_token], '$access_secret' => ['twitter-access-secret', DI::l10n()->t('Access Secret'), $access_secret], '$help' => DI::l10n()->t('Each user needs to register their own app to be able to post to Twitter. Please visit https://developer.twitter.com/en/portal/projects-and-apps to register a project. Inside the project you then have to register an app. You will find the needed data for the connector on the page "Keys and token" in the app settings.'), - '$status' => ['twitter-status', DI::l10n()->t('Last Status'), $status, '', '', 'readonly'], + '$status_title' => ['twitter-status-title', DI::l10n()->t('Last Status Summary'), $status_title, '', '', 'readonly'], + '$status' => ['twitter-status', DI::l10n()->t('Last Status Content'), $status_content, '', '', 'readonly'], ]); $data = [ @@ -297,12 +310,12 @@ function twitter_upload_image(int $uid, array $image, int $retrial) $picture = new Image($picturedata, $photo['type']); $height = $picture->getHeight(); - $width = $picture->getWidth(); + $width = $picture->getWidth(); $size = strlen($picturedata); $picture = Photo::resizeToFileSize($picture, TWITTER_IMAGE_SIZE[$retrial]); $new_height = $picture->getHeight(); - $new_width = $picture->getWidth(); + $new_width = $picture->getWidth(); $picturedata = $picture->asString(); $new_size = strlen($picturedata); @@ -349,16 +362,54 @@ function twitter_post(int $uid, string $url, string $type, array $data): stdClas ]); $response = $client->post($url, ['auth' => 'oauth', $type => $data]); + $body = $response->getBody()->getContents(); $status = [ - 'code' => $response->getStatusCode(), - 'reason' => $response->getReasonPhrase(), - 'content' => $response->getBody()->getContents() + 'code' => $response->getStatusCode(), + 'reason' => $response->getReasonPhrase(), + 'content' => $body ]; DI::pConfig()->set($uid, 'twitter', 'last_status', $status); - $content = json_decode($response->getBody()->getContents()) ?? new stdClass; + $content = json_decode($body) ?? new stdClass; Logger::debug('Success', ['content' => $content]); return $content; } + +function twitter_test_connection(int $uid) +{ + $stack = HandlerStack::create(); + + $middleware = new Oauth1([ + 'consumer_key' => DI::pConfig()->get($uid, 'twitter', 'api_key'), + 'consumer_secret' => DI::pConfig()->get($uid, 'twitter', 'api_secret'), + 'token' => DI::pConfig()->get($uid, 'twitter', 'access_token'), + 'token_secret' => DI::pConfig()->get($uid, 'twitter', 'access_secret'), + ]); + + $stack->push($middleware); + + $client = new Client([ + 'handler' => $stack + ]); + + try { + $response = $client->get('https://api.twitter.com/2/users/me', ['auth' => 'oauth']); + $status = [ + 'code' => $response->getStatusCode(), + 'reason' => $response->getReasonPhrase(), + 'content' => $response->getBody()->getContents() + ]; + DI::pConfig()->set(1, 'twitter', 'last_status', $status); + Logger::info('Test successful', ['uid' => $uid]); + } catch (RequestException $exception) { + $status = [ + 'code' => $exception->getCode(), + 'reason' => $exception->getResponse()->getReasonPhrase(), + 'content' => $exception->getMessage() + ]; + DI::pConfig()->set(1, 'twitter', 'last_status', $status); + Logger::info('Test failed', ['uid' => $uid]); + } +}