]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - src/Wallabag/ApiBundle/Controller/WallabagRestController.php
Integrate graby
[github/wallabag/wallabag.git] / src / Wallabag / ApiBundle / Controller / WallabagRestController.php
index 21e4552dbe255d8357bb9d90ed9091a3d44835df..d5579de4e18c4cb8fc06de4546898a67f29b96f9 100644 (file)
@@ -47,6 +47,7 @@ class WallabagRestController extends Controller
      *          {"name"="username", "dataType"="string", "required"=true, "description"="username"}
      *       }
      * )
+     *
      * @return array
      */
     public function getSaltAction($username)
@@ -77,17 +78,18 @@ class WallabagRestController extends Controller
      *          {"name"="tags", "dataType"="string", "required"=false, "format"="api%2Crest", "description"="a list of tags url encoded. Will returns entries that matches ALL tags."},
      *       }
      * )
+     *
      * @return Entry
      */
     public function getEntriesAction(Request $request)
     {
         $isArchived = $request->query->get('archive');
-        $isStarred  = $request->query->get('star');
-        $sort       = $request->query->get('sort', 'created');
-        $order      = $request->query->get('order', 'desc');
-        $page       = (int) $request->query->get('page', 1);
-        $perPage    = (int) $request->query->get('perPage', 30);
-        $tags       = $request->query->get('tags', []);
+        $isStarred = $request->query->get('star');
+        $sort = $request->query->get('sort', 'created');
+        $order = $request->query->get('order', 'desc');
+        $page = (int) $request->query->get('page', 1);
+        $perPage = (int) $request->query->get('perPage', 30);
+        $tags = $request->query->get('tags', []);
 
         $pager = $this
             ->getDoctrine()
@@ -97,7 +99,7 @@ class WallabagRestController extends Controller
         $pager->setCurrentPage($page);
         $pager->setMaxPerPage($perPage);
 
-        $pagerfantaFactory   = new PagerfantaFactory('page', 'perPage');
+        $pagerfantaFactory = new PagerfantaFactory('page', 'perPage');
         $paginatedCollection = $pagerfantaFactory->createRepresentation(
             $pager,
             new Route('api_get_entries', [], $absolute = true)
@@ -109,13 +111,14 @@ class WallabagRestController extends Controller
     }
 
     /**
-     * Retrieve a single entry
+     * Retrieve a single entry.
      *
      * @ApiDoc(
      *      requirements={
      *          {"name"="entry", "dataType"="integer", "requirement"="\w+", "description"="The entry ID"}
      *      }
      * )
+     *
      * @return Entry
      */
     public function getEntryAction(Entry $entry)
@@ -128,7 +131,7 @@ class WallabagRestController extends Controller
     }
 
     /**
-     * Create an entry
+     * Create an entry.
      *
      * @ApiDoc(
      *       parameters={
@@ -137,17 +140,23 @@ class WallabagRestController extends Controller
      *          {"name"="tags", "dataType"="string", "required"=false, "format"="tag1,tag2,tag3", "description"="a comma-separated list of tags."},
      *       }
      * )
+     *
      * @return Entry
      */
     public function postEntriesAction(Request $request)
     {
         $url = $request->request->get('url');
 
-        $content = Extractor::extract($url);
+        $content = $this->get('wallabag_core.graby')->fetchContent($url);
+
         $entry = new Entry($this->getUser());
         $entry->setUrl($url);
-        $entry->setTitle($request->request->get('title') ?: $content->getTitle());
-        $entry->setContent($content->getBody());
+        $entry->setTitle($request->request->get('title') ?: $content['title']);
+        $entry->setContent($content['html']);
+        $entry->setMimetype($content['content_type']);
+        if (isset($content['open_graph']['og_image'])) {
+            $entry->setPreviewPicture($content['open_graph']['og_image']);
+        }
 
         $tags = $request->request->get('tags', '');
         if (!empty($tags)) {
@@ -164,7 +173,7 @@ class WallabagRestController extends Controller
     }
 
     /**
-     * Change several properties of an entry
+     * Change several properties of an entry.
      *
      * @ApiDoc(
      *      requirements={
@@ -177,15 +186,16 @@ class WallabagRestController extends Controller
      *          {"name"="star", "dataType"="boolean", "required"=false, "format"="true or false", "description"="starred the entry."},
      *      }
      * )
+     *
      * @return Entry
      */
     public function patchEntriesAction(Entry $entry, Request $request)
     {
         $this->validateUserAccess($entry->getUser()->getId(), $this->getUser()->getId());
 
-        $title      = $request->request->get("title");
-        $isArchived = $request->request->get("archive");
-        $isStarred  = $request->request->get("star");
+        $title = $request->request->get('title');
+        $isArchived = $request->request->get('is_archived');
+        $isStarred = $request->request->get('is_starred');
 
         if (!is_null($title)) {
             $entry->setTitle($title);
@@ -213,13 +223,14 @@ class WallabagRestController extends Controller
     }
 
     /**
-     * Delete **permanently** an entry
+     * Delete **permanently** an entry.
      *
      * @ApiDoc(
      *      requirements={
      *          {"name"="entry", "dataType"="integer", "requirement"="\w+", "description"="The entry ID"}
      *      }
      * )
+     *
      * @return Entry
      */
     public function deleteEntriesAction(Entry $entry)
@@ -236,7 +247,7 @@ class WallabagRestController extends Controller
     }
 
     /**
-     * Retrieve all tags for an entry
+     * Retrieve all tags for an entry.
      *
      * @ApiDoc(
      *      requirements={
@@ -254,7 +265,7 @@ class WallabagRestController extends Controller
     }
 
     /**
-     * Add one or more tags to an entry
+     * Add one or more tags to an entry.
      *
      * @ApiDoc(
      *      requirements={
@@ -284,7 +295,7 @@ class WallabagRestController extends Controller
     }
 
     /**
-     * Permanently remove one tag for an entry
+     * Permanently remove one tag for an entry.
      *
      * @ApiDoc(
      *      requirements={
@@ -308,7 +319,7 @@ class WallabagRestController extends Controller
     }
 
     /**
-     * Retrieve all tags
+     * Retrieve all tags.
      *
      * @ApiDoc()
      */
@@ -320,7 +331,7 @@ class WallabagRestController extends Controller
     }
 
     /**
-     * Permanently remove one tag from **every** entry
+     * Permanently remove one tag from **every** entry.
      *
      * @ApiDoc(
      *      requirements={
@@ -343,10 +354,10 @@ class WallabagRestController extends Controller
 
     /**
      * Validate that the first id is equal to the second one.
-     * If not, throw exception. It means a user try to access information from an other user
+     * If not, throw exception. It means a user try to access information from an other user.
      *
-     * @param integer $requestUserId User id from the requested source
-     * @param integer $currentUserId User id from the retrieved source
+     * @param int $requestUserId User id from the requested source
+     * @param int $currentUserId User id from the retrieved source
      */
     private function validateUserAccess($requestUserId, $currentUserId)
     {
@@ -357,7 +368,7 @@ class WallabagRestController extends Controller
 
     /**
      * Send a JSON Response.
-     * We don't use the Symfony JsonRespone, because it takes an array as parameter instead of a JSON string
+     * We don't use the Symfony JsonRespone, because it takes an array as parameter instead of a JSON string.
      *
      * @param string $json
      *