Чиним Duplicate Time Conditions во FreePBX
В этой статье рассмотрим, как восстановить работоспособность кнопки Duplicate в модуле Time Conditions, FreePBX. Duplicate — крайне полезная кнопка, которая позволяет на основе текущих настроек элемента, создать копию. Или, проще говоря, задублировать элемент. К сожалению, не все модули во FreePBX обладают подобным функционалом. К примеру, такой функционал, помимо модуля Time Conditions присутствует также в модуле […]
В этой статье рассмотрим, как восстановить работоспособность кнопки Duplicate в модуле Time Conditions, FreePBX.
Duplicate — крайне полезная кнопка, которая позволяет на основе текущих настроек элемента, создать копию. Или, проще говоря, задублировать элемент. К сожалению, не все модули во FreePBX обладают подобным функционалом. К примеру, такой функционал, помимо модуля Time Conditions присутствует также в модуле Time Groups и Trunks.
Перейдём к описанию проблемы.
Описание проблемы
Для тестирования работоспособности кнопки 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.
Итак, первая причина того, что кнопка Duplicate не работает в модуле Time Conditions — отсутствие в классе Timeconditions.class.php на странице timeconditions действия duplicate, как такового.
Однако даже если добавить обработчик действия duplicate — это не решит всей проблемы.
Вторая причина заключается в том, что при нажатии на кнопку Duplicate посылается действие не duplicate (что, казалось бы, логичным), а edit. Таким образом, даже если добавить действие duplicate в список, то оно выполняться всё равно не будет. Также отметим, что действие edit выполняется при отправке отредактированной форме на сохранение.
Таким образом, применять изменения в правиле по времени можно нажатием на кнопку 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*/
Сохраняем и закрываем этот файл. Теперь, если перепроверить — при нажатии на кнопку 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.
Остались вопросы?
Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.