Использование Confluence REST API для публикации сгенерированной HTML-таблицы (PHP) без получения кода состояния http 400?

Моя цель состоит в том, чтобы создать страницу с таблицей в вики слияния, используя предоставляемый REST API, который может быть легко отредактирован пользователями вики с помощью редактора WYSIWYG после создания страницы.

Я разобрал тексты и поместил их в разные категории в массив массивов, а затем сгенерировал из этого HTML-таблицу (строку), которая прекрасно работает.

Однако публикация этой необработанной HTML-таблицы (в $ htmlTable) как содержимого в REST API

$data = array("type" => "page", "title" => someTitle, 
       "space" => array("key" => "$uploadSpace"), 
       "body" => array("storage" => array("value" => "$htmlTable", "representation" => "storage")));

возвращает ошибку 400 statusCode. Очевидно, потому что вход не экранирован должным образом с помощью htmlspecialchars для кодирования строки в html, но как мне создать структурированный ввод, который в противном случае преобразуется в html-таблицу?

Я попытался передать мою HTML-таблицу с помощью макроса слияния, который отображает HTML-ввод в таблицу для просмотра:

$data = array("type" => "page", "title" => someTitle,
       "space" => array("key" => "$uploadSpace"), 
       "body" => array("storage" => array("value" => "<ac:structured-macro ac:name=\"html\"><ac:plain-text-body><![CDATA[$htmlTable]]></ac:plain-text-body></ac:structured-macro>", "representation" => "storage")));

Это отображает мою HTML-таблицу на странице, однако это не соответствует легко редактируемому требованию WYSIWYG, так как пользователи вики увидят HTML-код, содержащийся в макросе впоследствии.

Заранее большое спасибо.

2 ответа

Вам нужно изменить таблицу, чтобы использовать разметку Confluence Wiki для разметки таблицы. Как пример, HTML-таблица:

$data = "<table>
         <tr><th>First Name</th><th>Last Name</th><th>GPA</th></tr>
         <tr><td>Bob</td><td>Jones</td><td>3.52</td></tr>
         <tr><td>Fred</td><td>Smith</td><td>2.89</td></tr>
         </table>";

Должен быть написан как:

$data = "||First Name||Last Name||GPA||
         |Bob|Jones|3.52|
         |Fred|Smith|2.89|";

Затем, когда вы выполняете обновление / вставку через REST, измените "представление" с "хранилище" на "вики". (И удалите HTML-оболочку макроса)

$data = array("type" => "page", "title" => someTitle,
             "space" => array("key" => "$uploadSpace"), 
             "body" => array("**wiki**" => array("value" => "$htmlTable", "representation" => "**wiki**")));

Это даст вам нативную таблицу wysiwyg Confluence.

Представление "хранилище" указывает, что основной тест уже преобразован в формат, который Confluence использует для хранения содержимого. Вы хотите вставить, используя 'wiki', и позволить Confluence обрабатывать любые преобразования для вас.

После долгой борьбы нашел исправление.

Добавьте код макроса поверх содержимого HTML.

$bodyFormatted = '<ac:structured-macro ac:name="html"><ac:plain-text-body><![CDATA['.$bodyFormatted.']]></ac:plain-text-body></ac:structured-macro>';

Переменная $bodyFormatted содержит содержимое HTML.

$data['type'] = 'page';
$data['title'] = $articleData["title"].time();
$data['space']['key'] = $articleData["container"];
$data['body']['storage']['value'] = $bodyFormatted;
$data['body']['storage']['representation'] = 'storage';

Кодировать в JSON и передать через REST. До этого один важный процесс, где я потерпел неудачу.

"Включение макроса HTML" Ссылка: https://confluence.atlassian.com/conf55/confluence-user-s-guide/creating-content/using-the-editor/working-with-macros/html-macro

Несмотря на предупреждения, включите упомянутый модуль (html (html-xhtml))

Обработайте вызовы API и проверьте содержимое. Надеюсь, что вы сделали. После завершения работы отключите модули, чтобы предотвратить кросс-скриптовые атаки.

Другие вопросы по тегам