| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- <?php
- trait DonateHomepageItem
- {
- public function donateSettingsArray($infoOnly = false)
- {
- $homepageInformation = [
- 'name' => 'Donate',
- 'enabled' => strpos('personal', $this->config['license']) !== false,
- 'image' => 'plugins/images/tabs/donate.png',
- 'category' => 'Requests',
- 'settingsArray' => __FUNCTION__
- ];
- if ($infoOnly) {
- return $homepageInformation;
- }
- $homepageSettings = [
- 'debug' => true,
- 'settings' => [
- 'About' => [
- $this->settingsOption('about', 'Donations', ['about' => 'This item allows you to use Stripe to accept donations on the homepage']),
- ],
- 'Setup' => [
- $this->settingsOption('html', null, ['label' => 'Instructions', 'override' => 12, 'html' => '
- <div class="panel panel-default">
- <div class="panel-heading">
- <a href="https://dashboard.stripe.com//" target="_blank"><span class="label label-info m-l-5">Visit Stripe Site</span></a>
- </div>
- <div class="panel-wrapper collapse in">
- <div class="panel-body">
- <ul class="list-icons">
- <li lang="en"><i class="fa fa-caret-right text-info"></i> Create or Login if you already have an account</li>
- <li lang="en"><i class="fa fa-caret-right text-info"></i> Goto products and click [Add Product]</li>
- <li lang="en"><i class="fa fa-caret-right text-info"></i> Name the product anything you like</li>
- <li lang="en"><i class="fa fa-caret-right text-info"></i> Make sure the product has standard pricing</li>
- <li lang="en"><i class="fa fa-caret-right text-info"></i> Also make sure that the product is set to <code>One Time</code></li>
- <li lang="en"><i class="fa fa-caret-right text-info"></i> Set the pricing to the minimum price i.e. 1 USD</li>
- <li lang="en"><i class="fa fa-caret-right text-info"></i> Click <code>Save Product</code></li>
- <li lang="en"><i class="fa fa-caret-right text-info"></i> Click The Product you just created</li>
- <li lang="en"><i class="fa fa-caret-right text-info"></i> Copy <code>ID</code> value</li>
- <li lang="en"><i class="fa fa-caret-right text-info"></i> Click <code>Developers</code></li>
- <li lang="en"><i class="fa fa-caret-right text-info"></i> Click <code>API Keys</code></li>
- <li lang="en"><i class="fa fa-caret-right text-info"></i> Copy both <code>Publishable key</code> and <code>Secret key</code></li>
- </ul>
- </div>
- </div>
- </div>
- ']
- ),
- ],
- 'Enable' => [
- $this->settingsOption('enable', 'homepageDonateEnabled'),
- $this->settingsOption('auth', 'homepageDonateAuth'),
- ],
- 'Connection' => [
- $this->settingsOption('input', 'homepageDonatePublicToken', ['label' => 'Public Token']),
- $this->settingsOption('token', 'homepageDonateSecretToken', ['label' => 'Secret Token']),
- $this->settingsOption('input', 'homepageDonateProductID', ['label' => 'Product ID']),
- ],
- 'Customize' => [
- $this->settingsOption('input', 'homepageDonateCustomizeHeading', ['label' => 'Heading']),
- $this->settingsOption('code-editor', 'homepageDonateCustomizeDescription', ['label' => 'Description', 'mode' => 'html']),
- $this->settingsOption('select', 'homepageDonateMinimum',
- ['label' => 'Minimum',
- 'options' => [
- ['name' => '1 USD', 'value' => '100'],
- ['name' => '2 USD', 'value' => '200'],
- ['name' => '3 USD', 'value' => '300'],
- ['name' => '4 USD', 'value' => '400'],
- ['name' => '5 USD', 'value' => '500'],
- ['name' => '10 USD', 'value' => '1000'],
- ['name' => '20 USD', 'value' => '2000'],
- ['name' => '25 USD', 'value' => '2500'],
- ['name' => '50 USD', 'value' => '5000'],
- ['name' => '75 USD', 'value' => '7500'],
- ['name' => '100 USD', 'value' => '10000'],
- ]
- ]),
- $this->settingsOption('switch', 'homepageDonateShowUserHistory', ['label' => 'Show User Donate History']),
- ]
- ]
- ];
- return array_merge($homepageInformation, $homepageSettings);
- }
- public function donateHomepagePermissions($key = null)
- {
- $permissions = [
- 'main' => [
- 'enabled' => [
- 'homepageDonateEnabled'
- ],
- 'auth' => [
- 'homepageDonateAuth'
- ],
- 'not_empty' => [
- 'homepageDonateMinimum',
- 'homepageDonatePublicToken',
- 'homepageDonateSecretToken',
- 'homepageDonateProductID',
- ]
- ],
- 'history' => [
- 'enabled' => [
- 'homepageDonateEnabled',
- 'homepageDonateShowUserHistory'
- ],
- 'auth' => [
- 'homepageDonateAuth'
- ],
- 'not_empty' => [
- 'homepageDonateMinimum',
- 'homepageDonatePublicToken',
- 'homepageDonateSecretToken',
- 'homepageDonateProductID',
- ]
- ]
- ];
- return $this->homepageCheckKeyPermissions($key, $permissions);
- }
- public function homepageDonateUserHistory()
- {
- $items = [];
- if ($this->homepageItemPermissions($this->donateHomepagePermissions('history'))) {
- try {
- $stripe = new \Stripe\StripeClient(
- trim($this->config['homepageDonateSecretToken'])
- );
- $history = $stripe->charges->all(['limit' => 100]);
- if (count($history) > 0) {
- if ($this->user['email']) {
- foreach ($history as $charge) {
- if (($this->qualifyRequest(0) || (strtolower($charge['billing_details']['email']) == strtolower($this->user['email']))) && $charge['amount_captured'] > 0) {
- $items[] = [
- 'date' => date('Y-m-d\TH:i:s\Z', $charge['created']),
- 'email' => $charge['billing_details']['email'],
- 'amount' => $charge['amount_captured'] / 100
- ];
- }
- }
- }
- }
- } catch (\Stripe\Exception\ApiErrorException $e) {
- die($this->showHTML('Error', $e->getMessage()));
- }
- }
- $this->setResponse(200, null, $items);
- return $items;
- }
- public function homepageDonateCreateSession($amount = null)
- {
- $amount = $amount ? $amount * 100 : $this->config['homepageDonateMinimum'];
- if ($this->config['homepageDonatePublicToken'] == '' || $this->config['homepageDonateSecretToken'] == '' || $this->config['homepageDonateProductID'] == '') {
- $this->setResponse(409, 'Donation Tokens are not setup');
- return false;
- }
- try {
- $stripe = new \Stripe\StripeClient(
- trim($this->config['homepageDonateSecretToken'])
- );
- $sessionInfo = [
- 'payment_method_types' => ['card'],
- 'line_items' => [[
- 'price_data' => [
- 'product' => $this->config['homepageDonateProductID'],
- 'unit_amount' => $amount,
- 'currency' => 'usd',
- ],
- 'quantity' => 1,
- ]],
- 'mode' => 'payment',
- 'success_url' => $this->getServerPath() . 'api/v2/homepage/donate/success',
- 'cancel_url' => $this->getServerPath() . 'api/v2/homepage/donate/cancel',
- ];
- if ($this->user['email'] && stripos($this->user['email'], 'placeholder') == false) {
- $sessionInfo = array_merge($sessionInfo, ['customer_email' => $this->user['email']]);
- }
- $session = $stripe->checkout->sessions->create($sessionInfo);
- header('HTTP/1.1 303 See Other');
- header('Location: ' . $session->url);
- } catch (\Stripe\Exception\ApiErrorException $e) {
- $this->setResponse(500, $e->getMessage());
- return false;
- }
- }
- public function homepageOrderDonate()
- {
- if ($this->homepageItemPermissions($this->donateHomepagePermissions('main'))) {
- $minimum = $this->config['homepageDonateMinimum'] / 100;
- $history = $this->config['homepageDonateShowUserHistory'] ? '<div class="pull-right"><a href="javascript:void(0)" class="toggle-donation-history" data-status="hidden"><i class="fa fa-clock-o"></i></a> </div>' : '';
- return '
- <script>
- $(document).on("keyup", "#custom-donation-amount", function () {
- $("#homepage-donation-form").attr("action", "api/v2/homepage/donate?amount=" + $(this).val());
- });
- </script>
- <div id="' . __FUNCTION__ . '">
- <div class="panel panel-primary" style="position: static; zoom: 1;">
- <div class="panel-heading"> ' . $this->config['homepageDonateCustomizeHeading'] . $history . '</div>
- <div class="panel-wrapper collapse in" aria-expanded="true">
- <div class="panel-body">
- <p>' . $this->config['homepageDonateCustomizeDescription'] . '</p>
- <script src="https://polyfill.io/v3/polyfill.min.js?version=3.52.1&features=fetch"></script>
- <script src="https://js.stripe.com/v3/"></script>
- <form id="homepage-donation-form" action="api/v2/homepage/donate?amount=' . $minimum . '" method="POST" target="_blank">
- <div class="input-group m-b-30">
- <span class="input-group-addon">$</span>
- <input type="number" class="form-control" name="amount" id="custom-donation-amount" placeholder="' . $minimum . '" min="' . $minimum . '"/>
- <span class="input-group-btn">
- <button class="btn btn-info" type="submit" id="checkout-button" lang="en">Donate</button>
- </span>
- </div>
- </form>
- <div class="donation-history hidden"></div>
- </div>
- </div>
- </div>
- </div>
- ';
- }
- }
- }
|