From 7c502e93efce504f068bcbb272f16d8c8313c9b7 Mon Sep 17 00:00:00 2001 From: Sebastian Marcet Date: Thu, 5 Apr 2018 14:14:51 -0300 Subject: [PATCH] Added endpoints to get RSVP question template metadata GET /api/v1/summits/{id}/rsvp-templates/questions/metadata Change-Id: Ide18c7312f991cd15ffc0d6d1b173762cf53c7b3 --- ...OAuth2SummitRSVPTemplatesApiController.php | 15 +++++++++ app/Http/routes.php | 5 +++ .../RSVPCheckBoxListQuestionTemplate.php | 11 +++++++ .../RSVPDropDownQuestionTemplate.php | 15 +++++++++ .../RSVPLiteralContentQuestionTemplate.php | 11 +++++++ .../RSVPMemberEmailQuestionTemplate.php | 11 +++++++ .../RSVPMemberFirstNameQuestionTemplate.php | 11 +++++++ .../RSVPMemberLastNameQuestionTemplate.php | 11 +++++++ .../RSVPMultiValueQuestionTemplate.php | 18 ++++++++++- .../RSVP/Templates/RSVPQuestionTemplate.php | 16 ++++++++++ .../RSVPRadioButtonListQuestionTemplate.php | 11 +++++++ .../RSVPSingleValueTemplateQuestion.php | 16 +++++++++- .../RSVPTextAreaQuestionTemplate.php | 11 +++++++ .../Templates/RSVPTextBoxQuestionTemplate.php | 11 +++++++ .../Repositories/IRSVPTemplateRepository.php | 6 ++++ .../Summit/DoctrineRSVPTemplateRepository.php | 28 +++++++++++++++++ database/seeds/ApiEndpointsSeeder.php | 8 +++++ tests/OAuth2SummitRSVPTemplateApiTest.php | 31 +++++++++++++++++++ 18 files changed, 244 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitRSVPTemplatesApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitRSVPTemplatesApiController.php index 13191dd4..70fc4445 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitRSVPTemplatesApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitRSVPTemplatesApiController.php @@ -218,6 +218,21 @@ final class OAuth2SummitRSVPTemplatesApiController extends OAuth2ProtectedContro } } + + /** + * @param $summit_id + * @return mixed + */ + public function getRSVPTemplateQuestionsMetadata($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->rsvp_template_repository->getQuestionsMetadata($summit) + ); + } + /** * @param $summit_id * @param $template_id diff --git a/app/Http/routes.php b/app/Http/routes.php index 53d66448..08f43a4a 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -172,6 +172,11 @@ Route::group([ // rsvp templates Route::group(['prefix' => 'rsvp-templates'], function () { Route::get('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitRSVPTemplatesApiController@getAllBySummit']); + + Route::group(['prefix' => 'questions'], function () { + Route::get('metadata', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitRSVPTemplatesApiController@getRSVPTemplateQuestionsMetadata']); + }); + Route::post('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitRSVPTemplatesApiController@addRSVPTemplate']); Route::group(['prefix' => '{template_id}'], function () { Route::get('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitRSVPTemplatesApiController@getRSVPTemplate']); diff --git a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPCheckBoxListQuestionTemplate.php b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPCheckBoxListQuestionTemplate.php index 2da571af..5268b82a 100644 --- a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPCheckBoxListQuestionTemplate.php +++ b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPCheckBoxListQuestionTemplate.php @@ -27,4 +27,15 @@ class RSVPCheckBoxListQuestionTemplate extends RSVPMultiValueQuestionTemplate public function getClassName(){ return self::ClassName; } + + public static $metadata = [ + 'class_name' => self::ClassName, + ]; + + /** + * @return array + */ + public static function getMetadata(){ + return array_merge(RSVPMultiValueQuestionTemplate::getMetadata(), self::$metadata); + } } \ No newline at end of file diff --git a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPDropDownQuestionTemplate.php b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPDropDownQuestionTemplate.php index f527c1fd..464b6206 100644 --- a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPDropDownQuestionTemplate.php +++ b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPDropDownQuestionTemplate.php @@ -102,4 +102,19 @@ class RSVPDropDownQuestionTemplate extends RSVPMultiValueQuestionTemplate $this->is_multiselect = false; $this->is_country_selector = false; } + + + public static $metadata = [ + 'use_chosen_plugin' => 'boolean', + 'is_multiselect' => 'boolean', + 'is_country_selector' => 'boolean', + 'class_name' => self::ClassName, + ]; + + /** + * @return array + */ + public static function getMetadata(){ + return array_merge(RSVPMultiValueQuestionTemplate::getMetadata(), self::$metadata); + } } \ No newline at end of file diff --git a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPLiteralContentQuestionTemplate.php b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPLiteralContentQuestionTemplate.php index c0d56af2..2fa3d189 100644 --- a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPLiteralContentQuestionTemplate.php +++ b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPLiteralContentQuestionTemplate.php @@ -50,5 +50,16 @@ class RSVPLiteralContentQuestionTemplate extends RSVPQuestionTemplate $this->content = $content; } + public static $metadata = [ + 'content' => 'string', + 'class_name' => self::ClassName, + ]; + + /** + * @return array + */ + public static function getMetadata(){ + return array_merge(RSVPQuestionTemplate::getMetadata(), self::$metadata); + } } \ No newline at end of file diff --git a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPMemberEmailQuestionTemplate.php b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPMemberEmailQuestionTemplate.php index ded09c19..4cbcd3de 100644 --- a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPMemberEmailQuestionTemplate.php +++ b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPMemberEmailQuestionTemplate.php @@ -27,4 +27,15 @@ class RSVPMemberEmailQuestionTemplate extends RSVPTextBoxQuestionTemplate public function getClassName(){ return self::ClassName; } + + public static $metadata = [ + 'class_name' => self::ClassName, + ]; + + /** + * @return array + */ + public static function getMetadata(){ + return array_merge(RSVPTextBoxQuestionTemplate::getMetadata(), self::$metadata); + } } \ No newline at end of file diff --git a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPMemberFirstNameQuestionTemplate.php b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPMemberFirstNameQuestionTemplate.php index 00ec1fbe..b28c5fe4 100644 --- a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPMemberFirstNameQuestionTemplate.php +++ b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPMemberFirstNameQuestionTemplate.php @@ -27,4 +27,15 @@ class RSVPMemberFirstNameQuestionTemplate extends RSVPTextBoxQuestionTemplate public function getClassName(){ return self::ClassName; } + + public static $metadata = [ + 'class_name' => self::ClassName, + ]; + + /** + * @return array + */ + public static function getMetadata(){ + return array_merge(RSVPTextBoxQuestionTemplate::getMetadata(), self::$metadata); + } } \ No newline at end of file diff --git a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPMemberLastNameQuestionTemplate.php b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPMemberLastNameQuestionTemplate.php index a13e491e..399359bd 100644 --- a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPMemberLastNameQuestionTemplate.php +++ b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPMemberLastNameQuestionTemplate.php @@ -27,4 +27,15 @@ class RSVPMemberLastNameQuestionTemplate extends RSVPTextBoxQuestionTemplate public function getClassName(){ return self::ClassName; } + + public static $metadata = [ + 'class_name' => self::ClassName, + ]; + + /** + * @return array + */ + public static function getMetadata(){ + return array_merge(RSVPTextBoxQuestionTemplate::getMetadata(), self::$metadata); + } } \ No newline at end of file diff --git a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPMultiValueQuestionTemplate.php b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPMultiValueQuestionTemplate.php index d473767f..855c57f5 100644 --- a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPMultiValueQuestionTemplate.php +++ b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPMultiValueQuestionTemplate.php @@ -104,7 +104,23 @@ class RSVPMultiValueQuestionTemplate extends RSVPQuestionTemplate * @return string */ public function getClassName(){ - return 'RSVPMultiValueQuestionTemplate'; + return self::ClassName; + } + + const ClassName = 'RSVPMultiValueQuestionTemplate'; + + public static $metadata = [ + 'empty_string' => 'string', + 'values' => 'array', + 'default_value_id' => 'integer', + 'class_name' => self::ClassName, + ]; + + /** + * @return array + */ + public static function getMetadata(){ + return array_merge(RSVPQuestionTemplate::getMetadata(), self::$metadata); } /** diff --git a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPQuestionTemplate.php b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPQuestionTemplate.php index 07883ce9..d52dd0e7 100644 --- a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPQuestionTemplate.php +++ b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPQuestionTemplate.php @@ -197,4 +197,20 @@ class RSVPQuestionTemplate extends SilverstripeBaseModel implements IOrderable $this->order = 0; } + public static $metadata = [ + 'name' => 'string', + 'label' => 'string', + 'is_mandatory' => 'boolean', + 'is_read_only' => 'boolean', + 'template_id' => 'integer', + 'order' => 'integer' + ]; + + /** + * @return array + */ + public static function getMetadata(){ + return self::$metadata; + } + } \ No newline at end of file diff --git a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPRadioButtonListQuestionTemplate.php b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPRadioButtonListQuestionTemplate.php index 3bc68428..448cf9fc 100644 --- a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPRadioButtonListQuestionTemplate.php +++ b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPRadioButtonListQuestionTemplate.php @@ -27,4 +27,15 @@ class RSVPRadioButtonListQuestionTemplate extends RSVPMultiValueQuestionTemplate public function getClassName(){ return self::ClassName; } + + public static $metadata = [ + 'class_name' => self::ClassName, + ]; + + /** + * @return array + */ + public static function getMetadata(){ + return array_merge(RSVPMultiValueQuestionTemplate::getMetadata(), self::$metadata); + } } \ No newline at end of file diff --git a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPSingleValueTemplateQuestion.php b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPSingleValueTemplateQuestion.php index 43b93efa..0f0af774 100644 --- a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPSingleValueTemplateQuestion.php +++ b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPSingleValueTemplateQuestion.php @@ -46,6 +46,20 @@ class RSVPSingleValueTemplateQuestion extends RSVPQuestionTemplate * @return string */ public function getClassName(){ - return 'RSVPSingleValueTemplateQuestion'; + return self::ClassName; + } + + const ClassName = 'RSVPSingleValueTemplateQuestion'; + + public static $metadata = [ + 'initial_value' => 'string', + 'class_name' => self::ClassName, + ]; + + /** + * @return array + */ + public static function getMetadata(){ + return array_merge(RSVPQuestionTemplate::getMetadata(), self::$metadata); } } \ No newline at end of file diff --git a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPTextAreaQuestionTemplate.php b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPTextAreaQuestionTemplate.php index 56b61df5..6cb815fe 100644 --- a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPTextAreaQuestionTemplate.php +++ b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPTextAreaQuestionTemplate.php @@ -27,4 +27,15 @@ class RSVPTextAreaQuestionTemplate extends RSVPSingleValueTemplateQuestion public function getClassName(){ return self::ClassName; } + + public static $metadata = [ + 'class_name' => self::ClassName, + ]; + + /** + * @return array + */ + public static function getMetadata(){ + return array_merge(RSVPSingleValueTemplateQuestion::getMetadata(), self::$metadata); + } } \ No newline at end of file diff --git a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPTextBoxQuestionTemplate.php b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPTextBoxQuestionTemplate.php index d1c384b9..b403fe0f 100644 --- a/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPTextBoxQuestionTemplate.php +++ b/app/Models/Foundation/Summit/Events/RSVP/Templates/RSVPTextBoxQuestionTemplate.php @@ -27,4 +27,15 @@ class RSVPTextBoxQuestionTemplate extends RSVPSingleValueTemplateQuestion public function getClassName(){ return self::ClassName; } + + public static $metadata = [ + 'class_name' => self::ClassName, + ]; + + /** + * @return array + */ + public static function getMetadata(){ + return array_merge(RSVPSingleValueTemplateQuestion::getMetadata(), self::$metadata); + } } \ No newline at end of file diff --git a/app/Models/Foundation/Summit/Repositories/IRSVPTemplateRepository.php b/app/Models/Foundation/Summit/Repositories/IRSVPTemplateRepository.php index 9bdcb4eb..76816bba 100644 --- a/app/Models/Foundation/Summit/Repositories/IRSVPTemplateRepository.php +++ b/app/Models/Foundation/Summit/Repositories/IRSVPTemplateRepository.php @@ -38,4 +38,10 @@ interface IRSVPTemplateRepository extends IBaseRepository Order $order = null ); + /** + * @param Summit $summit + * @return mixed + */ + public function getQuestionsMetadata(Summit $summit); + } \ No newline at end of file diff --git a/app/Repositories/Summit/DoctrineRSVPTemplateRepository.php b/app/Repositories/Summit/DoctrineRSVPTemplateRepository.php index 292c5cc5..4a541eb9 100644 --- a/app/Repositories/Summit/DoctrineRSVPTemplateRepository.php +++ b/app/Repositories/Summit/DoctrineRSVPTemplateRepository.php @@ -11,7 +11,16 @@ * See the License for the specific language governing permissions and * limitations under the License. **/ +use App\Models\Foundation\Summit\Events\RSVP\RSVPCheckBoxListQuestionTemplate; +use App\Models\Foundation\Summit\Events\RSVP\RSVPDropDownQuestionTemplate; +use App\Models\Foundation\Summit\Events\RSVP\RSVPLiteralContentQuestionTemplate; +use App\Models\Foundation\Summit\Events\RSVP\RSVPMemberEmailQuestionTemplate; +use App\Models\Foundation\Summit\Events\RSVP\RSVPMemberFirstNameQuestionTemplate; +use App\Models\Foundation\Summit\Events\RSVP\RSVPMemberLastNameQuestionTemplate; +use App\Models\Foundation\Summit\Events\RSVP\RSVPRadioButtonListQuestionTemplate; use App\Models\Foundation\Summit\Events\RSVP\RSVPTemplate; +use App\Models\Foundation\Summit\Events\RSVP\RSVPTextAreaQuestionTemplate; +use App\Models\Foundation\Summit\Events\RSVP\RSVPTextBoxQuestionTemplate; use App\Models\Foundation\Summit\Repositories\IRSVPTemplateRepository; use App\Repositories\SilverStripeDoctrineRepository; use Doctrine\ORM\Tools\Pagination\Paginator; @@ -112,4 +121,23 @@ final class DoctrineRSVPTemplateRepository $data ); } + + /** + * @param Summit $summit + * @return array + */ + public function getQuestionsMetadata(Summit $summit) + { + return [ + RSVPMemberEmailQuestionTemplate::getMetadata(), + RSVPMemberFirstNameQuestionTemplate::getMetadata(), + RSVPMemberLastNameQuestionTemplate::getMetadata(), + RSVPTextBoxQuestionTemplate::getMetadata(), + RSVPTextAreaQuestionTemplate::getMetadata(), + RSVPCheckBoxListQuestionTemplate::getMetadata(), + RSVPRadioButtonListQuestionTemplate::getMetadata(), + RSVPDropDownQuestionTemplate::getMetadata(), + RSVPLiteralContentQuestionTemplate::getMetadata(), + ]; + } } \ No newline at end of file diff --git a/database/seeds/ApiEndpointsSeeder.php b/database/seeds/ApiEndpointsSeeder.php index adae5e58..0aa14176 100644 --- a/database/seeds/ApiEndpointsSeeder.php +++ b/database/seeds/ApiEndpointsSeeder.php @@ -746,6 +746,14 @@ class ApiEndpointsSeeder extends Seeder sprintf(SummitScopes::WriteRSVPTemplateData, $current_realm) ], ], + [ + 'name' => 'get-rsvp-template-question-metadata', + 'route' => '/api/v1/summits/{id}/rsvp-templates/questions/metadata', + 'http_method' => 'GET', + 'scopes' => [ + sprintf(SummitScopes::ReadAllSummitData, $current_realm) + ], + ], [ 'name' => 'update-rsvp-template', 'route' => '/api/v1/summits/{id}/rsvp-templates/{template_id}', diff --git a/tests/OAuth2SummitRSVPTemplateApiTest.php b/tests/OAuth2SummitRSVPTemplateApiTest.php index 2b841426..f1eb185d 100644 --- a/tests/OAuth2SummitRSVPTemplateApiTest.php +++ b/tests/OAuth2SummitRSVPTemplateApiTest.php @@ -48,6 +48,37 @@ final class OAuth2SummitRSVPTemplateApiTest extends ProtectedApiTest return $rsvp_templates; } + public function testGetSummitRSVPTemplateQuestionsMetadata($summit_id = 23) + { + $params = [ + 'id' => $summit_id, + ]; + + $headers = + [ + "HTTP_Authorization" => " Bearer " . $this->access_token, + "CONTENT_TYPE" => "application/json" + ]; + + $response = $this->action + ( + "GET", + "OAuth2SummitRSVPTemplatesApiController@getRSVPTemplateQuestionsMetadata", + $params, + [], + [], + [], + $headers + ); + + $content = $response->getContent(); + $this->assertResponseStatus(200); + + $metadata = json_decode($content); + $this->assertTrue(!is_null($metadata)); + return $metadata; + } + public function testGetRSVPTemplateById($summit_id = 23){ $templates = $this->testGetSummitRSVPTemplates($summit_id);