Rapport-Laravel/app/Http/Controllers/SessionController.php

147 lines
6.1 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\LambdaRequest;
use DB;
class SessionController extends Controller
{
public function __construct()
{
$this->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;
}
}