middleware('auth'); $this->_service = 'events'; $this->_module = 'session'; $this->_viewname = 'session'; $this->_title = 'Session'; $this->_base_url = '/session'; $this->_listtype = 'list'; } protected function get_list_fields(){ return [ 'actions' => ['title' => 'Actions', 'buttons' => [ 'edit', 'delete' ] ], 'title' => ['title' => 'Session Title', 'type' => 'text'], 'session_type' => ['title' => 'Type', 'type' => 'select'], 'track_id' => ['title' => 'Track', 'type' => 'text'], 'presenter' => ['title' => 'Presenter', 'type' => 'text'], 'start_time' => ['title' => 'Start Time', 'type' => 'datetime'], 'end_time' => ['title' => 'End Time', 'type' => 'datetime'], 'room' => ['title' => 'Room', 'type' => 'text'], 'status' => ['title' => 'Status', 'type' => 'select'], ]; } protected function get_form_fields($type, $values){ $session_types = [ 'presentation' => 'Presentation', 'workshop' => 'Workshop', 'panel' => 'Panel Discussion', 'networking' => 'Networking', 'break' => 'Break', 'lunch' => 'Lunch', 'keynote' => 'Keynote', 'demo' => 'Demo', 'qna' => 'Q&A Session', 'other' => 'Other' ]; $status_options = [ 'scheduled' => 'Scheduled', 'live' => 'Live', 'completed' => 'Completed', 'cancelled' => 'Cancelled' ]; // Get tracks for dropdown $tracks = $this->getlambda('get', 'events', 'track', 'dropdown'); $tracks_dd = []; if(isset($tracks->data->items)) { foreach($tracks->data->items as $track){ $tracks_dd[$track->id] = $track->name; } } return [ 'track_id' => ['title' => 'Track', 'type' => 'select', 'required' => true, 'values' => $tracks_dd], 'title' => ['title' => 'Session Title', 'type' => 'text', 'required' => true], 'description' => ['title' => 'Description', 'type' => 'textarea'], 'session_type' => ['title' => 'Session Type', 'type' => 'select', 'required' => true, 'values' => $session_types], 'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => $status_options], 'start_time' => ['title' => 'Start Time', 'type' => 'datetime', 'required' => true], 'end_time' => ['title' => 'End Time', 'type' => 'datetime', 'required' => true], 'duration' => ['title' => 'Duration (minutes)', 'type' => 'number', 'value' => 60], 'presenter' => ['title' => 'Presenter Name', 'type' => 'text'], 'presenter_title' => ['title' => 'Presenter Title', 'type' => 'text'], 'presenter_bio' => ['title' => 'Presenter Bio', 'type' => 'textarea'], 'presenter_avatar' => ['title' => 'Presenter Avatar', 'type' => 'image'], 'max_attendees' => ['title' => 'Max Attendees', 'type' => 'number', 'value' => 0], 'is_interactive' => ['title' => 'Interactive Session', 'type' => 'yesno', 'required' => true], 'requires_registration' => ['title' => 'Requires Registration', 'type' => 'yesno', 'required' => true], 'is_recorded' => ['title' => 'Record Session', 'type' => 'yesno', 'required' => true], 'room' => ['title' => 'Room/Venue', 'type' => 'text'], 'virtual_link' => ['title' => 'Virtual Link', 'type' => 'text'], 'presentation_url' => ['title' => 'Presentation URL', 'type' => 'text'], 'tags' => ['title' => 'Tags', 'type' => 'text', 'placeholder' => 'Enter tags separated by commas'], ]; } protected function _beforesave($type, $request) { $data = $request->except('_token'); // Handle file uploads if( $request->file('presenter_avatar') ) { $data['presenter_avatar'] = $this->_uploadMedia($request, 'presenter_avatar', 'sessions'); } // Convert tags to array if(isset($data['tags']) && !empty($data['tags'])) { $data['tags'] = array_map('trim', explode(',', $data['tags'])); } else { $data['tags'] = []; } // Set default values $data['max_attendees'] = $data['max_attendees'] ?? 0; $data['duration'] = $data['duration'] ?? 60; // Create presenter object if(isset($data['presenter']) && !empty($data['presenter'])) { $data['presenter'] = [ 'name' => $data['presenter'], 'title' => $data['presenter_title'] ?? '', 'bio' => $data['presenter_bio'] ?? '', 'avatar' => $data['presenter_avatar'] ?? '' ]; } // Remove individual presenter fields unset($data['presenter_title'], $data['presenter_bio'], $data['presenter_avatar']); return $data; } protected function _beforeform($type, $values) { if($type == 'edit' && isset($values)) { // Convert arrays back to comma-separated strings for form display if(isset($values->tags) && is_array($values->tags)) { $values->tags = implode(', ', $values->tags); } // Extract presenter details if(isset($values->presenter) && is_object($values->presenter)) { $values->presenter_name = $values->presenter->name ?? ''; $values->presenter_title = $values->presenter->title ?? ''; $values->presenter_bio = $values->presenter->bio ?? ''; $values->presenter_avatar = $values->presenter->avatar ?? ''; } } return $values; } }