Untitled
unknown
plain_text
a year ago
36 kB
6
Indexable
<?php
namespace Unity;
use Dingo\Api\Facade\API;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
use Carbon\Carbon;
use \BaseController;
use \Input;
use \Meetup;
use \MeetupInvitation;
/**
* This controller is responsible for handling all actions related to the meetups.
* This controller is also Unity specific
*/
class MeetupController extends BaseController
{
/**
* API | GET | unity/meetup/user/all
* This function is used to get all the meetups of the logged in user.
*
* @example {
* access: String (public / private)
* source: String (room / content / event)
* size: Number
* page: Number
* }
*/
public function get_user_meetups()
{
try {
$user_id = $this->getLoggedUserId();
$access = \Input::get('access');
$source = \Input::get('source'); // room, content, event
$size = Input::get('size');
$meetups = Meetup::select(
'id',
'name',
'user_id',
'start_datetime',
'timezone',
'duration',
'meetup_type',
'type_id',
'is_public'
)->where('user_id', $user_id)->whereRaw('date_add(start_datetime, Interval duration MINUTE) > current_timestamp()')
->with(
['event' => function ($query) {
$query->select('id', 'name', 'description', 'image', 'updated_at');
}, 'room' => function ($query) {
$query->select('id', 'name', 'description', 'background_image', 'updated_at');
}, 'room.location' => function ($query) {
$query->select('id', 'type_id', 'type');
}, 'media_room' => function ($query) {
$query->select('id', 'name', 'description', 'background_image', 'updated_at');
}, 'media_room.location' => function ($query) {
$query->select('id', 'type_id', 'type');
}, 'content' => function ($query) {
$query->select('id', 'title', 'description', 'thumb', 'updated_at', 'is_room_only', 'event_id');
}, 'content.event' => function ($query) {
$query->select('id', 'name', 'description', 'background_image', 'updated_at');
}, 'content.event.location' => function ($query) {
$query->select('id', 'type_id', 'type');
}, 'invitations' => function ($query) {
$query->select('id', 'meetup_id', 'user_id', 'status');
}]
)->orderBy('created_at', 'desc');
if (isset($source)) {
if ($source === 'location') {
$meetups = $meetups->where('meetup_type', '!=', 'event')->where('meetup_type', '!=', 'content');
} else {
$meetups = $meetups->where('meetup_type', $source);
}
}
if (isset($access)) {
$is_public = $access === 'private' ? false : true;
$meetups = $meetups->where('is_public', $is_public);
}
$meetups = $meetups->paginate($size)->toJSON();
$meetups = json_decode($meetups);
$arr_index = 0;
foreach ($meetups->data as $meetup) {
if ($meetup->meetup_type === 'room' && isset($meetup->room)) {
$meetup->event = null;
$meetup->content = null;
$meetup->media_room = null;
} else if ($meetup->meetup_type === 'event' && isset($meetup->event)) {
$meetup->room = null;
$meetup->content = null;
$meetup->media_room = null;
} else if ($meetup->meetup_type === 'media_room' && isset($meetup->media_room)) {
$meetup->room = null;
$meetup->content = null;
$meetup->event = null;
}
else if ($meetup->meetup_type === 'content' && isset($meetup->content)) {
$meetup->event = null;
$meetup->room = null;
$meetup->media_room = null;
}
$meetup->status = 'owner';
$arr_index++;
// unset not required fields
unset($meetup->content->event_id);
foreach ($meetup->invitations as $invitation) {
unset($invitation->meetup_id);
unset($invitation->id);
}
}
// remove keys from array
$meetups->data = array_values($meetups->data);
return API::response()->array(
[
'return' => true,
'output' => $meetups,
'extra' => []
]
)->statusCode(200);
} catch (\Exception $e) {
\Utility::log($e->getMessage(), "meetup.logs");
return API::response()->array(
[
'return' => false,
'output' => [],
'extra' => [
'message' => 'Failed to fetch invited meetups',
'error' => $e->getMessage()
]
]
)->statusCode(200);
}
}
/**
* API | GET | unity/meetup/user/joined
* This function is used to get all joined meetups of the logged in user.
*
* @example {
* access: String (public / private)
* source: String (room / content / event)
* size: Number
* page: Number
* }
*/
public function get_joined_meetups()
{
try {
$user_id = $this->getLoggedUserId();
$access = \Input::get('access');
$source = \Input::get('source');
$invitations = MeetupInvitation::where('user_id', $user_id)
->where('status', 'accepted')->get();
$meetup_ids = [];
$size = Input::get('size');
foreach ($invitations as $invite) {
array_push($meetup_ids, $invite->meetup_id);
}
$meetups = Meetup::select(
'id',
'name',
'user_id',
'start_datetime',
'timezone',
'duration',
'meetup_type',
'type_id',
'is_public'
)->whereIn('id', $meetup_ids)->where('user_id', '!=', $user_id)->whereRaw('date_add(start_datetime, Interval duration MINUTE) > current_timestamp()')
->with(
['event' => function ($query) {
$query->select('id', 'name', 'description', 'image', 'updated_at');
}, 'room' => function ($query) {
$query->select('id', 'name', 'description', 'background_image', 'updated_at');
}, 'room.location' => function ($query) {
$query->select('id', 'type_id', 'type');
}, 'media_room' => function ($query) {
$query->select('id', 'name', 'description', 'background_image', 'updated_at');
}, 'media_room.location' => function ($query) {
$query->select('id', 'type_id', 'type');
}, 'content' => function ($query) {
$query->select('id', 'title', 'description', 'thumb', 'updated_at', 'is_room_only', 'event_id');
}, 'content.event' => function ($query) {
$query->select('id', 'name', 'description', 'background_image', 'updated_at');
}, 'content.event.location' => function ($query) {
$query->select('id', 'type_id', 'type');
}, 'invitations' => function ($query) {
$query->select('id', 'meetup_id', 'user_id', 'status');
}]
)->orderBy('created_at', 'desc');
if (isset($source)) {
if ($source === 'location') {
$meetups = $meetups->where('meetup_type', '!=', 'event')->where('meetup_type', '!=', 'content');
} else {
$meetups = $meetups->where('meetup_type', $source);
}
}
if (isset($access)) {
$is_public = $access === 'private' ? false : true;
$meetups = $meetups->where('is_public', $is_public);
}
$meetups = $meetups->paginate($size)->toJSON();
$meetups = json_decode($meetups);
$arr_index = 0;
foreach ($meetups->data as $meetup) {
if ($meetup->meetup_type === 'room' && isset($meetup->room)) {
$meetup->event = null;
$meetup->content = null;
$meetup->media_room = null;
} else if ($meetup->meetup_type === 'event' && isset($meetup->event)) {
$meetup->room = null;
$meetup->content = null;
$meetup->media_room = null;
} else if ($meetup->meetup_type === 'media_room' && isset($meetup->media_room)) {
$meetup->room = null;
$meetup->content = null;
$meetup->event = null;
} else if ($meetup->meetup_type === 'content' && isset($meetup->content)) {
$meetup->event = null;
$meetup->room = null;
$meetup->media_room = null;
}
$meetup->status = 'joined';
$arr_index++;
// unset not required fields
unset($meetup->content->event_id);
foreach ($meetup->invitations as $invitation) {
unset($invitation->meetup_id);
unset($invitation->id);
}
}
// remove keys from array
$meetups->data = array_values($meetups->data);
return API::response()->array(
[
'return' => true,
'output' => $meetups,
'extra' => []
]
)->statusCode(200);
} catch (\Exception $e) {
\Utility::log($e->getMessage(), "meetup.logs");
return API::response()->array(
[
'return' => false,
'output' => [],
'extra' => [
'message' => 'Failed to fetch joined meetups'
]
]
)->statusCode(200);
}
}
/**
* API | GET | unity/meetup/user/invited
* This function is used to get all invited meetups of the logged in user.
*
* @example {
* access: String (public / private)
* source: String (room / content / event)
* size: Number
* page: Number
* }
*/
public function get_invited_meetups()
{
try {
$user_id = $this->getLoggedUserId();
$access = \Input::get('access');
$invitations = MeetupInvitation::where('user_id', $user_id)
->where('status', 'invited')->get();
$meetup_ids = [];
$source = Input::get('source');
$size = Input::get('size');
foreach ($invitations as $invite) {
array_push($meetup_ids, $invite->meetup_id);
}
$meetups = Meetup::select(
'id',
'name',
'user_id',
'start_datetime',
'timezone',
'duration',
'meetup_type',
'type_id',
'is_public'
)->whereIn('id', $meetup_ids)->where('user_id', '!=', $user_id)->whereRaw('date_add(start_datetime, Interval duration MINUTE) > current_timestamp()')
->with(
['event' => function ($query) {
$query->select('id', 'name', 'description', 'image', 'updated_at');
}, 'room' => function ($query) {
$query->select('id', 'name', 'description', 'background_image', 'updated_at');
}, 'room.location' => function ($query) {
$query->select('id', 'type_id', 'type');
}, 'media_room' => function ($query) {
$query->select('id', 'name', 'description', 'background_image', 'updated_at');
}, 'media_room.location' => function ($query) {
$query->select('id', 'type_id', 'type');
}, 'content' => function ($query) {
$query->select('id', 'title', 'description', 'thumb', 'updated_at', 'is_room_only', 'event_id');
}, 'content.event' => function ($query) {
$query->select('id', 'name', 'description', 'background_image', 'updated_at');
}, 'content.event.location' => function ($query) {
$query->select('id', 'type_id', 'type');
}, 'invitations' => function ($query) {
$query->select('id', 'meetup_id', 'user_id', 'status');
}]
)->orderBy('created_at', 'desc');
if (isset($source)) {
if ($source === 'location') {
$meetups = $meetups->where('meetup_type', '!=', 'event')->where('meetup_type', '!=', 'content');
} else {
$meetups = $meetups->where('meetup_type', $source);
}
}
if (isset($access)) {
$is_public = $access === 'private' ? false : true;
$meetups = $meetups->where('is_public', $is_public);
}
$meetups = $meetups->paginate($size)->toJSON();
$meetups = json_decode($meetups);
$arr_index = 0;
foreach ($meetups->data as $meetup) {
if ($meetup->meetup_type === 'room' && isset($meetup->room)) {
$meetup->event = null;
$meetup->content = null;
$meetup->media_room = null;
} else if ($meetup->meetup_type === 'event' && isset($meetup->event)) {
$meetup->room = null;
$meetup->content = null;
$meetup->media_room = null;
} else if ($meetup->meetup_type === 'media_room' && isset($meetup->media_room)) {
$meetup->room = null;
$meetup->content = null;
$meetup->event = null;
} else if ($meetup->meetup_type === 'content' && isset($meetup->content)) {
$meetup->event = null;
$meetup->room = null;
$meetup->media_room = null;
}
$meetup->status = 'invited';
$arr_index++;
// unset not required fields
unset($meetup->content->event_id);
foreach ($meetup->invitations as $invitation) {
unset($invitation->meetup_id);
unset($invitation->id);
}
}
// remove keys from array
$meetups->data = array_values($meetups->data);
return API::response()->array(
[
'return' => true,
'output' => $meetups,
'extra' => []
]
)->statusCode(200);
} catch (\Exception $e) {
\Utility::log($e->getMessage(), "meetup.logs");
return API::response()->array(
[
'return' => false,
'output' => [],
'extra' => [
'message' => 'Failed to fetch invited meetups'
]
]
)->statusCode(200);
}
}
/**
* API | GET | unity/meetup/all
* This function is used to get all created / invited / rejected and joined meetups of the logged in user.
*
* @example {
* access: String (public / private)
* source: String (room / content / event)
* size: Number
* page: Number
* }
*/
public function get_all_user_meetups()
{
try {
$user_id = $this->getLoggedUserId();
$size = Input::get('size');
$access = Input::get('access');
$source = Input::get('source');
$invitations = MeetupInvitation::where('user_id', $user_id)
->where('status', '!=', 'rejected')->get();
$meetup_ids = [];
foreach ($invitations as $invite) {
array_push($meetup_ids, $invite->meetup_id);
}
$meetups = Meetup::select(
'id',
'name',
'user_id',
'start_datetime',
'timezone',
'duration',
'meetup_type',
'type_id',
'is_public'
)->whereRaw('date_add(start_datetime, Interval duration MINUTE) > current_timestamp()')->where(
function ($query) use ($meetup_ids, $user_id) {
$query->whereIn('id', $meetup_ids)->orWhere('user_id', $user_id);
}
)->with(
['event' => function ($query) {
$query->select('id', 'name', 'description', 'image', 'updated_at');
}, 'room' => function ($query) {
$query->select('id', 'name', 'description', 'background_image', 'updated_at');
}, 'room.location' => function ($query) {
$query->select('id', 'type_id', 'type');
}, 'media_room' => function ($query) {
$query->select('id', 'name', 'description', 'background_image', 'updated_at');
}, 'media_room.location' => function ($query) {
$query->select('id', 'type_id', 'type');
}, 'stage_location' => function ($query) {
$query->select('id', 'name', 'description', 'background_image', 'updated_at');
}, 'stage_location.location' => function ($query) {
$query->select('id', 'type_id', 'type');
}, 'content' => function ($query) {
$query->select('id', 'title', 'description', 'thumb', 'updated_at', 'is_room_only', 'event_id');
}, 'content.event' => function ($query) {
$query->select('id', 'name', 'description', 'background_image', 'updated_at');
}, 'content.event.location' => function ($query) {
$query->select('id', 'type_id', 'type');
}, 'invitations' => function ($query) {
$query->select('id', 'meetup_id', 'user_id', 'status');
}]
)->orderBy('created_at', 'desc');
if (isset($source)) {
if ($source === 'location') {
$meetups = $meetups->where('meetup_type', '!=', 'event')->where('meetup_type', '!=', 'content');
} else {
$meetups = $meetups->where('meetup_type', $source);
}
}
if (isset($access)) {
$is_public = $access === 'private' ? false : true;
$meetups = $meetups->where('is_public', $is_public);
}
$meetups = $meetups->paginate($size)->toJSON();
$meetups = json_decode($meetups);
$arr_index = 0;
foreach ($meetups->data as $meetup) {
if ($meetup->meetup_type === 'room' && isset($meetup->room)) {
$meetup->event = null;
$meetup->content = null;
$meetup->media_room = null;
$meetup->stage_location = null;
} else if ($meetup->meetup_type === 'event' && isset($meetup->event)) {
$meetup->room = null;
$meetup->content = null;
$meetup->media_room = null;
$meetup->stage_location = null;
} else if ($meetup->meetup_type === 'media_room' && isset($meetup->media_room)) {
$meetup->room = null;
$meetup->content = null;
$meetup->event = null;
$meetup->stage_location = null;
} else if ($meetup->meetup_type === 'content' && isset($meetup->content)) {
$meetup->event = null;
$meetup->room = null;
$meetup->media_room = null;
$meetup->stage_location = null;
} else if ($meetup->meetup_type === 'stage_location' && isset($meetup->stage_location)) {
$meetup->event = null;
$meetup->room = null;
$meetup->media_room = null;
$meetup->content = null;
}
// unset not required fields
unset($meetup->content->event_id);
if (sizeof($meetup->invitations) > 0) {
foreach ($meetup->invitations as $invitation) {
if ($meetup->user_id === $user_id) {
$meetup->status = 'owner';
} else if ($invitation->user_id === $user_id) {
if ($invitation->status === 'accepted') {
$meetup->status = 'joined';
} else if ($invitation->status === 'invited') {
$meetup->status = 'invited';
}
}
unset($invitation->meetup_id);
unset($invitation->id);
}
} else {
$meetup->status = 'owner';
}
$arr_index++;
}
// remove keys from array
$meetups->data = array_values($meetups->data);
return API::response()->array([
'return' => true,
'output' => $meetups,
'extra' => []
])->statusCode(200);
} catch (\Exception $e) {
return API::response()->array([
'return' => false,
'output' => [],
'extra' => [
'message' => 'Failed to fetch all meetups',
'error' => $e->getMessage(),
'line' => $e->getLine()
]
])->statusCode(200);
}
}
/**
* API | GET | unity/meetup/
* @example {
* meetup_id: Number
* }
*/
public function get_meetup_details()
{
try {
$id = Input::get('meetup_id');
$meetup = Meetup::select(
'id',
'name',
'user_id',
'start_datetime',
'timezone',
'duration',
'meetup_type',
'type_id',
'timezone_string'
)->where('id', $id)
->with([
'user' => function ($query) {
$query->select(
'id',
'fullname',
'nickname',
'show_nickname',
'username',
'user_image'
);
}, 'invitations' => function ($query) {
$query->select(
'id',
'user_id',
'meetup_id',
'email',
'fullname',
'type',
'status',
'availability_status'
);
}, 'invitations.user' => function ($query) {
$query->select(
'id',
'fullname',
'nickname',
'show_nickname',
'username',
'user_image',
'online_status'
);
}, 'event.contents.content' => function ($query) {
$query->select(
'id',
'description',
'title',
'thumb'
);
}, 'event.meeting_spotlight', 'room' => function ($query) {
$query->select(
'id',
'description',
'background_image'
);
}, 'media_room' => function ($query) {
$query->select(
'id',
'description',
'background_image'
);
}, 'stage_location' => function ($query) {
$query->select(
'id',
'description',
'background_image'
);
}
, 'event',
'content' => function ($query) {
$query->select(
'id',
'description',
'thumb'
);
}
])
->first();
// Format and filter fields
$meetup->invites = $meetup->invitations;
unset($meetup->invitations);
$meetup->meetup_owner = $meetup->user;
unset($meetup->user);
// Add skybox details
$skybox_details = null;
$skybox_id = null;
if ($meetup->meetup_type === 'event') {
unset($meetup->room);
unset($meetup->media_room);
unset($meetup->content);
unset($meetup->stage_location);
$meetup->event_spotlight = $meetup->event->meeting_spotlight;
$meetup->event_contents = $meetup->event->contents;
$meetup->image = $meetup->event->image;
$meetup->description = $meetup->event->description;
// Add skybox details for event
switch ($meetup->event->type) {
case 'room':
$room = \Event::where('id', $meetup->event->type_id)->with(['location', 'location.skybox.details'])->first();
if (isset($room) && isset($room->location) && isset($room->location->skybox)) {
$skybox_details = [
"image" => $room->location->skybox->details->url,
"additional_detail" => []
];
$skybox_id = $room->location->skybox->id;
}
break;
case 'media_room':
$media_room = \MediaRoom::where('id', $meetup->event->type_id)->with(['location', 'location.skybox.details'])->first();
if (isset($media_room) && isset($media_room->location) && isset($media_room->location->skybox)) {
$skybox_details = [
"image" => $media_room->location->skybox->details->url,
"additional_detail" => []
];
$skybox_id = $media_room->location->skybox->id;
}
break;
case 'stage_location':
$stage_location = \StageLocation\StageLocation::where('id', $meetup->event->type_id)->with(['location', 'location.skybox.details'])->first();
if (isset($stage_location) && isset($stage_location->location) && isset($stage_location->location->skybox)) {
$skybox_details = [
"image" => $stage_location->location->skybox->details->url,
"additional_detail" => []
];
$skybox_id = $stage_location->location->skybox->id;
}
break;
}
$meetup->skybox = $skybox_id;
$meetup->skybox_details = $skybox_details;
unset($meetup->event);
foreach ($meetup->event_contents as $c) {
unset($c->meeting_id);
unset($c->content_id);
unset($c->room_id);
unset($c->content->sub_category);
}
}
else {
unset($meetup->event);
$meetup->event_contents = [];
switch ($meetup->meetup_type) {
case 'room':
$meetup->image = $meetup->room->background_image;
$meetup->description = $meetup->room->description;
// Add skybox details for room
$room = \Event::where('id', $meetup->type_id)->with(['location', 'location.skybox.details'])->first();
if (isset($room) && isset($room->location) && isset($room->location->skybox)) {
$skybox_details = [
"image" => $room->location->skybox->details->url,
"additional_detail" => []
];
$skybox_id = $room->location->skybox->id;
}
break;
case 'media_room':
$meetup->image = $meetup->media_room->background_image;
$meetup->description = $meetup->media_room->description;
// Add skybox details for media room
$media_room = \MediaRoom::where('id', $meetup->type_id)->with(['location', 'location.skybox.details'])->first();
if (isset($media_room) && isset($media_room->location) && isset($media_room->location->skybox)) {
$skybox_details = [
"image" => $media_room->location->skybox->details->url,
"additional_detail" => []
];
$skybox_id = $media_room->location->skybox->id;
}
break;
case 'stage_location':
$meetup->image = $meetup->stage_location->background_image;
$meetup->description = $meetup->stage_location->description;
// Add skybox details for stage location
$stage_location = \StageLocation\StageLocation::where('id', $meetup->type_id)->with(['location', 'location.skybox.details'])->first();
if (isset($stage_location) && isset($stage_location->location) && isset($stage_location->location->skybox)) {
$skybox_details = [
"image" => $stage_location->location->skybox->details->url,
"additional_detail" => []
];
$skybox_id = $stage_location->location->skybox->id;
}
break;
case 'content':
$meetup->image = $meetup->content->thumb;
$meetup->description = $meetup->content->description;
break;
default:
$meetup->image = null;
$meetup->description = null;
break;
}
$meetup->skybox = $skybox_id;
$meetup->skybox_details = $skybox_details;
unset ($meetup->room);
unset ($meetup->media_room);
unset ($meetup->stage_location);
unset ($meetup->event);
unset ($meetup->content);
}
return API::response()->array([
'return' => true,
'output' => $meetup,
'extra' => []
])->statusCode(200);
} catch (\Exception $e) {
return API::response()->array([
'return' => false,
'output' => [],
'extra' => [
'message' => 'Failed to fetch all meetups',
'error' => $e->getMessage() . ' ' . $e->getLine()
]
])->statusCode(200);
}
}
/**
* API | GET | /unity/meetup/invitation
* API is used to get all meetup invitations with pagination
*
* @example {
* page: Number,
* size: Number,
* event_id: Number
* }
*/
public function get_meetup_invitations () {
try {
$meetup_id = \Input::get('meetup_id');
$size = \Input::get('size');
if (!isset($size)) {
$size = 100;
}
$page = \Input::get('page');
if (!isset($page)) {
$page = 1;
}
$meetup = \Meetup::where('id', $meetup_id)->first();
if (!isset($meetup)) {
return API::response()->array(
[
'return' => false,
'output' => [],
'extra' => [
'message' => 'Meetup not found'
]
]
)->statusCode(200);
}
$invitations = \MeetupInvitation::select(
'id',
'user_id',
'email',
'fullname',
'type',
'status'
)->where('meetup_id', $meetup_id)->with(['user' => function ($query){
$query->select(
'id',
'fullname',
'email',
'user_image',
'nickname',
'show_nickname',
'online_status'
);
}])->paginate($size)->toJSON();
$invitations = json_decode($invitations);
$meetup_owner = \User::select(
'id',
'fullname',
'email',
'user_image',
'nickname',
'show_nickname',
'online_status'
)->where('id', $meetup->user_id)->first();
$meetup_owner->availability_status = $meetup->owner_availability;
return API::response()->array(
[
'return' => true,
'output' => [
"invitations" => $invitations,
"event_owner" => $meetup_owner
],
'extra' => []
]
);
} catch (\Exception $e) {
return API::response()->array(
[
'return' => false,
'output' => [],
'extra' => [
'message' => 'Failed to fetch meetup inviations!',
'error' => $e->getMessage()
]
]
)->statusCode(200);
}
}
}
Editor is loading...
Leave a Comment