Дмитрий Кайдаш
06.11.2019
4915

Работа с модулями FreePBX – часть 2: работа с базой, импорт и экспорт

Описание: в предыдущей статье мы научились создавать собственные модули в системе администрирования FreePBX, и пользоваться ими для вывода информации из БД. Теперь рассмотрим возможность редактирования базы, а именно удаление и добавление записей. В заключение будет дана информация по импорту и экспорту готового модуля в другие интерфейсы на базе 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!');
	}
})
Названия элементов формы могут отличаться и приведены в качестве примера.
js-обработчик добавления
js-обработчик добавления

После сохранения изменений и перезагрузки страницы с очисткой КЭШа можно проверить работоспособность модуля по удалению и добавлению элементов. На стенде это выглядит следующим образом:

Демо работы модуля на создание и удаление
Демо работы модуля на создание и удаление
Для этого применяется комбинация клавиш: crtl+shift+R

Итак. На этот момент мы научились создавать свой модуль, добавлять ему функции чтения, удаления, записи – т.е. все возможности редактирования и просмотра. Осталось только рассмотреть возможность переноса модуля из одного интерфейса FreePBX в другой, а это возможно посредством импорта и экспорта модулей. Давайте продемонстрируем на примере нашего нового модуля.

Вспомним, какие приготовления в MySQL мы произвели перед началом работы с интерфейсом?

  1. Создали внутри базы asteriskcdrdb новую таблицу newmodule
  2. Добавили в неё первую строку

Все дальнейшие операции использовали именно этот ресурс, поэтому при установке модуля нам так же понадобится произвести создание новой таблицы. Для операций подготовки при установке модуля существует скрипт:

# 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");

?>
Здесь используется зарезервированная функция Out(). Она служит для вывода справочной информации в процессе установки модуля.
Скрипт инсталляции
Скрипт инсталляции

Как вы можете заметить единственная и основная задача скрипта создать новую таблицу и проследить корректность этого процесса. Теперь займёмся обратным действием: удалением. Для этого редактируем скрипт-близнец «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`');

?>
Скрипт деинсталляции
Скрипт деинсталляции
Во избежание ошибок в процессе установки и удаления рекомендуется проверить команды MySQL непосредственно через базу.
Проверка запросов mysql
Проверка запросов mysql

Как видно на скриншоте выше: была допущена ошибка в команде удаления таблицы и исправлена на корректную строку.

Мы позаботились об автоматических действиях, выполняемых при установке и удалении, теперь перейдём к выполнению экспорта и установки на другом сервере. Для этого подключаемся по SSH и переходим в директорию модуля.

# cd /<modul_path>/<modul_name>/

И выполняем архивацию средствами встроенного архиватора TAR.

# tar -czpf "newmodule-14.0.1.tgz" *
Сборка модуля в архив
Сборка модуля в архив

Полученный архив мы можем установить на другой сервер через интерфейс FreePBX.

Важно приблизительное совпадение версий на которой собирался модуль и того на который производится установка.

Для этого переходим по ссылке, как указано на скриншоте:

Вкладка работы с модулями
Вкладка работы с модулями

Нажимаем вверху на загрузку модулей.

Загрузка модулей
Загрузка модулей

Выбираем загрузку с жёсткого диска, и загружаем файл модуля на АТС.

Выбор файла и загрузка на АТС
Выбор файла и загрузка на АТС

После этого шага нам нужно вернуться на страницу работы с модулями и раскрыть появившийся пункт с названием нашего модуля. После чего выбрать пункт «install»

Установка загруженного модуля
Установка загруженного модуля

После чего листаем в самый конец страницы и нажимаем на «process»

Старт процесса выделенных действий
Старт процесса выделенных действий

Предпоследний шаг перед установкой модуля. Нужно ознакомиться со списком операций и дать подтверждение: нажать «confirm». После чего начнётся процесс установки модуля.

Процесс установки
Процесс установки
Ни в коем случае не прерывайте процесс, не закрывайте и не обновляйте страницу! Это может привести к нарушениям работы MySQL, FreePBX и всего остального.

Последним шагом, как и всегда, применяем изменения нажатием «apply config».

Применение изменений после установки
Применение изменений после установки

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

Ссылка на установленный модуль
Ссылка на установленный модуль

И если все действия были произведены правильно, попадаем на главную страницу нового модуля.

Пример интерфейса установленного модуля
Пример интерфейса установленного модуля

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

Удаление модуля
Удаление модуля
 Удаление модуля
Удаление модуля

Из них:

  • Disable – отключение модуля, при этом он остаётся установленным во FreePBX и хранится архивом
  • Uninstall – отключение модуля, удаление из FreePBX и MySQL. На сервере остаётся только установочный архив.
  • Remove – полное удаление модуля, включая установочный архив.

Дальнейшие действия такие же как при установке модуля: «process» -> «confirm» -> «apply config».

Процесс удаления модуля
Процесс удаления модуля

Итого: по завершению этих двух статей мы научились

  1. Создавать новый модуль FreePBX
  2. Выполнять посредством модуля чтение, запись, удаление информации MySQL
  3. Импортировать и экспортировать модуль во внешние АТС на базе FreePBX.
Подписаться
Уведомить о
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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.