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; } }