This repository has been archived on 2024-06-26. You can view files and clone it, but cannot push or open issues or pull requests.
sakura/main/donate.php

193 lines
6.7 KiB
PHP

<?php
/*
* Sakura Support/Donate page
*/
// Declare Namespace
namespace Sakura;
// Include components
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) .'_sakura/sakura.php';
// Switch between modes (we only allow this to be used by logged in user)
if(isset($_REQUEST['mode']) && Users::checkLogin() && Permissions::check('SITE', 'OBTAIN_PREMIUM', Session::$userId, 1)) {
// Initialise Payments class
if(!Payments::init()) {
$renderData['page'] = [
'title' => 'Action failed',
'redirect' => '/support',
'message' => 'Failed to initialise the Payment handling components, contact a staff member as soon as possible.'
];
} else {
switch($_REQUEST['mode']) {
// Create the purchase
case 'purchase':
// Compare time and session so we know the link isn't forged
if(!isset($_REQUEST['time']) || $_REQUEST['time'] < time() - 1000) {
$renderData['page'] = [
'title' => 'Action failed',
'redirect' => '/support',
'message' => 'Timestamps differ too much, refresh the page and try again.'
];
break;
}
// Match session ids for the same reason
if(!isset($_REQUEST['session']) || $_REQUEST['session'] != session_id()) {
$renderData['page'] = [
'title' => 'Action failed',
'redirect' => '/support',
'message' => 'Invalid session, please try again.'
];
break;
}
// Half if shit isn't gucci
if(!isset($_POST['months']) || !is_numeric($_POST['months']) || (int)$_POST['months'] < 1 || (int)$_POST['months'] > 24) {
header('Location: /support?fail=true');
} else {
// Calculate the total
$total = (float)Configuration::getConfig('premium_price_per_month') * (int)$_POST['months'];
$total = money_format('%!i', $total);
// Generate item name
$itemName = 'Flashii Tenshi - '. (string)$_POST['months'] .' month'. ((int)$_POST['months'] == 1 ? '' : 's');
// Attempt to create a transaction
if($transaction = Payments::createTransaction($total, $itemName, 'Flashii Tenshi Purchase', 'http://'. Configuration::getLocalConfig('urls', 'main') .'/support')) {
// Store the amount of months in the global session array
$_SESSION['premiumMonths'] = (int)$_POST['months'];
header('Location: '. $transaction);
exit;
} else {
// Add page specific things
$renderData['page'] = [
'title' => 'Information',
'redirect' => '/support',
'message' => 'An error has occurred while trying to create the transaction, try again later.'
];
}
}
break;
// Finalising the purchase
case 'finish':
// Check if the success GET request is set and is true
if(isset($_GET['success']) && isset($_GET['paymentId']) && isset($_GET['PayerID']) && isset($_SESSION['premiumMonths'])) {
// Attempt to complete the transaction
if(Payments::completeTransaction($_GET['paymentId'], $_GET['PayerID'])) {
// execution of tenshification here
// Redirect to the complete
header('Location: ?mode=complete');
exit;
}
}
header('Location: /support?fail=true');
break;
case 'complete':
print Templates::render('errors/premiumComplete.tpl', array_merge(['page' => ['title' => 'Premium purchase complete!']], $renderData));
break;
default:
header('Location: /support');
break;
}
}
exit;
}
// Set default variables
$renderData['page'] = [
'title' => 'Support Flashii',
'fail' => isset($_GET['fail']),
'whytenshi' => [
[
'Maintained by one person!',
'The site, server and it\'s code are all maintained and paid for by one guy in the Netherlands.'
],
[
'No ads!',
'Unlike a good chunk of the internet we don\'t make money by shoving ads in your face.'
],
[
'Helping us survive!',
'It helps us with getting new hardware to make your Flashii Experience&trade; better and paying the bills to stay alive.'
],
[
'Extra features!',
'You get some extra things to play with if you donate more than $5!'
]
],
'tenshifeatures' => [
[
'A special colour',
'Your username will be <span style="font-weight:bold;color:#EE9400;">orange</span> so you can be recognised in chat and elsewhere on the site!'
],
[
'Early access',
'You get early access to new features before regular users such as access the developement domain.'
],
[
'Username',
'You get the ability to change your username once a month.'
],
[
'User title',
'You get the ability to change your user title whenever you wish to.'
],
[
'Chat logs',
'<del>You can read the <a class="default" href="http://chat.flashii.net/logs" target="_blank">chat logs</a> where all the messages since the original launch are saved.</del><br />Temporarily unavailable due to permissioning issues, <a href="/u/303" class="default">go yell at malloc</a>.'
],
[
'Private channel',
'You get your own Private Channel in the Chat.'
],
[
'Profile background',
'You get the ability to set a custom background on your profile.'
],
[
'A good feeling',
'You get the good feeling of helping me keep Flashii alive and growing (and of course the fact that you get all your special stuff that you can brag about to regular users).'
]
]
];
// Print page contents
print Templates::render('main/donate.tpl', $renderData);