/** * Execute a command and return a response. Does not render * @param IRequest $Request * @throws RequestException * @return IResponse the execution response */ function execute(IRequest $Request) { $SessionRequest = $Request; if (!$SessionRequest instanceof ISessionRequest) { throw new RequestException("Session required"); } $ProductEntry = ProductEntry::get($this->id); $setRates = false; $Account = AbstractAccountType::loadFromSession($SessionRequest); if ($Account instanceof MerchantAccount) { if ($Account->getID() !== $ProductEntry->getAccountID()) { throw new RequestException("Product does not belong to merchant"); } } else { if ($Account instanceof AdministratorAccount) { $setRates = true; } else { throw new RequestException("Only merchants may create a new Product"); } } $Product = $ProductEntry->getProduct(); $sourceOptions = array("Choose a Payment Product" => null); $PaymentSourceTable = new PaymentSourceTable(); foreach ($PaymentSourceTable->fetchAll(1) as $PaymentSourceEntry) { $PaymentSource = $PaymentSourceEntry->getPaymentSource(); $sourceOptions[$PaymentSource->getTitle()] = $PaymentSourceEntry->getID(); } $Form = new HTMLForm(self::FORM_METHOD, $Request->getPath(), self::FORM_NAME, new HTMLMetaTag(HTMLMetaTag::META_TITLE, self::TITLE), new HTMLHeaderScript(__DIR__ . '/assets/product.js'), new HTMLHeaderStyleSheet(__DIR__ . '/assets/product.css'), new HTMLInputField(self::PARAM_ID, $this->id, 'hidden'), new HTMLInputField(self::PARAM_PRODUCT_TYPE, $Product->getTypeName(), 'hidden'), new HTMLElement('fieldset', new HTMLElement('legend', 'legend-order-page', "Try Order Page"), new HTMLAnchor(OrderForm::getRequestURL($this->getProductID()), "Order Page")), new HTMLElement('fieldset', 'fieldset-info inline', new HTMLElement('legend', 'legend-info', "Product Info"), new MapRenderer($ProductEntry)), new HTMLElement('fieldset', 'fieldset-config inline', new HTMLElement('legend', 'legend-config', self::TITLE), $Product->getConfigFieldSet($Request), $FeesFieldSet = $Product->getFeesFieldSet($Request), new HTMLElement('fieldset', 'fieldset-status inline', new HTMLElement('legend', 'legend-status', "Status"), $SelectStatus = new HTMLSelectField(self::PARAM_PRODUCT_STATUS, ProductEntry::$StatusOptions, new RequiredValidation())), "<br/><br/>", new HTMLButton(self::PARAM_SUBMIT, 'Update', 'update')), new HTMLElement('fieldset', 'inline', new HTMLElement('legend', 'legend-submit', "Delete Product"), new HTMLButton(self::PARAM_SUBMIT, 'Delete', 'delete')), "<br/>"); if (!$setRates) { $FeesFieldSet->setAttribute('disabled', 'disabled'); } $SelectStatus->setInputValue($ProductEntry->getStatus()); if (!$Request instanceof IFormRequest) { return $Form; } $submit = $Request[self::PARAM_SUBMIT]; switch ($submit) { case 'update': $status = $Request[self::PARAM_PRODUCT_STATUS]; $Product->validateConfigRequest($Request, $Form); $Product->validateFeesRequest($Request, $Form); $ProductEntry->update($Request, $Product, $status); return new RedirectResponse(ManageProduct::getRequestURL($this->getProductID()), "Product updated successfully. Redirecting...", 2); case 'delete': ProductEntry::delete($Request, $this->getProductID()); return new RedirectResponse(SearchProducts::getRequestURL(), "Product deleted successfully. Redirecting...", 8); } throw new \InvalidArgumentException($submit); }
/** * Map data to the key map * @param IKeyMapper $Map the map inst to add data to * @internal param \CPath\Request\IRequest $Request * @internal param \CPath\Request\IRequest $Request * @return void */ function mapKeys(IKeyMapper $Map) { // $SourceEntry = PaymentSourceEntry::get($this->payment_source_id); // $Source = $SourceEntry->getPaymentSource(); $Product = $this->getProduct(); $Map->map('product', $this->getID(), $Product->getProductTitle()); $Map->map('type', $Product->getTypeName()); $Map->map('total', $Product->getTotalCost()); // . ' ' . $Source->getCurrency() // $Map->map('currency', $Source->getCurrency()); $Map->map('account', $this->account_id); // $Map->map('payment-source', $Source->getDescription(), $this->payment_source_id); $Map->map('description', $Product->getTypeDescription()); // $Map->map('currency', $Source->getCurrency()); // $Map->map('profit', $this->getProfit() . ' ' . $Source->getCurrency()); $Map->map('fees', $Product->exportFeesToString()); $Map->map('test-url', OrderForm::getRequestURL($this->getID())); }