diff options
-rw-r--r-- | controllers/controllers.php | 51 | ||||
-rw-r--r-- | views/new-repost.php | 61 |
2 files changed, 111 insertions, 1 deletions
diff --git a/controllers/controllers.php b/controllers/controllers.php index 030b6fc..b444676 100644 --- a/controllers/controllers.php +++ b/controllers/controllers.php @@ -127,6 +127,24 @@ $app->get('/favorite', function() use($app) { } }); +$app->get('/repost', function() use($app) { + if($user=require_login($app)) { + $params = $app->request()->params(); + + $url = ''; + + if(array_key_exists('url', $params)) + $url = $params['url']; + + $html = render('new-repost', array( + 'title' => 'New Repost', + 'url' => $url, + 'token' => generate_login_token() + )); + $app->response()->body($html); + } +}); + $app->post('/prefs', function() use($app) { if($user=require_login($app)) { $params = $app->request()->params(); @@ -252,7 +270,7 @@ function create_favorite(&$user, $url) { } } - if(preg_match('/https?:\/\/(?:www\.)?twitter\.com\/[^\/]+\/status(?:es)?\/(\d+)/', $url, $match)) { + if($user->twitter_access_token && preg_match('/https?:\/\/(?:www\.)?twitter\.com\/[^\/]+\/status(?:es)?\/(\d+)/', $url, $match)) { $tweet_id = $match[1]; $twitter = new \TwitterOAuth\Api(Config::$twitterClientID, Config::$twitterClientSecret, $user->twitter_access_token, $user->twitter_token_secret); @@ -264,6 +282,24 @@ function create_favorite(&$user, $url) { return $r; } +function create_repost(&$user, $url) { + $micropub_request = array( + 'repost-of' => $url + ); + $r = micropub_post_for_user($user, $micropub_request); + + $tweet_id = false; + + if($user->twitter_access_token && preg_match('/https?:\/\/(?:www\.)?twitter\.com\/[^\/]+\/status(?:es)?\/(\d+)/', $url, $match)) { + $tweet_id = $match[1]; + $twitter = new \TwitterOAuth\Api(Config::$twitterClientID, Config::$twitterClientSecret, + $user->twitter_access_token, $user->twitter_token_secret); + $result = $twitter->post('statuses/retweet/'.$tweet_id); + } + + return $r; +} + $app->get('/favorite.js', function() use($app) { $app->response()->header("Content-type", "text/javascript"); if($user=require_login($app, false)) { @@ -300,6 +336,19 @@ $app->post('/favorite', function() use($app) { } }); +$app->post('/repost', function() use($app) { + if($user=require_login($app)) { + $params = $app->request()->params(); + + $r = create_repost($user, $params['url']); + + $app->response()->body(json_encode(array( + 'location' => $r['location'], + 'error' => $r['error'] + ))); + } +}); + $app->get('/micropub/syndications', function() use($app) { if($user=require_login($app)) { $data = get_syndication_targets($user); diff --git a/views/new-repost.php b/views/new-repost.php new file mode 100644 index 0000000..1f8fcfc --- /dev/null +++ b/views/new-repost.php @@ -0,0 +1,61 @@ + <div class="narrow"> + <?= partial('partials/header') ?> + + <div style="clear: both;"> + <div class="alert alert-success hidden" id="test_success"><strong>Success! We found a Location header in the response!</strong><br>Your post should be on your website now!<br><a href="" id="post_href">View your post</a></div> + <div class="alert alert-danger hidden" id="test_error"><strong>Your endpoint did not return a Location header.</strong><br>See <a href="/creating-a-micropub-endpoint">Creating a Micropub Endpoint</a> for more information.</div> + </div> + + <form role="form" style="margin-top: 20px;" id="note_form"> + + <div class="form-group"> + <label for="note_url">URL to Repost (<code>repost-of</code>)</label> + <input type="text" id="note_url" value="<?= $this->url ?>" class="form-control"> + </div> + + <div style="float: right; margin-top: 6px;"> + <button class="btn btn-success" id="btn_post">Post</button> + </div> + + </form> + + <div style="clear: both;"></div> + + </div> + +<script> +$(function(){ + + // ctrl-s to save + $(window).on('keydown', function(e){ + if(e.keyCode == 83 && e.ctrlKey){ + $("#btn_post").click(); + } + }); + + $("#btn_post").click(function(){ + + $.post("/repost", { + url: $("#note_url").val() + }, function(data){ + var response = JSON.parse(data); + + if(response.location != false) { + + $("#test_success").removeClass('hidden'); + $("#test_error").addClass('hidden'); + $("#post_href").attr("href", response.location); + + window.location = response.location; + } else { + $("#test_success").addClass('hidden'); + $("#test_error").removeClass('hidden'); + } + + }); + return false; + }); + +}); + +</script> |