summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--controllers/controllers.php51
-rw-r--r--views/new-repost.php61
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>