Untitled
unknown
plain_text
10 months ago
36 kB
3
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