Контакты 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 комментария

  • +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;
                              }
                          }
                      }
                  }

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

        • +2

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

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



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

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

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

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

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

          • 0

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

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

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

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

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

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

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

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

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

              • +1

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

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

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

                Я в шоке

              • +1

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

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

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

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

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