$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"], "start_time" => ["required", "date_format:H:i:s"], "stop_time" => ["required", "date_format:H:i:s"], "created_at" => ["required", "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 = str_replace("jerryyan.top", "jerryyan.net", $full_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 = str_replace("jerryyan.top", "jerryyan.net", $full_path); $program_video->stop_image = $full_path; } $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"], "start_time" => ["required", "date_format:H:i:s"], "stop_time" => ["required", "date_format:H:i:s"], "created_at" => ["required", "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 = str_replace("jerryyan.top", "jerryyan.net", $full_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 = str_replace("jerryyan.top", "jerryyan.net", $full_path); $program_video->stop_image = $full_path; } $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 ($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")); } }