minishop2 email менеджеру
Подскажите в какую сторону копать, нужно реализовать отправку писем о сделанном заказе — различным менеджерам в зависимости от пользователя купившего товар, то-есть пользователь-1 и пользователь-2 получают письмо от менеджера указанного в ms2_email_manager, но пользователь-3 должен получить письмо от email указанного в скрипте.
Комментарии: 4
если я не ошибаюсь за email менеджера отвечает скрипт .\core\components\minishop2\model\minishop2\minishop2.class.php, все верно?
а именно код:
а именно код:
$emails = array_map('trim', explode(',', $this->modx->getOption('ms2_email_manager', null, $this->modx->getOption('emailsender'))));
if (!empty($subject)) {
foreach ($emails as $email) {
if (preg_match('/^[^@а-яА-Я]+@[^@а-яА-Я]+(?<!\.)\.[^\.а-яА-Я]{2,}$/m', $email)) {
//$this->sendEmail($email, $subject, $body);
$this->sendEmailAttach($email, $subject, $filename, $body);
}
}
}
Ниже участок кода отвечающий за письмо менеджеру, в самом начале я пологаю можно вставить зависимость. где-то здесь
if ($status->get('email_manager')) {
предполжим для пользователя 1@1.com нужно слать письмо на 2@2.com, а для пользователя 3@3.com скрипт должен отрабатывать дефолтный сценарий.if ($status->get('email_manager')) {
$subject = '';
$user = $order->getOne('User');
if ($user) {
$user = $user->getOne('Profile');
}
$address = $order->getOne('Address');
$delivery = $order->getOne('Delivery');
$payment = $order->getOne('Payment');
$currency = $this->modx->getOption('cu_currency');
$percent = 0;
$percent_record = $this->modx->getObject('cUserFieldsUserPercent', array(
'user_id' => $user->id
));
if($percent_record)
$percent = $percent_record->percent;
$pls['percent'] = $percent;
$pls['currency'] = strtolower($currency);
if ($chunk = $this->modx->newObject('modChunk', array('snippet' => $status->get('subject_manager')))){
$chunk->setCacheable(false);
$subject = $this->processTags($chunk->process($pls));
}
$body = 'no chunk set';
if ($chunk = $this->modx->getObject('modChunk', $status->get('body_manager'))) {
$chunk->setCacheable(false);
$body = $this->processTags($chunk->process($pls));
}
$filename = MODX_CORE_PATH . "../orders/" . $order->num . ".csv";
if(!file_exists($filename)){
$file = fopen($filename,"w+");
$list = array(
"Заказ," . $order->num,
"Логин," . $user->email,
"РРјСЏ/Название," . $user->fullname,
"Адрес доставки," . $address->region . " " . $address->city . " " . $address->street . " " . $address->building . " " . $address->room,
"Контактный телефон," . $address->phone,
"Примечание," . $address->comment,
"Способ оплаты," . $payment->name,
"Способ доставки," . $delivery->name,
"№,Модель,Код,Цвет,Размер,Размерный код,Кол-во,Цена,Цена со скидкой,Пользовательская цена"
);
//fprintf($file, chr(0xEF).chr(0xBB).chr(0xBF));
foreach($list as $l){
fputcsv($file, explode(",", $l), ";");
}
$q = $this->modx->newQuery('msOrderProduct');
$q->where(array(
'order_id' => $order_id
));
$products = $this->modx->getCollection('msOrderProduct', $q);
if($products){
$i = 1;
$data = array();
$productTable = $this->modx->getTableName('msProductData');
if($percent > 0)
$pls['cart_cost'] = 0;
foreach($products as $pr){
$options = json_decode($pr->options);
$query = $this->modx->prepare("SELECT * FROM {$productTable} WHERE `id`='{$options->product_id}' LIMIT 1");
$query->execute();
$product_data = $query->fetchAll(PDO::FETCH_ASSOC);
if(is_array($product_data) && !empty($product_data)){
$price_snippet = $this->modx->getOption('cu_price_snippet');
if(isset($price_snippet)){
$prices = $this->modx->runSnippet($price_snippet, array(
'id' => $product_data[0]['id'],
'outputPrices' => 1,
'parent' => 1,
'link' => 1,
'user_id' => $user->id,
'defaultUser' => 'user',
'type_snippet' => 'getPriceDiscountTypes'
));
//print_r($prices);
if(!empty($prices)){
$data[] = $i . ';' . $product_data[0]['model_number'] . ';' . $product_data[0]['article'] . ';' . $product_data[0]['color'] . ';' . $product_data[0]['size'] . ';' . $product_data[0]['rcode'] . ';' . $pr->count . ';' . $prices['price'] . ';' . $prices['discount'] . ';' . $prices['user_price'] . ';' . $currency;
if($percent > 0 && $prices['user_price'] > 0){
$pls['cart_cost'] += $prices['user_price'] * $pr->count;
}
}
else{
$data[] = $i . ';' . $product_data[0]['model_number'] . ';' . $product_data[0]['article'] . ';' . $product_data[0]['color'] . ';' . $product_data[0]['size'] . ';' . $product_data[0]['rcode'] . ';' . $pr->count . ';' . $pr->cost . ';;;' . $currency;
}
}
else{
$data[] = $i . ';' . $product_data[0]['model_number'] . ';' . $product_data[0]['article'] . ';' . $product_data[0]['color'] . ';' . $product_data[0]['size'] . ';' . $product_data[0]['rcode'] . ';' . $pr->count . ';' . $pr->cost . ';;;' . $currency;
}
$i++;
}
}
if(!empty($data)){
foreach($data as $d){
fputcsv($file, explode(";", $d), ";");
}
}
}
$footer[] = 'Общая стоимость:,' . $pls['cart_cost'];
$footer[] = 'Пользовательская скидка:,' . $percent;
foreach($footer as $foot){
fputcsv($file, explode(",", $foot), ";");
}
fclose($file);
$text = file_get_contents($filename);
$text = iconv('UTF-8', 'WINDOWS-1251', $text);
file_put_contents($filename, $text);
}
$emails = array_map('trim', explode(',', $this->modx->getOption('ms2_email_manager', null, $this->modx->getOption('emailsender'))));
if (!empty($subject)) {
foreach ($emails as $email) {
if (preg_match('/^[^@Р°-СЏРђ-РЇ]+@[^@Р°-СЏРђ-РЇ]+(?<!\.)\.[^\.Р°-СЏРђ-РЇ]{2,}$/m', $email)) {
//$this->sendEmail($email, $subject, $body);
$this->sendEmailAttach($email, $subject, $filename, $body);
}
}
}
}
Все доделал, к концу дня выложу по пунктам, как присвоить email менеджера для каждого конкретного пользователя через удобное поле в админке. Удобно для распределения почты между оптом и розницей. Оптовые заказы от определенных пользователей идут определенному менеджеру а розница по дефолтному.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.