diff --git a/app/EventType.php b/app/EventType.php index 9d98e112..29fd3b92 100644 --- a/app/EventType.php +++ b/app/EventType.php @@ -9,4 +9,33 @@ class EventType extends Model protected $casts = [ 'schedule_model' => 'array', ]; + + public function getScheduleModelData($level,$periode) + { + if (isset($this->schedule_model['default_value'])) + { + dd($this->schedule_model ['default_value']); + return $this->schedule_model['default_value'][$periode-1][$level-1]; + } + else + { + return [ + 'ocom' => 'M103.03', + 'name' => 'Super cours', + 'location' => 'Bic', + 'instructor' => 'Math', + 'desc' => '' + ]; + } + } + + public function nbLevel() + { + return count($this->schedule_model['niveaux']); + } + + public function nbPeriode() + { + return count($this->schedule_model['periodes']); + } } diff --git a/app/GoogleDriveFile.php b/app/GoogleDriveFile.php index ea2851d3..d0ef1bf4 100644 --- a/app/GoogleDriveFile.php +++ b/app/GoogleDriveFile.php @@ -337,41 +337,60 @@ class GoogleDriveFile extends Model $user = \Auth::user(); $sidebarArray = []; $dirList = \App\GoogleDriveFile::all(); - if ($dirList->where('path','=','.Privé/.Cadet')->first()->canAuthUser()) + $temp = $dirList->where('path','=','.Privé/.Cadet')->first(); + if ($temp != null) { - $sidebarArray['Cadet'] = [ - 'route' => 'admin.files.cadet', - 'icon' => 'fas fa-folder-open', - 'perm' => null, - 'child' => null - ]; + if ($dirList->where('path','=','.Privé/.Cadet')->first()->canAuthUser()) + { + $sidebarArray['Cadet'] = [ + 'route' => 'admin.files.cadet', + 'icon' => 'fas fa-folder-open', + 'perm' => null, + 'child' => null + ]; + } } - if ($dirList->where('path','=','.Privé/.Staff')->first()->canAuthUser()) + + $temp = $dirList->where('path','=','.Privé/.Staff')->first(); + if ($temp != null) { - $sidebarArray['Staff'] = [ - 'route' => 'admin.files.staff', - 'icon' => 'fas fa-folder-open', - 'perm' => null, - 'child' => null - ]; + if ($dirList->where('path','=','.Privé/.Staff')->first()->canAuthUser()) + { + $sidebarArray['Staff'] = [ + 'route' => 'admin.files.staff', + 'icon' => 'fas fa-folder-open', + 'perm' => null, + 'child' => null + ]; + } } - if ($dirList->where('path','=','.Privé/.ETAMAS')->first()->canAuthUser()) + + $temp = $dirList->where('path','=','.Privé/.ETAMAS')->first(); + if ($temp != null) { - $sidebarArray['ETAMAS'] = [ - 'route' => 'admin.files.etamas', - 'icon' => 'fas fa-folder-open', - 'perm' => null, - 'child' => null - ]; + if ($dirList->where('path','=','.Privé/.ETAMAS')->first()->canAuthUser()) + { + $sidebarArray['ETAMAS'] = [ + 'route' => 'admin.files.etamas', + 'icon' => 'fas fa-folder-open', + 'perm' => null, + 'child' => null + ]; + } } - if ($dirList->where('path','=','.Privé/.Officier')->first()->canAuthUser()) + + $temp = $dirList->where('path','=','.Privé/.Officier')->first(); + if ($temp != null) { - $sidebarArray['Officier'] = [ - 'route' => 'admin.files.officier', - 'icon' => 'fas fa-folder-open', - 'perm' => null, - 'child' => null - ]; + if ($dirList->where('path','=','.Privé/.Officier')->first()->canAuthUser()) + { + $sidebarArray['Officier'] = [ + 'route' => 'admin.files.officier', + 'icon' => 'fas fa-folder-open', + 'perm' => null, + 'child' => null + ]; + } } $sidebarArray['Publique'] = [ 'route' => 'admin.files.publique', diff --git a/app/Http/Controllers/EventTypeController.php b/app/Http/Controllers/EventTypeController.php index 55f99d88..66649050 100644 --- a/app/Http/Controllers/EventTypeController.php +++ b/app/Http/Controllers/EventTypeController.php @@ -68,9 +68,88 @@ class EventTypeController extends Controller * @param \App\EventType $eventType * @return \Illuminate\Http\Response */ - public function update(Request $request, EventType $eventType) + public function update(Request $request, $id) { - // + $eventType = EventType::findOrFail($id); + + $eventType->name = $request->name; + $eventType->location = $request->location; + $eventType->begin_time = $request->begin_time; + $eventType->end_time = $request->end_time; + $eventType->calendar_icon = $request->calendar_icon; + $eventType->calendar_color = $request->calendar_color; + $eventType->admin_desc = $request->admin_desc; + + if ($request->use_weekly_msg == 'on') + { + $eventType->use_weekly_msg = 1; + $eventType->weekly_msg_publication_time = $request->weekly_msg_publication_time; + $eventType->weekly_msg = $request->weekly_msg; + } + else + { + $eventType->use_weekly_msg = 0; + $eventType->weekly_msg_publication_time = ''; + $eventType->weekly_msg = ''; + } + if ($request->use_schedule == 'on') + { + $eventType->use_schedule = 1; + } + else + { + $eventType->use_schedule = 0; + } + if ($request->is_mandatory == 'on') + { + $eventType->is_mandatory = 1; + } + else + { + $eventType->is_mandatory = 0; + } + + $nbOfLevel = 1; + while (\request('level_name_'.$nbOfLevel)) + { + $nbOfLevel++; + } + $nbOfLevel = $nbOfLevel-1; + + $nbOfPeriode = 1; + while (\request('periode_name_'.$nbOfPeriode)) + { + $nbOfPeriode++; + } + $nbOfPeriode = $nbOfPeriode -1; + + $model = []; + for ($x = 1; $x <= $nbOfPeriode; $x++) { + $model['periodes'][$x-1] = [ + 'name' => \Request('periode_name_'.$x), + 'begin_time' => \Request('periode_begin_time_'.$x), + 'end_time' => \Request('periode_end_time_'.$x) + ]; + } + for ($i = 1; $i <= $nbOfLevel; $i++) { + $model['niveaux'][$i-1] = [ + 'name' => \Request('level_name_'.$i) + ]; + + for ($x = 1; $x <= $nbOfPeriode; $x++) { + $model['default_value'][$x-1][$i-1] = [ + 'ocom' => \Request('ocom_n'.$i.'_p'.$x), + 'name' => \Request('name_n'.$i.'_p'.$x), + 'location' => \Request('location_n'.$i.'_p'.$x), + 'instructor' => \Request('instruc_n'.$i.'_p'.$x), + 'desc' => \Request('desc_n'.$i.'_p'.$x), + 'use_course' => \Request('use_course_n'.$i.'_p'.$x), + ]; + } + } + $eventType->schedule_model = $model; + $eventType->save(); + return redirect()->back()->with('success','Modification sauvegardé avec succès'); } /** @@ -83,4 +162,9 @@ class EventTypeController extends Controller { // } + + public function toJson($id) + { + return EventType::findOrFail($id)->toArray(); + } } diff --git a/app/Http/Controllers/ScheduleEditorController.php b/app/Http/Controllers/ScheduleEditorController.php index 324325c3..9c8840bd 100644 --- a/app/Http/Controllers/ScheduleEditorController.php +++ b/app/Http/Controllers/ScheduleEditorController.php @@ -11,9 +11,24 @@ class ScheduleEditorController extends Controller return view('admin.schedule.editor.course'); } - public function getCourseEmpty(int $niveau,int $periode) + public function getCourseEmpty(int $niveau,int $periode,$event_type = 1) { - return view('admin.schedule.editor.course',['periode' => $periode, 'niveau' => $niveau]); + $eventType = \App\EventType::findOrFail($event_type); + $data = $eventType->getScheduleModelData($niveau,$periode); + $ocom = $data['ocom']; + $name = $data['name']; + $location = $data['location']; + $instructor = $data['instructor']; + $desc = $data['desc']; + + return view('admin.schedule.editor.course',[ + 'periode' => $periode, + 'niveau' => $niveau, + 'ocom' => $ocom, + 'name' => $name, + 'location' => $location, + 'instructor' => $instructor, + 'desc' => $desc]); } public function getTemplate(int $id) diff --git a/app/Permission.php b/app/Permission.php index 6f2d4330..5c47664a 100644 --- a/app/Permission.php +++ b/app/Permission.php @@ -188,6 +188,15 @@ class Permission extends Model 'valeur' => 0 ], ], + 'Administration' => [ + 'cadet_list_see' => [ + 'ckey' => 'cadet_list_see', + 'communName' => 'Voir la liste nominative', + 'desc' => 'L\'utilisateur peut-il voir la liste nominative', + 'icon' => 'fa-eye', + 'valeur' => 0 + ], + ], 'Horaire' => [ 'schedule_see' => [ 'ckey' => 'schedule_see', diff --git a/public/js/plugins/schedule/editor.js b/public/js/plugins/schedule/editor.js index 7bf39432..21dd7686 100644 --- a/public/js/plugins/schedule/editor.js +++ b/public/js/plugins/schedule/editor.js @@ -3,7 +3,7 @@ var nbOfPeriode; var nbOfLevel; var emptyPeriode; -function initScheduleEditor(id, eventType) +function initScheduleEditor(id, eventType,mode = 'normal') { $.ajax({ type: 'GET', @@ -12,7 +12,7 @@ function initScheduleEditor(id, eventType) $("#"+id).html(template); for (let pniveau = 1; pniveau <= nbOfLevel; pniveau++) { for (let pperiode = 1; pperiode <= nbOfPeriode; pperiode++) { - loadCourse(pniveau,pperiode); + loadCourse(pniveau,pperiode,eventType,mode); } } initAutoComplete("AutoCompleteUser"); @@ -21,7 +21,7 @@ function initScheduleEditor(id, eventType) error: function () { showNotification('error','Impossible d\'initialiser l\'éditeur d\'horaire ...','top', 'center') } - }) + }); $('.datetimepicker').datetimepicker({ icons: { time: "fa fa-clock-o", @@ -56,7 +56,6 @@ function initScheduleEditor(id, eventType) ] }); $('select').selectpicker(); - } function switchUseWeeklyMsg() @@ -85,13 +84,17 @@ function switchUseSchedule() } } -function loadCourse(periode,niveau) +function loadCourse(periode,niveau,id = 1,mode = 'normal') { $.ajax({ type: 'GET', - url: '/api/schedule/editor/course/'+niveau+'/'+periode+'?api_token='+api_token, + url: '/api/schedule/editor/course/'+niveau+'/'+periode+'/'+id+'?api_token='+api_token, success: function (course) { $("#container-"+niveau+"-"+periode).html(course); + if (mode == 'editor') + { + $('.no-mandatory').removeAttr('required') + } }, error: function () { showNotification('error','Impossible de charger les cours ...','top', 'center') @@ -120,6 +123,21 @@ function addPeriode() }) } +function removePeriode() +{ + $('#row-'+nbOfPeriode).remove(); + nbOfPeriode--; +} + +function removeLevel() +{ + $('#levelHeader-'+nbOfLevel).remove(); + for (let i = 0; i < nbOfPeriode+1; i++) { + $('#container-'+nbOfLevel+'-'+i).remove(); + } + nbOfLevel--; +} + function addLevel() { var levelToAdd = nbOfLevel+1; @@ -159,7 +177,7 @@ function loadEventType(date) editorTemplate = result; nbOfLevel = editorTemplate.schedule_model.niveaux.length; nbOfPeriode = editorTemplate.schedule_model.periodes.length; - initScheduleEditor("scheduleEditor",id) + initScheduleEditor("scheduleEditor",id); $.each(result, function (i, val) { if(i == "is_mandatory" || i == "use_schedule" || i == "use_weekly_msg") { diff --git a/public/js/plugins/schedule/editorv2.js b/public/js/plugins/schedule/editorv2.js new file mode 100644 index 00000000..b4444e2f --- /dev/null +++ b/public/js/plugins/schedule/editorv2.js @@ -0,0 +1,393 @@ +var nbOfLevel = 0; +var nbOfPeriode = 0; +var eventType; +var editorMode = 'schedule'; +function initEditor(event_id = 1, mode = 'schedule') +{ + let editor = $('#editor'); + editorMode = mode; + eventType = null; + let eventTypePromise = $.ajax({ + type: 'GET', + url: '/api/eventType/'+event_id+'?api_token='+api_token, + success: function (template) { + eventType = template; + }, + error: function () { + showNotification('error','Impossible d\'initialiser l\'éditeur d\'horaire ...','top', 'center') + } + }); + + $.when(eventTypePromise).done(function () { + console.log(eventType); + nbOfLevel = eventType['schedule_model']['niveaux'].length; + nbOfPeriode = eventType['schedule_model']['periodes'].length; + updateWidth(); + editor.html(getTemplate(eventType['schedule_model'])); + + if (mode == 'eventType') + { + let scheduleModel = eventType['schedule_model']; + if (scheduleModel['default_value']) + { + $.each(scheduleModel['niveaux'], function (level_id, level) { + $.each(scheduleModel['periodes'], function (periode_id, value) { + if (scheduleModel['default_value'][level_id,periode_id]) + { + updateLevel(periode_id,level_id,scheduleModel['default_value'][periode_id][level_id]); + } + }); + }); + } + $('.no-mandatory').removeAttr('required') + } + initAutoComplete("AutoCompleteUser"); + initAutoCompleteOCOM('AutoCompleteOCOM'); + }); +} + +function updateWidth() +{ + $('#editor').css('width',(23*(nbOfLevel+1))+'rem'); +} + +function getTemplate(scheduleModel) +{ + let headerHTML = ''; + $.each(scheduleModel['niveaux'], function (index, value) { + headerHTML = headerHTML+getHeader(index,value['name']); + }); + let periodesHTML = ''; + $.each(scheduleModel['periodes'], function (index, value) { + periodesHTML = periodesHTML+getPeriode(index,value,scheduleModel['niveaux']); + }); + return '