prepared and gallery fixes
This commit is contained in:
@@ -41,4 +41,40 @@ class ChatController extends Controller
|
||||
|
||||
return view('community.chat', compact('page_title', 'adHtml', 'chatHtml', 'smileys'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle legacy AJAX chat posts from old JS.
|
||||
*/
|
||||
public function post(Request $request)
|
||||
{
|
||||
$message = $request->input('message') ?? $request->input('chat_txt') ?? null;
|
||||
if (empty($message)) {
|
||||
return response()->json(['ok' => false, 'error' => 'empty_message'], 400);
|
||||
}
|
||||
|
||||
// Ensure legacy $_SESSION keys exist for Chat class (best-effort sync from Laravel session/auth)
|
||||
if (empty($_SESSION['web_login']['user_id'])) {
|
||||
$webLogin = session('web_login');
|
||||
if ($webLogin && isset($webLogin['user_id'])) {
|
||||
$_SESSION['web_login'] = $webLogin;
|
||||
} elseif (auth()->check()) {
|
||||
$user = auth()->user();
|
||||
$_SESSION['web_login'] = [
|
||||
'user_id' => $user->id,
|
||||
'username' => $user->username ?? $user->name ?? null,
|
||||
'status' => true,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
$chat = new \App\Chat();
|
||||
try {
|
||||
$chat->StoreMessage($message);
|
||||
$chat->UpdateChatFile('cron/chat_log.txt', 50);
|
||||
} catch (\Throwable $e) {
|
||||
return response()->json(['ok' => false, 'error' => 'store_failed', 'message' => $e->getMessage()], 500);
|
||||
}
|
||||
|
||||
return response()->json(['ok' => true]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,13 +18,76 @@ class ForumController extends Controller
|
||||
public function index()
|
||||
{
|
||||
$data = $this->legacy->forumIndex();
|
||||
|
||||
if (empty($data['topics']) || count($data['topics']) === 0) {
|
||||
try {
|
||||
$categories = \App\Models\ForumCategory::query()
|
||||
->withCount(['threads as num_subtopics'])
|
||||
->orderBy('position')
|
||||
->orderBy('id')
|
||||
->get();
|
||||
|
||||
$topics = $categories->map(function ($category) {
|
||||
$threadIds = \App\Models\ForumThread::where('category_id', $category->id)->pluck('id');
|
||||
|
||||
return (object) [
|
||||
'topic_id' => $category->id,
|
||||
'topic' => $category->name,
|
||||
'discuss' => null,
|
||||
'last_update' => \App\Models\ForumThread::where('category_id', $category->id)->max('last_post_at'),
|
||||
'num_posts' => $threadIds->isEmpty() ? 0 : \App\Models\ForumPost::whereIn('thread_id', $threadIds)->count(),
|
||||
'num_subtopics' => (int) ($category->num_subtopics ?? 0),
|
||||
];
|
||||
});
|
||||
|
||||
$data['topics'] = $topics;
|
||||
} catch (\Throwable $e) {
|
||||
// keep legacy response
|
||||
}
|
||||
}
|
||||
|
||||
return view('community.forum.index', $data);
|
||||
}
|
||||
|
||||
public function topic(Request $request, $topic_id)
|
||||
public function topic(Request $request, $topic_id, $slug = null)
|
||||
{
|
||||
// Redirect to canonical slug when possible
|
||||
try {
|
||||
$thread = \App\Models\ForumThread::find((int) $topic_id);
|
||||
if ($thread && !empty($thread->slug)) {
|
||||
$correct = $thread->slug;
|
||||
if ($slug !== $correct) {
|
||||
$qs = $request->getQueryString();
|
||||
$url = route('legacy.forum.topic', ['topic_id' => $topic_id, 'slug' => $correct]);
|
||||
if ($qs) $url .= '?' . $qs;
|
||||
return redirect($url, 301);
|
||||
}
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
|
||||
$data = $this->legacy->forumTopic((int) $topic_id, (int) $request->query('page', 1));
|
||||
|
||||
if (! $data) {
|
||||
// fallback to new forum tables if migration already ran
|
||||
try {
|
||||
$thread = \App\Models\ForumThread::with(['posts.user'])->find((int) $topic_id);
|
||||
if ($thread) {
|
||||
$posts = \App\Models\ForumPost::where('thread_id', $thread->id)->orderBy('created_at')->get();
|
||||
$data = [
|
||||
'type' => 'posts',
|
||||
'thread' => $thread,
|
||||
'posts' => $posts,
|
||||
'page_title' => $thread->title ?? 'Forum',
|
||||
];
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
// ignore and fall through to placeholder
|
||||
}
|
||||
}
|
||||
|
||||
if (! $data) {
|
||||
return view('shared.placeholder');
|
||||
}
|
||||
|
||||
@@ -26,6 +26,19 @@ class NewsController extends Controller
|
||||
return redirect('/');
|
||||
}
|
||||
|
||||
// redirect to canonical slug for SEO if available
|
||||
try {
|
||||
$correct = \Illuminate\Support\Str::slug($news->headline ?? 'news-' . $id);
|
||||
if ($slug !== $correct) {
|
||||
$qs = $request->getQueryString();
|
||||
$url = route('legacy.news.show', ['id' => $id, 'slug' => $correct]);
|
||||
if ($qs) $url .= '?' . $qs;
|
||||
return redirect($url, 301);
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
try {
|
||||
$comments = DB::table('news_comment as c')
|
||||
->leftJoin('users as u', 'c.user_id', '=', 'u.user_id')
|
||||
|
||||
Reference in New Issue
Block a user