ownCloudおよびNextcloudずの統合方法萜ずし穎ずそれらを克服する方法

ナヌザヌの1人がONLYOFFICEずownCloudは倩囜で䜜られた結婚であるず曞きたした申し蚳ありたせんが、オリゞナルは倩囜で䜜られたものでした。 私たちは圌が正しいず考えお考えたした。 さらに、私たちは統合が倧奜きです それに関しおは、もちろん、い぀でもどこでも䟿利な線集者を求めおいたす。

䞀般に、ドキュメント゚ディタをownCloudおよびNextcloudず統合するためのアプリケヌションを䜜成したした。この蚘事では、それに぀いお少し説明したす。 私たちの道には乗り越えられない障害はありたせんでしたが、いく぀かの困難が生じ、それらを克服した経隓を共有したす。 第䞀に、それはあなたにずっお有甚かもしれたせん、そしお第二に、私たちはもはやそれを自分自身に保぀こずができたせん ぀たり、長い間ブログに䜕も曞いおいたせんでした。




アプリケヌションの䜜成は簡単で、ownCloudで動䜜したす-いいえ


したがっお、統合アプリケヌションはコネクタであり、私たちの恋人は、ownCloudドキュメント管理WebサヌビスずDocument Serverドキュメントサヌバヌ、䞀般的に゚ディタヌの間の単なる橋枡し圹です。 ownCloudは、アプリケヌションを䜜成しおワヌクスペヌスに埋め蟌むためのAPIを䞁寧に提䟛し、これを利甚したした。

アプリケヌションの䜜成においお、ownCloudの公匏ドキュメントは私たちを倧いに助けおくれたした。 そこで瀺されおいる手順を完了するず、既補のアプリケヌションテンプレヌトが䜜成されたした。 それは簡単でしたが、さらなる困難が始たりたした。 内郚APIは、控えめに蚀っおも文曞化されおいたすが、あたり詳现ではありたせん。

たずえば、ファむルを保存するには、特定のナヌザヌずしお承認を取埗する必芁がありたした。 蚱可アクションを実行するには、特定のコマンドを実行する必芁がありたす。どのコマンドですか それらはどこにありたすか それらを実珟する方法は ドキュメンテヌションにはこれに぀いお䜕ず曞かれおいるず思いたすか 正解は、「なし」です。

創造的な方法


文曞化の難しさは、最初の段階から始たりたした。 あるサヌバヌ䞊のownCloudず別のサヌバヌ䞊のDocument Serverぞのバむンディングを䜜成し、それらの間のデヌタ亀換を敎理するには、たずDocument ServerのWebアドレスを指定する必芁がありたす。 このアドレスは、アプリケヌションのデヌタベヌスに保存され、゚ディタヌを開いたり文曞を倉換するずきに䜿甚されたす。

䞀般に、アドレスを指定する必芁がありたすが、どこですか 圌をどこに向けたすか 最初に、ownCloud管理パネルにONLYOFFICE蚭定ペヌゞが必芁ですが、䜕らかの理由でそれ自䜓は衚瀺されたせんでした実際には必芁でしたが。 䞀般に、このペヌゞは䜕らかの圢で曞く必芁がありたす。

ownCloudの他のオヌプン゜ヌスアプリが救いに来たした。 圌らがこのタスクにどのように察凊したかを芗かなければなりたせんでした。 具䜓的には、蚭定ペヌゞでは、ファむルアプリケヌション甚の独自のownCloud Antivirusアプリが圹に立ちたした。

このアプリケヌションの開発者の経隓に基づいお、远加したものず堎所を次に瀺したす。

/appinfo/app.php
App::registerAdmin("onlyoffice", "settings") 

/settings.php
 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"); } } 

ファむルシステムにアクセスする方法に関する情報はドキュメントにありたすが、リンクを介しおファむルコンテンツを取埗する方法を孊習するために、公匏のGalleryアプリケヌションを調べる必芁がありたした。

方法は次のずおりです。

/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゚ディタヌは、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でも䜜業するこずを芁求したした。 これらの芁件は公正であるず考えたしたが、集䌚はこのシステムで機胜し始めたせんでした。

生じた困難は次のずおりです。

  1. 行くアむコンもちろん、スタむルを修正するこずは問題ではありたせん。
  2. Nextcloudはコンテンツセキュリティポリシヌを远加したしたむンラむン゚ディタヌの初期化スクリプトに眲名が必芁です。
  3. [蚭定]ペヌゞの新しい芁件 。

しばらくの間、関連システム甚に2぀の個別のアプリケヌションを䜜成する必芁があるず考えた3番目のポむントのためでした。 それは次のずおりです。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にドッピングしたむニシアチブの人たちがいたした。 圌らはフォヌラムでこれがうたくいくず曞いおおり、私たちはそこですべおがどのように行われるかに自然に興味を持った。 しかし、圌らは蚭定に関する問題の解決策を芋぀けられず、すべおを独自の方法で行いたした。

どうしたの


人気のあるownCloudずNextCloudのむンタヌフェヌスでONLYOFFICE゚ディタヌを䜿甚しおドキュメントを操䜜できるアプリケヌションを入手したした。 公匏には、䞡瀟はCollaboraず協力しおいたすが、ご存じのように、誰もがCollaboraの展開に成功しおいるわけではなく、本栌的な共同線集はありたせん。 さらに、䞻なものずしおさたざたな圢匏を遞択しおおり、「X」がさらに奜きな堎合は、ONLYOFFICEがそれらに合わせお調敎されたす。 コネクタを䜿甚しお、ownCloudたたはNextCloudを無料版のコミュニティず゚ンタヌプラむズの䞡方に接続できたす。

ドキュメントの詳现な指瀺。

PSドキュメントを詳しく調べるず、 ConfluenceずAlfrescoのプラグむンもありたす。 埌者はもずもず私たちによっお曞かれたものではありたせんでしたが、最近むンスピレヌションを埗お思い浮かびたした。 近い将来、興味深い統合、玠早い共同線集の取り消し、その他の重芁で良いニュヌスもお届けしたす。 私たちず䞀緒にいおください

Source: https://habr.com/ru/post/J324498/


All Articles