/** * Execute a command and return a response. Does not render * @param IRequest $Request * @return IResponse the execution response */ function execute(IRequest $Request) { $walletOptions = array('Choose a Wallet' => null); /** @var AbstractWallet[] $WalletTypes */ $WalletTypes = array(); $WalletForms = array(); foreach (AbstractWallet::loadAllWalletTypes() as $WalletType) { $WalletTypes[$WalletType->getTypeName()] = $WalletType; $FieldSet = $WalletType->getFieldSet($Request); $FieldSet->setAttribute('data-' . self::PARAM_WALLET_TYPE, $WalletType->getTypeName()); $FieldSet->setAttribute('disabled', 'disabled'); $WalletForms[] = $FieldSet; $walletOptions[$WalletType->getDescription()] = $WalletType->getTypeName(); } $Form = new HTMLForm(self::FORM_METHOD, self::FORM_ACTION, self::FORM_NAME, new HTMLMetaTag(HTMLMetaTag::META_TITLE, self::TITLE), new HTMLHeaderScript(__DIR__ . '\\assets\\create-wallet.js'), new HTMLHeaderStyleSheet(__DIR__ . '\\assets\\create-wallet.css'), new HTMLElement('fieldset', new HTMLElement('legend', 'legend-wallet', 'Create a new Wallet'), new HTMLElement('label', null, "New Wallet type<br/>", new HTMLSelectField(self::PARAM_WALLET_TYPE, $walletOptions, new RequiredValidation())), "<br/><br/>", $WalletForms, "<br/><br/>", new HTMLButton('create', "Create New Wallet"))); $Form->setFormValues($Request); if (!$Request instanceof IFormRequest) { return $Form; } $walletType = $Form->validateField($Request, self::PARAM_WALLET_TYPE); $NewWallet = $WalletTypes[$walletType]; $NewWallet->validateRequest($Request, $Form); // $name = $Request[self::PARAM_WALLET_NAME]; // $email = $Request[self::PARAM_WALLET_EMAIL]; $id = WalletEntry::create($Request, $NewWallet); return new RedirectResponse(ManageWallet::getRequestURL($id), "Wallet created successfully. Redirecting...", 5); }
/** * Execute a command and return a response. Does not render * @param IRequest $Request * @return IResponse the execution response */ function execute(IRequest $Request) { $WalletEntry = WalletEntry::get($this->id); $Wallet = $WalletEntry->getWallet(); $Form = new HTMLForm(self::FORM_METHOD, $Request->getPath(), self::FORM_NAME, new HTMLMetaTag(HTMLMetaTag::META_TITLE, self::TITLE . ': ' . $Wallet->getTitle()), new HTMLElement('fieldset', new HTMLElement('legend', 'legend-submit', self::TITLE . ': ' . $Wallet->getTitle()), new HTMLInputField(self::PARAM_ID, $this->id, 'hidden'), new HTMLElement('label', null, "Wallet Status<br/>", $Select = new HTMLSelectField(self::PARAM_WALLET_STATUS, WalletEntry::$StatusOptions, new RequiredValidation())), "<br/><br/>", $Wallet->getFieldSet($Request), "<br/><br/>", new HTMLButton(self::PARAM_SUBMIT, 'Update', 'update'), new HTMLButton(self::PARAM_SUBMIT, 'Delete', 'delete')), "<br/><br/>"); if (!$Request instanceof IFormRequest) { return $Form; } $Wallet->validateRequest($Request, $Form); $submit = $Request[self::PARAM_SUBMIT]; switch ($submit) { case 'update': $WalletEntry->update($Request, $Wallet); return new RedirectResponse(ManageWallet::getRequestURL($this->getWalletID()), "Wallet updated successfully. Redirecting...", 5); case 'delete': WalletEntry::delete($Request, $this->getWalletID()); return new RedirectResponse(SearchWallets::getRequestURL(), "Wallet deleted successfully. Redirecting...", 5); } throw new \InvalidArgumentException($submit); }
/** * Execute a command and return a response. Does not render * @param IRequest $Request * @throws \Exception * @return IResponse the execution response */ function execute(IRequest $Request) { $SessionRequest = $Request; if (!$SessionRequest instanceof ISessionRequest) { throw new \Exception("Session required"); } $ProductForms = array(); /** @var AbstractWallet[] $WalletTypes */ $WalletTypes = array(); $walletOptions = array('Choose a Wallet' => null); $WalletForms = array(); $Products = ProductEntry::loadSessionProducts($SessionRequest); $productOptions = array('Choose a Product' => null); foreach ($Products as $ProductEntry) { $Product = $ProductEntry->getProduct(); $productOptions[$Product->getTotalCost() . ' - ' . $Product->getProductTitle()] = $ProductEntry->getID(); $Product = $ProductEntry->getProduct(); $FieldSet = $Product->getOrderFieldSet($Request); $key = $ProductEntry->getID(); $FieldSet->setAttribute('data-' . self::PARAM_PRODUCT_ID, $key); $ProductForms[] = $FieldSet; foreach ($Product->getWalletTypes() as $WalletType) { $key = $WalletType->getTypeName(); $WalletTypes[$key] = $WalletType; $FieldSet = $WalletType->getFieldSet($Request); $FieldSet->setAttribute('data-' . self::PARAM_WALLET_ID, $key); $FieldSet->setAttribute('disabled', 'disabled'); $WalletForms[] = $FieldSet; $walletOptions['New ' . $WalletType->getDescription()] = $key; } } $SessionWalletEntries = AbstractWallet::loadSessionWallets($SessionRequest); foreach ($SessionWalletEntries as $WalletEntry) { $Wallet = $WalletEntry->getWallet(); $key = $WalletEntry->getID(); $WalletTypes[$key] = $Wallet; $FieldSet = $Wallet->getFieldSet($Request); $FieldSet->setAttribute('data-' . self::PARAM_WALLET_ID, $key); $FieldSet->setAttribute('disabled', 'disabled'); $WalletForms[] = $FieldSet; $walletOptions[$Wallet->getTitle() . ' - ' . $Wallet->getDescription()] = $key; } // $walletTypes = Config::$AvailableWalletTypes; $Form = new HTMLForm(self::FORM_METHOD, self::FORM_ACTION, self::FORM_NAME, new HTMLMetaTag(HTMLMetaTag::META_TITLE, self::TITLE), new HTMLHeaderScript(__DIR__ . '/assets/transaction.js'), new HTMLHeaderStyleSheet(__DIR__ . '/assets/transaction.css'), new HTMLElement('fieldset', 'fieldset-create-transaction', new HTMLElement('legend', 'legend-wallet', self::TITLE), new HTMLElement('fieldset', 'fieldset-transaction', new HTMLElement('legend', 'legend-transaction', 'Transaction Details'), new HTMLElement('label', null, "Status<br/>", new HTMLSelectField(self::PARAM_TRANSACTION_STATUS, TransactionEntry::$StatusOptions, new RequiredValidation())), "<br/><br/>", new HTMLElement('label', null, "Product<br/>", new HTMLSelectField(self::PARAM_PRODUCT_ID, $productOptions, new RequiredValidation())), "<br/><br/>", $ProductForms), new HTMLElement('fieldset', 'fieldset-choose-wallet', new HTMLElement('legend', 'legend-wallet', 'Choose a Wallet'), new HTMLElement('label', null, new HTMLSelectField(self::PARAM_WALLET_ID, $walletOptions, new RequiredValidation())), "<br/><br/>", $WalletForms), "<br/><br/>Submit:<br/>", new HTMLButton('submit', 'Create Transaction', 'submit')), "<br/>"); if (!$Request instanceof IFormRequest) { return $Form; } $Form->setFormValues($Request); // $status = (int)$Form->validateField($Request, self::PARAM_TRANSACTION_STATUS); // $email = $Form->validateField($Request, self::PARAM_TRANSACTION_EMAIL); $walletType = $Form->validateField($Request, self::PARAM_WALLET_ID); $ChosenWallet = $WalletTypes[$walletType]; $ChosenWallet->validateRequest($Request, $Form); $productID = $Form->validateField($Request, self::PARAM_PRODUCT_ID); $ProductEntry = ProductEntry::get($productID); $Product = $ProductEntry->getProduct(); $Invoice = $Product->createNewInvoice($Request, $ChosenWallet); $responses = array(); foreach (PaymentSourceEntry::getActiveSources() as $PaymentSourceEntry) { $PaymentSource = $PaymentSourceEntry->getPaymentSource(); if ($PaymentSource->supportsWalletType($ChosenWallet)) { $Response = $PaymentSource->executeWalletTransaction($ChosenWallet); $responses[] = $Response->getMessage(); $paymentSourceID = $PaymentSourceEntry->getID(); $walletID = WalletEntry::createOrUpdate($Request, $ChosenWallet); if ($Response->getCode() === TransactionEntry::STATUS_APPROVED) { $status = TransactionEntry::STATUS_APPROVED; $id = TransactionEntry::create($Request, $Invoice, $status, $walletID, $productID, $paymentSourceID); ProfitEntry::update($Request, $id); return new RedirectResponse(ManageTransaction::getRequestURL($id), "Transaction created successfully. Redirecting...", 5); } else { $status = TransactionEntry::STATUS_DECLINED; $id = TransactionEntry::create($Request, $Invoice, $status, $walletID, $productID, $paymentSourceID); ProfitEntry::update($Request, $id); } } } throw new ValidationException($Form, "Transaction declined: \n\t" . implode("\n\t", $responses)); }