From 769e19dc4ab1a068e8165a7b237f42a78a6d312f Mon Sep 17 00:00:00 2001 From: Jeremy Date: Sun, 29 Mar 2015 10:53:10 +0200 Subject: [PATCH 1/8] Move API stuff in ApiBundle --- app/AppKernel.php | 3 +- app/config/routing.yml | 4 + app/config/routing_rest.yml | 2 +- .../Controller/WallabagRestController.php | 86 ++-- .../DependencyInjection/Configuration.php | 29 ++ .../Security/Factory/WsseFactory.php | 2 +- .../WallabagApiExtension.php | 25 ++ .../ApiBundle/Resources/config/routing.yml | 0 .../Resources/config/routing_rest.yml | 4 + .../ApiBundle/Resources/config/services.yml | 12 + .../Authentication/Provider/WsseProvider.php | 4 +- .../Authentication/Token/WsseUserToken.php | 2 +- .../Security/Firewall/WsseListener.php | 4 +- .../Controller/WallabagRestControllerTest.php | 410 ++++++++++++++++++ src/Wallabag/ApiBundle/WallabagApiBundle.php | 18 + .../WallabagCoreExtension.php | 6 +- .../Resources/config/routing_rest.yml | 4 - .../CoreBundle/Resources/config/services.yml | 12 - .../Tests/Command/InstallCommandTest.php | 4 +- .../Tests/Controller/ConfigControllerTest.php | 4 +- .../Tests/Controller/EntryControllerTest.php | 4 +- .../Controller/SecurityControllerTest.php | 4 +- .../Controller/WallabagRestControllerTest.php | 214 --------- ...gTestCase.php => WallabagCoreTestCase.php} | 2 +- .../CoreBundle/WallabagCoreBundle.php | 9 - 25 files changed, 571 insertions(+), 297 deletions(-) rename src/Wallabag/{CoreBundle => ApiBundle}/Controller/WallabagRestController.php (79%) create mode 100644 src/Wallabag/ApiBundle/DependencyInjection/Configuration.php rename src/Wallabag/{CoreBundle => ApiBundle}/DependencyInjection/Security/Factory/WsseFactory.php (94%) create mode 100644 src/Wallabag/ApiBundle/DependencyInjection/WallabagApiExtension.php create mode 100644 src/Wallabag/ApiBundle/Resources/config/routing.yml create mode 100644 src/Wallabag/ApiBundle/Resources/config/routing_rest.yml create mode 100644 src/Wallabag/ApiBundle/Resources/config/services.yml rename src/Wallabag/{CoreBundle => ApiBundle}/Security/Authentication/Provider/WsseProvider.php (95%) rename src/Wallabag/{CoreBundle => ApiBundle}/Security/Authentication/Token/WsseUserToken.php (87%) rename src/Wallabag/{CoreBundle => ApiBundle}/Security/Firewall/WsseListener.php (94%) create mode 100644 src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php create mode 100644 src/Wallabag/ApiBundle/WallabagApiBundle.php delete mode 100644 src/Wallabag/CoreBundle/Resources/config/routing_rest.yml delete mode 100644 src/Wallabag/CoreBundle/Tests/Controller/WallabagRestControllerTest.php rename src/Wallabag/CoreBundle/Tests/{WallabagTestCase.php => WallabagCoreTestCase.php} (91%) diff --git a/app/AppKernel.php b/app/AppKernel.php index 601b52c3f..9a52f3493 100644 --- a/app/AppKernel.php +++ b/app/AppKernel.php @@ -23,7 +23,8 @@ class AppKernel extends Kernel new Nelmio\CorsBundle\NelmioCorsBundle(), new Liip\ThemeBundle\LiipThemeBundle(), new Wallabag\CoreBundle\WallabagCoreBundle(), - new Bazinga\Bundle\HateoasBundle\BazingaHateoasBundle() + new Wallabag\ApiBundle\WallabagApiBundle(), + new Bazinga\Bundle\HateoasBundle\BazingaHateoasBundle(), ); if (in_array($this->getEnvironment(), array('dev', 'test'))) { diff --git a/app/config/routing.yml b/app/config/routing.yml index d681b39b7..8710e97f9 100644 --- a/app/config/routing.yml +++ b/app/config/routing.yml @@ -1,3 +1,7 @@ +wallabag_api: + resource: "@WallabagApiBundle/Resources/config/routing.yml" + prefix: / + app: resource: @WallabagCoreBundle/Controller/ type: annotation diff --git a/app/config/routing_rest.yml b/app/config/routing_rest.yml index 82d9e6cce..0a64ad78b 100644 --- a/app/config/routing_rest.yml +++ b/app/config/routing_rest.yml @@ -1,3 +1,3 @@ Rest_Wallabag: type : rest - resource: "@WallabagCoreBundle/Resources/config/routing_rest.yml" \ No newline at end of file + resource: "@WallabagApiBundle/Resources/config/routing_rest.yml" diff --git a/src/Wallabag/CoreBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php similarity index 79% rename from src/Wallabag/CoreBundle/Controller/WallabagRestController.php rename to src/Wallabag/ApiBundle/Controller/WallabagRestController.php index 14f42c488..21e4552db 100644 --- a/src/Wallabag/CoreBundle/Controller/WallabagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php @@ -1,6 +1,6 @@ getSalt() ?: null); } + /** * Retrieve all entries. It could be filtered by many options. * @@ -86,17 +87,13 @@ class WallabagRestController extends Controller $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', array()); + $tags = $request->query->get('tags', []); $pager = $this ->getDoctrine() ->getRepository('WallabagCoreBundle:Entry') ->findEntries($this->getUser()->getId(), $isArchived, $isStarred, $sort, $order); - if (0 === $pager->getNbResults()) { - throw $this->createNotFoundException(); - } - $pager->setCurrentPage($page); $pager->setMaxPerPage($perPage); @@ -108,7 +105,7 @@ class WallabagRestController extends Controller $json = $this->get('serializer')->serialize($paginatedCollection, 'json'); - return new Response($json, 200, array('application/json')); + return $this->renderJsonResponse($json); } /** @@ -123,13 +120,11 @@ class WallabagRestController extends Controller */ public function getEntryAction(Entry $entry) { - if ($entry->getUser()->getId() != $this->getUser()->getId()) { - throw $this->createAccessDeniedException('Access forbidden. Entry user id: '.$entry->getUser()->getId().', logged user id: '.$this->getUser()->getId()); - } + $this->validateUserAccess($entry->getUser()->getId(), $this->getUser()->getId()); $json = $this->get('serializer')->serialize($entry, 'json'); - return new Response($json, 200, array('application/json')); + return $this->renderJsonResponse($json); } /** @@ -165,7 +160,7 @@ class WallabagRestController extends Controller $json = $this->get('serializer')->serialize($entry, 'json'); - return new Response($json, 200, array('application/json')); + return $this->renderJsonResponse($json); } /** @@ -186,9 +181,7 @@ class WallabagRestController extends Controller */ public function patchEntriesAction(Entry $entry, Request $request) { - if ($entry->getUser()->getId() != $this->getUser()->getId()) { - throw $this->createAccessDeniedException('Access forbidden. Entry user id: '.$entry->getUser()->getId().', logged user id: '.$this->getUser()->getId()); - } + $this->validateUserAccess($entry->getUser()->getId(), $this->getUser()->getId()); $title = $request->request->get("title"); $isArchived = $request->request->get("archive"); @@ -216,7 +209,7 @@ class WallabagRestController extends Controller $json = $this->get('serializer')->serialize($entry, 'json'); - return new Response($json, 200, array('application/json')); + return $this->renderJsonResponse($json); } /** @@ -231,9 +224,7 @@ class WallabagRestController extends Controller */ public function deleteEntriesAction(Entry $entry) { - if ($entry->getUser()->getId() != $this->getUser()->getId()) { - throw $this->createAccessDeniedException('Access forbidden. Entry user id: '.$entry->getUser()->getId().', logged user id: '.$this->getUser()->getId()); - } + $this->validateUserAccess($entry->getUser()->getId(), $this->getUser()->getId()); $em = $this->getDoctrine()->getManager(); $em->remove($entry); @@ -241,7 +232,7 @@ class WallabagRestController extends Controller $json = $this->get('serializer')->serialize($entry, 'json'); - return new Response($json, 200, array('application/json')); + return $this->renderJsonResponse($json); } /** @@ -255,13 +246,11 @@ class WallabagRestController extends Controller */ public function getEntriesTagsAction(Entry $entry) { - if ($entry->getUser()->getId() != $this->getUser()->getId()) { - throw $this->createAccessDeniedException('Access forbidden. Entry user id: '.$entry->getUser()->getId().', logged user id: '.$this->getUser()->getId()); - } + $this->validateUserAccess($entry->getUser()->getId(), $this->getUser()->getId()); $json = $this->get('serializer')->serialize($entry->getTags(), 'json'); - return new Response($json, 200, array('application/json')); + return $this->renderJsonResponse($json); } /** @@ -278,9 +267,7 @@ class WallabagRestController extends Controller */ public function postEntriesTagsAction(Request $request, Entry $entry) { - if ($entry->getUser()->getId() != $this->getUser()->getId()) { - throw $this->createAccessDeniedException('Access forbidden. Entry user id: '.$entry->getUser()->getId().', logged user id: '.$this->getUser()->getId()); - } + $this->validateUserAccess($entry->getUser()->getId(), $this->getUser()->getId()); $tags = $request->request->get('tags', ''); if (!empty($tags)) { @@ -293,7 +280,7 @@ class WallabagRestController extends Controller $json = $this->get('serializer')->serialize($entry, 'json'); - return new Response($json, 200, array('application/json')); + return $this->renderJsonResponse($json); } /** @@ -301,16 +288,14 @@ class WallabagRestController extends Controller * * @ApiDoc( * requirements={ - * {"name"="tag", "dataType"="string", "requirement"="\w+", "description"="The tag"}, + * {"name"="tag", "dataType"="integer", "requirement"="\w+", "description"="The tag ID"}, * {"name"="entry", "dataType"="integer", "requirement"="\w+", "description"="The entry ID"} * } * ) */ public function deleteEntriesTagsAction(Entry $entry, Tag $tag) { - if ($entry->getUser()->getId() != $this->getUser()->getId()) { - throw $this->createAccessDeniedException('Access forbidden. Entry user id: '.$entry->getUser()->getId().', logged user id: '.$this->getUser()->getId()); - } + $this->validateUserAccess($entry->getUser()->getId(), $this->getUser()->getId()); $entry->removeTag($tag); $em = $this->getDoctrine()->getManager(); @@ -319,7 +304,7 @@ class WallabagRestController extends Controller $json = $this->get('serializer')->serialize($entry, 'json'); - return new Response($json, 200, array('application/json')); + return $this->renderJsonResponse($json); } /** @@ -331,7 +316,7 @@ class WallabagRestController extends Controller { $json = $this->get('serializer')->serialize($this->getUser()->getTags(), 'json'); - return new Response($json, 200, array('application/json')); + return $this->renderJsonResponse($json); } /** @@ -339,15 +324,13 @@ class WallabagRestController extends Controller * * @ApiDoc( * requirements={ - * {"name"="tag", "dataType"="string", "requirement"="\w+", "description"="The tag"} + * {"name"="tag", "dataType"="integer", "requirement"="\w+", "description"="The tag"} * } * ) */ public function deleteTagAction(Tag $tag) { - if ($tag->getUser()->getId() != $this->getUser()->getId()) { - throw $this->createAccessDeniedException('Access forbidden. Entry user id: '.$tag->getUser()->getId().', logged user id: '.$this->getUser()->getId()); - } + $this->validateUserAccess($tag->getUser()->getId(), $this->getUser()->getId()); $em = $this->getDoctrine()->getManager(); $em->remove($tag); @@ -355,6 +338,33 @@ class WallabagRestController extends Controller $json = $this->get('serializer')->serialize($tag, 'json'); + return $this->renderJsonResponse($json); + } + + /** + * 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 + * + * @param integer $requestUserId User id from the requested source + * @param integer $currentUserId User id from the retrieved source + */ + private function validateUserAccess($requestUserId, $currentUserId) + { + if ($requestUserId != $currentUserId) { + throw $this->createAccessDeniedException('Access forbidden. Entry user id: '.$requestUserId.', logged user id: '.$currentUserId); + } + } + + /** + * Send a JSON Response. + * We don't use the Symfony JsonRespone, because it takes an array as parameter instead of a JSON string + * + * @param string $json + * + * @return Response + */ + private function renderJsonResponse($json) + { return new Response($json, 200, array('application/json')); } } diff --git a/src/Wallabag/ApiBundle/DependencyInjection/Configuration.php b/src/Wallabag/ApiBundle/DependencyInjection/Configuration.php new file mode 100644 index 000000000..80a07ca2b --- /dev/null +++ b/src/Wallabag/ApiBundle/DependencyInjection/Configuration.php @@ -0,0 +1,29 @@ +root('wallabag_api'); + + // Here you should define the parameters that are allowed to + // configure your bundle. See the documentation linked above for + // more information on that topic. + + return $treeBuilder; + } +} diff --git a/src/Wallabag/CoreBundle/DependencyInjection/Security/Factory/WsseFactory.php b/src/Wallabag/ApiBundle/DependencyInjection/Security/Factory/WsseFactory.php similarity index 94% rename from src/Wallabag/CoreBundle/DependencyInjection/Security/Factory/WsseFactory.php rename to src/Wallabag/ApiBundle/DependencyInjection/Security/Factory/WsseFactory.php index 0b5bdb40a..402eb8692 100644 --- a/src/Wallabag/CoreBundle/DependencyInjection/Security/Factory/WsseFactory.php +++ b/src/Wallabag/ApiBundle/DependencyInjection/Security/Factory/WsseFactory.php @@ -1,6 +1,6 @@ processConfiguration($configuration, $configs); + + $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); + $loader->load('services.yml'); + } + + public function getAlias() + { + return 'wallabag_api'; + } +} diff --git a/src/Wallabag/ApiBundle/Resources/config/routing.yml b/src/Wallabag/ApiBundle/Resources/config/routing.yml new file mode 100644 index 000000000..e69de29bb diff --git a/src/Wallabag/ApiBundle/Resources/config/routing_rest.yml b/src/Wallabag/ApiBundle/Resources/config/routing_rest.yml new file mode 100644 index 000000000..5f43f9716 --- /dev/null +++ b/src/Wallabag/ApiBundle/Resources/config/routing_rest.yml @@ -0,0 +1,4 @@ +entries: + type: rest + resource: "WallabagApiBundle:WallabagRest" + name_prefix: api_ diff --git a/src/Wallabag/ApiBundle/Resources/config/services.yml b/src/Wallabag/ApiBundle/Resources/config/services.yml new file mode 100644 index 000000000..6854a444c --- /dev/null +++ b/src/Wallabag/ApiBundle/Resources/config/services.yml @@ -0,0 +1,12 @@ +services: + wsse.security.authentication.provider: + class: Wallabag\ApiBundle\Security\Authentication\Provider\WsseProvider + public: false + arguments: ['', '%kernel.cache_dir%/security/nonces'] + + wsse.security.authentication.listener: + class: Wallabag\ApiBundle\Security\Firewall\WsseListener + public: false + tags: + - { name: monolog.logger, channel: wsse } + arguments: ['@security.context', '@security.authentication.manager', '@logger'] diff --git a/src/Wallabag/CoreBundle/Security/Authentication/Provider/WsseProvider.php b/src/Wallabag/ApiBundle/Security/Authentication/Provider/WsseProvider.php similarity index 95% rename from src/Wallabag/CoreBundle/Security/Authentication/Provider/WsseProvider.php rename to src/Wallabag/ApiBundle/Security/Authentication/Provider/WsseProvider.php index 7e6a5dfb3..8e49167aa 100644 --- a/src/Wallabag/CoreBundle/Security/Authentication/Provider/WsseProvider.php +++ b/src/Wallabag/ApiBundle/Security/Authentication/Provider/WsseProvider.php @@ -1,12 +1,12 @@ getContainer() + ->get('doctrine.orm.entity_manager') + ->getRepository('WallabagCoreBundle:User') + ->findOneByUsername('admin'); + + self::$salt = $user->getSalt(); + } + + /** + * Generate HTTP headers for authenticate user on API + * + * @param string $username + * @param string $password + * + * @return array + */ + private function generateHeaders($username, $password) + { + $encryptedPassword = sha1($password.$username.self::$salt); + $nonce = substr(md5(uniqid('nonce_', true)), 0, 16); + + $now = new \DateTime('now', new \DateTimeZone('UTC')); + $created = (string) $now->format('Y-m-d\TH:i:s\Z'); + $digest = base64_encode(sha1(base64_decode($nonce).$created.$encryptedPassword, true)); + + return array( + 'HTTP_AUTHORIZATION' => 'Authorization profile="UsernameToken"', + 'HTTP_x-wsse' => 'X-WSSE: UsernameToken Username="'.$username.'", PasswordDigest="'.$digest.'", Nonce="'.$nonce.'", Created="'.$created.'"', + ); + } + + public function testGetSalt() + { + $client = $this->createClient(); + $client->request('GET', '/api/salts/admin.json'); + + $user = $client->getContainer() + ->get('doctrine.orm.entity_manager') + ->getRepository('WallabagCoreBundle:User') + ->findOneByUsername('admin'); + + $this->assertEquals(200, $client->getResponse()->getStatusCode()); + + $content = json_decode($client->getResponse()->getContent(), true); + + $this->assertArrayHasKey(0, $content); + $this->assertEquals($user->getSalt(), $content[0]); + + $client->request('GET', '/api/salts/notfound.json'); + $this->assertEquals(404, $client->getResponse()->getStatusCode()); + } + + public function testWithBadHeaders() + { + $client = $this->createClient(); + + $entry = $client->getContainer() + ->get('doctrine.orm.entity_manager') + ->getRepository('WallabagCoreBundle:Entry') + ->findOneByIsArchived(false); + + if (!$entry) { + $this->markTestSkipped('No content found in db.'); + } + + $badHeaders = array( + 'HTTP_AUTHORIZATION' => 'Authorization profile="UsernameToken"', + 'HTTP_x-wsse' => 'X-WSSE: UsernameToken Username="admin", PasswordDigest="Wr0ngDig3st", Nonce="n0Nc3", Created="2015-01-01T13:37:00Z"', + ); + + $client->request('GET', '/api/entries/'.$entry->getId().'.json', array(), array(), $badHeaders); + $this->assertEquals(403, $client->getResponse()->getStatusCode()); + } + + public function testGetOneEntry() + { + $client = $this->createClient(); + $headers = $this->generateHeaders('admin', 'mypassword'); + + $entry = $client->getContainer() + ->get('doctrine.orm.entity_manager') + ->getRepository('WallabagCoreBundle:Entry') + ->findOneBy(array('user' => 1, 'isArchived' => false)); + + if (!$entry) { + $this->markTestSkipped('No content found in db.'); + } + + $client->request('GET', '/api/entries/'.$entry->getId().'.json', array(), array(), $headers); + + $this->assertEquals(200, $client->getResponse()->getStatusCode()); + + $content = json_decode($client->getResponse()->getContent(), true); + + $this->assertEquals($entry->getTitle(), $content['title']); + $this->assertEquals($entry->getUrl(), $content['url']); + $this->assertCount(count($entry->getTags()), $content['tags']); + + $this->assertTrue( + $client->getResponse()->headers->contains( + 'Content-Type', + 'application/json' + ) + ); + } + + public function testGetOneEntryWrongUser() + { + $client = $this->createClient(); + $headers = $this->generateHeaders('admin', 'mypassword'); + + $entry = $client->getContainer() + ->get('doctrine.orm.entity_manager') + ->getRepository('WallabagCoreBundle:Entry') + ->findOneBy(array('user' => 2, 'isArchived' => false)); + + if (!$entry) { + $this->markTestSkipped('No content found in db.'); + } + + $client->request('GET', '/api/entries/'.$entry->getId().'.json', array(), array(), $headers); + + $this->assertEquals(403, $client->getResponse()->getStatusCode()); + } + + public function testGetEntries() + { + $client = $this->createClient(); + $headers = $this->generateHeaders('admin', 'mypassword'); + + $client->request('GET', '/api/entries', array(), array(), $headers); + + $this->assertEquals(200, $client->getResponse()->getStatusCode()); + + $content = json_decode($client->getResponse()->getContent(), true); + + $this->assertGreaterThanOrEqual(1, count($content)); + $this->assertNotEmpty($content['_embedded']['items']); + $this->assertGreaterThanOrEqual(1, $content['total']); + $this->assertEquals(1, $content['page']); + $this->assertGreaterThanOrEqual(1, $content['pages']); + + $this->assertTrue( + $client->getResponse()->headers->contains( + 'Content-Type', + 'application/json' + ) + ); + } + + public function testGetStarredEntries() + { + $client = $this->createClient(); + $headers = $this->generateHeaders('admin', 'mypassword'); + + $client->request('GET', '/api/entries', array('archive' => 1), array(), $headers); + + $this->assertEquals(200, $client->getResponse()->getStatusCode()); + + $content = json_decode($client->getResponse()->getContent(), true); + + $this->assertGreaterThanOrEqual(1, count($content)); + $this->assertEmpty($content['_embedded']['items']); + $this->assertEquals(0, $content['total']); + $this->assertEquals(1, $content['page']); + $this->assertEquals(1, $content['pages']); + + $this->assertTrue( + $client->getResponse()->headers->contains( + 'Content-Type', + 'application/json' + ) + ); + } + + public function testDeleteEntry() + { + $client = $this->createClient(); + $headers = $this->generateHeaders('admin', 'mypassword'); + + $entry = $client->getContainer() + ->get('doctrine.orm.entity_manager') + ->getRepository('WallabagCoreBundle:Entry') + ->findOneByUser(1); + + if (!$entry) { + $this->markTestSkipped('No content found in db.'); + } + + $client->request('DELETE', '/api/entries/'.$entry->getId().'.json', array(), array(), $headers); + + $this->assertEquals(200, $client->getResponse()->getStatusCode()); + + $content = json_decode($client->getResponse()->getContent(), true); + + $this->assertEquals($entry->getTitle(), $content['title']); + $this->assertEquals($entry->getUrl(), $content['url']); + + // We'll try to delete this entry again + $headers = $this->generateHeaders('admin', 'mypassword'); + + $client->request('DELETE', '/api/entries/'.$entry->getId().'.json', array(), array(), $headers); + + $this->assertEquals(404, $client->getResponse()->getStatusCode()); + } + + public function testPostEntry() + { + $client = $this->createClient(); + $headers = $this->generateHeaders('admin', 'mypassword'); + + $client->request('POST', '/api/entries.json', array( + 'url' => 'http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html', + 'tags' => 'google', + ), array(), $headers); + + $this->assertEquals(200, $client->getResponse()->getStatusCode()); + + $content = json_decode($client->getResponse()->getContent(), true); + + $this->assertGreaterThan(0, $content['id']); + $this->assertEquals('http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html', $content['url']); + $this->assertEquals(false, $content['is_archived']); + $this->assertEquals(false, $content['is_starred']); + $this->assertCount(1, $content['tags']); + } + + public function testPatchEntry() + { + $client = $this->createClient(); + $headers = $this->generateHeaders('admin', 'mypassword'); + + $entry = $client->getContainer() + ->get('doctrine.orm.entity_manager') + ->getRepository('WallabagCoreBundle:Entry') + ->findOneByUser(1); + + if (!$entry) { + $this->markTestSkipped('No content found in db.'); + } + + // hydrate the tags relations + $nbTags = count($entry->getTags()); + + $client->request('PATCH', '/api/entries/'.$entry->getId().'.json', array( + 'title' => 'New awesome title', + 'tags' => 'new tag '.uniqid(), + 'star' => true, + 'archive' => false, + ), array(), $headers); + + $this->assertEquals(200, $client->getResponse()->getStatusCode()); + + $content = json_decode($client->getResponse()->getContent(), true); + + $this->assertEquals($entry->getId(), $content['id']); + $this->assertEquals($entry->getUrl(), $content['url']); + $this->assertEquals('New awesome title', $content['title']); + $this->assertGreaterThan($nbTags, count($content['tags'])); + } + + public function testGetTagsEntry() + { + $client = $this->createClient(); + $headers = $this->generateHeaders('admin', 'mypassword'); + + $entry = $client->getContainer() + ->get('doctrine.orm.entity_manager') + ->getRepository('WallabagCoreBundle:Entry') + ->findOneWithTags(1); + + $entry = $entry[0]; + + if (!$entry) { + $this->markTestSkipped('No content found in db.'); + } + + $tags = array(); + foreach ($entry->getTags() as $tag) { + $tags[] = array('id' => $tag->getId(), 'label' => $tag->getLabel()); + } + + $client->request('GET', '/api/entries/'.$entry->getId().'/tags', array(), array(), $headers); + + $this->assertEquals(json_encode($tags, JSON_HEX_QUOT), $client->getResponse()->getContent()); + } + + public function testPostTagsOnEntry() + { + $client = $this->createClient(); + $headers = $this->generateHeaders('admin', 'mypassword'); + + $entry = $client->getContainer() + ->get('doctrine.orm.entity_manager') + ->getRepository('WallabagCoreBundle:Entry') + ->findOneByUser(1); + + if (!$entry) { + $this->markTestSkipped('No content found in db.'); + } + + $nbTags = count($entry->getTags()); + + $newTags = 'tag1,tag2,tag3'; + + $client->request('POST', '/api/entries/'.$entry->getId().'/tags', array('tags' => $newTags), array(), $headers); + + $this->assertEquals(200, $client->getResponse()->getStatusCode()); + + $content = json_decode($client->getResponse()->getContent(), true); + + $this->assertArrayHasKey('tags', $content); + $this->assertEquals($nbTags+3, count($content['tags'])); + + $entryDB = $client->getContainer() + ->get('doctrine.orm.entity_manager') + ->getRepository('WallabagCoreBundle:Entry') + ->find($entry->getId()); + + $tagsInDB = array(); + foreach ($entryDB->getTags()->toArray() as $tag) { + $tagsInDB[$tag->getId()] = $tag->getLabel(); + } + + foreach (explode(',', $newTags) as $tag) { + $this->assertContains($tag, $tagsInDB); + } + } + + public function testDeleteOneTagEntrie() + { + $client = $this->createClient(); + $headers = $this->generateHeaders('admin', 'mypassword'); + + $entry = $client->getContainer() + ->get('doctrine.orm.entity_manager') + ->getRepository('WallabagCoreBundle:Entry') + ->findOneByUser(1); + + if (!$entry) { + $this->markTestSkipped('No content found in db.'); + } + + // hydrate the tags relations + $nbTags = count($entry->getTags()); + $tag = $entry->getTags()[0]; + + $client->request('DELETE', '/api/entries/'.$entry->getId().'/tags/'.$tag->getId().'.json', array(), array(), $headers); + + $this->assertEquals(200, $client->getResponse()->getStatusCode()); + + $content = json_decode($client->getResponse()->getContent(), true); + + $this->assertArrayHasKey('tags', $content); + $this->assertEquals($nbTags-1, count($content['tags'])); + } + + public function testGetUserTags() + { + $client = $this->createClient(); + $headers = $this->generateHeaders('admin', 'mypassword'); + + $client->request('GET', '/api/tags.json', array(), array(), $headers); + + $this->assertEquals(200, $client->getResponse()->getStatusCode()); + + $content = json_decode($client->getResponse()->getContent(), true); + + $this->assertGreaterThan(0, $content); + $this->assertArrayHasKey('id', $content[0]); + $this->assertArrayHasKey('label', $content[0]); + + return end($content); + } + + /** + * @depends testGetUserTags + */ + public function testDeleteUserTag($tag) + { + $client = $this->createClient(); + $headers = $this->generateHeaders('admin', 'mypassword'); + + $client->request('DELETE', '/api/tags/'.$tag['id'].'.json', array(), array(), $headers); + + $this->assertEquals(200, $client->getResponse()->getStatusCode()); + + $content = json_decode($client->getResponse()->getContent(), true); + + $this->assertArrayHasKey('label', $content); + $this->assertEquals($tag['label'], $content['label']); + } +} diff --git a/src/Wallabag/ApiBundle/WallabagApiBundle.php b/src/Wallabag/ApiBundle/WallabagApiBundle.php new file mode 100644 index 000000000..2484f2779 --- /dev/null +++ b/src/Wallabag/ApiBundle/WallabagApiBundle.php @@ -0,0 +1,18 @@ +getExtension('security'); + $extension->addSecurityListenerFactory(new WsseFactory()); + } +} diff --git a/src/Wallabag/CoreBundle/DependencyInjection/WallabagCoreExtension.php b/src/Wallabag/CoreBundle/DependencyInjection/WallabagCoreExtension.php index c6ecc99e0..7493351bd 100644 --- a/src/Wallabag/CoreBundle/DependencyInjection/WallabagCoreExtension.php +++ b/src/Wallabag/CoreBundle/DependencyInjection/WallabagCoreExtension.php @@ -3,15 +3,15 @@ namespace Wallabag\CoreBundle\DependencyInjection; use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; -use Symfony\Component\HttpKernel\DependencyInjection\Extension; use Symfony\Component\Config\FileLocator; +use Symfony\Component\HttpKernel\DependencyInjection\Extension; +use Symfony\Component\DependencyInjection\Loader; class WallabagCoreExtension extends Extension { public function load(array $configs, ContainerBuilder $container) { - $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); + $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); $loader->load('services.yml'); } diff --git a/src/Wallabag/CoreBundle/Resources/config/routing_rest.yml b/src/Wallabag/CoreBundle/Resources/config/routing_rest.yml deleted file mode 100644 index d3af6b72b..000000000 --- a/src/Wallabag/CoreBundle/Resources/config/routing_rest.yml +++ /dev/null @@ -1,4 +0,0 @@ -entries: - type: rest - resource: "WallabagCoreBundle:WallabagRest" - name_prefix: api_ diff --git a/src/Wallabag/CoreBundle/Resources/config/services.yml b/src/Wallabag/CoreBundle/Resources/config/services.yml index cea6c0df1..d8bd8d529 100644 --- a/src/Wallabag/CoreBundle/Resources/config/services.yml +++ b/src/Wallabag/CoreBundle/Resources/config/services.yml @@ -4,18 +4,6 @@ services: tags: - { name: twig.extension } - wsse.security.authentication.provider: - class: Wallabag\CoreBundle\Security\Authentication\Provider\WsseProvider - public: false - arguments: ['', '%kernel.cache_dir%/security/nonces'] - - wsse.security.authentication.listener: - class: Wallabag\CoreBundle\Security\Firewall\WsseListener - public: false - tags: - - { name: monolog.logger, channel: wsse } - arguments: ['@security.context', '@security.authentication.manager', '@logger'] - wallabag_core.helper.detect_active_theme: class: Wallabag\CoreBundle\Helper\DetectActiveTheme arguments: diff --git a/src/Wallabag/CoreBundle/Tests/Command/InstallCommandTest.php b/src/Wallabag/CoreBundle/Tests/Command/InstallCommandTest.php index f689b5328..7a819953e 100644 --- a/src/Wallabag/CoreBundle/Tests/Command/InstallCommandTest.php +++ b/src/Wallabag/CoreBundle/Tests/Command/InstallCommandTest.php @@ -2,7 +2,7 @@ namespace Wallabag\CoreBundle\Tests\Command; -use Wallabag\CoreBundle\Tests\WallabagTestCase; +use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; use Wallabag\CoreBundle\Command\InstallCommand; use Wallabag\CoreBundle\Tests\Mock\InstallCommandMock; use Symfony\Bundle\FrameworkBundle\Console\Application; @@ -12,7 +12,7 @@ use Symfony\Component\Console\Output\NullOutput; use Doctrine\Bundle\DoctrineBundle\Command\DropDatabaseDoctrineCommand; use Doctrine\Bundle\DoctrineBundle\Command\CreateDatabaseDoctrineCommand; -class InstallCommandTest extends WallabagTestCase +class InstallCommandTest extends WallabagCoreTestCase { public static function tearDownAfterClass() { diff --git a/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php index 5030bcbd5..3c1589229 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php +++ b/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php @@ -2,9 +2,9 @@ namespace Wallabag\CoreBundle\Tests\Controller; -use Wallabag\CoreBundle\Tests\WallabagTestCase; +use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; -class ConfigControllerTest extends WallabagTestCase +class ConfigControllerTest extends WallabagCoreTestCase { public function testLogin() { diff --git a/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php index 1a0d586c2..8a7fdda2e 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php +++ b/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php @@ -2,10 +2,10 @@ namespace Wallabag\CoreBundle\Tests\Controller; -use Wallabag\CoreBundle\Tests\WallabagTestCase; +use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; use Doctrine\ORM\AbstractQuery; -class EntryControllerTest extends WallabagTestCase +class EntryControllerTest extends WallabagCoreTestCase { public function testLogin() { diff --git a/src/Wallabag/CoreBundle/Tests/Controller/SecurityControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/SecurityControllerTest.php index 1dd05f89b..e560ffdd3 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/SecurityControllerTest.php +++ b/src/Wallabag/CoreBundle/Tests/Controller/SecurityControllerTest.php @@ -2,11 +2,11 @@ namespace Wallabag\CoreBundle\Tests\Controller; -use Wallabag\CoreBundle\Tests\WallabagTestCase; use Symfony\Component\Filesystem\Filesystem; use Symfony\Component\Finder\Finder; +use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; -class SecurityControllerTest extends WallabagTestCase +class SecurityControllerTest extends WallabagCoreTestCase { public function testLogin() { diff --git a/src/Wallabag/CoreBundle/Tests/Controller/WallabagRestControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/WallabagRestControllerTest.php deleted file mode 100644 index c99070650..000000000 --- a/src/Wallabag/CoreBundle/Tests/Controller/WallabagRestControllerTest.php +++ /dev/null @@ -1,214 +0,0 @@ -format('Y-m-d\TH:i:s\Z'); - $digest = base64_encode(sha1(base64_decode($nonce).$created.$encryptedPassword, true)); - - return array( - 'HTTP_AUTHORIZATION' => 'Authorization profile="UsernameToken"', - 'HTTP_x-wsse' => 'X-WSSE: UsernameToken Username="'.$username.'", PasswordDigest="'.$digest.'", Nonce="'.$nonce.'", Created="'.$created.'"', - ); - } - - public function testGetSalt() - { - $client = $this->createClient(); - $client->request('GET', '/api/salts/admin.json'); - $this->assertEquals(200, $client->getResponse()->getStatusCode()); - $this->assertNotEmpty(json_decode($client->getResponse()->getContent())); - - $client->request('GET', '/api/salts/notfound.json'); - $this->assertEquals(404, $client->getResponse()->getStatusCode()); - } - - public function testWithBadHeaders() - { - $client = $this->createClient(); - - $entry = $client->getContainer() - ->get('doctrine.orm.entity_manager') - ->getRepository('WallabagCoreBundle:Entry') - ->findOneByIsArchived(false); - - if (!$entry) { - $this->markTestSkipped('No content found in db.'); - } - - $badHeaders = array( - 'HTTP_AUTHORIZATION' => 'Authorization profile="UsernameToken"', - 'HTTP_x-wsse' => 'X-WSSE: UsernameToken Username="admin", PasswordDigest="Wr0ngDig3st", Nonce="n0Nc3", Created="2015-01-01T13:37:00Z"', - ); - - $client->request('GET', '/api/entries/'.$entry->getId().'.json', array(), array(), $badHeaders); - $this->assertEquals(403, $client->getResponse()->getStatusCode()); - } - - public function testGetOneEntry() - { - $client = $this->createClient(); - $client->request('GET', '/api/salts/admin.json'); - $salt = json_decode($client->getResponse()->getContent()); - - $headers = $this->generateHeaders('admin', 'mypassword', $salt[0]); - - $entry = $client->getContainer() - ->get('doctrine.orm.entity_manager') - ->getRepository('WallabagCoreBundle:Entry') - ->findOneByIsArchived(false); - - if (!$entry) { - $this->markTestSkipped('No content found in db.'); - } - - $client->request('GET', '/api/entries/'.$entry->getId().'.json', array(), array(), $headers); - $this->assertContains($entry->getTitle(), $client->getResponse()->getContent()); - - $this->assertTrue( - $client->getResponse()->headers->contains( - 'Content-Type', - 'application/json' - ) - ); - } - - public function testGetEntries() - { - $client = $this->createClient(); - $client->request('GET', '/api/salts/admin.json'); - $salt = json_decode($client->getResponse()->getContent()); - - $headers = $this->generateHeaders('admin', 'mypassword', $salt[0]); - - $client->request('GET', '/api/entries', array(), array(), $headers); - - $this->assertEquals(200, $client->getResponse()->getStatusCode()); - - $this->assertGreaterThanOrEqual(1, count(json_decode($client->getResponse()->getContent()))); - - $this->assertContains('Google', $client->getResponse()->getContent()); - - $this->assertTrue( - $client->getResponse()->headers->contains( - 'Content-Type', - 'application/json' - ) - ); - } - - public function testDeleteEntry() - { - $client = $this->createClient(); - $client->request('GET', '/api/salts/admin.json'); - $salt = json_decode($client->getResponse()->getContent()); - - $headers = $this->generateHeaders('admin', 'mypassword', $salt[0]); - - $entry = $client->getContainer() - ->get('doctrine.orm.entity_manager') - ->getRepository('WallabagCoreBundle:Entry') - ->findOneByUser(1); - - if (!$entry) { - $this->markTestSkipped('No content found in db.'); - } - - $client->request('DELETE', '/api/entries/'.$entry->getId().'.json', array(), array(), $headers); - - $this->assertEquals(200, $client->getResponse()->getStatusCode()); - - // We'll try to delete this entry again - $client->request('GET', '/api/salts/admin.json'); - $salt = json_decode($client->getResponse()->getContent()); - - $headers = $this->generateHeaders('admin', 'mypassword', $salt[0]); - - $client->request('DELETE', '/api/entries/'.$entry->getId().'.json', array(), array(), $headers); - - $this->assertEquals(404, $client->getResponse()->getStatusCode()); - } - - public function testGetTagsEntry() - { - $client = $this->createClient(); - $client->request('GET', '/api/salts/admin.json'); - $salt = json_decode($client->getResponse()->getContent()); - $headers = $this->generateHeaders('admin', 'mypassword', $salt[0]); - - $entry = $client->getContainer() - ->get('doctrine.orm.entity_manager') - ->getRepository('WallabagCoreBundle:Entry') - ->findOneWithTags(1); - - $entry = $entry[0]; - - if (!$entry) { - $this->markTestSkipped('No content found in db.'); - } - - $tags = array(); - foreach ($entry->getTags() as $tag) { - $tags[] = array('id' => $tag->getId(), 'label' => $tag->getLabel()); - } - - $client->request('GET', '/api/entries/'.$entry->getId().'/tags', array(), array(), $headers); - - $this->assertEquals(json_encode($tags, JSON_HEX_QUOT), $client->getResponse()->getContent()); - } - - public function testPostTagsOnEntry() - { - $client = $this->createClient(); - $client->request('GET', '/api/salts/admin.json'); - $salt = json_decode($client->getResponse()->getContent()); - $headers = $this->generateHeaders('admin', 'mypassword', $salt[0]); - - $entry = $client->getContainer() - ->get('doctrine.orm.entity_manager') - ->getRepository('WallabagCoreBundle:Entry') - ->findOneByUser(1); - - if (!$entry) { - $this->markTestSkipped('No content found in db.'); - } - - $newTags = 'tag1,tag2,tag3'; - - $client->request('POST', '/api/entries/'.$entry->getId().'/tags', array('tags' => $newTags), array(), $headers); - - $this->assertEquals(200, $client->getResponse()->getStatusCode()); - - $entryDB = $client->getContainer() - ->get('doctrine.orm.entity_manager') - ->getRepository('WallabagCoreBundle:Entry') - ->find($entry->getId()); - - $tagsInDB = array(); - foreach ($entryDB->getTags()->toArray() as $tag) { - $tagsInDB[$tag->getId()] = $tag->getLabel(); - } - - foreach (explode(',', $newTags) as $tag) { - $this->assertContains($tag, $tagsInDB); - } - } -} diff --git a/src/Wallabag/CoreBundle/Tests/WallabagTestCase.php b/src/Wallabag/CoreBundle/Tests/WallabagCoreTestCase.php similarity index 91% rename from src/Wallabag/CoreBundle/Tests/WallabagTestCase.php rename to src/Wallabag/CoreBundle/Tests/WallabagCoreTestCase.php index 22016d8ed..e5096528c 100644 --- a/src/Wallabag/CoreBundle/Tests/WallabagTestCase.php +++ b/src/Wallabag/CoreBundle/Tests/WallabagCoreTestCase.php @@ -4,7 +4,7 @@ namespace Wallabag\CoreBundle\Tests; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -abstract class WallabagTestCase extends WebTestCase +abstract class WallabagCoreTestCase extends WebTestCase { private $client = null; diff --git a/src/Wallabag/CoreBundle/WallabagCoreBundle.php b/src/Wallabag/CoreBundle/WallabagCoreBundle.php index 1deab03a9..f5899e39c 100644 --- a/src/Wallabag/CoreBundle/WallabagCoreBundle.php +++ b/src/Wallabag/CoreBundle/WallabagCoreBundle.php @@ -3,16 +3,7 @@ namespace Wallabag\CoreBundle; use Symfony\Component\HttpKernel\Bundle\Bundle; -use Wallabag\CoreBundle\DependencyInjection\Security\Factory\WsseFactory; -use Symfony\Component\DependencyInjection\ContainerBuilder; class WallabagCoreBundle extends Bundle { - public function build(ContainerBuilder $container) - { - parent::build($container); - - $extension = $container->getExtension('security'); - $extension->addSecurityListenerFactory(new WsseFactory()); - } } From 9744e97131182f413b51a0ce671ff273fc28a0bb Mon Sep 17 00:00:00 2001 From: Jeremy Date: Wed, 1 Apr 2015 21:53:57 +0200 Subject: [PATCH 2/8] Fix tests --- .../Tests/Controller/WallabagRestControllerTest.php | 8 ++++---- .../CoreBundle/Controller/ConfigController.php | 2 +- .../Tests/Controller/ConfigControllerTest.php | 2 +- .../CoreBundle/Tests/Controller/RssControllerTest.php | 10 +++++----- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php b/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php index ea8ee072e..b36ae7c68 100644 --- a/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php +++ b/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php @@ -1,6 +1,6 @@ getResponse()->getContent(), true); $this->assertGreaterThanOrEqual(1, count($content)); - $this->assertEmpty($content['_embedded']['items']); - $this->assertEquals(0, $content['total']); + $this->assertNotEmpty($content['_embedded']['items']); + $this->assertGreaterThanOrEqual(1, $content['total']); $this->assertEquals(1, $content['page']); - $this->assertEquals(1, $content['pages']); + $this->assertGreaterThanOrEqual(1, $content['pages']); $this->assertTrue( $client->getResponse()->headers->contains( diff --git a/src/Wallabag/CoreBundle/Controller/ConfigController.php b/src/Wallabag/CoreBundle/Controller/ConfigController.php index 898c291f2..62ef3eeaf 100644 --- a/src/Wallabag/CoreBundle/Controller/ConfigController.php +++ b/src/Wallabag/CoreBundle/Controller/ConfigController.php @@ -133,7 +133,7 @@ class ConfigController extends Controller 'rss' => array( 'username' => $user->getUsername(), 'token' => $config->getRssToken(), - ) + ), )); } diff --git a/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php index 3c1589229..a01457808 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php +++ b/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php @@ -397,7 +397,7 @@ class ConfigControllerTest extends WallabagCoreTestCase ); $this->assertEquals(200, $client->getResponse()->getStatusCode()); - $content = json_decode($client->getResponse()->getContent(), true);; + $content = json_decode($client->getResponse()->getContent(), true); $this->assertArrayHasKey('token', $content); } diff --git a/src/Wallabag/CoreBundle/Tests/Controller/RssControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/RssControllerTest.php index 8f627b4b8..b7c162a77 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/RssControllerTest.php +++ b/src/Wallabag/CoreBundle/Tests/Controller/RssControllerTest.php @@ -2,9 +2,9 @@ namespace Wallabag\CoreBundle\Tests\Controller; -use Wallabag\CoreBundle\Tests\WallabagTestCase; +use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; -class RssControllerTest extends WallabagTestCase +class RssControllerTest extends WallabagCoreTestCase { public function validateDom($xml, $nb = null) { @@ -36,13 +36,13 @@ class RssControllerTest extends WallabagTestCase { return array( array( - '/admin/YZIOAUZIAO/unread.xml' + '/admin/YZIOAUZIAO/unread.xml', ), array( - '/wallace/YZIOAUZIAO/starred.xml' + '/wallace/YZIOAUZIAO/starred.xml', ), array( - '/wallace/YZIOAUZIAO/archives.xml' + '/wallace/YZIOAUZIAO/archives.xml', ), ); } From 132f614dee55634f83d858d30759226586807566 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Wed, 1 Apr 2015 21:54:22 +0200 Subject: [PATCH 3/8] Avoid / in feed token Of course, it breaks the url and the route matcher for each feed route --- src/Wallabag/CoreBundle/Tools/Utils.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Wallabag/CoreBundle/Tools/Utils.php b/src/Wallabag/CoreBundle/Tools/Utils.php index de97c796b..8fa744917 100644 --- a/src/Wallabag/CoreBundle/Tools/Utils.php +++ b/src/Wallabag/CoreBundle/Tools/Utils.php @@ -22,6 +22,7 @@ class Utils $token = substr(base64_encode(uniqid(mt_rand(), true)), 0, 20); } - return str_replace('+', '', $token); + // remove character which can broken the url + return str_replace(array('+', '/'), '', $token); } } From 1cbef2d3b5d7ff4df2f045a006bfdd640240f991 Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Sat, 4 Apr 2015 21:55:06 +0200 Subject: [PATCH 4/8] Enable debug on phpunit --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3c97a9da4..e31b19055 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,7 +35,7 @@ before_script: script: - ant prepare - - phpunit --exclude-group command-doctrine $PHPUNIT_FLAGS + - phpunit --exclude-group command-doctrine --debug $PHPUNIT_FLAGS after_script: - | From 9a014e48d65f30d0ca03bcc1eff5243421af52ca Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Sat, 30 May 2015 13:31:54 +0200 Subject: [PATCH 5/8] Disable coverage It takes ages to process and most of the time the build fail for "execution time" too long. Too much time already burned to investigate it. We'll investigate later, it's not a priority atm. --- .travis.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index e31b19055..8d0cf8170 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,16 +30,16 @@ install: - composer self-update # build coverage only on one build, to speed up results feedbacks -before_script: - - if [[ "$TRAVIS_PHP_VERSION" = "5.6" ]]; then PHPUNIT_FLAGS="--coverage-clover=coverage.clover"; else PHPUNIT_FLAGS=""; fi; +# before_script: + # - if [[ "$TRAVIS_PHP_VERSION" = "5.6" ]]; then PHPUNIT_FLAGS="--coverage-clover=coverage.clover"; else PHPUNIT_FLAGS=""; fi; script: - ant prepare - - phpunit --exclude-group command-doctrine --debug $PHPUNIT_FLAGS + - bin/phpunit --exclude-group command-doctrine --debug $PHPUNIT_FLAGS -after_script: - - | - if [ $TRAVIS_PHP_VERSION = '5.6' ]; then - wget https://scrutinizer-ci.com/ocular.phar - php ocular.phar code-coverage:upload --format=php-clover coverage.clover - fi +# after_script: + # - | + # if [ $TRAVIS_PHP_VERSION = '5.6' ]; then + # wget https://scrutinizer-ci.com/ocular.phar + # php ocular.phar code-coverage:upload --format=php-clover coverage.clover + # fi From 2f3c816579968591291a60fc41c9b32284592dc8 Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Sat, 30 May 2015 13:40:39 +0200 Subject: [PATCH 6/8] Update naming strategy since Doctrine 2.5 See https://github.com/doctrine/doctrine2/commit/20fb8270dc3c84eceaf90979644fdfbe0b2e615e --- .../Doctrine/Mapping/PrefixedNamingStrategy.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Wallabag/CoreBundle/Doctrine/Mapping/PrefixedNamingStrategy.php b/src/Wallabag/CoreBundle/Doctrine/Mapping/PrefixedNamingStrategy.php index 861a60ea4..724812fd8 100644 --- a/src/Wallabag/CoreBundle/Doctrine/Mapping/PrefixedNamingStrategy.php +++ b/src/Wallabag/CoreBundle/Doctrine/Mapping/PrefixedNamingStrategy.php @@ -72,4 +72,12 @@ class PrefixedNamingStrategy implements NamingStrategy { return strtolower($this->classToTableName($entityName) . '_' .($referencedColumnName ?: $this->referenceColumnName())); } + + /** + * {@inheritdoc} + */ + public function embeddedFieldToColumnName($propertyName, $embeddedColumnName, $className = null, $embeddedClassName = null) + { + return $propertyName.'_'.$embeddedColumnName; + } } From 399bd777d7900f532bfcfa367da88767739391bc Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Sat, 30 May 2015 13:42:38 +0200 Subject: [PATCH 7/8] Update deps --- app/SymfonyRequirements.php | 41 ++- composer.lock | 628 +++++++++++++++++++----------------- 2 files changed, 349 insertions(+), 320 deletions(-) diff --git a/app/SymfonyRequirements.php b/app/SymfonyRequirements.php index cbcf1c8e3..caabe407b 100644 --- a/app/SymfonyRequirements.php +++ b/app/SymfonyRequirements.php @@ -77,7 +77,7 @@ class Requirement } /** - * Returns the help text for resolving the problem + * Returns the help text for resolving the problem. * * @return string The help text */ @@ -119,10 +119,10 @@ class PhpIniRequirement extends Requirement * * @param string $cfgName The configuration name used for ini_get() * @param bool|callback $evaluation Either a boolean indicating whether the configuration should evaluate to true or false, - or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement + * or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement * @param bool $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false. - This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. - Example: You require a config to be true but PHP later removes this config and defaults it to true internally. + * This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. + * Example: You require a config to be true but PHP later removes this config and defaults it to true internally. * @param string|null $testMessage The message for testing the requirement (when null and $evaluation is a boolean a default message is derived) * @param string|null $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a boolean a default help is derived) * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) @@ -221,10 +221,10 @@ class RequirementCollection implements IteratorAggregate * * @param string $cfgName The configuration name used for ini_get() * @param bool|callback $evaluation Either a boolean indicating whether the configuration should evaluate to true or false, - or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement + * or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement * @param bool $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false. - This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. - Example: You require a config to be true but PHP later removes this config and defaults it to true internally. + * This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. + * Example: You require a config to be true but PHP later removes this config and defaults it to true internally. * @param string $testMessage The message for testing the requirement (when null and $evaluation is a boolean a default message is derived) * @param string $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a boolean a default help is derived) * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) @@ -239,10 +239,10 @@ class RequirementCollection implements IteratorAggregate * * @param string $cfgName The configuration name used for ini_get() * @param bool|callback $evaluation Either a boolean indicating whether the configuration should evaluate to true or false, - or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement + * or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement * @param bool $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false. - This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. - Example: You require a config to be true but PHP later removes this config and defaults it to true internally. + * This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. + * Example: You require a config to be true but PHP later removes this config and defaults it to true internally. * @param string $testMessage The message for testing the requirement (when null and $evaluation is a boolean a default message is derived) * @param string $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a boolean a default help is derived) * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) @@ -542,11 +542,22 @@ class SymfonyRequirements extends RequirementCollection /* optional recommendations follow */ - $this->addRecommendation( - file_get_contents(__FILE__) === file_get_contents(__DIR__.'/../vendor/sensio/distribution-bundle/Sensio/Bundle/DistributionBundle/Resources/skeleton/app/SymfonyRequirements.php'), - 'Requirements file should be up-to-date', - 'Your requirements file is outdated. Run composer install and re-check your configuration.' - ); + if (file_exists(__DIR__.'/../vendor/composer')) { + require_once __DIR__.'/../vendor/autoload.php'; + + try { + $r = new \ReflectionClass('Sensio\Bundle\DistributionBundle\SensioDistributionBundle'); + + $contents = file_get_contents(dirname($r->getFileName()).'/Resources/skeleton/app/SymfonyRequirements.php'); + } catch (\ReflectionException $e) { + $contents = ''; + } + $this->addRecommendation( + file_get_contents(__FILE__) === $contents, + 'Requirements file should be up-to-date', + 'Your requirements file is outdated. Run composer install and re-check your configuration.' + ); + } $this->addRecommendation( version_compare($installedPhpVersion, '5.3.4', '>='), diff --git a/composer.lock b/composer.lock index 66f4738b2..c44ffee07 100644 --- a/composer.lock +++ b/composer.lock @@ -8,16 +8,16 @@ "packages": [ { "name": "doctrine/annotations", - "version": "v1.2.3", + "version": "v1.2.4", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "eeda578cbe24a170331a1cfdf78be723412df7a4" + "reference": "b5202eb9e83f8db52e0e58867e0a46e63be8332e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/eeda578cbe24a170331a1cfdf78be723412df7a4", - "reference": "eeda578cbe24a170331a1cfdf78be723412df7a4", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/b5202eb9e83f8db52e0e58867e0a46e63be8332e", + "reference": "b5202eb9e83f8db52e0e58867e0a46e63be8332e", "shasum": "" }, "require": { @@ -72,20 +72,20 @@ "docblock", "parser" ], - "time": "2014-12-20 20:49:38" + "time": "2014-12-23 22:40:37" }, { "name": "doctrine/cache", - "version": "v1.4.0", + "version": "v1.4.1", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "2346085d2b027b233ae1d5de59b07440b9f288c8" + "reference": "c9eadeb743ac6199f7eec423cb9426bc518b7b03" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/2346085d2b027b233ae1d5de59b07440b9f288c8", - "reference": "2346085d2b027b233ae1d5de59b07440b9f288c8", + "url": "https://api.github.com/repos/doctrine/cache/zipball/c9eadeb743ac6199f7eec423cb9426bc518b7b03", + "reference": "c9eadeb743ac6199f7eec423cb9426bc518b7b03", "shasum": "" }, "require": { @@ -96,13 +96,13 @@ }, "require-dev": { "phpunit/phpunit": ">=3.7", - "predis/predis": "~0.8", + "predis/predis": "~1.0", "satooshi/php-coveralls": "~0.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "1.5.x-dev" } }, "autoload": { @@ -142,25 +142,28 @@ "cache", "caching" ], - "time": "2015-01-15 20:38:55" + "time": "2015-04-15 00:11:59" }, { "name": "doctrine/collections", - "version": "v1.2", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "b99c5c46c87126201899afe88ec490a25eedd6a2" + "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/b99c5c46c87126201899afe88ec490a25eedd6a2", - "reference": "b99c5c46c87126201899afe88ec490a25eedd6a2", + "url": "https://api.github.com/repos/doctrine/collections/zipball/6c1e4eef75f310ea1b3e30945e9f06e652128b8a", + "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a", "shasum": "" }, "require": { "php": ">=5.3.2" }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, "type": "library", "extra": { "branch-alias": { @@ -177,17 +180,6 @@ "MIT" ], "authors": [ - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/", - "role": "Creator" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -196,11 +188,17 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, { "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" + "email": "schmittjoh@gmail.com" } ], "description": "Collections Abstraction library", @@ -210,20 +208,20 @@ "collections", "iterator" ], - "time": "2014-02-03 23:07:43" + "time": "2015-04-14 22:21:58" }, { "name": "doctrine/common", - "version": "v2.4.2", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/common.git", - "reference": "5db6ab40e4c531f14dad4ca96a394dfce5d4255b" + "reference": "cd8daf2501e10c63dced7b8b9b905844316ae9d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/5db6ab40e4c531f14dad4ca96a394dfce5d4255b", - "reference": "5db6ab40e4c531f14dad4ca96a394dfce5d4255b", + "url": "https://api.github.com/repos/doctrine/common/zipball/cd8daf2501e10c63dced7b8b9b905844316ae9d3", + "reference": "cd8daf2501e10c63dced7b8b9b905844316ae9d3", "shasum": "" }, "require": { @@ -240,7 +238,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.4.x-dev" + "dev-master": "2.6.x-dev" } }, "autoload": { @@ -253,17 +251,6 @@ "MIT" ], "authors": [ - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/", - "role": "Creator" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -272,11 +259,17 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, { "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" + "email": "schmittjoh@gmail.com" } ], "description": "Common Library for Doctrine projects", @@ -288,7 +281,7 @@ "persistence", "spl" ], - "time": "2014-05-21 19:28:51" + "time": "2015-04-02 19:55:44" }, { "name": "doctrine/dbal", @@ -363,16 +356,16 @@ }, { "name": "doctrine/doctrine-bundle", - "version": "v1.3.0", + "version": "v1.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "3beb3a780485ab01f86941f4892cd23ef8c39c6b" + "reference": "0b9e27037c4fdbad515ee5ec89842e9091a6480f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/3beb3a780485ab01f86941f4892cd23ef8c39c6b", - "reference": "3beb3a780485ab01f86941f4892cd23ef8c39c6b", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/0b9e27037c4fdbad515ee5ec89842e9091a6480f", + "reference": "0b9e27037c4fdbad515ee5ec89842e9091a6480f", "shasum": "" }, "require": { @@ -380,18 +373,17 @@ "doctrine/doctrine-cache-bundle": "~1.0", "jdorn/sql-formatter": "~1.1", "php": ">=5.3.2", + "symfony/console": "~2.3", "symfony/doctrine-bridge": "~2.2", - "symfony/framework-bundle": "~2.2" + "symfony/framework-bundle": "~2.3" }, "require-dev": { "doctrine/orm": "~2.3", - "phpunit/php-code-coverage": "~1.2", - "phpunit/phpunit": "~3.7", - "phpunit/phpunit-mock-objects": "~1.2", + "phpunit/phpunit": "~4", "satooshi/php-coveralls": "~0.6.1", "symfony/validator": "~2.2", "symfony/yaml": "~2.2", - "twig/twig": "~1" + "twig/twig": "~1.10" }, "suggest": { "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", @@ -400,7 +392,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "1.5.x-dev" } }, "autoload": { @@ -438,7 +430,7 @@ "orm", "persistence" ], - "time": "2014-11-28 08:32:03" + "time": "2015-05-28 12:27:15" }, { "name": "doctrine/doctrine-cache-bundle", @@ -591,6 +583,60 @@ ], "time": "2014-12-20 21:24:13" }, + { + "name": "doctrine/instantiator", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f976e5de371104877ebc89bd8fecb0019ed9c119", + "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "2.0.*@ALPHA" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Instantiator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2014-10-13 12:58:55" + }, { "name": "doctrine/lexer", "version": "v1.0.1", @@ -647,26 +693,30 @@ }, { "name": "doctrine/orm", - "version": "v2.4.7", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/doctrine2.git", - "reference": "2bc4ff3cab2ae297bcd05f2e619d42e6a7ca9e68" + "reference": "aa80c7d2c55a372f5f9f825f5c66dbda53a6e3fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/2bc4ff3cab2ae297bcd05f2e619d42e6a7ca9e68", - "reference": "2bc4ff3cab2ae297bcd05f2e619d42e6a7ca9e68", + "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/aa80c7d2c55a372f5f9f825f5c66dbda53a6e3fe", + "reference": "aa80c7d2c55a372f5f9f825f5c66dbda53a6e3fe", "shasum": "" }, "require": { - "doctrine/collections": "~1.1", - "doctrine/dbal": "~2.4", + "doctrine/cache": "~1.4", + "doctrine/collections": "~1.2", + "doctrine/common": ">=2.5-dev,<2.6-dev", + "doctrine/dbal": ">=2.5-dev,<2.6-dev", + "doctrine/instantiator": "~1.0.1", "ext-pdo": "*", - "php": ">=5.3.2", - "symfony/console": "~2.0" + "php": ">=5.4", + "symfony/console": "~2.5" }, "require-dev": { + "phpunit/phpunit": "~4.0", "satooshi/php-coveralls": "dev-master", "symfony/yaml": "~2.1" }, @@ -680,7 +730,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.4.x-dev" + "dev-master": "2.6.x-dev" } }, "autoload": { @@ -716,7 +766,7 @@ "database", "orm" ], - "time": "2014-12-16 13:45:01" + "time": "2015-04-02 20:40:18" }, { "name": "ezyang/htmlpurifier", @@ -764,50 +814,56 @@ }, { "name": "friendsofsymfony/rest-bundle", - "version": "1.5.3", + "version": "1.6.0", "target-dir": "FOS/RestBundle", "source": { "type": "git", "url": "https://github.com/FriendsOfSymfony/FOSRestBundle.git", - "reference": "fdd21c4c0cb6222ae37efc9362c6a96bd1432412" + "reference": "832d08199cadf1770ec43c2cba68b42b4d5e7f9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfSymfony/FOSRestBundle/zipball/fdd21c4c0cb6222ae37efc9362c6a96bd1432412", - "reference": "fdd21c4c0cb6222ae37efc9362c6a96bd1432412", + "url": "https://api.github.com/repos/FriendsOfSymfony/FOSRestBundle/zipball/832d08199cadf1770ec43c2cba68b42b4d5e7f9f", + "reference": "832d08199cadf1770ec43c2cba68b42b4d5e7f9f", "shasum": "" }, "require": { "doctrine/inflector": "~1.0", "php": ">=5.3.9", "psr/log": "~1.0", - "symfony/framework-bundle": "~2.2", + "symfony/framework-bundle": "~2.3", + "symfony/http-kernel": "~2.3,>=2.3.24", "willdurand/jsonp-callback-validator": "~1.0", "willdurand/negotiation": "~1.2" }, "conflict": { "jms/serializer": "<0.12", - "jms/serializer-bundle": "<0.11" + "jms/serializer-bundle": "<0.11", + "symfony/validator": ">=2.5.0,<2.5.5" }, "require-dev": { + "jms/serializer": "~0.13", "jms/serializer-bundle": "~0.12", - "sensio/framework-extra-bundle": "~2.2", - "symfony/form": "~2.2", - "symfony/security": "~2.2", - "symfony/serializer": "~2.2", - "symfony/validator": "~2.2", - "symfony/yaml": "~2.2" + "phpoption/phpoption": "~1.1.0", + "sensio/framework-extra-bundle": "~3.0", + "symfony/browser-kit": "~2.3", + "symfony/dependency-injection": "~2.3", + "symfony/form": "~2.3", + "symfony/security": "~2.3", + "symfony/serializer": "~2.3", + "symfony/validator": "~2.3", + "symfony/yaml": "~2.3" }, "suggest": { "jms/serializer-bundle": "Add support for advanced serialization capabilities, recommended, requires ~0.12", - "sensio/framework-extra-bundle": "Add support for route annotations and the view response listener", - "symfony/serializer": "Add support for basic serialization capabilities and xml decoding, requires ~2.2", - "symfony/validator": "Add support for validation capabilities in the ParamFetcher, requires ~2.2" + "sensio/framework-extra-bundle": "Add support for route annotations and the view response listener, requires ~3.0", + "symfony/serializer": "Add support for basic serialization capabilities and xml decoding, requires ~2.3", + "symfony/validator": "Add support for validation capabilities in the ParamFetcher, requires ~2.3" }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -838,7 +894,7 @@ "keywords": [ "rest" ], - "time": "2015-02-16 15:26:12" + "time": "2015-05-22 20:17:35" }, { "name": "htmlawed/htmlawed", @@ -846,12 +902,12 @@ "source": { "type": "git", "url": "https://github.com/kesar/HTMLawed.git", - "reference": "9d292af5f4c288aa68f38b87f5d88c8214f5f233" + "reference": "f842e793614bdf3af70a62b1e70570e824dc9ab6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kesar/HTMLawed/zipball/9d292af5f4c288aa68f38b87f5d88c8214f5f233", - "reference": "9d292af5f4c288aa68f38b87f5d88c8214f5f233", + "url": "https://api.github.com/repos/kesar/HTMLawed/zipball/f842e793614bdf3af70a62b1e70570e824dc9ab6", + "reference": "f842e793614bdf3af70a62b1e70570e824dc9ab6", "shasum": "" }, "require": { @@ -868,7 +924,14 @@ "GPL-2.0+", "LGPL-3.0" ], - "description": "htmLawed - Process text with HTML markup to make it more compliant with HTML standards and administrative policies", + "authors": [ + { + "name": "Santosh Patnaik", + "homepage": "http://www.bioinformatics.org/people/index.php?user_hash=558b661f92d0ff7b", + "role": "Developer" + } + ], + "description": "htmLawed - Process text with HTML markup to make it more compliant with HTML standards and administrative policies", "homepage": "http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/", "keywords": [ "HTMLtidy", @@ -877,7 +940,7 @@ "strip", "tags" ], - "time": "2014-01-05 13:06:52" + "time": "2015-04-12 19:37:20" }, { "name": "incenteev/composer-parameter-handler", @@ -1437,16 +1500,16 @@ }, { "name": "monolog/monolog", - "version": "1.13.0", + "version": "1.13.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "c41c218e239b50446fd883acb1ecfd4b770caeae" + "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c41c218e239b50446fd883acb1ecfd4b770caeae", - "reference": "c41c218e239b50446fd883acb1ecfd4b770caeae", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c31a2c4e8db5da8b46c74cf275d7f109c0f249ac", + "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac", "shasum": "" }, "require": { @@ -1506,21 +1569,21 @@ "logging", "psr-3" ], - "time": "2015-03-05 01:12:12" + "time": "2015-03-09 09:58:04" }, { "name": "nelmio/api-doc-bundle", - "version": "2.7.0", + "version": "2.9.0", "target-dir": "Nelmio/ApiDocBundle", "source": { "type": "git", "url": "https://github.com/nelmio/NelmioApiDocBundle.git", - "reference": "3fdb2d4a819d1f71bff0c45880af705a8b124955" + "reference": "de31760fd84a45fadbb4fe24db050b5e29ea70d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/3fdb2d4a819d1f71bff0c45880af705a8b124955", - "reference": "3fdb2d4a819d1f71bff0c45880af705a8b124955", + "url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/de31760fd84a45fadbb4fe24db050b5e29ea70d1", + "reference": "de31760fd84a45fadbb4fe24db050b5e29ea70d1", "shasum": "" }, "require": { @@ -1534,16 +1597,19 @@ "jms/serializer-bundle": "<0.11" }, "require-dev": { + "dunglas/api-bundle": "dev-master", "friendsofsymfony/rest-bundle": "~1.0", "jms/serializer-bundle": ">=0.11", - "sensio/framework-extra-bundle": "~2.1", + "sensio/framework-extra-bundle": "~3.0", "symfony/browser-kit": "~2.1", "symfony/css-selector": "~2.1", "symfony/form": "~2.1", + "symfony/serializer": "~2.7@dev", "symfony/validator": "~2.1", "symfony/yaml": "~2.1" }, "suggest": { + "dunglas/api-bundle": "For making use of resources definitions of DunglasApiBundle.", "friendsofsymfony/rest-bundle": "For making use of REST information in the doc.", "jms/serializer": "For making use of serializer information in the doc.", "symfony/form": "For using form definitions as input.", @@ -1552,7 +1618,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "2.7.x-dev" + "dev-master": "2.9.x-dev" } }, "autoload": { @@ -1581,7 +1647,7 @@ "documentation", "rest" ], - "time": "2014-07-30 09:11:08" + "time": "2015-05-16 17:16:14" }, { "name": "nelmio/cors-bundle", @@ -1906,17 +1972,17 @@ }, { "name": "sensio/distribution-bundle", - "version": "v3.0.18", + "version": "v3.0.25", "target-dir": "Sensio/Bundle/DistributionBundle", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioDistributionBundle.git", - "reference": "ac026149ffb1d3a5c893290d2d3ca8795013de08" + "reference": "01931139b0f067a4016d5d56e82c2b3086533b89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/ac026149ffb1d3a5c893290d2d3ca8795013de08", - "reference": "ac026149ffb1d3a5c893290d2d3ca8795013de08", + "url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/01931139b0f067a4016d5d56e82c2b3086533b89", + "reference": "01931139b0f067a4016d5d56e82c2b3086533b89", "shasum": "" }, "require": { @@ -1962,21 +2028,20 @@ "configuration", "distribution" ], - "time": "2015-02-27 12:59:18" + "time": "2015-05-29 22:35:41" }, { "name": "sensio/framework-extra-bundle", - "version": "v3.0.4", - "target-dir": "Sensio/Bundle/FrameworkExtraBundle", + "version": "v3.0.8", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", - "reference": "b3bc3e67c8b6b68b18d727012183520d35ee762a" + "reference": "a30fc18bf147bc25faf6b1d54bf55cfad4b63cba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/b3bc3e67c8b6b68b18d727012183520d35ee762a", - "reference": "b3bc3e67c8b6b68b18d727012183520d35ee762a", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/a30fc18bf147bc25faf6b1d54bf55cfad4b63cba", + "reference": "a30fc18bf147bc25faf6b1d54bf55cfad4b63cba", "shasum": "" }, "require": { @@ -1989,6 +2054,7 @@ }, "suggest": { "symfony/expression-language": "", + "symfony/psr-http-message-bridge": "To use the PSR-7 converters", "symfony/security-bundle": "" }, "type": "symfony-bundle", @@ -1998,8 +2064,8 @@ } }, "autoload": { - "psr-0": { - "Sensio\\Bundle\\FrameworkExtraBundle": "" + "psr-4": { + "Sensio\\Bundle\\FrameworkExtraBundle\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -2017,20 +2083,20 @@ "annotations", "controllers" ], - "time": "2014-12-02 09:52:52" + "time": "2015-05-29 18:27:23" }, { "name": "sensiolabs/security-checker", - "version": "v2.0.1", + "version": "v2.0.5", "source": { "type": "git", "url": "https://github.com/sensiolabs/security-checker.git", - "reference": "134cecf1c61256bd8e973e11376891a724543820" + "reference": "2c2a71f1c77d9765c12638c4724d9ca23658a810" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/134cecf1c61256bd8e973e11376891a724543820", - "reference": "134cecf1c61256bd8e973e11376891a724543820", + "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/2c2a71f1c77d9765c12638c4724d9ca23658a810", + "reference": "2c2a71f1c77d9765c12638c4724d9ca23658a810", "shasum": "" }, "require": { @@ -2062,7 +2128,7 @@ } ], "description": "A security checker for your composer.lock", - "time": "2015-01-26 16:25:19" + "time": "2015-05-28 14:22:40" }, { "name": "simplepie/simplepie", @@ -2120,16 +2186,16 @@ }, { "name": "swiftmailer/swiftmailer", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "c5f963e7f9d6f6438fda4f22d5cc2db296ec621a" + "reference": "31454f258f10329ae7c48763eb898a75c39e0a9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/c5f963e7f9d6f6438fda4f22d5cc2db296ec621a", - "reference": "c5f963e7f9d6f6438fda4f22d5cc2db296ec621a", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/31454f258f10329ae7c48763eb898a75c39e0a9f", + "reference": "31454f258f10329ae7c48763eb898a75c39e0a9f", "shasum": "" }, "require": { @@ -2141,7 +2207,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.3-dev" + "dev-master": "5.4-dev" } }, "autoload": { @@ -2168,7 +2234,7 @@ "mail", "mailer" ], - "time": "2014-12-05 14:17:14" + "time": "2015-03-14 06:06:39" }, { "name": "symfony/assetic-bundle", @@ -2353,16 +2419,16 @@ }, { "name": "symfony/symfony", - "version": "v2.6.4", + "version": "v2.6.9", "source": { "type": "git", "url": "https://github.com/symfony/symfony.git", - "reference": "23b647f1e4eeb24a457d3c47f5f5046377d5a3bf" + "reference": "b06539573ccf64dd3a62852685f052553d02c5ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/symfony/zipball/23b647f1e4eeb24a457d3c47f5f5046377d5a3bf", - "reference": "23b647f1e4eeb24a457d3c47f5f5046377d5a3bf", + "url": "https://api.github.com/repos/symfony/symfony/zipball/b06539573ccf64dd3a62852685f052553d02c5ba", + "reference": "b06539573ccf64dd3a62852685f052553d02c5ba", "shasum": "" }, "require": { @@ -2426,7 +2492,8 @@ "ircmaxell/password-compat": "~1.0", "monolog/monolog": "~1.11", "ocramius/proxy-manager": "~0.4|~1.0", - "propel/propel1": "~1.6" + "propel/propel1": "~1.6", + "symfony/phpunit-bridge": "~2.7" }, "type": "library", "extra": { @@ -2451,34 +2518,34 @@ "MIT" ], "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], "description": "The Symfony PHP framework", - "homepage": "http://symfony.com", + "homepage": "https://symfony.com", "keywords": [ "framework" ], - "time": "2015-02-02 18:02:30" + "time": "2015-05-29 22:55:07" }, { "name": "tecnick.com/tcpdf", - "version": "6.2.6", + "version": "6.2.8", "source": { "type": "git", "url": "https://github.com/tecnickcom/TCPDF.git", - "reference": "a2e8f5b505a7a14a4ed960313c4baf699fd1f4bb" + "reference": "3dee9e7f3a414875fd1d9f4f1dfc2433493a86d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/a2e8f5b505a7a14a4ed960313c4baf699fd1f4bb", - "reference": "a2e8f5b505a7a14a4ed960313c4baf699fd1f4bb", + "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/3dee9e7f3a414875fd1d9f4f1dfc2433493a86d2", + "reference": "3dee9e7f3a414875fd1d9f4f1dfc2433493a86d2", "shasum": "" }, "require": { @@ -2528,7 +2595,7 @@ "pdf417", "qrcode" ], - "time": "2015-01-28 18:51:40" + "time": "2015-04-29 16:13:58" }, { "name": "twig/extensions", @@ -2584,20 +2651,20 @@ }, { "name": "twig/twig", - "version": "v1.18.0", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "4cf7464348e7f9893a93f7096a90b73722be99cf" + "reference": "9f70492f44398e276d1b81c1b43adfe6751c7b7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/4cf7464348e7f9893a93f7096a90b73722be99cf", - "reference": "4cf7464348e7f9893a93f7096a90b73722be99cf", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/9f70492f44398e276d1b81c1b43adfe6751c7b7f", + "reference": "9f70492f44398e276d1b81c1b43adfe6751c7b7f", "shasum": "" }, "require": { - "php": ">=5.2.4" + "php": ">=5.2.7" }, "type": "library", "extra": { @@ -2637,7 +2704,7 @@ "keywords": [ "templating" ], - "time": "2015-01-25 17:32:08" + "time": "2015-04-19 08:30:27" }, { "name": "umpirsky/twig-gettext-extractor", @@ -2713,7 +2780,7 @@ "description": "Libraries from @fivefilters.", "homepage": "https://github.com/wallabag/Fivefilters_Libraries", "support": { - "source": "https://github.com/wallabag/Fivefilters_Libraries/tree/master", + "source": "https://github.com/wallabag/Fivefilters_Libraries/tree/1.0.0", "issues": "https://github.com/wallabag/Fivefilters_Libraries/issues" }, "time": "2015-01-19 20:19:28" @@ -2758,7 +2825,7 @@ "description": "PHP Classes for dynamically generating EPub files.", "homepage": "https://github.com/wallabag/PHPePub", "support": { - "source": "https://github.com/wallabag/PHPePub/tree/master" + "source": "https://github.com/wallabag/PHPePub/tree/2.1.0" }, "time": "2015-01-19 11:44:19" }, @@ -2795,7 +2862,7 @@ "description": "A simple and smart (or stupid) php5 snippets repository", "homepage": "https://github.com/wallabag/kriss_php5", "support": { - "source": "https://github.com/wallabag/kriss_php5/tree/master" + "source": "https://github.com/wallabag/kriss_php5/tree/1.0.0" }, "time": "2015-01-18 21:21:43" }, @@ -2832,7 +2899,7 @@ "description": "Paginate record sets, not tied in directly to a database.", "homepage": "https://github.com/wallabag/pagination", "support": { - "source": "https://github.com/wallabag/pagination/tree/master" + "source": "https://github.com/wallabag/pagination/tree/1.0.0" }, "time": "2015-01-19 09:24:39" }, @@ -2878,7 +2945,7 @@ "sessions" ], "support": { - "source": "https://github.com/wallabag/PHP-Flash-Messages/tree/master" + "source": "https://github.com/wallabag/PHP-Flash-Messages/tree/1.0.0" }, "time": "2015-01-18 19:51:55" }, @@ -2932,7 +2999,7 @@ "html" ], "support": { - "source": "https://github.com/wallabag/php-readability/tree/master", + "source": "https://github.com/wallabag/php-readability/tree/1.0.0", "issues": "https://github.com/wallabag/php-readability/issues" }, "time": "2015-01-19 12:25:38" @@ -2970,29 +3037,30 @@ "description": "An experimental Mobipocket file creator in PHP.", "homepage": "https://github.com/wallabag/phpMobi", "support": { - "source": "https://github.com/wallabag/phpMobi/tree/master" + "source": "https://github.com/wallabag/phpMobi/tree/1.0.0" }, "time": "2015-01-19 12:43:17" }, { "name": "willdurand/hateoas", - "version": "v2.4.0", + "version": "v2.6.0", "source": { "type": "git", "url": "https://github.com/willdurand/Hateoas.git", - "reference": "89fe19ad9ce25f15323d76ac22272282ae8a9f14" + "reference": "fc0869381d6934e5d430084154584761297caa6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/willdurand/Hateoas/zipball/89fe19ad9ce25f15323d76ac22272282ae8a9f14", - "reference": "89fe19ad9ce25f15323d76ac22272282ae8a9f14", + "url": "https://api.github.com/repos/willdurand/Hateoas/zipball/fc0869381d6934e5d430084154584761297caa6c", + "reference": "fc0869381d6934e5d430084154584761297caa6c", "shasum": "" }, "require": { "doctrine/annotations": "~1.0", "doctrine/common": "~2.0", "jms/metadata": "~1.1", - "jms/serializer": "~0.13@dev", + "jms/serializer": "~0.13", + "php": ">=5.3", "symfony/expression-language": "~2.4" }, "require-dev": { @@ -3013,7 +3081,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.4-dev" + "dev-master": "2.6-dev" } }, "autoload": { @@ -3036,7 +3104,7 @@ } ], "description": "A PHP library to support implementing representations for HATEOAS REST web services", - "time": "2015-02-24 15:28:33" + "time": "2015-05-21 21:57:34" }, { "name": "willdurand/hateoas-bundle", @@ -3045,12 +3113,12 @@ "source": { "type": "git", "url": "https://github.com/willdurand/BazingaHateoasBundle.git", - "reference": "3c86e8080e8a229365a0ce91818da6fe6562376b" + "reference": "a99f48ea5004a89ecf0927229d9c912fed9fa4ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/willdurand/BazingaHateoasBundle/zipball/3c86e8080e8a229365a0ce91818da6fe6562376b", - "reference": "3c86e8080e8a229365a0ce91818da6fe6562376b", + "url": "https://api.github.com/repos/willdurand/BazingaHateoasBundle/zipball/a99f48ea5004a89ecf0927229d9c912fed9fa4ab", + "reference": "a99f48ea5004a89ecf0927229d9c912fed9fa4ab", "shasum": "" }, "require": { @@ -3088,7 +3156,7 @@ "HATEOAS", "rest" ], - "time": "2015-02-19 16:27:51" + "time": "2015-03-12 15:49:24" }, { "name": "willdurand/jsonp-callback-validator", @@ -3183,24 +3251,27 @@ "packages-dev": [ { "name": "doctrine/data-fixtures", - "version": "v1.0.0", + "version": "v1.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/data-fixtures.git", - "reference": "b4a135c7db56ecc4602b54a2184368f440cac33e" + "reference": "bd44f6b6e40247b6530bc8abe802e4e4d914976a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/b4a135c7db56ecc4602b54a2184368f440cac33e", - "reference": "b4a135c7db56ecc4602b54a2184368f440cac33e", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/bd44f6b6e40247b6530bc8abe802e4e4d914976a", + "reference": "bd44f6b6e40247b6530bc8abe802e4e4d914976a", "shasum": "" }, "require": { - "doctrine/common": ">=2.2,<2.5-dev", + "doctrine/common": "~2.2", "php": ">=5.3.2" }, + "conflict": { + "doctrine/orm": "< 2.4" + }, "require-dev": { - "doctrine/orm": ">=2.2,<2.5-dev" + "doctrine/orm": "~2.4" }, "suggest": { "doctrine/mongodb-odm": "For loading MongoDB ODM fixtures", @@ -3210,7 +3281,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { @@ -3225,9 +3296,7 @@ "authors": [ { "name": "Jonathan Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/", - "role": "Creator" + "email": "jonwage@gmail.com" } ], "description": "Data Fixtures for all Doctrine Object Managers", @@ -3235,7 +3304,7 @@ "keywords": [ "database" ], - "time": "2013-07-10 17:04:07" + "time": "2015-03-30 12:14:13" }, { "name": "doctrine/doctrine-fixtures-bundle", @@ -3295,60 +3364,6 @@ ], "time": "2015-01-19 02:21:37" }, - { - "name": "doctrine/instantiator", - "version": "1.0.4", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f976e5de371104877ebc89bd8fecb0019ed9c119", - "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119", - "shasum": "" - }, - "require": { - "php": ">=5.3,<8.0-DEV" - }, - "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "2.0.*@ALPHA" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Instantiator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", - "keywords": [ - "constructor", - "instantiate" - ], - "time": "2014-10-13 12:58:55" - }, { "name": "phpdocumentor/reflection-docblock", "version": "2.0.4", @@ -3400,21 +3415,22 @@ }, { "name": "phpspec/prophecy", - "version": "v1.3.1", + "version": "v1.4.1", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "9ca52329bcdd1500de24427542577ebf3fc2f1c9" + "reference": "3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/9ca52329bcdd1500de24427542577ebf3fc2f1c9", - "reference": "9ca52329bcdd1500de24427542577ebf3fc2f1c9", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373", + "reference": "3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373", "shasum": "" }, "require": { - "doctrine/instantiator": "~1.0,>=1.0.2", - "phpdocumentor/reflection-docblock": "~2.0" + "doctrine/instantiator": "^1.0.2", + "phpdocumentor/reflection-docblock": "~2.0", + "sebastian/comparator": "~1.1" }, "require-dev": { "phpspec/phpspec": "~2.0" @@ -3422,7 +3438,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.4.x-dev" } }, "autoload": { @@ -3446,7 +3462,7 @@ } ], "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "http://phpspec.org", + "homepage": "https://github.com/phpspec/prophecy", "keywords": [ "Double", "Dummy", @@ -3455,20 +3471,20 @@ "spy", "stub" ], - "time": "2014-11-17 16:23:49" + "time": "2015-04-27 22:15:08" }, { "name": "phpunit/php-code-coverage", - "version": "2.0.15", + "version": "2.0.17", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "34cc484af1ca149188d0d9e91412191e398e0b67" + "reference": "c4e8e7725e351184a76544634855b8a9c405a6e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/34cc484af1ca149188d0d9e91412191e398e0b67", - "reference": "34cc484af1ca149188d0d9e91412191e398e0b67", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c4e8e7725e351184a76544634855b8a9c405a6e3", + "reference": "c4e8e7725e351184a76544634855b8a9c405a6e3", "shasum": "" }, "require": { @@ -3517,35 +3533,37 @@ "testing", "xunit" ], - "time": "2015-01-24 10:06:35" + "time": "2015-05-25 05:11:59" }, { "name": "phpunit/php-file-iterator", - "version": "1.3.4", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb" + "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/acd690379117b042d1c8af1fafd61bde001bf6bb", - "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a923bb15680d0089e2316f7a4af8f437046e96bb", + "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb", "shasum": "" }, "require": { "php": ">=5.3.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, "autoload": { "classmap": [ - "File/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ "BSD-3-Clause" ], @@ -3562,7 +3580,7 @@ "filesystem", "iterator" ], - "time": "2013-10-10 15:34:57" + "time": "2015-04-02 05:19:05" }, { "name": "phpunit/php-text-template", @@ -3654,16 +3672,16 @@ }, { "name": "phpunit/php-token-stream", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "db32c18eba00b121c145575fcbcd4d4d24e6db74" + "reference": "eab81d02569310739373308137284e0158424330" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/db32c18eba00b121c145575fcbcd4d4d24e6db74", - "reference": "db32c18eba00b121c145575fcbcd4d4d24e6db74", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/eab81d02569310739373308137284e0158424330", + "reference": "eab81d02569310739373308137284e0158424330", "shasum": "" }, "require": { @@ -3699,20 +3717,20 @@ "keywords": [ "tokenizer" ], - "time": "2015-01-17 09:51:32" + "time": "2015-04-08 04:46:07" }, { "name": "phpunit/phpunit", - "version": "4.5.0", + "version": "4.6.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "5b578d3865a9128b9c209b011fda6539ec06e7a5" + "reference": "816d12536a7a032adc3b68737f82cfbbf98b79c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/5b578d3865a9128b9c209b011fda6539ec06e7a5", - "reference": "5b578d3865a9128b9c209b011fda6539ec06e7a5", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/816d12536a7a032adc3b68737f82cfbbf98b79c1", + "reference": "816d12536a7a032adc3b68737f82cfbbf98b79c1", "shasum": "" }, "require": { @@ -3722,19 +3740,19 @@ "ext-reflection": "*", "ext-spl": "*", "php": ">=5.3.3", - "phpspec/prophecy": "~1.3.1", - "phpunit/php-code-coverage": "~2.0", - "phpunit/php-file-iterator": "~1.3.2", + "phpspec/prophecy": "~1.3,>=1.3.1", + "phpunit/php-code-coverage": "~2.0,>=2.0.11", + "phpunit/php-file-iterator": "~1.4", "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "~1.0.2", + "phpunit/php-timer": "~1.0", "phpunit/phpunit-mock-objects": "~2.3", "sebastian/comparator": "~1.1", - "sebastian/diff": "~1.1", + "sebastian/diff": "~1.2", "sebastian/environment": "~1.2", "sebastian/exporter": "~1.2", "sebastian/global-state": "~1.0", "sebastian/version": "~1.0", - "symfony/yaml": "~2.0" + "symfony/yaml": "~2.1|~3.0" }, "suggest": { "phpunit/php-invoker": "~1.1" @@ -3745,7 +3763,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.5.x-dev" + "dev-master": "4.6.x-dev" } }, "autoload": { @@ -3771,29 +3789,29 @@ "testing", "xunit" ], - "time": "2015-02-05 15:51:19" + "time": "2015-05-29 06:00:03" }, { "name": "phpunit/phpunit-mock-objects", - "version": "2.3.0", + "version": "2.3.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "c63d2367247365f688544f0d500af90a11a44c65" + "reference": "253c005852591fd547fc18cd5b7b43a1ec82d8f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/c63d2367247365f688544f0d500af90a11a44c65", - "reference": "c63d2367247365f688544f0d500af90a11a44c65", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/253c005852591fd547fc18cd5b7b43a1ec82d8f7", + "reference": "253c005852591fd547fc18cd5b7b43a1ec82d8f7", "shasum": "" }, "require": { - "doctrine/instantiator": "~1.0,>=1.0.1", + "doctrine/instantiator": "~1.0,>=1.0.2", "php": ">=5.3.3", "phpunit/php-text-template": "~1.2" }, "require-dev": { - "phpunit/phpunit": "~4.3" + "phpunit/phpunit": "~4.4" }, "suggest": { "ext-soap": "*" @@ -3826,7 +3844,7 @@ "mock", "xunit" ], - "time": "2014-10-03 05:12:11" + "time": "2015-05-29 05:19:18" }, { "name": "sebastian/comparator", @@ -3894,16 +3912,16 @@ }, { "name": "sebastian/diff", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "5843509fed39dee4b356a306401e9dd1a931fec7" + "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/5843509fed39dee4b356a306401e9dd1a931fec7", - "reference": "5843509fed39dee4b356a306401e9dd1a931fec7", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3", + "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3", "shasum": "" }, "require": { @@ -3915,7 +3933,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.3-dev" } }, "autoload": { @@ -3942,32 +3960,32 @@ "keywords": [ "diff" ], - "time": "2014-08-15 10:29:00" + "time": "2015-02-22 15:13:53" }, { "name": "sebastian/environment", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "6e6c71d918088c251b181ba8b3088af4ac336dd7" + "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6e6c71d918088c251b181ba8b3088af4ac336dd7", - "reference": "6e6c71d918088c251b181ba8b3088af4ac336dd7", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5a8c7d31914337b69923db26c4221b81ff5a196e", + "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "phpunit/phpunit": "~4.3" + "phpunit/phpunit": "~4.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { @@ -3992,7 +4010,7 @@ "environment", "hhvm" ], - "time": "2014-10-25 08:00:45" + "time": "2015-01-01 10:01:08" }, { "name": "sebastian/exporter", @@ -4166,16 +4184,16 @@ }, { "name": "sebastian/version", - "version": "1.0.4", + "version": "1.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "a77d9123f8e809db3fbdea15038c27a95da4058b" + "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/a77d9123f8e809db3fbdea15038c27a95da4058b", - "reference": "a77d9123f8e809db3fbdea15038c27a95da4058b", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/ab931d46cd0d3204a91e1b9a40c4bc13032b58e4", + "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4", "shasum": "" }, "type": "library", @@ -4197,21 +4215,21 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2014-12-15 14:25:24" + "time": "2015-02-24 06:35:25" }, { "name": "sensio/generator-bundle", - "version": "v2.5.2", + "version": "v2.5.3", "target-dir": "Sensio/Bundle/GeneratorBundle", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioGeneratorBundle.git", - "reference": "4b09746520a826a7bf34a466ba31c7d8740fef7e" + "reference": "e50108c2133ee5c9c484555faed50c17a61221d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/4b09746520a826a7bf34a466ba31c7d8740fef7e", - "reference": "4b09746520a826a7bf34a466ba31c7d8740fef7e", + "url": "https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/e50108c2133ee5c9c484555faed50c17a61221d3", + "reference": "e50108c2133ee5c9c484555faed50c17a61221d3", "shasum": "" }, "require": { @@ -4245,7 +4263,7 @@ } ], "description": "This bundle generates code for you", - "time": "2015-02-11 07:21:23" + "time": "2015-03-17 06:36:52" } ], "aliases": [], From 4346a86068781f4acdeb574d7e2af08b77b58ea7 Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Sat, 30 May 2015 13:52:26 +0200 Subject: [PATCH 8/8] CS --- .../Controller/WallabagRestController.php | 38 +++++++----- .../DependencyInjection/Configuration.php | 2 +- .../Authentication/Provider/WsseProvider.php | 9 +-- .../Authentication/Token/WsseUserToken.php | 1 + .../Controller/WallabagRestControllerTest.php | 8 +-- .../CoreBundle/Command/InstallCommand.php | 10 ++-- .../CoreBundle/Controller/EntryController.php | 16 ++--- .../CoreBundle/Controller/RssController.php | 6 +- .../Controller/SecurityController.php | 9 ++- .../DataFixtures/ORM/LoadEntryData.php | 8 +-- .../Mapping/PrefixedNamingStrategy.php | 8 +-- src/Wallabag/CoreBundle/Entity/Config.php | 56 +++++++++-------- src/Wallabag/CoreBundle/Entity/Entry.php | 55 +++++++++-------- src/Wallabag/CoreBundle/Entity/Tag.php | 15 ++--- src/Wallabag/CoreBundle/Entity/User.php | 60 ++++++++++--------- .../Form/Type/ChangePasswordType.php | 1 + .../CoreBundle/Form/Type/ConfigType.php | 1 + .../CoreBundle/Form/Type/EntryType.php | 1 + .../Form/Type/ForgotPasswordType.php | 1 + .../CoreBundle/Form/Type/NewUserType.php | 1 + .../Form/Type/ResetPasswordType.php | 1 + src/Wallabag/CoreBundle/Form/Type/RssType.php | 1 + .../Form/Type/UserInformationType.php | 1 + src/Wallabag/CoreBundle/Helper/Tools.php | 12 ++-- .../CoreBundle/Repository/EntryRepository.php | 8 +-- .../CoreBundle/Repository/UserRepository.php | 2 +- .../Encoder/WallabagPasswordEncoder.php | 3 +- .../WallabagAuthenticationProvider.php | 2 +- src/Wallabag/CoreBundle/Service/Extractor.php | 23 +++---- src/Wallabag/CoreBundle/Tools/Utils.php | 2 +- .../Twig/Extension/WallabagExtension.php | 6 +- 31 files changed, 204 insertions(+), 163 deletions(-) diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php index 21e4552db..2f5923c8b 100644 --- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php @@ -47,6 +47,7 @@ class WallabagRestController extends Controller * {"name"="username", "dataType"="string", "required"=true, "description"="username"} * } * ) + * * @return array */ public function getSaltAction($username) @@ -77,6 +78,7 @@ 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) @@ -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,6 +140,7 @@ 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) @@ -164,7 +168,7 @@ class WallabagRestController extends Controller } /** - * Change several properties of an entry + * Change several properties of an entry. * * @ApiDoc( * requirements={ @@ -177,15 +181,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('archive'); + $isStarred = $request->request->get('star'); if (!is_null($title)) { $entry->setTitle($title); @@ -213,13 +218,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 +242,7 @@ class WallabagRestController extends Controller } /** - * Retrieve all tags for an entry + * Retrieve all tags for an entry. * * @ApiDoc( * requirements={ @@ -254,7 +260,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 +290,7 @@ class WallabagRestController extends Controller } /** - * Permanently remove one tag for an entry + * Permanently remove one tag for an entry. * * @ApiDoc( * requirements={ @@ -308,7 +314,7 @@ class WallabagRestController extends Controller } /** - * Retrieve all tags + * Retrieve all tags. * * @ApiDoc() */ @@ -320,7 +326,7 @@ class WallabagRestController extends Controller } /** - * Permanently remove one tag from **every** entry + * Permanently remove one tag from **every** entry. * * @ApiDoc( * requirements={ @@ -343,10 +349,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 +363,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 * diff --git a/src/Wallabag/ApiBundle/DependencyInjection/Configuration.php b/src/Wallabag/ApiBundle/DependencyInjection/Configuration.php index 80a07ca2b..cec454124 100644 --- a/src/Wallabag/ApiBundle/DependencyInjection/Configuration.php +++ b/src/Wallabag/ApiBundle/DependencyInjection/Configuration.php @@ -6,7 +6,7 @@ use Symfony\Component\Config\Definition\Builder\TreeBuilder; use Symfony\Component\Config\Definition\ConfigurationInterface; /** - * This is the class that validates and merges configuration from your app/config files + * This is the class that validates and merges configuration from your app/config files. * * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html#cookbook-bundles-extension-config-class} */ diff --git a/src/Wallabag/ApiBundle/Security/Authentication/Provider/WsseProvider.php b/src/Wallabag/ApiBundle/Security/Authentication/Provider/WsseProvider.php index 8e49167aa..db73ae2a4 100644 --- a/src/Wallabag/ApiBundle/Security/Authentication/Provider/WsseProvider.php +++ b/src/Wallabag/ApiBundle/Security/Authentication/Provider/WsseProvider.php @@ -1,4 +1,5 @@ userProvider->loadUserByUsername($token->getUsername()); if (!$user) { - throw new AuthenticationException("Bad credentials. Did you forgot your username?"); + throw new AuthenticationException('Bad credentials. Did you forgot your username?'); } if ($user && $this->validateDigest($token->digest, $token->nonce, $token->created, $user->getPassword())) { @@ -46,12 +47,12 @@ class WsseProvider implements AuthenticationProviderInterface { // Check created time is not in the future if (strtotime($created) > time()) { - throw new AuthenticationException("Back to the future..."); + throw new AuthenticationException('Back to the future...'); } // Expire timestamp after 5 minutes if (time() - strtotime($created) > 300) { - throw new AuthenticationException("Too late for this timestamp... Watch your watch."); + throw new AuthenticationException('Too late for this timestamp... Watch your watch.'); } // Validate nonce is unique within 5 minutes @@ -65,7 +66,7 @@ class WsseProvider implements AuthenticationProviderInterface $expected = base64_encode(sha1(base64_decode($nonce).$created.$secret, true)); if ($digest !== $expected) { - throw new AuthenticationException("Bad credentials ! Digest is not as expected."); + throw new AuthenticationException('Bad credentials ! Digest is not as expected.'); } return $digest === $expected; diff --git a/src/Wallabag/ApiBundle/Security/Authentication/Token/WsseUserToken.php b/src/Wallabag/ApiBundle/Security/Authentication/Token/WsseUserToken.php index aa68dbdc6..e6d30224b 100644 --- a/src/Wallabag/ApiBundle/Security/Authentication/Token/WsseUserToken.php +++ b/src/Wallabag/ApiBundle/Security/Authentication/Token/WsseUserToken.php @@ -1,4 +1,5 @@ getResponse()->getContent(), true); $this->assertArrayHasKey('tags', $content); - $this->assertEquals($nbTags+3, count($content['tags'])); + $this->assertEquals($nbTags + 3, count($content['tags'])); $entryDB = $client->getContainer() ->get('doctrine.orm.entity_manager') @@ -369,7 +369,7 @@ class WallabagRestControllerTest extends WebTestCase $content = json_decode($client->getResponse()->getContent(), true); $this->assertArrayHasKey('tags', $content); - $this->assertEquals($nbTags-1, count($content['tags'])); + $this->assertEquals($nbTags - 1, count($content['tags'])); } public function testGetUserTags() diff --git a/src/Wallabag/CoreBundle/Command/InstallCommand.php b/src/Wallabag/CoreBundle/Command/InstallCommand.php index 493842f79..491c67f9f 100644 --- a/src/Wallabag/CoreBundle/Command/InstallCommand.php +++ b/src/Wallabag/CoreBundle/Command/InstallCommand.php @@ -225,7 +225,7 @@ class InstallCommand extends ContainerAwareCommand } /** - * Run a command + * Run a command. * * @param string $command * @param array $parameters Parameters to this command (usually 'force' => true) @@ -266,9 +266,9 @@ class InstallCommand extends ContainerAwareCommand } /** - * Check if the database already exists + * Check if the database already exists. * - * @return boolean + * @return bool */ private function isDatabasePresent() { @@ -300,9 +300,9 @@ class InstallCommand extends ContainerAwareCommand /** * Check if the schema is already created. - * If we found at least oen table, it means the schema exists + * If we found at least oen table, it means the schema exists. * - * @return boolean + * @return bool */ private function isSchemaPresent() { diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php index 8a8f3cd79..7fd982c90 100644 --- a/src/Wallabag/CoreBundle/Controller/EntryController.php +++ b/src/Wallabag/CoreBundle/Controller/EntryController.php @@ -50,7 +50,7 @@ class EntryController extends Controller } /** - * Shows unread entries for current user + * Shows unread entries for current user. * * @Route("/unread", name="unread") * @@ -70,7 +70,7 @@ class EntryController extends Controller } /** - * Shows read entries for current user + * Shows read entries for current user. * * @Route("/archive", name="archive") * @@ -90,7 +90,7 @@ class EntryController extends Controller } /** - * Shows starred entries for current user + * Shows starred entries for current user. * * @Route("/starred", name="starred") * @@ -110,7 +110,7 @@ class EntryController extends Controller } /** - * Shows entry content + * Shows entry content. * * @param Entry $entry * @@ -129,7 +129,7 @@ class EntryController extends Controller } /** - * Changes read status for an entry + * Changes read status for an entry. * * @param Request $request * @param Entry $entry @@ -154,7 +154,7 @@ class EntryController extends Controller } /** - * Changes favorite status for an entry + * Changes favorite status for an entry. * * @param Request $request * @param Entry $entry @@ -179,7 +179,7 @@ class EntryController extends Controller } /** - * Deletes entry + * Deletes entry. * * @param Request $request * @param Entry $entry @@ -205,7 +205,7 @@ class EntryController extends Controller } /** - * Check if the logged user can manage the given entry + * Check if the logged user can manage the given entry. * * @param Entry $entry */ diff --git a/src/Wallabag/CoreBundle/Controller/RssController.php b/src/Wallabag/CoreBundle/Controller/RssController.php index 14f1dcb2c..86754e157 100644 --- a/src/Wallabag/CoreBundle/Controller/RssController.php +++ b/src/Wallabag/CoreBundle/Controller/RssController.php @@ -11,7 +11,7 @@ use Wallabag\CoreBundle\Entity\Entry; class RssController extends Controller { /** - * Shows unread entries for current user + * Shows unread entries for current user. * * @Route("/{username}/{token}/unread.xml", name="unread_rss", defaults={"_format"="xml"}) * @ParamConverter("user", class="WallabagCoreBundle:User", converter="username_rsstoken_converter") @@ -35,7 +35,7 @@ class RssController extends Controller } /** - * Shows read entries for current user + * Shows read entries for current user. * * @Route("/{username}/{token}/archive.xml", name="archive_rss") * @ParamConverter("user", class="WallabagCoreBundle:User", converter="username_rsstoken_converter") @@ -59,7 +59,7 @@ class RssController extends Controller } /** - * Shows starred entries for current user + * Shows starred entries for current user. * * @Route("/{username}/{token}/starred.xml", name="starred_rss") * @ParamConverter("user", class="WallabagCoreBundle:User", converter="username_rsstoken_converter") diff --git a/src/Wallabag/CoreBundle/Controller/SecurityController.php b/src/Wallabag/CoreBundle/Controller/SecurityController.php index fe511db5c..a61a898bf 100644 --- a/src/Wallabag/CoreBundle/Controller/SecurityController.php +++ b/src/Wallabag/CoreBundle/Controller/SecurityController.php @@ -30,9 +30,10 @@ class SecurityController extends Controller } /** - * Request forgot password: show form + * Request forgot password: show form. * * @Route("/forgot-password", name="forgot_password") + * * @Method({"GET", "POST"}) */ public function forgotPasswordAction(Request $request) @@ -73,9 +74,10 @@ class SecurityController extends Controller } /** - * Tell the user to check his email provider + * Tell the user to check his email provider. * * @Route("/forgot-password/check-email", name="forgot_password_check_email") + * * @Method({"GET"}) */ public function checkEmailAction(Request $request) @@ -93,9 +95,10 @@ class SecurityController extends Controller } /** - * Reset user password + * Reset user password. * * @Route("/forgot-password/{token}", name="forgot_password_reset") + * * @Method({"GET", "POST"}) */ public function resetAction(Request $request, $token) diff --git a/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadEntryData.php b/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadEntryData.php index 54d0d6b6c..547d6753e 100644 --- a/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadEntryData.php +++ b/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadEntryData.php @@ -39,9 +39,9 @@ class LoadEntryData extends AbstractFixture implements OrderedFixtureInterface $entry3->setContent('This is my content /o/'); $tag1 = new Tag($this->getReference('bob-user')); - $tag1->setLabel("foo"); + $tag1->setLabel('foo'); $tag2 = new Tag($this->getReference('bob-user')); - $tag2->setLabel("bar"); + $tag2->setLabel('bar'); $entry3->addTag($tag1); $entry3->addTag($tag2); @@ -56,9 +56,9 @@ class LoadEntryData extends AbstractFixture implements OrderedFixtureInterface $entry4->setContent('This is my content /o/'); $tag1 = new Tag($this->getReference('admin-user')); - $tag1->setLabel("foo"); + $tag1->setLabel('foo'); $tag2 = new Tag($this->getReference('admin-user')); - $tag2->setLabel("bar"); + $tag2->setLabel('bar'); $entry4->addTag($tag1); $entry4->addTag($tag2); diff --git a/src/Wallabag/CoreBundle/Doctrine/Mapping/PrefixedNamingStrategy.php b/src/Wallabag/CoreBundle/Doctrine/Mapping/PrefixedNamingStrategy.php index 724812fd8..509348db5 100644 --- a/src/Wallabag/CoreBundle/Doctrine/Mapping/PrefixedNamingStrategy.php +++ b/src/Wallabag/CoreBundle/Doctrine/Mapping/PrefixedNamingStrategy.php @@ -25,7 +25,7 @@ class PrefixedNamingStrategy implements NamingStrategy */ public function classToTableName($className) { - return strtolower($this->prefix . substr($className, strrpos($className, '\\') + 1)); + return strtolower($this->prefix.substr($className, strrpos($className, '\\') + 1)); } /** @@ -49,7 +49,7 @@ class PrefixedNamingStrategy implements NamingStrategy */ public function joinColumnName($propertyName) { - return $propertyName . '_' . $this->referenceColumnName(); + return $propertyName.'_'.$this->referenceColumnName(); } /** @@ -62,7 +62,7 @@ class PrefixedNamingStrategy implements NamingStrategy // ie: not "wallabag_entry_wallabag_tag" but "wallabag_entry_tag" $target = substr($targetEntity, strrpos($targetEntity, '\\') + 1); - return strtolower($this->classToTableName($sourceEntity) . '_' .$target); + return strtolower($this->classToTableName($sourceEntity).'_'.$target); } /** @@ -70,7 +70,7 @@ class PrefixedNamingStrategy implements NamingStrategy */ public function joinKeyColumnName($entityName, $referencedColumnName = null) { - return strtolower($this->classToTableName($entityName) . '_' .($referencedColumnName ?: $this->referenceColumnName())); + return strtolower($this->classToTableName($entityName).'_'.($referencedColumnName ?: $this->referenceColumnName())); } /** diff --git a/src/Wallabag/CoreBundle/Entity/Config.php b/src/Wallabag/CoreBundle/Entity/Config.php index 62ea637ea..025d94efb 100644 --- a/src/Wallabag/CoreBundle/Entity/Config.php +++ b/src/Wallabag/CoreBundle/Entity/Config.php @@ -6,7 +6,7 @@ use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; /** - * Config + * Config. * * @ORM\Entity(repositoryClass="Wallabag\CoreBundle\Repository\ConfigRepository") * @ORM\Table @@ -15,7 +15,7 @@ use Symfony\Component\Validator\Constraints as Assert; class Config { /** - * @var integer + * @var int * * @ORM\Column(name="id", type="integer") * @ORM\Id @@ -32,7 +32,7 @@ class Config private $theme; /** - * @var integer + * @var int * * @Assert\NotBlank() * @Assert\Range( @@ -60,7 +60,7 @@ class Config private $rssToken; /** - * @var integer + * @var int * * @ORM\Column(name="rss_limit", type="integer", nullable=true) * @Assert\Range( @@ -85,9 +85,9 @@ class Config } /** - * Get id + * Get id. * - * @return integer + * @return int */ public function getId() { @@ -95,9 +95,10 @@ class Config } /** - * Set theme + * Set theme. + * + * @param string $theme * - * @param string $theme * @return Config */ public function setTheme($theme) @@ -108,7 +109,7 @@ class Config } /** - * Get theme + * Get theme. * * @return string */ @@ -118,9 +119,10 @@ class Config } /** - * Set itemsPerPage + * Set itemsPerPage. + * + * @param int $itemsPerPage * - * @param integer $itemsPerPage * @return Config */ public function setItemsPerPage($itemsPerPage) @@ -131,9 +133,9 @@ class Config } /** - * Get itemsPerPage + * Get itemsPerPage. * - * @return integer + * @return int */ public function getItemsPerPage() { @@ -141,9 +143,10 @@ class Config } /** - * Set language + * Set language. + * + * @param string $language * - * @param string $language * @return Config */ public function setLanguage($language) @@ -154,7 +157,7 @@ class Config } /** - * Get language + * Get language. * * @return string */ @@ -164,9 +167,10 @@ class Config } /** - * Set user + * Set user. + * + * @param \Wallabag\CoreBundle\Entity\User $user * - * @param \Wallabag\CoreBundle\Entity\User $user * @return Config */ public function setUser(\Wallabag\CoreBundle\Entity\User $user = null) @@ -177,7 +181,7 @@ class Config } /** - * Get user + * Get user. * * @return \Wallabag\CoreBundle\Entity\User */ @@ -187,9 +191,10 @@ class Config } /** - * Set rssToken + * Set rssToken. + * + * @param string $rssToken * - * @param string $rssToken * @return Config */ public function setRssToken($rssToken) @@ -200,7 +205,7 @@ class Config } /** - * Get rssToken + * Get rssToken. * * @return string */ @@ -210,9 +215,10 @@ class Config } /** - * Set rssLimit + * Set rssLimit. + * + * @param string $rssLimit * - * @param string $rssLimit * @return Config */ public function setRssLimit($rssLimit) @@ -223,7 +229,7 @@ class Config } /** - * Get rssLimit + * Get rssLimit. * * @return string */ diff --git a/src/Wallabag/CoreBundle/Entity/Entry.php b/src/Wallabag/CoreBundle/Entity/Entry.php index 15af105d2..b1998ab64 100644 --- a/src/Wallabag/CoreBundle/Entity/Entry.php +++ b/src/Wallabag/CoreBundle/Entity/Entry.php @@ -9,7 +9,7 @@ use Hateoas\Configuration\Annotation as Hateoas; use JMS\Serializer\Annotation\XmlRoot; /** - * Entry + * Entry. * * @XmlRoot("entry") * @ORM\Entity(repositoryClass="Wallabag\CoreBundle\Repository\EntryRepository") @@ -21,7 +21,7 @@ class Entry { /** @Serializer\XmlAttribute */ /** - * @var integer + * @var int * * @ORM\Column(name="id", type="integer") * @ORM\Id @@ -45,14 +45,14 @@ class Entry private $url; /** - * @var boolean + * @var bool * * @ORM\Column(name="is_archived", type="boolean") */ private $isArchived = false; /** - * @var boolean + * @var bool * * @ORM\Column(name="is_starred", type="boolean") */ @@ -94,7 +94,7 @@ class Entry private $mimetype; /** - * @var integer + * @var int * * @ORM\Column(name="reading_type", type="integer", nullable=true) */ @@ -108,7 +108,7 @@ class Entry private $domainName; /** - * @var boolean + * @var bool * * @ORM\Column(name="is_public", type="boolean", nullable=true, options={"default" = false}) */ @@ -135,9 +135,9 @@ class Entry } /** - * Get id + * Get id. * - * @return integer + * @return int */ public function getId() { @@ -145,9 +145,10 @@ class Entry } /** - * Set title + * Set title. + * + * @param string $title * - * @param string $title * @return Entry */ public function setTitle($title) @@ -158,7 +159,7 @@ class Entry } /** - * Get title + * Get title. * * @return string */ @@ -168,9 +169,10 @@ class Entry } /** - * Set url + * Set url. + * + * @param string $url * - * @param string $url * @return Entry */ public function setUrl($url) @@ -181,7 +183,7 @@ class Entry } /** - * Get url + * Get url. * * @return string */ @@ -191,9 +193,10 @@ class Entry } /** - * Set isArchived + * Set isArchived. + * + * @param string $isArchived * - * @param string $isArchived * @return Entry */ public function setArchived($isArchived) @@ -204,7 +207,7 @@ class Entry } /** - * Get isArchived + * Get isArchived. * * @return string */ @@ -221,9 +224,10 @@ class Entry } /** - * Set isStarred + * Set isStarred. + * + * @param string $isStarred * - * @param string $isStarred * @return Entry */ public function setStarred($isStarred) @@ -234,7 +238,7 @@ class Entry } /** - * Get isStarred + * Get isStarred. * * @return string */ @@ -251,9 +255,10 @@ class Entry } /** - * Set content + * Set content. + * + * @param string $content * - * @param string $content * @return Entry */ public function setContent($content) @@ -264,7 +269,7 @@ class Entry } /** - * Get content + * Get content. * * @return string */ @@ -375,7 +380,7 @@ class Entry } /** - * @return boolean + * @return bool */ public function isPublic() { @@ -383,7 +388,7 @@ class Entry } /** - * @param boolean $isPublic + * @param bool $isPublic */ public function setPublic($isPublic) { diff --git a/src/Wallabag/CoreBundle/Entity/Tag.php b/src/Wallabag/CoreBundle/Entity/Tag.php index 9d3c7a321..afe9e1b9a 100644 --- a/src/Wallabag/CoreBundle/Entity/Tag.php +++ b/src/Wallabag/CoreBundle/Entity/Tag.php @@ -9,7 +9,7 @@ use JMS\Serializer\Annotation\Expose; use Doctrine\Common\Collections\ArrayCollection; /** - * Tag + * Tag. * * @XmlRoot("tag") * @ORM\Table @@ -19,7 +19,7 @@ use Doctrine\Common\Collections\ArrayCollection; class Tag { /** - * @var integer + * @var int * * @Expose * @ORM\Column(name="id", type="integer") @@ -52,9 +52,9 @@ class Tag $this->entries = new ArrayCollection(); } /** - * Get id + * Get id. * - * @return integer + * @return int */ public function getId() { @@ -62,9 +62,10 @@ class Tag } /** - * Set label + * Set label. + * + * @param string $label * - * @param string $label * @return Tag */ public function setLabel($label) @@ -75,7 +76,7 @@ class Tag } /** - * Get label + * Get label. * * @return string */ diff --git a/src/Wallabag/CoreBundle/Entity/User.php b/src/Wallabag/CoreBundle/Entity/User.php index ff08c8fb2..00eb808a6 100644 --- a/src/Wallabag/CoreBundle/Entity/User.php +++ b/src/Wallabag/CoreBundle/Entity/User.php @@ -12,7 +12,7 @@ use JMS\Serializer\Annotation\ExclusionPolicy; use JMS\Serializer\Annotation\Expose; /** - * User + * User. * * @ORM\Entity(repositoryClass="Wallabag\CoreBundle\Repository\UserRepository") * @ORM\Table @@ -25,7 +25,7 @@ use JMS\Serializer\Annotation\Expose; class User implements AdvancedUserInterface, \Serializable { /** - * @var integer + * @var int * * @Expose * @ORM\Column(name="id", type="integer") @@ -142,9 +142,9 @@ class User implements AdvancedUserInterface, \Serializable } /** - * Get id + * Get id. * - * @return integer + * @return int */ public function getId() { @@ -152,9 +152,10 @@ class User implements AdvancedUserInterface, \Serializable } /** - * Set username + * Set username. + * + * @param string $username * - * @param string $username * @return User */ public function setUsername($username) @@ -165,7 +166,7 @@ class User implements AdvancedUserInterface, \Serializable } /** - * Get username + * Get username. * * @return string */ @@ -191,9 +192,10 @@ class User implements AdvancedUserInterface, \Serializable } /** - * Set password + * Set password. + * + * @param string $password * - * @param string $password * @return User */ public function setPassword($password) @@ -208,7 +210,7 @@ class User implements AdvancedUserInterface, \Serializable } /** - * Get password + * Get password. * * @return string */ @@ -218,9 +220,10 @@ class User implements AdvancedUserInterface, \Serializable } /** - * Set name + * Set name. + * + * @param string $name * - * @param string $name * @return User */ public function setName($name) @@ -231,7 +234,7 @@ class User implements AdvancedUserInterface, \Serializable } /** - * Get name + * Get name. * * @return string */ @@ -241,9 +244,10 @@ class User implements AdvancedUserInterface, \Serializable } /** - * Set email + * Set email. + * + * @param string $email * - * @param string $email * @return User */ public function setEmail($email) @@ -254,7 +258,7 @@ class User implements AdvancedUserInterface, \Serializable } /** - * Get email + * Get email. * * @return string */ @@ -341,8 +345,7 @@ class User implements AdvancedUserInterface, \Serializable public function unserialize($serialized) { list( - $this->id, - ) = unserialize($serialized); + $this->id) = unserialize($serialized); } public function isEqualTo(UserInterface $user) @@ -370,9 +373,10 @@ class User implements AdvancedUserInterface, \Serializable return $this->isActive; } /** - * Set config + * Set config. + * + * @param \Wallabag\CoreBundle\Entity\Config $config * - * @param \Wallabag\CoreBundle\Entity\Config $config * @return User */ public function setConfig(\Wallabag\CoreBundle\Entity\Config $config = null) @@ -383,7 +387,7 @@ class User implements AdvancedUserInterface, \Serializable } /** - * Get config + * Get config. * * @return \Wallabag\CoreBundle\Entity\Config */ @@ -393,9 +397,10 @@ class User implements AdvancedUserInterface, \Serializable } /** - * Set confirmationToken + * Set confirmationToken. + * + * @param string $confirmationToken * - * @param string $confirmationToken * @return User */ public function setConfirmationToken($confirmationToken) @@ -406,7 +411,7 @@ class User implements AdvancedUserInterface, \Serializable } /** - * Get confirmationToken + * Get confirmationToken. * * @return string */ @@ -416,9 +421,10 @@ class User implements AdvancedUserInterface, \Serializable } /** - * Set passwordRequestedAt + * Set passwordRequestedAt. + * + * @param \DateTime $passwordRequestedAt * - * @param \DateTime $passwordRequestedAt * @return User */ public function setPasswordRequestedAt($passwordRequestedAt) @@ -429,7 +435,7 @@ class User implements AdvancedUserInterface, \Serializable } /** - * Get passwordRequestedAt + * Get passwordRequestedAt. * * @return \DateTime */ diff --git a/src/Wallabag/CoreBundle/Form/Type/ChangePasswordType.php b/src/Wallabag/CoreBundle/Form/Type/ChangePasswordType.php index e141789f1..b4224e3df 100644 --- a/src/Wallabag/CoreBundle/Form/Type/ChangePasswordType.php +++ b/src/Wallabag/CoreBundle/Form/Type/ChangePasswordType.php @@ -1,4 +1,5 @@ array( 'timeout' => $timeout, - 'header' => "User-Agent: ".$useragent, + 'header' => 'User-Agent: '.$useragent, 'follow_location' => true, ), 'ssl' => array( @@ -91,9 +92,10 @@ final class Tools } /** - * Encode a URL by using a salt + * Encode a URL by using a salt. * * @param $string + * * @return string */ public static function encodeString($string) diff --git a/src/Wallabag/CoreBundle/Repository/EntryRepository.php b/src/Wallabag/CoreBundle/Repository/EntryRepository.php index a8c138a97..1335e8086 100644 --- a/src/Wallabag/CoreBundle/Repository/EntryRepository.php +++ b/src/Wallabag/CoreBundle/Repository/EntryRepository.php @@ -10,7 +10,7 @@ use Pagerfanta\Pagerfanta; class EntryRepository extends EntityRepository { /** - * Retrieves unread entries for a user + * Retrieves unread entries for a user. * * @param int $userId * @param int $firstResult @@ -35,7 +35,7 @@ class EntryRepository extends EntityRepository } /** - * Retrieves read entries for a user + * Retrieves read entries for a user. * * @param int $userId * @param int $firstResult @@ -61,7 +61,7 @@ class EntryRepository extends EntityRepository } /** - * Retrieves starred entries for a user + * Retrieves starred entries for a user. * * @param int $userId * @param int $firstResult @@ -87,7 +87,7 @@ class EntryRepository extends EntityRepository } /** - * Find Entries + * Find Entries. * * @param int $userId * @param bool $isArchived diff --git a/src/Wallabag/CoreBundle/Repository/UserRepository.php b/src/Wallabag/CoreBundle/Repository/UserRepository.php index aab3dedcb..968d0b497 100644 --- a/src/Wallabag/CoreBundle/Repository/UserRepository.php +++ b/src/Wallabag/CoreBundle/Repository/UserRepository.php @@ -7,7 +7,7 @@ use Doctrine\ORM\EntityRepository; class UserRepository extends EntityRepository { /** - * Find a user by its username and rss roken + * Find a user by its username and rss roken. * * @param string $username * @param string $rssToken diff --git a/src/Wallabag/CoreBundle/Security/Authentication/Encoder/WallabagPasswordEncoder.php b/src/Wallabag/CoreBundle/Security/Authentication/Encoder/WallabagPasswordEncoder.php index fcfe418bf..e7c81fc0a 100644 --- a/src/Wallabag/CoreBundle/Security/Authentication/Encoder/WallabagPasswordEncoder.php +++ b/src/Wallabag/CoreBundle/Security/Authentication/Encoder/WallabagPasswordEncoder.php @@ -7,8 +7,7 @@ use Symfony\Component\Security\Core\Exception\BadCredentialsException; /** * This override just add en extra variable (username) to be able to salt the password - * the way Wallabag v1 does. It will avoid to break compatibility with Wallabag v1 - * + * the way Wallabag v1 does. It will avoid to break compatibility with Wallabag v1. */ class WallabagPasswordEncoder extends BasePasswordEncoder { diff --git a/src/Wallabag/CoreBundle/Security/Authentication/Provider/WallabagAuthenticationProvider.php b/src/Wallabag/CoreBundle/Security/Authentication/Provider/WallabagAuthenticationProvider.php index 1c7c5fae8..cf3cb0511 100644 --- a/src/Wallabag/CoreBundle/Security/Authentication/Provider/WallabagAuthenticationProvider.php +++ b/src/Wallabag/CoreBundle/Security/Authentication/Provider/WallabagAuthenticationProvider.php @@ -45,7 +45,7 @@ class WallabagAuthenticationProvider extends UserAuthenticationProvider throw new BadCredentialsException('The credentials were changed from another session.'); } } else { - if ("" === ($presentedPassword = $token->getCredentials())) { + if ('' === ($presentedPassword = $token->getCredentials())) { throw new BadCredentialsException('The presented password cannot be empty.'); } diff --git a/src/Wallabag/CoreBundle/Service/Extractor.php b/src/Wallabag/CoreBundle/Service/Extractor.php index e4ec96f6d..6d43a1da5 100644 --- a/src/Wallabag/CoreBundle/Service/Extractor.php +++ b/src/Wallabag/CoreBundle/Service/Extractor.php @@ -9,7 +9,7 @@ final class Extractor { public static function extract($url) { - $pageContent = Extractor::getPageContent(new Url(base64_encode($url))); + $pageContent = self::getPageContent(new Url(base64_encode($url))); $title = $pageContent['rss']['channel']['item']['title'] ?: 'Untitled'; $body = $pageContent['rss']['channel']['item']['description']; @@ -21,9 +21,10 @@ final class Extractor } /** - * Get the content for a given URL (by a call to FullTextFeed) + * Get the content for a given URL (by a call to FullTextFeed). + * + * @param Url $url * - * @param Url $url * @return mixed */ public static function getPageContent(Url $url) @@ -49,12 +50,12 @@ final class Extractor $scope = function () { extract(func_get_arg(1)); $_GET = $_REQUEST = array( - "url" => $url->getUrl(), - "max" => 5, - "links" => "preserve", - "exc" => "", - "format" => "json", - "submit" => "Create Feed", + 'url' => $url->getUrl(), + 'max' => 5, + 'links' => 'preserve', + 'exc' => '', + 'format' => 'json', + 'submit' => 'Create Feed', ); ob_start(); require func_get_arg(0); @@ -67,11 +68,11 @@ final class Extractor // Silence $scope function to avoid // issues with FTRSS when error_reporting is to high // FTRSS generates PHP warnings which break output - $json = @$scope(__DIR__."/../../../../vendor/wallabag/Fivefilters_Libraries/makefulltextfeed.php", array("url" => $url)); + $json = @$scope(__DIR__.'/../../../../vendor/wallabag/Fivefilters_Libraries/makefulltextfeed.php', array('url' => $url)); // Clearing and restoring context foreach ($GLOBALS as $key => $value) { - if ($key != "GLOBALS" && $key != "_SESSION") { + if ($key != 'GLOBALS' && $key != '_SESSION') { unset($GLOBALS[$key]); } } diff --git a/src/Wallabag/CoreBundle/Tools/Utils.php b/src/Wallabag/CoreBundle/Tools/Utils.php index 8fa744917..7e2968e77 100644 --- a/src/Wallabag/CoreBundle/Tools/Utils.php +++ b/src/Wallabag/CoreBundle/Tools/Utils.php @@ -5,7 +5,7 @@ namespace Wallabag\CoreBundle\Tools; class Utils { /** - * Generate a token used for RSS + * Generate a token used for RSS. * * @return string */ diff --git a/src/Wallabag/CoreBundle/Twig/Extension/WallabagExtension.php b/src/Wallabag/CoreBundle/Twig/Extension/WallabagExtension.php index 92406865f..18388948e 100644 --- a/src/Wallabag/CoreBundle/Twig/Extension/WallabagExtension.php +++ b/src/Wallabag/CoreBundle/Twig/Extension/WallabagExtension.php @@ -13,9 +13,10 @@ class WallabagExtension extends \Twig_Extension } /** - * Returns the domain name for a URL + * Returns the domain name for a URL. * * @param $url + * * @return string */ public static function getDomainName($url) @@ -24,9 +25,10 @@ class WallabagExtension extends \Twig_Extension } /** - * For a given text, we calculate reading time for an article + * For a given text, we calculate reading time for an article. * * @param $text + * * @return float */ public static function getReadingTime($text)