lk.zachem.info/app/Modules/Admin/Http/Controllers/AdminPostsController.php

134 lines
4.5 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 Modules\Admin\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Modules\User\Models\User;
use Modules\User\Models\Role;
use Modules\Main\Models\City;
use Modules\Post\Models\Post;
use Modules\Post\Models\PostCity;
use App\Http\Controllers\Controller;
use Modules\Post\Models\PostCategory;
use Illuminate\Support\Facades\Storage;
class AdminPostsController extends Controller
{
public function index()
{
$posts = Post::orderBy('id', 'desc');
if (!auth()->user()->isAdmin() && auth()->user()->isCityManager()) {
}
$posts = $posts->get();
return view('admin::posts.index', [
'posts' => $posts
]);
}
public function create()
{
return view('admin::posts.create', [
'categories' => PostCategory::cases()
]);
}
public function store(Request $request)
{
$request['text'] = 'none';
$validated = $request->validate([
'name' => 'required',
'category' => 'required',
'short_text' => 'max:500',
'text' => 'required',
'imageFile' => 'required|mimes:jpg,bmp,png'
]);
if (!Auth::user()->hasRole(Role::SUPER_ADMIN)) {
if (!Auth::user()->hasRole(Role::CITY_MANAGER)) {
return back();
}
if ($request->has('cities')) {
$availableCities = GetAvailableCities()->pluck('id')->toArray();
foreach ($request->cities as $cityId) {
$city = City::find($cityId);
if (auth()->user()->cannot('manage', $city)) {
return back()->withErrors(['cities' => 'У вас нет прав на публикацию для города ' . $city->name]);
}
}
} elseif (!auth()->user()->isAdmin()) {
return back()->withErrors(['cities' => 'Выберите хотя бы один город для публикации']);
}
}
$path = $request->file('imageFile')->store('posts', ['disk' => 'public']);
$request['image'] = $path;
$post = Post::create(
$request->only(['name', 'short_text', 'text', 'category', 'image', 'post-trixFields'])
);
if (array_key_exists('cities', $request->all()) && is_array($request['cities'])) {
foreach ($request->cities as $cityId) {
PostCity::create([
'post_id' => $post->id,
'city_id' => $cityId,
]);
}
}
return back()->withSuccess('Новость добавлена успешно');
}
public function edit(Post $post)
{
return view('admin::posts.edit', [
'categories' => PostCategory::cases(),
'post' => $post
]);
}
public function update(Request $request, Post $post)
{
$request['text'] = 'none';
$validated = $request->validate([
'name' => 'required',
'category' => 'required',
'short_text' => 'max:500',
'text' => 'required',
'imageFile' => 'mimes:jpg,bmp,png'
]);
if ($request->file('imageFile')) {
$path = $request->file('imageFile')->store('posts', ['disk' => 'public']);
$request['image'] = $path;
} else {
$reuqest['image'] = $post->image;
}
if ($request->has('cities')) {
$availableCities = GetAvailableCities()->pluck('id')->toArray();
foreach ($request->cities as $cityId) {
$city = City::find($cityId);
if (auth()->user()->cannot('manage', $city)) {
return back()->withErrors(['cities' => 'У вас нет прав на публикацию для города ' . $city->name]);
}
}
} elseif (auth()->user()->isAdmin()) {
PostCity::where('post_id', $post->id)->delete();
} else {
return back()->withErrors(['cities' => 'Выберите хотя бы один город для публикации']);
}
$post = $post->update(
$request->only(['name', 'short_text', 'text', 'category', 'image', 'post-trixFields'])
);
return back()->withSuccess('Новость обновлена успешно');
}
public function delete(Post $post)
{
$post->delete();
return back()->withSuccess('Новость удалена успешно');
}
}