Контакты PRO. некорректно формируется ссылка "Открыть в Контактах" Принято

5

В магазине есть возможность искать покупателей по телефону, например, при помощи плагина DopInfo, но по прямой ссылке работает и без него. Хэш формируется вот такой

/webasyst/shop/?action=customers#/search/phone=123123123/

Если нажать кнопку "Открыть в Контактах", всё работает. Хэш

/webasyst/contacts/#contacts/search/shop_customers\/phone=123123123

Но при установленных контактах PRO не работает! Хэш

/webasyst/contacts/#/contacts/search/phone=123123123&shop.placed_orders.period.period<=2016-09-20/1/


Решение. В wa-apps/contacts/plugins/pro/lib/contactsPro.plugin.php добавить где-то на 390 строчке


Новый хэш будет уже рабочий.

23 комментария

  • -1
    Злой Димон Злой Димон 21 сентября 2016 09:32 #

    Круто, очень помогли. Там ещё есть переход по почте, тоже не работает. Исправляется по аналогии или по другому?

  • -1
    Злой Димон Злой Димон 19 декабря 2016 18:04 #

    Я в шоке, дорогая редакция!!! В последнем обновлении так и не исправили!

    И пофиг на "принято"

    • 0

      Дмитрий, проверил. Исправили.

      Но исправили моё баг с телефоном :) Ваш с емейлом так и остался :)

      • -1
        Злой Димон Злой Димон 27 декабря 2016 18:15 #

        С учётом того, как молниеносно обновляется данный плагин, исправят в 2018 году.

        • +1
          Петр Петр 30 декабря 2016 11:49 #

          скорее всего в 3000 году, там много косяков с этими контактами про

          половину сам уже пофиксил

        • +2

          А не, не поправили.

          • +1
            Петр Петр 12 апреля 2017 10:55 #

            а это вы обсуждали поиск на вкладке покупатели или во время формирования нового заказа?

            просто я хочу сделать поиск покупателя, когда создаешь заказ по названию компании и в выпадающем выборе показывать вместе с именем - название компании

            • +1

              Хорошая идея :) сам недавно столкнулся с такой необходимостью. Нужно копать shopBackendAutocomplete.controller.php

              Но это сделать проще: можно оформить PR в гитхаб и когда-то для Shop-Script выйдет обновление. А для PRO нет такой возможности.

              • +2
                Петр Петр 14 апреля 2017 00:55 #

                вобщем я сделал, спасибо за подсказку изменил функцию contactsAutocomplete

                public function contactsAutocomplete($q, $limit = null)
                    {
                        $m = new waModel();
                
                        // The plan is: try queries one by one (starting with fast ones),
                        // until we find 5 rows total.
                        $sqls = array();
                
                        // Name starts with requested string
                        $sqls[] = "SELECT c.id, c.name, c.company, c.firstname, c.middlename, c.lastname
                                   FROM wa_contact AS c
                                   WHERE c.name LIKE '".$m->escape($q, 'like')."%'
                                   LIMIT {LIMIT}";
                
                		// company starts with requested string
                        $sqls[] = "SELECT c.id, c.name, c.company, c.firstname, c.middlename, c.lastname
                                   FROM wa_contact AS c
                                   WHERE c.company LIKE '".$m->escape($q, 'like')."%'
                                   LIMIT {LIMIT}";
                
                        // Email starts with requested string
                        $sqls[] = "SELECT c.id, c.name, e.email, c.firstname, c.middlename, c.lastname
                                   FROM wa_contact AS c
                                       JOIN wa_contact_emails AS e
                                           ON e.contact_id=c.id
                                   WHERE e.email LIKE '".$m->escape($q, 'like')."%'
                                   LIMIT {LIMIT}";
                
                        // Phone contains requested string
                        if (preg_match('~^[wp0-9\-\+\#\*\(\)\. ]+$~', $q)) {
                            $dq = preg_replace("/[^\d]+/", '', $q);
                            $sqls[] = "SELECT c.id, c.name, d.value as phone, c.firstname, c.middlename, c.lastname
                                       FROM wa_contact AS c
                                           JOIN wa_contact_data AS d
                                               ON d.contact_id=c.id AND d.field='phone'
                                       WHERE d.value LIKE '%".$m->escape($dq, 'like')."%'
                                       LIMIT {LIMIT}";
                        }
                
                        // Name contains requested string
                        $sqls[] = "SELECT c.id, c.name, c.firstname, c.middlename, c.lastname
                                   FROM wa_contact AS c
                                   WHERE c.name LIKE '_%".$m->escape($q, 'like')."%'
                                   LIMIT {LIMIT}";
                				   
                		// company contains requested string
                        $sqls[] = "SELECT c.id, c.name, c.company, c.firstname, c.middlename, c.lastname
                                   FROM wa_contact AS c
                                   WHERE c.company LIKE '_%".$m->escape($q, 'like')."%'
                                   LIMIT {LIMIT}";
                
                        // Email contains requested string
                        $sqls[] = "SELECT c.id, c.name, e.email, c.firstname, c.middlename, c.lastname
                                   FROM wa_contact AS c
                                       JOIN wa_contact_emails AS e
                                           ON e.contact_id=c.id
                                   WHERE e.email LIKE '_%".$m->escape($q, 'like')."%'
                                   LIMIT {LIMIT}";
                
                        $limit = $limit !== null ? $limit : 5;
                        $result = array();
                        $term_safe = htmlspecialchars($q);
                        foreach($sqls as $sql) {
                            if (count($result) >= $limit) {
                                break;
                            }
                            foreach($m->query(str_replace('{LIMIT}', $limit, $sql)) as $c) {
                                if (empty($result[$c['id']])) {
                                    if (!empty($c['firstname']) || !empty($c['middlename']) || !empty($c['lastname'])) {
                                        $c['name'] = waContactNameField::formatName($c);
                                    }
                                    $name = $this->prepare($c['name'], $term_safe);
                					$company = $this->prepare($c['company'], $term_safe);
                                    $email = $this->prepare(ifset($c['email'], ''), $term_safe);
                                    $phone = $this->prepare(ifset($c['phone'], ''), $term_safe);
                                    $phone && $phone = '<i class="icon16 phone"></i>'.$phone;
                                    $email && $email = '<i class="icon16 email"></i>'.$email;
                                    $result[$c['id']] = array(
                                        'id' => $c['id'],
                                        'value' => $c['id'],
                                        'name' => $c['name'],
                                        'label' => implode(' ', array_filter(array($name, $company, $email, $phone))),
                                    );
                                    if (count($result) >= $limit) {
                                        break 2;
                                    }
                                }
                            }
                        }

                теперь ищет по названию компании

              • -1
                Злой Димон Злой Димон 24 мая 2017 08:59 #

                после обновления опять через жо..у, нет поправки ни для мэйла, ни для телефона

              • +1

                Печально. Особенно учитывая, что правок всего пару строк.

              • -1
                Злой Димон Злой Димон 24 июля 2017 19:27 #

                Опять не исправили!!!

                Я в шоке

              • +2

                О, ещё раз исправил ту же проблему. На всякий случай, если кто-то из Webasyst читает древние посты, повторю решение и для телефона, и для email

                В wa-apps/contacts/plugins/pro/lib/contactsPro.plugin.php добавить где-то на 390 строчке



              • +1

                И опять забылось.

              • -1
                Злой Димон Злой Димон 4 февраля 2019 16:04 #

                Ничего не поправили

                Добавить комментарий

                Чтобы добавить комментарий, зарегистрируйтесь или войдите