Контакты 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
      Злой Димон Злой Димон 21 сентября 2016 09:38 #

      Да, всё работает. Для email добавляем 'email' => 'contact_info.email',

      • +1
        Eugen Nichikov Eugen Nichikov 21 сентября 2016 10:02 #

        Только хотел написать, что проще проверить, чем строить догадки, а вы уже :)

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

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

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

        • 0
          Eugen Nichikov Eugen Nichikov 27 декабря 2016 13:32 #

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

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

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

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

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

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

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

            • +2
              Eugen Nichikov Eugen Nichikov 12 апреля 2017 10:35 #

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

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

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

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

                • +1
                  Eugen Nichikov Eugen Nichikov 12 апреля 2017 11:06 #

                  Хорошая идея :) сам недавно столкнулся с такой необходимостью. Нужно копать 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
                    Eugen Nichikov Eugen Nichikov 24 мая 2017 09:37 #

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

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

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

                    Я в шоке

                  • +2
                    Eugen Nichikov Eugen Nichikov 12 февраля 2018 15:32 #

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

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



                  • +1
                    Eugen Nichikov Eugen Nichikov 19 октября 2018 12:13 #

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

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

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

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

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