| Current Path : /var/www/html/reddsis/app/Http/Controllers/Backend/ |
| Current File : /var/www/html/reddsis/app/Http/Controllers/Backend/ContentArticleController.php |
<?php
namespace App\Http\Controllers\Backend;
use App\Http\Controllers\Controller;
use App\Http\Requests\Backend\ContentArticleRequest;
use App\Models\Backend\ContentArticle;
use App\Models\Backend\ContentArticleTranslation;
use App\Models\Backend\FrontendSite;
use App\Models\Backend\Ref;
use App\Models\Backend\menu\frontend\MenuCategory;
use Illuminate\Http\Request;
class ContentArticleController extends Controller
{
public function index(Request $request)
{
$search = $request->get('search');
$articles = ContentArticle::with('translations')
->when($search, function ($q) use ($search) {
$q->where(function ($sub) use ($search) {
$sub->where('article_code', 'like', "%{$search}%")
->orWhere('article_category', 'like', "%{$search}%")
->orWhere('article_status', 'like', "%{$search}%")
->orWhereHas('translations', function ($t) use ($search) {
$t->where('article_translation_title', 'like', "%{$search}%");
});
});
})
->orderBy('article_sorting')
->orderBy('created_at', 'desc')
->paginate(10)->onEachSide(1)->withQueryString();
$categories = Ref::where('cat', 'ARTICLE_CAT')->orderBy('sort')->pluck('descr', 'code');
$subcategories = Ref::where('cat', 'ARTICLE_SUBCAT')->orderBy('sort')->pluck('descr', 'code');
$statuses = Ref::where('cat', 'ARTICLE_STATUS')->orderBy('sort')->pluck('descr', 'code');
return view('backend.module.contentArticle.index', [
'articles' => $articles,
'categories' => $categories,
'subcategories' => $subcategories,
'statuses' => $statuses,
'search' => $search,
]);
}
public function create()
{
$categories = Ref::where('cat', 'ARTICLE_CAT')->orderBy('sort')->pluck('descr', 'code');
$subcategories = Ref::where('cat', 'ARTICLE_SUBCAT')->orderBy('sort')->get(['code', 'descr', 'parent']);
$statuses = Ref::where('cat', 'ARTICLE_STATUS')->orderBy('sort')->pluck('descr', 'code');
$languages = Ref::where('cat', 'LANGUAGE')->orderBy('sort')->pluck('descr', 'code');
$portals = FrontendSite::where('status', true)->orderBy('name')->pluck('name', 'slug');
$menuCategories = MenuCategory::dropdown();
return view('backend.module.contentArticle.create', [
'categories' => $categories,
'subcategories' => $subcategories,
'statuses' => $statuses,
'languages' => $languages,
'portals' => $portals,
'menuCategories' => $menuCategories,
]);
}
public function store(ContentArticleRequest $request)
{
$imagePath = null;
if ($request->hasFile('article_image')) {
$file = $request->file('article_image');
$name = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
$filename = $name . '_' . now()->format('Ymd') . '_' . substr(uniqid(), -5) . '.' . $file->getClientOriginalExtension();
$imagePath = $file->storeAs('content-article', $filename, 'public');
}
$article = ContentArticle::create([
'article_code' => $request->article_code,
'article_date' => $request->article_date,
'article_category' => $request->article_category,
'article_subcategory' => $request->article_subcategory,
'article_status' => $request->article_status,
'article_url' => $request->article_url,
'article_image' => $imagePath,
'article_sorting' => $request->article_sorting ?? 0,
'article_portal_category' => $request->article_portal_category,
'article_start_date' => $request->article_start_date,
'article_start_time' => $request->article_start_time,
'article_end_date' => $request->article_end_date,
'article_end_time' => $request->article_end_time,
'menu_set' => $request->menu_set,
'created_by' => auth()->id(),
'updated_by' => auth()->id(),
]);
if ($request->has('translations')) {
foreach ($request->translations as $lang => $translation) {
if (!empty($translation['title'])) {
ContentArticleTranslation::create([
'article_translation_parent_id' => $article->article_id,
'article_translation_title' => $translation['title'],
'article_translation_content' => $translation['content'] ?? '',
'article_translation_main' => $translation['main'] ?? 0,
'article_translation_language' => $lang,
'created_by' => auth()->id(),
'updated_by' => auth()->id(),
]);
}
}
}
flash()->success('Article created successfully!');
return redirect()->route('content-article.index');
}
public function edit($id)
{
$article = ContentArticle::with('translations')->findOrFail($id);
$categories = Ref::where('cat', 'ARTICLE_CAT')->orderBy('sort')->pluck('descr', 'code');
$subcategories = Ref::where('cat', 'ARTICLE_SUBCAT')->orderBy('sort')->get(['code', 'descr', 'parent']);
$statuses = Ref::where('cat', 'ARTICLE_STATUS')->orderBy('sort')->pluck('descr', 'code');
$languages = Ref::where('cat', 'LANGUAGE')->orderBy('sort')->pluck('descr', 'code');
$portals = FrontendSite::where('status', true)->orderBy('name')->pluck('name', 'slug');
$menuCategories = MenuCategory::dropdown();
return view('backend.module.contentArticle.edit', [
'article' => $article,
'categories' => $categories,
'subcategories' => $subcategories,
'statuses' => $statuses,
'languages' => $languages,
'portals' => $portals,
'menuCategories' => $menuCategories,
]);
}
public function update(ContentArticleRequest $request, $id)
{
$article = ContentArticle::findOrFail($id);
$imagePath = $article->article_image;
if ($request->hasFile('article_image')) {
if ($imagePath && \Storage::disk('public')->exists($imagePath)) {
\Storage::disk('public')->delete($imagePath);
}
$file = $request->file('article_image');
$name = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
$filename = $name . '_' . now()->format('Ymd') . '_' . substr(uniqid(), -5) . '.' . $file->getClientOriginalExtension();
$imagePath = $file->storeAs('content-article', $filename, 'public');
}
$article->update([
'article_code' => $request->article_code,
'article_date' => $request->article_date,
'article_category' => $request->article_category,
'article_subcategory' => $request->article_subcategory,
'article_status' => $request->article_status,
'article_url' => $request->article_url,
'article_image' => $imagePath,
'article_sorting' => $request->article_sorting ?? 0,
'article_portal_category' => $request->article_portal_category,
'article_start_date' => $request->article_start_date,
'article_start_time' => $request->article_start_time,
'article_end_date' => $request->article_end_date,
'article_end_time' => $request->article_end_time,
'menu_set' => $request->menu_set,
'updated_by' => auth()->id(),
]);
$article->translations()->delete();
if ($request->filled('translations')) {
foreach ($request->translations as $lang => $translation) {
if (!empty($translation['title'])) {
ContentArticleTranslation::create([
'article_translation_parent_id' => $article->article_id,
'article_translation_title' => $translation['title'],
'article_translation_content' => $translation['content'] ?? '',
'article_translation_main' => $translation['main'] ?? 0,
'article_translation_language' => $lang,
'created_by' => auth()->id(),
'updated_by' => auth()->id(),
]);
}
}
}
flash()->success('Article updated successfully!');
return redirect()->route('content-article.index');
}
public function destroy($id)
{
$article = ContentArticle::findOrFail($id);
if ($article->article_image && \Storage::disk('public')->exists($article->article_image)) {
\Storage::disk('public')->delete($article->article_image);
}
$article->translations()->delete();
$article->delete();
flash()->success('Article deleted successfully.');
return redirect()->route('content-article.index');
}
public function reorder(Request $request)
{
$ids = $request->input("ids", []);
$page = (int) $request->input('page', 1);
$perPage = 10;
$offset = ($page - 1) * $perPage;
foreach ($ids as $index => $id) {
\App\Models\Backend\ContentArticle::whereKey($id)->update(["article_sorting" => $offset + $index + 1]);
}
return response()->json(["success" => true]);
}
}