lubo_comment_query/app/Http/Controllers/ProgramConstructController.php

108 lines
3.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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
]);
}
}