Initial commit: Animexe Laravel platform
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Frontend;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\PremiumFeatures;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class PremiumController extends Controller
|
||||
{
|
||||
/** Kullanıcının premium kozmetik ayarlarını kaydet */
|
||||
public function saveCosmetics(Request $request)
|
||||
{
|
||||
$user = auth()->user();
|
||||
|
||||
if (!$user->isPremium()) {
|
||||
return back()->with('error', 'Bu özellik için premium üyelik gerekiyor.');
|
||||
}
|
||||
|
||||
$validated = $request->validate([
|
||||
'comment_bg' => 'nullable|string|in:' . implode(',', array_keys(PremiumFeatures::COMMENT_BACKGROUNDS)),
|
||||
'comment_glow' => 'nullable|string|in:' . implode(',', array_keys(PremiumFeatures::COMMENT_GLOWS)),
|
||||
'username_color' => 'nullable|string|in:' . implode(',', array_keys(PremiumFeatures::USERNAME_COLORS)),
|
||||
'username_effect' => 'nullable|string|in:' . implode(',', array_keys(PremiumFeatures::USERNAME_EFFECTS)),
|
||||
'profile_frame' => 'nullable|string|in:' . implode(',', array_keys(PremiumFeatures::PROFILE_FRAMES)),
|
||||
'profile_badge' => 'nullable|string|max:32',
|
||||
'profile_bg' => 'nullable|string|in:' . implode(',', array_keys(PremiumFeatures::PROFILE_BACKGROUNDS)),
|
||||
'gif_avatar' => 'nullable|url|max:500',
|
||||
'profile_music_url' => 'nullable|url|max:500',
|
||||
'comment_signature' => 'nullable|string|max:100',
|
||||
'entry_effect' => 'nullable|string|in:' . implode(',', array_keys(PremiumFeatures::ENTRY_EFFECTS)),
|
||||
'animated_banner' => 'nullable|boolean',
|
||||
]);
|
||||
|
||||
// Her alanı sadece ilgili perk varsa kaydet
|
||||
$updates = [];
|
||||
|
||||
if ($user->hasPerk('comment_bg')) {
|
||||
$updates['comment_bg'] = $validated['comment_bg'] ?? null;
|
||||
}
|
||||
if ($user->hasPerk('comment_glow')) {
|
||||
$updates['comment_glow'] = $validated['comment_glow'] ?? null;
|
||||
}
|
||||
if ($user->hasPerk('username_color')) {
|
||||
$updates['username_color'] = $validated['username_color'] ?? null;
|
||||
}
|
||||
if ($user->hasPerk('username_effect')) {
|
||||
$updates['username_effect'] = $validated['username_effect'] ?? null;
|
||||
}
|
||||
if ($user->hasPerk('profile_frame')) {
|
||||
$updates['profile_frame'] = $validated['profile_frame'] ?? null;
|
||||
}
|
||||
if ($user->hasPerk('profile_badge')) {
|
||||
$updates['profile_badge'] = $validated['profile_badge'] ?? null;
|
||||
}
|
||||
if ($user->hasPerk('profile_bg')) {
|
||||
$updates['profile_bg'] = $validated['profile_bg'] ?? null;
|
||||
}
|
||||
if ($user->hasPerk('gif_avatar')) {
|
||||
$updates['gif_avatar'] = $validated['gif_avatar'] ?? null;
|
||||
}
|
||||
if ($user->hasPerk('profile_music') && Schema::hasColumn('users', 'profile_music_url')) {
|
||||
$updates['profile_music_url'] = $validated['profile_music_url'] ?? null;
|
||||
}
|
||||
if ($user->hasPerk('comment_signature')) {
|
||||
$updates['comment_signature'] = $validated['comment_signature'] ?? null;
|
||||
}
|
||||
if ($user->hasPerk('entry_effect')) {
|
||||
$updates['entry_effect'] = $validated['entry_effect'] ?? null;
|
||||
}
|
||||
if ($user->hasPerk('animated_banner')) {
|
||||
$updates['animated_banner'] = $request->boolean('animated_banner');
|
||||
}
|
||||
|
||||
if (!empty($updates)) {
|
||||
$user->update($updates);
|
||||
}
|
||||
|
||||
return back()->with('success', 'Premium ayarların kaydedildi!');
|
||||
}
|
||||
|
||||
/** Public plans/pricing sayfası */
|
||||
public function plans()
|
||||
{
|
||||
$plans = \App\Models\MembershipPlan::where('is_active', true)
|
||||
->where('is_public', true)
|
||||
->where(fn($q) => $q->whereNull('visible_until')->orWhere('visible_until', '>', now()))
|
||||
->orderBy('sort_order')
|
||||
->get();
|
||||
|
||||
$allFeatures = PremiumFeatures::grouped();
|
||||
|
||||
return view('frontend.premium.plans', compact('plans', 'allFeatures'));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user