示例#1
0
    public function checkAutoAssignment($id_customer = 0)
    {
        $sql = 'SELECT *
				FROM ' . _DB_PREFIX_ . 'mj_filter f
				LEFT JOIN ' . _DB_PREFIX_ . 'mj_condition c ON c.id_filter = f.id_filter
				WHERE f.assignment_auto = 1';
        $rows = DB::getInstance()->executeS($sql);
        if (!is_array($rows)) {
            return $this;
        }
        $formatRows = array();
        foreach ($rows as $row) {
            $id_filter = (int) $row['id_filter'];
            $formatRows[$id_filter]['mode'] = 0;
            $formatRows[$id_filter]['replace_customer'] = (bool) $row['replace_customer'];
            $formatRows[$id_filter]['name'] = $row['name'];
            $formatRows[$id_filter]['description'] = $row['description'];
            $formatRows[$id_filter]['idfilter'] = $id_filter;
            $formatRows[$id_filter]['idgroup'] = $row['id_group'];
            $formatRows[$id_filter]['rule_a'][] = $row['rule_a'];
            $formatRows[$id_filter]['rule_action'][] = $row['rule_action'];
            $formatRows[$id_filter]['baseSelect'][] = $row['id_basecondition'];
            $formatRows[$id_filter]['sourceSelect'][] = $row['id_sourcecondition'];
            $formatRows[$id_filter]['fieldSelect'][] = $row['id_fieldcondition'];
            $formatRows[$id_filter]['data'][] = $row['data'];
            $formatRows[$id_filter]['value1'][] = $row['value1'];
            $formatRows[$id_filter]['value2'][] = $row['value2'];
        }
        foreach ($formatRows as $filterId => $formatRow) {
            $obj = new Segmentation();
            $sql = $obj->getQuery($formatRow, true) . ' HAVING c.id_customer = ' . (int) $id_customer;
            $result = DB::getInstance()->executeS($sql);
            if ($result && !$obj->belongsToGroup($formatRow['idgroup'], $id_customer)) {
                if ($formatRow['replace_customer']) {
                    $sql = 'DELETE
						FROM ' . _DB_PREFIX_ . 'customer_group
						WHERE id_customer = ' . (int) $id_customer;
                    Db::getInstance()->execute($sql);
                }
                $values = array('id_group' => (int) $formatRow['idgroup'], 'id_customer' => (int) $id_customer);
                DB::getInstance()->autoExecute(_DB_PREFIX_ . 'customer_group', $values, 'INSERT');
                // Mailjet update
                $customer = new Customer($id_customer);
            } else {
                if (!$result && $obj->belongsToGroup($formatRow['idgroup'], $id_customer)) {
                    $sql = 'DELETE FROM ' . _DB_PREFIX_ . 'customer_group
						WHERE id_group = ' . (int) $formatRow['idgroup'] . ' AND id_customer = ' . (int) $id_customer;
                    DB::getInstance()->execute($sql);
                    // Mailjet update
                    $customer = new Customer($id_customer);
                }
            }
            $customer = new Customer($id_customer);
            $initialSynchronization = new HooksSynchronizationSingleUser(MailjetTemplate::getApi());
            $mailjetListID = $obj->_getMailjetContactListId($filterId);
            if ($result) {
                $initialSynchronization->subscribe($customer->email, $mailjetListID);
            } else {
                $initialSynchronization->remove($customer->email, $mailjetListID);
            }
        }
        return $this;
    }