Files
citrus/routes/web.php
T

202 lines
11 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
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::post('/stajyer/blog-kaydet', [\App\Http\Controllers\CareerController::class, 'saveInternBlog'])->name('intern.blog.save');
Route::delete('/stajyer/blog/{id}/sil', [\App\Http\Controllers\CareerController::class, 'deleteInternBlog'])->name('intern.blog.delete');
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::get('/stajyer/admin/quick-approval-entries', [\App\Http\Controllers\CareerController::class, 'getQuickApprovalEntries'])->name('intern.admin.quick-approval-entries');
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');
// Project Tracking Client Portal & Web Admin Management
Route::get('/proje-takip/{slug}', [\App\Http\Controllers\ProjectController::class, 'show'])->name('projects.show');
Route::post('/proje-takip/{slug}/verify', [\App\Http\Controllers\ProjectController::class, 'verify'])->name('projects.verify');
Route::post('/proje-takip/{slug}/admin/module-status', [\App\Http\Controllers\ProjectController::class, 'updateModuleStatus'])->name('projects.admin.module-status');
Route::post('/proje-takip/{slug}/admin/task-status', [\App\Http\Controllers\ProjectController::class, 'updateTaskStatus'])->name('projects.admin.task-status');
Route::post('/proje-takip/{slug}/admin/add-task', [\App\Http\Controllers\ProjectController::class, 'addTask'])->name('projects.admin.add-task');
Route::post('/proje-takip/{slug}/admin/delete-task', [\App\Http\Controllers\ProjectController::class, 'deleteTask'])->name('projects.admin.delete-task');
Route::post('/proje-takip/{slug}/admin/add-update', [\App\Http\Controllers\ProjectController::class, 'addUpdate'])->name('projects.admin.add-update');
Route::post('/proje-takip/{slug}/admin/recalculate', [\App\Http\Controllers\ProjectController::class, 'recalculate'])->name('projects.admin.recalculate');
Route::post('/proje-takip/{slug}/admin/toggle-mode', [\App\Http\Controllers\ProjectController::class, 'toggleAdminMode'])->name('projects.admin.toggle-mode');
// 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');