4
0
Эх сурвалжийг харах

added homepageDonateShowUserHistory to donate homepage item

CauseFX 4 жил өмнө
parent
commit
2090f78899

+ 1 - 0
api/config/default.php

@@ -307,6 +307,7 @@ return [
 	'homepageDonateCustomizeHeading' => 'Donate Please',
 	'homepageDonateCustomizeDescription' => 'Hi!  Help me out with a donation...',
 	'homepageDonateMinimum' => '100',
+	'homepageDonateShowUserHistory' => false,
 	'homepageOrdercustomhtml01' => '1',
 	'homepageOrdercustomhtml02' => '2',
 	'homepageOrdertransmission' => '3',

+ 52 - 3
api/homepage/donate.php

@@ -78,6 +78,7 @@ trait DonateHomepageItem
 								['name' => '100 USD', 'value' => '10000'],
 							]
 						]),
+					$this->settingsOption('switch', 'homepageDonateShowUserHistory', ['label' => 'Show User Donate History']),
 				]
 			]
 		];
@@ -101,11 +102,56 @@ trait DonateHomepageItem
 					'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'];
@@ -129,7 +175,7 @@ trait DonateHomepageItem
 				]],
 				'mode' => 'payment',
 				'success_url' => $this->getServerPath() . 'api/v2/homepage/donate/success',
-				'cancel_url' => $this->getServerPath() . 'api/v2/homepage/donate/error',
+				'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']]);
@@ -138,7 +184,8 @@ trait DonateHomepageItem
 			header('HTTP/1.1 303 See Other');
 			header('Location: ' . $session->url);
 		} catch (\Stripe\Exception\ApiErrorException $e) {
-			die($this->showHTML('Error', $e->getMessage()));
+			$this->setResponse(500, $e->getMessage());
+			return false;
 		}
 	}
 
@@ -146,6 +193,7 @@ trait DonateHomepageItem
 	{
 		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 () {
@@ -154,7 +202,7 @@ trait DonateHomepageItem
 			</script>
 				<div id="' . __FUNCTION__ . '">
 					<div class="panel panel-primary" style="position: static; zoom: 1;">
-						<div class="panel-heading"> ' . $this->config['homepageDonateCustomizeHeading'] . '</div>
+						<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>
@@ -169,6 +217,7 @@ trait DonateHomepageItem
 										</span>
 									</div>
 								</form>
+								<div class="donation-history hidden"></div>
 							</div>
 						</div>
 					</div>

+ 15 - 2
api/v2/routes/homepage.php

@@ -525,20 +525,33 @@ $app->get('/homepage/trakt/calendar', function ($request, $response, $args) {
 });
 $app->get('/homepage/donate/success', function ($request, $response, $args) {
 	$Organizr = ($request->getAttribute('Organizr')) ?? new Organizr();
-	$Organizr->getTraktCalendar();
 	$response->getBody()->write($Organizr->showHTML('Donation Success', 'Thank you for donating!', true));
 	return $response
 		->withHeader('Content-Type', 'text/html;charset=UTF-8')
 		->withStatus(200);
 });
+$app->get('/homepage/donate/cancel', function ($request, $response, $args) {
+	$Organizr = ($request->getAttribute('Organizr')) ?? new Organizr();
+	$response->getBody()->write($Organizr->showHTML('Donation Cancelled', 'Taking you back...', true));
+	return $response
+		->withHeader('Content-Type', 'text/html;charset=UTF-8')
+		->withStatus(200);
+});
 $app->get('/homepage/donate/error', function ($request, $response, $args) {
 	$Organizr = ($request->getAttribute('Organizr')) ?? new Organizr();
-	$Organizr->getTraktCalendar();
 	$response->getBody()->write($Organizr->showHTML('Donation Error', 'An error has occurred!', true));
 	return $response
 		->withHeader('Content-Type', 'text/html;charset=UTF-8')
 		->withStatus(500);
 });
+$app->get('/homepage/donate', function ($request, $response, $args) {
+	$Organizr = ($request->getAttribute('Organizr')) ?? new Organizr();
+	$Organizr->homepageDonateUserHistory();
+	$response->getBody()->write(jsonE($GLOBALS['api']));
+	return $response
+		->withHeader('Content-Type', 'application/json;charset=UTF-8')
+		->withStatus($GLOBALS['responseCode']);
+});
 $app->post('/homepage/donate', function ($request, $response, $args) {
 	$Organizr = ($request->getAttribute('Organizr')) ?? new Organizr();
 	$amount = $_GET['amount'] ?? 1000;

+ 40 - 0
js/custom.js

@@ -1968,4 +1968,44 @@ $(document).on('click', '.test-cron', function() {
 $(document).on('click', '.test-folder', function() {
     let folder = $(this).parent().parent().find('input').val();
     testAPIConnection('folder',{'folder':folder});
+});
+
+// Toggle Homepage Donation History
+$(document).on('click', '.toggle-donation-history', function() {
+    let status = $(this).attr('data-status');
+    if(status === 'hidden'){
+        $(this).attr('data-status', 'show');
+        $('.donation-history').removeClass('hidden');
+        let info = '';
+        let el = $(this);
+        el.find('i').toggleClass('fa-lg fa-spin ti-reload');
+        organizrAPI2('GET','api/v2/homepage/donate').success(function(data) {
+            try {
+                let response = data.response;
+                if(response.data){
+                    $.each(response.data, function(i,v) {
+                        let m = moment.tz(v.date, activeInfo.timezone);
+                        v.date = moment(m).format('LLL');
+                        let user = activeInfo.user.groupID  == 0 ? '&nbsp; <code>'+v.email+'</code>' : '';
+                        info += '<li><div class="bg-primary"><i class="fa fa-usd text-white"></i></div> '+v.date+user+'<span class="text-muted">$'+v.amount+'</span></li>'
+                    })
+                    info = '<ul class="feeds fc-scroller" style="height: 250px">' + info + '</ul>';
+                }else{
+                    info = 'No history...';
+                }
+            }catch(e) {
+                info = 'An error occurred';
+                organizrCatchError(e,data);
+            }
+            let html = '<div class="white-box"><h3 class="box-title" lang="en">Recent Donations</h3>'+info+'</div>';
+            $('.donation-history').html(html);
+            el.find('i').toggleClass('fa-lg fa-spin ti-reload');
+        }).fail(function(xhr) {
+            OrganizrApiError(xhr, 'API Error');
+            el.find('i').toggleClass('fa-lg fa-spin ti-reload');
+        })
+    }else{
+        $(this).attr('data-status', 'hidden');
+        $('.donation-history').addClass('hidden');
+    }
 });

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
js/custom.min.js


Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно