<?php namespace App\Http\Controllers; use App\Models\Programs; use App\Models\ProgramVideos; use App\Models\VideoComments; use Illuminate\Http\Request; use Illuminate\Routing\Controller as BaseController; class ProgramConstructController extends BaseController { public function index(Request $request) { $status = $request->get("status", "0"); $query = Programs::query()->with(["appends", "video_pivots.video"])->where("status", $status, 0)->orderByDesc("created_at"); $programs = $query->paginate(10)->withQueryString();; return view("program.construct.index", [ "programs"=>$programs, ]); } public function add(Request $request) { return view("program.construct.create", [ "program"=>new Programs() ]); } public function create(Request $request) { $request->validate([ "name" => ["required"] ]); $program = new Programs(); $createPayload = $request->only(["name", "difficulty", "desc"]); $program->fill($createPayload); $program->status = $request->post("status", 0); $program->save(); return redirect(route("program.construct.edit", ["program"=>$program->id])); } public function from_comment(Request $request, VideoComments $comment) { return redirect(route("program.construct.batch_add"))->withInput([ "bvid"=>$comment->video->bvid, "content"=>$comment->content ]); } public function batch_add(Request $request) { return view("program.construct.batch_add"); } public function batch_create(Request $request) { $request->validate([ 'bvid' => ['required'], 'content' => ['required'], ]); $bvid = $request->post("bvid"); $content = $request->post("content"); $count = ProgramVideos::query()->where("video_bvid", "=", $bvid)->count(); if ($count > 0) { return view("program.construct.batch_add", [ "content" => $content, "bvid" => $bvid, "message" => "该BVID下已有{$count}个节目关联,请手动添加", ]); } $regex = "/^p(?P<part>\d{1,2})[-# _:,)]+(?P<time>(0?1[::])?(\d{1,3}[::])\d{1,2})?[ :]?(?P<content>.+)$/i"; foreach (explode("\n", $content) as $line) { $match = []; $match_count = preg_match($regex, $line, $match); if ($match_count > 0) { $time = $match["time"]; $time = str_replace(":", ":", $time); while (substr_count($time, ":") < 2) { $time = "0:".$time; } $program = new Programs(); $program->name = $match["content"]; $video_pivot = new ProgramVideos(); $video_pivot->video_bvid = $bvid; $video_pivot->start_part = $match["part"]; $video_pivot->start_time = $time; $video_pivot->stop_part = $match["part"]; $program->save(); $program->video_pivots()->save($video_pivot); } } return redirect(route("program.construct.list")); } public function edit(Request $request, Programs $program) { return view("program.construct.create", [ "program"=>$program ]); } public function submit(Request $request, Programs $program) { $request->validate([ "name" => ["required"] ]); $updatePayload = $request->only(["name", "difficulty", "desc"]); $program->status = $request->post("status", 0); $program->update($updatePayload); return view("program.construct.create", [ "program"=>$program ]); } }