middleware('auth'); } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { SEOTools::setTitle('Home'); $data = [ 'memes' => Meme::with(['user', 'tips'])->orderByDesc('created_at')->paginate(20), ]; return view('homepage', ['data' => $data]); } public function leaderboard() { SEOTools::setTitle('Leaderboard'); $users = User::with('tips')->has('memes')->get(); $users = $users->sortByDesc(function($user) { return $user->tips_total; }); $data = [ 'users' => $users, ]; return view('leaderboard', ['data' => $data]); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { SEOTools::setTitle('Submit'); return view('meme-create'); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $validatedData = $request->validate([ 'title' => ['required', 'string', 'max:255'], 'caption' => ['string', 'max:255', 'nullable'], 'image' => ['required', 'image'], ]); $user = \Auth::user(); Meme::create([ 'user_id' => $user->id, 'title' => $request->input('title'), 'caption' => $request->input('caption'), 'image' => $request->file('image'), ]); return redirect('dashboard')->with('submitted', 'Meme submitted succesfully! Will be approved soon.'); } /** * Display the specified resource. * * @param \App\Models\Meme $meme * @return \Illuminate\Http\Response */ public function show($id) { $meme = Meme::where('id', $id)->with(['user', 'tips'])->firstOrFail(); SEOTools::setTitle($meme->title); SEOTools::addImages($meme->image_url); $share = \Share::page(url()->current(), $meme->title, ['class' => 'fa-lg', 'target' => '_blank']) ->facebook() ->twitter() ->reddit() ->telegram() ->linkedin() ->whatsapp(); $data = [ 'meme' => $meme, 'qr' => (new QRCode)->render($meme->address), 'share' => preg_replace("//", "", $share), ]; return view('meme', ['data' => $data]); } /** * Show the form for editing the specified resource. * * @param \App\Models\Meme $meme * @return \Illuminate\Http\Response */ public function edit(Meme $meme) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param \App\Models\Meme $meme * @return \Illuminate\Http\Response */ public function update(Request $request, Meme $meme) { // } public function approve($id) { if (\Auth::user()->is_admin === 1) { try { $walletRPC = new walletRPC(config('app.xmr_daemon_ip'), config('app.xmr_network_port')); // Change to match your wallet (monero-wallet-rpc) IP address and port; 18083 is the customary port for mainnet, 28083 for testnet, 38083 for stagenet $open_wallet = $walletRPC->open_wallet(config('app.xmr_wallet_name'), ''); $account = $walletRPC->create_account(); $meme = Meme::withoutGlobalScope('approved')->find($id); $meme->is_approved = 1; $meme->account_index = $account['account_index']; $meme->address = $account['address']; $meme->save(); return redirect()->away(url()->previous()); } catch (\Exception $e) { } } } /** * Remove the specified resource from storage. * * @param \App\Models\Meme $meme * @return \Illuminate\Http\Response */ public function destroy($id) { if (\Auth::user()->is_admin === 1) { Meme::withoutGlobalScope('approved')->where('id', $id)->delete(); return redirect()->away(url()->previous()); } } }