Работа с модулями FreePBX – часть 2: работа с базой, импорт и экспорт
Описание: в предыдущей статье мы научились создавать собственные модули в системе администрирования FreePBX, и пользоваться ими для вывода информации из БД. Теперь рассмотрим возможность редактирования базы, а именно удаление и добавление записей. В заключение будет дана информация по импорту и экспорту готового модуля в другие интерфейсы на базе FreePBX. Все эксперементы продолжим на модуле из […]
![Работа с модулями FreePBX](https://voxlink.ru/wp-content/uploads/2019/11/Rabota-s-modulyami-FreePBX.jpg)
Описание: в предыдущей статье мы научились создавать собственные модули в системе администрирования 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>
![Новый исходник главной страницы](https://voxlink.ru/wp-content/uploads/2019/11/1.-Новый-исходник-главной-страницы-1024x482.png)
Что приведёт к следующим визуальным изменениям:
![Новый вид исходной страницы](https://voxlink.ru/wp-content/uploads/2019/11/2.-Новый-вид-исходной-страницы-1024x173.png)
Как видим, в сравнении с прошлой формой у нас появились иконки действий: удаление и добавление. Но пока что они не работают, поскольку нет обработчика. Добавим и его. Нам понадобится следующий файл:
# 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;
}
}
![Обработчик внутри класса модуля](https://voxlink.ru/wp-content/uploads/2019/11/3.-Обработчик-внутри-класса-модуля-1024x330.png)
Теперь нужно добавить два соответствующих метода класса, которые и будет вызывать с передачей параметров обработчик выше.
Добавление:
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;
}
Дописывать в самый конец класса, перед последней фигурной скобкой.
![Методы удаления и добавления](https://voxlink.ru/wp-content/uploads/2019/11/4.-Методы-удаления-и-добавления.png)
Последний шаг перед тестированием. Ввиду особенностей 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!');
}
})
![js-обработчик добавления](https://voxlink.ru/wp-content/uploads/2019/11/5.-js-обреботчик-добавления-1024x170.png)
После сохранения изменений и перезагрузки страницы с очисткой КЭШа можно проверить работоспособность модуля по удалению и добавлению элементов. На стенде это выглядит следующим образом:
![Демо работы модуля на создание и удаление](https://voxlink.ru/wp-content/uploads/2019/11/6.-Демо-работы-модуля-на-создание-и-удаление-1024x181.gif)
Итак. На этот момент мы научились создавать свой модуль, добавлять ему функции чтения, удаления, записи – т.е. все возможности редактирования и просмотра. Осталось только рассмотреть возможность переноса модуля из одного интерфейса 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");
?>
![Скрипт инсталляции](https://voxlink.ru/wp-content/uploads/2019/11/7.-Скрипт-инсталляции-1024x387.png)
Как вы можете заметить единственная и основная задача скрипта создать новую таблицу и проследить корректность этого процесса. Теперь займёмся обратным действием: удалением. Для этого редактируем скрипт-близнец «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`');
?>
![Скрипт деинсталляции](https://voxlink.ru/wp-content/uploads/2019/11/8.-Скрипт-деинсталляции-1024x354.png)
![Проверка запросов mysql](https://voxlink.ru/wp-content/uploads/2019/11/9.-Проверка-запросов-mysql-1024x323.png)
Как видно на скриншоте выше: была допущена ошибка в команде удаления таблицы и исправлена на корректную строку.
Мы позаботились об автоматических действиях, выполняемых при установке и удалении, теперь перейдём к выполнению экспорта и установки на другом сервере. Для этого подключаемся по SSH и переходим в директорию модуля.
# cd /<modul_path>/<modul_name>/
И выполняем архивацию средствами встроенного архиватора TAR.
# tar -czpf "newmodule-14.0.1.tgz" *
![Сборка модуля в архив](https://voxlink.ru/wp-content/uploads/2019/11/10.-Сборка-модуля-в-архив.png)
Полученный архив мы можем установить на другой сервер через интерфейс FreePBX.
Для этого переходим по ссылке, как указано на скриншоте:
![Вкладка работы с модулями](https://voxlink.ru/wp-content/uploads/2019/11/11.-Вкладка-работы-с-модулями-1024x359.png)
Нажимаем вверху на загрузку модулей.
![Загрузка модулей](https://voxlink.ru/wp-content/uploads/2019/11/12.-Загрузка-модулей.png)
Выбираем загрузку с жёсткого диска, и загружаем файл модуля на АТС.
![Выбор файла и загрузка на АТС](https://voxlink.ru/wp-content/uploads/2019/11/13.-Выбор-файла-и-загрузка-на-АТС-1024x269.png)
После этого шага нам нужно вернуться на страницу работы с модулями и раскрыть появившийся пункт с названием нашего модуля. После чего выбрать пункт «install»
![Установка загруженного модуля](https://voxlink.ru/wp-content/uploads/2019/11/14.-Установка-загруженного-модуля.png)
После чего листаем в самый конец страницы и нажимаем на «process»
![Старт процесса выделенных действий](https://voxlink.ru/wp-content/uploads/2019/11/15.-Старт-процесса-выделенных-действий-1024x209.png)
Предпоследний шаг перед установкой модуля. Нужно ознакомиться со списком операций и дать подтверждение: нажать «confirm». После чего начнётся процесс установки модуля.
![Процесс установки](https://voxlink.ru/wp-content/uploads/2019/11/16.-Подтверждение-установки-1024x199.png)
Последним шагом, как и всегда, применяем изменения нажатием «apply config».
![Применение изменений после установки](https://voxlink.ru/wp-content/uploads/2019/11/17.-Процесс-установки-1024x451.png)
На этом установка нового модуля завершена, можно открыть по ссылке в интерфейсе и приступать к эксплуатации. Переходим по ссылке.
![Ссылка на установленный модуль](https://voxlink.ru/wp-content/uploads/2019/11/18.-Применение-изменений-после-установки-1024x250.png)
И если все действия были произведены правильно, попадаем на главную страницу нового модуля.
![Пример интерфейса установленного модуля](https://voxlink.ru/wp-content/uploads/2019/11/19.-Ссылка-на-установленный-модуль-1024x547.png)
Осталось рассмотреть лишь удаление. Но внимательные пользователи уже могли заметить, как это сделать. Достаточно вернуться на страницу администрирования и в раскрытом списке модуля выбрать один из вариантов действий.
![Удаление модуля](https://voxlink.ru/wp-content/uploads/2019/11/20.-Пример-интерфейса-установленного-модуля-1024x218.png)
![Удаление модуля](https://voxlink.ru/wp-content/uploads/2019/11/21.-Удаление-модуля-1024x371.png)
Из них:
- Disable – отключение модуля, при этом он остаётся установленным во FreePBX и хранится архивом
- Uninstall – отключение модуля, удаление из FreePBX и MySQL. На сервере остаётся только установочный архив.
- Remove – полное удаление модуля, включая установочный архив.
Дальнейшие действия такие же как при установке модуля: «process» -> «confirm» -> «apply config».
![Процесс удаления модуля](https://voxlink.ru/wp-content/uploads/2019/11/22.-Процесс-удаления-модуля-1024x341.png)
Итого: по завершению этих двух статей мы научились
- Создавать новый модуль FreePBX
- Выполнять посредством модуля чтение, запись, удаление информации MySQL
- Импортировать и экспортировать модуль во внешние АТС на базе FreePBX.
![](/wp-content/uploads/2019/05/Screenshot_1-1.png)
Остались вопросы?
Я - Кондрашин Игорь, менеджер компании 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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.