Работа с модулями FreePBX – часть 2: работа с базой, импорт и экспорт
Описание: в предыдущей статье мы научились создавать собственные модули в системе администрирования FreePBX, и пользоваться ими для вывода информации из БД. Теперь рассмотрим возможность редактирования базы, а именно удаление и добавление записей. В заключение будет дана информация по импорту и экспорту готового модуля в другие интерфейсы на базе FreePBX. Все эксперементы продолжим на модуле из […]
Описание: в предыдущей статье мы научились создавать собственные модули в системе администрирования FreePBX, и пользоваться ими для вывода информации из БД. Теперь рассмотрим возможность редактирования базы, а именно удаление и добавление записей. В заключение будет дана информация по импорту и экспорту готового модуля в другие интерфейсы на базе FreePBX.
# whereis sox
Все эксперементы продолжим на модуле из предыдущей статьи.
Работа с модулями FreePBX [часть-1](Создание и подключение)
Открываем для редактирования главную страницу:
# nano /<modul_path>/<modul_name>/views/main.php
И приводим к следующему виду
<?php
$results =sql('SELECT * FROM asteriskcdrdb.newmodule ORDER BY exten');
foreach ($results as $key => $value) {
$content .= '<tr>
<td>'.$value['exten'].'</td>
<td>'.$value['description'].'</td>
<td>
<a href="?display=newmodule&action=delete&extdisplay='.$value['exten'].'" class="__web-inspector-hide-shortcut__"><i class="fa fa-trash"></i></a>
</td>
</tr>';
}
?>
<table data-toolbar="#toolbar-all" data-search="true" data-toggle="table" data-pagination="true" class="table table-striped table-hover">
<thead>
<tr>
<th>Exten</th>
<th>Description</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<?php echo $content; ?>
</tbody>
<tfoot>
<tr>
<td>
<input type="number" value="" id="new_exten" class="from-control" />
</td>
<td>
<input type="text" value="" id="new_descr" class="from-control" />
</td>
<td>
<i class="fa fa-plus" id="add" style="color:#1b76b6; cursor: pointer;"> </i>
</td>
</tr>
</tfoot>
</table>
Что приведёт к следующим визуальным изменениям:
Как видим, в сравнении с прошлой формой у нас появились иконки действий: удаление и добавление. Но пока что они не работают, поскольку нет обработчика. Добавим и его. Нам понадобится следующий файл:
# nano /<modul_path>/<modul_name>/Newmodule.class.php
Внутри нужно найти функцию выполняемую при открытии страницы, а именно: doConfigPageInit и добавляем обработчик двух событий
- Add — «добавления»
- Delete –«удаления»
Проще и эффективнее всего для этого завести Switch в следующем виде.
//process form
public function doConfigPageInit($page) {
switch ($_GET['action']) {
case "add":
$this->addNewModule($_GET['exten'],$_GET['description']);
//needreload();
break;
case "delete":
$this->deleteNewModule($_GET['extdisplay']);
//needreload();
break;
}
}
Теперь нужно добавить два соответствующих метода класса, которые и будет вызывать с передачей параметров обработчик выше.
Добавление:
public function addNewmodule($exten,$description){
$sql = "INSERT INTO asteriskcdrdb.newmodule (exten,description) values (?,?)";
$sth = $this->db->prepare($sql);
$sth->execute(array($exten,$description));
return true;
}
Удаление:
public function deleteNewmodule($extdisplay){
$sql = "DELETE FROM asteriskcdrdb.newmodule WHERE exten = ?";
$sth = $this->db->prepare($sql);
$sth->execute(array($extdisplay));
return true;
}
Дописывать в самый конец класса, перед последней фигурной скобкой.
Последний шаг перед тестированием. Ввиду особенностей FreePBX возможности добавления требуется ещё один момент, а именно правка js-скрипта. На этот раз открываем файл:
# nano /<modul_path>/<modul_name>/assets/js/newmodule.js
Здесь мы добавим обработчик нажатия на «плюсик», а так же настроим «защиту от дурака». Данные не будут отправляться на сервер если одно или несколько обязательных полей не будут заполнены. Скрипт примет вид:
$("#add").on("click",function(){
if($("#new_exten").val()!='' && $("#new_descr").val()!=''){
window.location = "?display=newmodule&action=add&exten="+$("#new_exten").val()+"&description="+$("#new_descr").val();
}
else{
alert('All or one field is empty!');
}
})
После сохранения изменений и перезагрузки страницы с очисткой КЭШа можно проверить работоспособность модуля по удалению и добавлению элементов. На стенде это выглядит следующим образом:
Итак. На этот момент мы научились создавать свой модуль, добавлять ему функции чтения, удаления, записи – т.е. все возможности редактирования и просмотра. Осталось только рассмотреть возможность переноса модуля из одного интерфейса FreePBX в другой, а это возможно посредством импорта и экспорта модулей. Давайте продемонстрируем на примере нашего нового модуля.
Вспомним, какие приготовления в MySQL мы произвели перед началом работы с интерфейсом?
- Создали внутри базы asteriskcdrdb новую таблицу newmodule
- Добавили в неё первую строку
Все дальнейшие операции использовали именно этот ресурс, поэтому при установке модуля нам так же понадобится произвести создание новой таблицы. Для операций подготовки при установке модуля существует скрипт:
# nano /<modul_path>/<modul_name>/install.php
По умолчанию он пуст, но мы его изменим следующим образом:
<?php
// Киллер
// License for all code of this FreePBX module can be found in the license file inside the module directory
// Copyright 2019 Owl Technologies.
//
out("Begin install Multiplex-module...");
global $db;
$sql = "CREATE TABLE `asteriskcdrdb.newmodule` (
`exten` VARCHAR(50) NOT NULL,
`description` VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (`exten`)
);";
$check = $db->query($sql);
if (DB::IsError($check)) die_freepbx("Can't create `multiplex` table: ".$check->getMessage()."\n");
?>
Как вы можете заметить единственная и основная задача скрипта создать новую таблицу и проследить корректность этого процесса. Теперь займёмся обратным действием: удалением. Для этого редактируем скрипт-близнец «install.php»:
# nano /<modul_path>/<modul_name>/uninstall.php
Его содержимое призвано вычистить все следы модуля и, при необходимости, выполнить перезапуск FreePBX. Реализуем удаление созданной таблицы.
<?php
// Киллер
if (!defined('FREEPBX_IS_AUTH')) { die('No direct script access allowed'); }
// License for all code of this FreePBX module can be found in the license file inside the module directory
// Copyright 2019 Owl Technologies.
//
sql('DROP TABLE `asteriskcdrdb.newmodule`');
?>
Как видно на скриншоте выше: была допущена ошибка в команде удаления таблицы и исправлена на корректную строку.
Мы позаботились об автоматических действиях, выполняемых при установке и удалении, теперь перейдём к выполнению экспорта и установки на другом сервере. Для этого подключаемся по SSH и переходим в директорию модуля.
# cd /<modul_path>/<modul_name>/
И выполняем архивацию средствами встроенного архиватора TAR.
# tar -czpf "newmodule-14.0.1.tgz" *
Полученный архив мы можем установить на другой сервер через интерфейс FreePBX.
Для этого переходим по ссылке, как указано на скриншоте:
Нажимаем вверху на загрузку модулей.
Выбираем загрузку с жёсткого диска, и загружаем файл модуля на АТС.
После этого шага нам нужно вернуться на страницу работы с модулями и раскрыть появившийся пункт с названием нашего модуля. После чего выбрать пункт «install»
После чего листаем в самый конец страницы и нажимаем на «process»
Предпоследний шаг перед установкой модуля. Нужно ознакомиться со списком операций и дать подтверждение: нажать «confirm». После чего начнётся процесс установки модуля.
Последним шагом, как и всегда, применяем изменения нажатием «apply config».
На этом установка нового модуля завершена, можно открыть по ссылке в интерфейсе и приступать к эксплуатации. Переходим по ссылке.
И если все действия были произведены правильно, попадаем на главную страницу нового модуля.
Осталось рассмотреть лишь удаление. Но внимательные пользователи уже могли заметить, как это сделать. Достаточно вернуться на страницу администрирования и в раскрытом списке модуля выбрать один из вариантов действий.
Из них:
- Disable – отключение модуля, при этом он остаётся установленным во FreePBX и хранится архивом
- Uninstall – отключение модуля, удаление из FreePBX и MySQL. На сервере остаётся только установочный архив.
- Remove – полное удаление модуля, включая установочный архив.
Дальнейшие действия такие же как при установке модуля: «process» -> «confirm» -> «apply config».
Итого: по завершению этих двух статей мы научились
- Создавать новый модуль FreePBX
- Выполнять посредством модуля чтение, запись, удаление информации MySQL
- Импортировать и экспортировать модуль во внешние АТС на базе 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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.