CS-Cart Multi-Vendor

CS-Cart Multi-Vendor 4.18.3

Нет прав для скачивания
Многофункциональный интернет магазин.

baltun

Администратор
Сообщения
12.358
Реакции
3.103
Баллы
1.833
Пользователь baltun разместил новый ресурс:

CS-Cart MultiVendor - Многофункциональный интернет магазин.

CS-Cart Multi-Vendor - позволяет создавать не просто интернет-магазины, а целые виртуальные торговые центры.

Основные особенности CS-Cart Multi-Vendor
  • Возможность продавать товары различных поставщиков в одном магазине. Таким образом, интернет-магазин становится виртуальным торговым центром с огромным количеством товаров со всего мира.
  • Если в заказе присутствуют товары разных поставщиков, то они автоматически подразделяются на подзаказы. Каждый подзаказ содержит...

Узнать больше об этом ресурсе...
 
baltun обновил ресурс CS-Cart Ultimate/Multi-Vendor новой записью:

4.11.5

  • License key: XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
Новый модуль CommerceML
В 4.11.5 мы добавили новый модуль CommerceML. Он пока с пометкой [Dev]. Это означает, что модуль всё ещё в разработке: появятся или пропадут какие-то настройки, добавятся какие-то возможности, будет тщательнее проверен обмен с разными системами, и т.д.

При этом старый модуль CommerceML тоже остался. Так все желающие помочь в разработке смогут попробовать новый модуль и дать обратную связь уже...

Посмотреть подробности об этом обновлении...
 
Пробную версию можно скачать
Вводите любые данные и на почту приходит ссылка. Далее можно занулить самостоятельно, но не рекомендую это делать если вы хотите работать официально.

Инструкция как сделать нулл своими руками (только для ознакомления)

app\functions\fn.init.php
Найти и удалить:
PHP:
PHP:
foreach ($core_hashes as $hash => $file) {

if ($hash != sha1_file($dir_root . strrev(str_rot13($file['file'])))) {

if (filemtime($dir_root . strrev(str_rot13($file['file']))) < TIME - SECONDS_IN_DAY * 2) { // 2-days cache

Tygh::$app['cache']->regenerate($hash, $file['file']);

 }

fn_process_cache_notifications($file['notice']);

 break;

}

}
app\Tygh\Helpdesk.php
1) Найти:
PHP:
PHP:
if (empty($license_number)) {

            $uc_settings = Settings::instance()->getValues('Upgrade_center');

            $license_number = $uc_settings['license_number'];

        }

        $store_mode = fn_get_storage_data('store_mode');

        if (empty($license_number) && !in_array($store_mode, ['trial', 'free'])) {

            return 'LICENSE_IS_INVALID';

        }

        $store_ip = fn_get_ip();

        $store_ip = $store_ip['host'];

        $request = [

            'license_number'   => $license_number,

            'ver'              => PRODUCT_VERSION,

            'product_status'   => PRODUCT_STATUS,

            'product_build'    => strtoupper(PRODUCT_BUILD),

            'edition'          => isset($extra_fields['edition'])

                ? $extra_fields['edition']

                : PRODUCT_EDITION,

            'lang'             => strtoupper(CART_LANGUAGE),

            'store_uri'        => fn_url('', 'C', 'http'),

            'secure_store_uri' => fn_url('', 'C', 'https'),

            'https_enabled'    => (Registry::get('settings.Security.secure_storefront') === YesNo::YES || Registry::get('settings.Security.secure_admin') === YesNo::YES)

                ? 'Y'

                : 'N',

            'admin_uri'        => str_replace(fn_get_index_script('A'), '', fn_url('', 'A', 'http')),

            'store_ip'         => $store_ip,

            'store_mode'       => strtoupper(isset($extra_fields['store_mode'])

                ? $extra_fields['store_mode']

                : $store_mode

            ),

        ];

        $request = array(

            'Request@action=check_license@api=3' => array_merge($extra_fields, $request),

        );

$request = '<?xml version="1.0" encoding="UTF-8"?>' . fn_array_to_xml($request);

        Registry::set('log_cut', Registry::ifGet('config.demo_mode', false));

        $data = Http::get(Registry::get('config.resources.updates_server') . '/index.php?dispatch=product_updates.check_available', array('request' => $request), array(

            'timeout' => 10

        ));

        if (empty($data)) {

            $data = fn_get_contents(Registry::get('config.resources.updates_server') . '/index.php?dispatch=product_updates.check_available&request=' . urlencode($request));

        }

        $_SESSION['license_information'] = $data;

        if (empty($license_number) && !fn_allowed_for('ULTIMATE:FREE')) {

            return 'LICENSE_IS_INVALID';

        }

        return $data;
Заменить:
PHP:
PHP:
Registry::set('log_cut', false);

return 'ACTIVE';

2) Найти:
PHP:
PHP:
$updates = $messages = $license = '';

        $params = $restrictions = [];

        if (!empty($data)) {

            // Check if we can parse server response

            if (strpos($data, '<?xml') !== false) {

                $xml = simplexml_load_string($data);

                $updates = (string) $xml->Updates;

                $messages = $xml->Messages;

                $license = (string) $xml->License;

                if (isset($xml->TrialExpiryTime)) {

                    $params['trial_expiry_time'] = (int) $xml->TrialExpiryTime;

                }

                if (isset($xml->TrialLeftTime)) {

                    $params['trial_left_time'] = (int) $xml->TrialLeftTime;

                }

                if (isset($xml->AllowedNumberOfStores)) {

                    fn_set_storage_data('allowed_number_of_stores', (int) $xml->AllowedNumberOfStores);

                } else {

                    fn_set_storage_data('allowed_number_of_stores', null);

                }

                if (isset($xml->Restrictions)) {

                    $json_restrictions = json_encode($xml->Restrictions);

                    $restrictions = json_decode($json_restrictions, true);

                    fn_set_storage_data('restrictions', serialize($restrictions));

                } else {

                    fn_set_storage_data('restrictions', '');

                }

                if (isset($xml->LicenseKey)) {

                    Settings::instance()->updateValue('license_number', (string) $xml->LicenseKey, '', false, null, false);

                }

                if (isset($xml->FreeMode) && fn_allowed_for('ULTIMATE:FREE') && YesNo::isFalse(fn_get_storage_data('free_mode', false))) {

                    fn_set_storage_data('free_mode', YesNo::YES);

                }

                if (isset($xml->LatestAvailableVersion)) {

                    fn_set_storage_data('latest_available_version', (string) $xml->LatestAvailableVersion->Version);

                    fn_set_storage_data('latest_available_version_timestamp', (string) $xml->LatestAvailableVersion->Timestamp);

                }

            } else {

                $license = $data;

            }

        }

        if (!empty($auth)) {

            if (Registry::get('settings.General.auto_check_updates') === YesNo::YES &&

                fn_check_user_access($auth['user_id'], 'upgrade_store') &&

                $updates == 'AVAILABLE'

            ) {

                /** @var \Tygh\NotificationsCenter\NotificationsCenter $notifications_center */

                $notifications_center = Tygh::$app['notifications_center'];

                $notifications_center->add([

                    'user_id'    => $auth['user_id'],

                    'title'      => __('notification.upgrade_available.title'),

                    'message'    => __('notification.upgrade_available.message', [

                        '[product]' => PRODUCT_NAME,

                    ]),

                    'area'       => 'A',

                    'section'    => NotificationsCenter::SECTION_ADMINISTRATION,

                    'tag'        => NotificationsCenter::TAG_UPDATE,

                    'action_url' => fn_url('upgrade_center.manage'),

                    'language_code' => Registry::get('settings.Appearance.backend_default_language'),

                ]);

            }

            if (!empty($data)) {

                $_SESSION['last_status'] = $license;

            }

        }

        $messages = self::processMessages($messages, $process_messages, $license);

        return [$license, $updates, $messages, $params, $restrictions];
Заменить:
PHP:
PHP:
$_SESSION['last_status'] = 'ACTIVE';

return array('ACTIVE', 'NO UPDATES', '', []);

3) Найти:
PHP:
PHP:
$request = array(

            'Request@action=registerLicense@api=2' => array(

                'product_type' => PRODUCT_EDITION,

                'domain' => Registry::get('config.http_host'),

                'first_name' => $license_data['first_name'],

                'last_name' => $license_data['last_name'],

                'email' => $license_data['email'],

            ),

        );

$request = '<?xml version="1.0" encoding="UTF-8"?>' . fn_array_to_xml($request);

        $data = Http::get(Registry::get('config.resources.updates_server') . '/index.php?dispatch=licenses_remote.add', array('request' => $request), array(

            'timeout' => 10

        ));

        if (empty($data)) {

            $data = fn_get_contents(Registry::get('config.resources.updates_server') . '/index.php?dispatch=licenses_remote.create&request=' . urlencode($request));

        }

        $result = $messages = $license = '';

        if (!empty($data)) {

            // Check if we can parse server response

            if (strpos($data, '<?xml') !== false) {

                $xml = simplexml_load_string($data);

                $result = (string) $xml->Result;

                $messages = $xml->Messages;

                $license = (array) $xml->License;

            }

        }

        self::processMessages($messages, true, $license);

        return array($result, $license, $messages);
Заменить:
PHP:
PHP:
return array('', 'ACTIVE', '');
4) Найти:
PHP:
PHP:
$request = array(

            'dispatch' => 'product_updates.check_storeimport_available',

            'license_key' => $license_number,

            'ver' => $version,

            'edition' => $edition,

        );

        $data = Http::get(Registry::get('config.resources.updates_server'), $request, array(

            'timeout' => 10

        ));

        if (empty($data)) {

            $data = fn_get_contents(Registry::get('config.resources.updates_server') . '/index.php?' . http_build_query($request));

        }

        $result = false;

        if (!empty($data)) {

            // Check if we can parse server response

            if (strpos($data, '<?xml') !== false) {

                $xml = simplexml_load_string($data);

                $result = ((string) $xml == 'Y') ? true : false;

            }

        }

        return $result;
Заменить:
PHP:
PHP:
return true;
5) Найти:
PHP:
PHP:
$license_status = 'LICENSE_IS_INVALID';

$store_mode = '';

$messages = [];

if (fn_allowed_for('MULTIVENDOR')) {

$store_modes_list = ['', 'plus', 'ultimate', 'enterprise'];

} else {

$store_modes_list = ['free', '', 'ultimate', 'enterprise'];

 }

foreach ($store_modes_list as $store_mode) {

$extra['store_mode'] = $store_mode;

$data = Helpdesk::getLicenseInformation($license_number, $extra);

list($license_status, , $messages, , $restrictions) = Helpdesk::parseLicenseInformation($data, $auth, false);

if ($license_status == 'ACTIVE') {

 break;

}

 }

return [$license_status, $messages, $store_mode, $restrictions];
Заменить:
PHP:
PHP:
$extra['store_mode'] = 'multivendor';

return [ 'ACTIVE', '', 'multivendor' ];

6) Найти и удалить:
PHP:
PHP:
if ($storefronts_limit = fn_get_storage_data('allowed_number_of_stores')) {

/** @var \Tygh\Storefront\Repository $repository */

$repository = Tygh::$app['storefront.repository'];

$storefronts_count = $repository->getCount();

return $storefronts_count >= $storefronts_limit;

}

7) Найти и удалить:
PHP:
PHP:
$uc_settings = Settings::instance()->getValues('Upgrade_center');

$license_number = $uc_settings['license_number'];

if ($license_number) {

$metrics = fn_get_schema('reporting', 'metrics');

foreach ($metrics as &$value) {

if (is_callable($value)) {

$value = call_user_func($value);

}

}

unset($value);

$logging = Http::$logging;

Http::$logging = false;

Http::post(

Registry::get('config.resources.updates_server') . '/index.php?dispatch=license_tracking.report',

 array(

'metrics' => $metrics,

'license_number' => $license_number

 ),

 array(

'timeout' => 10

)

 );

Http::$logging = $logging;

}

8) Найти:
PHP:
PHP:
if (!isset($request['token'])) {

return false;

 }

$validation_params = array_merge([

'dispatch' => 'validators.validate_request',

'token'    => $request['token'],

], $additional_validation_params);

$validator_url = Registry::get('config.resources.updates_server') . '/index.php';

$log_cut = Registry::ifGet('log_cut', false);

Registry::set('log_cut', true);

$validator_response = Http::get($validator_url, $validation_params);

Registry::set('log_cut', $log_cut);

$validator_response = strtolower(trim($validator_response));

return $validator_response === 'valid';
Заменить:
PHP:
PHP:
return 'valid';
9) Найти и удалить:
PHP:
PHP:
/** @var \Tygh\SoftwareProductEnvironment $software */

$software = Tygh::$app['product.env'];

if ($format === 'json') {

$version = [

'product_name'   => $software->getProductName(),

'version'        => $software->getProductVersion(),

'product_status' => $software->getProductStatus(),

'product_build'  => $software->getProductBuild(),

'store_mode'     => $software->getStoreMode(),

 ];

if (YesNo::toBool($get_last_action)) {

$version['last_action'] = self::getLastAction();

 }

$version_string = json_encode($version);

} else {

$version_string = $software->getProductName() . ' <b>' . $software->getProductVersion() . ' ';

if ($software->getProductStatus() !== '') {

$version_string .= ' (' . $software->getProductStatus() . ')';

}

if ($software->getProductBuild()) {

$version_string .= ' ' . $software->getProductBuild();

}

$version_string .= '</b>';

 }

if ($stop_execution) {

echo $version_string;

exit(0);

 }

return $version_string;
В \config.php
1) Найти:
PHP:
PHP:
define('PRODUCT_STATUS', '');
Заменить:
PHP:
PHP:
define('PRODUCT_STATUS', 'ACTIVE');
После этого вводим любой ключ и проходит активация без проблем. Отключаем в настройках автоматическое обновление.
 
Последнее редактирование модератором:
Назад
Верх Низ