diff --git a/app/Http/Controllers/apis/protected/summit/OAuth2SummitApiController.php b/app/Http/Controllers/apis/protected/summit/OAuth2SummitApiController.php index 06e3f1b2..818875b4 100644 --- a/app/Http/Controllers/apis/protected/summit/OAuth2SummitApiController.php +++ b/app/Http/Controllers/apis/protected/summit/OAuth2SummitApiController.php @@ -16,6 +16,7 @@ use Exception; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Request; use Illuminate\Support\Facades\Validator; +use Illuminate\Support\Facades\Input; use models\exceptions\EntityNotFoundException; use models\exceptions\ValidationException; use models\oauth2\IResourceServerContext; @@ -76,10 +77,11 @@ final class OAuth2SummitApiController extends OAuth2ProtectedController public function getSummits() { try { - $summits = array(); - foreach($this->repository->getAll() as $summit){ - $summits[] = SerializerRegistry::getInstance()->getSerializer($summit)->serialize(); + $summits = []; + + foreach($this->repository->getAvailables() as $summit){ + $summits[] = SerializerRegistry::getInstance()->getSerializer($summit)->serialize(Input::get('expand','')); } $response = new PagingResponse @@ -90,6 +92,7 @@ final class OAuth2SummitApiController extends OAuth2ProtectedController 1, $summits ); + return $this->ok($response->toArray()); } catch (Exception $ex) { @@ -335,6 +338,11 @@ final class OAuth2SummitApiController extends OAuth2ProtectedController } } + /** + * @param $summit_id + * @param $external_order_id + * @return mixed + */ public function getExternalOrder($summit_id, $external_order_id){ try { $summit = SummitFinderStrategyFactory::build($this->repository)->find($summit_id); @@ -356,6 +364,12 @@ final class OAuth2SummitApiController extends OAuth2ProtectedController } } + /** + * @param $summit_id + * @param $external_order_id + * @param $external_attendee_id + * @return mixed + */ public function confirmExternalOrderAttendee($summit_id, $external_order_id, $external_attendee_id){ try { $summit = SummitFinderStrategyFactory::build($this->repository)->find($summit_id); diff --git a/app/Http/Controllers/apis/protected/summit/OAuth2SummitAttendeesApiController.php b/app/Http/Controllers/apis/protected/summit/OAuth2SummitAttendeesApiController.php index bef257c1..bba39af1 100644 --- a/app/Http/Controllers/apis/protected/summit/OAuth2SummitAttendeesApiController.php +++ b/app/Http/Controllers/apis/protected/summit/OAuth2SummitAttendeesApiController.php @@ -164,7 +164,8 @@ final class OAuth2SummitAttendeesApiController extends OAuth2ProtectedController $summit = SummitFinderStrategyFactory::build($this->repository)->find($summit_id); if (is_null($summit)) return $this->error404(); - $attendee = CheckAttendeeStrategyFactory::build(CheckAttendeeStrategyFactory::Own, $this->resource_server_context)->check($attendee_id, $summit); + $type = $attendee_id === 'me' ? CheckAttendeeStrategyFactory::Me : CheckAttendeeStrategyFactory::Own; + $attendee = CheckAttendeeStrategyFactory::build($type, $this->resource_server_context)->check($attendee_id, $summit); if(is_null($attendee)) return $this->error404(); return $this->ok(SerializerRegistry::getInstance()->getSerializer($attendee)->serialize($expand)); diff --git a/app/ModelSerializers/SummitSerializer.php b/app/ModelSerializers/SummitSerializer.php index f6a016ee..8780c4fb 100644 --- a/app/ModelSerializers/SummitSerializer.php +++ b/app/ModelSerializers/SummitSerializer.php @@ -134,6 +134,15 @@ final class SummitSerializer extends SilverStripeSerializer $values['speakers'] = $speakers; } break; + case 'type':{ + if(isset($values['type_id'])) + { + unset($values['type_id']); + $values['type'] = $summit->hasType() ? + SerializerRegistry::getInstance()->getSerializer($summit->getType())->serialize() : null; + } + } + break; } } } diff --git a/app/Models/Foundation/Summit/Repositories/ISummitRepository.php b/app/Models/Foundation/Summit/Repositories/ISummitRepository.php index 4200de0c..74d94ed4 100644 --- a/app/Models/Foundation/Summit/Repositories/ISummitRepository.php +++ b/app/Models/Foundation/Summit/Repositories/ISummitRepository.php @@ -20,4 +20,9 @@ interface ISummitRepository extends IBaseRepository * @return Summit */ public function getCurrent(); + + /** + * @return Summit[] + */ + public function getAvailables(); } \ No newline at end of file diff --git a/app/Models/Foundation/Summit/Summit.php b/app/Models/Foundation/Summit/Summit.php index db57d3ef..f06b46f0 100644 --- a/app/Models/Foundation/Summit/Summit.php +++ b/app/Models/Foundation/Summit/Summit.php @@ -169,6 +169,28 @@ class Summit extends SilverstripeBaseModel */ private $active; + /** + * @return boolean + */ + public function isAvailableOnApi() + { + return $this->available_on_api; + } + + /** + * @param boolean $available_on_api + */ + public function setAvailableOnApi($available_on_api) + { + $this->available_on_api = $available_on_api; + } + + /** + * @ORM\Column(name="AvailableOnApi", type="boolean") + * @var bool + */ + private $available_on_api; + /** * @ORM\Column(name="ExternalEventId", type="string") * @var string @@ -186,7 +208,12 @@ class Summit extends SilverstripeBaseModel */ public function getType() { - return $this->type; + try { + return $this->type; + } + catch (\Exception $ex){ + return null; + } } /** @@ -209,6 +236,13 @@ class Summit extends SilverstripeBaseModel } } + /** + * @return bool + */ + public function hasType(){ + return $this->getTypeId() > 0; + } + /** * @ORM\ManyToOne(targetEntity="SummitType", fetch="EXTRA_LAZY") * @ORM\JoinColumn(name="TypeID", referencedColumnName="ID") diff --git a/app/Repositories/Summit/Doctrine/DoctrineSummitRepository.php b/app/Repositories/Summit/Doctrine/DoctrineSummitRepository.php index 235f2d69..23693daf 100644 --- a/app/Repositories/Summit/Doctrine/DoctrineSummitRepository.php +++ b/app/Repositories/Summit/Doctrine/DoctrineSummitRepository.php @@ -34,6 +34,7 @@ final class DoctrineSummitRepository extends SilverStripeDoctrineRepository impl ->select("s") ->from(\models\summit\Summit::class, "s") ->where('s.active = 1') + ->andWhere('s.available_on_api = 1') ->orderBy('s.begin_date', 'DESC') ->getQuery() ->setCacheable(true) @@ -42,4 +43,20 @@ final class DoctrineSummitRepository extends SilverStripeDoctrineRepository impl if (count($res) == 0) return null; return $res[0]; } + + /** + * @return Summit[] + */ + public function getAvailables() + { + return $this->getEntityManager()->createQueryBuilder() + ->select("s") + ->from(\models\summit\Summit::class, "s") + ->where('s.available_on_api = 1') + ->orderBy('s.begin_date', 'ASC') + ->getQuery() + ->setCacheable(true) + ->setCacheRegion("summit_region") + ->getResult(); + } } \ No newline at end of file diff --git a/tests/OAuth2SummitApiTest.php b/tests/OAuth2SummitApiTest.php index 161a99f2..7b41f349 100644 --- a/tests/OAuth2SummitApiTest.php +++ b/tests/OAuth2SummitApiTest.php @@ -18,8 +18,7 @@ final class OAuth2SummitApiTest extends ProtectedApiTest public function testGetSummits() { - $params = array - (); + $params = ['expand' => 'type']; $headers = array("HTTP_Authorization" => " Bearer " . $this->access_token); $response = $this->action( @@ -96,7 +95,7 @@ final class OAuth2SummitApiTest extends ProtectedApiTest $params = array ( 'expand' => 'schedule,speakers', - 'id' => 22 + 'id' => 7 ); $headers = array("HTTP_Authorization" => " Bearer " . $this->access_token); @@ -195,13 +194,13 @@ final class OAuth2SummitApiTest extends ProtectedApiTest $params = array ( - 'expand' => 'schedule', - 'id' => 6, - 'attendee_id' => 'me', + 'expand' => 'schedule', + 'id' => 6, + 'attendee_id' => 'me', 'access_token' => $this->access_token ); - $headers = array("HTTP_Authorization" => " Bearer " . $this->access_token); + $headers = array("HTTP_Authorization" => " Bearer " . $this->access_token); $response = $this->action( "GET", "OAuth2SummitAttendeesApiController@getAttendee",