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

Работа с модулями 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!');
	}
})
Названия элементов формы могут отличаться и приведены в качестве примера.
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.
 
avatar
  Подписаться  
Уведомление о

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

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

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

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

ближайшие Вебинары

ONLINE

Why Choose HUGE?

Unlimited pre-designed elements

Each and every design element is designed for retina ready display on all kind of devices

User friendly interface and design

Each and every design element is designed for retina ready display on all kind of devices

100% editable layered PSD files

Each and every design element is designed for retina ready display on all kind of devices

Created using shape layers

Each and every design element is designed for retina ready display on all kind of devices