Использование 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-код, содержащийся в макросе.

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


person paulmorio    schedule 18.06.2015    source источник


Ответы (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**")));

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

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

person unickshaxor    schedule 12.11.2015

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

Добавьте код макроса поверх содержимого 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 и проверьте содержимое. Надеюсь, вы закончили. После завершения работы отключите модули, чтобы предотвратить атаки с использованием перекрестных сценариев.

person Drupal Syb    schedule 29.12.2016