Updated Feedback Endpoints
GET api/v1/summits/{id}/members/me/schedule/{event_id}/feedback Required Scopes REALM_URL/me/read POST api/v1/summits/{id}/members/me/schedule/{event_id}/feedback Payload 'rate' => 'required|integer|digits_between:0,5', 'note' => 'max:500', Required Scopes REALM_URL/me/summits/events/feedback/add PUT api/v1/summits/{id}/members/me/schedule/{event_id}/feedback Payload 'rate' => 'required|integer|digits_between:0,5', 'note' => 'max:500', Required Scopes REALM_URL/me/summits/events/feedback/add DELETE api/v1/summits/{id}/members/me/schedule/{event_id}/feedback Required Scopes REALM_URL/me/summits/events/feedback/delete Change-Id: I754e8bfbc15554280fba436b1168dcfbb0299f88 Signed-off-by: smarcet <smarcet@gmail.com>
This commit is contained in:
parent
7dfe201633
commit
3d4a9f97b6
@ -698,10 +698,9 @@ final class OAuth2SummitEventsApiController extends OAuth2ProtectedController
|
||||
/**
|
||||
* @param $summit_id
|
||||
* @param $event_id
|
||||
* @param $attendee_id
|
||||
* @return mixed
|
||||
*/
|
||||
public function getEventFeedback($summit_id, $event_id, $attendee_id = null)
|
||||
public function getEventFeedback($summit_id, $event_id)
|
||||
{
|
||||
|
||||
try {
|
||||
@ -732,18 +731,6 @@ final class OAuth2SummitEventsApiController extends OAuth2ProtectedController
|
||||
}
|
||||
|
||||
$filter = null;
|
||||
if (!is_null($attendee_id)) // add filter by attendee, this case me
|
||||
{
|
||||
if($attendee_id !== 'me') return $this->error403();
|
||||
$current_member = $this->resource_server_context->getCurrentUser();
|
||||
if (is_null($current_member)) return $this->error403();
|
||||
|
||||
$filter = FilterParser::parse('owner_id=='.$current_member->getId(), array
|
||||
(
|
||||
'owner_id' => array('=='),
|
||||
));
|
||||
}
|
||||
|
||||
// default values
|
||||
$page = 1;
|
||||
$per_page = 5;
|
||||
@ -782,219 +769,222 @@ final class OAuth2SummitEventsApiController extends OAuth2ProtectedController
|
||||
}
|
||||
|
||||
/**
|
||||
* @param LaravelRequest $request
|
||||
* @param $summit_id
|
||||
* @param $event_id
|
||||
* @return mixed
|
||||
* @return \Illuminate\Http\JsonResponse|mixed
|
||||
*/
|
||||
public function addEventFeedback(LaravelRequest $request, $summit_id, $event_id)
|
||||
{
|
||||
try {
|
||||
if (!$request->isJson()) {
|
||||
return $this->error412(array('invalid content type!'));
|
||||
}
|
||||
|
||||
$summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id);
|
||||
if (is_null($summit)) return $this->error404();
|
||||
if(!Request::isJson()) return $this->error400();
|
||||
|
||||
$data = Input::json();
|
||||
|
||||
$rules = array
|
||||
(
|
||||
'rate' => 'required|integer|digits_between:0,10',
|
||||
'note' => 'required|max:500',
|
||||
'attendee_id' => 'required'
|
||||
);
|
||||
|
||||
// Creates a Validator instance and validates the data.
|
||||
$validation = Validator::make($data->all(), $rules);
|
||||
|
||||
if ($validation->fails()) {
|
||||
$messages = $validation->messages()->toArray();
|
||||
|
||||
return $this->error412
|
||||
(
|
||||
$messages
|
||||
);
|
||||
}
|
||||
|
||||
$event = $summit->getScheduleEvent(intval($event_id));
|
||||
|
||||
if (is_null($event)) {
|
||||
return $this->error404();
|
||||
}
|
||||
|
||||
$data = $data->all();
|
||||
$attendee_id = $data['attendee_id'];
|
||||
|
||||
$attendee = CheckAttendeeStrategyFactory::build
|
||||
(
|
||||
CheckAttendeeStrategyFactory::Own,
|
||||
$this->resource_server_context
|
||||
)->check($attendee_id, $summit);
|
||||
|
||||
if (is_null($attendee)) return $this->error404();
|
||||
|
||||
$data['attendee_id'] = intval($attendee->getId());
|
||||
|
||||
$res = $this->service->addEventFeedback
|
||||
(
|
||||
$summit,
|
||||
$event,
|
||||
$data
|
||||
);
|
||||
|
||||
return !is_null($res) ? $this->created($res->getId()) : $this->error400();
|
||||
}
|
||||
catch (EntityNotFoundException $ex1) {
|
||||
Log::warning($ex1);
|
||||
return $this->error404();
|
||||
}
|
||||
catch(ValidationException $ex2)
|
||||
{
|
||||
Log::warning($ex2);
|
||||
return $this->error412(array($ex2->getMessage()));
|
||||
}
|
||||
catch(\HTTP401UnauthorizedException $ex3)
|
||||
{
|
||||
Log::warning($ex3);
|
||||
return $this->error401();
|
||||
}
|
||||
catch (Exception $ex) {
|
||||
Log::error($ex);
|
||||
|
||||
return $this->error500($ex);
|
||||
}
|
||||
public function addMyEventFeedbackReturnId($summit_id, $event_id){
|
||||
return $this->_addMyEventFeedback($summit_id, $event_id, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param LaravelRequest $request
|
||||
* @param $summit_id
|
||||
* @param $event_id
|
||||
* @return mixed
|
||||
* @return \Illuminate\Http\JsonResponse|mixed
|
||||
*/
|
||||
public function addEventFeedbackByMember(LaravelRequest $request, $summit_id, $event_id)
|
||||
{
|
||||
try {
|
||||
|
||||
list($summit, $event, $data) = $this->validateAndGetFeedbackData($request, $summit_id, $event_id);
|
||||
|
||||
$res = $this->service->addEventFeedback
|
||||
(
|
||||
$summit,
|
||||
$event,
|
||||
$data
|
||||
);
|
||||
|
||||
return !is_null($res) ? $this->created($res->getId()) : $this->error400();
|
||||
public function addMyEventFeedback($summit_id, $event_id){
|
||||
return $this->_addMyEventFeedback($summit_id, $event_id, false);
|
||||
}
|
||||
catch (EntityNotFoundException $ex1) {
|
||||
Log::warning($ex1);
|
||||
return $this->error404();
|
||||
}
|
||||
catch(ValidationException $ex2)
|
||||
{
|
||||
Log::warning($ex2);
|
||||
return $this->error412(array($ex2->getMessage()));
|
||||
}
|
||||
catch(\HTTP401UnauthorizedException $ex3)
|
||||
{
|
||||
Log::warning($ex3);
|
||||
return $this->error401();
|
||||
}
|
||||
catch (Exception $ex) {
|
||||
Log::error($ex);
|
||||
|
||||
return $this->error500($ex);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param LaravelRequest $request
|
||||
* @param $summit_id
|
||||
* @param $event_id
|
||||
* @return mixed
|
||||
* @param bool $returnId
|
||||
* @return \Illuminate\Http\JsonResponse|mixed
|
||||
*/
|
||||
public function updateEventFeedbackByMember(LaravelRequest $request, $summit_id, $event_id)
|
||||
{
|
||||
private function _addMyEventFeedback($summit_id, $event_id, $returnId = false){
|
||||
try {
|
||||
|
||||
list($summit, $event, $data) = $this->validateAndGetFeedbackData($request, $summit_id, $event_id);
|
||||
$res = $this->service->updateEventFeedback
|
||||
(
|
||||
$summit,
|
||||
$event,
|
||||
$data
|
||||
);
|
||||
|
||||
return !is_null($res) ? $this->updated($res->getId()) : $this->error400();
|
||||
}
|
||||
catch (EntityNotFoundException $ex1) {
|
||||
Log::warning($ex1);
|
||||
return $this->error404();
|
||||
}
|
||||
catch(ValidationException $ex2)
|
||||
{
|
||||
Log::warning($ex2);
|
||||
return $this->error412(array($ex2->getMessage()));
|
||||
}
|
||||
catch(\HTTP401UnauthorizedException $ex3)
|
||||
{
|
||||
Log::warning($ex3);
|
||||
return $this->error401();
|
||||
}
|
||||
catch (Exception $ex) {
|
||||
Log::error($ex);
|
||||
|
||||
return $this->error500($ex);
|
||||
}
|
||||
}
|
||||
|
||||
private function validateAndGetFeedbackData(LaravelRequest $request, $summit_id, $event_id){
|
||||
if (!$request->isJson()) {
|
||||
return $this->error412(array('invalid content type!'));
|
||||
}
|
||||
|
||||
$summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id);
|
||||
if (is_null($summit)) return $this->error404();
|
||||
if(!Request::isJson()) return $this->error400();
|
||||
|
||||
$data = Input::json();
|
||||
|
||||
$rules = array
|
||||
(
|
||||
'rate' => 'required|integer|digits_between:0,5',
|
||||
'note' => 'max:500',
|
||||
);
|
||||
|
||||
// Creates a Validator instance and validates the data.
|
||||
$validation = Validator::make($data->all(), $rules);
|
||||
|
||||
if ($validation->fails()) {
|
||||
$messages = $validation->messages()->toArray();
|
||||
|
||||
return $this->error412
|
||||
(
|
||||
$messages
|
||||
);
|
||||
}
|
||||
|
||||
$event = $summit->getScheduleEvent(intval($event_id));
|
||||
|
||||
if (is_null($event)) {
|
||||
return $this->error404();
|
||||
}
|
||||
|
||||
$data = $data->all();
|
||||
$current_member = $this->resource_server_context->getCurrentUser();
|
||||
if (is_null($current_member)) return $this->error403();
|
||||
|
||||
$data['member_id'] = $current_member->getId();
|
||||
$payload = $this->getJsonPayload([
|
||||
'rate' => 'required|integer|digits_between:0,5',
|
||||
'note' => 'max:500',
|
||||
]);
|
||||
|
||||
return [$summit, $event, $data];
|
||||
$feedback = $this->service->addMyEventFeedback
|
||||
(
|
||||
$current_member,
|
||||
$summit,
|
||||
$event_id,
|
||||
$payload
|
||||
);
|
||||
|
||||
if($returnId){
|
||||
return $this->updated($feedback->getId());
|
||||
}
|
||||
|
||||
return $this->created(SerializerRegistry::getInstance()->getSerializer($feedback)->serialize
|
||||
(
|
||||
Request::input('expand', '')
|
||||
));
|
||||
}
|
||||
catch (EntityNotFoundException $ex) {
|
||||
Log::warning($ex);
|
||||
return $this->error404();
|
||||
}
|
||||
catch (ValidationException $ex) {
|
||||
Log::warning($ex);
|
||||
return $this->error412(array($ex->getMessage()));
|
||||
}
|
||||
catch (Exception $ex) {
|
||||
Log::error($ex);
|
||||
return $this->error500($ex);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $summit_id
|
||||
* @param $event_id
|
||||
* @return \Illuminate\Http\JsonResponse|mixed
|
||||
*/
|
||||
public function updateMyEventFeedbackReturnId($summit_id, $event_id){
|
||||
return $this->_updateMyEventFeedback($summit_id, $event_id, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $summit_id
|
||||
* @param $event_id
|
||||
* @return \Illuminate\Http\JsonResponse|mixed
|
||||
*/
|
||||
public function updateMyEventFeedback($summit_id, $event_id){
|
||||
return $this->_updateMyEventFeedback($summit_id, $event_id, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $summit_id
|
||||
* @param $event_id
|
||||
* @param bool $returnId
|
||||
* @return \Illuminate\Http\JsonResponse|mixed
|
||||
*/
|
||||
private function _updateMyEventFeedback($summit_id, $event_id, $returnId = false)
|
||||
{
|
||||
try {
|
||||
$summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id);
|
||||
if (is_null($summit)) return $this->error404();
|
||||
|
||||
$current_member = $this->resource_server_context->getCurrentUser();
|
||||
if (is_null($current_member)) return $this->error403();
|
||||
|
||||
$payload = $this->getJsonPayload([
|
||||
'rate' => 'required|integer|digits_between:0,5',
|
||||
'note' => 'max:500',
|
||||
]);
|
||||
|
||||
$feedback = $this->service->updateMyEventFeedback
|
||||
(
|
||||
$current_member,
|
||||
$summit,
|
||||
$event_id,
|
||||
$payload
|
||||
);
|
||||
|
||||
if($returnId){
|
||||
return $this->updated($feedback->getId());
|
||||
}
|
||||
|
||||
return $this->updated(SerializerRegistry::getInstance()->getSerializer($feedback)->serialize
|
||||
(
|
||||
Request::input('expand', '')
|
||||
));
|
||||
}
|
||||
catch (EntityNotFoundException $ex) {
|
||||
Log::warning($ex);
|
||||
return $this->error404();
|
||||
}
|
||||
catch (ValidationException $ex) {
|
||||
Log::warning($ex);
|
||||
return $this->error412(array($ex->getMessage()));
|
||||
}
|
||||
catch (Exception $ex) {
|
||||
Log::error($ex);
|
||||
return $this->error500($ex);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $summit_id
|
||||
* @param $event_id
|
||||
* @return \Illuminate\Http\JsonResponse|mixed
|
||||
*/
|
||||
public function getMyEventFeedback($summit_id, $event_id){
|
||||
try {
|
||||
$summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id);
|
||||
if (is_null($summit)) return $this->error404();
|
||||
|
||||
$current_member = $this->resource_server_context->getCurrentUser();
|
||||
if (is_null($current_member)) return $this->error403();
|
||||
|
||||
$feedback = $this->service->getMyEventFeedback
|
||||
(
|
||||
$current_member,
|
||||
$summit,
|
||||
$event_id
|
||||
);
|
||||
|
||||
return $this->ok(SerializerRegistry::getInstance()->getSerializer($feedback)->serialize
|
||||
(
|
||||
Request::input('expand', '')
|
||||
));
|
||||
}
|
||||
catch (EntityNotFoundException $ex) {
|
||||
Log::warning($ex);
|
||||
return $this->error404();
|
||||
}
|
||||
catch (ValidationException $ex) {
|
||||
Log::warning($ex);
|
||||
return $this->error412(array($ex->getMessage()));
|
||||
}
|
||||
catch (Exception $ex) {
|
||||
Log::error($ex);
|
||||
return $this->error500($ex);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $summit_id
|
||||
* @param $event_id
|
||||
* @return \Illuminate\Http\JsonResponse|mixed
|
||||
*/
|
||||
public function deleteMyEventFeedback($summit_id, $event_id){
|
||||
try {
|
||||
$summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id);
|
||||
if (is_null($summit)) return $this->error404();
|
||||
|
||||
$current_member = $this->resource_server_context->getCurrentUser();
|
||||
if (is_null($current_member)) return $this->error403();
|
||||
|
||||
$this->service->deleteMyEventFeedback
|
||||
(
|
||||
$current_member,
|
||||
$summit,
|
||||
$event_id
|
||||
);
|
||||
|
||||
return $this->deleted();
|
||||
}
|
||||
catch (EntityNotFoundException $ex) {
|
||||
Log::warning($ex);
|
||||
return $this->error404();
|
||||
}
|
||||
catch (ValidationException $ex) {
|
||||
Log::warning($ex);
|
||||
return $this->error412(array($ex->getMessage()));
|
||||
}
|
||||
catch (Exception $ex) {
|
||||
Log::error($ex);
|
||||
return $this->error500($ex);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param LaravelRequest $request
|
||||
* @param $summit_id
|
||||
* @param $event_id
|
||||
* @return \Illuminate\Http\JsonResponse|mixed
|
||||
*/
|
||||
public function addEventAttachment(LaravelRequest $request, $summit_id, $event_id){
|
||||
|
||||
try {
|
||||
@ -1031,6 +1021,10 @@ final class OAuth2SummitEventsApiController extends OAuth2ProtectedController
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $summit_id
|
||||
* @return \Illuminate\Http\JsonResponse|mixed
|
||||
*/
|
||||
public function getUnpublishedEvents($summit_id){
|
||||
|
||||
try
|
||||
@ -1062,6 +1056,10 @@ final class OAuth2SummitEventsApiController extends OAuth2ProtectedController
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $summit_id
|
||||
* @return \Illuminate\Http\JsonResponse|mixed
|
||||
*/
|
||||
public function getScheduleEmptySpots($summit_id){
|
||||
try
|
||||
{
|
||||
@ -1118,6 +1116,10 @@ final class OAuth2SummitEventsApiController extends OAuth2ProtectedController
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $summit_id
|
||||
* @return \Illuminate\Http\JsonResponse|mixed
|
||||
*/
|
||||
public function unPublishEvents($summit_id){
|
||||
try {
|
||||
$summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id);
|
||||
@ -1163,6 +1165,10 @@ final class OAuth2SummitEventsApiController extends OAuth2ProtectedController
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $summit_id
|
||||
* @return \Illuminate\Http\JsonResponse|mixed
|
||||
*/
|
||||
public function updateAndPublishEvents($summit_id){
|
||||
try {
|
||||
$summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id);
|
||||
@ -1208,6 +1214,10 @@ final class OAuth2SummitEventsApiController extends OAuth2ProtectedController
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $summit_id
|
||||
* @return \Illuminate\Http\JsonResponse|mixed
|
||||
*/
|
||||
public function updateEvents($summit_id){
|
||||
try {
|
||||
$summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id);
|
||||
@ -1256,7 +1266,7 @@ final class OAuth2SummitEventsApiController extends OAuth2ProtectedController
|
||||
/**
|
||||
* @param $summit_id
|
||||
* @param $event_id
|
||||
* @return mixed
|
||||
* @return \Illuminate\Http\JsonResponse|mixed
|
||||
*/
|
||||
public function cloneEvent($summit_id, $event_id)
|
||||
{
|
||||
@ -1285,5 +1295,4 @@ final class OAuth2SummitEventsApiController extends OAuth2ProtectedController
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -267,9 +267,12 @@ Route::group([
|
||||
Route::delete('', [ 'middleware' => 'auth.user', 'uses' => 'OAuth2SummitEventsApiController@deleteEvent' ]);
|
||||
Route::put('/publish', [ 'middleware' => 'auth.user', 'uses' => 'OAuth2SummitEventsApiController@publishEvent']);
|
||||
Route::delete('/publish', [ 'middleware' => 'auth.user', 'uses' => 'OAuth2SummitEventsApiController@unPublishEvent']);
|
||||
Route::post('/feedback', 'OAuth2SummitEventsApiController@addEventFeedback');
|
||||
|
||||
Route::post('/attachment', [ 'middleware' => 'auth.user', 'uses' => 'OAuth2SummitEventsApiController@addEventAttachment']);
|
||||
Route::get('/feedback/{attendee_id?}', ['middleware' => 'cache:'.Config::get('cache_api_response.get_event_feedback_response_lifetime', 300), 'uses' => 'OAuth2SummitEventsApiController@getEventFeedback'] )->where('attendee_id', 'me|[0-9]+');
|
||||
|
||||
Route::group(['prefix' => 'feedback'], function () {
|
||||
Route::get('', ['middleware' => 'cache:'.Config::get('cache_api_response.get_event_feedback_response_lifetime', 300), 'uses' => 'OAuth2SummitEventsApiController@getEventFeedback']);
|
||||
});
|
||||
});
|
||||
|
||||
Route::group(['prefix' => 'all'], function () {
|
||||
@ -574,9 +577,12 @@ Route::group([
|
||||
Route::get("", [ 'middleware' => 'auth.user', 'uses' => 'OAuth2SummitMembersApiController@getAllBySummit']);
|
||||
Route::get("csv", [ 'middleware' => 'auth.user', 'uses' => 'OAuth2SummitMembersApiController@getAllBySummitCSV']);
|
||||
Route::group(array('prefix' => '{member_id}'), function () {
|
||||
|
||||
Route::get('', 'OAuth2SummitMembersApiController@getMyMember')->where('member_id', 'me');
|
||||
|
||||
|
||||
// favorites
|
||||
Route::group(array('prefix' => 'favorites'), function ()
|
||||
Route::group(['prefix' => 'favorites'], function ()
|
||||
{
|
||||
Route::get('', 'OAuth2SummitMembersApiController@getMemberFavoritesSummitEvents')->where('member_id', 'me');
|
||||
|
||||
@ -598,12 +604,19 @@ Route::group([
|
||||
|
||||
Route::group(array('prefix' => '{event_id}'), function (){
|
||||
|
||||
Route::group(array('prefix' => 'rsvp'), function (){
|
||||
Route::group(['prefix' => 'rsvp'], function (){
|
||||
Route::post('', 'OAuth2SummitMembersApiController@addEventRSVP')->where('member_id', 'me');
|
||||
Route::put('', 'OAuth2SummitMembersApiController@updateEventRSVP')->where('member_id', 'me');
|
||||
Route::delete('', 'OAuth2SummitMembersApiController@deleteEventRSVP')->where('member_id', 'me');
|
||||
});
|
||||
|
||||
Route::group(['prefix' => 'feedback'], function (){
|
||||
Route::get('','OAuth2SummitMembersApiController@getMyEventFeedback')->where('member_id', 'me');
|
||||
Route::post('', 'OAuth2SummitMembersApiController@addMyEventFeedback')->where('member_id', 'me');
|
||||
Route::put('', 'OAuth2SummitMembersApiController@updateMyEventFeedback')->where('member_id', 'me');
|
||||
Route::delete('', 'OAuth2SummitMembersApiController@deleteMyEventFeedback')->where('member_id', 'me');
|
||||
});
|
||||
|
||||
Route::post('', 'OAuth2SummitMembersApiController@addEventToMemberSchedule')->where('member_id', 'me');
|
||||
Route::delete('', 'OAuth2SummitMembersApiController@removeEventFromMemberSchedule')->where('member_id', 'me');
|
||||
});
|
||||
@ -859,8 +872,10 @@ Route::group([
|
||||
Route::group(['prefix' => 'events'], function () {
|
||||
|
||||
Route::group(['prefix' => '{event_id}'], function () {
|
||||
Route::post('/feedback', 'OAuth2SummitEventsApiController@addEventFeedbackByMember');
|
||||
Route::put('/feedback', 'OAuth2SummitEventsApiController@updateEventFeedbackByMember');
|
||||
Route::group(['prefix' => 'feedback'], function () {
|
||||
Route::post('', 'OAuth2SummitEventsApiController@addMyEventFeedbackReturnId');
|
||||
Route::put('', 'OAuth2SummitEventsApiController@updateMyEventFeedbackReturnId');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -605,20 +605,32 @@ class Member extends SilverstripeBaseModel
|
||||
|
||||
/**
|
||||
* @param SummitEvent $event
|
||||
* @return SummitEventFeedback[]
|
||||
* @return SummitEventFeedback|null
|
||||
*/
|
||||
public function getFeedbackByEvent(SummitEvent $event)
|
||||
public function getFeedbackByEvent(SummitEvent $event):?SummitEventFeedback
|
||||
{
|
||||
return $this->createQueryBuilder()
|
||||
->select('distinct f')
|
||||
->from('models\summit\SummitEventFeedback', 'f')
|
||||
->join('f.event', 'e')
|
||||
->join('f.owner', 'o')
|
||||
->join('e.summit', 's')
|
||||
->where('e.id = :event_id and o.id = :owner_id')
|
||||
->setParameter('event_id', $event->getId())
|
||||
->setParameter('owner_id', $this->getId())
|
||||
->getQuery()->getResult();
|
||||
$criteria = Criteria::create();
|
||||
$criteria->where(Criteria::expr()->eq('event', $event));
|
||||
$feedback = $this->feedback->matching($criteria)->first();
|
||||
return $feedback === false ? null : $feedback;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param SummitEventFeedback $feedback
|
||||
*/
|
||||
public function addFeedback(SummitEventFeedback $feedback){
|
||||
if($this->feedback->contains($feedback)) return;
|
||||
$this->feedback->add($feedback);
|
||||
$feedback->setOwner($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param SummitEventFeedback $feedback
|
||||
*/
|
||||
public function removeFeedback(SummitEventFeedback $feedback){
|
||||
if(!$this->feedback->contains($feedback)) return;
|
||||
$this->feedback->removeElement($feedback);
|
||||
$feedback->clearOwner();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -33,6 +33,26 @@ class SummitEventFeedback extends SilverstripeBaseModel
|
||||
*/
|
||||
private $rate;
|
||||
|
||||
/**
|
||||
* @ORM\Column(name="note", type="string")
|
||||
* @var string
|
||||
*/
|
||||
private $note;
|
||||
|
||||
/**
|
||||
* @ORM\ManyToOne(targetEntity="models\main\Member", inversedBy="feedback")
|
||||
* @ORM\JoinColumn(name="OwnerID", referencedColumnName="ID", onDelete="CASCADE")
|
||||
* @var Member
|
||||
*/
|
||||
private $owner;
|
||||
|
||||
/**
|
||||
* @ORM\ManyToOne(targetEntity="models\summit\SummitEvent", inversedBy="feedback", fetch="LAZY")
|
||||
* @ORM\JoinColumn(name="EventID", referencedColumnName="ID", onDelete="CASCADE")
|
||||
* @var SummitEvent
|
||||
*/
|
||||
private $event;
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
@ -65,19 +85,6 @@ class SummitEventFeedback extends SilverstripeBaseModel
|
||||
$this->note = $note;
|
||||
}
|
||||
|
||||
/**
|
||||
* @ORM\Column(name="note", type="string")
|
||||
* @var string
|
||||
*/
|
||||
private $note;
|
||||
|
||||
/**
|
||||
* @ORM\ManyToOne(targetEntity="models\main\Member", inversedBy="feedback")
|
||||
* @ORM\JoinColumn(name="OwnerID", referencedColumnName="ID", onDelete="CASCADE")
|
||||
* @var Member
|
||||
*/
|
||||
private $owner;
|
||||
|
||||
/**
|
||||
* @return Member
|
||||
*/
|
||||
@ -93,13 +100,6 @@ class SummitEventFeedback extends SilverstripeBaseModel
|
||||
$this->owner = $owner;
|
||||
}
|
||||
|
||||
/**
|
||||
* @ORM\ManyToOne(targetEntity="models\summit\SummitEvent", inversedBy="feedback", fetch="LAZY")
|
||||
* @ORM\JoinColumn(name="EventID", referencedColumnName="ID", onDelete="CASCADE")
|
||||
* @var SummitEvent
|
||||
*/
|
||||
private $event;
|
||||
|
||||
/**
|
||||
* @return SummitEvent
|
||||
*/
|
||||
@ -139,6 +139,10 @@ class SummitEventFeedback extends SilverstripeBaseModel
|
||||
}
|
||||
}
|
||||
|
||||
public function clearOwner(){
|
||||
$this->owner = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param SummitEvent $event
|
||||
*/
|
||||
|
@ -0,0 +1,44 @@
|
||||
<?php namespace App\Models\Foundation\Summit\Factories;
|
||||
/**
|
||||
* Copyright 2020 OpenStack Foundation
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
**/
|
||||
use models\summit\SummitEventFeedback;
|
||||
/**
|
||||
* Class SummitEventFeedbackFactory
|
||||
* @package App\Models\Foundation\Summit\Factories
|
||||
*/
|
||||
final class SummitEventFeedbackFactory
|
||||
{
|
||||
/**
|
||||
* @param array $data
|
||||
* @return SummitEventFeedback|null
|
||||
*/
|
||||
public static function build(array $data){
|
||||
return self::populate(new SummitEventFeedback, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param SummitEventFeedback $feedback
|
||||
* @param array $data
|
||||
* @return SummitEventFeedback
|
||||
*/
|
||||
public static function populate(SummitEventFeedback $feedback, array $data){
|
||||
|
||||
if(isset($data['rate']))
|
||||
$feedback->setRate(intval($data['rate']));
|
||||
|
||||
$note = isset($data['note']) ? trim($data['note']) : "";
|
||||
$feedback->setNote($note);
|
||||
return $feedback;
|
||||
}
|
||||
|
||||
}
|
@ -90,20 +90,46 @@ interface ISummitService
|
||||
public function removeEventFromMemberSchedule(Summit $summit, Member $member, $event_id, $check_rsvp = true);
|
||||
|
||||
/**
|
||||
* @param Member $member
|
||||
* @param Summit $summit
|
||||
* @param SummitEvent $event
|
||||
* @param array $feedback
|
||||
* @param int $event_id
|
||||
* @param array $payload
|
||||
* @return SummitEventFeedback
|
||||
* @throws EntityNotFoundException
|
||||
* @throws ValidationException
|
||||
*/
|
||||
public function addEventFeedback(Summit $summit, SummitEvent $event, array $feedback);
|
||||
public function addMyEventFeedback(Member $member, Summit $summit, int $event_id, array $payload):SummitEventFeedback;
|
||||
|
||||
/**
|
||||
* @param Member $member
|
||||
* @param Summit $summit
|
||||
* @param SummitEvent $event
|
||||
* @param array $feedback
|
||||
* @param int $event_id
|
||||
* @param array $payload
|
||||
* @return SummitEventFeedback
|
||||
* @throws EntityNotFoundException
|
||||
* @throws ValidationException
|
||||
*/
|
||||
public function updateEventFeedback(Summit $summit, SummitEvent $event, array $feedback);
|
||||
public function updateMyEventFeedback(Member $member, Summit $summit, int $event_id, array $payload):SummitEventFeedback;
|
||||
|
||||
/**
|
||||
* @param Member $member
|
||||
* @param Summit $summit
|
||||
* @param int $event_id
|
||||
* @return SummitEventFeedback
|
||||
* @throws EntityNotFoundException
|
||||
* @throws ValidationException
|
||||
*/
|
||||
public function getMyEventFeedback(Member $member, Summit $summit, int $event_id):SummitEventFeedback;
|
||||
|
||||
/**
|
||||
* @param Member $member
|
||||
* @param Summit $summit
|
||||
* @param int $event_id
|
||||
* @return void
|
||||
* @throws EntityNotFoundException
|
||||
* @throws ValidationException
|
||||
*/
|
||||
public function deleteMyEventFeedback(Member $member, Summit $summit, int $event_id):void;
|
||||
|
||||
/**
|
||||
* @param Summit $summit
|
||||
|
@ -23,6 +23,7 @@ use App\Events\SummitUpdated;
|
||||
use App\Http\Utils\IFileUploader;
|
||||
use App\Mail\BookableRoomReservationCanceledEmail;
|
||||
use App\Mail\Schedule\ShareEventEmail;
|
||||
use App\Models\Foundation\Summit\Factories\SummitEventFeedbackFactory;
|
||||
use App\Models\Foundation\Summit\Factories\SummitFactory;
|
||||
use App\Models\Foundation\Summit\Factories\SummitRSVPFactory;
|
||||
use App\Models\Foundation\Summit\Repositories\IDefaultSummitEventTypeRepository;
|
||||
@ -380,108 +381,133 @@ final class SummitService extends AbstractService implements ISummitService
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Member $member
|
||||
* @param Summit $summit
|
||||
* @param SummitEvent $event
|
||||
* @param array $data
|
||||
* @param int $event_id
|
||||
* @param array $payload
|
||||
* @return SummitEventFeedback
|
||||
* @throws Exception
|
||||
*/
|
||||
public function addEventFeedback(Summit $summit, SummitEvent $event, array $data)
|
||||
public function addMyEventFeedback(Member $member, Summit $summit, int $event_id, array $payload):SummitEventFeedback
|
||||
{
|
||||
return $this->tx_service->transaction(function () use ($member, $summit, $event_id, $payload) {
|
||||
|
||||
return $this->tx_service->transaction(function () use ($summit, $event, $data) {
|
||||
|
||||
if (!$event->isAllowFeedback())
|
||||
throw new ValidationException(sprintf("event id %s does not allow feedback", $event->getIdentifier()));
|
||||
|
||||
$member = null;
|
||||
|
||||
// check for attendee
|
||||
$attendee_id = isset($data['attendee_id']) ? intval($data['attendee_id']) : null;
|
||||
$member_id = isset($data['member_id']) ? intval($data['member_id']) : null;
|
||||
if (!is_null($attendee_id)) {
|
||||
$attendee = $summit->getAttendeeById($attendee_id);
|
||||
if (!$attendee) throw new EntityNotFoundException();
|
||||
$member = $attendee->getMember();
|
||||
}
|
||||
|
||||
// check by member
|
||||
if (!is_null($member_id)) {
|
||||
$member = $this->member_repository->getById($member_id);
|
||||
}
|
||||
|
||||
if (is_null($member))
|
||||
throw new EntityNotFoundException('member not found!.');
|
||||
$event = $summit->getScheduleEvent($event_id);
|
||||
if(is_null($event))
|
||||
throw new EntityNotFoundException("Event not found.");
|
||||
|
||||
if (!Summit::allowToSee($event, $member))
|
||||
throw new EntityNotFoundException('event not found on summit!.');
|
||||
throw new EntityNotFoundException("Event not found.");
|
||||
|
||||
if (!$event->isAllowFeedback())
|
||||
throw new ValidationException(sprintf("Event id %s does not allow feedback.", $event->getIdentifier()));
|
||||
|
||||
// check older feedback
|
||||
$older_feedback = $member->getFeedbackByEvent($event);
|
||||
$former_feedback = $member->getFeedbackByEvent($event);
|
||||
|
||||
if (count($older_feedback) > 0)
|
||||
throw new ValidationException(sprintf("you already sent feedback for event id %s!.", $event->getIdentifier()));
|
||||
if (!is_null($former_feedback))
|
||||
throw new ValidationException(sprintf("You already sent feedback for event id %s!.", $event->getIdentifier()));
|
||||
|
||||
$newFeedback = new SummitEventFeedback();
|
||||
$newFeedback->setRate(intval($data['rate']));
|
||||
$note = isset($data['note']) ? trim($data['note']) : "";
|
||||
$newFeedback->setNote($note);
|
||||
$newFeedback = SummitEventFeedbackFactory::build($payload);
|
||||
$newFeedback->setOwner($member);
|
||||
$event->addFeedBack($newFeedback);
|
||||
|
||||
return $newFeedback;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Member $member
|
||||
* @param Summit $summit
|
||||
* @param SummitEvent $event
|
||||
* @param array $data
|
||||
* @param int $event_id
|
||||
* @param array $payload
|
||||
* @return SummitEventFeedback
|
||||
* @internal param array $feedback
|
||||
* @throws Exception
|
||||
*/
|
||||
public function updateEventFeedback(Summit $summit, SummitEvent $event, array $data)
|
||||
public function updateMyEventFeedback(Member $member, Summit $summit, int $event_id, array $payload):SummitEventFeedback
|
||||
{
|
||||
return $this->tx_service->transaction(function () use ($summit, $event, $data) {
|
||||
return $this->tx_service->transaction(function () use ($member, $summit, $event_id, $payload) {
|
||||
|
||||
if (!$event->isAllowFeedback())
|
||||
throw new ValidationException(sprintf("event id %s does not allow feedback", $event->getIdentifier()));
|
||||
$event = $summit->getScheduleEvent($event_id);
|
||||
|
||||
$member = null;
|
||||
|
||||
// check for attendee
|
||||
$attendee_id = isset($data['attendee_id']) ? intval($data['attendee_id']) : null;
|
||||
$member_id = isset($data['member_id']) ? intval($data['member_id']) : null;
|
||||
if (!is_null($attendee_id)) {
|
||||
$attendee = $summit->getAttendeeById($attendee_id);
|
||||
if (!$attendee) throw new EntityNotFoundException();
|
||||
$member = $attendee->getMember();
|
||||
}
|
||||
|
||||
// check by member
|
||||
if (!is_null($member_id)) {
|
||||
$member = $this->member_repository->getById($member_id);
|
||||
}
|
||||
|
||||
if (is_null($member))
|
||||
throw new EntityNotFoundException('member not found!.');
|
||||
if(is_null($event))
|
||||
throw new EntityNotFoundException("Event not found.");
|
||||
|
||||
if (!Summit::allowToSee($event, $member))
|
||||
throw new EntityNotFoundException('event not found on summit!.');
|
||||
throw new EntityNotFoundException("Event not found.");
|
||||
|
||||
if (!$event->isAllowFeedback())
|
||||
throw new ValidationException(sprintf("Event id %s does not allow feedback.", $event->getIdentifier()));
|
||||
|
||||
// check older feedback
|
||||
$feedback = $member->getFeedbackByEvent($event);
|
||||
|
||||
if (count($feedback) == 0)
|
||||
if (is_null($feedback))
|
||||
throw new ValidationException(sprintf("you dont have feedback for event id %s!.", $event->getIdentifier()));
|
||||
|
||||
return SummitEventFeedbackFactory::populate($feedback, $payload);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Member $member
|
||||
* @param Summit $summit
|
||||
* @param int $event_id
|
||||
* @return SummitEventFeedback
|
||||
* @throws Exception
|
||||
*/
|
||||
public function getMyEventFeedback(Member $member, Summit $summit, int $event_id):SummitEventFeedback
|
||||
{
|
||||
return $this->tx_service->transaction(function () use ($member, $summit, $event_id) {
|
||||
|
||||
$event = $summit->getScheduleEvent($event_id);
|
||||
|
||||
if(is_null($event))
|
||||
throw new EntityNotFoundException("Event not found.");
|
||||
|
||||
if (!Summit::allowToSee($event, $member))
|
||||
throw new EntityNotFoundException("Event not found.");
|
||||
|
||||
if (!$event->isAllowFeedback())
|
||||
throw new ValidationException(sprintf("Event id %s does not allow feedback.", $event->getIdentifier()));
|
||||
|
||||
// check older feedback
|
||||
$feedback = $member->getFeedbackByEvent($event);
|
||||
|
||||
if (is_null($feedback))
|
||||
throw new ValidationException(sprintf("you dont have feedback for event id %s!.", $event->getIdentifier()));
|
||||
$feedback = $feedback[0];
|
||||
$feedback->setRate(intval($data['rate']));
|
||||
$note = isset($data['note']) ? trim($data['note']) : "";
|
||||
$feedback->setNote($note);
|
||||
|
||||
return $feedback;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Member $member
|
||||
* @param Summit $summit
|
||||
* @param int $event_id
|
||||
* @throws Exception
|
||||
*/
|
||||
public function deleteMyEventFeedback(Member $member, Summit $summit, int $event_id):void
|
||||
{
|
||||
$this->tx_service->transaction(function () use ($member, $summit, $event_id) {
|
||||
|
||||
$event = $summit->getScheduleEvent($event_id);
|
||||
if(is_null($event))
|
||||
throw new EntityNotFoundException("Event not found.");
|
||||
|
||||
if (!Summit::allowToSee($event, $member))
|
||||
throw new EntityNotFoundException("Event not found.");
|
||||
|
||||
if (!$event->isAllowFeedback())
|
||||
throw new ValidationException(sprintf("Event id %s does not allow feedback.", $event->getIdentifier()));
|
||||
|
||||
// check older feedback
|
||||
$feedback = $member->getFeedbackByEvent($event);
|
||||
|
||||
$member->removeFeedback($feedback);
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Summit $summit
|
||||
* @param null|int $member_id
|
||||
|
@ -2195,12 +2195,6 @@ class ApiEndpointsSeeder extends Seeder
|
||||
IGroup::SummitRegistrationAdmins,
|
||||
]
|
||||
],
|
||||
[
|
||||
'name' => 'add-event-feedback',
|
||||
'route' => '/api/v1/summits/{id}/events/{event_id}/feedback',
|
||||
'http_method' => 'POST',
|
||||
'scopes' => [sprintf(SummitScopes::WriteSummitData, $current_realm)],
|
||||
],
|
||||
[
|
||||
'name' => 'add-event-attachment',
|
||||
'route' => '/api/v1/summits/{id}/events/{event_id}/attachment',
|
||||
@ -2213,6 +2207,38 @@ class ApiEndpointsSeeder extends Seeder
|
||||
IGroup::SummitRegistrationAdmins,
|
||||
]
|
||||
],
|
||||
[
|
||||
'name' => 'add-event-feedback',
|
||||
'route' => ' api/v1/summits/{id}/members/{member_id}/schedule/{event_id}/feedback',
|
||||
'http_method' => 'POST',
|
||||
'scopes' => [
|
||||
sprintf(SummitScopes::AddMyEventFeedback, $current_realm),
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'update-event-feedback',
|
||||
'route' => ' api/v1/summits/{id}/members/{member_id}/schedule/{event_id}/feedback',
|
||||
'http_method' => 'PUT',
|
||||
'scopes' => [
|
||||
sprintf(SummitScopes::AddMyEventFeedback, $current_realm),
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'delete-event-feedback',
|
||||
'route' => ' api/v1/summits/{id}/members/{member_id}/schedule/{event_id}/feedback',
|
||||
'http_method' => 'DELETE',
|
||||
'scopes' => [
|
||||
sprintf(SummitScopes::DeleteMyEventFeedback, $current_realm),
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'get-event-feedback-by-member',
|
||||
'route' => ' api/v1/summits/{id}/members/{member_id}/schedule/{event_id}/feedback',
|
||||
'http_method' => 'GET',
|
||||
'scopes' => [
|
||||
sprintf(SummitScopes::MeRead, $current_realm),
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'add-event-feedback-v2',
|
||||
'route' => '/api/v2/summits/{id}/events/{event_id}/feedback',
|
||||
@ -2233,11 +2259,11 @@ class ApiEndpointsSeeder extends Seeder
|
||||
],
|
||||
[
|
||||
'name' => 'get-event-feedback',
|
||||
'route' => '/api/v1/summits/{id}/events/{event_id}/feedback/{attendee_id?}',
|
||||
'route' => '/api/v1/summits/{id}/events/{event_id}/feedback',
|
||||
'http_method' => 'GET',
|
||||
'scopes' => [
|
||||
sprintf(SummitScopes::ReadAllSummitData, $current_realm),
|
||||
sprintf(SummitScopes::ReadSummitData, $current_realm),
|
||||
sprintf(SummitScopes::ReadAllSummitData, $current_realm)
|
||||
],
|
||||
],
|
||||
[
|
||||
|
@ -1426,7 +1426,7 @@ final class OAuth2SummitEventsApiTest extends ProtectedApiTest
|
||||
$this->assertTrue(!is_null($feedback));
|
||||
}
|
||||
|
||||
public function testUpdateFeedback2EventByMember($summit_id = 22, $event_id = 17683)
|
||||
public function testUpdateFeedback2EventByMember($summit_id = 27, $event_id = 24340)
|
||||
{
|
||||
//$this->testAddFeedback2EventByMember($summit_id, $event_id);
|
||||
$params = array
|
||||
@ -1450,7 +1450,7 @@ final class OAuth2SummitEventsApiTest extends ProtectedApiTest
|
||||
$response = $this->action
|
||||
(
|
||||
"PUT",
|
||||
"OAuth2SummitEventsApiController@updateEventFeedbackByMember",
|
||||
"OAuth2SummitEventsApiController@updateMyEventFeedbackReturnId",
|
||||
$params,
|
||||
array(),
|
||||
array(),
|
||||
@ -1502,7 +1502,7 @@ final class OAuth2SummitEventsApiTest extends ProtectedApiTest
|
||||
|
||||
}
|
||||
|
||||
public function testAddFeedback2EventByMember($summit_id = 22, $event_id = 17683)
|
||||
public function testAddFeedback2EventByMember($summit_id = 27, $event_id = 24340)
|
||||
{
|
||||
$params = array
|
||||
(
|
||||
@ -1524,7 +1524,7 @@ final class OAuth2SummitEventsApiTest extends ProtectedApiTest
|
||||
$response = $this->action
|
||||
(
|
||||
"POST",
|
||||
"OAuth2SummitEventsApiController@addEventFeedbackByMember",
|
||||
"OAuth2SummitEventsApiController@addMyEventFeedbackReturnId",
|
||||
$params,
|
||||
array(),
|
||||
array(),
|
||||
@ -1535,7 +1535,6 @@ final class OAuth2SummitEventsApiTest extends ProtectedApiTest
|
||||
|
||||
$content = $response->getContent();
|
||||
$this->assertResponseStatus(204);
|
||||
|
||||
}
|
||||
|
||||
public function testCloneEvent($summit_id = 25, $event_id= 22943)
|
||||
|
Loading…
Reference in New Issue
Block a user