Однажды один из наших пользователей написал, что ONLYOFFICE и ownCloud — это союз, заключенный на небесах (извините, оригинал был создан на небесах), и странно, что никто еще не додумался создать плагин.
Мы это поняли и подумали, что он прав.
Более того, мы очень любим интегрироваться! Конечно, мы хотим, чтобы нашими редакторами пользовались всегда, везде и там, где удобно.
В общем, мы сами сделали приложение для интеграции наших редакторов документов с ownCloud (а затем и с Nextcloud) и в этой статье немного о нем расскажем.
На нашем пути не было непреодолимых препятствий, но возникли некоторые трудности и мы поделимся с вами опытом их преодоления.
Во-первых, это может быть вам полезно, а во-вторых, мы не можем больше держать это в себе! То есть мы давно ничего не писали в блог.
Создать приложение легко, а вот заставить его работать с ownCloud — нет.
Итак, приложение интеграции, оно же коннектор, оно же наша маленькая конфетка, — это всего лишь мостик между веб-сервисом управления документами ownCloud и нашим Сервером документов (Нашими редакторами, в общем).
ownCloud любезно предоставляет API для написания и встраивания приложений в ваше рабочее пространство, и мы этим воспользовались.
Официальный сайт нам очень помог в создании приложения.
Документация ownCloud , это она вмешалась.
Выполнив указанные там действия, мы получили готовый шаблон заявления.
Это было просто, но потом начались трудности.
Внутреннее API документировано, мягко говоря, не слишком подробно.
Например, чтобы сохранить файл нам нужно было получить авторизацию под конкретным пользователем.
Для выполнения действия авторизации необходимо выполнить определенные команды: какие команды? Где я могу их найти? Как их делать? Как вы думаете, что об этом говорит документация? Правильный ответ: ничего.
Творческий метод Трудности с недокументированностью начались на самом первом этапе.
Чтобы создать подключение к ownCloud на одном сервере и нашему Серверу документов на другом и организовать обмен данными между ними, необходимо предварительно указать веб-адрес Сервера документов.
Этот адрес сохраняется в базе данных приложения и затем используется при открытии редактора или конвертации документов.
По сути, нам нужно указать адрес, но где? Где мы это укажем? Для начала нам нужна страница настроек ONLYOFFICE в панели администрирования ownCloud, но она почему-то там сама не появилась (хотя нам очень этого хотелось).
В общем, эту страницу нужно как-то написать.
Здесь на помощь пришли другие приложения с открытым исходным кодом для ownCloud. Мне пришлось посмотреть, как они справились с этой задачей.
Конкретно со страницей настроек нам помогло официальное приложение ownCloud. Антивирусное приложение для файлов .
Вот что и где мы добавили, руководствуясь опытом разработчиков этого приложения: /appinfo/app.php
/settings.phpApp::registerAdmin("onlyoffice", "settings")
User::checkAdminUser();
return new Application() -> getContainer() -> query("\OCA\Onlyoffice\Controller\SettingsController") -> index() -> render();
/controller/settingscontroller.php
class SettingsController extends Controller {
private $config;
public function __construct($AppName, IRequest $request, AppConfig $config) {
parent::__construct($AppName, $request);
$this->config = $config;
}
public function index() {
$data = ["documentserver" => $this->config->GetDocumentServerUrl()];
return new TemplateResponse($this->appName, "settings", $data, "blank");
}
}
Информация о том, как получить доступ к файловой системе, находится в документация , но чтобы научиться получать содержимое файла по ссылке, нам нужно было изучить официальное приложение Галерея .
Вот как мы это сделали: /lib/downloadresponse.php class DownloadResponse extends Response {
private $content;
public function __construct(File $file) {
$this->setStatus(Http::STATUS_OK);
$this->content = $file->getContent();
$this->addHeader("Content-type", $file->getMimeType() .
"; charset=utf-8"); $this->addHeader("Content-Disposition", "attachment; filename*=UTF-8''" .
rawurlencode($file->getName()) .
"; filename=\"" .
rawurlencode($file->getName()) .
"\"");
}
public function render() {
return $this->content;
}
}
Мы узнали, как добавить собственное действие в меню создания нового файла и в контекстное меню файла с помощью официального приложения.
Вот как создается файл: /js/main.js OCA.Onlyoffice.NewFileMenu = {
attach: function (menu) {
if (menu.fileList.id !== "files") { return; }
menu.addMenuEntry({
id: "onlyofficeDocx",
displayName: t(OCA.Onlyoffice.AppName, "Document"),
iconClass: "icon-onlyoffice-new-docx",
fileType: "docx",
actionHandler: function (name) { OCA.Onlyoffice.CreateFile(name + ".
docx", menu.fileList); }
});
}
};
OC.Plugins.register("OCA.Files.NewFileMenu", OCA.Onlyoffice.NewFileMenu);
А вот как это открывается в ONLYOFFICE: OCA.Onlyoffice.FileList = {
attach: function (fileList) {
if (fileList.id == "trashbin") { return; }
$.
each(OCA.Onlyoffice.mimes, function (ext, attr) {
fileList.fileActions.registerAction({
name: "onlyofficeOpen",
displayName: t(OCA.Onlyoffice.AppName, "Open in ONLYOFFICE"),
mime: attr.mime,
permissions: OC.PERMISSION_READ,
icon: function () { return OC.imagePath(OCA.Onlyoffice.AppName, "btn-edit"); },
actionHandler: function (fileName, context) { OCA.Onlyoffice.FileClick(fileName, context, attr); }
});
});
}
};
OC.Plugins.register("OCA.Files.FileList", OCA.Onlyoffice.FileList);
Итак, молодцы — в контекстном меню файлов появилось действие «Открыть в ONLYOFFICE» и возможность создания нового файла: документа, таблицы или презентации (создание файла реализовано на сервере как копирование подготовленного файла OOXML формата - docx, xlsx, pptx) в указанную папку с указанным именем.
.
Дополнительная информация о форматах Редакторы ONLYOFFICE работают со следующими форматами (но по-разному): DOCX, XLSX, PPTX, PPSX, TXT, CSV, ODT, ODS, ODP, DOC, XLS, PPT, PPS, EPUB, RTF, MHT, HTML, XPS, PDF, DJVU. При выборе действия для ODT, ODS, ODP, DOC, XLS, PPT, PPS, EPUB, RTF, MHT, HTML файл сначала будет отправлен на конвертацию в соответствующий формат OOXML. Для DOCX, XLSX, PPTX, PPSX, TXT откроется новая вкладка с редактором, а для CSV, XPS, PDF, DJVU откроется вкладка с редактором в режиме просмотра.
Теперь о Nextcloud Как только мы сообщили миру, что работаем с ownCloud, мир сразу же потребовал, чтобы мы работали и с Nextcloud. Мы сочли эти требования справедливыми, но сразу начать работать в этой системе не удалось.
Вот какие трудности возникли:
- Плохие иконки (исправить стили, конечно, не проблема).
- В Nextcloud добавлена политика безопасности контента (необходимо подписать скрипт инициализации встроенного редактора).
- Новый требования на страницу настроек.
Вот как это было — для реализации нового интерфейса в NextCloud нам нужно было прописать наш класс настроек в описании приложения: /appinfo/inxo.xml <settings>
<admin>OCA\Onlyoffice\Controller\SettingsController</admin>
</settings>
А затем реализуем в классе необходимый интерфейс ISettings: /controller/settingscontroller.php class SettingsController extends Controller implements ISettings {
public function getForm() {
return $this-index();
}
public function getSection() {
return "server";
}
public function getPriority() {
return 50;
}
.
Но здесь у нас есть небольшая проблема.
Наткнувшись на эту строку, ownCloud разбился, так как в его среде не существует интерфейса ISettings: class SettingsController extends Controller implements ISettings
Пришлось все делать хитро: реализовать интерфейс ISettings в отдельном классе, оставив макет для ownCloud и Nextcloud одинаковым.
/appinfo/inxo.xml <settings>
<admin>OCA\Onlyoffice\AdminSettings</admin>
</settings>
/lib/adminsettings.php class AdminSettings implements ISettings {
public function getForm() {
$app = new Application();
$container = $app->getContainer();
$response = $container->query("\OCA\Onlyoffice\Controller\SettingsController")->index();
return $response;
}
public function getSection() {
return "server";
}
public function getPriority() {
return 50;
}
}
Таким образом страница настроек у ownCloud подключается по старому алгоритму, а у Nexcloud — по новому.
Кстати, нашлись предприимчивые ребята, которые привезли вилка из нашего приложения и самостоятельно добавили его в Nextcloud. На форумах написали, что работает, и мы, естественно, заинтересовались, как там все сделано.
Но решения проблемы с настройками не нашли и сделали все по-своему.
Что случилось? К нам поступило приложение, позволяющее работать с документами с помощью редакторов ONLYOFFICE в интерфейсе популярных ownCloud и NextCloud. Официально обе компании сотрудничают с Collabora, но, как известно, не все способны ее развернуть, а полноценного совместного редактирования там пока нет. Плюс мы выбрали в качестве основных разные форматы, и если вы предпочитаете форматы «Х», то ONLYOFFICE создан специально для них.
С помощью коннектора вы можете подключить ownCloud или NextCloud как к бесплатной версии Community, так и к Enterprise. Подробная инструкция в нашем документация .
P.S. Если покопаться в документации, то также можно найти плагины для Слияние И на свежем воздухе .
Последний изначально был написан не нами, но мы в порыве вдохновения недавно довели его до ума, может быть, он вам пригодится? В ближайшее время мы также порадуем вас интересными интеграциями, возможностью быстрого совместного редактирования и некоторыми другими важными и приятными новостями.
Оставайтесь с нами! Теги: #onlyoffice #редакторы документов #редакторы документов #owncloud #Nextcloud #open source #php #api
-
Так Где Она?
19 Oct, 24 -
Об Удаленной Работе
19 Oct, 24 -
Слайдер Для Таймлапс-Съемки
19 Oct, 24