Статьи

Интеграция PHP с Flash Collaboration Services с использованием REST

В первой части интеграции PHP и LiveCycle Collaboration Services (LCCS) мы сосредоточились на том, как можно использовать PHP для добавления внешней аутентификации в ваше приложение LCCS. Еще один отличный способ интеграции LCCS и PHP — это API-интерфейсы REST и библиотека, поставляемая с LCCS SDK. С помощью этих API мы можем выполнять ряд функций управления, включая создание и удаление комнат, управление ролями и создание шаблонов. Эти API упрощают создание настраиваемого динамического взаимодействия с PHP. Вы можете создавать комнаты на лету для своих пользователей и получать информацию о том, какой контент находится в этих комнатах. В этом примере мы собираемся создать простой менеджер комнат с PHP, который позволит нам создавать, удалять и просматривать информацию о конкретных комнатах.

Как и в первой части, нам нужно предоставить учетные данные для входа в AFCS и войти в систему, прежде чем мы сможем сделать какие-либо вызовы API. Нам нужно импортировать библиотеки afcs.php, которые поставляются с SDK, а затем создать новый экземпляр AFCSAccount с нашими учетными данными. Как только это закончится, мы вызовем метод listRooms (), чтобы получить массив комнат, которые наша учетная запись имеет на сервере.

<?php
require_once("afcs.php");
$title = "LiveCycle Collaboration Services Room Manager";

$username = "Your username here";
$password = "Your password here";
$account = "Your account name here";

$account_url = "http://connectnow.acrobat.com/{$account}";

session_start();

$afcs_account = new AFCSAccount($account_url);
$afcs_account->login($username,$password);
$arr_rooms = $afcs_account->listRooms();

?>

Как только у нас будет список комнат, мы перечислим их в таблице, чтобы мы могли приступить к созданию консоли управления. Это просто очень простой пример, поэтому мы будем перебирать массив и выводить информацию в таблицу. Каждый объект в массиве имеет тип AFCSItem, который определен в файле afcs.php. Он определяет имя, описание и дату создания, поэтому мы можем использовать их в качестве заголовков для нашей таблицы. Затем мы просто воспользуемся базовым PHP, чтобы перебрать массив и заполнить нашу таблицу HTML.

<html>
<head>
<title><?php print $title ?></title>
</head>
<body>
<h2>Room List</h2>
<table>
<tr>
<td><strong>Room Name</strong></td>
<td><strong>Description</strong></td>
<td><strong>Creation Date</strong></td>
<td></td>
</tr>
<?php

for( $i = 0; $i < count($arr_rooms); $i++)
{
$item = $arr_rooms[$i];
$date_time = $item->created;
print "<tr><td>{$item->name}</td>";
print "<td>{$item->desc}</td>";
print "<td>{$date_time->format("r")}</td>";
}

?>
</table>
</body>
</html>

 

Теперь у нас есть основной список номеров для всех номеров, связанных с нашей учетной записью. Следующим шагом будет создание комнат. Библиотека afcs.php с SDK также включает метод createRoom (), который принимает имя комнаты и шаблон. Шаблоны в LCCS позволяют создавать комнаты с индивидуальными настройками. Я не буду рассказывать об использовании шаблонов в этом руководстве, но вы можете посмотреть документацию LCCS, чтобы увидеть, как вы будете использовать шаблоны в управлении вашей комнатой. Тогда эти API легко использовать как для создания шаблонов, так и для создания новых комнат с типами шаблонов. Для кода создания комнаты мы добавим в конец форму с текстовым полем, скрытым полем и кнопкой отправки, которая позволяет нам создать комнату с определенным именем. Просто добавьте следующий код после тега конца таблицы.

<h2>Create a Room</h2>
<form method="POST">
<input type="text"name="room_name"/>
<input type="hidden"name="is_creating"value="true"/>
<input type="submit"name="submit"value="Create Room"/>
</form>

Нам также нужно добавить функцию в наш код PHP, чтобы проверить, отправили ли мы форму, создающую комнату, а затем вызвать API создания. Следующий код использует экземпляр AFCSAccount, который мы настроили ранее, чтобы создать комнату с именем из нашей формы. Поместите его после функции listRooms () в тегах php.

// We are creating a new room
if (isset($_REQUEST['is_creating']))
{
$creating_room_name = $_REQUEST['room_name'];
$afcs_account->createRoom($creating_room_name);
print "<p>Room Created!</p>";
}

Помимо просмотра и создания комнат, было бы неплохо, если бы мы могли получить больше информации о комнатах, а также удалить комнаты. Для этого мы добавим в нашу таблицу HTML некоторый код, который добавляет кнопку удаления, а также позволяет щелкнуть название комнаты, чтобы получить больше информации о ней. Функция getRoomInfo () позволяет нам получить кучу информации о том, что происходит в комнате. Мы можем видеть информацию о сервере, на котором мы находимся, сколько пользователей в комнате, а также историю сообщений и данных, которые были отправлены туда и обратно. Он возвращается в виде XML-файла, поэтому в приведенном ниже коде PHP я выполняю некоторый синтаксический анализ, чтобы настроить его и облегчить доступ к нему из кода, отображающего информацию. Этот код идет ниже сценария создания, который мы только что добавили. Мы’Передаем имя комнаты в URL, поэтому перед запуском любого кода мы увидим, установлена ​​ли эта переменная.

// Sets up looking at information for a specific room
$room_name = "";
$room_info = "";

if (isset($_REQUEST['room']))
{
$room_name = $_REQUEST['room'];
$title = "Details for room: {$room_name}";
$room_info_xml = $afcs_account->getRoomInfo($room_name);

$parser = xml_parser_create_ns();
xml_parse_into_struct($parser,$room_info_xml,$room_info);
}

Мы также хотим создать код, который позволит нам удалять комнаты. Как и метод createRoom (), у нас есть метод deleteRoom (), который берет имя комнаты и удаляет эту комнату с сервера. Мы изменим нашу таблицу HTML и сделаем ее частью формы с кнопками, позволяющими нам удалять комнаты, поэтому эта часть скрипта PHP проверяет, установлено ли скрытое поле ввода is_deleting перед выполнением кода удаления. Каждая кнопка имеет значение «Удалить», а затем имя комнаты, поэтому перед удалением комнаты мы используем метод strstr (), чтобы вытащить имя комнаты.

if (isset($_REQUEST['is_deleting']))
{
$deleting_room_name = strstr($_REQUEST['submit']," ");
$afcs_account->deleteRoom($deleting_room_name);
print "Room {$deleting_room_name} deleted.";
}

Теперь, когда скрипты для вызова API закончены, нам нужно изменить нашу таблицу HTML, чтобы включить новые функции. Мы обернем его в тег формы, а также добавим ссылку на каждое имя комнаты, которая перезагружает страницу с переменной комнаты в строке URL, чтобы мы могли видеть детали этой комнаты. Немного странно только то, как мы получаем информацию. Я хотел сделать работу с XML как можно более простой, поэтому я просто использовал метод xml_parse_into_struct (), чтобы превратить его в массив массивов. Затем я просто посмотрел на необработанный массив, чтобы выяснить, какой индекс массива мне нужен для конкретной информации. Это причина дополнительного кода ниже для распечатки информации о комнате. Замените исходный код между тегами таблицы этим кодом, чтобы включить детальный просмотр и возможность удалять комнаты.


<table>
<form method="POST">
<tr>
<td><strong>Room Name</strong></td>
<td><strong>Description</strong></td>
<td><strong>Creation Date</strong></td>
<td></td>
</tr>
<?php
for( $i = 0; $i < count($arr_rooms); $i++)
{
$item = $arr_rooms[$i];
$date_time = $item->created;

print "<tr><td><a href="index.php?room={$item->name}">{$item->name}</a></td>";
print "<td>{$item->desc}</td>";
print "<td>{$date_time->format("r")}</td>";
print "<td><input type='submit' name='submit' value='Delete {$item->name}'/></tr>";

if (isset($_REQUEST['room']))
{
if( $room_name == $item->name)
{
print "<tr><td>";
print "<strong>Is Connected?</strong> {$room_info[8]['value']}<br />";
print "<strong>Number of Users:</strong> {$room_info[9]['value']}<br />";
print "<strong>Total Bytes Uploaded:</strong> {$room_info[13]['value']}<br />";
print "<strong>Total Bytes Downloaded:</strong> {$room_info[14]['value']}<br />";
print "<strong>Total Messages:</strong> {$room_info[15]['value']}<br />";
print "</td></tr>";
}
}
}
?>
<input type="hidden"name="is_deleting" value="true"/>
</form>
</table>

Теперь у вас есть пара реальных примеров использования ваших навыков PHP для создания и управления приложениями для совместной работы с LiveCycle Collaboration Services. В первой части рассказывалось, как использовать внешнюю аутентификацию с LCCS, чтобы вы могли управлять пользователями и ролями как частью существующей системы и переносить их в ваше приложение Flex для совместной работы. Вторая часть предоставила информацию о том, как вы можете управлять и создавать комнаты для использования с вашим приложением для совместной работы с использованием API REST, которые LCCS предоставляет. Для получения дополнительной информации о LiveCycle Collaboration Services и о том, как они могут создавать ваши веб-приложения в режиме реального времени, вы можете обратиться к Центру разработчиков LiveCycle Collaboration и этой статье по началу работы .