diff options
author | Aaron Parecki <aaron@parecki.com> | 2017-02-28 18:26:12 -0800 |
---|---|---|
committer | Aaron Parecki <aaron@parecki.com> | 2017-02-28 18:26:12 -0800 |
commit | 1151a6d17d1bf4a2227f0656321c589c5b7ca73d (patch) | |
tree | aedc5506e4902d0687cde0e5f641289b86cebc72 | |
parent | b83b4cc885b30c8644233858017b8bac69ef2082 (diff) |
support editing reposts
-rw-r--r-- | controllers/controllers.php | 59 | ||||
-rw-r--r-- | views/new-repost.php | 19 |
2 files changed, 63 insertions, 15 deletions
diff --git a/controllers/controllers.php b/controllers/controllers.php index a754806..c780490 100644 --- a/controllers/controllers.php +++ b/controllers/controllers.php @@ -217,16 +217,28 @@ $app->get('/repost', function() use($app) { if($user=require_login($app)) { $params = $app->request()->params(); - $url = ''; + $repost_of = ''; if(array_key_exists('url', $params)) - $url = $params['url']; + $repost_of = $params['url']; + + if(array_key_exists('edit', $params)) { + $edit_data = get_micropub_source($user, $params['edit'], 'repost-of'); + $url = $params['edit']; + if(isset($edit_data['repost-of'])) { + $repost_of = $edit_data['repost-of'][0]; + } + } else { + $edit_data = false; + $url = false; + } render('new-repost', array( 'title' => 'New Repost', - 'url' => $url, + 'repost_of' => $repost_of, 'token' => generate_login_token(), - 'authorizing' => false + 'authorizing' => false, + 'url' => $url, )); } }); @@ -437,6 +449,18 @@ function create_repost(&$user, $url) { return $r; } +function edit_repost(&$user, $post_url, $repost_of) { + $micropub_request = [ + 'action' => 'update', + 'url' => $post_url, + 'replace' => [ + 'repost-of' => [$repost_of] + ] + ]; + $r = micropub_post_for_user($user, $micropub_request, null, true); + return $r; +} + $app->post('/favorite', function() use($app) { if($user=require_login($app)) { $params = $app->request()->params(); @@ -474,12 +498,31 @@ $app->post('/repost', function() use($app) { if($user=require_login($app)) { $params = $app->request()->params(); - $r = create_repost($user, $params['url']); + $error = false; + + if(isset($params['edit']) && $params['edit']) { + $r = edit_repost($user, $params['edit'], $params['repost_of']); + if(isset($r['location']) && $r['location']) + $location = $r['location']; + elseif(in_array($r['code'], [200,201,204])) + $location = $params['edit']; + elseif(in_array($r['code'], [401,403])) { + $location = false; + $error = 'Your Micropub endpoint denied the request. Check that Quill is authorized to update posts.'; + } else { + $location = false; + $error = 'Your Micropub endpoint did not return a location header or a recognized response code'; + } + } else { + $r = create_repost($user, $params['repost_of']); + $location = $r['location']; + } $app->response()['Content-type'] = 'application/json'; $app->response()->body(json_encode(array( - 'location' => $r['location'], - 'error' => $r['error'] + 'location' => $location, + 'error' => $r['error'], + 'error_details' => $error, ))); } }); @@ -631,7 +674,7 @@ $app->get('/edit', function() use($app) { } // Until all interfaces are complete, show an error here for unsupported ones - if(!in_array($url, ['/favorite',])) { + if(!in_array($url, ['/favorite','/repost'])) { render('edit/error', [ 'title' => 'Not Yet Supported', 'summary' => '', diff --git a/views/new-repost.php b/views/new-repost.php index e67ab93..4ef84db 100644 --- a/views/new-repost.php +++ b/views/new-repost.php @@ -2,21 +2,22 @@ <?= partial('partials/header') ?> <div style="clear: both;" class="notice-pad"> - <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-success hidden" id="test_success"><strong>Success!</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"> + <label for="repost_of">URL to Repost (<code>repost-of</code>)</label> + <input type="text" id="repost_of" value="<?= $this->repost_of ?>" class="form-control"> </div> <div style="float: right; margin-top: 6px;"> - <button class="btn btn-success" id="btn_post">Post</button> + <button class="btn btn-success" id="btn_post"><?= $this->url ? 'Save' : 'Post' ?></button> </div> + <input type="hidden" id="edit_url" value="<?= $this->url ?>"> </form> <div style="clear: both;"></div> @@ -27,10 +28,11 @@ $(function(){ $("#btn_post").click(function(){ - $("#btn_post").addClass("loading disabled").text("Working..."); + $("#btn_post").addClass("loading disabled"); $.post("/repost", { - url: $("#note_url").val() + repost_of: $("#repost_of").val(), + edit: $("#edit_url").val() }, function(response){ if(response.location != false) { @@ -44,7 +46,10 @@ $(function(){ } else { $("#test_success").addClass('hidden'); $("#test_error").removeClass('hidden'); - $("#btn_post").removeClass("loading disabled").text("Post"); + if(response.error_details) { + $("#test_error").text(response.error_details); + } + $("#btn_post").removeClass("loading disabled"); } }); |