496 lines
30 KiB
PHP
496 lines
30 KiB
PHP
@extends('backend.admin-master')
|
|
@section('site-title')
|
|
{{__('Edit Course')}}
|
|
@endsection
|
|
@section('style')
|
|
<link rel="stylesheet" href="{{asset('assets/backend/css/summernote-bs4.css')}}">
|
|
<link rel="stylesheet" href="{{asset('assets/backend/css/dropzone.css')}}">
|
|
<link rel="stylesheet" href="{{asset('assets/backend/css/media-uploader.css')}}">
|
|
<link rel="stylesheet" href="{{asset('assets/backend/css/nice-select.css')}}">
|
|
<link rel="stylesheet" href="{{asset('assets/backend/css/bootstrap-tagsinput.css')}}">
|
|
@endsection
|
|
@section('content')
|
|
<div class="col-lg-12 col-ml-12 padding-bottom-30">
|
|
<div class="row">
|
|
<div class="col-lg-12">
|
|
<div class="margin-top-40"></div>
|
|
<x-error-msg/>
|
|
<x-flash-msg/>
|
|
</div>
|
|
<div class="col-lg-12 mt-5">
|
|
<div class="card">
|
|
<div class="card-body">
|
|
<div class="header-wrap d-flex justify-content-between margin-bottom-30">
|
|
<h4 class="header-title">{{__('Edit Course')}}</h4>
|
|
<a href="{{route('admin.courses.all')}}" class="btn btn-info">{{__('All Courses')}}</a>
|
|
</div>
|
|
<form action="{{route('admin.courses.update')}}" method="post" enctype="multipart/form-data">
|
|
@csrf
|
|
<input type="hidden" name="id" value="{{$course->id}}">
|
|
<ul class="nav nav-tabs" role="tablist">
|
|
@php $default_lang = get_default_language(); @endphp
|
|
@foreach($all_languages as $lang)
|
|
<li class="nav-item">
|
|
<a class="nav-link @if($lang->slug == $default_lang) active @endif" data-lang="{{$lang->slug}}" data-toggle="tab" href="#slider_tab_{{$lang->slug}}" role="tab" aria-controls="home" aria-selected="true">{{$lang->name}}</a>
|
|
</li>
|
|
@endforeach
|
|
</ul>
|
|
<div class="tab-content margin-top-40" >
|
|
@foreach($all_languages as $lang)
|
|
@php $currentLang = optional(optional($course->lang_query)->where(['lang'=> $lang->slug,'course_id' => $course->id]))->first();@endphp
|
|
<div class="tab-pane fade @if($lang->slug == $default_lang) show active @endif" id="slider_tab_{{$lang->slug}}" role="tabpanel" >
|
|
<div class="form-group">
|
|
<label for="title">{{__('Title')}}</label>
|
|
<input type="text" class="form-control title-field" name="title[{{$lang->slug}}]" value="{{$currentLang->title ?? ''}}">
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="slug">{{__('Slug')}}</label>
|
|
<input type="text" class="form-control slug-field" name="slug[{{$lang->slug}}]" value="{{$currentLang->slug ?? ''}}">
|
|
</div>
|
|
<div class="form-group">
|
|
<label>{{__('Description')}}</label>
|
|
<input type="hidden" name="description[{{$lang->slug}}]" value="{{$currentLang->description ?? ''}}">
|
|
<div class="summernote" data-content='{{$currentLang->description ?? ''}}'></div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="meta_title">{{__('Meta title')}}</label>
|
|
<input type="text" class="form-control" name="meta_title[{{$lang->slug}}]" value="{{$currentLang->meta_title ?? ''}}">
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="meta_description">{{__('Meta Description')}}</label>
|
|
<textarea class="form-control max-height-120" name="meta_description[{{$lang->slug}}]"cols="30" rows="10" placeholder="{{__('Meta Description')}}">{{$currentLang->meta_description ?? ''}}</textarea>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="meta_tags">{{__('Meta Tags')}}</label>
|
|
<input type="text" name="meta_tags[{{$lang->slug}}]" class="form-control" data-role="tagsinput" value="{{$currentLang->meta_tags ?? ''}}" >
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="og_meta_title">{{__('Og Meta title')}}</label>
|
|
<input type="text" class="form-control" name="og_meta_title[{{$lang->slug}}]" placeholder="{{__('Og Meta title')}}" value="{{$currentLang->og_meta_title ?? ''}}">
|
|
</div>
|
|
</div>
|
|
@endforeach
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="max_student">{{__('Maximum Student')}}</label>
|
|
<input type="number" class="form-control" name="max_student" value="{{$course->max_student}}">
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="price">{{__('Price')}}</label>
|
|
<input type="number" class="form-control" name="price" value="{{$course->price}}">
|
|
<span class="info-text">{{__('enter 0 to make it free')}}</span>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="sale_price">{{__('Sale Price')}}</label>
|
|
<input type="number" class="form-control" name="sale_price" value="{{$course->sale_price}}">
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="external_url">{{__('External URL')}}</label>
|
|
<input type="text" class="form-control" name="external_url" value="{{$course->external_url}}">
|
|
<span class="info-text">{{__('it will goes to your enter url when anyone click into enroll button')}}</span>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="duration">{{__('Duration')}}</label>
|
|
<input type="text" class="form-control" name="duration" value="{{$course->duration}}">
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="duration_type">{{__('Duration Type')}}</label>
|
|
<select name="duration_type" class="form-control">
|
|
<option @if($course->duration_type === 'min') selected @endif value="min">{{__('Minute')}}</option>
|
|
<option @if($course->duration_type === 'hr') selected @endif value="hr">{{__('Hours')}}</option>
|
|
<option @if($course->duration_type === 'days') selected @endif value="days">{{__('Days')}}</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="featured"><strong>{{__('Featured')}}</strong></label>
|
|
<label class="switch">
|
|
<input type="checkbox" name="featured" @if($course->featured === 'yes') checked @endif>
|
|
<span class="slider onff"></span>
|
|
</label>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="enroll_required"><strong>{{__('Enroll Required')}}</strong></label>
|
|
<label class="switch">
|
|
<input type="checkbox" name="enroll_required" @if($course->enroll_required === 'yes') checked @endif >
|
|
<span class="slider onff"></span>
|
|
</label>
|
|
</div>
|
|
<x-media-upload :name="'image'" :title="__('Image')" :id="$course->image" :dimentions="'1920x1080px'" />
|
|
<x-media-upload :name="'og_meta_image'" :title="__('Og Meta Image')" :id="$course->og_meta_image" :dimentions="'1920x1080px'" />
|
|
|
|
<div class="form-group">
|
|
<label for="categories_id">{{__('Category')}}</label>
|
|
<select name="categories_id" class="form-control nice-select wide">
|
|
@foreach($all_categories as $cat)
|
|
<option value="{{$cat->id}}" @if($course->categories_id == $cat->id) selected @endif>{{optional($cat->lang)->title ?? __('untitled')}}</option>
|
|
@endforeach
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="instructor_id">{{__('Instructor')}}</label>
|
|
<select name="instructor_id" class="form-control nice-select wide">
|
|
@foreach($all_instructor as $inst)
|
|
<option value="{{$inst->id}}" @if($course->instructor_id == $inst->id) selected @endif>{{$inst->name}}</option>
|
|
@endforeach
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="status">{{__('Status')}}</label>
|
|
<select name="status" class="form-control">
|
|
<option @if($course->status === 'draft') selected @endif value="draft">{{__('Draft')}}</option>
|
|
<option @if($course->status === 'publish') selected @endif value="publish">{{__('Publish')}}</option>
|
|
</select>
|
|
</div>
|
|
<div class="iconbox-repeater-wrapper dynamic-repeater">
|
|
<label for="additional_info" class="d-block">{{__('Curriculum')}} <span class="d-none"><i class="fas fa-spinner fa-spin"></i></span></label>
|
|
@forelse($all_curriculumn_with_lesson as $curricullumn_id => $curr_info)
|
|
<div class="curriculmn-outer-wrap">
|
|
<div class="curriculmn-repeater-wrap">
|
|
<div class="action-wrap">
|
|
<span class="edit d-none"><a href="#"><i class="ti-pencil"></i></a></span>
|
|
<span class="add"><i class="ti-plus"></i></span>
|
|
<span class="remove"><i class="ti-trash"></i></span>
|
|
</div>
|
|
<input type="hidden" name="curriculmn__id" value="{{$curricullumn_id}}">
|
|
<ul class="nav nav-tabs" role="tablist">
|
|
@foreach($all_languages as $lang)
|
|
<li class="nav-item">
|
|
<a class="nav-link @if($lang->slug == $default_lang) active @endif" data-toggle="tab" href="#repeater_tab_{{$lang->slug}}" role="tab" aria-controls="home" aria-selected="true">{{$lang->name}}</a>
|
|
</li>
|
|
@endforeach
|
|
</ul>
|
|
<div class="tab-content" >
|
|
@foreach($all_languages as $lang)
|
|
@php
|
|
$lang_data = $curr_info['curriculum'][$lang->slug] ?? '';
|
|
$currul = isset($curr_info['curriculum']) ? $lang_data : '';
|
|
@endphp
|
|
<div class="tab-pane fade @if($lang->slug == $default_lang) show active @endif" id="repeater_tab_{{$lang->slug}}" role="tabpanel" >
|
|
<div class="form-group">
|
|
<input type="text" class="form-control" name="curriculum_title[{{$curricullumn_id}}][{{$lang->slug}}]" placeholder="{{__('Curriculum title')}}" value="{{$currul['title'] ?? ''}}">
|
|
</div>
|
|
<div class="form-group">
|
|
<textarea class="form-control max-height-120" name="curriculum_description[{{$curricullumn_id}}][{{$lang->slug}}]"cols="30" rows="10" placeholder="{{__('Curriculum description')}}">{{$currul['description'] ?? ''}}</textarea>
|
|
</div>
|
|
</div>
|
|
@endforeach
|
|
</div>
|
|
</div>
|
|
@php $all_lessons = $curr_info['lessons'] ?? []; @endphp
|
|
@forelse($all_lessons as $lesson_id => $lesson)
|
|
@php $current_lesson = isset($curr_info['lessons']) ? $curr_info['lessons'][$lesson_id][$default_lang] : ''; @endphp
|
|
<div class="all-field-wrap lesson">
|
|
<div class="form-group">
|
|
<input type="text" class="form-control" name="course_lesson[{{$curricullumn_id}}][{{$lesson_id}}][]" placeholder="{{__('create new lesson')}}" value="{{$current_lesson['title'] ?? __('untitled')}}">
|
|
</div>
|
|
<div class="action-wrap">
|
|
<span class="edit"><a target="_blank" href="{{route('admin.courses.lesson.edit',$lesson_id)}}"><i class="ti-pencil"></i></a></span>
|
|
<span class="add"><i class="ti-plus"></i></span>
|
|
<span class="remove"><i class="ti-trash"></i></span>
|
|
</div>
|
|
</div>
|
|
@empty
|
|
<div class="all-field-wrap lesson">
|
|
<div class="form-group">
|
|
<input type="text" class="form-control" name="course_lesson[{{$curricullumn_id}}][]" placeholder="{{__('create new lesson')}}">
|
|
</div>
|
|
|
|
<div class="action-wrap">
|
|
<span class="edit d-none"><a href="#"><i class="ti-pencil"></i></a></span>
|
|
<span class="add"><i class="ti-plus"></i></span>
|
|
<span class="remove"><i class="ti-trash"></i></span>
|
|
</div>
|
|
</div>
|
|
@endforelse
|
|
|
|
</div>
|
|
@empty
|
|
<div class="curriculmn-outer-wrap">
|
|
<div class="curriculmn-repeater-wrap">
|
|
<div class="action-wrap">
|
|
<span class="edit d-none"><a href="#"><i class="ti-pencil"></i></a></span>
|
|
<span class="add"><i class="ti-plus"></i></span>
|
|
<span class="remove"><i class="ti-trash"></i></span>
|
|
</div>
|
|
<ul class="nav nav-tabs" role="tablist">
|
|
@foreach($all_languages as $lang)
|
|
<li class="nav-item">
|
|
<a class="nav-link @if($lang->slug == $default_lang) active @endif" data-toggle="tab" href="#repeater_tab_{{$lang->slug}}" role="tab" aria-controls="home" aria-selected="true">{{$lang->name}}</a>
|
|
</li>
|
|
@endforeach
|
|
</ul>
|
|
<div class="tab-content" >
|
|
@foreach($all_languages as $lang)
|
|
<div class="tab-pane fade @if($lang->slug == $default_lang) show active @endif" id="repeater_tab_{{$lang->slug}}" role="tabpanel" >
|
|
<div class="form-group">
|
|
<input type="text" class="form-control" name="curriculum_title[1][{{$lang->slug}}]" placeholder="{{__('Curriculum title')}}">
|
|
</div>
|
|
<div class="form-group">
|
|
<textarea class="form-control max-height-120" name="curriculum_description[1][{{$lang->slug}}]"cols="30" rows="10" placeholder="{{__('Curriculum description')}}"></textarea>
|
|
</div>
|
|
</div>
|
|
@endforeach
|
|
</div>
|
|
</div>
|
|
<div class="all-field-wrap lesson">
|
|
<div class="form-group">
|
|
<input type="text" class="form-control" name="course_lesson[1][]" placeholder="{{__('create new lesson')}}">
|
|
</div>
|
|
<div class="action-wrap">
|
|
<span class="edit d-none"><a href="#"><i class="ti-pencil"></i></a></span>
|
|
<span class="add"><i class="ti-plus"></i></span>
|
|
<span class="remove"><i class="ti-trash"></i></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@endforelse
|
|
</div>
|
|
|
|
<button type="submit" class="btn btn-primary mt-4 pr-4 pl-4">{{__('Save Changes')}}</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@include('backend.partials.media-upload.media-upload-markup')
|
|
@endsection
|
|
@section('script')
|
|
@include('backend.partials.media-upload.media-js')
|
|
@include('backend.partials.icon-field.js')
|
|
<script src="{{asset('assets/backend/js/dropzone.js')}}"></script>
|
|
<script src="{{asset('assets/backend/js/jquery.nice-select.min.js')}}"></script>
|
|
<script src="{{asset('assets/backend/js/bootstrap-tagsinput.js')}}"></script>
|
|
<script src="{{asset('assets/backend/js/summernote-bs4.js')}}"></script>
|
|
<x-backend.auto-slug-multilangual :url="route('admin.courses.slug.check')" :type="'update'" />
|
|
<script>
|
|
(function (){
|
|
"use strict";
|
|
|
|
if($('.nice-select').length > 0){
|
|
$('.nice-select').niceSelect();
|
|
}
|
|
|
|
$(document).ready(function () {
|
|
|
|
$('.summernote').summernote({
|
|
height: 400, //set editable area's height
|
|
codemirror: { // codemirror options
|
|
theme: 'monokai'
|
|
},
|
|
callbacks: {
|
|
onChange: function(contents, $editable) {
|
|
$(this).prev('input').val(contents);
|
|
}
|
|
}
|
|
});
|
|
|
|
$(document).on('click','.curriculmn-repeater-wrap > .action-wrap .remove',function (e){
|
|
e.preventDefault();
|
|
var el = $(this);
|
|
var parent = el.parent().parent();
|
|
var container = $('.curriculmn-outer-wrap');
|
|
|
|
$(this).html('<i class="fas fa-spinner fa-spin"></i>');
|
|
|
|
if (container.length > 1){
|
|
el.show(300);
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: "{{route('admin.courses.currilumn.ajax.delete')}}",
|
|
async: false,
|
|
data: {
|
|
_token: "{{csrf_token()}}",
|
|
'curriculmn__id' :$(this).parent().parent().parent().find('input[name="curriculmn__id"]').val(),
|
|
'course_id' : $('input[name="id"]').val()
|
|
},
|
|
success: function (data){
|
|
// curcculmn_id = data;
|
|
}
|
|
});
|
|
parent.parent().hide(300).remove();
|
|
}else{
|
|
el.hide(300);
|
|
}
|
|
$(this).html('<i class="ti-trash"></i>');
|
|
});
|
|
|
|
$(document).on('click','.curriculmn-repeater-wrap > .action-wrap .add',function (e){
|
|
e.preventDefault();
|
|
var el = $(this);
|
|
var parent = el.parent().parent();
|
|
var container = $('.curriculmn-repeater-wrap');
|
|
var clonedDiv = $(this).parent().parent().parent().clone();
|
|
var containerLength = container.length;
|
|
var allFields = clonedDiv.find('.form-control');
|
|
|
|
$(this).html('<i class="fas fa-spinner fa-spin"></i>');
|
|
|
|
var curcculmn_id = '';
|
|
var lession_id = '';
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: "{{route('admin.courses.currilumn.ajax.create')}}",
|
|
async: false,
|
|
data: {
|
|
_token: "{{csrf_token()}}",
|
|
'course_id' : $('input[name="id"]').val()
|
|
},
|
|
success: function (data){
|
|
curcculmn_id = data.curriculum_id;
|
|
lession_id = data.lesson_id;
|
|
}
|
|
});
|
|
|
|
allFields.val('');
|
|
allFields.each(function (item,index){
|
|
var name = $(this).attr('name');
|
|
var number = name.replace(/\d+/g,curcculmn_id);
|
|
$(this).attr('name',number);
|
|
});
|
|
|
|
clonedDiv.find('.curriculmn-repeater-wrap > .action-wrap .remove').css({'display':'inline-block'});
|
|
clonedDiv.find('.all-field-wrap.lesson .action-wrap .edit').remove();
|
|
clonedDiv.find('.all-field-wrap.lesson').not(':first').remove();
|
|
//change lesson field name by curriculmn id and lesson id
|
|
clonedDiv.find('.all-field-wrap.lesson:first').find('input').attr('name','course_lesson['+curcculmn_id+']['+lession_id+'][]');
|
|
clonedDiv.find('.curriculmn-repeater-wrap').find('input[name="curriculmn__id"]').val(curcculmn_id);
|
|
|
|
var allTab = clonedDiv.find('.tab-pane');
|
|
|
|
allTab.each(function (index,value){
|
|
var el = $(this);
|
|
var oldId = el.attr('id');
|
|
el.attr('id',oldId+containerLength);
|
|
});
|
|
var allTabNav = clonedDiv.find('.nav-link');
|
|
allTabNav.each(function (index,value){
|
|
var el = $(this);
|
|
var oldId = el.attr('href');
|
|
el.attr('href',oldId+containerLength);
|
|
});
|
|
container.parent().parent().append(clonedDiv);
|
|
$(this).html('<i class="ti-plus""></i>');
|
|
|
|
if (container.length > 0){
|
|
parent.parent().find('.remove').show(300);
|
|
}
|
|
});
|
|
|
|
if($('.summernote').length > 0){
|
|
$('.summernote').each(function(index,value){
|
|
$(this).summernote('code', $(this).data('content'));
|
|
});
|
|
}
|
|
|
|
|
|
|
|
$(document).on('click','.all-field-wrap.lesson .action-wrap .add',function (e){
|
|
e.preventDefault();
|
|
var el = $(this);
|
|
var parent = el.parent().parent();
|
|
var container = $('.all-field-wrap');
|
|
var clonedData = parent.clone();
|
|
var containerLength = container.length;
|
|
clonedData.find('#myTab').attr('id','mytab_'+containerLength);
|
|
clonedData.find('#myTabContent').attr('id','myTabContent_'+containerLength);
|
|
clonedData.find('.action-wrap .edit').remove();
|
|
|
|
var allFields = clonedData.find('.form-control');
|
|
var curriculmn_id = $(this).parent().parent().parent().find('input[name="curriculmn__id"]').val();
|
|
//add spinner in i
|
|
$(this).html('<i class="fas fa-spinner fa-spin"></i>');
|
|
|
|
|
|
//write code for new lesson id no. to detect new lesson
|
|
|
|
var lession_id = '';
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: "{{route('admin.courses.lesson.ajax.new')}}",
|
|
async: false,
|
|
data: {
|
|
_token: "{{csrf_token()}}",
|
|
'course_id' : $('input[name="id"]').val(),
|
|
'curriculum_id' : curriculmn_id,
|
|
},
|
|
success: function (data){
|
|
lession_id = data;
|
|
}
|
|
});
|
|
|
|
allFields.val('');
|
|
allFields.each(function (item,index){
|
|
var name = $(this).attr('name');
|
|
// var number = name.replace(/\d+/g,lession_id);
|
|
$(this).attr('name','course_lesson['+curriculmn_id+']['+lession_id+'][]');
|
|
});
|
|
|
|
var allTab = clonedData.find('.tab-pane');
|
|
allTab.each(function (index,value){
|
|
var el = $(this);
|
|
var oldId = el.attr('id');
|
|
el.attr('id',oldId+containerLength);
|
|
});
|
|
var allTabNav = clonedData.find('.nav-link');
|
|
|
|
|
|
|
|
allTabNav.each(function (index,value){
|
|
var el = $(this);
|
|
var oldId = el.attr('href');
|
|
el.attr('href',oldId+containerLength);
|
|
});
|
|
|
|
parent.parent().append(clonedData);
|
|
|
|
if (containerLength > 0){
|
|
parent.parent().find('.remove').show(300);
|
|
}
|
|
parent.parent().find('.iconpicker-popover').remove();
|
|
parent.parent().find('.icp-dd').iconpicker();
|
|
|
|
$(this).html('<i class="ti-plus"></i>');
|
|
});
|
|
|
|
$(document).on('click','.all-field-wrap.lesson .action-wrap .remove',function (e){
|
|
e.preventDefault();
|
|
var el = $(this);
|
|
var parent = el.parent().parent();
|
|
var container = $(this).parent().parent().parent().find('.all-field-wrap');
|
|
var lessonFieldName = $(this).parent().parent().find('.form-control').attr('name');
|
|
var match = lessonFieldName.match(/\d+/g);
|
|
$(this).html('<i class="fas fa-spinner fa-spin"></i>');
|
|
|
|
//ajax call to delete lesson from db
|
|
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: "{{route('admin.courses.lesson.ajax.delete')}}",
|
|
async: false,
|
|
data: {
|
|
_token: "{{csrf_token()}}",
|
|
'lesson_id' : match[1],
|
|
},
|
|
success: function (data){
|
|
|
|
}
|
|
});
|
|
|
|
if (container.length > 1){
|
|
el.show(300);
|
|
parent.hide(300).remove();
|
|
}else{
|
|
el.hide(300);
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
|
|
})(jQuery);
|
|
</script>
|
|
|
|
|
|
@endsection
|