Fixed my speaker profile
added endpoint to update my speaker profile PUT /api/v1/speakers/me payload 'title' => 'sometimes|string|max:100', 'first_name' => 'sometimes|string|max:100', 'last_name' => 'sometimes|string|max:100', 'bio' => 'sometimes|string', 'notes' => 'sometimes|string', 'irc' => 'sometimes|string|max:50', 'twitter' => 'sometimes|string|max:50', 'member_id' => 'sometimes|integer', 'email' => 'sometimes|string|max:50', 'available_for_bureau' => 'sometimes|boolean', 'funded_travel' => 'sometimes|boolean', 'willing_to_travel' => 'sometimes|boolean', 'willing_to_present_video' => 'sometimes|boolean', 'org_has_cloud' => 'sometimes|boolean', 'country' => 'sometimes|country_iso_alpha2_code', scopes %s/speakers/write/me Change-Id: I7efcfcb65d5347bc24ab82e6d41b7c345a1d1cdd
This commit is contained in:
parent
2dcb7c559e
commit
210c46e3ee
|
@ -405,6 +405,37 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function updateMySpeaker()
|
||||
{
|
||||
try {
|
||||
$current_member_id = $this->resource_server_context->getCurrentUserExternalId();
|
||||
if (is_null($current_member_id))
|
||||
return $this->error403();
|
||||
|
||||
$member = $this->member_repository->getById($current_member_id);
|
||||
if (is_null($member))
|
||||
return $this->error403();
|
||||
|
||||
$speaker = $this->speaker_repository->getByMember($member);
|
||||
if (is_null($speaker)) return $this->error404();
|
||||
|
||||
return $this->updateSpeaker($speaker->getId());
|
||||
|
||||
} catch (ValidationException $ex1) {
|
||||
Log::warning($ex1);
|
||||
return $this->error412($ex1->getMessages());
|
||||
} catch (EntityNotFoundException $ex2) {
|
||||
Log::warning($ex2);
|
||||
return $this->error404(array('message' => $ex2->getMessage()));
|
||||
} catch (Exception $ex) {
|
||||
Log::error($ex);
|
||||
return $this->error500($ex);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $speaker_id
|
||||
* @return mixed
|
||||
|
@ -454,8 +485,7 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
|
|||
$summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id);
|
||||
if (is_null($summit)) return $this->error404();
|
||||
|
||||
$rules = array
|
||||
(
|
||||
$rules = [
|
||||
'title' => 'required|string|max:100',
|
||||
'first_name' => 'required|string|max:100',
|
||||
'last_name' => 'required|string|max:100',
|
||||
|
@ -469,7 +499,13 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
|
|||
'is_confirmed' => 'sometimes|boolean',
|
||||
'checked_in' => 'sometimes|boolean',
|
||||
'registration_code' => 'sometimes|string',
|
||||
);
|
||||
'available_for_bureau' => 'sometimes|boolean',
|
||||
'funded_travel' => 'sometimes|boolean',
|
||||
'willing_to_travel' => 'sometimes|boolean',
|
||||
'willing_to_present_video' => 'sometimes|boolean',
|
||||
'org_has_cloud' => 'sometimes|boolean',
|
||||
'country' => 'sometimes|country_iso_alpha2_code',
|
||||
];
|
||||
|
||||
// Creates a Validator instance and validates the data.
|
||||
$validation = Validator::make($data->all(), $rules);
|
||||
|
@ -520,8 +556,7 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
|
|||
$speaker = $this->speaker_repository->getById($speaker_id);
|
||||
if (is_null($speaker)) return $this->error404();
|
||||
|
||||
$rules = array
|
||||
(
|
||||
$rules = [
|
||||
'title' => 'sometimes|string|max:100',
|
||||
'first_name' => 'sometimes|string|max:100',
|
||||
'last_name' => 'sometimes|string|max:100',
|
||||
|
@ -535,7 +570,13 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
|
|||
'is_confirmed' => 'sometimes|boolean',
|
||||
'checked_in' => 'sometimes|boolean',
|
||||
'registration_code' => 'sometimes|string',
|
||||
);
|
||||
'available_for_bureau' => 'sometimes|boolean',
|
||||
'funded_travel' => 'sometimes|boolean',
|
||||
'willing_to_travel' => 'sometimes|boolean',
|
||||
'willing_to_present_video' => 'sometimes|boolean',
|
||||
'org_has_cloud' => 'sometimes|boolean',
|
||||
'country' => 'sometimes|country_iso_alpha2_code',
|
||||
];
|
||||
|
||||
// Creates a Validator instance and validates the data.
|
||||
$validation = Validator::make($data->all(), $rules);
|
||||
|
@ -657,6 +698,8 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
|
|||
'funded_travel' => 'sometimes|boolean',
|
||||
'willing_to_travel' => 'sometimes|boolean',
|
||||
'willing_to_present_video' => 'sometimes|boolean',
|
||||
'org_has_cloud' => 'sometimes|boolean',
|
||||
'country' => 'sometimes|country_iso_alpha2_code',
|
||||
];
|
||||
|
||||
// Creates a Validator instance and validates the data.
|
||||
|
@ -706,8 +749,7 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
|
|||
$speaker = $this->speaker_repository->getById($speaker_id);
|
||||
if (is_null($speaker)) return $this->error404();
|
||||
|
||||
$rules = array
|
||||
(
|
||||
$rules = [
|
||||
'title' => 'sometimes|string|max:100',
|
||||
'first_name' => 'sometimes|string|max:100',
|
||||
'last_name' => 'sometimes|string|max:100',
|
||||
|
@ -721,7 +763,9 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
|
|||
'funded_travel' => 'sometimes|boolean',
|
||||
'willing_to_travel' => 'sometimes|boolean',
|
||||
'willing_to_present_video' => 'sometimes|boolean',
|
||||
);
|
||||
'org_has_cloud' => 'sometimes|boolean',
|
||||
'country' => 'sometimes|country_iso_alpha2_code',
|
||||
];
|
||||
|
||||
// Creates a Validator instance and validates the data.
|
||||
$validation = Validator::make($data->all(), $rules);
|
||||
|
@ -746,10 +790,10 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
|
|||
return $this->updated(SerializerRegistry::getInstance()->getSerializer($speaker, SerializerRegistry::SerializerType_Private)->serialize());
|
||||
} catch (ValidationException $ex1) {
|
||||
Log::warning($ex1);
|
||||
return $this->error412(array($ex1->getMessage()));
|
||||
return $this->error412([$ex1->getMessage()]);
|
||||
} catch (EntityNotFoundException $ex2) {
|
||||
Log::warning($ex2);
|
||||
return $this->error404(array('message' => $ex2->getMessage()));
|
||||
return $this->error404(['message' => $ex2->getMessage()]);
|
||||
} catch (Exception $ex) {
|
||||
Log::error($ex);
|
||||
return $this->error500($ex);
|
||||
|
|
|
@ -597,6 +597,7 @@ Route::group([
|
|||
|
||||
// speakers
|
||||
Route::group(['prefix' => 'speakers'], function () {
|
||||
|
||||
Route::get('', 'OAuth2SummitSpeakersApiController@getAll');
|
||||
Route::post('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitSpeakersApiController@addSpeaker']);
|
||||
Route::put('merge/{speaker_from_id}/{speaker_to_id}', 'OAuth2SummitSpeakersApiController@merge');
|
||||
|
@ -604,6 +605,7 @@ Route::group([
|
|||
Route::group(['prefix' => 'me'], function(){
|
||||
Route::get('', 'OAuth2SummitSpeakersApiController@getMySpeaker');
|
||||
Route::post('', 'OAuth2SummitSpeakersApiController@createMySpeaker');
|
||||
Route::put('', 'OAuth2SummitSpeakersApiController@updateMySpeaker');
|
||||
Route::group(['prefix' => 'presentations'], function(){
|
||||
|
||||
Route::group(['prefix' => '{presentation_id}'], function(){
|
||||
|
|
|
@ -19,11 +19,7 @@ use models\summit\PresentationSpeaker;
|
|||
final class AdminPresentationSpeakerSerializer extends PresentationSpeakerSerializer
|
||||
{
|
||||
protected static $array_mappings = [
|
||||
'AvailableForBureau' => 'available_for_bureau:json_boolean',
|
||||
'FundedTravel' => 'funded_travel:json_boolean',
|
||||
'WillingToTravel' => 'willing_to_travel:json_boolean',
|
||||
'WillingToPresentVideo' => 'willing_to_present_video:json_boolean',
|
||||
'Notes' => 'notes:json_string'
|
||||
'Notes'=> 'notes:json_string'
|
||||
];
|
||||
|
||||
/**
|
||||
|
|
|
@ -27,6 +27,13 @@ class PresentationSpeakerSerializer extends SilverStripeSerializer
|
|||
'Bio' => 'bio:json_string',
|
||||
'IRCHandle' => 'irc:json_string',
|
||||
'TwitterName' => 'twitter:json_string',
|
||||
'OrgHasCloud' => 'org_has_cloud:json_boolean',
|
||||
'Country' => 'country:json_string',
|
||||
'AvailableForBureau' => 'available_for_bureau:json_boolean',
|
||||
'FundedTravel' => 'funded_travel:json_boolean',
|
||||
'WillingToTravel' => 'willing_to_travel:json_boolean',
|
||||
'WillingToPresentVideo' => 'willing_to_present_video:json_boolean',
|
||||
|
||||
];
|
||||
|
||||
protected static $allowed_relations = [
|
||||
|
|
|
@ -309,6 +309,12 @@ final class SpeakerService
|
|||
|
||||
if(isset($data['willing_to_present_video']))
|
||||
$speaker->setWillingToPresentVideo(boolval($data['willing_to_present_video']));
|
||||
|
||||
if(isset($data['org_has_cloud']))
|
||||
$speaker->setOrgHasCloud(boolval($data['org_has_cloud']));
|
||||
|
||||
if(isset($data['country']))
|
||||
$speaker->setCountry(trim($data['country']));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -386,22 +386,30 @@ class ApiEndpointsSeeder extends Seeder
|
|||
sprintf(SummitScopes::WriteMySpeakersData, $current_realm)
|
||||
],
|
||||
],
|
||||
array(
|
||||
[
|
||||
'name' => 'create-my-speaker',
|
||||
'route' => '/api/v1/speakers/me',
|
||||
'http_method' => 'POST',
|
||||
'scopes' => [
|
||||
sprintf(SummitScopes::WriteMySpeakersData, $current_realm),
|
||||
],
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'update-my-speaker',
|
||||
'route' => '/api/v1/speakers/me',
|
||||
'http_method' => 'PUT',
|
||||
'scopes' => [
|
||||
sprintf(SummitScopes::WriteMySpeakersData, $current_realm),
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'merge-speakers',
|
||||
'route' => '/api/v1/speakers/merge/{speaker_from_id}/{speaker_to_id}',
|
||||
'http_method' => 'PUT',
|
||||
'scopes' => [
|
||||
sprintf(SummitScopes::WriteSpeakersData, $current_realm),
|
||||
],
|
||||
),
|
||||
],
|
||||
array(
|
||||
'name' => 'get-speaker-by-summit',
|
||||
'route' => '/api/v1/summits/{id}/speakers/{speaker_id}',
|
||||
|
@ -481,7 +489,7 @@ class ApiEndpointsSeeder extends Seeder
|
|||
sprintf(SummitScopes::ReadAllSummitData, $current_realm)
|
||||
],
|
||||
),
|
||||
array(
|
||||
[
|
||||
'name' => 'get-event',
|
||||
'route' => '/api/v1/summits/{id}/events/{event_id}',
|
||||
'http_method' => 'GET',
|
||||
|
@ -489,8 +497,8 @@ class ApiEndpointsSeeder extends Seeder
|
|||
sprintf(SummitScopes::ReadSummitData, $current_realm),
|
||||
sprintf(SummitScopes::ReadAllSummitData, $current_realm)
|
||||
],
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'get-published-event',
|
||||
'route' => '/api/v1/summits/{id}/events/{event_id}/published',
|
||||
'http_method' => 'GET',
|
||||
|
@ -498,67 +506,67 @@ class ApiEndpointsSeeder extends Seeder
|
|||
sprintf(SummitScopes::ReadSummitData, $current_realm),
|
||||
sprintf(SummitScopes::ReadAllSummitData, $current_realm)
|
||||
],
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'add-event',
|
||||
'route' => '/api/v1/summits/{id}/events',
|
||||
'http_method' => 'POST',
|
||||
'scopes' => [sprintf(SummitScopes::WriteEventData, $current_realm)],
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'update-event',
|
||||
'route' => '/api/v1/summits/{id}/events/{event_id}',
|
||||
'http_method' => 'PUT',
|
||||
'scopes' => [sprintf(SummitScopes::WriteEventData, $current_realm)],
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'update-events',
|
||||
'route' => '/api/v1/summits/{id}/events',
|
||||
'http_method' => 'PUT',
|
||||
'scopes' => [sprintf(SummitScopes::WriteEventData, $current_realm)],
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'publish-event',
|
||||
'route' => '/api/v1/summits/{id}/events/{event_id}/publish',
|
||||
'http_method' => 'PUT',
|
||||
'scopes' => [sprintf(SummitScopes::PublishEventData, $current_realm)],
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'publish-events',
|
||||
'route' => '/api/v1/summits/{id}/events/publish',
|
||||
'http_method' => 'PUT',
|
||||
'scopes' => [sprintf(SummitScopes::PublishEventData, $current_realm)],
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'unpublish-event',
|
||||
'route' => '/api/v1/summits/{id}/events/{event_id}/publish',
|
||||
'http_method' => 'DELETE',
|
||||
'scopes' => [sprintf(SummitScopes::PublishEventData, $current_realm)],
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'unpublish-events',
|
||||
'route' => '/api/v1/summits/{id}/events/publish',
|
||||
'http_method' => 'DELETE',
|
||||
'scopes' => [sprintf(SummitScopes::PublishEventData, $current_realm)],
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'delete-event',
|
||||
'route' => '/api/v1/summits/{id}/events/{event_id}',
|
||||
'http_method' => 'DELETE',
|
||||
'scopes' => [sprintf('%s/summits/delete-event', $current_realm)],
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'add-event-feedback',
|
||||
'route' => '/api/v1/summits/{id}/events/{event_id}/feedback',
|
||||
'http_method' => 'POST',
|
||||
'scopes' => [sprintf(SummitScopes::WriteSummitData, $current_realm)],
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'add-event-attachment',
|
||||
'route' => '/api/v1/summits/{id}/events/{event_id}/attachment',
|
||||
'http_method' => 'POST',
|
||||
'scopes' => [sprintf(SummitScopes::WriteSummitData, $current_realm)],
|
||||
),
|
||||
],
|
||||
[
|
||||
'name' => 'add-event-feedback-v2',
|
||||
'route' => '/api/v2/summits/{id}/events/{event_id}/feedback',
|
||||
|
|
Loading…
Reference in New Issue