summaryrefslogtreecommitdiff
path: root/controllers
diff options
context:
space:
mode:
Diffstat (limited to 'controllers')
-rw-r--r--controllers/controllers.php59
1 files changed, 51 insertions, 8 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' => '',