diff --git a/lib/classes/API/V1/Interface.php b/lib/classes/API/V1/Interface.php index f0fb2ac7ab..fe0b3ba68d 100644 --- a/lib/classes/API/V1/Interface.php +++ b/lib/classes/API/V1/Interface.php @@ -9,6 +9,7 @@ * file that was distributed with this source code. */ +use Alchemy\Phrasea\Application; use Symfony\Component\HttpFoundation\Request; /** diff --git a/lib/classes/API/V1/adapter.php b/lib/classes/API/V1/adapter.php index 782ed7dd50..6d0814451b 100644 --- a/lib/classes/API/V1/adapter.php +++ b/lib/classes/API/V1/adapter.php @@ -39,6 +39,7 @@ class API_V1_adapter extends API_V1_Abstract */ protected $app; + const OBJECT_TYPE_USER = 'http://api.phraseanet.com/api/objects/user'; const OBJECT_TYPE_STORY = 'http://api.phraseanet.com/api/objects/story'; const OBJECT_TYPE_STORY_METADATA_BAG = 'http://api.phraseanet.com/api/objects/story-metadata-bag'; @@ -803,14 +804,16 @@ class API_V1_adapter extends API_V1_Abstract } } - $usr_id = null; + $usr_id = $user = null; if ($file->getSession()->getUser($this->app)) { - $usr_id = $file->getSession()->getUser($this->app)->get_id(); + $user = $file->getSession()->getUser($this->app); + $usr_id = $user->get_id(); } $session = array( 'id' => $file->getSession()->getId(), 'usr_id' => $usr_id, + 'user' => $user ? $this->list_user($user) : null, ); return array( @@ -1390,6 +1393,7 @@ class API_V1_adapter extends API_V1_Abstract 'can_agree' => $participant->getCanAgree(), 'can_see_others' => $participant->getCanSeeOthers(), 'readonly' => $user->get_id() != $this->app['authentication']->getUser()->get_id(), + 'user' => $this->list_user($user), ), 'agreement' => $validation_datas->getAgreement(), 'updated_on' => $validation_datas->getUpdated()->format(DATE_ATOM), @@ -1808,10 +1812,12 @@ class API_V1_adapter extends API_V1_Abstract { $ret = array( 'basket_id' => $basket->getId(), + 'owner' => $this->list_user($basket->getOwner($this->app)), 'created_on' => $basket->getCreated()->format(DATE_ATOM), 'description' => (string) $basket->getDescription(), 'name' => $basket->getName(), 'pusher_usr_id' => $basket->getPusherId(), + 'pusher' => $basket->getPusher($this->app) ? $this->list_user($basket->getPusher($this->app)) : null, 'updated_on' => $basket->getUpdated()->format(DATE_ATOM), 'unread' => !$basket->getIsRead(), 'validation_basket' => !!$basket->getValidation() @@ -1831,6 +1837,7 @@ class API_V1_adapter extends API_V1_Abstract 'can_agree' => $participant->getCanAgree(), 'can_see_others' => $participant->getCanSeeOthers(), 'readonly' => $user->get_id() != $this->app['authentication']->getUser()->get_id(), + 'user' => $this->list_user($user), ); } @@ -1842,11 +1849,12 @@ class API_V1_adapter extends API_V1_Abstract $ret = array_merge( array( - 'validation_users' => $users, - 'expires_on' => $expires_on_atom, - 'validation_infos' => $basket->getValidation()->getValidationString($this->app, $this->app['authentication']->getUser()), - 'validation_confirmed' => $basket->getValidation()->getParticipant($this->app['authentication']->getUser(), $this->app)->getIsConfirmed(), - 'validation_initiator' => $basket->getValidation()->isInitiator($this->app['authentication']->getUser()), + 'validation_users' => $users, + 'expires_on' => $expires_on_atom, + 'validation_infos' => $basket->getValidation()->getValidationString($this->app, $this->app['authentication']->getUser()), + 'validation_confirmed' => $basket->getValidation()->getParticipant($this->app['authentication']->getUser(), $this->app)->getIsConfirmed(), + 'validation_initiator' => $basket->getValidation()->isInitiator($this->app['authentication']->getUser()), + 'validation_initiator_user' => $this->list_user($basket->getValidation()->getInitiator($this->app)), ), $ret ); } @@ -1972,6 +1980,7 @@ class API_V1_adapter extends API_V1_Abstract } return array( + '@entity@' => self::OBJECT_TYPE_USER, 'id' => $user->get_id(), 'email' => $user->get_email() ?: null, 'login' => $user->get_login() ?: null, diff --git a/tests/Alchemy/Tests/Phrasea/Application/ApiAbstract.php b/tests/Alchemy/Tests/Phrasea/Application/ApiAbstract.php index 3f1d2321c4..b3198155aa 100644 --- a/tests/Alchemy/Tests/Phrasea/Application/ApiAbstract.php +++ b/tests/Alchemy/Tests/Phrasea/Application/ApiAbstract.php @@ -13,7 +13,7 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract { /** * - * @var Symfony\Component\HttpKernel\Client + * @var \Symfony\Component\HttpKernel\Client */ protected $client; @@ -1160,7 +1160,7 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract $this->assertArrayHasKey("baskets", $content['response']); foreach ($content['response']['baskets'] as $basket) { - $this->evaluateGoodBasket($basket); + $this->evaluateGoodBasket($basket, self::$DI['user_notAdmin']); } $route = '/api/v1/records/24892534/51654651553/related/'; @@ -1351,7 +1351,7 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract $this->assertArrayHasKey("baskets", $content['response']); foreach ($content['response']['baskets'] as $basket) { - $this->evaluateGoodBasket($basket); + $this->evaluateGoodBasket($basket, self::$DI['user']); } } @@ -1375,7 +1375,7 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract $this->assertEquals(1, count($content['response'])); $this->assertArrayHasKey("basket", $content['response']); - $this->evaluateGoodBasket($content['response']['basket']); + $this->evaluateGoodBasket($content['response']['basket'], self::$DI['user_notAdmin']); $this->assertEquals('un Joli Nom', $content['response']['basket']['name']); } @@ -1405,7 +1405,7 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract $this->assertArrayHasKey("basket_elements", $content['response']); $this->assertArrayHasKey("basket", $content['response']); - $this->evaluateGoodBasket($content['response']['basket']); + $this->evaluateGoodBasket($content['response']['basket'], self::$DI['user']); foreach ($content['response']['basket_elements'] as $basket_element) { $this->assertArrayHasKey('basket_element_id', $basket_element); @@ -1442,7 +1442,7 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract $this->assertEquals(1, count((array) $content['response'])); $this->assertArrayHasKey("basket", $content['response']); - $this->evaluateGoodBasket($content['response']['basket']); + $this->evaluateGoodBasket($content['response']['basket'], self::$DI['user']); $this->assertEquals($content['response']['basket']['name'], 'un Joli Nom'); @@ -1456,7 +1456,7 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract $this->assertArrayHasKey("basket", $content['response']); - $this->evaluateGoodBasket($content['response']['basket']); + $this->evaluateGoodBasket($content['response']['basket'], self::$DI['user']); $this->assertEquals($content['response']['basket']['name'], 'un Joli Nom'); @@ -1468,7 +1468,7 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract $this->assertEquals(1, count((array) $content['response'])); $this->assertArrayHasKey("basket", $content['response']); - $this->evaluateGoodBasket($content['response']['basket']); + $this->evaluateGoodBasket($content['response']['basket'], self::$DI['user']); $this->assertEquals($content['response']['basket']['name'], 'aƩaa'); } @@ -1496,7 +1496,7 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract $this->assertEquals(1, count((array) $content['response'])); $this->assertArrayHasKey("basket", $content['response']); - $this->evaluateGoodBasket($content['response']['basket']); + $this->evaluateGoodBasket($content['response']['basket'], self::$DI['user']); $this->assertEquals($content['response']['basket']['description'], 'une belle desc'); } @@ -1523,7 +1523,7 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract $found = false; foreach ($content['response']['baskets'] as $basket) { - $this->evaluateGoodBasket($basket); + $this->evaluateGoodBasket($basket, self::$DI['user']); $found = true; } if (!$found) { @@ -2037,6 +2037,15 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract { $this->assertArrayHasKey('id', $item); $this->assertArrayHasKey('quarantine_session', $item); + + $session = $item['quarantine_session']; + $this->assertArrayHasKey('id', $session); + $this->assertArrayHasKey('usr_id', $session); + $this->assertArrayHasKey('user', $session); + if ($session['user'] !== null) { + $this->evaluateGoodUserItem($session['user'], self::$DI['user_notAdmin']); + } + $this->assertArrayHasKey('base_id', $item); $this->assertArrayHasKey('original_name', $item); $this->assertArrayHasKey('sha256', $item); @@ -2070,6 +2079,7 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract protected function evaluateGoodUserItem($data, \User_Adapter $user) { foreach (array( + '@entity@' => \API_V1_adapter::OBJECT_TYPE_USER, 'id' => $user->get_id(), 'email' => $user->get_email() ?: null, 'login' => $user->get_login() ?: null, @@ -2091,7 +2101,7 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract 'updated_on' => $user->get_modification_date() ? $user->get_modification_date()->format(DATE_ATOM) : null, 'locale' => $user->get_locale() ?: null, ) as $key => $value) { - $this->assertArrayHasKey($key, $data); + $this->assertArrayHasKey($key, $data, 'Assert key is present '.$key); if ($value) { $this->assertEquals($value, $data[$key], 'Check key '.$key); } @@ -2434,9 +2444,13 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract $this->assertEquals(405, $response->getStatusCode(), 'Test status code 405 ' . $response->getContent()); } - protected function evaluateGoodBasket($basket) + protected function evaluateGoodBasket($basket, \User_Adapter $user) { $this->assertTrue(is_array($basket)); + $this->assertArrayHasKey('basket_id', $basket); + $this->assertArrayHasKey('owner', $basket); + $this->evaluateGoodUserItem($basket['owner'], $user); + $this->assertArrayHasKey('pusher', $basket); $this->assertArrayHasKey('created_on', $basket); $this->assertArrayHasKey('description', $basket); $this->assertArrayHasKey('name', $basket); @@ -2446,6 +2460,7 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract if (!is_null($basket['pusher_usr_id'])) { $this->assertTrue(is_int($basket['pusher_usr_id'])); + $this->evaluateGoodUserItem($basket['pusher'], self::$DI['user_notAdmin']); } $this->assertTrue(is_string($basket['name']));