Files
le-matelot/local/modules/PayPal/Controller/PayPalPlanifiedPaymentController.php
2020-01-27 08:56:08 +01:00

316 lines
11 KiB
PHP

<?php
/*************************************************************************************/
/* */
/* Thelia */
/* */
/* Copyright (c) OpenStudio */
/* email : info@thelia.net */
/* web : http://www.thelia.net */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 3 of the License */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* */
/*************************************************************************************/
namespace PayPal\Controller;
use PayPal\Event\PayPalEvents;
use PayPal\Event\PayPalPlanifiedPaymentEvent;
use PayPal\Form\PayPalFormFields;
use PayPal\Form\PayPalPlanifiedPaymentCreateForm;
use PayPal\Form\PayPalPlanifiedPaymentUpdateForm;
use PayPal\Model\PaypalPlanifiedPayment;
use PayPal\Model\PaypalPlanifiedPaymentQuery;
use PayPal\PayPal;
use Symfony\Component\HttpFoundation\Response;
use Thelia\Controller\Admin\AbstractCrudController;
use Thelia\Core\Security\AccessManager;
/**
* Class PayPalPlanifiedPaymentController
* @package PayPal\Controller
*/
class PayPalPlanifiedPaymentController extends AbstractCrudController
{
/** @var string */
protected $currentRouter = PayPal::ROUTER;
/**
* PayPalPlanifiedPaymentController constructor.
*/
public function __construct()
{
parent::__construct(
'team',
'id',
'order',
'paypal.back.planified.payment',
PayPalEvents::PAYPAL_PLANIFIED_PAYMENT_CREATE,
PayPalEvents::PAYPAL_PLANIFIED_PAYMENT_UPDATE,
PayPalEvents::PAYPAL_PLANIFIED_PAYMENT_DELETE
);
}
/**
* The default action is displaying the list.
*
* @return Response
*/
public function defaultAction()
{
// Check current user authorization
if (null !== $response = $this->checkAuth($this->resourceCode, $this->getModuleCode(), AccessManager::VIEW)) {
return $response;
}
return $this->renderList();
}
/**
* Return the creation form for this object
* @return PayPalPlanifiedPaymentCreateForm
*/
protected function getCreationForm()
{
return $this->createForm(PayPalPlanifiedPaymentCreateForm::FORM_NAME);
}
/**
* Return the update form for this object
* @return PayPalPlanifiedPaymentUpdateForm
*/
protected function getUpdateForm()
{
return $this->createForm(PayPalPlanifiedPaymentUpdateForm::FORM_NAME);
}
/**
* Hydrate the update form for this object, before passing it to the update template
*
* @param PaypalPlanifiedPayment $object
* @return PayPalPlanifiedPaymentUpdateForm
*/
protected function hydrateObjectForm($object)
{
/** @var \Thelia\Model\Lang $lang */
$lang = $this->getRequest()->getSession()->get('thelia.current.lang');
$object->getTranslation($lang->getLocale());
$data = [
PayPalFormFields::FIELD_PP_ID => $object->getId(),
PayPalFormFields::FIELD_PP_TITLE => $object->getTitle(),
PayPalFormFields::FIELD_PP_DESCRIPTION => $object->getDescription(),
PayPalFormFields::FIELD_PP_FREQUENCY => $object->getFrequency(),
PayPalFormFields::FIELD_PP_FREQUENCY_INTERVAL => $object->getFrequencyInterval(),
PayPalFormFields::FIELD_PP_CYCLE => $object->getCycle(),
PayPalFormFields::FIELD_PP_MIN_AMOUNT => $object->getMinAmount(),
PayPalFormFields::FIELD_PP_MAX_AMOUNT => $object->getMaxAmount(),
PayPalFormFields::FIELD_PP_POSITION => $object->getPosition()
];
return $this->createForm(PayPalPlanifiedPaymentUpdateForm::FORM_NAME, 'form', $data);
}
/**
* Creates the creation event with the provided form data
*
* @param mixed $formData
* @return PayPalPlanifiedPaymentEvent
*/
protected function getCreationEvent($formData)
{
$planifiedPayment = new PaypalPlanifiedPayment();
$planifiedPayment = $this->fillObjectWithDataForm($planifiedPayment, $formData);
$planifiedPaymentEvent = new PayPalPlanifiedPaymentEvent($planifiedPayment);
return $planifiedPaymentEvent;
}
/**
* Creates the update event with the provided form data
*
* @param mixed $formData
* @return PayPalPlanifiedPaymentEvent
*/
protected function getUpdateEvent($formData)
{
if (null === $planifiedPayment = PaypalPlanifiedPaymentQuery::create()->findOneById($formData[PayPalFormFields::FIELD_PP_ID])) {
throw new \InvalidArgumentException(
$this->getTranslator()->trans(
'Invalid planified payment id : %id',
['%id' => $formData[PayPalFormFields::FIELD_PP_ID]],
PayPal::DOMAIN_NAME
)
);
}
$planifiedPayment = $this->fillObjectWithDataForm($planifiedPayment, $formData);
$planifiedPaymentEvent = new PayPalPlanifiedPaymentEvent($planifiedPayment);
return $planifiedPaymentEvent;
}
/**
* @param PaypalPlanifiedPayment $planifiedPayment
* @param $formData
* @return PaypalPlanifiedPayment
*/
protected function fillObjectWithDataForm(PaypalPlanifiedPayment $planifiedPayment, $formData)
{
$planifiedPayment
->setFrequency($formData[PayPalFormFields::FIELD_PP_FREQUENCY])
->setFrequencyInterval($formData[PayPalFormFields::FIELD_PP_FREQUENCY_INTERVAL])
->setCycle($formData[PayPalFormFields::FIELD_PP_CYCLE])
->setMinAmount($formData[PayPalFormFields::FIELD_PP_MIN_AMOUNT])
->setMaxAmount($formData[PayPalFormFields::FIELD_PP_MAX_AMOUNT])
->setLocale($formData[PayPalFormFields::FIELD_PP_LOCALE])
->setTitle($formData[PayPalFormFields::FIELD_PP_TITLE])
->setDescription($formData[PayPalFormFields::FIELD_PP_DESCRIPTION])
;
return $planifiedPayment;
}
/**
* Creates the delete event with the provided form data
* @return PayPalPlanifiedPaymentEvent
*/
protected function getDeleteEvent()
{
return new PayPalPlanifiedPaymentEvent(
$this->getExistingObject()
);
}
/**
* Return true if the event contains the object, e.g. the action has updated the object in the event.
*
* @param PayPalPlanifiedPaymentEvent $event
* @return bool
*/
protected function eventContainsObject($event)
{
return $event->getPayPalPlanifiedPayment() ? true : false;
}
/**
* Get the created object from an event.
* @param PayPalPlanifiedPaymentEvent $event
* @return PaypalPlanifiedPayment
*/
protected function getObjectFromEvent($event)
{
return $event->getPayPalPlanifiedPayment();
}
/**
* Load an existing object from the database
* @return PaypalPlanifiedPayment
*/
protected function getExistingObject()
{
if (null === $planifiedPayment = PaypalPlanifiedPaymentQuery::create()->findOneById((int)$this->getRequest()->get('planifiedPaymentId'))) {
throw new \InvalidArgumentException(
$this->getTranslator()->trans('Invalid planified payment id : %id',
['%id' => (int)$this->getRequest()->get('planifiedPaymentId')], PayPal::DOMAIN_NAME)
);
}
return $planifiedPayment;
}
/**
* Returns the object label form the object event (name, title, etc.)
*
* @param PaypalPlanifiedPayment $object
* @return string
*/
protected function getObjectLabel($object)
{
return $object->getTitle();
}
/**
* Returns the object ID from the object
*
* @param PaypalPlanifiedPayment $object
* @return int
*/
protected function getObjectId($object)
{
return $object->getId();
}
/**
* Render the main list template
*
* @param mixed $currentOrder , if any, null otherwise.
* @return Response
*/
protected function renderListTemplate($currentOrder)
{
$this->getListOrderFromSession('planified_payment', 'order', 'manual');
return $this->render(
'paypal/planified-payment',
[
'order' => $currentOrder,
'selected_menu' => 'planified'
]
);
}
/**
* Render the edition template
* @return Response
*/
protected function renderEditionTemplate()
{
return $this->render('paypal/planified-payment-edit', $this->getEditionArguments());
}
/**
* Must return a RedirectResponse instance
* @return Response
*/
protected function redirectToEditionTemplate()
{
return $this->generateRedirectFromRoute(
'paypal.admin.configuration.planified.update',
[],
$this->getEditionArguments()
);
}
/**
* Must return a RedirectResponse instance
* @return Response
*/
protected function redirectToListTemplate()
{
return $this->generateRedirectFromRoute('paypal.admin.configuration.planified');
}
/**
* @return array
*/
private function getEditionArguments()
{
return [
'planifiedPaymentId' => (int)$this->getRequest()->get('planifiedPaymentId')
];
}
}