xmrmemes/app/Http/Controllers/MemeController.php
dev 821fb9b1ed Finish rough draft of website
Update the payment code so everything is working now

Improve DB structure

Improve design

Add API

Validate XMR Address upon registration

And Much More...

Still Need to work on:

- SEO
- Dropdown in menu (bug, not dropping down)
2021-08-06 13:06:07 -07:00

172 lines
4.5 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;
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()
{
$data = [
'seo' => [
'title' => null,
'desc' => null,
'img' => null,
],
'memes' => Meme::with(['user', 'tips'])->orderByDesc('created_at')->paginate(20),
];
return view('homepage', ['data' => $data]);
}
public function 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()
{
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'),
]);
}
/**
* 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();
$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());
}
}
}