xmrmemes/app/Http/Controllers/MemeController.php

175 lines
4.8 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Meme;
use App\Models\User;
use App\Models\Address;
use Illuminate\Http\Request;
use chillerlan\QRCode\{QRCode, QROptions};
use MoneroIntegrations\MoneroPhp\walletRPC;
use Artesaos\SEOTools\Facades\SEOTools;
class MemeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
// $this->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("/<a(.*?)>/", "<a$1 target=\"_blank\">", $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());
}
}
}