/** * Update membership list * * @return void */ protected function doActionUpdate() { $data = \XLite\Core\Request::getInstance()->update_memberships; if (!is_array($data)) { // TODO - add top message } else { $code = $this->getCurrentLanguage(); $flag = false; foreach ($data as $id => $row) { $m = \XLite\Core\Database::getRepo('\\XLite\\Model\\Membership')->find($id); if ($m) { $duplicate = \XLite\Core\Database::getRepo('\\XLite\\Model\\Membership')->createQueryBuilder()->andWhere('translations.name = :name', 'm.membership_id != :id')->setParameter('name', $row['name'])->setParameter('id', $id)->setMaxResults(1)->getSingleResult(); if (!is_null($duplicate)) { \XLite\Core\TopMessage::addWarning('"' . $row['name'] . '" ' . ' membership name is already in use. ' . 'Please specify another name for this membership level'); } else { \XLite\Core\Database::getRepo('\\XLite\\Model\\Membership')->update($m, $row); } $flag = true; } else { \XLite\Core\TopMessage::addError('Could not find membership ID#' . $id . ' record in the database'); } } if ($flag) { \XLite\Core\Database::getEM()->flush(); } } }
/** * Check amazon S3 settings * * @return void */ protected function checkAmazonS3Settings() { $config = \XLite\Core\Config::getInstance()->CDev->AmazonS3Images; if (!function_exists('curl_init')) { \XLite\Core\TopMessage::addError('This module uses PHP\'s cURL functions which are disabled on your web server'); } elseif ($config->access_key && $config->secret_key && !\XLite\Module\CDev\AmazonS3Images\Core\S3::getInstance()->isValid()) { \XLite\Core\TopMessage::addWarning('Connection to Amazon S3 failed.' . ' Check whether the AWS Access key и AWS Secret key specified in the module settings are correct.'); } }
/** * Do action clone * * @return void */ protected function doActionSaleCancelSale() { $select = \XLite\Core\Request::getInstance()->select; if ($select && is_array($select)) { \XLite\Core\Database::getRepo('\\XLite\\Model\\Product')->updateInBatchById($this->getUpdateInfo()); \XLite\Core\TopMessage::addInfo('Products information has been successfully updated'); } else { \XLite\Core\TopMessage::addWarning('Please select the products first'); } }
/** * This function is called if action is forbidden in demo mode * * @return void */ protected function forbidInDemoMode() { $message = $this->getForbidInDemoModeMessage(); if ($message) { \XLite\Core\TopMessage::addWarning($message); } $url = $this->getForbidInDemoModeRedirectURL(); if ($url) { \Includes\Utils\Operator::redirect($url); } }
/** * Place URL into engine's endpoints * * @return void */ protected function doActionLocate() { $engines = \XLite\Core\Request::getInstance()->engines; if ($engines) { foreach ($this->getEngines() as $key => $engine) { if (in_array($key, $engines)) { $url = urlencode(\XLite::getInstance()->getShopURL(\XLite\Core\Converter::buildURL('sitemap', '', array(), \XLite::CART_SELF))); $url = str_replace('%url%', $url, $engine['url']); $request = new \XLite\Core\HTTP\Request($url); $response = $request->sendRequest(); if (200 == $response->code) { \XLite\Core\TopMessage::addInfo('Site map successfully registred on X', array('engine' => $key)); } else { \XLite\Core\TopMessage::addWarning('Site map has not been registred in X', array('engine' => $key)); } } } } }
/** * Place URL into engine's endpoints * * @return void */ protected function doActionLocate() { $engines = \XLite\Core\Request::getInstance()->engines; if ($engines) { foreach ($this->getEngines() as $key => $engine) { if (in_array($key, $engines)) { $url = urlencode(\XLite::getInstance()->getShopURL(\XLite\Core\Converter::buildURL('sitemap', '', array(), \XLite::getCustomerScript()))); $url = str_replace('%url%', $url, $engine['url']); $request = new \XLite\Core\HTTP\Request($url); $response = $request->sendRequest(); if (200 == $response->code) { \XLite\Core\TopMessage::addInfo('Site map successfully registred on X', array('engine' => $key)); } else { \XLite\Core\TopMessage::addWarning('Site map has not been registred in X', array('engine' => $key)); } } } } $postedData = \XLite\Core\Request::getInstance()->getData(); $options = \XLite\Core\Database::getRepo('\\XLite\\Model\\Config')->findBy(array('category' => $this->getOptionsCategory())); $isUpdated = false; foreach ($options as $key => $option) { $name = $option->getName(); $type = $option->getType(); if (isset($postedData[$name]) || 'checkbox' == $type) { if ('checkbox' == $type) { $option->setValue(isset($postedData[$name]) ? 'Y' : 'N'); } else { $option->setValue($postedData[$name]); } $isUpdated = true; \XLite\Core\Database::getEM()->persist($option); } } if ($isUpdated) { \XLite\Core\Database::getEM()->flush(); } }
/** * Get CSV file for specified language * * @return void */ protected function doActionGetCSV() { $code = \XLite\Core\Request::getInstance()->code; $lng = \XLite\Core\Database::getRepo('XLite\\Model\\Language')->findOneBy(array('code' => $code)); if ($lng) { $labels = \XLite\Core\Database::getRepo('XLite\\Model\\LanguageLabel')->findLabelsTranslatedToCode($code); if ($labels) { $fileName = LC_DIR_TMP . 'labels-' . $code . '.' . time() . '.php'; $f = fopen($fileName, 'w'); foreach ($labels as $label => $translation) { $row = array($code, $label, $translation); fputcsv($f, $row, ','); } fclose($f); $name = $code . '-translation-' . gmdate('Y-m-d') . '.csv'; header('Content-Type: text/csv; charset=UTF-8'); header('Content-Disposition: attachment; filename="' . $name . '"; modification-date="' . gmdate('r') . ';'); header('Content-Length: ' . filesize($fileName)); readfile($fileName); unlink($fileName); exit; } else { \XLite\Core\TopMessage::addWarning('There are no labels translated to X', array('language' => $lng->getName())); } } else { \XLite\Core\TopMessage::addWarning('Unknown language: X', array('code' => htmlspecialchars($code))); } $this->redirect(); }
/** * Check if address has duplicates * * @return boolean */ protected function checkAddress() { $result = parent::checkAddress(); $sameAddress = $this->getRepository()->findSameAddress($this); if ($sameAddress) { \XLite\Core\TopMessage::addWarning('Address was not saved as other address with specified fields is already exists.'); $result = false; } return $result; }
/** * Do action :: create return * * @return void */ protected function doActionCreateReturn() { $items = $this->prepareReturnItems(); $message = strval(\XLite\Core\Request::getInstance()); $this->getReturnMessage(); if (!empty($items)) { $order = $this->getOrder(); // Create new return model $returnRequest = new \XLite\Module\XC\CanadaPost\Model\ProductsReturn(); \XLite\Core\Database::getEM()->persist($returnRequest); $returnRequest->setNotes($this->getReturnMessage()); foreach ($items as $itemId => $itemData) { // Create new return item model $returnItem = new \XLite\Module\XC\CanadaPost\Model\ProductsReturn\Item(); \XLite\Core\Database::getEM()->persist($returnItem); $returnItem->setAmount($itemData['amount']); $returnItem->setOrderItem($order->getItemById($itemId)); $returnRequest->addItem($returnItem); } $order->addCapostReturn($returnRequest); \XLite\Core\Database::getEM()->flush(); \XLite\Core\TopMessage::addInfo('The products return has been registered.'); } else { \XLite\Core\TopMessage::addWarning('No items have been selected for return.'); } }
/** * doActionAddFeaturedProducts * * @return void */ protected function doActionAddFeaturedProducts() { if (isset(\XLite\Core\Request::getInstance()->product_ids)) { $pids = array_keys(\XLite\Core\Request::getInstance()->product_ids); $products = \XLite\Core\Database::getRepo('\\XLite\\Model\\Product')->findByIds($pids); if (!$this->categoryId) { $this->categoryId = \XLite\Core\Database::getRepo('\\XLite\\Model\\Category')->getRootCategoryId(); } $category = \XLite\Core\Database::getRepo('\\XLite\\Model\\Category')->find($this->categoryId); // Retreive existing featured products list of that category $this->category_id = $this->categoryId; $existingLinksIds = array(); $existingLinks = $this->getFeaturedProductsList(); if ($existingLinks) { foreach ($existingLinks as $k => $v) { $existingLinksIds[] = $v->getProduct()->getProductId(); } } if ($products) { foreach ($products as $product) { if (in_array($product->getProductId(), $existingLinksIds)) { \XLite\Core\TopMessage::addWarning('The product SKU#"' . $product->getSku() . '" is already set as featured for the category'); } else { $fp = new \XLite\Module\CDev\FeaturedProducts\Model\FeaturedProduct(); $fp->setProduct($product); if ($category) { $fp->setCategory($category); } \XLite\Core\Database::getEM()->persist($fp); } } } \XLite\Core\Database::getEM()->flush(); } }
/** * Update product class * * @return void */ protected function doActionUpdateProductClass() { $updateClass = false; if (-1 == \XLite\Core\Request::getInstance()->productClass) { $name = trim(\XLite\Core\Request::getInstance()->newProductClass); if ($name) { $productClass = new \XLite\Model\ProductClass(); $productClass->setName($name); \XLite\Core\Database::getRepo('\\XLite\\Model\\ProductClass')->insert($productClass); $updateClass = true; } } else { $productClass = \XLite\Core\Database::getRepo('\\XLite\\Model\\ProductClass')->find(\XLite\Core\Request::getInstance()->productClass); $updateClass = true; } if ($updateClass) { $productClassChanged = $productClass && (!$this->getProduct()->getProductClass() || $productClass->getId() != $this->getProduct()->getProductClass()->getId()); $this->getProduct()->setProductClass($productClass); if ($productClassChanged) { \XLite\Core\Database::getRepo('\\XLite\\Model\\Attribute')->generateAttributeValues($this->getProduct(), true); } \XLite\Core\Database::getEM()->flush(); \XLite\Core\TopMessage::addInfo('Product class have been updated successfully'); } else { \XLite\Core\TopMessage::addWarning('Product class name is empty'); } }
/** * Show message about wrong product amount * * @param \XLite\Model\OrderItem $item Order item * * @return void */ protected function processInvalidAmountError(\XLite\Model\OrderItem $item) { \XLite\Core\TopMessage::addWarning('You tried to buy more items of "{{product}}" product {{description}} than are in stock. We have {{amount}} item(s) only. Please adjust the product quantity.', array('product' => $item->getProduct()->getName(), 'description' => $item->getExtendedDescription(), 'amount' => $item->getProductAvailableAmount())); }
/** * Process return * * @return void */ protected function doActionReturn() { $txn = $this->detectTransaction(); if ($txn) { $txn->getPaymentMethod()->getProcessor()->processReturn($txn); $txn->registerTransactionInOrderHistory('web'); $urlParams = array(); $urlParams['order_id'] = $txn->getOrder()->getOrderId(); if ($txn->getNote()) { $urlParams['txnNote'] = base64_encode(static::t($txn->getNote())); $urlParams['txnNoteType'] = $txn->isFailed() ? \XLite\Core\TopMessage::ERROR : \XLite\Core\TopMessage::INFO; } \XLite\Core\Database::getEM()->flush(); $url = $this->getShopURL($this->buildURL('checkout', 'return', $urlParams), \XLite\Core\Request::getInstance()->isHTTPS() || \XLite\Core\Config::getInstance()->Security->customer_security); switch ($txn->getPaymentMethod()->getProcessor()->getReturnType()) { case \XLite\Model\Payment\Base\WebBased::RETURN_TYPE_HTML_REDIRECT: $this->doHTMLRedirect($url); break; case \XLite\Model\Payment\Base\WebBased::RETURN_TYPE_HTML_REDIRECT_WITH_IFRAME_DESTROYING: $this->doHTMLRedirectWithIframeDestroying($url); break; case \XLite\Model\Payment\Base\WebBased::RETURN_TYPE_CUSTOM: $txn->getPaymentMethod()->getProcessor()->doCustomReturnRedirect(); break; default: $this->setReturnURL($url); } } else { // Log error \XLite\Logger::getInstance()->log('Requested payment return page with undefined payment transaction' . PHP_EOL . 'IP address: ' . $_SERVER['REMOTE_ADDR'] . PHP_EOL . 'Data: ' . var_export(\XLite\Core\Request::getInstance()->getData(), true), LOG_ERR); // Add top message \XLite\Core\TopMessage::addWarning('Unknown payment. If you see this message after returning from the payment page, please contact the store administrator for information about the status of your payment.'); // Set return URL $url = $this->buildURL(''); // Make redirect with destroying iframe (as it's unknown whether payment was via iframe method or not) $this->doHTMLRedirectWithIframeDestroying($url); } }
/** * Import payment methods from X-Payments and return error or warning message (if any) * * @return void */ public function importPaymentMethods() { $list = \XLite\Module\CDev\XPaymentsConnector\Core\XPaymentsClient::getInstance()->requestPaymentMethods(); if (is_array($list) && !empty($list)) { foreach ($this->getPaymentMethods() as $pm) { if (!$this->checkMethodInImportedList($pm, $list)) { \XLite\Core\Database::getEM()->remove($pm); } } foreach ($list as $settings) { if (!isset($settings['paymentMethodId'])) { // Create new payment method $pm = new \XLite\Model\Payment\Method(); \XLite\Core\Database::getEM()->persist($pm); $xpModuleClass = $this->detectModuleClass($settings); $pm->setClass('Module\\CDev\\XPaymentsConnector\\Model\\Payment\\Processor\\XPayments'); $pm->setServiceName('XPayments.' . $xpModuleClass); $pm->setName($settings['moduleName']); $pm->setType(\XLite\Model\Payment\Method::TYPE_CC_GATEWAY); $pm->setOrderby(static::getPaymentMethodOrderby('XPayments.' . $xpModuleClass)); $pm->setAdded(true); // Tokenization is disabled by default $pm->setSetting('saveCards', 'N'); } else { // Use existsting payment method $pm = \XLite\Core\Database::getRepo('XLite\\Model\\Payment\\Method')->find($settings['paymentMethodId']); } $this->setPaymentMethodSettings($pm, $settings); } \XLite\Core\Database::getEM()->flush(); \XLite\Core\TopMessage::addInfo('Payment methods have been imported successfully'); } elseif (is_array($list)) { \XLite\Core\TopMessage::addWarning('There are no payment configurations for this store.'); } else { \XLite\Core\TopMessage::addError('Error had occured during the requesting of payment methods from X-Payments. See log files for details.'); } }
/** * Do action disable * * @return void */ protected function doActionDisable() { $select = \XLite\Core\Request::getInstance()->select; if ($select && is_array($select)) { \XLite\Core\Database::getRepo('\\XLite\\Model\\Country')->updateInBatchById(array_fill_keys(array_keys($select), array('enabled' => false))); \XLite\Core\TopMessage::addInfo('Countries information has been successfully updated'); } else { \XLite\Core\TopMessage::addWarning('Please select the countries first'); } }
/** * Forbid operation processing * * @param string $message Message OPTIONAL * * @return void */ public static function doForbidOperation($message = null) { \XLite\Core\TopMessage::addWarning($message ?: 'You cannot do this in demo mode.'); }
/** * doActionAddFeaturedProducts * * @return void */ protected function doActionAdd() { if (isset(\XLite\Core\Request::getInstance()->select)) { $pids = \XLite\Core\Request::getInstance()->select; $products = \XLite\Core\Database::getRepo('\\XLite\\Model\\Product')->findByIds($pids); $this->id = \XLite\Core\Request::getInstance()->id ?: $this->getRootCategoryId(); $category = \XLite\Core\Database::getRepo('\\XLite\\Model\\Category')->find($this->id); $existingLinksIds = array(); $existingLinks = $this->getFeaturedProductsList(); if ($existingLinks) { foreach ($existingLinks as $k => $v) { $existingLinksIds[] = $v->getProduct()->getProductId(); } } if ($products) { foreach ($products as $product) { if (in_array($product->getProductId(), $existingLinksIds)) { \XLite\Core\TopMessage::addWarning('The product SKU#"X" is already set as featured for the category', array('SKU' => $product->getSku())); } else { $fp = new \XLite\Module\CDev\FeaturedProducts\Model\FeaturedProduct(); $fp->setProduct($product); if ($category) { $fp->setCategory($category); } \XLite\Core\Database::getEM()->persist($fp); } } } \XLite\Core\Database::getEM()->flush(); } $this->setReturnURL($this->buildURL('featured_products', '', \XLite\Core\Request::getInstance()->id ? array('id' => $this->id) : array())); }
/** * Update cart * * @return void */ protected function doActionUpdate() { // Update quantity $cartId = \XLite\Core\Request::getInstance()->cart_id; $amount = \XLite\Core\Request::getInstance()->amount; if (!is_array($amount)) { $amount = isset(\XLite\Core\Request::getInstance()->cart_id) ? array($cartId => $amount) : array(); } elseif (isset($cartId)) { $amount = isset($amount[$cartId]) ? array($cartId => $amount[$cartId]) : array(); } $result = false; $warningText = ''; foreach ($amount as $id => $quantity) { $item = $this->getCart()->getItemByItemId($id); if ($warningText === '') { $warningText = $item->getAmountWarning($quantity); } if ($item) { $item->setAmount($quantity); $result = true; } } // Update shipping method if (isset(\XLite\Core\Request::getInstance()->shipping)) { $this->getCart()->setShippingId(\XLite\Core\Request::getInstance()->shipping); $result = true; } if ($warningText !== '') { \XLite\Core\TopMessage::addWarning($warningText); } if ($result) { $this->updateCart(); } }
/** * Return from payment gateway * * :TODO: to revise * :FIXME: decompose * * @return void */ protected function doActionReturn() { // some of gateways can't accept return url on run-time and // use the one set in merchant account, so we can't pass // 'order_id' in run-time, instead pass the order id parameter name $orderId = \XLite\Core\Request::getInstance()->order_id; $cart = \XLite\Core\Database::getRepo('XLite\\Model\\Order')->find($orderId); if ($cart) { \XLite\Model\Cart::setObject($cart); } if (!$cart) { \XLite\Core\Session::getInstance()->order_id = null; \XLite\Core\TopMessage::addError('Order not found'); $this->setReturnURL($this->buildURL('cart')); } elseif (0 < $cart->getOpenTotal() && !in_array($cart->getStatus(), array(\XLite\Model\Order::STATUS_FAILED, \XLite\Model\Order::STATUS_DECLINED))) { \XLite\Core\TopMessage::addWarning('Payment was not finished', array('url' => $this->buildURL('cart', 'add_order', array('order_id' => $cart->getOrderId())))); $this->setReturnURL($this->buildURL(\XLite\Core\Auth::getInstance()->isLogged() ? 'order_list' : '')); } else { if ($cart->isPayed()) { $status = \XLite\Model\Order::STATUS_PROCESSED; $hasIncompletePayment = 0 < $cart->getOpenTotal(); $hasAuthorizedPayment = false; foreach ($cart->getPaymentTransactions() as $t) { $hasAuthorizedPayment = $hasAuthorizedPayment || $t->isAuthorized(); } if ($hasIncompletePayment) { $status = \XLite\Model\Order::STATUS_QUEUED; } elseif ($hasAuthorizedPayment) { $status = \XLite\Model\Order::STATUS_AUTHORIZED; } } else { $status = \XLite\Model\Order::STATUS_QUEUED; $transactions = $cart->getPaymentTransactions(); if (!empty($transactions)) { $lastTransaction = $transactions[count($transactions) - 1]; if ($lastTransaction->isFailed()) { $status = \XLite\Model\Order::STATUS_FAILED; } } } $cart->setStatus($status); $this->processSucceed(); \XLite\Core\TopMessage::getInstance()->clearTopMessages(); $this->setReturnURL($this->buildURL(\XLite\Model\Order::STATUS_FAILED == $status ? 'checkoutFailed' : 'checkoutSuccess', '', array('order_id' => $orderId))); } }
/** * Do action delete * * @return void */ protected function doActionDeleteVariants() { $select = \XLite\Core\Request::getInstance()->select; if ($select && is_array($select) && $this->getProduct()->getVariants()) { $selectedKeys = array_keys($select); $repo = \XLite\Core\Database::getRepo('\\XLite\\Module\\XC\\ProductVariants\\Model\\ProductVariant'); foreach ($this->getProduct()->getVariants() as $v) { if (in_array($v->getId(), $selectedKeys)) { $repo->delete($v, false); } } \XLite\Core\Database::getEM()->flush(); $this->getProduct()->assignDefaultVariant(); \XLite\Core\TopMessage::addInfo('Variants have been successfully deleted'); } else { \XLite\Core\TopMessage::addWarning('Please select the products first'); } }
/** * Show message about wrong product amount * * @param \XLite\Model\Product $product Product to process * @param integer $amount Available amount * * @return void */ protected function processInvalidAmountError(\XLite\Model\Product $product, $amount) { \XLite\Core\TopMessage::addWarning('Only ' . $amount . ' items are available for the "' . $product->getName() . '" product'); }
/** * Update labels * * @return void */ protected function doActionUpdate() { $current = \XLite\Core\Request::getInstance()->current; // Edit labels for current language if (is_array($current) && $current) { $this->saveLabels($current, static::getDefaultLanguage()); } unset($current); $translated = \XLite\Core\Request::getInstance()->translated; $translateFail = false; if (is_array($translated) && $translated) { $language = \XLite\Core\Request::getInstance()->language; if (!$language) { \XLite\Core\TopMessage::addWarning('Text labels have not been updated successfully: the translation language has not been specified'); $translateFail = true; } elseif (static::getDefaultLanguage() == $language) { \XLite\Core\TopMessage::addWarning('Text labels have not been updated successfully: the default application language has been set as the translation language'); $translateFail = true; } elseif (!\XLite\Core\Database::getRepo('\\XLite\\Model\\Language')->findOneByCode($language)) { \XLite\Core\TopMessage::addWarning('Text labels have not been updated successfully: the translation language has not been found'); $translateFail = true; } else { $this->saveLabels($translated, \XLite\Core\Request::getInstance()->language); } } unset($translated); if (!$translateFail) { \XLite\Core\TopMessage::addInfo('Text labels have been updated successfully'); } \XLite\Core\Translation::getInstance()->reset(); }
/** * Set sale price parameters for products list * * @param resource $stream Stream * * @return void */ protected function addFromStreamAction($stream) { $product = \XLite\Core\Database::getRepo('XLite\\Model\\Product')->find(\XLite\Core\Request::getInstance()->product_id); if (!is_resource($stream)) { \XLite\Logger::getInstance()->log('No valid resource supplied to add pin codes controller.' . ' Data type: ' . gettype($stream), LOG_ERR); \XLite\Core\TopMessage::addError('Unknown error occurred'); } elseif (!$product) { \XLite\Logger::getInstance()->log('No valid product id supplied to add pin codes controller.' . ' Request data: ' . print_r(\XLite\Core\Request::getInstance()->getData(), true), LOG_ERR); \XLite\Core\TopMessage::addError('Unknown error occurred'); } else { $codes = array(); $created = 0; $duplicates = 0; $exceededLength = 0; $maxLength = 64; for ($data = fgetcsv($stream); false !== $data; $data = fgetcsv($stream)) { $code = trim($data[0]); if (strlen($code) > $maxLength) { $exceededLength++; $code = ''; } if (!empty($code)) { $existing = \XLite\Core\Database::getRepo('XLite\\Module\\CDev\\PINCodes\\Model\\PinCode')->findOneBy(array('product' => $product->getId(), 'code' => $code)); if (!$existing) { $existing = in_array($code, $codes); } if ($existing) { $duplicates++; } else { $object = new \XLite\Module\CDev\PINCodes\Model\PinCode(); $object->setCode($code); $object->setProduct($product); \XLite\Core\Database::getEM()->persist($object); $created++; } $codes[] = $code; if (1000 < count($codes)) { \XLite\Core\Database::getEM()->flush(); $codes = array(); } } } \XLite\Core\Database::getEM()->flush(); if ($created) { \XLite\Core\TopMessage::addInfo(static::t('X PIN codes created successfully.', array('count' => $created))); } if ($duplicates) { \XLite\Core\TopMessage::addWarning(static::t('X PIN code duplicates ignored.', array('count' => $duplicates))); } if ($exceededLength) { \XLite\Core\TopMessage::addError(static::t('X PIN codes longer than Y characters ignored.', array('count' => $exceededLength, 'max' => $maxLength))); } if (!$created && !$duplicates && !$exceededLength) { \XLite\Core\TopMessage::addError(static::t('No valid code found.')); } } }
/** * Define request data * Remove duplicate by quantity and membership entities * * @return array */ protected function defineRequestData() { $requestData = parent::defineRequestData(); $delete = isset($requestData['delete']) ? $requestData['delete'] : array(); $new = isset($requestData['new']) ? $requestData['new'] : array(); $data = isset($requestData['data']) ? $requestData['data'] : array(); foreach ($new as $id => $value) { $tier = $this->getTierByQuantityAndMembership($value['quantityRangeBegin'], $value['membership']); if ($tier && !isset($delete[$tier->getId()]) && 0 > $id) { $data[$tier->getId()] = array('quantityRangeBegin' => $value['quantityRangeBegin'], 'price' => $value['price'], 'membership' => $value['membership']); unset($new[$id]); } elseif (0 == $id) { unset($new[$id]); } } foreach ($data as $id => $value) { $tier = $this->getTierByQuantityAndMembership($value['quantityRangeBegin'], $value['membership']); if ($tier && $tier->getId() !== $id && !isset($delete[$tier->getId()])) { $data[$tier->getId()] = array('quantityRangeBegin' => $value['quantityRangeBegin'], 'price' => $value['price'], 'membership' => $value['membership']); $delete[$id] = true; unset($data[$id]); } } $requestData = array_merge($requestData, array('new' => $new, 'delete' => $delete, 'data' => $data)); foreach (array('data', 'new') as $idx) { foreach ($requestData[$idx] as $id => $value) { if (empty($value['membership']) && 1 == $value['quantityRangeBegin']) { unset($requestData[$idx][$id]); \XLite\Core\TopMessage::addWarning('The base price can not be changed on this page.'); } } } return $requestData; }
/** * doActionAddUpselling * * @return void */ protected function doActionAdd() { if (isset(\XLite\Core\Request::getInstance()->select)) { $pids = \XLite\Core\Request::getInstance()->select; $products = \XLite\Core\Database::getRepo('\\XLite\\Model\\Product')->findByIds($pids); $this->id = \XLite\Core\Request::getInstance()->parent_product_id; $parentProduct = \XLite\Core\Database::getRepo('\\XLite\\Model\\Product')->find($this->id); $existingLinksIds = array(); $existingLinks = $this->getUpsellingList(); if ($existingLinks) { foreach ($existingLinks as $k => $v) { $existingLinksIds[] = $v->getProduct()->getProductId(); } } if ($products) { foreach ($products as $product) { if (in_array($product->getProductId(), $existingLinksIds)) { \XLite\Core\TopMessage::addWarning('The product SKU#"X" is already set as Related for the product', array('SKU' => $product->getSku())); } else { $up = new \XLite\Module\XC\Upselling\Model\UpsellingProduct(); $up->setProduct($product); $up->setParentProduct($parentProduct); \XLite\Core\Database::getEM()->persist($up); \XLite\Core\Database::getEM()->flush($up); \XLite\Core\Database::getRepo('XLite\\Module\\XC\\Upselling\\Model\\UpsellingProduct')->addBidirectionalLink($up); } } } } $this->setReturnURL($this->buildURL('product', '', array('page' => 'upselling_products', 'product_id' => $this->id))); }
/** * Update payment method * * @return void */ protected function doActionUpdate() { $settings = \XLite\Core\Request::getInstance()->settings; $method = $this->getPaymentMethod(); if (!$method) { \XLite\Core\TopMessage::addError('An attempt to update settings of unknown payment method'); } else { if (is_array($settings)) { foreach ($settings as $name => $value) { $method->setSetting($name, trim($value)); } } $properties = \XLite\Core\Request::getInstance()->properties; if (is_array($properties) && !empty($properties)) { $method->map($properties); } \XLite\Core\Database::getRepo('\\XLite\\Model\\Payment\\Method')->update($method); // If "just added" method is configured and can be enabled then we enable it if (\XLite\Core\Request::getInstance()->just_added && $method->isConfigured() && $method->canEnable()) { $method->setEnabled(true); \XLite\Core\Database::getEM()->flush(); } if ($method->isConfigured()) { \XLite\Core\TopMessage::addInfo('The settings of payment method successfully updated'); $this->setReturnURL($this->buildURL('payment_settings')); } else { \XLite\Core\TopMessage::addWarning('Payment method has not been configured properly'); } } }
/** * Request for upgrade * * @return void */ protected function doActionRequestForUpgrade() { $modules = \XLite\Upgrade\Cell::getInstance()->getIncompatibleModules(); if ($modules) { $result = \XLite\Core\Marketplace::getInstance()->requestForUpgrade($modules); if (!empty($result) && $result[\XLite\Core\Marketplace::FIELD_IS_REQUEST_FOR_UPGRADE_SENT]) { \XLite\Core\TopMessage::addInfo('Your request has been sent successfully'); } else { \XLite\Core\TopMessage::addWarning('An error occurred while sending the request'); } } }
/** * Cancel * * @return void */ protected function doActionCancel() { if ($this->getImporter()->getOptions()->clearImportDir) { $this->getImporter()->deleteAllFiles(); } if (\XLite\Logic\Import\Importer::hasErrors() || \XLite\Logic\Import\Importer::hasWarnings()) { \XLite\Logic\Import\Importer::userBreak(); } else { \XLite\Logic\Import\Importer::cancel(); \XLite\Core\TopMessage::addWarning('Import has been cancelled.'); } }
/** * Check form id * * @return boolean */ public function checkFormId() { $result = !static::needFormId() || static::needFormId() && ($this->getTarget() && $this->isIgnoredTarget() || $this->isFormIdValid()); if (!$result) { \XLite\Core\TopMessage::addWarning('The form could not be identified as a form generated by X-Cart'); \XLite\Logger::getInstance()->log('Form ID checking failure (target: ' . $this->getTarget() . ', action: ' . $this->getAction() . ')', LOG_WARNING); } return $result; }
/** * Do transmit shipment action * * @return void */ protected function doActionCapostTransmitShipment() { $parcelId = intval(\XLite\Core\Request::getInstance()->parcel_id); $parcel = \XLite\Core\Database::getRepo('\\XLite\\Module\\XC\\CanadaPost\\Model\\Order\\Parcel')->find($parcelId); if (isset($parcel)) { if ($parcel->canBeTransmited()) { $result = $parcel->setStatus('T'); $errors = $parcel->getApiCallErrors(); if ($result) { if (isset($errors)) { \XLite\Core\TopMessage::addWarning('Shipment has been tranmitted with errors'); } else { \XLite\Core\TopMessage::addInfo('Shipment has been transmitted successfully'); } } if (isset($errors)) { foreach ($errors as $errCode => $err) { $label = '[' . $errCode . '] ' . $err; \XLite\Core\TopMessage::addError($label); } } \XLite\Core\Database::getEM()->flush(); } else { \XLite\Core\TopMessage::addError('Shipment cannot be transmitted'); } } }