Перенос заказов shopkeeper в shopkeeper3
Всем привет.
Может кому-то пригодится. Переносил заказы из shopkeeper в shopkeeper3, использовано на основе сниппета shk_fihook, через консоль. Предварительно сделав бекап таблицы в виде PHP файла.
Пример:
Сам сниппет для выполнения в консоли:
Может быть, кому-то пригодится легко расширяемый и можно добавлять ваши поля.
Может кому-то пригодится. Переносил заказы из shopkeeper в shopkeeper3, использовано на основе сниппета shk_fihook, через консоль. Предварительно сделав бекап таблицы в виде PHP файла.
Пример:
<?php
$modx_shopkeeper_orders = [
[
"id" => "1",
"combined_object" =>
'{"id": 1, "date": "2013-05-08 14:04:10.000000", "note": "", "addit": "a:2:{i:0;a:0:{}i:1;a:0:{}}", "email": "andchir@hotmail.ru", "phone": "555-555", "price": 600, "status": "0", "userid": 0, "allowed": "all", "content": "a:2:{i:0;a:8:{s:12:\\"catalogClass\\";s:11:\\"modResource\\";s:5:\\"count\\";d:1;s:2:\\"id\\";i:37;s:4:\\"link\\";s:56:\\"http://gkz2.ru/catalog/slonovaya-kost/evro-/-0,7-nf.html\\";s:4:\\"name\\";s:19:\\"Евро / 0,7 НФ\\";s:5:\\"price\\";d:0;s:2:\\"tv\\";a:0:{}s:6:\\"tv_add\\";a:2:{s:16:\\"parent.pagetitle\\";s:27:\\"Слоновая кость\\";s:9:\\"parent.id\\";i:22;}}i:1;a:8:{s:12:\\"catalogClass\\";s:11:\\"modResource\\";s:5:\\"count\\";d:1;s:2:\\"id\\";i:36;s:4:\\"link\\";s:55:\\"http://gkz2.ru/catalog/slonovaya-kost/ik-2-/-0,5nf.html\\";s:4:\\"name\\";s:16:\\"ИК-2 / 0,5НФ\\";s:5:\\"price\\";d:600;s:2:\\"tv\\";a:0:{}s:6:\\"tv_add\\";a:2:{s:16:\\"parent.pagetitle\\";s:27:\\"Слоновая кость\\";s:9:\\"parent.id\\";i:22;}}}", "payment": "", "contacts": "a:11:{s:5:\\"order\\";s:1:\\"1\\";s:7:\\"address\\";s:51:\\"г. Такой-то, ул. Такая-то, 10 - 20\\";s:6:\\"export\\";s:6:\\"нет\\";s:7:\\"company\\";s:23:\\"Моя компания\\";s:8:\\"fullname\\";s:48:\\"Фамилиев Имён Отчествович\\";s:5:\\"phone\\";s:7:\\"555-555\\";s:5:\\"email\\";s:18:\\"andchir@hotmail.ru\\";s:8:\\"question\\";s:17:\\"из газеты\\";s:7:\\"message\\";s:53:\\"Жду звонка для подтверждения\\";s:13:\\"submit_button\\";s:18:\\"Отправить\\";s:6:\\"nospam\\";s:0:\\"\\";}", "currency": "руб.", "delivery": "", "sentdate": "0000-00-00 00:00:00.000000", "tracking_num": ""}',
],
];
Сам сниппет для выполнения в консоли:
<?php
include $_SERVER["DOCUMENT_ROOT"] . "/text.php";
$data = [];
if (!defined("SHOPKEEPER_PATH")) {
define("SHOPKEEPER_PATH", MODX_CORE_PATH . "components/shopkeeper3/");
}
//Определяем параметры сниппета Shopkeeper
$sys_property_sets = $modx->getOption(
"shk3.property_sets",
$modx->config,
"default"
);
$sys_property_sets = explode(",", $sys_property_sets);
$propertySetName = trim(current($sys_property_sets));
$snippet = $modx->getObject("modSnippet", ["name" => "Shopkeeper3"]);
$properties = $snippet->getProperties();
if (
$propertySetName != "default" &&
$modx->getCount("modPropertySet", ["name" => $propertySetName]) > 0
) {
$propSet = $modx->getObject("modPropertySet", ["name" => $propertySetName]);
$propSetProperties = $propSet->getProperties();
if (is_array($propSetProperties)) {
$properties = array_merge($properties, $propSetProperties);
}
}
$lang = $modx->getOption("lang", $properties, "ru");
$modx->getService("lexicon", "modLexicon");
$modx->lexicon->load($lang . ":shopkeeper3:default");
require_once SHOPKEEPER_PATH . "model/shopkeeper.class.php";
foreach ($modx_shopkeeper_orders as $index => $item) {
$shopCart = new Shopkeeper($modx, $properties);
$dataFromDatabase = json_decode($item["combined_object"]);
$modx->addPackage("shopkeeper3", SHOPKEEPER_PATH . "model/");
//shopkeeper settings
$contacts_fields = [];
$response = $modx->runProcessor(
"getsettings",
["settings" => ["contacts_fields"]],
[
"processors_path" =>
$modx->getOption("core_path") .
"components/shopkeeper3/processors/mgr/",
]
);
if ($response->isError()) {
echo $response->getMessage();
}
if ($result = $response->getResponse()) {
$temp_arr = !empty($result["object"]["contacts_fields"])
? $result["object"]["contacts_fields"]
: [];
if (!empty($temp_arr)) {
foreach ($temp_arr as $opt) {
$contacts_fields[$opt["name"]] = $opt;
}
}
}
$userId = $dataFromDatabase->userid;
//Контактные данные
$contacts = [];
$allFormFields = unserialize($dataFromDatabase->contacts);
foreach ($allFormFields as $key => $val) {
if (in_array($key, array_keys($contacts_fields))) {
$temp_arr = [
"name" => $contacts_fields[$key]["name"],
"value" => $val,
"label" => $contacts_fields[$key]["label"],
];
array_push($contacts, $temp_arr);
}
}
$contacts = json_encode($contacts);
$emailField = $modx->getOption("fiarToField", $hook->config, "email");
$phoneField = $modx->getOption("phoneField", $hook->config, "phone");
$deliveryField = $modx->getOption(
"deliveryField",
$hook->config,
"shk_delivery"
);
$paymentField = $modx->getOption("paymentField", $hook->config, "payment");
$delivery_price = !empty($shopCart->delivery["price"])
? $shopCart->delivery["price"]
: 0;
$delivery_name = !empty($shopCart->delivery["label"])
? $shopCart->delivery["label"]
: "";
if (!$delivery_name) {
$delivery_name = !empty($allFormFields[$deliveryField])
? $allFormFields[$deliveryField]
: "";
}
//Сохраняем данные заказа
$order = $modx->newObject("shk_order");
$insert_data = [
"contacts" => $contacts,
"options" => "",
"price" => $dataFromDatabase->price,
"currency" => $dataFromDatabase->currency,
"date" => $dataFromDatabase->date,
"sentdate" => $dataFromDatabase->sentdate,
"note" => $dataFromDatabase->note,
"email" => isset($allFormFields[$emailField])
? $allFormFields[$emailField]
: "",
"delivery" => unserialize($dataFromDatabase->contacts)["shk_delivery"],
"delivery_price" => $delivery_price,
"payment" => isset($allFormFields[$paymentField])
? $allFormFields[$paymentField]
: "",
"tracking_num" => $dataFromDatabase->tracking_num,
"phone" => isset($allFormFields[$phoneField])
? $allFormFields[$phoneField]
: "",
"status" => $modx->getOption("shk3.first_status", null, "1"),
];
$insert_data["userid"] = $dataFromDatabase->userid;
$order->fromArray($insert_data);
$saved = $order->save();
$purchasesData = $shopCart->getProductsData(true);
$shopData = unserialize($dataFromDatabase->content);
foreach ($shopData as $key => $p_data) {
$options = !empty($p_data["options"])
? json_encode($p_data["options"])
: "";
$fields_data = !empty($purchasesData[$key]) ? $purchasesData[$key] : [];
$fields_data["url"] = !empty($p_data["link"]) ? $p_data["link"] : "";
unset($fields_data["id"]);
$fields_data_str = json_encode($fields_data);
$insert_data = [
"p_id" => $p_data["id"],
"order_id" => $order->id,
"name" => $p_data["name"],
"price" => $p_data["price"],
"count" => $p_data["count"],
"class_name" => $p_data["className"],
"package_name" => $p_data["packageName"],
"data" => $fields_data_str,
"options" => $options,
];
$purchase = $modx->newObject("shk_purchases");
$purchase->fromArray($insert_data);
$purchase->save();
}
$shopCart->setOrderDataSession($order->toArray());
$modx->invokeEvent("OnSHKChangeStatus", [
"order_ids" => [$order->id],
"status" => $order->status,
]);
$orderOutputData = $shopCart->getOrderData($order->id);
//OnSHKsaveOrder
$evtOut = $modx->invokeEvent("OnSHKsaveOrder", [
"order_id" => $order->get("id"),
]);
if (is_array($evtOut)) {
$orderOutputData .= implode("", $evtOut);
}
}
Может быть, кому-то пригодится легко расширяемый и можно добавлять ваши поля.
Комментарии: 4
Ты бы код в соответствующий тег обернул что ли, читать же невозможно.
И под cut портянку убери.
Для каких целей это нужно? 3й шопкипер выпущен 7 лет назад, давно не поддерживается и имеет достаточно много проблем. Если уже и переносить, то в минишоп =)
Поправил пост
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.