diff options
Diffstat (limited to 'controllers/controllers.php')
-rw-r--r-- | controllers/controllers.php | 155 |
1 files changed, 152 insertions, 3 deletions
diff --git a/controllers/controllers.php b/controllers/controllers.php index df8ddfd..7b7234c 100644 --- a/controllers/controllers.php +++ b/controllers/controllers.php @@ -86,9 +86,17 @@ $app->get('/new/last-photo.json', function() use($app) { if($user->micropub_media_endpoint) { // Request the last file uploaded from the media endpoint - $response = micropub_get($user->micropub_media_endpoint, ['q'=>'last'], $user->micropub_access_token); - if(isset($response['data']['url'])) { - $url = $response['data']['url']; + $response = micropub_get($user->micropub_media_endpoint, ['q'=>'source', 'limit'=>1], $user->micropub_access_token); + if(isset($response['data']['items'])) { + $items = $response['data']['items']; + if(isset($items[0])) { + $item = $items[0]; + // Only show the file if it was uploaded in the last 5 minutes or if no published date available + $show = !isset($item['published']) || (strtotime($item['published']) >= (time()-300)); + if($show && isset($item['url'])) { + $url = $item['url']; + } + } } } @@ -182,8 +190,11 @@ $app->get('/event', function() use($app) { if($user=require_login($app)) { $params = $app->request()->params(); + $channels = $user->channels ? json_decode($user->channels, true) : []; + render('event', array( 'title' => 'Event', + 'channels' => $channels, 'authorizing' => false )); } @@ -223,6 +234,24 @@ $app->get('/review', function() use($app) { } }); + +$app->get('/twitter', function() use($app) { + if($user=require_login($app)) { + $params = $app->request()->params(); + + $tweet_url = ''; + + if(array_key_exists('tweet_url', $params)) + $tweet_url = $params['tweet_url']; + + render('twitter', array( + 'title' => 'Import Tweet', + 'tweet_url' => $tweet_url, + 'authorizing' => false + )); + } +}); + $app->get('/repost', function() use($app) { if($user=require_login($app)) { $params = $app->request()->params(); @@ -362,6 +391,7 @@ $app->get('/settings', function() use($app) { 'title' => 'Settings', 'user' => $user, 'syndication_targets' => json_decode($user->syndication_targets, true), + 'channels' => json_decode($user->channels, true), 'authorizing' => false ]); } @@ -413,6 +443,101 @@ $app->get('/settings/html-content', function() use($app) { } }); +$app->post('/twitter/preview', function() use($app) { + if($user=require_login($app)) { + $params = $app->request()->params(); + + if($user->twitter_access_token) { + $xray_opts['twitter_api_key'] = Config::$twitterClientID; + $xray_opts['twitter_api_secret'] = Config::$twitterClientSecret; + $xray_opts['twitter_access_token'] = $user->twitter_access_token; + $xray_opts['twitter_access_token_secret'] = $user->twitter_token_secret; + } + + $tweet_url = $params['tweet_url']; + + // Pass to X-Ray to download all the twitter data in a useful format + $xray = new p3k\XRay(); + $xray->http = new p3k\HTTP('Quill ('.Config::$base_url.')'); + $data = $xray->parse($tweet_url, $xray_opts); + + $postdata = tweet_to_micropub_request($data['data']); + + $response = [ + 'json' => json_encode($postdata, JSON_PRETTY_PRINT+JSON_UNESCAPED_SLASHES) + ]; + + $app->response()['Content-type'] = 'application/json'; + $app->response()->body(json_encode($response)); + } +}); + +$app->post('/twitter', function() use($app) { + if($user=require_login($app)) { + $params = $app->request()->params(); + + if($user->twitter_access_token) { + $xray_opts['twitter_api_key'] = Config::$twitterClientID; + $xray_opts['twitter_api_secret'] = Config::$twitterClientSecret; + $xray_opts['twitter_access_token'] = $user->twitter_access_token; + $xray_opts['twitter_access_token_secret'] = $user->twitter_token_secret; + } + + $tweet_url = $params['tweet_url']; + + // Pass to X-Ray to download all the twitter data in a useful format + $xray = new p3k\XRay(); + $xray->http = new p3k\HTTP('Quill ('.Config::$base_url.')'); + $data = $xray->parse($tweet_url, $xray_opts); + + $location = null; + + if(isset($data['data']) && $data['data']['type'] == 'entry') { + $tweet = $data['data']; + + $postdata = tweet_to_micropub_request($tweet); + + $r = micropub_post_for_user($user, $postdata, null, true); + + $app->response()['Content-type'] = 'application/json'; + $app->response()->body(json_encode([ + 'location' => (isset($r['location']) && $r['location'] ? Mf2\resolveUrl($user->micropub_endpoint, $r['location']) : null), + 'error' => $r['error'], + 'response' => $r['response'] + ])); + } else { + $app->response()['Content-type'] = 'application/json'; + + $app->response()->body(json_encode([ + 'location' => null, + 'error' => 'Error fetching tweet', + ])); + } + } +}); + +function tweet_to_micropub_request($tweet) { + // Convert to a micropub post + $postdata = [ + 'type' => ['h-entry'], + 'properties' => [ + 'content' => [$tweet['content']['text']], + 'published' => [$tweet['published']], + 'syndication' => [$tweet['url']], + ] + ]; + if(isset($tweet['in-reply-to'])) + $postdata['properties']['in-reply-to'] = $tweet['in-reply-to']; + if(isset($tweet['category'])) + $postdata['properties']['category'] = $tweet['category']; + if(isset($tweet['photo'])) + $postdata['properties']['photo'] = $tweet['photo']; + if(isset($tweet['video'])) + $postdata['properties']['video'] = $tweet['video']; + + return $postdata; +} + function create_favorite(&$user, $url) { $tweet_id = false; @@ -890,6 +1015,30 @@ $app->get('/airport-info', function() use($app){ } }); +$app->get('/map-img', function() use($app) { + + $params = $app->request()->params(); + + $app->response()['Content-type'] = 'image/png'; + + $params = [ + 'marker[]' => 'lat:'.$params['lat'].';lng:'.$params['lng'].';icon:small-blue-cutout', + 'basemap' => 'custom', + 'width' => $params['w'], + 'height' => $params['h'], + 'zoom' => $params['z'], + 'attribution' => 'mapbox', + 'tileurl' => Config::$mapTileURL, + 'token' => Config::$atlasToken, + ]; + + $ch = curl_init('https://atlas.p3k.io/map/img'); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); + curl_exec($ch); + +}); + function create_weight(&$user, $weight_num, $weight_unit) { $micropub_request = array( 'type' => ['h-entry'], |