4.10.1 Rc Is Available—Try The New Version Before The Official Release

must have field like sku

Only products without CODE entered are affected by this issue

We have released version 4.10.1 RC (Release Candidate). It will be useful to:

  • add-on and theme developers—they can test their products in advance to prepare for 4.10.1;
  • the merchants who are interested to see how the new version will work, and what they’ll have to do during the upgrade.
---------------------

The full list of changes is very long, so we left it in the changelog and in the post-upgrade notifications. We also have an article about technical changes for developers. Below you’ll find only the major changes that are definitely worth looking into:

Product variations are out of beta. Variations are now based on features instead of options. This change makes variations more useful, but requires the conversion of the old variations and option combinations into “variations 2.0”. Version 4.10.1 RC lets you see in advance how this conversion will work.

New “Lite Checkout” introduced. The old step-by-step checkout is now a separate add-on. We won’t change checkout page without your consent. If you upgrade from an earlier version, disable the Step-by-Step Checkout add-on, and you’ll get the new checkout configured for you. The new checkout page can be configured via block manager. To do it, go to Design → Layouts and switch to the Checkout tab.

The Store locator add-on has been expanded greatly, and it is now called Stores and pickup points. It allows you to create a shipping method that uses your store locations as selectable pickup points for customers to choose from.

Instead of keeping the map settings in different add-ons, we now have one add-on called Maps and geolocation. It handles what map provider your store uses. Google Maps and Yandex.Maps are available.


---------------------

The best way to try 4.10.1 RC is to upgrade from the previous version:

1. Make sure that your store runs on 4.9.3 SP1.

2. Create a dev copy of your store. Make sure to close the storefront. It is a requirement for a dev copy, while you are still using your own key.

Don’t upgrade your live store to 4.10.1 RC1—there won’t be an upgrade from any RC to the final 4.10.1 release.

3. In your test copy, go to Settings → Licensing mode and change the key to the one that matches your product:


CS-Cart: CS-BETA-277W-86C6-4NZS-ZXB7
Multi-Vendor: MV-PL-BETA-3NZ1-RP6D-6897-9297


For Russian versions, please refer to the announcement at the Russian forum.

These keys will only have one upgrade: from 4.9.3 SP1 to 4.10.1 RC1 (and any subsequent RCs of 4.10.1). Once the testing is over, we will disable these keys. When you enter and save them, you’ll no longer need to keep the storefront closed. But it’s best to open in after step 4.

4. Install the upgrade. After the upgrade you’ll see notifications about the changes. They’ll tell you what to do and check next.

5. (optional for Multi-Vendor users and developers) Try the upcoming Multi-Vendor Ultimate. To do it, change the key on your dev copy to MV-ULT-BETA-0G3H-1CA2-Y5XI-5J5F after you upgrade to 4.10.1 RC1.


If you can’t upgrade a test copy for any reason, you’ll still be able to try 4.10.1 RC as a new installation. Just download CS-Cart 4.10.1 RC or Multi-Vendor 4.10.1 RC and use the corresponding keys provided above.

---------------------

Feel free to discuss 4.10.1 RC, possible issues, and especially the actions that are required after the upgrade, in this topic.

P.S. We have also released RC2 and RC3.

I am not able to upgrade. I encountered the following error during the upgrade process:

Upgrade process of your store has failed

Please restore the pre-upgrade backup manually or via a link sent to your email address, then contact our technical support.

Tech details: Couldn't complete migration 20190326181751_core_mve_create_default_storefront.php. Reason: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1.

Completed migrations: 37 out of 45.

2- if addon is inactive and to continue setup gives an error

20190326181751_core_mve_create_default_storefront.php

Reason:You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1.

Hi, were you able to fix this error? I am stuck at the same message.

I hope one of CS-Cart team lends a hand of help.

Hi, were you able to fix this error? I am stuck at the same message.

I hope one of CS-Cart team lends a hand of help.

No one reach me and fix this error. Maybe i havent got a support credit soo that reason no one hear me i dont know.

Hello.

Can you paste this migration file here (20190326181751_core_mve_create_default_storefront.php)? We can try to correct it and load the migration manually regardless of the upgrade.

Best regards

Robert

Hello.

Can you paste this migration file here (20190326181751_core_mve_create_default_storefront.php)? We can try to correct it and load the migration manually regardless of the upgrade.

Best regards

Robert

Hi,

Here you go!

use Phinx\Migration\AbstractMigration;

class CoreMveCreateDefaultStorefront extends AbstractMigration
{
/**
* Migrate Up.
*/
public function up()
{
$options = $this->adapter->getOptions();
$pr = $options[‘prefix’];

    $section = $this->fetchRow(
        "SELECT section_id FROM {$pr}settings_sections WHERE name = 'General'"
    );
    $store_access_key_setting = $this->fetchRow(
        "SELECT object_id FROM {$pr}settings_objects WHERE name = 'store_access_key' AND section_id = {$section['section_id']}"
    );

    $access_key = $this->fetchRow(
        "SELECT value FROM {$pr}settings_objects"
        . " WHERE object_id = {$store_access_key_setting['object_id']}"
    );
    if (!$access_key) {
        $access_key = '';
    }

    $access_key = addslashes($access_key['value']);

    $this->query(
        "INSERT INTO {$pr}storefronts (url, redirect_customer, status, access_key, is_default)"
        . " VALUES ('', 'N', 'Y', '{$access_key}', 'Y')"
    );
}

}

Thank you so much.

Hello

Please attach also /var/upgrade/core_log.txt

Best regards

Robert

when planned release final version ?

Hello

Please attach also /var/upgrade/core_log.txt

Best regards

Robert

Hi Robert,

Below is the content of the log file related to the error.

2019-05-11 16:36:34:  == 20190326135315 CoreAddStorefrontsTables: migrated 0.0206s
2019-05-11 16:36:34: 
2019-05-11 16:36:34:  == 20190326181751 CoreMveCreateDefaultStorefront: migrating
2019-05-11 16:36:34: Tygh\Exceptions\DatabaseException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 in /app/Tygh/UpgradeCenter/Phinx/MysqliAdapter.php:166
Stack trace:
#0 /app/Tygh/UpgradeCenter/Phinx/MysqliAdapter.php(150): Tygh\UpgradeCenter\Phinx\MysqliAdapter->onQueryError('SELECT value FR...')
#1 /app/lib/vendor/robmorgan/phinx/src/Phinx/Migration/AbstractMigration.php(177): Tygh\UpgradeCenter\Phinx\MysqliAdapter->fetchRow('SELECT value FR...')
#2 /var/upgrade/packages/core/content/migrations/20190326181751_core_mve_create_default_storefront.php(24): Phinx\Migration\AbstractMigration->fetchRow('SELECT value FR...')
#3 /app/lib/vendor/robmorgan/phinx/src/Phinx/Migration/Manager/Environment.php(116): CoreMveCreateDefaultStorefront->up()
#4 /app/lib/vendor/robmorgan/phinx/src/Phinx/Migration/Manager.php(210): Phinx\Migration\Manager\Environment->executeMigration(Object(CoreMveCreateDefaultStorefront), 'up')
#5 /app/lib/vendor/robmorgan/phinx/src/Phinx/Migration/Manager.php(186): Phinx\Migration\Manager->executeMigration('development', Object(CoreMveCreateDefaultStorefront), 'up')
#6 /app/lib/vendor/robmorgan/phinx/src/Phinx/Console/Command/Migrate.php(100): Phinx\Migration\Manager->migrate('development', 20190425060629)
#7 /app/lib/vendor/symfony/console/Symfony/Component/Console/Command/Command.php(257): Phinx\Console\Command\Migrate->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Tygh\UpgradeCenter\Migrations\Output))
#8 /app/lib/vendor/symfony/console/Symfony/Component/Console/Application.php(874): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Tygh\UpgradeCenter\Migrations\Output))
#9 /app/lib/vendor/symfony/console/Symfony/Component/Console/Application.php(195): Symfony\Component\Console\Application->doRunCommand(Object(Phinx\Console\Command\Migrate), Object(Symfony\Component\Console\Input\ArgvInput), Object(Tygh\UpgradeCenter\Migrations\Output))
#10 /app/lib/vendor/robmorgan/phinx/src/Phinx/Console/PhinxApplication.php(80): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Tygh\UpgradeCenter\Migrations\Output))
#11 /app/lib/vendor/symfony/console/Symfony/Component/Console/Application.php(126): Phinx\Console\PhinxApplication->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Tygh\UpgradeCenter\Migrations\Output))
#12 /app/Tygh/UpgradeCenter/Migrations/Migration.php(101): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Tygh\UpgradeCenter\Migrations\Output))
#13 /app/Tygh/UpgradeCenter/App.php(724): Tygh\UpgradeCenter\Migrations\Migration->__call('migrate', Array)
#14 /app/Tygh/UpgradeCenter/App.php(452): Tygh\UpgradeCenter\App->installUpgradePackage('core', Array)
#15 /app/controllers/backend/upgrade_center.php(133): Tygh\UpgradeCenter\App->install('core', Array)
#16 /app/functions/fn.control.php(669): include('...')
#17 /app/functions/fn.control.php(427): fn_run_controller('...', 'upgrade_center', 'install', '', '')
#18 /admin.php(27): fn_dispatch()
#19 {main}
2019-05-11 16:36:34: Failed to execute migrations

Thank you & Best Regards,

Alaa

Hello

I think the problem is in this query (Probably array store_access_key_setting array does not contain a key object_id);

  1. $access_key = $this->fetchRow(
  2. "SELECT value FROM {$pr}settings_objects"
  3. . " WHERE object_id = {$store_access_key_setting['object_id']}"
  4. );

Note that access_key can be empty so this query can be easily commented and wrote

$access_key = "";

Best regards

Robert

Hi Robert,

I replaced:

        $access_key = $this->fetchRow(
            "SELECT value FROM {$pr}settings_objects"
            . " WHERE object_id = {$store_access_key_setting['object_id']}"
        );

With:

        $access_key = ''; 

Unfortunately, I got a new error message in different file:

Tech details: Couldn't complete migration 20190326181933_core_add_storefront_settings_fallbacks.php. Reason: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1.

Here is the content of 20190326181933_core_add_storefront_settings_fallbacks.php
use Phinx\Migration\AbstractMigration;

class CoreAddStorefrontSettingsFallbacks extends AbstractMigration
{
/**
* Migrate Up.
*/
public function up()
{
$options = $this->adapter->getOptions();
$pr = $options[‘prefix’];

    $section = $this->fetchRow(
        "SELECT section_id FROM {$pr}settings_sections WHERE name = 'General'"
    );
    $store_access_key_setting = $this->fetchRow(
        "SELECT object_id FROM {$pr}settings_objects WHERE name = 'store_access_key' AND section_id = {$section['section_id']}"
    );
    $store_mode_setting = $this->fetchRow(
        "SELECT object_id FROM {$pr}settings_objects WHERE name = 'store_mode' AND section_id = {$section['section_id']}"
    );

    $this->query(
        "UPDATE {$pr}settings_objects"
        . " SET type = 'O', handler = 'fn_get_store_access_key_notice'"
        . " WHERE object_id = {$store_access_key_setting['object_id']}"
    );

    $this->query(
        "UPDATE {$pr}settings_objects"
        . " SET type = 'O', handler = 'fn_get_store_mode_notice'"
        . " WHERE object_id = {$store_mode_setting['object_id']}"
    );
}

}

Regards,
Alaa

Hello

Please comment this query or maybe try to set access_key in the store and then there will be no problems.

$this->query(
"UPDATE {$pr}settings_objects"
. " SET type = 'O', handler = 'fn_get_store_access_key_notice'"
. " WHERE object_id = {$store_access_key_setting['object_id']}"
);

Best regards

Robert.

Hello,

It worked only when commenting out both queries:

$this->query(
"UPDATE {$pr}settings_objects"
. " SET type = 'O', handler = 'fn_get_store_access_key_notice'"
. " WHERE object_id = {$store_access_key_setting['object_id']}"
);

$this->query(
"UPDATE {$pr}settings_objects"
. " SET type = 'O', handler = 'fn_get_store_mode_notice'"
. " WHERE object_id = {$store_mode_setting['object_id']}"
);

The store has been upgraded successfuly now. However, It is always closed. I cannot view it. I tried to uncheck Close Storefront option with no luck. Changing access key doensn't work either. Even in the backend, when the close storefront option is unchecked, the admin area color still in brown (means it is close). https://prnt.sc/nn8ctn

Regards,

Alaa

First of all, thank you for your feedback. I've split the post in 2 parts.


I'll list these 2 points on our internal tracking system. I can't promise that we'll address them before the final release of 4.10.1, but these look as reasonable "feature requests".


These points can already be modified easily, without any code changes.

3. That's controversial. We've collected many opinions about the checkout over the past few months, and different people had different thoughts as to what fields should come first. Both approaches have their pros and cons. That's why we added the ability to change the order of blocks via the block manager (as described here). That way, every store owner can position these blocks as he or she sees fit.

4. As far as I understand, you want to make the steps more distinct. It's possible with the block manager too. Just open the settings of the necessary blocks (via gear icons) and select H2 wrappers for them. This will add headings to particular sections of your checkout page. Headings have the same names as the blocks, and you can change those.

Thank you for the answers and very happy to see the blocked approach so that anyone can customise it the way they want.

4.10.1 is using too old phone mask javascript library.

The format of South Korea phone numbers are +82-##-###-#### and +82-##-####-####. The latter is commonly used, but the json file has only +82-##-###-#### format. It needs to be fixed since we only ship to South Korea.

Thanks.

or adding an option to disabling mask would be great too, because there are some stores ship to only one country and they don't need country code for phone number.

4.10.1 is using too old phone mask javascript library.

The format of South Korea phone numbers are +82-##-###-#### and +82-##-####-####. The latter is commonly used, but the json file has only +82-##-###-#### format. It needs to be fixed since we only ship to South Korea.

Thanks.

How customers select their profile on checkout page when they have more than 2 profiles?

on new checkout page

How customers select their profile on checkout page when they have more than 2 profiles?

The Full Name field of the new checkout page assumes that the name value is separated by a space and the first word is a first name and second word is a last name. I've checked that cs-cart updates this full name value into customer's profile first and last name automatically when typed. But not all full names are separated by space and start with first name. Some countries(ex. Korea) don't separate first and last name and last name comes first. CS-cart is designed to sell globally, but the full name field does not fit this global format.

I thinks if profile and billing address only have a full name field without first and last name field, customers can type whatever they want for name without worrying about formatting.

also i asked this to cs team in this topic still no answer here. how to manage multiple profiles on new checkout ?