157 lines
6.0 KiB
PHP
157 lines
6.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Programs;
|
|
use App\Models\ProgramVideos;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller as BaseController;
|
|
use Illuminate\Support\Carbon;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class ProgramVideoConstructController extends BaseController
|
|
{
|
|
public function index(Request $request, Programs $program) {
|
|
return view("program.construct.video.index", [
|
|
"program" => $program,
|
|
"videos" => $program->video_pivots,
|
|
]);
|
|
}
|
|
|
|
public function add(Request $request) {
|
|
return view("program.construct.video.create", [
|
|
"program_video" => new ProgramVideos()
|
|
]);
|
|
}
|
|
|
|
public function create(Request $request, Programs $program) {
|
|
$request->validate([
|
|
"video_bvid" => ["required"],
|
|
"start_part" => ["required", "int"],
|
|
"stop_part" => ["required", "int", "gte:start_part"],
|
|
"start_time" => ["required", "date_format:H:i:s"],
|
|
"stop_time" => ["required", "date_format:H:i:s"],
|
|
"created_at" => ["date"],
|
|
]);
|
|
$program_video = new ProgramVideos();
|
|
$createPayload = $request->only(["start_part", "start_time", "stop_part", "stop_time"]);
|
|
$program_video->fill($createPayload);
|
|
$program_video->video_bvid = $request->post("video_bvid");
|
|
if ($request->hasFile("start_image")) {
|
|
$file = $request->file("start_image");
|
|
$path = $file->store("lubo_file");
|
|
$full_path = Storage::url($path);
|
|
$program_video->start_image = $full_path;
|
|
}
|
|
if ($request->hasFile("stop_image")) {
|
|
$file = $request->file("stop_image");
|
|
$path = $file->store("lubo_file");
|
|
$full_path = Storage::url($path);
|
|
$program_video->stop_image = $full_path;
|
|
}
|
|
if ($request->has("created_at")) {
|
|
$program_video->created_at = $request->post("created_at");
|
|
}
|
|
$program->video_pivots()->save($program_video);
|
|
return redirect(route("program.construct.video.list", [
|
|
"program"=>$program_video->program_id
|
|
]));
|
|
}
|
|
|
|
public function edit(Request $request, ProgramVideos $program_video) {
|
|
return view("program.construct.video.create", [
|
|
"program_video" => $program_video
|
|
]);
|
|
}
|
|
|
|
public function submit(Request $request, ProgramVideos $program_video) {
|
|
$request->validate([
|
|
"start_part" => ["required", "int"],
|
|
"stop_part" => ["required", "int", "gte:start_part"],
|
|
"start_time" => ["required", "date_format:H:i:s"],
|
|
"stop_time" => ["required", "date_format:H:i:s"],
|
|
"created_at" => ["date"],
|
|
]);
|
|
$updatePayload = $request->only(["start_part", "start_time", "stop_part", "stop_time"]);
|
|
if ($request->hasFile("start_image")) {
|
|
$file = $request->file("start_image");
|
|
$path = $file->store("lubo_file");
|
|
$full_path = Storage::url($path);
|
|
$program_video->start_image = $full_path;
|
|
}
|
|
if ($request->hasFile("stop_image")) {
|
|
$file = $request->file("stop_image");
|
|
$path = $file->store("lubo_file");
|
|
$full_path = Storage::url($path);
|
|
$program_video->stop_image = $full_path;
|
|
}
|
|
if ($request->has("created_at")) {
|
|
$program_video->created_at = $request->post("created_at");
|
|
}
|
|
$program_video->update($updatePayload);
|
|
/**
|
|
* @var $program Programs
|
|
*/
|
|
$program = $program_video->program;
|
|
$program->created_at = $program->video_pivots()->first()->created_at;
|
|
$program->save();
|
|
return redirect(route("program.construct.video.list", [
|
|
"program"=>$program_video->program_id
|
|
]));
|
|
}
|
|
|
|
public function to_fix_created_at(Request $request, ProgramVideos $program_video) {
|
|
if ($program_video->created_at === null) {
|
|
return back()->withErrors([
|
|
"id" => "没有开始时间,请先保存对应时间"
|
|
]);
|
|
}
|
|
return view("program.construct.video.time_fix", [
|
|
"program_video" => $program_video
|
|
]);
|
|
}
|
|
|
|
public function fix_created_at_base_on(Request $request, ProgramVideos $program_video)
|
|
{
|
|
$request->validate([
|
|
"each_time" => ["required", "date_format:H:i:s"]
|
|
]);
|
|
if ($program_video->created_at === null) {
|
|
return back()->withErrors([
|
|
"id" => "没有开始时间,请先保存对应时间"
|
|
]);
|
|
}
|
|
$each_time = $request->post("each_time");
|
|
$each_time_sec = Carbon::createFromFormat("H:i:s", $each_time)->secondsSinceMidnight();
|
|
/**
|
|
* @var $program_videos ProgramVideos[]
|
|
*/
|
|
$program_videos = ProgramVideos::query()
|
|
->where("video_bvid", "=", $program_video->video_bvid)
|
|
->where("id", "!=", $program_video->id)
|
|
->where(function (Builder $query) use ($program_video) {
|
|
$query->where("created_at", ">", $program_video->created_at)->orWhere("created_at", "=", null);
|
|
})
|
|
->get();
|
|
/**
|
|
* @var $created_at Carbon
|
|
*/
|
|
$created_at = $program_video->created_at;
|
|
$base_time = $created_at->subSeconds($program_video->start_sec)->subSeconds(($program_video->start_part - 1) * $each_time_sec);
|
|
foreach ($program_videos as $video) {
|
|
if ($video->id === $program_video->id) {
|
|
continue;
|
|
}
|
|
$time = $base_time->copy()->addSeconds(($video->start_part - 1) * $each_time_sec)->addSeconds($video->start_sec);
|
|
if ($time->second > 30) {
|
|
$time->addMinute();
|
|
}
|
|
$time->seconds(0);
|
|
$video->created_at = $time;
|
|
$video->update();
|
|
}
|
|
return redirect(route("program.construct.list"));
|
|
}
|
|
}
|