Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Http\Controllers;
- use App\Models\ShopItem;
- use App\Models\ShopCategory;
- use App\Models\ShopVoucher;
- use App\Models\ShopGift;
- use App\Models\ShopOrder;
- use App\Models\ShopCredit;
- use Illuminate\Support\Facades\Auth;
- use App\Providers\JSONAPI;
- use ReCaptcha\ReCaptcha;
- use Illuminate\Http\Request;
- class ShopController extends Controller
- {
- public function __construct()
- {
- if (!config('settings.shop.enabled')) {
- abort('503', 'La boutique du serveur est actuellement fermée, réessayez ultérieurement.');
- } elseif (config('site.shop.dedipass.public_key') == null or config('site.shop.dedipass.private_key') == null) {
- abort('500');
- }
- }
- public function index()
- {
- $items = ShopItem::all();
- $categories = ShopCategory::visible()->get();
- return view('shop.index')
- ->with('items', $items)
- ->with('categories', $categories);
- }
- public function history()
- {
- $orders = Auth::user()->orders;
- return view('shop.history')
- ->with('orders', $orders);
- }
- public function showCategory(Request $request)
- {
- $category = ShopCategory::where('slug', $request->category)->first();
- if (empty($category)) {
- abort('404');
- }
- $items = $category->items;
- return view('shop.category')
- ->with('category', $category)
- ->with('items', $items);
- }
- public function showItem(Request $request)
- {
- $user = Auth::user();
- $category = ShopCategory::where('slug', $request->category)->first();
- if (empty($category)) {
- abort('404');
- }
- $item = ShopItem::where('slug', $request->item)->where('category_id', $category->id)->first();
- if (empty($item) or (!$item->category->visible and !$user->hasRole('administrateur'))) {
- abort('404');
- }
- return view('shop.item')
- ->with('item', $item)
- ->with('category', $category);
- }
- public function buy(Request $request)
- {
- $user = Auth::user();
- $category = ShopCategory::where('slug', $request->category)->first();
- if (empty($category)) {
- abort('404');
- }
- $item = ShopItem::where('slug', $request->item)->where('category_id', $category->id)->first();
- if (empty($item) or (!$item->category->visible and !$user->hasRole('administrateur'))) {
- abort('404');
- }
- if ($item->slug == 'pass-beta' and $user->hasRole('beta-testeur')) {
- return response()->json([
- 'status' => 'info',
- 'title' => 'Vous êtes déjà beta testeur',
- 'message' => 'Merci pour votre soutien :)'
- ]);
- }
- if (isset($request->voucher)) {
- $voucher = ShopVoucher::where('code', $request->voucher)->first();
- if (empty($voucher)) {
- return response()->json([
- 'status' => 'error',
- 'title' => 'Code promo incorrect',
- 'message' => 'Le code promo que vous avez saisie semble incorrect, contactez le support pour plus d\'assistance.'
- ]);
- }
- $item->price = $item->price - $item->price * $voucher->amount / 100;
- $voucher->increment('use_count');
- $voucher->save();
- }
- if ($item->price > $user->balance) {
- return response()->json([
- 'status' => 'error',
- 'title' => 'Solde insuffisant',
- 'message' => 'Votre solde boutique est insuffisant pour effectuer cet achat.'
- ]);
- }
- $api = new JSONAPI();
- if (!empty($item->commands)) {
- if (!$api->call('players.name', [$user->name])[0]['is_success']) {
- return response()->json([
- 'status' => 'error',
- 'title' => 'Non connecté',
- 'message' => 'Vous devez être connecté sur le serveur faction pour effectuer un achat boutique.'
- ]);
- }
- $commands = explode(PHP_EOL, $item->commands);
- foreach ($commands as $command) {
- str_replace('/', '', $command);
- str_replace('%username%', $user->name, $command);
- $api->call('server.run_command', $command);
- }
- }
- $api->call('server.run_command', ['bc &9'.$user->name.' &7 viens d\'acheter : &9'.$item->name.'&7 ! ']);
- $user->balance = $user->balance - $item->price;
- $user->save();
- $order = new ShopOrder;
- $order->user_id = $user->id;
- $order->item_id = $item->id;
- if (isset($voucher)) {
- $order->voucher_id = $voucher->id;
- }
- $order->amount = $item->price;
- $order->ip = request()->ip();
- $order->save();
- if ($item->slug == 'pass-beta') {
- $user->assignRole('beta-testeur');
- }
- return response()->json([
- 'status' => 'success',
- 'title' => 'Achat effectué avec succès !',
- 'message' => 'Votre achat a bien été effectué, merci du soutien !',
- 'after' => '$(\'#confirm-body\')[0].style.display = \'none\'; $(\'#success-body\')[0].style.display = \'block\';'
- ]);
- }
- public function credit()
- {
- return view('shop.credit.index');
- }
- public function dedipass(Request $request)
- {
- $request->validate([
- 'code' => 'required|string',
- ]);
- $dedipass = file_get_contents('http://api.dedipass.com/v1/pay/?public_key='.config('site.shop.dedipass.public_key').'&private_key='.config('site.shop.dedipass.private_key').'&code='.$request->code);
- $dedipass = json_decode($dedipass);
- if ($dedipass->status != 'success') {
- return view('shop.credit.error')
- ->with('code', $request->code);
- }
- $user = Auth::user();
- $amount = $dedipass->virtual_currency;
- $user->balance = $user->balance + $amount;
- $credit = new ShopCredit();
- $credit->user_id = $user->id;
- $credit->amount = $amount;
- $credit->ip = request()->ip();
- if (config('settings.shop.bonus') != null) {
- $user->balance = $user->balance + (config('settings.shop.bonus') / 100) * $amount;
- $credit->bonus = (config('settings.shop.bonus') / 100) * $amount;
- $credit->bonus = (config('settings.shop.bonus') / 100) * $amount;
- }
- $user->save();
- $credit->save();
- return view('shop.credit.success')
- ->with('credit', $credit);
- }
- public function redeem(Request $request)
- {
- $request->validate([
- 'code' => 'string|required',
- 'g-recaptcha-response' => 'required'
- ]);
- $recaptcha = new ReCaptcha(config('site.recaptcha.private_key'));
- $resp = $recaptcha->verify($request->input('g-recaptcha-response'), request()->ip());
- if (!$resp->isSuccess()) {
- return response()->json([
- 'status' => 'error',
- 'title' => 'Captcha incorrect',
- 'message' => 'Vous devez compléter le captcha pour continuer.'
- ]);
- }
- $gift = ShopGift::where('code', $request->gift_code)->first();
- if (empty($gift)) {
- return response()->json([
- 'status' => 'error',
- 'message' => 'Ce code cadeau est incorrect ou expiré.'
- ]);
- }
- $lastUseOfCode = Activity::where('subject_id', Auth::user()->id)
- ->where('log_name', 'shop.gift')
- ->where('description', 'Activation du code "'.$gift->code.'" soit '.$gift->amount.' crédits ajoutés au compte')
- ->first();
- if (!empty($lastUseOfCode)) {
- return response()->json([
- 'status' => 'error',
- 'message' => 'Vous avez déjà utilisé ce code promotionel.'
- ]);
- }
- $user = Auth::user();
- $user->balance = $user->balance + $gift->amount;
- $user->save();
- $gift->increment('use_count');
- $gift->save();
- activity('shop.gift')
- ->performedOn(Auth::user())
- ->causedBy(Auth::user())
- ->withProperty('ip', request()->ip())
- ->log('Activation du code cadeau "'.$gift->code.'", '.$gift->amount.' crédits ajoutés au compte');
- return response()->json([
- 'status' => 'success',
- 'message' => 'Votre code a bien été activé et vous avez reçu '.$gift->amount.' crédits.'
- ]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement