Денис Пестрецов
21.02.2019
2920

Чиним Duplicate Time Conditions во FreePBX

В этой статье рассмотрим, как восстановить работоспособность кнопки Duplicate в модуле Time Conditions, FreePBX. Duplicate — крайне полезная кнопка, которая позволяет на основе текущих настроек элемента, создать копию. Или, проще говоря, задублировать элемент. К сожалению, не все модули во FreePBX обладают подобным функционалом. К примеру, такой функционал, помимо модуля Time Conditions присутствует также в модуле […]

Duplicate Time Conditions во FreePBX

В этой статье рассмотрим, как восстановить работоспособность кнопки Duplicate в модуле Time Conditions, FreePBX.

Данное исправление актуально для FreePBX 13 версии.

Duplicate — крайне полезная кнопка, которая позволяет на основе текущих настроек элемента, создать копию. Или, проще говоря, задублировать элемент. К сожалению, не все модули во FreePBX обладают подобным функционалом. К примеру, такой функционал, помимо модуля Time Conditions присутствует также в модуле Time Groups и Trunks.

Общий вид модуля Time Conditions

Перейдём к описанию проблемы.

Описание проблемы

Для тестирования работоспособности кнопки Duplicate, нам потребуется уже созданный элемент модуля Time Conditions. Подробнее о том, как создать и работать с правилами по времени можно прочесть в статье: Правила по времени во FreePBX.

После того, как создали тестовое правило (в нашем примере оно называется Duplicate_test), переходим в его режим редактирования:

Режим редактирования правила по времени

Видим, что появилась кнопка Duplicate. Проблема в том, что если на неё нажать, то мы вернёмся на главную страницу модуля Time Conditions, но ничего не произойдёт. То есть новое правило по времени так и не будет создано. В следующей части статьи разберёмся, почему так происходит, и восстановим правильную работу кнопки.

Причины проблемы

Данный раздел статьи содержит описание причин, приведших к неверной работе кнопки. Если Вас интересует наиболее быстрое решение проблемы без «лишней информации» — можно пропустить данную часть и перейти сразу к разделу Устранение неисправности.

Для правильного функционирования кнопки Duplicate необходимо в файле …/admin/modules/timeconditions/Timeconditions.class.php наличие такого action’a (действия), как duplicate на странице timeconditions. Вообще, в классе Timeconditions описан функционал сразу для двух страниц: Time Conditions и Time Groups. Можно заметить, что в этом же файле, на странице timegroups используется действие duplicate. Если перейти на страницу временных групп (Time Groups) и открыть любую из них для редактирования — увидим, что Есть активная работающая кнопка Duplicate.

Time Groups

Итак, первая причина того, что кнопка Duplicate не работает в модуле Time Conditions — отсутствие в классе Timeconditions.class.php на странице timeconditions действия duplicate, как такового.

Первая причина

Однако даже если добавить обработчик действия duplicate — это не решит всей проблемы.

Вторая причина заключается в том, что при нажатии на кнопку Duplicate посылается действие не duplicate (что, казалось бы, логичным), а edit. Таким образом, даже если добавить действие duplicate в список, то оно выполняться всё равно не будет. Также отметим, что действие edit выполняется при отправке отредактированной форме на сохранение.

Интересный факт, что до внесения правок нажатие на кнопку Duplicate в модуле Time Conditions аналогично нажатию на кнопку Submit.

Таким образом, применять изменения в правиле по времени можно нажатием на кнопку Duplicate.

Теперь перейдём к следующему шагу — вернём работоспособность кнопки Duplicate.

Устранение неисправности

Открываем для редактирования файл: …/admin/modules/timeconditions/assets/js/ timeconditions/ timeconditions.js. В нём содержится используемый javascript-код на странице модуля Time Conditions.

Здесь необходимо добавить подмену действия при нажатии на кнопку Duplicate: с «edit» на «duplicate». Для этого сразу после первой конструкции if, то есть после:

if($("#idTime").length) {
…
}

вставляем следующий код:

/*CHANGE*/
$("#duplicate").click(function(e){
      $('input[name="action"]').val("duplicate");
});
/*END_CHANGE*/
Все изменения будем помещать между комментариями /*CHANGE*/ и /*END_CHANGE*/. Таким образом, легко можно отличить внесённые изменения в файлах FreePBX.

Сохраняем и закрываем этот файл. Теперь, если перепроверить — при нажатии на кнопку Duplicate будет выполняться действие «duplicate», как и положено.

Теперь открываем для редактирования другой файл: …/admin/modules/timeconditions/Timeconditions.class.php. в этом файле описываются основные методы и свойства модуля Time Conditions.

Находим функцию doConfigPageInit($page). В ней есть оператор switch($page), который отражает текущую выбранную страницу. Нас интересует страница “timeconditions”. В ней располагается другой switch, отвечающий за распределение выполнения кода, в соответствии с текущим действием. После действия “edit” добавляем “duplicate”, чтобы получилось следующим образом:

switch($page) {
      case "timeconditions":
/*…код…*/
      switch ($action) {
            /*…код…*/
            case "edit":  //just delete and re-add
                  $this->editTimeCondition($itemid,$request);
                  \needreload();
            break;
            /*CHANGE*/
            case 'duplicate':
                  $this->duplicateTimeCondition($itemid,$request);
                  \needreload();
            break;
            /*END_CHANGE*/

Таким образом, при $action==’duplicate’ будет вызываться функция duplicateTimeCondition, где, в качестве параметров, будут переданы значения id текущего элемента для редактирования и массив параметров $request. После этого вызываем функцию генерации ApplyConfig: \needreload().

В этом же файле находим функцию getTimeCondition($id). Сразу после завершения её описания вставляем код описания функции duplicateTimeCondition:

/*CHANGE_v1.6*/
public function duplicateTimeCondition($itemid,$request)
{
      // Get unique number for our copy
      $stmt = $this->db->prepare("SELECT auto_increment FROM information_schema.tables WHERE table_name='timeconditions'");
      $stmt->execute();
      $copy_num = $stmt->fetch();
      // Initialization array
      $post = $request;
      $post['displayname'] .= "_COPY_".$copy_num[0];
      unset($post['itemid']);
      $this->addTimeCondition($post);
}
/*END_CHANGE*/

В первой части функции получаем уникальный номер копии и записываем его в переменную $copy_num. Для этого выполняем SQL-запрос на получения текущего auto_increment из базы information_schema таблицы tables.

Во второй части функции инициализируем массив $post значениями нового правила по времени, которое будет создаваться на основе текущей.

Последним шагом добавляем на основе полученных значений правило по времени, используя стандартную функцию addTimeCondition.

Сохраняем отредактированный файл, и проверяем модуль Time Conditions. Теперь, после нажатия на кнопку Duplicate в режиме редактирования правила по времени, должен производиться возврат на основную страницу модуля и создаваться, путём копирования, новый элемент Time Conditions.

Также могут быть интересны следующие статьи:

Создание расписания для распределения звонков на операторов в рабочее и нерабочее время в статье: Расписание работы операторов.

Подробнее о создании внутренних номеров в статье: Управление внутренними номерами абонентов во FreePBX.

Группы вызовов во FreePBX.

Голосовые приветствия во FreePBX.

Книга 101 функция Asterisk
Познакомьтесь с возможностями Asterisk. Найдите инструменты, которые помогут вашей компании развиваться.
Скачать книгу
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование


ближайшие курсы

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.