Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/richdocuments.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Controller/DocumentController.php')
-rw-r--r--lib/Controller/DocumentController.php166
1 files changed, 166 insertions, 0 deletions
diff --git a/lib/Controller/DocumentController.php b/lib/Controller/DocumentController.php
new file mode 100644
index 00000000..b961b126
--- /dev/null
+++ b/lib/Controller/DocumentController.php
@@ -0,0 +1,166 @@
+<?php
+/**
+ * ownCloud - Richdocuments App
+ *
+ * @author Victor Dubiniuk
+ * @copyright 2014 Victor Dubiniuk victor.dubiniuk@gmail.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ */
+
+namespace OCA\Richdocuments\Controller;
+
+use OCA\Richdocuments\WOPI\DiscoveryManager;
+use \OCP\AppFramework\Controller;
+use \OCP\IRequest;
+use \OCP\IConfig;
+use \OCP\IL10N;
+use \OCP\AppFramework\Http\ContentSecurityPolicy;
+use \OCP\AppFramework\Http\TemplateResponse;
+use \OCA\Richdocuments\AppConfig;
+use \OCA\Richdocuments\Helper;
+use \OC\Files\View;
+use \OCP\ICacheFactory;
+
+class DocumentController extends Controller {
+
+ private $uid;
+ private $l10n;
+ private $settings;
+ private $appConfig;
+ private $cache;
+ /** @var DiscoveryManager */
+ private $discoveryManager;
+ const ODT_TEMPLATE_PATH = '/assets/odttemplate.odt';
+
+ public function __construct($appName,
+ $UserId,
+ IRequest $request,
+ IConfig $settings,
+ AppConfig $appConfig,
+ IL10N $l10n,
+ ICacheFactory $cache,
+ DiscoveryManager $discoveryManager) {
+ parent::__construct($appName, $request);
+ $this->uid = $UserId;
+ $this->l10n = $l10n;
+ $this->settings = $settings;
+ $this->appConfig = $appConfig;
+ $this->cache = $cache->create($appName);
+ $this->discoveryManager = $discoveryManager;
+ }
+
+ /**
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ *
+ * @return TemplateResponse
+ */
+ public function index(){
+ $response = new TemplateResponse('richdocuments', 'documents');
+ $policy = new ContentSecurityPolicy();
+ $policy->addAllowedFrameDomain($this->appConfig->getAppValue('wopi_url'));
+ $response->setContentSecurityPolicy($policy);
+ return $response;
+ }
+
+ /**
+ * @NoAdminRequired
+ */
+ public function create(){
+ $mimetype = $this->request->post['mimetype'];
+ $filename = $this->request->post['filename'];
+ $dir = $this->request->post['dir'];
+
+ $view = new View('/' . $this->uid . '/files');
+ if (!$dir){
+ $dir = '/';
+ }
+
+ $basename = $this->l10n->t('New Document.odt');
+ switch ($mimetype) {
+ case 'application/vnd.oasis.opendocument.spreadsheet':
+ $basename = $this->l10n->t('New Spreadsheet.ods');
+ break;
+ case 'application/vnd.oasis.opendocument.presentation':
+ $basename = $this->l10n->t('New Presentation.odp');
+ break;
+ case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':
+ $basename = $this->l10n->t('New Document.docx');
+ break;
+ case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
+ $basename = $this->l10n->t('New Spreadsheet.xlsx');
+ break;
+ case 'application/vnd.openxmlformats-officedocument.presentationml.presentation':
+ $basename = $this->l10n->t('New Presentation.pptx');
+ break;
+ default:
+ // to be safe
+ $mimetype = 'application/vnd.oasis.opendocument.text';
+ break;
+ }
+
+ if (!$filename){
+ $path = Helper::getNewFileName($view, $dir . '/' . $basename);
+ } else {
+ $path = $dir . '/' . $filename;
+ }
+
+ $content = '';
+ if (class_exists('\OC\Files\Type\TemplateManager')){
+ $manager = \OC_Helper::getFileTemplateManager();
+ $content = $manager->getTemplate($mimetype);
+ }
+
+ if (!$content){
+ $content = file_get_contents(dirname(__DIR__) . self::ODT_TEMPLATE_PATH);
+ }
+
+ $discovery_parsed = null;
+ try {
+ $discovery = $this->discoveryManager->get();
+
+ $loadEntities = libxml_disable_entity_loader(true);
+ $discovery_parsed = simplexml_load_string($discovery);
+ libxml_disable_entity_loader($loadEntities);
+
+ if ($discovery_parsed === false) {
+ $this->cache->remove('discovery.xml');
+ $wopiRemote = $this->getWopiUrl(false);
+
+ return array(
+ 'status' => 'error',
+ 'message' => $this->l10n->t('Collabora Online: discovery.xml from "%s" is not a well-formed XML string.', array($wopiRemote)),
+ 'hint' => $this->l10n->t('Please contact the "%s" administrator.', array($wopiRemote))
+ );
+ }
+ }
+ catch (ResponseException $e) {
+ return array(
+ 'status' => 'error',
+ 'message' => $e->getMessage(),
+ 'hint' => $e->getHint()
+ );
+ }
+
+ if ($content && $view->file_put_contents($path, $content)){
+ $info = $view->getFileInfo($path);
+ $ret = $this->getWopiSrcUrl($discovery_parsed, $mimetype);
+ $response = array(
+ 'status' => 'success',
+ 'fileid' => $info['fileid'],
+ 'urlsrc' => $ret['urlsrc'],
+ 'action' => $ret['action'],
+ 'lolang' => $this->settings->getUserValue($this->uid, 'core', 'lang', 'en'),
+ 'data' => \OCA\Files\Helper::formatFileInfo($info)
+ );
+ } else {
+ $response = array(
+ 'status' => 'error',
+ 'message' => (string) $this->l10n->t('Can\'t create document')
+ );
+ }
+ return $response;
+ }
+}