$program, "appends" => $program->appends, ]); } public function add(Request $request, Programs $program) { $append = new ProgramAppends(); if (sizeof($program->appends) === 0) { $append->is_original = 1; } return view("program.construct.append.create", [ "program" => $program, "append" => $append ]); } public function edit(Request $request, ProgramAppends $append) { return view("program.construct.append.create", [ "program" => $append->program, "append" => $append ]); } public function copy_view(Request $request, Programs $program) { return view("program.construct.append.copy_broadcast", [ "program" => $program, ]); } // endregion // region Form Submits public function create(Request $request, Programs $program) { $append = $this->fill_model($request); $program->appends()->save($append); return redirect(route("program.construct.append.list", [ "program"=>$program->id, ])); } public function submit(Request $request, ProgramAppends $append) { $append = $this->fill_model($request, $append); $append->save(); return redirect(route("program.construct.append.list", [ "program"=>$append->program->id, ])); } public function copy_append(Request $request, Programs $program) { $payload = $request->validate([ "id" => ["required", "numeric", "exists:App\Models\ProgramAppends,id"] ]); $original_append = ProgramAppends::query()->findOrFail($payload["id"]); $append = $original_append->replicate(); $program->appends()->save($append); return redirect(route("program.construct.append.list", [ "program"=>$append->program->id, ])); } // endregion // region API public function from_list(Request $request) { $query = ProgramAppends::query()->groupBy("from") ->select("from") ->selectRaw("count(1) as total_count") ->orderByDesc("total_count"); return $query->get()->map(function ($item) { return [ "text" => $item["from"], "value" => $item["from"], "alias" => implode("", \pinyin($item["from"], PINYIN_NO_TONE|PINYIN_KEEP_ENGLISH)), "abbr" => \pinyin_abbr($item["from"]), ]; })->toArray(); } public function broadcast_list(Request $request) { $query = ProgramAppends::query()->groupBy("name") ->where("broadcast", "=", 1) ->select("name")->selectRaw("max(id) as id"); return $query->get()->map(function ($item) { return [ "text" => $item["name"], "value" => $item["id"], "alias" => implode("", \pinyin($item["name"], PINYIN_NO_TONE|PINYIN_KEEP_ENGLISH)), "abbr" => \pinyin_abbr($item["name"]), ]; }); } // endregion private function fill_model(Request $request, ?ProgramAppends $append = null): ProgramAppends { if ($append === null) { $append = new ProgramAppends(); } $payload = $request->validate([ "name" => ["required_without:is_original"], "from" => ["required"], "price" => ["required", "numeric"], "post" => [], ]); $append->fill($payload); $append->is_original = $request->post("is_original", 0); return $append; } }