äžè¬ã«ãããã¥ã¡ã³ããšãã£ã¿ãownCloudïŒããã³NextcloudïŒãšçµ±åããããã®ã¢ããªã±ãŒã·ã§ã³ãäœæããŸããããã®èšäºã§ã¯ãããã«ã€ããŠå°ã説æããŸãã ç§ãã¡ã®éã«ã¯ä¹ãè¶ããããªãé害ã¯ãããŸããã§ããããããã€ãã®å°é£ãçããããããå æããçµéšãå ±æããŸãã 第äžã«ãããã¯ããªãã«ãšã£ãŠæçšãããããŸããããããŠç¬¬äºã«ãç§ãã¡ã¯ãã¯ããããèªåèªèº«ã«ä¿ã€ããšãã§ããŸããïŒ ã€ãŸããé·ãéããã°ã«äœãæžããŠããŸããã§ããã
![](https://habrastorage.org/files/4ea/208/bd5/4ea208bd582643edb7f019861094d8cb.jpg)
ã¢ããªã±ãŒã·ã§ã³ã®äœæã¯ç°¡åã§ã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ã§ãäœæ¥ããããšãèŠæ±ããŸããã ãããã®èŠä»¶ã¯å ¬æ£ã§ãããšèããŸããããéäŒã¯ãã®ã·ã¹ãã ã§æ©èœãå§ããŸããã§ããã
çããå°é£ã¯æ¬¡ã®ãšããã§ãã
- è¡ãã¢ã€ã³ã³ïŒãã¡ãããã¹ã¿ã€ã«ãä¿®æ£ããããšã¯åé¡ã§ã¯ãããŸããïŒã
- Nextcloudã¯ã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ãŒãè¿œå ããŸããïŒã€ã³ã©ã€ã³ãšãã£ã¿ãŒã®åæåã¹ã¯ãªããã«çœ²åãå¿ èŠã§ãïŒã
- [èšå®]ããŒãžã®æ°ããèŠä»¶ ã
ãã°ããã®éãé¢é£ã·ã¹ãã çšã«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ã®ãã©ã°ã€ã³ããããŸãã åŸè ã¯ããšããšç§ãã¡ã«ãã£ãŠæžããããã®ã§ã¯ãããŸããã§ããããæè¿ã€ã³ã¹ãã¬ãŒã·ã§ã³ãåŸãŠæãæµ®ãã³ãŸããã è¿ãå°æ¥ãèå³æ·±ãçµ±åãçŽ æ©ãå ±åç·šéã®åãæ¶ãããã®ä»ã®éèŠã§è¯ããã¥ãŒã¹ããå±ãããŸãã ç§ãã¡ãšäžç·ã«ããŠãã ããïŒ