minishop2 email менеджеру

Подскажите в какую сторону копать, нужно реализовать отправку писем о сделанном заказе — различным менеджерам в зависимости от пользователя купившего товар, то-есть пользователь-1 и пользователь-2 получают письмо от менеджера указанного в ms2_email_manager, но пользователь-3 должен получить письмо от email указанного в скрипте.
unixk0d
14 ноября 2016, 10:42
modx.pro
2
2 800
0

Комментарии: 4

unixk0d
14 ноября 2016, 13:54
0
если я не ошибаюсь за 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);
						}
					}
				}
    unixk0d
    14 ноября 2016, 16:07
    0
    Ниже участок кода отвечающий за письмо менеджеру, в самом начале я пологаю можно вставить зависимость. где-то здесь
    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);
    						}
    					}
    				}
    			}
      unixk0d
      16 ноября 2016, 13:26
      0
      Все доделал, к концу дня выложу по пунктам, как присвоить email менеджера для каждого конкретного пользователя через удобное поле в админке. Удобно для распределения почты между оптом и розницей. Оптовые заказы от определенных пользователей идут определенному менеджеру а розница по дефолтному.
        unixk0d
        16 ноября 2016, 19:35
        0
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          4