188 lines
9.5 KiB
PHP
188 lines
9.5 KiB
PHP
<?php
|
||
|
||
use Illuminate\Support\Facades\Route;
|
||
use App\Http\Controllers\PageController;
|
||
use App\Http\Controllers\BlogController;
|
||
use App\Http\Controllers\TemplatePreviewController;
|
||
use App\Http\Controllers\Api\SiteTranslationController;
|
||
use App\Models\Page;
|
||
|
||
// Subdomain Routes
|
||
Route::domain('akademi.truncgil.com.tr')->group(function () {
|
||
Route::get('/', [PageController::class, 'showAkademi']);
|
||
});
|
||
|
||
// Debug Route - Veritabanı kontrolü
|
||
Route::redirect('/index', '/', 301);
|
||
Route::redirect('/index.php', '/', 301);
|
||
Route::redirect('/index.html', '/', 301);
|
||
|
||
// Debug Route - Veritabanı kontrolü (Sadece super_admin)
|
||
Route::get('/debug-homepage', function () {
|
||
$page = Page::with(['headerTemplate', 'footerTemplate'])
|
||
->where('is_homepage', true)
|
||
->where('status', 'published')
|
||
->latest('updated_at')
|
||
->first();
|
||
|
||
if (!$page) {
|
||
return response()->json([
|
||
'error' => 'Homepage bulunamadı!',
|
||
'all_pages' => Page::select('id', 'title', 'slug', 'is_homepage', 'status')->get(),
|
||
]);
|
||
}
|
||
|
||
return response()->json([
|
||
'page' => [
|
||
'id' => $page->id,
|
||
'title' => $page->title,
|
||
'slug' => $page->slug,
|
||
'is_homepage' => $page->is_homepage,
|
||
'status' => $page->status,
|
||
],
|
||
'header_template' => [
|
||
'id' => $page->header_template_id,
|
||
'exists' => $page->headerTemplate ? true : false,
|
||
'title' => $page->headerTemplate?->title,
|
||
'data_filled' => !empty($page->header_data),
|
||
'data' => $page->header_data,
|
||
],
|
||
'footer_template' => [
|
||
'id' => $page->footer_template_id,
|
||
'exists' => $page->footerTemplate ? true : false,
|
||
'title' => $page->footerTemplate?->title,
|
||
'data_filled' => !empty($page->footer_data),
|
||
'data' => $page->footer_data,
|
||
],
|
||
'sections' => [
|
||
'count' => is_array($page->sections) ? count($page->sections) : 0,
|
||
'data' => $page->sections,
|
||
],
|
||
'sections_data' => [
|
||
'count' => is_array($page->sections_data) ? count($page->sections_data) : 0,
|
||
'data' => $page->sections_data,
|
||
],
|
||
]);
|
||
})->middleware(['auth', \App\Http\Middleware\SuperAdminMiddleware::class]);
|
||
|
||
// Language Switch
|
||
Route::get('/lang/{locale}', function ($locale) {
|
||
if (function_exists('switch_language')) {
|
||
switch_language($locale);
|
||
} else {
|
||
$language = \App\Models\Language::findByCode($locale);
|
||
if ($language && $language->is_active) {
|
||
app()->setLocale($locale);
|
||
session(['locale' => $locale]);
|
||
}
|
||
}
|
||
return redirect()->back();
|
||
})->name('language.switch');
|
||
|
||
// Homepage -> admin panelinde "is_homepage" olarak işaretli sayfa dinamik olarak gösterilir
|
||
Route::get('/', [PageController::class, 'index'])->name('homepage');
|
||
|
||
// Blog
|
||
Route::get('/blog', [BlogController::class, 'index'])->name('blog.index');
|
||
Route::get('/blog/{slug}', [BlogController::class, 'show'])->name('blog.show');
|
||
Route::post('/blog/{slug}/comment', [BlogController::class, 'storeComment'])->name('blog.comment.store');
|
||
|
||
// Template Preview (admin panel için)
|
||
Route::any('/admin/template-preview', [TemplatePreviewController::class, 'preview'])
|
||
->middleware(['auth'])
|
||
->name('template.preview');
|
||
|
||
// Site Translations API (DevExtreme DataGrid için)
|
||
Route::prefix('admin/api')->middleware(['auth', \App\Http\Middleware\SuperAdminMiddleware::class])->group(function () {
|
||
Route::get('/site-translations', [SiteTranslationController::class, 'index'])->name('api.site-translations.index');
|
||
Route::post('/site-translations', [SiteTranslationController::class, 'store'])->name('api.site-translations.store');
|
||
Route::put('/site-translations/{id}', [SiteTranslationController::class, 'update'])->name('api.site-translations.update');
|
||
Route::delete('/site-translations/{id}', [SiteTranslationController::class, 'destroy'])->name('api.site-translations.destroy');
|
||
Route::post('/site-translations/batch-update', [SiteTranslationController::class, 'batchUpdate'])->name('api.site-translations.batch-update');
|
||
Route::post('/site-translations/batch-destroy', [SiteTranslationController::class, 'batchDestroy'])->name('api.site-translations.batch-destroy');
|
||
});
|
||
|
||
// Products & Services
|
||
Route::redirect('/urun-hizmet/Yazılım Danışmanlık', '/urun-hizmet/yazilim-danismanlik', 301);
|
||
Route::get('/urun-hizmet/{slug}', [\App\Http\Controllers\ProductController::class, 'show'])->name('products.show');
|
||
|
||
// Music Productions
|
||
Route::get('/muzik-produksiyonlari', [\App\Http\Controllers\MusicProductionController::class, 'index'])->name('music-productions.index');
|
||
Route::get('/muzik-produksiyonlari/{slug}', [\App\Http\Controllers\MusicProductionController::class, 'show'])->name('music-productions.show');
|
||
|
||
// Career
|
||
Route::get('/kariyer', [\App\Http\Controllers\CareerController::class, 'index'])->name('career.index');
|
||
Route::get('/staj-basvurusu', [\App\Http\Controllers\CareerController::class, 'internship'])->name('career.internship');
|
||
Route::post('/kariyer', [\App\Http\Controllers\CareerController::class, 'store'])->name('career.store');
|
||
|
||
// Intern Portal
|
||
Route::get('/stajyer/giris', [\App\Http\Controllers\CareerController::class, 'internLoginForm'])->name('intern.login');
|
||
Route::post('/stajyer/giris', [\App\Http\Controllers\CareerController::class, 'internLogin'])->name('intern.login.submit');
|
||
Route::get('/stajyer/panel', [\App\Http\Controllers\CareerController::class, 'internDashboard'])->name('intern.dashboard');
|
||
Route::post('/stajyer/form-yukle', [\App\Http\Controllers\CareerController::class, 'uploadInternshipForm'])->name('intern.upload-form');
|
||
Route::post('/stajyer/github-kaydet', [\App\Http\Controllers\CareerController::class, 'saveGithubRepo'])->name('intern.save-github');
|
||
Route::get('/stajyer/gunluk-indir', [\App\Http\Controllers\CareerController::class, 'downloadMarkdown'])->name('intern.download-journal');
|
||
Route::post('/stajyer/defteri-kaydet', [\App\Http\Controllers\CareerController::class, 'saveJournalEntry'])->name('intern.save-journal');
|
||
Route::get('/stajyer/defteri-yazdir', [\App\Http\Controllers\CareerController::class, 'printJournal'])->name('intern.print-journal');
|
||
Route::get('/staj-dogrulama/{code}', [\App\Http\Controllers\CareerController::class, 'verifyCertificate'])->name('internship.verify');
|
||
Route::post('/stajyer/cikis', [\App\Http\Controllers\CareerController::class, 'internLogout'])->name('intern.logout');
|
||
|
||
// Intern Admin Portal
|
||
Route::get('/stajyer/admin/giris', [\App\Http\Controllers\CareerController::class, 'internAdminLoginForm'])->name('intern.admin.login');
|
||
Route::post('/stajyer/admin/giris', [\App\Http\Controllers\CareerController::class, 'internAdminLogin'])->name('intern.admin.login.submit');
|
||
Route::get('/stajyer/admin/panel', [\App\Http\Controllers\CareerController::class, 'internAdminDashboard'])->name('intern.admin.dashboard');
|
||
Route::get('/stajyer/admin/journal-entry', [\App\Http\Controllers\CareerController::class, 'getJournalEntry'])->name('intern.admin.get-journal-entry');
|
||
Route::post('/stajyer/admin/toggle-approval', [\App\Http\Controllers\CareerController::class, 'toggleJournalApproval'])->name('intern.admin.toggle-journal-approval');
|
||
Route::get('/stajyer/admin/journal-details', [\App\Http\Controllers\CareerController::class, 'getInternJournalDetails'])->name('intern.admin.get-journal-details');
|
||
Route::post('/stajyer/admin/toggle-notebook-signature', [\App\Http\Controllers\CareerController::class, 'toggleNotebookSignature'])->name('intern.admin.toggle-notebook-signature');
|
||
Route::post('/stajyer/admin/cikis', [\App\Http\Controllers\CareerController::class, 'internAdminLogout'])->name('intern.admin.logout');
|
||
|
||
|
||
// Payment Process
|
||
Route::post('/payment/process', [\App\Http\Controllers\PaymentController::class, 'process'])->name('payment.process');
|
||
Route::any('/payment/success', [\App\Http\Controllers\PaymentController::class, 'success'])->name('payment.success');
|
||
Route::any('/payment/fail', [\App\Http\Controllers\PaymentController::class, 'fail'])->name('payment.fail');
|
||
|
||
// Logo Preview
|
||
Route::get('/logo-preview', function (Illuminate\Http\Request $request) {
|
||
$path = $request->query('path');
|
||
$bg = $request->query('bg', 'ffffff');
|
||
if (!$path) abort(404);
|
||
|
||
return "
|
||
<html>
|
||
<head>
|
||
<title>Logo Preview</title>
|
||
<style>
|
||
body { margin: 0; padding: 0; display: flex; align-items: center; justify-content: center; min-height: 100vh; background-color: #$bg; }
|
||
img { max-width: 90%; max-height: 90vh; }
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<img src='" . asset('storage/' . $path) . "' />
|
||
</body>
|
||
</html>";
|
||
})->name('logo.preview');
|
||
|
||
// Sitemap
|
||
Route::get('/sitemap.xml', [\App\Http\Controllers\SitemapController::class, 'index'])->name('sitemap');
|
||
|
||
// Proposals Public Interface
|
||
Route::get('/teklif/{slug}', [\App\Http\Controllers\ProposalController::class, 'show'])->name('proposals.show');
|
||
Route::post('/teklif/{slug}/action', [\App\Http\Controllers\ProposalController::class, 'action'])->name('proposals.action');
|
||
|
||
// Privacy Policy Alternatives
|
||
Route::get('/privacy-policy', function () {
|
||
return app(PageController::class)->show('privacy');
|
||
});
|
||
Route::get('/gizlilik-politikasi', function () {
|
||
return app(PageController::class)->show('privacy');
|
||
});
|
||
|
||
// Nested Pages (Parent/Child)
|
||
Route::get('/{parentSlug}/{slug}', [PageController::class, 'showNested'])->name('page.show_nested');
|
||
|
||
// Pages (en sonda olmalı - catch-all)
|
||
Route::get('/{slug}', [PageController::class, 'show'])->name('page.show');
|
||
|