👁 查看:NewspaperController.php
路径:/home/boguraj1/.trash/app.1/Http/Controllers/Admin/NewspaperController.php
大小:2.71 KB · 修改:2026-06-25 22:26:28 · 权限:0644 · 可写
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\Newspaper;
use Illuminate\Http\Request;

class NewspaperController extends Controller
{
    public function index()
    {
        $newspapers = Newspaper::withCount('pages')
            ->orderByDesc('publish_date')
            ->paginate(15);

        return view('admin.newspapers.index', compact('newspapers'));
    }

    public function create()
    {
        return view('admin.newspapers.create');
    }

    public function store(Request $request)
    {
        $data = $request->validate([
            'publish_date' => 'required|date|unique:newspapers,publish_date',
            'edition_name' => 'nullable|string|max:255',
            'volume' => 'nullable|string|max:100',
            'issue_number' => 'nullable|string|max:100',
            'status' => 'required|in:draft,published',
            'description' => 'nullable|string',
        ]);

        $newspaper = Newspaper::create($data);

        return redirect()->route('admin.newspapers.pages', $newspaper)
            ->with('success', 'Newspaper edition created. Now upload pages.');
    }

    public function edit(Newspaper $newspaper)
    {
        return view('admin.newspapers.edit', compact('newspaper'));
    }

    public function update(Request $request, Newspaper $newspaper)
    {
        $data = $request->validate([
            'publish_date' => 'required|date|unique:newspapers,publish_date,' . $newspaper->id,
            'edition_name' => 'nullable|string|max:255',
            'volume' => 'nullable|string|max:100',
            'issue_number' => 'nullable|string|max:100',
            'status' => 'required|in:draft,published',
            'description' => 'nullable|string',
        ]);

        $newspaper->update($data);

        return redirect()->route('admin.newspapers.index')
            ->with('success', 'Newspaper updated successfully.');
    }

    public function destroy(Newspaper $newspaper)
    {
        foreach ($newspaper->pages as $page) {
            if (\Storage::disk('public')->exists($page->image_path)) {
                \Storage::disk('public')->delete($page->image_path);
            }
            if ($page->thumbnail_path && \Storage::disk('public')->exists($page->thumbnail_path)) {
                \Storage::disk('public')->delete($page->thumbnail_path);
            }
        }

        $newspaper->delete();

        return redirect()->route('admin.newspapers.index')
            ->with('success', 'Newspaper deleted.');
    }

    public function pages(Newspaper $newspaper)
    {
        $newspaper->load(['pages' => fn($q) => $q->orderBy('sort_order')->orderBy('page_number')]);
        return view('admin.newspapers.pages', compact('newspaper'));
    }
}