147 lines
6.1 KiB
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;
|
|
}
|
|
}
|