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 /controllers | |
| parent | b83b4cc885b30c8644233858017b8bac69ef2082 (diff) | |
support editing reposts
Diffstat (limited to 'controllers')
| -rw-r--r-- | controllers/controllers.php | 59 | 
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' => '', | 
