vsmov 1.0.0

This commit is contained in:
Clemencia John
2026-04-15 21:11:19 -07:00
parent 311c74228c
commit 68260d170a
147 changed files with 12113 additions and 0 deletions

View File

@@ -0,0 +1,23 @@
@php
$column['value'] = $column['value'] ?? data_get($entry, $column['name']);
$column['escaped'] = $column['escaped'] ?? true;
$column['text'] = $column['default'] ?? '-';
if ($column['value'] instanceof \Closure) {
$column['value'] = $column['value']($entry);
}
if (!empty($column['value'])) {
$column['text'] = isset($column['value']->name) ? $column['value']->name : $column['value']->pluck('name')->implode(', ');
}
@endphp
<span>
@includeWhen(!empty($column['wrapper']), 'crud::columns.inc.wrapper_start')
@if ($column['escaped'])
{{ $column['text'] }}
@else
{!! $column['text'] !!}
@endif
@includeWhen(!empty($column['wrapper']), 'crud::columns.inc.wrapper_end')
</span>

View File

@@ -0,0 +1,199 @@
@extends(backpack_view('blank'))
@php
$widgets['before_content'] = [
[
'type' => 'alert',
'class' => 'alert alert-dark mb-2 col-12',
'heading' => 'VsMovCMS - Tạo website xem phim miễn phí vĩnh viễn',
'content' =>
'
Phiên bản: <span class="text-danger text-break">' .
config('vsmov.version') .
'</span><br/>
Trang chủ: <a href="https://vsmov.com">VsMovCMS.Com</a><br/>
Dữ liệu phim miễn phí: <a href="https://vsmov.com">VsMov.COM</a>
',
'close_button' => true, // show close button or not
],
];
@endphp
@section('content')
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/waypoints/2.0.3/waypoints.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Counter-Up/1.0.0/jquery.counterup.min.js"
integrity="sha512-d8F1J2kyiRowBB/8/pAWsqUl0wSEOkG5KATkVV4slfblq9VRQ6MyDZVxWl2tWd+mPhuCbpTB4M7uU/x9FlgQ9Q=="
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
jQuery(document).ready(function($) {
$('.counter').counterUp({
delay: 10,
time: 500
});
});
</script>
<style>
.card-counter {
box-shadow: 2px 2px 10px #DADADA;
margin: 5px 0;
padding: 20px 10px;
background-color: #fff;
height: 100px;
border-radius: 5px;
transition: .3s linear all;
}
.card-counter:hover {
box-shadow: 4px 4px 20px #DADADA;
transition: .3s linear all;
}
.card-counter.primary {
background-color: #007bff;
color: #FFF;
}
.card-counter.danger {
background-color: #ef5350;
color: #FFF;
}
.card-counter.success {
background-color: #66bb6a;
color: #FFF;
}
.card-counter.info {
background-color: #26c6da;
color: #FFF;
}
.card-counter i {
font-size: 5em;
opacity: 0.2;
}
.card-counter .count-numbers {
position: absolute;
right: 35px;
top: 20px;
font-size: 32px;
display: block;
}
.card-counter .count-name {
position: absolute;
right: 35px;
top: 65px;
font-style: italic;
text-transform: capitalize;
opacity: 0.5;
display: block;
font-size: 18px;
}
</style>
<div class="row">
<div class="col-md-2">
<div class="card-counter primary">
<i class="la la-play-circle"></i>
<span class="count-numbers counter">{{ $count_movies }}</span>
<span class="count-name">Tổng số phim</span>
</div>
</div>
<div class="col-md-2">
<div class="card-counter info">
<i class="las la-server"></i>
<span class="count-numbers counter">{{ $count_episodes }}</span>
<span class="count-name">Tổng số tập</span>
</div>
</div>
<div class="col-md-2">
<div class="card-counter danger">
<i class="las la-bug"></i>
<span class="count-numbers counter">{{ $count_episodes_error }}</span>
<span class="count-name">Tập lỗi</span>
</div>
</div>
<div class="col-md-2">
<div class="card-counter success">
<i class="las la-user"></i>
<span class="count-numbers counter">{{ $count_users }}</span>
<span class="count-name">Users</span>
</div>
</div>
<div class="col-md-2">
<div class="card-counter bg-primary">
<i class="la la-paint-brush"></i>
<span class="count-numbers counter">{{ $count_themes }}</span>
<span class="count-name">Giao diện</span>
</div>
</div>
<div class="col-md-2">
<div class="card-counter">
<i class="las la-puzzle-piece"></i>
<span class="count-numbers counter">{{ count(config('plugins', [])) }}</span>
<span class="count-name">Plugins</span>
</div>
</div>
</div>
<div class="row">
<div class="p-3 col-md-4">
<table class="table table-sm">
<thead>
<tr>
<th colspan="2" scope="col">TOP NGÀY</th>
</tr>
</thead>
<tbody class="bg-white">
@foreach ($top_view_day as $movie)
<tr>
<td><a href="{{ $movie->getUrl() }}">{{ $movie->name }}</a></td>
<td class="text-right"><span class="badge badge-success"><i class="las la-eye"></i> {{ $movie->view_day }}</span></td>
</tr>
@endforeach
</tbody>
</table>
</div>
<div class="p-3 col-md-4">
<table class="table table-sm">
<thead>
<tr>
<th colspan="2" scope="col">TOP TUẦN</th>
</tr>
</thead>
<tbody class="bg-white">
@foreach ($top_view_week as $movie)
<tr>
<td><a href="{{ $movie->getUrl() }}">{{ $movie->name }}</a></td>
<td class="text-right"><span class="badge badge-success"><i class="las la-eye"></i> {{ $movie->view_week }}</span></td>
</tr>
@endforeach
</tbody>
</table>
</div>
<div class="p-3 col-md-4">
<table class="table table-sm">
<thead>
<tr>
<th colspan="2" scope="col">TOP THÁNG</th>
</tr>
</thead>
<tbody class="bg-white">
@foreach ($top_view_month as $movie)
<tr>
<td><a href="{{ $movie->getUrl() }}">{{ $movie->name }}</a></td>
<td class="text-right"><span class="badge badge-success"><i class="las la-eye"></i> {{ $movie->view_month }}</span></td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
@endsection

View File

@@ -0,0 +1,109 @@
<!-- checklist -->
@php
$key_attribute = (new $field['model']())->getKeyName();
$field['attribute'] = $field['attribute'] ?? (new $field['model']())->identifiableAttribute();
$field['number_of_columns'] = $field['number_of_columns'] ?? 3;
// calculate the checklist options
if (!isset($field['options'])) {
$field['options'] = $field['model']
::all()
->pluck($field['attribute'], $key_attribute)
->toArray();
} else {
$field['options'] = call_user_func($field['options'], $field['model']::query());
}
// calculate the value of the hidden input
$field['value'] = old_empty_or_null($field['name'], []) ?? ($field['value'] ?? ($field['default'] ?? []));
if (!empty($field['value'])) {
if (is_a($field['value'], \Illuminate\Support\Collection::class)) {
$field['value'] = $field['value']->pluck($key_attribute)->toArray();
} elseif (is_string($field['value'])) {
$field['value'] = json_decode($field['value']);
}
}
// define the init-function on the wrapper
$field['wrapper']['data-init-function'] = $field['wrapper']['data-init-function'] ?? 'bpFieldInitChecklist';
@endphp
@include('crud::fields.inc.wrapper_start')
<label>{!! $field['label'] !!}</label>
@include('crud::fields.inc.translatable_icon')
<input type="hidden" value='@json($field['value'])'>
<div class="row">
@foreach ($field['options'] as $key => $option)
<div class="col-sm-{{ intval(12 / $field['number_of_columns']) }}">
<div class="checkbox">
<label class="font-weight-normal">
<input type="checkbox" value="{{ $key }}" name="{{ $field['name'] }}[]"> {{ $option }}
</label>
</div>
</div>
@endforeach
</div>
{{-- HINT --}}
@if (isset($field['hint']))
<p class="help-block">{!! $field['hint'] !!}</p>
@endif
@include('crud::fields.inc.wrapper_end')
{{-- ########################################## --}}
{{-- Extra CSS and JS for this particular field --}}
{{-- If a field type is shown multiple times on a form, the CSS and JS will only be loaded once --}}
{{-- FIELD JS - will be loaded in the after_scripts section --}}
@push('crud_fields_scripts')
@loadOnce('bpFieldInitChecklist')
<script>
function bpFieldInitChecklist(element) {
var hidden_input = element.find('input[type=hidden]');
var selected_options = JSON.parse(hidden_input.val() || '[]');
var checkboxes = element.find('input[type=checkbox]');
var container = element.find('.row');
// set the default checked/unchecked states on checklist options
checkboxes.each(function(key, option) {
var id = $(this).val();
if (selected_options.map(String).includes(id)) {
$(this).prop('checked', 'checked');
} else {
$(this).prop('checked', false);
}
});
// when a checkbox is clicked
// set the correct value on the hidden input
checkboxes.click(function() {
var newValue = [];
checkboxes.each(function() {
if ($(this).is(':checked')) {
var id = $(this).val();
newValue.push(id);
}
});
hidden_input.val(JSON.stringify(newValue)).trigger('change');
});
hidden_input.on('CrudField:disable', function(e) {
checkboxes.attr('disabled', 'disabled');
});
hidden_input.on('CrudField:enable', function(e) {
checkboxes.removeAttr('disabled');
});
}
</script>
@endLoadOnce
@endpush
{{-- End of Extra CSS and JS --}}
{{-- ########################################## --}}

View File

@@ -0,0 +1,76 @@
<!-- field_type_name -->
@include('crud::fields.inc.wrapper_start')
@php
$field['has_preview'] = isset($field['has_preview']) ? $field['has_preview'] : false;
$field['preview']['width'] = isset($field['preview']['width']) ? $field['preview']['width'] : '90%';
$field['preview']['height'] = isset($field['preview']['height']) ? $field['preview']['height'] : '90%';
@endphp
<label>{!! $field['label'] !!}</label>
<div class="input-group">
<input type="text" name="{{ $field['name'] }}"
value="{{ old($field['name']) ? old($field['name']) : (isset($field['value']) ? $field['value'] : (isset($field['default']) ? $field['default'] : '')) }}"
@include('crud::fields.inc.attributes') id="ckfinder-{{ strtolower($field['name']) }}">
<span class="input-group-append">
<button type="button" class="btn btn-info"
onclick="selectFileWithCKFinder('{{ strtolower($field['name']) }}')">Browse</button>
</span>
</div>
@if ($field['has_preview'] && old($field['name'], isset($entry) ? $entry->{$field['name']} : ''))
<img class="mw-100 mt-2 rounded" src="{{ old($field['name'], isset($entry) ? $entry->{$field['name']} : '') }}"
id="preview-{{ strtolower($field['name']) }}"
style="width: {{ $field['preview']['width'] }};height: {{ $field['preview']['height'] }}">
@endif
{{-- HINT --}}
@if (isset($field['hint']))
<p class="help-block">{!! $field['hint'] !!}</p>
@endif
@include('crud::fields.inc.wrapper_end')
@if ($crud->fieldTypeNotLoaded($field))
@php
$crud->markFieldTypeAsLoaded($field);
@endphp
{{-- FIELD EXTRA CSS --}}
{{-- push things in the after_styles section --}}
@push('crud_fields_styles')
<!-- no styles -->
@endpush
{{-- FIELD EXTRA JS --}}
{{-- push things in the after_scripts section --}}
@push('crud_fields_scripts')
@include('ckfinder::setup')
<script>
function selectFileWithCKFinder(elementId) {
CKFinder.popup({
startupPath: '/images/sherwood-phan-1/',
chooseFiles: true,
width: 800,
height: 600,
onInit: function(finder) {
finder.on('files:choose', function(evt) {
var file = evt.data.files.first();
var output = document.getElementById('ckfinder-' + elementId);
var preview = document.getElementById('preview-' + elementId);
if (output) {
output.value = file.getUrl();
}
if (preview) {
preview.src = file.getUrl();
}
});
finder.on('file:choose:resizedImage', function(evt) {
var output = document.getElementById(elementId);
output.value = evt.data.resizedUrl;
});
}
});
}
</script>
@endpush
@endif

View File

@@ -0,0 +1,91 @@
@php
$value = isset($field) ? old_empty_or_null($field['name'], '') ?? ($field['value'] ?? null) : null;
@endphp
@php
$progress = [
'episodes' => 'Tập mới',
'status' => 'Trạng thái phim',
'episode_time' => 'Thời lượng tập phim',
'episode_current' => 'Số tập phim hiện tại',
'episode_total' => 'Tổng số tập phim',
];
$info = [
'name' => 'Tên phim',
'origin_name' => 'Tên gốc phim',
'content' => 'Mô tả nội dung phim',
'thumb_url' => 'Ảnh Thumb',
'poster_url' => 'Ảnh Poster',
'trailer_url' => 'Trailer URL',
'quality' => 'Chất lượng phim',
'language' => 'Ngôn ngữ',
'notify' => 'Nội dung thông báo',
'showtimes' => 'Giờ chiếu phim',
'publish_year' => 'Năm xuất bản',
'is_shown_in_theater' => 'Đánh dấu phim chiếu rạp',
'is_copyright' => 'Đánh dấu có bản quyền',
];
$relations = [
'type' => 'Định dạng phim',
'actors' => 'Diễn viên',
'directors' => 'Đạo diễn',
'categories' => 'Thể loại',
'regions' => 'Khu vực',
'tags' => 'Từ khóa',
'studios' => 'Studio',
];
@endphp
<div class="px-3 py-2">
<div class="row mb-3">
<div class="col-12 px-0">
<input class="checkall" data-target="progress-checkbox" id="progress-all" type="checkbox" checked>
<label for="progress-all">Tiến độ phim</label>
</div>
@foreach ($progress as $key => $option)
<div class="col-12 col-md-6 form-check checkbox">
<input class="form-check-input progress-checkbox" id="progress-{{ $loop->index }}" type="checkbox"
name="fields[]" value="{{ $key }}" @if (is_null($value) || in_array($key, $value)) checked @endif>
<label class="d-inline" for="progress-{{ $loop->index }}">{{ $option }}</label>
</div>
@endforeach
</div>
<div class="row mb-3">
<div class="col-12 px-0">
<input class="checkall" data-target="info-checkbox" id="info-all" type="checkbox" checked>
<label for="info-all">Thông tin phim</label>
</div>
@foreach ($info as $key => $option)
<div class="col-12 col-md-6 form-check checkbox">
<input class="form-check-input info-checkbox" id="info-{{ $loop->index }}" type="checkbox"
name="fields[]" value="{{ $key }}" @if (is_null($value) || in_array($key, $value)) checked @endif>
<label class="d-inline" for="info-{{ $loop->index }}">{{ $option }}</label>
</div>
@endforeach
</div>
<div class="row mb-3">
<div class="col-12 px-0">
<input class="checkall" data-target="relation-checkbox" id="relation-all" type="checkbox" checked>
<label for="relation-all">Phân loại</label>
</div>
@foreach ($relations as $key => $option)
<div class="col-12 col-md-6 form-check">
<input class="form-check-input relation-checkbox" id="relation-{{ $loop->index }}" type="checkbox"
name="fields[]" value="{{ $key }}" @if (is_null($value) || in_array($key, $value)) checked @endif>
<label class="d-inline" for="relation-{{ $loop->index }}">{{ $option }}</label>
</div>
@endforeach
</div>
</div>
{{-- FIELD JS - will be loaded in the after_scripts section --}}
@push('crud_fields_scripts')
<script>
$('.checkall').change(function() {
$(`.${$(this).data('target')}`).prop('checked', this.checked);
})
</script>
@endpush

View File

@@ -0,0 +1,131 @@
{{-- PAGE OR LINK field --}}
{{-- Used in Backpack\MenuCRUD --}}
<?php
$field['allows_null'] = $field['allows_null'] ?? false;
$field['name']['type'] = $field['name']['type'] ?? $field['name'][0] ?? 'type';
$field['name']['link'] = $field['name']['link'] ?? $field['name'][1] ?? 'link';
$field['options']['internal_link'] = $field['options']['internal_link'] ?? trans('backpack::crud.internal_link');
$field['options']['external_link'] = $field['options']['external_link'] ?? trans('backpack::crud.external_link');
?>
@include('crud::fields.inc.wrapper_start')
<label>{!! $field['label'] !!}</label>
@include('crud::fields.inc.translatable_icon')
<div class="row" data-init-function="bpFieldInitPageOrLinkElement">
{{-- hidden placeholders for content --}}
<input type="hidden" value="{{ $entry->{$field['name']['link']} ?? '' }}" name="{{ $field['name']['link'] }}" />
<div class="col-sm-3">
{{-- type select --}}
<select
data-identifier="page_or_link_select"
name="{!! $field['name']['type'] !!}"
@include('crud::fields.inc.attributes')
>
@if ($field['allows_null'])
<option value="">-</option>
@endif
@foreach ($field['options'] as $key => $value)
<option value="{{ $key }}"
@if (isset($entry) && $key === $entry->{$field['name']['type']})
selected
@endif
>{{ $value }}</option>
@endforeach
</select>
</div>
<div class="col-sm-9">
{{-- internal link input --}}
<div class="page_or_link_value internal_link {{ isset($entry) && $entry->{$field['name']['type']} === 'internal_link' ? '' : '' }}">
<input
type="text"
class="form-control"
placeholder="{{ trans('backpack::crud.internal_link_placeholder', ['url', url(config('backpack.base.route_prefix').'/page')]) }}"
for="{{ $field['name']['link'] }}"
required
@if (isset($entry) && $entry->{$field['name']['type']} !== 'internal_link')
disabled="disabled"
@endif
@if (isset($entry) && $entry->{$field['name']['type']} === 'internal_link' && $entry->{$field['name']['link']})
value="{{ $entry->{$field['name']['link']} }}"
@endif
>
</div>
{{-- external link input --}}
<div class="page_or_link_value external_link {{ isset($entry) && $entry->{$field['name']['type']} === 'external_link' ? '' : 'd-none' }}">
<input
type="url"
class="form-control"
placeholder="{{ trans('backpack::crud.page_link_placeholder') }}"
for="{{ $field['name']['link'] }}"
required
@if (isset($entry) && $entry->{$field['name']['type']} !== 'external_link')
disabled="disabled"
@endif
@if (isset($entry) && $entry->{$field['name']['type']} === 'external_link' && $entry->{$field['name']['link']})
value="{{ $entry->{$field['name']['link']} }}"
@endif
>
</div>
</div>
</div>
{{-- HINT --}}
@if (isset($field['hint']))
<p class="help-block">{!! $field['hint'] !!}</p>
@endif
@include('crud::fields.inc.wrapper_end')
{{-- ########################################## --}}
{{-- Extra CSS and JS for this particular field --}}
{{-- If a field type is shown multiple times on a form, the CSS and JS will only be loaded once --}}
@if ($crud->fieldTypeNotLoaded($field))
@php
$crud->markFieldTypeAsLoaded($field);
@endphp
{{-- FIELD JS - will be loaded in the after_scripts section --}}
@push('crud_fields_scripts')
<script>
function bpFieldInitPageOrLinkElement(element) {
element = element[0]; // jQuery > Vanilla
const select = element.querySelector('select[data-identifier=page_or_link_select]');
const values = element.querySelectorAll('.page_or_link_value');
// updates hidden fields
const updateHidden = () => {
let selectedInput = select.value && element.querySelector(`.${select.value}`).firstElementChild;
element.querySelectorAll(`input[type="hidden"]`).forEach(hidden => {
hidden.value = selectedInput && hidden.getAttribute('name') === selectedInput.getAttribute('for') ? selectedInput.value : '';
});
}
// save input changes to hidden placeholders
values.forEach(value => value.firstElementChild.addEventListener('input', updateHidden));
// main select change
select.addEventListener('change', () => {
values.forEach(value => {
let isSelected = value.classList.contains(select.value);
// toggle visibility and disabled
value.classList.toggle('d-none', !isSelected);
value.firstElementChild.toggleAttribute('disabled', !isSelected);
});
// updates hidden fields
updateHidden();
});
}
</script>
@endpush
@endif
{{-- End of Extra CSS and JS --}}
{{-- ########################################## --}}

View File

@@ -0,0 +1,44 @@
<!-- field_type_name -->
@include('crud::fields.inc.wrapper_start')
@php
$field['allows_multiple'] = $field['allows_multiple'] ?? false;
$field['options'] = $field['options'] ?? [];
$field['value'] = $field['value'] ?? [];
@endphp
<label>{!! $field['label'] !!}</label>
<select class="form-control select2-from-array" name="{{ $field['name'] }}[]" @if ($field['allows_multiple']) multiple @endif
@include('crud::fields.inc.attributes')>
@foreach ($field['options'] as $key => $option)
<option value="{{ $key }}" @if (($field['allows_multiple'] && in_array($key, $field['value'])) || $key == $field['value']) selected @endif>{{ $option }}
</option>
@endforeach
</select>
{{-- HINT --}}
@if (isset($field['hint']))
<p class="help-block">{!! $field['hint'] !!}</p>
@endif
@include('crud::fields.inc.wrapper_end')
@if ($crud->fieldTypeNotLoaded($field))
@php
$crud->markFieldTypeAsLoaded($field);
@endphp
{{-- FIELD EXTRA CSS --}}
{{-- push things in the after_styles section --}}
@push('crud_fields_styles')
<!-- no styles -->
@endpush
{{-- FIELD EXTRA JS --}}
{{-- push things in the after_scripts section --}}
@push('crud_fields_scripts')
<script>
$(function() {
$(".select2-from-array").select2({});
})
</script>
@endpush
@endif

View File

@@ -0,0 +1,48 @@
<!-- field_type_name -->
@include('crud::fields.inc.wrapper_start')
@php
$key_attribute = (new $field['model']())->getKeyName();
$field['attribute'] = $field['attribute'] ?? (new $field['model']())->identifiableAttribute();
$selected = $field['model']
::whereIn('id', old($field['name'], isset($field['value']) ? $field['value']->pluck('id')->toArray() : []))
->pluck($field['attribute'], $key_attribute)
->toArray();
@endphp
<label>{!! $field['label'] !!}</label>
<select class="form-control select2-relationship-tags" name="{{ $field['name'] }}[]" multiple @include('crud::fields.inc.attributes')>
@foreach ($selected as $option)
<option value="{{ $option }}" selected>{{ $option }}
</option>
@endforeach
</select>
{{-- HINT --}}
@if (isset($field['hint']))
<p class="help-block">{!! $field['hint'] !!}</p>
@endif
@include('crud::fields.inc.wrapper_end')
@if ($crud->fieldTypeNotLoaded($field))
@php
$crud->markFieldTypeAsLoaded($field);
@endphp
{{-- FIELD EXTRA CSS --}}
{{-- push things in the after_styles section --}}
@push('crud_fields_styles')
<!-- no styles -->
@endpush
{{-- FIELD EXTRA JS --}}
{{-- push things in the after_scripts section --}}
@push('crud_fields_scripts')
<script>
$(function() {
$(".select2-relationship-tags").select2({
tags: true
});
})
</script>
@endpush
@endif

View File

@@ -0,0 +1,44 @@
<!-- field_type_name -->
@include('crud::fields.inc.wrapper_start')
@php
$selected = $field['value'] ?? [];
@endphp
<label>{!! $field['label'] !!}</label>
<select class="form-control select2-tags" name="{{ $field['name'] }}[]" multiple @include('crud::fields.inc.attributes')>
@foreach ($selected as $option)
<option value="{{ $option }}" selected>{{ $option }}
</option>
@endforeach
</select>
{{-- HINT --}}
@if (isset($field['hint']))
<p class="help-block">{!! $field['hint'] !!}</p>
@endif
@include('crud::fields.inc.wrapper_end')
@if ($crud->fieldTypeNotLoaded($field))
@php
$crud->markFieldTypeAsLoaded($field);
@endphp
{{-- FIELD EXTRA CSS --}}
{{-- push things in the after_styles section --}}
@push('crud_fields_styles')
<!-- no styles -->
@endpush
{{-- FIELD EXTRA JS --}}
{{-- push things in the after_scripts section --}}
@push('crud_fields_scripts')
<script>
$(function() {
$(".select2-tags").select2({
tags: true
});
})
</script>
@endpush
@endif

View File

@@ -0,0 +1,40 @@
@php
$field['allows_null'] = $field['allows_null'] ?? $crud->model::isColumnNullable($field['name']);
$field['value'] = old_empty_or_null($field['name'], '') ?? ($field['value'] ?? ($field['default'] ?? ''));
$field['multiple'] = $field['allows_multiple'] ?? ($field['multiple'] ?? false);
$field['options']['display_by'] = isset($field['options']['display_by']) ? $field['options']['display_by'] : 'name';
$field['options']['value_by'] = isset($field['options']['value_by']) ? $field['options']['value_by'] : 'id';
$options = \DB::table($field['options']['table'])
->pluck($field['options']['display_by'], $field['options']['value_by'])
->toArray();
@endphp
<!-- select from array -->
@include('crud::fields.inc.wrapper_start')
<label>{!! $field['label'] !!}</label>
@include('crud::fields.inc.translatable_icon')
@if ($field['multiple'])
<input type="hidden" name="{{ $field['name'] }}" value="" @if (in_array('disabled', $field['attributes'] ?? [])) disabled @endif />
@endif
<select name="{{ $field['name'] }}@if ($field['multiple']) [] @endif" @include('crud::fields.inc.attributes')
@if ($field['multiple']) multiple bp-field-main-input @endif>
@if ($field['allows_null'] && !$field['multiple'])
<option value="">-</option>
@endif
@if (count($options))
@foreach ($options as $key => $value)
@if ($key == $field['value'] || (is_array($field['value']) && in_array($key, $field['value'])))
<option value="{{ $key }}" selected>{{ $value }}</option>
@else
<option value="{{ $key }}">{{ $value }}</option>
@endif
@endforeach
@endif
</select>
{{-- HINT --}}
@if (isset($field['hint']))
<p class="help-block">{!! $field['hint'] !!}</p>
@endif
@include('crud::fields.inc.wrapper_end')

View File

@@ -0,0 +1,30 @@
@php
$field['value'] = old_empty_or_null($field['name'], '') ?? ($field['value'] ?? ($field['default'] ?? ''));
$field['multiple'] = $field['allows_multiple'] ?? ($field['multiple'] ?? false);
$options = config('themes', []);
@endphp
<!-- select from array -->
@include('crud::fields.inc.wrapper_start')
<label>{!! $field['label'] !!}</label>
@include('crud::fields.inc.translatable_icon')
@if ($field['multiple'])
<input type="hidden" name="{{ $field['name'] }}" value="" @if (in_array('disabled', $field['attributes'] ?? [])) disabled @endif />
@endif
<select name="{{ $field['name'] }}@if ($field['multiple']) [] @endif" @include('crud::fields.inc.attributes')>
@if (count($options))
@foreach ($options as $key => $value)
@if ($key == $field['value'] || (is_array($field['value']) && in_array($key, $field['value'])))
<option value="{{ $key }}" selected>{{ $value }}</option>
@else
<option value="{{ $key }}">{{ $value }}</option>
@endif
@endforeach
@endif
</select>
{{-- HINT --}}
@if (isset($field['hint']))
<p class="help-block">{!! $field['hint'] !!}</p>
@endif
@include('crud::fields.inc.wrapper_end')

View File

@@ -0,0 +1,91 @@
@php
$value = isset($field) ? old_empty_or_null($field['name'], '') ?? ($field['value'] ?? null) : null;
@endphp
@php
$progress = [
'episodes' => 'Tập mới',
'status' => 'Trạng thái phim',
'episode_time' => 'Thời lượng tập phim',
'episode_current' => 'Số tập phim hiện tại',
'episode_total' => 'Tổng số tập phim',
];
$info = [
'name' => 'Tên phim',
'origin_name' => 'Tên gốc phim',
'content' => 'Mô tả nội dung phim',
'thumb_url' => 'Ảnh Thumb',
'poster_url' => 'Ảnh Poster',
'trailer_url' => 'Trailer URL',
'quality' => 'Chất lượng phim',
'language' => 'Ngôn ngữ',
'notify' => 'Nội dung thông báo',
'showtimes' => 'Giờ chiếu phim',
'publish_year' => 'Năm xuất bản',
'is_shown_in_theater' => 'Đánh dấu phim chiếu rạp',
'is_copyright' => 'Đánh dấu có bản quyền',
];
$relations = [
'type' => 'Định dạng phim',
'actors' => 'Diễn viên',
'directors' => 'Đạo diễn',
'categories' => 'Thể loại',
'regions' => 'Khu vực',
'tags' => 'Từ khóa',
'studios' => 'Studio',
];
@endphp
<div class="px-3 py-2">
<div class="row mb-3">
<div class="col-12 px-0">
<input class="checkall" data-target="progress-checkbox" id="progress-all" type="checkbox">
<label for="progress-all">Tiến độ phim</label>
</div>
@foreach ($progress as $key => $option)
<div class="col-12 col-md-6 form-check checkbox">
<input class="form-check-input progress-checkbox" id="progress-{{ $loop->index }}" type="checkbox"
name="fields[]" value="{{ $key }}" @if (is_null($value) || in_array($key, $value)) checked @endif>
<label class="d-inline" for="progress-{{ $loop->index }}">{{ $option }}</label>
</div>
@endforeach
</div>
<div class="row mb-3">
<div class="col-12 px-0">
<input class="checkall" data-target="info-checkbox" id="info-all" type="checkbox">
<label for="info-all">Thông tin phim</label>
</div>
@foreach ($info as $key => $option)
<div class="col-12 col-md-6 form-check checkbox">
<input class="form-check-input info-checkbox" id="info-{{ $loop->index }}" type="checkbox"
name="fields[]" value="{{ $key }}" @if (is_null($value) || in_array($key, $value)) checked @endif>
<label class="d-inline" for="info-{{ $loop->index }}">{{ $option }}</label>
</div>
@endforeach
</div>
<div class="row mb-3">
<div class="col-12 px-0">
<input class="checkall" data-target="relation-checkbox" id="relation-all" type="checkbox">
<label for="relation-all">Phân loại</label>
</div>
@foreach ($relations as $key => $option)
<div class="col-12 col-md-6 form-check">
<input class="form-check-input relation-checkbox" id="relation-{{ $loop->index }}" type="checkbox"
name="fields[]" value="{{ $key }}" @if (is_null($value) || in_array($key, $value)) checked @endif>
<label class="d-inline" for="relation-{{ $loop->index }}">{{ $option }}</label>
</div>
@endforeach
</div>
</div>
{{-- FIELD JS - will be loaded in the after_scripts section --}}
@push('after_scripts')
<script>
$('.checkall').change(function() {
$(`.${$(this).data('target')}`).prop('checked', this.checked);
})
</script>
@endpush

View File

@@ -0,0 +1,15 @@
<header class="{{ config('backpack.base.header_class') }}">
<!-- Logo -->
<button class="navbar-toggler sidebar-toggler d-lg-none mr-auto ml-3" type="button" data-toggle="sidebar-show" aria-label="{{ trans('backpack::base.toggle_navigation')}}">
<span class="navbar-toggler-icon"></span>
</button>
<a class="navbar-brand" href="{{ url(config('backpack.base.home_link')) }}" title="{{ config('backpack.base.project_name') }}">
{!! setting('site_logo') ?? config('backpack.base.project_logo') !!}
<h6><span class="badge badge-danger">v{{ config('vsmov.version') }}</span></h6>
</a>
<button class="navbar-toggler sidebar-toggler d-md-down-none" type="button" data-toggle="sidebar-lg-show" aria-label="{{ trans('backpack::base.toggle_navigation')}}">
<span class="navbar-toggler-icon"></span>
</button>
@include(backpack_view('inc.menu'))
</header>

View File

@@ -0,0 +1,107 @@
<!-- This file is used to store sidebar items, starting with Backpack\Base 0.9.0 -->
<li class="nav-item"><a class="nav-link" href="{{ backpack_url('dashboard') }}"><i class="la la-home nav-icon"></i>
{{ trans('backpack::base.dashboard') }}</a></li>
<li class="nav-title">Phim</li>
<li class='nav-item'>
<a class='nav-link' href='{{ backpack_url('movie') }}'><i class='nav-icon la la-play-circle'></i>
Quản lý phim</a>
</li>
<li class="nav-item nav-dropdown"><a class="nav-link nav-dropdown-toggle" href="#"><i
class="nav-icon la la-list"></i> Phân loại</a>
<ul class="nav-dropdown-items">
<li class='nav-item'><a class='nav-link' href='{{ backpack_url('catalog') }}'><i class='nav-icon la la-pagelines'></i>
Danh sách</a></li>
<li class='nav-item'><a class='nav-link' href='{{ backpack_url('category') }}'><i class='nav-icon la la-at'></i>
Thể loại</a></li>
<li class='nav-item'><a class='nav-link' href='{{ backpack_url('tag') }}'><i class='nav-icon la la-link'></i>
Tags</a>
</li>
<li class='nav-item'><a class='nav-link' href='{{ backpack_url('region') }}'><i
class='nav-icon la la-globe'></i> Khu
vực</a></li>
<li class='nav-item'><a class='nav-link' href='{{ backpack_url('actor') }}'><i
class='nav-icon la la-gratipay'></i>
Diễn viên</a></li>
<li class='nav-item'><a class='nav-link' href='{{ backpack_url('director') }}'><i
class='nav-icon la la-odnoklassniki'></i> Đạo diễn</a></li>
<li class='nav-item'><a class='nav-link' href='{{ backpack_url('studio') }}'><i
class='nav-icon la la-connectdevelop'></i> Studio</a></li>
</ul>
</li>
<li class='nav-item'>
<a class='nav-link' href='{{ backpack_url('episode') }}'><i class='nav-icon la la-info-circle'></i>
Phim lỗi</a>
</li>
<li class="nav-title">Tuỳ chỉnh</li>
<li class="nav-item nav-dropdown"><a class="nav-link nav-dropdown-toggle" href="#"><i
class="nav-icon la la-paint-brush"></i> Giao diện</a>
<ul class="nav-dropdown-items">
<li class="nav-item"><a class="nav-link" href="{{ backpack_url('theme') }}"><i
class="nav-icon la la-photo"></i>Chủ đề</a>
</li>
<li class='nav-item'><a class='nav-link' href='{{ backpack_url('menu') }}'><i class='nav-icon la la-list'></i>
Menu</a>
</li>
</ul>
</li>
<li class="nav-item nav-dropdown"><a class="nav-link nav-dropdown-toggle" href="#"><i
class="nav-icon la la-cog"></i> Cài đặt</a>
<ul class="nav-dropdown-items">
<li class='nav-item'><a class='nav-link' href='{{ backpack_url('setting/group/generals/edit') }}'><i
class='nav-icon la la-wrench'></i>
<span>General</span></a></li>
<li class='nav-item'><a class='nav-link' href='{{ backpack_url('setting/group/metas/edit') }}'><i
class='nav-icon la la-chevron-circle-up'></i>
<span>SEO</span></a></li>
<li class='nav-item'><a class='nav-link' href='{{ backpack_url('setting/group/jwplayer/edit') }}'><i
class='nav-icon la la-play'></i>
<span>Jwplayer</span></a></li>
<li class='nav-item'><a class='nav-link' href='{{ backpack_url('setting/group/others/edit') }}'><i
class='nav-icon la la-slack'></i>
<span>Khác</span></a></li>
</ul>
</li>
<li class='nav-item'>
<a class='nav-link' href='{{ backpack_url('sitemap/create') }}'><i class='nav-icon la la-map'></i>
Sitemap</a>
</li>
<li class="nav-title">Mở rộng</li>
@foreach (config('plugins', []) as $plugin)
@if (count($plugin['entries'] ?? []) > 1)
<li class="nav-item nav-dropdown"><a class="nav-link nav-dropdown-toggle" href="#">
<i class="nav-icon {{ $plugin['icon'] ?? '' }}"></i> {{ $plugin['name'] ?? '' }}</a>
<ul class="nav-dropdown-items">
@foreach ($plugin['entries'] ?? [] as $entry)
<li class='nav-item'><a class='nav-link' href='{{ $entry['url'] ?? '#' }}'>
<i class='nav-icon {{ $entry['icon'] ?? '' }}'></i>
<span>{{ $entry['name'] ?? '' }}</span></a></li>
@endforeach
</ul>
</li>
@else
@foreach ($plugin['entries'] ?? [] as $entry)
<li class='nav-item'><a class='nav-link' href='{{ $entry['url'] ?? '#' }}'>
<i class='nav-icon {{ $entry['icon'] ?? '' }}'></i>
<span>{{ $plugin['name'] ?? '' }}</span></a></li>
@endforeach
@endif
@endforeach
@if (backpack_user()->hasRole('Admin'))
<li class="nav-title">{{ trans('backpack::base.administration') }}</li>
<li class="nav-item nav-dropdown">
<a class="nav-link nav-dropdown-toggle" href="#"><i class="nav-icon la la-users"></i>
Authentication</a>
<ul class="nav-dropdown-items">
<li class="nav-item"><a class="nav-link" href="{{ backpack_url('user') }}"><i
class="nav-icon la la-user"></i>
<span>Users</span></a></li>
<li class="nav-item"><a class="nav-link" href="{{ backpack_url('role') }}"><i
class="nav-icon la la-id-badge"></i> <span>Roles</span></a></li>
</ul>
</li>
@endif

View File

@@ -0,0 +1,13 @@
<!-- This file is used to store topbar (right) items -->
<li class="nav-item dropdown"><a class="nav-link" data-toggle="dropdown" href="#" role="button" aria-haspopup="true"
aria-expanded="false" style="position: relative;width: 35px;height: 35px;margin: 0 10px;"><i class="la la-gears"
style="font-size: 2.3rem"></i></a>
<div
class="dropdown-menu {{ config('backpack.base.html_direction') == 'rtl' ? 'dropdown-menu-left' : 'dropdown-menu-right' }} mr-4 pb-1 pt-1">
<a class="dropdown-item" href="{{ backpack_url('quick-action/delete-cache') }}">
Delete All Cache
</a>
<div class="dropdown-divider"></div>
</div>
</li>