/** * handleRequest * * @return void */ public function handleRequest() { $apiClient = ServiceApiClient::getInstance(); $apiClient->requestSecretKey(); Config::updateInstance(); $secretKey = Config::getInstance()->QSL->CloudSearch->secret_key; $this->redirect($apiClient->getDashboardIframeUrl($secretKey)); }
/** * init * * @return void */ public function init() { if (isset(\XLite\Core\Request::getInstance()->currency_id)) { $currency = \XLite\Core\Database::getRepo('XLite\\Model\\Currency')->find(\XLite\Core\Request::getInstance()->currency_id); if ($currency) { $shopCurrency = \XLite\Core\Database::getRepo('XLite\\Model\\Config')->findOneBy(array('name' => 'shop_currency', 'category' => 'General')); \XLite\Core\Database::getRepo('XLite\\Model\\Config')->update($shopCurrency, array('value' => $currency->getCurrencyId())); \XLite\Core\Config::updateInstance(); } } }
/** * testGetIncludedTaxList * * @return void * @see ____func_see____ * @since 1.0.24 */ public function testGetIncludedTaxList() { $product = $this->getProduct(); \XLite\Core\Config::getInstance()->Shipping->anonymous_country = 'US'; \XLite\Core\Config::updateInstance(); $productTaxes = $product->getIncludedTaxList(); $this->assertTrue(is_array($productTaxes), 'Returned not an array'); foreach ($productTaxes as $k => $v) { $productTaxes[$k] = number_format(round($v, 2), 2); } $this->assertEquals(array('VAT' => 4.15), $productTaxes, 'Wrong taxes returned'); }
$values = array(); foreach ($fields as $fieldName) { $values[$fieldName] = isset($booleanFields[$fieldName]) ? 'Y' === $config->{$fieldName} || 1 === (int) $config->{$fieldName} : $config->{$fieldName}; } $values['dimensions'] = serialize(array($config->length, $config->width, $config->height)); $yamlFile = __DIR__ . LC_DS . 'post_rebuild.yaml'; \XLite\Core\Database::getInstance()->loadFixturesFromYaml($yamlFile); /** @var \XLite\Model\Repo\Config $repo */ $repo = \XLite\Core\Database::getRepo('XLite\\Model\\Config'); $category = 'CDev\\AustraliaPost'; foreach ($values as $name => $value) { $repo->createOption(array('category' => $category, 'name' => $name, 'value' => $value)); } foreach (array('length', 'width', 'height') as $name) { $option = $repo->findOneBy(array('name' => $name, 'category' => $category)); if ($option) { \XLite\Core\Database::getEM()->remove($option); } } \XLite\Core\Database::getEM()->flush(); \XLite\Core\Config::updateInstance(); /** @var \XLite\Model\Repo\Shipping\Method $repo */ $repo = \XLite\Core\Database::getRepo('XLite\\Model\\Shipping\\Method'); $carrier = $repo->findOnlineCarrier('aupost'); $processor = new \XLite\Module\CDev\AustraliaPost\Model\Shipping\Processor\AustraliaPost(); if ($processor->isConfigured()) { $carrier->setAdded(true); $carrier->setEnabled(true); } \XLite\Core\Database::getEM()->flush(); };
/** * Parse XML of X-Payments allowed payment methods into array * * @return array */ protected function getAllowedModulesList() { $xml = static::getModulesXml(); $json = json_encode(simplexml_load_string($xml)); $modules = json_decode($json, true); $list = array(); if (isset($modules['module']) && !empty($modules['module']) && is_array($modules['module'])) { $modules = $modules['module']; foreach ($modules as $id => $module) { if (isset($module['name']) && isset($module['canSaveCards']) && isset($module['secure3d']) && isset($module['transactions'])) { $list[$module['name']] = array('id' => $id, 'name' => $module['name'], 'secure3d' => $module['secure3d'], 'secure3dType' => self::get3DSecureType($module['secure3d']), 'canSaveCards' => $module['canSaveCards'], 'transactions' => is_array($module['transactions']) ? $module['transactions'] : array($module['transactions']), 'countries' => self::getCountries($module)); if (isset($module['class'])) { $list[$module['name']]['class'] = $module['class']; } } } if (!empty($list)) { $allowedModulesSetting = \XLite\Core\Database::getRepo('XLite\\Model\\Config')->findOneBy(array('name' => 'xpc_allowed_modules', 'category' => 'CDev\\XPaymentsConnector')); \XLite\Core\Database::getRepo('XLite\\Model\\Config')->update($allowedModulesSetting, array('value' => $xml)); $allowedModulesLoadDateSetting = \XLite\Core\Database::getRepo('XLite\\Model\\Config')->findOneBy(array('name' => 'xpc_allowed_modules_load_date', 'category' => 'CDev\\XPaymentsConnector')); \XLite\Core\Database::getRepo('XLite\\Model\\Config')->update($allowedModulesLoadDateSetting, array('value' => \XLite\Core\Converter::time())); \XLite\Core\Config::updateInstance(); } } return $list; }
/** * Import action * * @return void */ protected function doActionImport() { foreach (\XLite\Logic\Import\Importer::getImportOptionsList() as $key) { \XLite\Core\Database::getRepo('XLite\\Model\\Config')->createOption(array('category' => 'Import', 'name' => $key, 'value' => isset(\XLite\Core\Request::getInstance()->options[$key]) ? \XLite\Core\Request::getInstance()->options[$key] : false)); } \XLite\Core\Config::updateInstance(); $dirTo = LC_DIR_VAR . \XLite\Logic\Import\Importer::getImportDir(); if (!\Includes\Utils\FileManager::isExists($dirTo)) { \Includes\Utils\FileManager::mkdirRecursive($dirTo); } $filesToImport = array(); if ($_FILES && isset($_FILES['files']) && $_FILES['files']['name'] && $_FILES['files']['name'][0] && \Includes\Utils\FileManager::isDirWriteable($dirTo)) { $list = glob($dirTo . LC_DS . '*'); if ($list) { foreach ($list as $path) { if (is_file($path)) { \Includes\Utils\FileManager::deleteFile($path); } } } $files = $_FILES['files']; foreach ($files['name'] as $key => $name) { $path = null; if ($name && UPLOAD_ERR_OK === $files['error'][$key]) { $path = \Includes\Utils\FileManager::getUniquePath($dirTo, $name ?: $files['name'][$key]); if (move_uploaded_file($files['tmp_name'][$key], $path)) { if (\XLite\Core\Archive::getInstance()->isArchive($path) || 'csv' == substr(strrchr($path, '.'), 1)) { $filesToImport[] = $path; } else { \XLite\Core\TopMessage::addError('The "{{file}}" is not CSV or archive', array('file' => $name)); \Includes\Utils\FileManager::deleteFile($path); } } else { $path = null; } } if (!$path) { \XLite\Core\TopMessage::addError('The "{{file}}" file was not uploaded', array('file' => $name)); } } } if ($filesToImport) { \XLite\Logic\Import\Importer::run(\XLite\Logic\Import\Importer::assembleImportOptions() + array('files' => $filesToImport)); } }
public function testWrongPriority() { \XLite\Core\Database::getRepo('XLite\\Model\\Config')->createOption(array('category' => 'CDev\\XMLSitemap', 'name' => 'welcome_priority', 'value' => 'abc')); $iterator = new \XLite\Module\CDev\XMLSitemap\Logic\SitemapIterator(); foreach ($iterator as $data) { $this->assertEquals('main', $data['loc']['target'], 'check loc target #1'); $this->assertEquals(0.5, $data['priority'], 'check priority #1'); break; } \XLite\Core\Database::getRepo('XLite\\Model\\Config')->createOption(array('category' => 'CDev\\XMLSitemap', 'name' => 'welcome_priority', 'value' => 2)); $iterator = new \XLite\Module\CDev\XMLSitemap\Logic\SitemapIterator(); foreach ($iterator as $data) { $this->assertEquals('main', $data['loc']['target'], 'check loc target #2'); $this->assertEquals(0.5, $data['priority'], 'check priority #2'); break; } \XLite\Core\Database::getRepo('XLite\\Model\\Config')->createOption(array('category' => 'CDev\\XMLSitemap', 'name' => 'welcome_priority', 'value' => -1)); $iterator = new \XLite\Module\CDev\XMLSitemap\Logic\SitemapIterator(); foreach ($iterator as $data) { $this->assertEquals('main', $data['loc']['target'], 'check loc target #3'); $this->assertEquals(0.5, $data['priority'], 'check priority #3'); break; } \XLite\Core\Database::getRepo('XLite\\Model\\Config')->createOption(array('category' => 'CDev\\XMLSitemap', 'name' => 'welcome_priority', 'value' => '0.43')); \XLite\Core\Config::updateInstance(); $iterator = new \XLite\Module\CDev\XMLSitemap\Logic\SitemapIterator(); foreach ($iterator as $data) { $this->assertEquals('main', $data['loc']['target'], 'check loc target #4'); $this->assertEquals(0.4, $data['priority'], 'check priority #4'); break; } \XLite\Core\Database::getRepo('XLite\\Model\\Config')->createOption(array('category' => 'CDev\\XMLSitemap', 'name' => 'welcome_priority', 'value' => 0.28)); \XLite\Core\Config::updateInstance(); $iterator = new \XLite\Module\CDev\XMLSitemap\Logic\SitemapIterator(); foreach ($iterator as $data) { $this->assertEquals('main', $data['loc']['target'], 'check loc target #5'); $this->assertEquals(0.3, $data['priority'], 'check priority #5'); break; } }
/** * testProductDetailsPage * * @return void * @see ____func_see____ * @since 1.0.0 */ public function testProductDetailsPage() { $this->prepareTaxes(); $product = $this->getTestProduct(); // ==================================================== // Switch on option 'Display "inc/ex VAT" labels next to prices' \XLite\Core\Database::getRepo('\\XLite\\Model\\Config')->createOption(array('name' => 'display_inc_vat_label', 'category' => 'CDev\\VAT', 'value' => 'Y')); // Switch off option 'Display "inc/ex VAT" labels next to prices' \XLite\Core\Database::getRepo('\\XLite\\Model\\Config')->createOption(array('name' => 'display_prices_including_vat', 'category' => 'CDev\\VAT', 'value' => 'N')); \XLite\Core\Config::updateInstance(); $price = $product->getNetPrice(); $price = number_format(round($price, 2), 2); // Check 'excluding VAT' text on products list $this->openAndWait('apparel'); $this->assertElementPresent('//ul[@class="product-price clearfix"]/li[@class="vat-price"]/span[@class="vat-note-product-price" and contains(text(), "excluding VAT")]', 'Text "excluding VAT not found on products list page"'); // Check 'excluding VAT' text on product details $this->openAndWait('store/product//product_id-' . $product->getProductId()); $this->assertElementPresent('//ul[@class="product-price clearfix"]/li/span[@class="price product-price" and text()="$' . $price . '"]', 'Wrong product price displayed (expected $' . $price . ') #3'); $this->assertElementPresent('//ul[@class="product-price clearfix"]/li[@class="vat-price"]/span[@class="vat-note-product-price" and contains(text(), "excluding VAT")]', 'Text "excluding VAT not found on product details page"'); // ==================================================== // Switch off option 'Display "inc/ex VAT" labels next to prices' \XLite\Core\Database::getRepo('\\XLite\\Model\\Config')->createOption(array('name' => 'display_inc_vat_label', 'category' => 'CDev\\VAT', 'value' => 'N')); \XLite\Core\Config::updateInstance(); // Check 'including VAT' text on products list $this->openAndWait('apparel'); $this->assertElementNotPresent('//ul[@class="product-price clearfix"]/li[@class="vat-price"]/span[@class="vat-note-product-price"]', 'Label "incl/excl VAT" unexpectedly found on products list page" #2'); // Check 'including VAT' text on product details $this->openAndWait('store/product//product_id-' . $product->getProductId()); $this->assertElementPresent('//ul[@class="product-price clearfix"]/li/span[@class="price product-price" and text()="$' . $price . '"]', 'Wrong product price displayed (expected $' . $price . ') #2'); $this->assertElementNotPresent('//ul[@class="product-price clearfix"]/li[@class="vat-price"]/span[@class="vat-note-product-price"]', 'Label "incl/excl VAT" unexpectedly found on product details page" #2'); // ==================================================== // Switch off option 'Display "inc/ex VAT" labels next to prices' \XLite\Core\Database::getRepo('\\XLite\\Model\\Config')->createOption(array('name' => 'display_inc_vat_label', 'category' => 'CDev\\VAT', 'value' => 'Y')); // Switch off option 'Display "inc/ex VAT" labels next to prices' \XLite\Core\Database::getRepo('\\XLite\\Model\\Config')->createOption(array('name' => 'display_prices_including_vat', 'category' => 'CDev\\VAT', 'value' => 'Y')); \XLite\Core\Config::updateInstance(); var_dump(\XLite\Core\Config::getInstance()->CDev->VAT->display_prices_including_vat); // Check 'including VAT' text on products list $this->openAndWait('apparel'); $this->assertElementPresent('//ul[@class="product-price clearfix"]/li[@class="vat-price"]/span[@class="vat-note-product-price" and contains(text(), "including VAT")]', 'Text "including VAT not found on products list page"'); // Check 'including VAT' text on product details $this->openAndWait('store/product//product_id-' . $product->getProductId()); $price = $product->getDisplayPrice(); $this->assertElementPresent('//ul[@class="product-price clearfix"]/li/span[@class="price product-price" and text()="$' . $price . '"]', 'Wrong product price displayed (expected $' . $price . ')'); $this->assertElementPresent('//ul[@class="product-price clearfix"]/li[@class="vat-price"]/span[@class="vat-note-product-price" and contains(text(), "including VAT")]', 'Text "including VAT not found on product details page"'); // ====================================================== // Add product to cart $this->click("//button[@class='bright add2cart']"); $this->waitForLocalCondition('jQuery(".product-details .product-buttons-added .buy-more").length > 0', 100000, 'check content reloading'); sleep(2); $this->clickAndWait('css=.lc-minicart .title a'); $this->assertElementPresent("//div[@id='cart']" . "/div[@id='cart-right']" . "/ul[@class='totals']" . "/li[contains(@class, 'order-modifier CDEV.VAT')]" . "/strong[text()='VAT:']", 'VAT not found in cart totals'); }
/** * Create new option / Update option value * * @param array $data Option data in the following format * * @return void * @throws \Exception */ public function createOption($data) { // Array of allowed fields and flag required/optional $fields = array('category' => 1, 'name' => 1, 'value' => 1, 'type' => 0, 'orderby' => 0); $errorFields = array(); foreach ($fields as $field => $required) { if (isset($data[$field])) { $fields[$field] = $data[$field]; } elseif ($required) { $errorFields[] = $field; } } if (!empty($errorFields)) { throw new \Exception('createOptions() failed: The following required fields are missed: ' . implode(', ', $errorFields)); } if (isset($fields['type']) && !$this->isValidOptionType($fields['type'])) { throw new \Exception('createOptions() failed: Wrong option type: ' . $type); } $option = $this->findOneBy(array('name' => $fields['name'], 'category' => $fields['category'])); // Existing option: unset key fields if ($option) { $option->setValue($fields['value']); } else { // Create a new option $option = new \XLite\Model\Config(); $option->map($fields); \XLite\Core\Database::getEM()->persist($option); } \XLite\Core\Database::getEM()->flush(); \XLite\Core\Config::updateInstance(); }
/** * Change storefront activity * * @param boolean $status Activity status OPTIONAL * * @return void */ protected function changeStorefrontActivity($status = true) { \XLite\Core\Database::getRepo('\\XLite\\Model\\Config')->createOption(array('category' => 'Internal', 'name' => 'shop_closed', 'value' => true === $status ? 'N' : 'Y')); \XLite\Core\Config::updateInstance(); }
/** * Get config * * @return \XLite\Core\Config */ protected function getConfig() { \XLite\Core\Config::updateInstance(); return \XLite\Core\Config::getInstance(); }
/** * prepareData * * @return void * @see ____func_see____ * @since 1.0.24 */ public static function prepareData() { // Prepare tax $taxes = \XLite\Core\Database::getRepo('XLite\\Module\\CDev\\VAT\\Model\\Tax')->findAll(); if (!empty($taxes)) { \XLite\Core\Database::getRepo('XLite\\Module\\CDev\\VAT\\Model\\Tax')->deleteInBatch($taxes); $taxes = \XLite\Core\Database::getRepo('XLite\\Module\\CDev\\VAT\\Model\\Tax')->findAll(); } $tax = \XLite\Core\Database::getRepo('XLite\\Module\\CDev\\VAT\\Model\\Tax')->insert(array('enabled' => true)); $taxes = \XLite\Core\Database::getRepo('XLite\\Module\\CDev\\VAT\\Model\\Tax')->findAll(); // Prepare memberships $memberships = \XLite\Core\Database::getRepo('XLite\\Model\\Membership')->findAll(); if (!empty($memberships)) { \XLite\Core\Database::getRepo('XLite\\Model\\Membership')->deleteInBatch($memberships); } foreach (self::$memberships as $m) { $newMembership = \XLite\Core\Database::getRepo('XLite\\Model\\Membership')->insert($m); } $memberships = \XLite\Core\Database::getRepo('XLite\\Model\\Membership')->findAll(); // Prepare zones $zones = \XLite\Core\Database::getRepo('XLite\\Model\\Zone')->findAll(); foreach ($zones as $k => $z) { if ($z->getIsDefault()) { unset($zones[$k]); } } if (!empty($zones)) { \XLite\Core\Database::getRepo('XLite\\Model\\Zone')->deleteInBatch($zones); } foreach (self::$zones as $z) { $newZone = \XLite\Core\Database::getRepo('XLite\\Model\\Zone')->insert(array('zone_name' => $z['zone_name'])); $zel = array(); foreach ($z['zone_elements'] as $ze) { $zel[] = \XLite\Core\Database::getRepo('XLite\\Model\\ZoneElement')->insert(array_merge($ze, array('zone' => $newZone))); } \XLite\Core\Database::getRepo('XLite\\Model\\Zone')->update($newZone, array('zone_elements' => $zel)); } $zones = \XLite\Core\Database::getRepo('XLite\\Model\\Zone')->findAll(); $tax->setVATZone($zones[1]); $tax->setVATMembership(null); // $memberships[0]); $tax->setName('VAT'); // Switch on option 'Display "inc/ex VAT" labels next to prices' \XLite\Core\Database::getRepo('\\XLite\\Model\\Config')->createOption(array('name' => 'display_inc_vat_label', 'category' => 'CDev\\VAT', 'value' => 'Y')); // Switch on option 'Display "inc/ex VAT" labels next to prices' \XLite\Core\Database::getRepo('\\XLite\\Model\\Config')->createOption(array('name' => 'display_prices_including_vat', 'category' => 'CDev\\VAT', 'value' => 'Y')); \XLite\Core\Config::updateInstance(); // Prepare product classes $classes = \XLite\Core\Database::getRepo('XLite\\Model\\ProductClass')->findAll(); if (!empty($classes)) { \XLite\Core\Database::getRepo('XLite\\Model\\ProductClass')->deleteInBatch($classes); } foreach (self::$classes as $c) { \XLite\Core\Database::getRepo('XLite\\Model\\ProductClass')->insert($c); } $classes = \XLite\Core\Database::getRepo('XLite\\Model\\ProductClass')->findAll(); // Prepare tax rates $taxRates = array(); foreach (self::$taxRates as $tr) { $trExt = array(); if (isset($tr['zone'])) { $trExt['zone'] = $zones[$tr['zone']]; } if (isset($tr['membership'])) { $trExt['membership'] = $memberships[$tr['membership']]; } if (isset($tr['productClass'])) { $trExt['productClass'] = $classes[$tr['productClass']]; } $trExt['tax'] = $taxes[0]; $newTaxRate = \XLite\Core\Database::getRepo('XLite\\Module\\CDev\\VAT\\Model\\Tax\\Rate')->insert(array('value' => $tr['value'], 'type' => $tr['type'], 'position' => $tr['position'])); \XLite\Core\Database::getRepo('XLite\\Module\\CDev\\VAT\\Model\\Tax\\Rate')->update($newTaxRate, $trExt); $taxRates[] = $newTaxRate; } \XLite\Core\Database::getRepo('XLite\\Module\\CDev\\VAT\\Model\\Tax')->update($taxes[0], array('rates' => $taxRates)); if (self::$showDebugInfo) { // Check the data structure $taxes = \XLite\Core\Database::getRepo('XLite\\Module\\CDev\\VAT\\Model\\Tax')->findAll(); var_dump(array('taxes count: ' => count($taxes))); $memberships = \XLite\Core\Database::getRepo('XLite\\Model\\Membership')->findAll(); $ms = array(); foreach ($memberships as $m) { $ms[] = array('id' => $m->getMembershipId(), 'name' => $m->getName()); } var_dump(array('memberships' => $ms)); $zones = \XLite\Core\Database::getRepo('XLite\\Model\\Zone')->findAll(); $zs = array(); foreach ($zones as $z) { $zelements = $z->getZoneElements(); $ze = array(); foreach ($zelements as $zel) { $ze[] = sprintf('%s: %s', $zel->getElementValue(), $zel->getElementType()); } $zs[] = array('name' => $z->getZoneName(), 'elements' => implode(', ', $ze)); } var_dump(array('zones' => $zs)); $classes = \XLite\Core\Database::getRepo('XLite\\Model\\ProductClass')->findAll(); $cs = array(); foreach ($classes as $c) { $cs[] = array('name' => $c->getName()); } var_dump(array('product_classes' => $cs)); $taxes = \XLite\Core\Database::getRepo('XLite\\Module\\CDev\\VAT\\Model\\Tax')->findAll(); $ts = array(); foreach ($taxes as $t) { $ts['id'] = $t->getId(); $ts['enabled'] = $t->getEnabled(); $taxRates = $t->getRates(); $trs = array(); foreach ($taxRates as $tr) { $trs[] = sprintf('%f%c: membership: %s; zone: %s; class: %s', $tr->getValue(), $tr->getType(), $tr->getMembership() ? $tr->getMembership()->getName() : 'n/a', $tr->getZone() ? $tr->getZone()->getZoneName() : 'n/a', $tr->getProductClass() ? $tr->getProductClass()->getName() : 'n/a'); } $ts['rates'] = $trs; } var_dump($ts); } }
/** * Save * * @param string $code Code * * @return void */ protected function saveCode($code) { if ("\r\n" != PHP_EOL) { $code = str_replace("\r\n", PHP_EOL, $code); } $code = str_replace(chr(194) . chr(160), ' ', $code); $file = $this->getFileName(); \Includes\Utils\FileManager::write($file, $code); if (\Includes\Utils\FileManager::isFileWriteable($file)) { \XLite\Core\TopMessage::addInfo('Your custom file is successfully saved'); \Includes\Utils\FileManager::deleteFile(str_replace('custom', 'custom.min', $file)); \XLite\Core\Database::getRepo('XLite\\Model\\Config')->createOption(array('name' => $this->getBackupName(), 'value' => $code, 'category' => 'XC\\ThemeTweaker')); \XLite\Core\Config::updateInstance(); $config = \XLite\Core\Config::getInstance()->Performance; if ($config->aggregate_css || $config->aggregate_js) { \Includes\Utils\FileManager::unlinkRecursive(LC_DIR_CACHE_RESOURCES); \XLite\Core\TopMessage::addInfo('Aggregation cache has been cleaned'); } } else { \XLite\Core\TopMessage::addError('The file {{file}} does not exist or is not writable.', array('file' => $file)); } }
/** * Update module settings * * @return void */ protected function doActionUpdate() { parent::doActionUpdate(); \XLite\Core\Config::updateInstance(); if ($this->settings->testConnection(false)) { $this->settings->importPaymentMethods(); } $page = $this->settings->isPageValid(\XLite\Core\Request::getInstance()->page) ? \XLite\Core\Request::getInstance()->page : $this->settings->getDefaultPage(); $this->setReturnURL($this->buildURL('xpc', null, array('page' => $page))); }
/** * Checks if first time configuration window should be displayed * * @return boolean */ public function isCredentialsRequested() { \XLite\Core\Config::updateInstance(); return (bool) \XLite\Module\XC\PitneyBowes\Model\Shipping\Processor\PitneyBowes::getProcessorConfiguration()->credentials_requested; }