Add user entities in API responses

This commit is contained in:
Romain Neutron
2014-02-28 19:03:33 +01:00
parent 1952910c83
commit 28acde0882
3 changed files with 44 additions and 19 deletions

View File

@@ -9,6 +9,7 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
use Alchemy\Phrasea\Application;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
/** /**

View File

@@ -39,6 +39,7 @@ class API_V1_adapter extends API_V1_Abstract
*/ */
protected $app; 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 = 'http://api.phraseanet.com/api/objects/story';
const OBJECT_TYPE_STORY_METADATA_BAG = 'http://api.phraseanet.com/api/objects/story-metadata-bag'; 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)) { 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( $session = array(
'id' => $file->getSession()->getId(), 'id' => $file->getSession()->getId(),
'usr_id' => $usr_id, 'usr_id' => $usr_id,
'user' => $user ? $this->list_user($user) : null,
); );
return array( return array(
@@ -1390,6 +1393,7 @@ class API_V1_adapter extends API_V1_Abstract
'can_agree' => $participant->getCanAgree(), 'can_agree' => $participant->getCanAgree(),
'can_see_others' => $participant->getCanSeeOthers(), 'can_see_others' => $participant->getCanSeeOthers(),
'readonly' => $user->get_id() != $this->app['authentication']->getUser()->get_id(), 'readonly' => $user->get_id() != $this->app['authentication']->getUser()->get_id(),
'user' => $this->list_user($user),
), ),
'agreement' => $validation_datas->getAgreement(), 'agreement' => $validation_datas->getAgreement(),
'updated_on' => $validation_datas->getUpdated()->format(DATE_ATOM), 'updated_on' => $validation_datas->getUpdated()->format(DATE_ATOM),
@@ -1808,10 +1812,12 @@ class API_V1_adapter extends API_V1_Abstract
{ {
$ret = array( $ret = array(
'basket_id' => $basket->getId(), 'basket_id' => $basket->getId(),
'owner' => $this->list_user($basket->getOwner($this->app)),
'created_on' => $basket->getCreated()->format(DATE_ATOM), 'created_on' => $basket->getCreated()->format(DATE_ATOM),
'description' => (string) $basket->getDescription(), 'description' => (string) $basket->getDescription(),
'name' => $basket->getName(), 'name' => $basket->getName(),
'pusher_usr_id' => $basket->getPusherId(), '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), 'updated_on' => $basket->getUpdated()->format(DATE_ATOM),
'unread' => !$basket->getIsRead(), 'unread' => !$basket->getIsRead(),
'validation_basket' => !!$basket->getValidation() 'validation_basket' => !!$basket->getValidation()
@@ -1831,6 +1837,7 @@ class API_V1_adapter extends API_V1_Abstract
'can_agree' => $participant->getCanAgree(), 'can_agree' => $participant->getCanAgree(),
'can_see_others' => $participant->getCanSeeOthers(), 'can_see_others' => $participant->getCanSeeOthers(),
'readonly' => $user->get_id() != $this->app['authentication']->getUser()->get_id(), '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( $ret = array_merge(
array( array(
'validation_users' => $users, 'validation_users' => $users,
'expires_on' => $expires_on_atom, 'expires_on' => $expires_on_atom,
'validation_infos' => $basket->getValidation()->getValidationString($this->app, $this->app['authentication']->getUser()), 'validation_infos' => $basket->getValidation()->getValidationString($this->app, $this->app['authentication']->getUser()),
'validation_confirmed' => $basket->getValidation()->getParticipant($this->app['authentication']->getUser(), $this->app)->getIsConfirmed(), 'validation_confirmed' => $basket->getValidation()->getParticipant($this->app['authentication']->getUser(), $this->app)->getIsConfirmed(),
'validation_initiator' => $basket->getValidation()->isInitiator($this->app['authentication']->getUser()), 'validation_initiator' => $basket->getValidation()->isInitiator($this->app['authentication']->getUser()),
'validation_initiator_user' => $this->list_user($basket->getValidation()->getInitiator($this->app)),
), $ret ), $ret
); );
} }
@@ -1972,6 +1980,7 @@ class API_V1_adapter extends API_V1_Abstract
} }
return array( return array(
'@entity@' => self::OBJECT_TYPE_USER,
'id' => $user->get_id(), 'id' => $user->get_id(),
'email' => $user->get_email() ?: null, 'email' => $user->get_email() ?: null,
'login' => $user->get_login() ?: null, 'login' => $user->get_login() ?: null,

View File

@@ -13,7 +13,7 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract
{ {
/** /**
* *
* @var Symfony\Component\HttpKernel\Client * @var \Symfony\Component\HttpKernel\Client
*/ */
protected $client; protected $client;
@@ -1160,7 +1160,7 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract
$this->assertArrayHasKey("baskets", $content['response']); $this->assertArrayHasKey("baskets", $content['response']);
foreach ($content['response']['baskets'] as $basket) { foreach ($content['response']['baskets'] as $basket) {
$this->evaluateGoodBasket($basket); $this->evaluateGoodBasket($basket, self::$DI['user_notAdmin']);
} }
$route = '/api/v1/records/24892534/51654651553/related/'; $route = '/api/v1/records/24892534/51654651553/related/';
@@ -1351,7 +1351,7 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract
$this->assertArrayHasKey("baskets", $content['response']); $this->assertArrayHasKey("baskets", $content['response']);
foreach ($content['response']['baskets'] as $basket) { 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->assertEquals(1, count($content['response']));
$this->assertArrayHasKey("basket", $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']); $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_elements", $content['response']);
$this->assertArrayHasKey("basket", $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) { foreach ($content['response']['basket_elements'] as $basket_element) {
$this->assertArrayHasKey('basket_element_id', $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->assertEquals(1, count((array) $content['response']));
$this->assertArrayHasKey("basket", $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'); $this->assertEquals($content['response']['basket']['name'], 'un Joli Nom');
@@ -1456,7 +1456,7 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract
$this->assertArrayHasKey("basket", $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'); $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->assertEquals(1, count((array) $content['response']));
$this->assertArrayHasKey("basket", $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'], '<strong>aéaa'); $this->assertEquals($content['response']['basket']['name'], '<strong>aéaa');
} }
@@ -1496,7 +1496,7 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract
$this->assertEquals(1, count((array) $content['response'])); $this->assertEquals(1, count((array) $content['response']));
$this->assertArrayHasKey("basket", $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'); $this->assertEquals($content['response']['basket']['description'], 'une belle desc');
} }
@@ -1523,7 +1523,7 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract
$found = false; $found = false;
foreach ($content['response']['baskets'] as $basket) { foreach ($content['response']['baskets'] as $basket) {
$this->evaluateGoodBasket($basket); $this->evaluateGoodBasket($basket, self::$DI['user']);
$found = true; $found = true;
} }
if (!$found) { if (!$found) {
@@ -2037,6 +2037,15 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract
{ {
$this->assertArrayHasKey('id', $item); $this->assertArrayHasKey('id', $item);
$this->assertArrayHasKey('quarantine_session', $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('base_id', $item);
$this->assertArrayHasKey('original_name', $item); $this->assertArrayHasKey('original_name', $item);
$this->assertArrayHasKey('sha256', $item); $this->assertArrayHasKey('sha256', $item);
@@ -2070,6 +2079,7 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract
protected function evaluateGoodUserItem($data, \User_Adapter $user) protected function evaluateGoodUserItem($data, \User_Adapter $user)
{ {
foreach (array( foreach (array(
'@entity@' => \API_V1_adapter::OBJECT_TYPE_USER,
'id' => $user->get_id(), 'id' => $user->get_id(),
'email' => $user->get_email() ?: null, 'email' => $user->get_email() ?: null,
'login' => $user->get_login() ?: 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, 'updated_on' => $user->get_modification_date() ? $user->get_modification_date()->format(DATE_ATOM) : null,
'locale' => $user->get_locale() ?: null, 'locale' => $user->get_locale() ?: null,
) as $key => $value) { ) as $key => $value) {
$this->assertArrayHasKey($key, $data); $this->assertArrayHasKey($key, $data, 'Assert key is present '.$key);
if ($value) { if ($value) {
$this->assertEquals($value, $data[$key], 'Check key '.$key); $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()); $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->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('created_on', $basket);
$this->assertArrayHasKey('description', $basket); $this->assertArrayHasKey('description', $basket);
$this->assertArrayHasKey('name', $basket); $this->assertArrayHasKey('name', $basket);
@@ -2446,6 +2460,7 @@ abstract class ApiAbstract extends \PhraseanetWebTestCaseAbstract
if (!is_null($basket['pusher_usr_id'])) { if (!is_null($basket['pusher_usr_id'])) {
$this->assertTrue(is_int($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'])); $this->assertTrue(is_string($basket['name']));