156 lines
5.5 KiB
PHP
156 lines
5.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\MusicProduction;
|
|
use App\Models\Setting;
|
|
use App\Models\HeaderTemplate;
|
|
use App\Models\FooterTemplate;
|
|
use App\Services\TemplateService;
|
|
use Illuminate\Http\Request;
|
|
|
|
class MusicProductionController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
// Get Settings
|
|
$settings = new \stdClass();
|
|
$allSettings = Setting::where('is_active', '=', true, 'and')->get();
|
|
foreach ($allSettings as $setting) {
|
|
$settings->{$setting->key} = $setting->value;
|
|
}
|
|
|
|
// Get active music productions
|
|
$productions = MusicProduction::active()
|
|
->ordered()
|
|
->paginate(9); // Using 9 for nice grid layout (3 per row)
|
|
|
|
// --- Header Logic ---
|
|
$renderedHeader = null;
|
|
$defaultHeaderId = $settings->default_header ?? null;
|
|
|
|
if ($defaultHeaderId) {
|
|
$headerTemplate = HeaderTemplate::find($defaultHeaderId);
|
|
if ($headerTemplate) {
|
|
$templateDefaults = $headerTemplate->default_data ?? [];
|
|
$mergedHeaderData = array_merge($templateDefaults, []);
|
|
|
|
$renderedHeader = TemplateService::replacePlaceholders(
|
|
$headerTemplate->html_content,
|
|
$mergedHeaderData,
|
|
null
|
|
);
|
|
}
|
|
}
|
|
|
|
// --- Footer Logic ---
|
|
$renderedFooter = null;
|
|
$defaultFooterId = $settings->default_footer ?? null;
|
|
|
|
if ($defaultFooterId) {
|
|
$footerTemplate = FooterTemplate::find($defaultFooterId);
|
|
if ($footerTemplate) {
|
|
$templateDefaults = $footerTemplate->default_data ?? [];
|
|
$mergedFooterData = array_merge($templateDefaults, []);
|
|
|
|
$renderedFooter = TemplateService::replacePlaceholders(
|
|
$footerTemplate->html_content,
|
|
$mergedFooterData,
|
|
null
|
|
);
|
|
}
|
|
}
|
|
|
|
$meta = [
|
|
'title' => __('music_productions.meta-index-title'),
|
|
'description' => __('music_productions.meta-index-description'),
|
|
'image' => null,
|
|
];
|
|
|
|
return view('front.music-productions.index', compact('productions', 'settings', 'renderedHeader', 'renderedFooter', 'meta'));
|
|
}
|
|
|
|
public function show($slug)
|
|
{
|
|
$production = MusicProduction::active()
|
|
->where('slug', $slug)
|
|
->firstOrFail();
|
|
|
|
// Get Settings
|
|
$settings = new \stdClass();
|
|
$allSettings = Setting::where('is_active', '=', true, 'and')->get();
|
|
foreach ($allSettings as $setting) {
|
|
$settings->{$setting->key} = $setting->value;
|
|
}
|
|
|
|
// Fetch adjacent posts (Prev and Next)
|
|
$prev = MusicProduction::active()
|
|
->where(function($q) use ($production) {
|
|
$q->where('sort_order', '<', $production->sort_order)
|
|
->orWhere(function($sub) use ($production) {
|
|
$sub->where('sort_order', $production->sort_order)
|
|
->where('id', '<', $production->id);
|
|
});
|
|
})
|
|
->orderBy('sort_order', 'desc')
|
|
->orderBy('id', 'desc')
|
|
->first();
|
|
|
|
$next = MusicProduction::active()
|
|
->where(function($q) use ($production) {
|
|
$q->where('sort_order', '>', $production->sort_order)
|
|
->orWhere(function($sub) use ($production) {
|
|
$sub->where('sort_order', $production->sort_order)
|
|
->where('id', '>', $production->id);
|
|
});
|
|
})
|
|
->orderBy('sort_order', 'asc')
|
|
->orderBy('id', 'asc')
|
|
->first();
|
|
|
|
// --- Header Logic ---
|
|
$renderedHeader = null;
|
|
$defaultHeaderId = $settings->default_header ?? null;
|
|
|
|
if ($defaultHeaderId) {
|
|
$headerTemplate = HeaderTemplate::find($defaultHeaderId);
|
|
if ($headerTemplate) {
|
|
$templateDefaults = $headerTemplate->default_data ?? [];
|
|
$mergedHeaderData = array_merge($templateDefaults, []);
|
|
|
|
$renderedHeader = TemplateService::replacePlaceholders(
|
|
$headerTemplate->html_content,
|
|
$mergedHeaderData,
|
|
$production
|
|
);
|
|
}
|
|
}
|
|
|
|
// --- Footer Logic ---
|
|
$renderedFooter = null;
|
|
$defaultFooterId = $settings->default_footer ?? null;
|
|
|
|
if ($defaultFooterId) {
|
|
$footerTemplate = FooterTemplate::find($defaultFooterId);
|
|
if ($footerTemplate) {
|
|
$templateDefaults = $footerTemplate->default_data ?? [];
|
|
$mergedFooterData = array_merge($templateDefaults, []);
|
|
|
|
$renderedFooter = TemplateService::replacePlaceholders(
|
|
$footerTemplate->html_content,
|
|
$mergedFooterData,
|
|
$production
|
|
);
|
|
}
|
|
}
|
|
|
|
$meta = [
|
|
'title' => $production->translate('title'),
|
|
'description' => \Str::limit(strip_tags($production->translate('content')), 160),
|
|
'image' => $production->cover_image_url,
|
|
];
|
|
|
|
return view('front.music-productions.show', compact('production', 'prev', 'next', 'settings', 'renderedHeader', 'renderedFooter', 'meta'));
|
|
}
|
|
}
|