Browse Source

support editing reposts

pull/82/head
Aaron Parecki 7 years ago
parent
commit
1151a6d17d
No known key found for this signature in database GPG Key ID: 276C2817346D6056
2 changed files with 63 additions and 15 deletions
  1. +51
    -8
      controllers/controllers.php
  2. +12
    -7
      views/new-repost.php

+ 51
- 8
controllers/controllers.php View File

@ -217,16 +217,28 @@ $app->get('/repost', function() use($app) {
if($user=require_login($app)) { if($user=require_login($app)) {
$params = $app->request()->params(); $params = $app->request()->params();
$url = '';
$repost_of = '';
if(array_key_exists('url', $params)) 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( render('new-repost', array(
'title' => 'New Repost', 'title' => 'New Repost',
'url' => $url,
'repost_of' => $repost_of,
'token' => generate_login_token(), 'token' => generate_login_token(),
'authorizing' => false
'authorizing' => false,
'url' => $url,
)); ));
} }
}); });
@ -437,6 +449,18 @@ function create_repost(&$user, $url) {
return $r; 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) { $app->post('/favorite', function() use($app) {
if($user=require_login($app)) { if($user=require_login($app)) {
$params = $app->request()->params(); $params = $app->request()->params();
@ -474,12 +498,31 @@ $app->post('/repost', function() use($app) {
if($user=require_login($app)) { if($user=require_login($app)) {
$params = $app->request()->params(); $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()['Content-type'] = 'application/json';
$app->response()->body(json_encode(array( $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 // 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', [ render('edit/error', [
'title' => 'Not Yet Supported', 'title' => 'Not Yet Supported',
'summary' => '', 'summary' => '',

+ 12
- 7
views/new-repost.php View File

@ -2,21 +2,22 @@
<?= partial('partials/header') ?> <?= partial('partials/header') ?>
<div style="clear: both;" class="notice-pad"> <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 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> </div>
<form role="form" style="margin-top: 20px;" id="note_form"> <form role="form" style="margin-top: 20px;" id="note_form">
<div class="form-group"> <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>
<div style="float: right; margin-top: 6px;"> <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> </div>
<input type="hidden" id="edit_url" value="<?= $this->url ?>">
</form> </form>
<div style="clear: both;"></div> <div style="clear: both;"></div>
@ -27,10 +28,11 @@
$(function(){ $(function(){
$("#btn_post").click(function(){ $("#btn_post").click(function(){
$("#btn_post").addClass("loading disabled").text("Working...");
$("#btn_post").addClass("loading disabled");
$.post("/repost", { $.post("/repost", {
url: $("#note_url").val()
repost_of: $("#repost_of").val(),
edit: $("#edit_url").val()
}, function(response){ }, function(response){
if(response.location != false) { if(response.location != false) {
@ -44,7 +46,10 @@ $(function(){
} else { } else {
$("#test_success").addClass('hidden'); $("#test_success").addClass('hidden');
$("#test_error").removeClass('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");
} }
}); });

Loading…
Cancel
Save