Advertisement
Guest User

Untitled

a guest
Oct 15th, 2018
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.87 KB | None | 0 0
  1. <?php
  2.  
  3. namespace App\Http\Controllers;
  4.  
  5. use App\Models\ShopItem;
  6. use App\Models\ShopCategory;
  7. use App\Models\ShopVoucher;
  8. use App\Models\ShopGift;
  9. use App\Models\ShopOrder;
  10. use App\Models\ShopCredit;
  11.  
  12. use Illuminate\Support\Facades\Auth;
  13. use App\Providers\JSONAPI;
  14.  
  15. use ReCaptcha\ReCaptcha;
  16. use Illuminate\Http\Request;
  17.  
  18. class ShopController extends Controller
  19. {
  20. public function __construct()
  21. {
  22. if (!config('settings.shop.enabled')) {
  23. abort('503', 'La boutique du serveur est actuellement fermée, réessayez ultérieurement.');
  24. } elseif (config('site.shop.dedipass.public_key') == null or config('site.shop.dedipass.private_key') == null) {
  25. abort('500');
  26. }
  27. }
  28.  
  29. public function index()
  30. {
  31. $items = ShopItem::all();
  32. $categories = ShopCategory::visible()->get();
  33.  
  34. return view('shop.index')
  35. ->with('items', $items)
  36. ->with('categories', $categories);
  37. }
  38.  
  39. public function history()
  40. {
  41. $orders = Auth::user()->orders;
  42.  
  43. return view('shop.history')
  44. ->with('orders', $orders);
  45. }
  46.  
  47. public function showCategory(Request $request)
  48. {
  49. $category = ShopCategory::where('slug', $request->category)->first();
  50. if (empty($category)) {
  51. abort('404');
  52. }
  53.  
  54. $items = $category->items;
  55.  
  56. return view('shop.category')
  57. ->with('category', $category)
  58. ->with('items', $items);
  59. }
  60.  
  61. public function showItem(Request $request)
  62. {
  63. $user = Auth::user();
  64. $category = ShopCategory::where('slug', $request->category)->first();
  65. if (empty($category)) {
  66. abort('404');
  67. }
  68.  
  69. $item = ShopItem::where('slug', $request->item)->where('category_id', $category->id)->first();
  70. if (empty($item) or (!$item->category->visible and !$user->hasRole('administrateur'))) {
  71. abort('404');
  72. }
  73.  
  74. return view('shop.item')
  75. ->with('item', $item)
  76. ->with('category', $category);
  77. }
  78.  
  79. public function buy(Request $request)
  80. {
  81. $user = Auth::user();
  82. $category = ShopCategory::where('slug', $request->category)->first();
  83. if (empty($category)) {
  84. abort('404');
  85. }
  86.  
  87. $item = ShopItem::where('slug', $request->item)->where('category_id', $category->id)->first();
  88. if (empty($item) or (!$item->category->visible and !$user->hasRole('administrateur'))) {
  89. abort('404');
  90. }
  91.  
  92. if ($item->slug == 'pass-beta' and $user->hasRole('beta-testeur')) {
  93. return response()->json([
  94. 'status' => 'info',
  95. 'title' => 'Vous êtes déjà beta testeur',
  96. 'message' => 'Merci pour votre soutien :)'
  97. ]);
  98. }
  99.  
  100. if (isset($request->voucher)) {
  101. $voucher = ShopVoucher::where('code', $request->voucher)->first();
  102.  
  103. if (empty($voucher)) {
  104. return response()->json([
  105. 'status' => 'error',
  106. 'title' => 'Code promo incorrect',
  107. 'message' => 'Le code promo que vous avez saisie semble incorrect, contactez le support pour plus d\'assistance.'
  108. ]);
  109. }
  110.  
  111. $item->price = $item->price - $item->price * $voucher->amount / 100;
  112.  
  113. $voucher->increment('use_count');
  114. $voucher->save();
  115. }
  116.  
  117. if ($item->price > $user->balance) {
  118. return response()->json([
  119. 'status' => 'error',
  120. 'title' => 'Solde insuffisant',
  121. 'message' => 'Votre solde boutique est insuffisant pour effectuer cet achat.'
  122. ]);
  123. }
  124.  
  125. $api = new JSONAPI();
  126.  
  127. if (!empty($item->commands)) {
  128. if (!$api->call('players.name', [$user->name])[0]['is_success']) {
  129. return response()->json([
  130. 'status' => 'error',
  131. 'title' => 'Non connecté',
  132. 'message' => 'Vous devez être connecté sur le serveur faction pour effectuer un achat boutique.'
  133. ]);
  134. }
  135.  
  136. $commands = explode(PHP_EOL, $item->commands);
  137.  
  138. foreach ($commands as $command) {
  139. str_replace('/', '', $command);
  140. str_replace('%username%', $user->name, $command);
  141. $api->call('server.run_command', $command);
  142. }
  143. }
  144.  
  145. $api->call('server.run_command', ['bc &9'.$user->name.' &7 viens d\'acheter : &9'.$item->name.'&7 ! ']);
  146.  
  147. $user->balance = $user->balance - $item->price;
  148. $user->save();
  149.  
  150. $order = new ShopOrder;
  151. $order->user_id = $user->id;
  152. $order->item_id = $item->id;
  153. if (isset($voucher)) {
  154. $order->voucher_id = $voucher->id;
  155. }
  156. $order->amount = $item->price;
  157. $order->ip = request()->ip();
  158. $order->save();
  159.  
  160. if ($item->slug == 'pass-beta') {
  161. $user->assignRole('beta-testeur');
  162. }
  163.  
  164. return response()->json([
  165. 'status' => 'success',
  166. 'title' => 'Achat effectué avec succès !',
  167. 'message' => 'Votre achat a bien été effectué, merci du soutien !',
  168. 'after' => '$(\'#confirm-body\')[0].style.display = \'none\'; $(\'#success-body\')[0].style.display = \'block\';'
  169. ]);
  170. }
  171.  
  172. public function credit()
  173. {
  174. return view('shop.credit.index');
  175. }
  176.  
  177. public function dedipass(Request $request)
  178. {
  179. $request->validate([
  180. 'code' => 'required|string',
  181. ]);
  182.  
  183. $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);
  184. $dedipass = json_decode($dedipass);
  185.  
  186. if ($dedipass->status != 'success') {
  187. return view('shop.credit.error')
  188. ->with('code', $request->code);
  189. }
  190.  
  191. $user = Auth::user();
  192. $amount = $dedipass->virtual_currency;
  193. $user->balance = $user->balance + $amount;
  194.  
  195. $credit = new ShopCredit();
  196. $credit->user_id = $user->id;
  197. $credit->amount = $amount;
  198. $credit->ip = request()->ip();
  199.  
  200. if (config('settings.shop.bonus') != null) {
  201. $user->balance = $user->balance + (config('settings.shop.bonus') / 100) * $amount;
  202. $credit->bonus = (config('settings.shop.bonus') / 100) * $amount;
  203. $credit->bonus = (config('settings.shop.bonus') / 100) * $amount;
  204. }
  205.  
  206. $user->save();
  207. $credit->save();
  208.  
  209. return view('shop.credit.success')
  210. ->with('credit', $credit);
  211. }
  212.  
  213. public function redeem(Request $request)
  214. {
  215. $request->validate([
  216. 'code' => 'string|required',
  217. 'g-recaptcha-response' => 'required'
  218. ]);
  219.  
  220. $recaptcha = new ReCaptcha(config('site.recaptcha.private_key'));
  221. $resp = $recaptcha->verify($request->input('g-recaptcha-response'), request()->ip());
  222.  
  223. if (!$resp->isSuccess()) {
  224. return response()->json([
  225. 'status' => 'error',
  226. 'title' => 'Captcha incorrect',
  227. 'message' => 'Vous devez compléter le captcha pour continuer.'
  228. ]);
  229. }
  230.  
  231. $gift = ShopGift::where('code', $request->gift_code)->first();
  232.  
  233. if (empty($gift)) {
  234. return response()->json([
  235. 'status' => 'error',
  236. 'message' => 'Ce code cadeau est incorrect ou expiré.'
  237. ]);
  238. }
  239.  
  240. $lastUseOfCode = Activity::where('subject_id', Auth::user()->id)
  241. ->where('log_name', 'shop.gift')
  242. ->where('description', 'Activation du code "'.$gift->code.'" soit '.$gift->amount.' crédits ajoutés au compte')
  243. ->first();
  244.  
  245. if (!empty($lastUseOfCode)) {
  246. return response()->json([
  247. 'status' => 'error',
  248. 'message' => 'Vous avez déjà utilisé ce code promotionel.'
  249. ]);
  250. }
  251.  
  252. $user = Auth::user();
  253.  
  254. $user->balance = $user->balance + $gift->amount;
  255. $user->save();
  256.  
  257. $gift->increment('use_count');
  258. $gift->save();
  259.  
  260. activity('shop.gift')
  261. ->performedOn(Auth::user())
  262. ->causedBy(Auth::user())
  263. ->withProperty('ip', request()->ip())
  264. ->log('Activation du code cadeau "'.$gift->code.'", '.$gift->amount.' crédits ajoutés au compte');
  265.  
  266. return response()->json([
  267. 'status' => 'success',
  268. 'message' => 'Votre code a bien été activé et vous avez reçu '.$gift->amount.' crédits.'
  269. ]);
  270. }
  271. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement