diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2PresentationCategoryGroupController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2PresentationCategoryGroupController.php index 95e61c01..057dc736 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2PresentationCategoryGroupController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2PresentationCategoryGroupController.php @@ -563,4 +563,18 @@ final class OAuth2PresentationCategoryGroupController return $this->error500($ex); } } + + /** + * @param $summit_id + * @return mixed + */ + public function getMetadata($summit_id){ + $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); + if (is_null($summit)) return $this->error404(); + + return $this->ok + ( + $this->repository->getMetadata($summit) + ); + } } \ No newline at end of file diff --git a/app/Http/routes.php b/app/Http/routes.php index f6ba2abc..310928ef 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -507,6 +507,7 @@ Route::group([ Route::group(['prefix' => 'track-groups'], function () { Route::get('', 'OAuth2PresentationCategoryGroupController@getAllBySummit'); Route::get('csv', 'OAuth2PresentationCategoryGroupController@getAllBySummitCSV'); + Route::get('metadata', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2PresentationCategoryGroupController@getMetadata']); Route::post('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2PresentationCategoryGroupController@addTrackGroupBySummit']); Route::group(['prefix' => '{track_group_id}'], function () { diff --git a/app/Models/Foundation/Summit/Events/Presentations/PresentationCategoryGroup.php b/app/Models/Foundation/Summit/Events/Presentations/PresentationCategoryGroup.php index 13a70e4a..88bae2eb 100644 --- a/app/Models/Foundation/Summit/Events/Presentations/PresentationCategoryGroup.php +++ b/app/Models/Foundation/Summit/Events/Presentations/PresentationCategoryGroup.php @@ -198,4 +198,22 @@ class PresentationCategoryGroup extends SilverstripeBaseModel public function getClassName(){ return self::ClassName; } + + public static $metadata = [ + 'class_name' => self::ClassName, + 'id' => 'integer', + 'summit_id' => 'integer', + 'name' => 'string', + 'color' => 'string', + 'description' => 'string', + 'categories' => 'array' + ]; + + /** + * @return array + */ + public static function getMetadata(){ + return self::$metadata; + } + } \ No newline at end of file diff --git a/app/Models/Foundation/Summit/Events/Presentations/PrivatePresentationCategoryGroup.php b/app/Models/Foundation/Summit/Events/Presentations/PrivatePresentationCategoryGroup.php index c3780de6..c661bb8d 100644 --- a/app/Models/Foundation/Summit/Events/Presentations/PrivatePresentationCategoryGroup.php +++ b/app/Models/Foundation/Summit/Events/Presentations/PrivatePresentationCategoryGroup.php @@ -225,4 +225,20 @@ class PrivatePresentationCategoryGroup extends PresentationCategoryGroup return $res; } + + public static $metadata = [ + 'class_name' => self::ClassName, + 'submission_begin_date' => 'datetime', + 'submission_end_date' => 'datetime', + 'max_submission_allowed_per_user' => 'integer', + 'allowed_groups' => 'array' + ]; + + /** + * @return array + */ + public static function getMetadata(){ + return array_merge(PresentationCategoryGroup::getMetadata(), self::$metadata); + } + } \ No newline at end of file diff --git a/app/Models/Foundation/Summit/Repositories/IPresentationCategoryGroupRepository.php b/app/Models/Foundation/Summit/Repositories/IPresentationCategoryGroupRepository.php index aa0f0315..8b9471c0 100644 --- a/app/Models/Foundation/Summit/Repositories/IPresentationCategoryGroupRepository.php +++ b/app/Models/Foundation/Summit/Repositories/IPresentationCategoryGroupRepository.php @@ -11,11 +11,16 @@ * See the License for the specific language governing permissions and * limitations under the License. **/ +use models\summit\Summit; /** * Interface IPresentationCategoryGroupRepository * @package App\Models\Foundation\Summit\Repositories */ interface IPresentationCategoryGroupRepository extends ISummitOwnedEntityRepository { - + /** + * @param Summit $summit + * @return array + */ + public function getMetadata(Summit $summit); } \ No newline at end of file diff --git a/app/Repositories/Summit/DoctrinePresentationCategoryGroupRepository.php b/app/Repositories/Summit/DoctrinePresentationCategoryGroupRepository.php index f1706142..f266eda7 100644 --- a/app/Repositories/Summit/DoctrinePresentationCategoryGroupRepository.php +++ b/app/Repositories/Summit/DoctrinePresentationCategoryGroupRepository.php @@ -145,4 +145,16 @@ final class DoctrinePresentationCategoryGroupRepository $data ); } + + /** + * @param Summit $summit + * @return array + */ + public function getMetadata(Summit $summit) + { + return [ + PresentationCategoryGroup::getMetadata(), + PrivatePresentationCategoryGroup::getMetadata(), + ]; + } } \ No newline at end of file diff --git a/database/seeds/ApiEndpointsSeeder.php b/database/seeds/ApiEndpointsSeeder.php index e24ddad3..84ebe982 100644 --- a/database/seeds/ApiEndpointsSeeder.php +++ b/database/seeds/ApiEndpointsSeeder.php @@ -1229,6 +1229,15 @@ class ApiEndpointsSeeder extends Seeder sprintf(SummitScopes::ReadAllSummitData, $current_realm) ], ], + [ + 'name' => 'get-track-groups-metadata', + 'route' => '/api/v1/summits/{id}/track-groups/metadata', + 'http_method' => 'GET', + 'scopes' => [ + sprintf(SummitScopes::ReadSummitData, $current_realm), + sprintf(SummitScopes::ReadAllSummitData, $current_realm) + ], + ], [ 'name' => 'get-track-group', 'route' => '/api/v1/summits/{id}/track-groups/{track_group_id}', diff --git a/tests/OAuth2TrackGroupsApiTest.php b/tests/OAuth2TrackGroupsApiTest.php index b06f22ac..44a3adc8 100644 --- a/tests/OAuth2TrackGroupsApiTest.php +++ b/tests/OAuth2TrackGroupsApiTest.php @@ -16,6 +16,7 @@ final class OAuth2TrackGroupsApiTest extends ProtectedApiTest { /** * @param int $summit_id + * @return mixed */ public function testGetTrackGroups($summit_id = 23) { @@ -43,6 +44,36 @@ final class OAuth2TrackGroupsApiTest extends ProtectedApiTest return $track_groups; } + /** + * @param int $summit_id + * @return mixed + */ + public function testGetTrackGroupsMetadata($summit_id = 23) + { + + $params = [ + 'id' => $summit_id, + ]; + + $headers = ["HTTP_Authorization" => " Bearer " . $this->access_token]; + $response = $this->action( + "GET", + "OAuth2PresentationCategoryGroupController@getMetadata", + $params, + [], + [], + [], + $headers + ); + + $content = $response->getContent(); + $metadata = json_decode($content); + $this->assertTrue(!is_null($metadata)); + $this->assertResponseStatus(200); + return $metadata; + } + + /** * @param int $summit_id */