|
@@ -11,7 +11,7 @@ use Silex\Application;
|
|
|
use Silex\ControllerCollection;
|
|
|
|
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
|
-use Symfony\Component\HttpFoundation\Response;
|
|
|
+use Symfony\Component\HttpFoundation\RedirectResponse;
|
|
|
|
|
|
/**
|
|
|
* Squarepay extension class.
|
|
@@ -46,7 +46,12 @@ class SquarepayExtension extends SimpleExtension
|
|
|
});
|
|
|
|
|
|
$app['twig.runtime.square'] = $app->share(function ($app) {
|
|
|
- return new Twig\SquareTwigRuntime($app['square.apiClient'], $app['twig'], $this->getConfig());
|
|
|
+ return new Twig\SquareTwigRuntime(
|
|
|
+ $app['square.apiClient'],
|
|
|
+ $app['twig'],
|
|
|
+ $this->getConfig(),
|
|
|
+ $app['session']->get('basket')
|
|
|
+ );
|
|
|
});
|
|
|
|
|
|
$app['twig.runtimes'] = $app->extend(
|
|
@@ -62,6 +67,10 @@ class SquarepayExtension extends SimpleExtension
|
|
|
|
|
|
protected function registerFrontendRoutes(ControllerCollection $collection)
|
|
|
{
|
|
|
+ $collection->post ('/basket/add', [$this, 'basketAdd']);
|
|
|
+ $collection->post ('/basket/remove', [$this, 'basketRemove']);
|
|
|
+ $collection->post ('/basket/update', [$this, 'basketUpdate']);
|
|
|
+ $collection->match('/basket/clear', [$this, 'basketClear']);
|
|
|
$collection->match('/process-square', [$this, 'processSquarePaymentResponse']);
|
|
|
}
|
|
|
|
|
@@ -94,13 +103,81 @@ class SquarepayExtension extends SimpleExtension
|
|
|
|
|
|
protected function registerTwigFunctions() {
|
|
|
$getCatalog = [Twig\SquareTwigRuntime::class, 'getCatalog'];
|
|
|
- $cardform = [Twig\SquareTwigRuntime::class, 'displayCCForm'];
|
|
|
+ $getBasket = [Twig\SquareTwigRuntime::class, 'getBasket'];
|
|
|
+ $cardform = [Twig\SquareTwigRuntime::class, 'displayCCForm'];
|
|
|
return [
|
|
|
- 'getcatalog' => [ $getCatalog ],
|
|
|
- 'cardform' => [ $cardform, ['is_safe' => ['html']] ]
|
|
|
+ 'getcatalog' => [ $getCatalog ],
|
|
|
+ 'getbasket' => [ $getBasket, ['is_safe' => ['html']] ],
|
|
|
+ 'cardform' => [ $cardform, ['is_safe' => ['html']] ]
|
|
|
];
|
|
|
}
|
|
|
|
|
|
+ // -----------------------------------------------------------------------------------------------------------------
|
|
|
+ // BASKET
|
|
|
+
|
|
|
+ public function basketAdd(Application $app, Request $request)
|
|
|
+ {
|
|
|
+ $basket = $app['session']->get('basket');
|
|
|
+ $sku = $request->request->get('sku');
|
|
|
+ $name = $request->request->get('name');
|
|
|
+ $price = $request->request->get('price');
|
|
|
+ $key = substr(md5($sku), 0, 10);
|
|
|
+ if (isset($basket[$key])) {
|
|
|
+ $basket[$key]['quantity']++;
|
|
|
+ $basket[$key]['total'] = $basket[$key]['quantity'] * $basket[$key]['price'];
|
|
|
+ } else {
|
|
|
+ $basket[$key] = [
|
|
|
+ 'sku' => $sku,
|
|
|
+ 'name' => $name,
|
|
|
+ 'price' => $price,
|
|
|
+ 'quantity' => 1,
|
|
|
+ 'total' => $price
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ $app['session']->set('basket', $basket);
|
|
|
+ return new RedirectResponse('/basket');
|
|
|
+ }
|
|
|
+
|
|
|
+ public function basketUpdate(Application $app, Request $request)
|
|
|
+ {
|
|
|
+ $basket = $app['session']->get('basket');
|
|
|
+ $sku = $request->request->get('sku');
|
|
|
+ $action = $request->request->get('action');
|
|
|
+ $key = substr(md5($sku), 0, 10);
|
|
|
+ if (isset($basket[$key])) {
|
|
|
+ if ($action === '+') {
|
|
|
+ $basket[$key]['quantity']++;
|
|
|
+ } else {
|
|
|
+ $basket[$key]['quantity']--;
|
|
|
+ }
|
|
|
+ $basket[$key]['total'] = $basket[$key]['quantity'] * $basket[$key]['price'];
|
|
|
+ if ($basket[$key]['quantity'] === 0) {
|
|
|
+ unset($basket[$key]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $app['session']->set('basket', $basket);
|
|
|
+ return new RedirectResponse('/basket');
|
|
|
+ }
|
|
|
+
|
|
|
+ public function basketRemove(Application $app, Request $request)
|
|
|
+ {
|
|
|
+ $basket = $app['session']->get('basket');
|
|
|
+ $sku = $request->request->get('sku');
|
|
|
+ $key = substr(md5($sku), 0, 10);
|
|
|
+ unset($basket[$key]);
|
|
|
+ $app['session']->set('basket', $basket);
|
|
|
+ return new RedirectResponse('/basket');
|
|
|
+ }
|
|
|
+
|
|
|
+ public function basketClear(Application $app)
|
|
|
+ {
|
|
|
+ $app['session']->remove('basket');
|
|
|
+ return new RedirectResponse('/basket');
|
|
|
+ }
|
|
|
+
|
|
|
+ // -----------------------------------------------------------------------------------------------------------------
|
|
|
+ // SQUARE PAYMENT PROCESSING
|
|
|
+
|
|
|
public function processSquarePaymentResponse() {
|
|
|
// TODO
|
|
|
}
|