Example #1
0
 /**
  * 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();
         }
     }
 }
Example #2
0
 /**
  * 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.');
     }
 }
Example #3
0
 /**
  * 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');
     }
 }
Example #4
0
 /**
  * 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);
     }
 }
Example #5
0
 /**
  * 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));
                 }
             }
         }
     }
 }
Example #6
0
 /**
  * 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();
     }
 }
Example #7
0
 /**
  * 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();
 }
Example #8
0
 /**
  * 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;
 }
Example #9
0
 /**
  * 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.');
     }
 }
Example #10
0
 /**
  * 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();
     }
 }
Example #11
0
 /**
  * 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()));
 }
Example #13
0
 /**
  * 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);
     }
 }
Example #14
0
 /**
  * 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.');
     }
 }
Example #15
0
 /**
  * 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');
     }
 }
Example #16
0
File: Main.php Project: kingsj/core
 /**
  * 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.');
 }
Example #17
0
 /**
  * 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()));
 }
Example #18
0
 /**
  * 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();
     }
 }
Example #19
0
 /**
  * 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)));
     }
 }
Example #20
0
 /**
  * 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');
     }
 }
Example #21
0
File: Cart.php Project: kingsj/core
 /**
  * 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');
 }
Example #22
0
 /**
  * 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();
 }
Example #23
0
 /**
  * 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.'));
         }
     }
 }
Example #24
0
 /**
  * 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;
 }
Example #25
0
 /**
  * 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)));
 }
Example #26
0
 /**
  * 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');
         }
     }
 }
Example #27
0
 /**
  * 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');
         }
     }
 }
Example #28
0
 /**
  * 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.');
     }
 }
Example #29
0
 /**
  * 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;
 }
Example #30
0
 /**
  * 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');
         }
     }
 }