Skip to content

Commit

Permalink
Use FileCreatedFromTemplateEvent to inject the already existing empty…
Browse files Browse the repository at this point in the history
… template files for Collabora

Signed-off-by: Julius Härtl <[email protected]>

Cleanup template loading

Signed-off-by: Julius Härtl <[email protected]>

Fix template handling

Signed-off-by: Julius Härtl <[email protected]>
  • Loading branch information
juliusknorr committed Dec 20, 2021
1 parent ea882d3 commit 1c87f3d
Show file tree
Hide file tree
Showing 13 changed files with 299 additions and 44 deletions.
3 changes: 2 additions & 1 deletion appinfo/info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<description><![CDATA[This application can connect to a Collabora Online (or other) server (WOPI-like Client). Nextcloud is the WOPI Host. Please read the documentation to learn more about that.
You can also edit your documents off-line with the Collabora Office app from the **[Android](https://play.google.com/store/apps/details?id=com.collabora.libreoffice)** and **[iOS](https://apps.apple.com/us/app/collabora-office/id1440482071)** store.]]></description>
<version>5.0.0-beta1</version>
<version>6.0.0-dev.1</version>
<licence>agpl</licence>
<author>Collabora Productivity based on work of Frank Karlitschek, Victor Dubiniuk</author>
<types>
Expand All @@ -31,6 +31,7 @@ You can also edit your documents off-line with the Collabora Office app from the
</dependencies>
<background-jobs>
<job>OCA\Richdocuments\Backgroundjobs\ObtainCapabilities</job>
<job>OCA\Richdocuments\Backgroundjobs\Cleanup</job>
</background-jobs>
<commands>
<command>OCA\Richdocuments\Command\ActivateConfig</command>
Expand Down
Binary file removed emptyTemplates/odttemplate.odt
Binary file not shown.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
3 changes: 3 additions & 0 deletions lib/AppInfo/Application.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
use OCA\Richdocuments\AppConfig;
use OCA\Richdocuments\Capabilities;
use OCA\Richdocuments\Middleware\WOPIMiddleware;
use OCA\Richdocuments\Listener\FileCreatedFromTemplateListener;
use OCA\Richdocuments\PermissionManager;
use OCA\Richdocuments\Preview\MSExcel;
use OCA\Richdocuments\Preview\MSWord;
Expand All @@ -48,6 +49,7 @@
use OCP\AppFramework\Bootstrap\IBootstrap;
use OCP\AppFramework\Bootstrap\IRegistrationContext;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\Template\FileCreatedFromTemplateEvent;
use OCP\Files\Template\ITemplateManager;
use OCP\Files\Template\TemplateFileCreator;
use OCP\IConfig;
Expand All @@ -68,6 +70,7 @@ public function register(IRegistrationContext $context): void {
$context->registerTemplateProvider(CollaboraTemplateProvider::class);
$context->registerCapability(Capabilities::class);
$context->registerMiddleWare(WOPIMiddleware::class);
$context->registerEventListener(FileCreatedFromTemplateEvent::class, FileCreatedFromTemplateListener::class);
}

public function boot(IBootContext $context): void {
Expand Down
49 changes: 49 additions & 0 deletions lib/Backgroundjobs/Cleanup.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<?php
/**
* @copyright Copyright (c) 2019, Roeland Jago Douma <[email protected]>
*
* @author Roeland Jago Douma <[email protected]>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/

namespace OCA\Richdocuments\Backgroundjobs;

use OC\BackgroundJob\TimedJob;
use OCA\Richdocuments\Service\CapabilitiesService;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IDBConnection;

class Cleanup extends TimedJob {

/** @var IDBConnection */
private $db;

public function __construct(IDBConnection $db) {
$this->db = $db;

$this->setInterval(60*60);
}

protected function run($argument) {
// Expire template mappings for file creation
$query = $this->db->getQueryBuilder();
$query->delete('richdocuments_template')
->where($query->expr()->lte('timestamp', $query->createNamedParameter(time() - 60, IQueryBuilder::PARAM_INT)));
$query->executeStatement();
}
}
11 changes: 10 additions & 1 deletion lib/Controller/DocumentController.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

namespace OCA\Richdocuments\Controller;

use OCA\Richdocuments\AppInfo\Application;
use OCA\Richdocuments\Events\BeforeFederationRedirectEvent;
use OCA\Richdocuments\Service\FederationService;
use OCA\Richdocuments\Service\InitialStateService;
Expand Down Expand Up @@ -210,7 +211,14 @@ public function index($fileId, $path = null) {
return $response;
}

list($urlSrc, $token, $wopi) = $this->tokenManager->getToken($item->getId());
$templateFile = $this->templateManager->getTemplateSource($item->getId());
if ($templateFile) {
list($urlSrc, $wopi) = $this->tokenManager->getTokenForTemplate($templateFile, $this->uid, $item->getId());
$token = $wopi->getToken();
} else {
list($urlSrc, $token, $wopi) = $this->tokenManager->getToken($item->getId());
}

$params = [
'permissions' => $item->getPermissions(),
'title' => $item->getName(),
Expand Down Expand Up @@ -575,6 +583,7 @@ public function create($mimetype,
}

if (!$content){
// FIXME: see if this is used,
$content = file_get_contents(dirname(dirname(__DIR__)) . self::ODT_TEMPLATE_PATH);
}

Expand Down
71 changes: 71 additions & 0 deletions lib/Listener/FileCreatedFromTemplateListener.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
<?php
/*
* @copyright Copyright (c) 2021 Julius Härtl <[email protected]>
*
* @author Julius Härtl <[email protected]>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/

declare(strict_types=1);


namespace OCA\Richdocuments\Listener;


use OCA\Richdocuments\AppInfo\Application;
use OCA\Richdocuments\TemplateManager;
use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventListener;
use OCP\Files\Template\FileCreatedFromTemplateEvent;
use OCP\IConfig;

class FileCreatedFromTemplateListener implements IEventListener {

/** @var TemplateManager */
private $templateManager;

public function __construct(
TemplateManager $templateManager
) {
$this->templateManager = $templateManager;
}

public function handle(Event $event): void {
if (!($event instanceof FileCreatedFromTemplateEvent)) {
return;
}

$templateFile = $event->getTemplate();

// Empty template
if ($templateFile === null) {
$event->getTarget()->putContent($this->templateManager->getEmptyFileContent($event->getTarget()->getExtension()));
return;
}

if ($this->templateManager->isSupportedTemplateSource($templateFile->getExtension())) {
// Only use TemplateSource if supported filetype
$this->templateManager->setTemplateSource($event->getTarget()->getId(), $templateFile->getId());
}

// Avoid having the mimetype of the source file set
$event->getTarget()->getStorage()->getCache()->update($event->getTarget()->getId(), [
'mimetype' => $event->getTarget()->getMimeType()
]);
}
}
51 changes: 51 additions & 0 deletions lib/Migration/Version50200Date20211220212457.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<?php

declare(strict_types=1);

namespace OCA\Richdocuments\Migration;

use Closure;
use OCP\DB\ISchemaWrapper;
use OCP\Migration\IOutput;
use OCP\Migration\SimpleMigrationStep;

/**
* Auto-generated migration step: Please modify to your needs!
*/
class Version50200Date20211220212457 extends SimpleMigrationStep {
public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper {
/** @var ISchemaWrapper $schema */
$schema = $schemaClosure();

if (!$schema->hasTable('richdocuments_template')) {
$table = $schema->createTable('richdocuments_template');
$table->addColumn('id', 'bigint', [
'autoincrement' => true,
'notnull' => true,
'length' => 20,
'unsigned' => true,
]);
$table->addColumn('userid', 'string', [
'notnull' => false,
'length' => 64,
]);
$table->addColumn('fileid', 'bigint', [
'notnull' => true,
'length' => 20,
]);
$table->addColumn('templateid', 'bigint', [
'notnull' => true,
'length' => 20,
]);
$table->addColumn('timestamp', 'bigint', [
'notnull' => true,
'length' => 20,
'unsigned' => true,
]);
$table->setPrimaryKey(['id']);
$table->addUniqueIndex(['userid', 'fileid'], 'rd_t_user_file');
}

return $schema;
}
}
4 changes: 0 additions & 4 deletions lib/Template/CollaboraTemplateProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,4 @@ public function getCustomTemplates(string $mimetype): array {
public function getCustomTemplate(string $template): File {
return $this->templateManager->get((int)$template);
}

public function createFromTemplate(File $template, File $target): void {
// TODO: Implement createFromTemplate() method.
}
}
Loading

0 comments on commit 1c87f3d

Please sign in to comment.