Skip to content

Commit bd70967

Browse files
authored
Merge pull request #5186 from nextcloud/fix/moved-to-root
fix: document created in wrong location on public share
2 parents 5284e3e + c41ba04 commit bd70967

File tree

8 files changed

+74
-161
lines changed

8 files changed

+74
-161
lines changed

cypress/e2e/new.spec.js

Lines changed: 18 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
* SPDX-FileCopyrightText: 2023 Julius Härtl <[email protected]>
33
* SPDX-License-Identifier: AGPL-3.0-or-later
44
*/
5-
// FIXME: Re-renable once 28 has file creation again working
6-
describe.skip('Create new office files', function() {
5+
6+
describe('New file menu', function() {
77

88
let randUser
99
before(function() {
@@ -18,51 +18,34 @@ describe.skip('Create new office files', function() {
1818
})
1919

2020
it('Shows create file entries', function() {
21-
cy.get('.files-controls .button.new')
21+
cy.get('form[data-cy-upload-picker=""]')
2222
.should('be.visible')
2323
.click()
2424

25-
cy.get('.newFileMenu', { timeout: 10000 })
26-
.should('be.visible')
27-
.contains('.menuitem', 'New document')
25+
cy.get('button[role="menuitem"]')
26+
.contains('New document')
2827
.should('be.visible')
29-
.find('.icon')
30-
.should('have.css', 'background-image')
3128

32-
cy.get('.files-controls .button.new')
29+
cy.get('form[data-cy-upload-picker=""]')
3330
.click()
3431

35-
cy.get('.newFileMenu', { timeout: 10000 })
32+
cy.get('li[data-cy-upload-picker-menu-entry="upload-file"]')
3633
.should('not.be.visible')
3734
})
3835

39-
const newFileTypeLabels = [
40-
'document', 'spreadsheet', 'presentation', 'diagram',
41-
]
42-
newFileTypeLabels.forEach((filetype) => {
43-
it('Create empty ' + filetype + ' file', function() {
44-
cy.get('.files-controls .button.new')
45-
.should('be.visible')
46-
.click()
47-
48-
cy.get('.newFileMenu', { timeout: 10000 })
49-
.should('be.visible')
50-
.contains('.menuitem', 'New ' + filetype)
51-
.as('menuitem')
52-
.should('be.visible')
53-
.click()
54-
55-
cy.get('@menuitem').find('.filenameform input[type=text]').type('MyNewFile')
56-
cy.get('@menuitem').find('.filenameform .icon-confirm').click()
57-
58-
cy.waitForViewer()
59-
cy.waitForCollabora()
36+
describe('Creates a new file', function() {
37+
const newFileTypeLabels = [
38+
'document', 'spreadsheet', 'presentation', 'diagram',
39+
]
40+
newFileTypeLabels.forEach((filetype) => {
41+
it('Create empty ' + filetype + ' file', function() {
42+
cy.newFileFromMenu(filetype, 'MyNewFile')
43+
cy.waitForViewer()
44+
cy.waitForCollabora()
6045

61-
cy.screenshot('new-file-' + filetype)
46+
cy.screenshot('new-file-' + filetype)
6247

63-
cy.get('@loleafletframe').within(() => {
64-
cy.get('#closebutton').click()
65-
cy.waitForViewerClose()
48+
cy.closeDocument()
6649
})
6750
})
6851
})

cypress/e2e/share-link.js

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { randHash } from '../utils/index.js'
88
const shareOwner = new User(randHash(), randHash())
99
const otherUser = new User(randHash(), randHash())
1010

11-
describe.skip('Public sharing of office documents', () => {
11+
describe('Public sharing of office documents', () => {
1212
before(function() {
1313
cy.nextcloudTestingAppConfigSet('richdocuments', 'doc_format', '')
1414
cy.createUser(shareOwner)
@@ -105,6 +105,37 @@ describe.skip('Public sharing of office documents', () => {
105105
})
106106
})
107107
})
108+
109+
describe('New file', () => {
110+
before(() => {
111+
cy.createFolder(shareOwner, '/Shared-Folder')
112+
cy.createFolder(shareOwner, '/Shared-Folder/Subfolder')
113+
})
114+
115+
it('Creates a new file in a public share as a guest', () => {
116+
cy.shareLink(shareOwner, '/Shared-Folder', { permissions: 13 }).then((token) => {
117+
cy.logout()
118+
119+
cy.visit(`/s/${token}`, {
120+
onBeforeLoad(win) {
121+
cy.spy(win, 'postMessage').as('postMessage')
122+
},
123+
})
124+
125+
cy.get('tr[data-cy-files-list-row-name="Subfolder"]')
126+
.should('be.visible')
127+
.click()
128+
129+
cy.newFileFromMenu('document', 'MyNewFile')
130+
waitForCollabora()
131+
132+
// Make sure the document is still in the correct subfolder
133+
cy.reload()
134+
cy.get('tr[data-cy-files-list-row-name="MyNewFile.odt"]')
135+
.should('be.visible')
136+
})
137+
})
138+
})
108139
})
109140
})
110141

cypress/support/commands.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,3 +454,18 @@ Cypress.Commands.add('makeTalkRoomPublic', (user, token, password = '') => {
454454
})
455455
})
456456

457+
Cypress.Commands.add('newFileFromMenu', (fileType = 'document', fileName = 'MyNewFile') => {
458+
cy.get('div[data-cy-files-content-breadcrumbs=""]')
459+
.find('form[data-cy-upload-picker=""]')
460+
.should('be.visible')
461+
.click()
462+
463+
cy.get('button[role="menuitem"]')
464+
.contains('New ' + fileType)
465+
.should('be.visible')
466+
.click()
467+
468+
cy.get('input[data-cy-files-new-node-dialog-input=""]')
469+
.should('be.visible')
470+
.type(fileName + '{enter}')
471+
})

lib/Listener/RegisterTemplateFileCreatorListener.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,13 @@ public function handle(Event $event): void {
3434
return;
3535
}
3636

37-
if (!$this->permissionManager->isEnabledForUser() || !$this->permissionManager->userCanEdit() || empty($this->capabilitiesService->getCapabilities())) {
37+
if (empty($this->capabilitiesService->getCapabilities())) {
38+
return;
39+
}
40+
41+
$user = $this->permissionManager->loggedInUser();
42+
$userCanCreate = $this->permissionManager->isEnabledForUser($user) && $this->permissionManager->userCanEdit($user);
43+
if ($user && !$userCanCreate) {
3844
return;
3945
}
4046

src/public.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,12 @@ import {
1010
isDownloadHidden,
1111
} from './helpers/index.js'
1212
import { getCapabilities } from './services/capabilities.ts'
13-
import { registerNewFileMenuEntries } from './view/NewFileMenu.js'
1413

1514
document.addEventListener('DOMContentLoaded', () => {
1615
if (!isPublicShare() || !OCA.Viewer) {
1716
return
1817
}
1918

20-
registerNewFileMenuEntries()
21-
2219
const isEnabledFilesPdfViewer = getCapabilities().mimetypesNoDefaultOpen.includes('application/pdf')
2320

2421
if ((isDownloadHidden() || !isEnabledFilesPdfViewer) && isPdf()) {

src/services/api.js

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,7 @@
44
*/
55

66
import axios from '@nextcloud/axios'
7-
import { generateOcsUrl, generateFilePath } from '@nextcloud/router'
8-
import { getSharingToken } from '@nextcloud/sharing/public'
9-
10-
export const createEmptyFile = async (context, mimeType, fileName, templateId = null) => {
11-
const shareToken = getSharingToken()
12-
13-
const response = await axios.post(generateOcsUrl('apps/richdocuments/api/v1/file', 2), {
14-
mimeType,
15-
fileName,
16-
directoryPath: context.dirname,
17-
shareToken,
18-
templateId,
19-
})
20-
21-
return response.data
22-
}
7+
import { generateFilePath } from '@nextcloud/router'
238

249
export const savePersonalSetting = (data) => {
2510
return axios.post(generateFilePath('richdocuments', 'ajax', 'personal.php'), data)

src/view/NewFileMenu.js

Lines changed: 0 additions & 105 deletions
This file was deleted.

tests/lib/Listener/RegisterTemplateFileCreatorListenerTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ public function testHandleRegistersWithoutDrawSupport() {
114114
public function testHandleDoesNotRegisterIfUserCannotEdit() {
115115
$event = $this->createMock(RegisterTemplateCreatorEvent::class);
116116
$event->method('getTemplateManager')->willReturn($this->templateManager);
117+
$this->permissionManager->method('loggedInUser')->willReturn('user');
117118
$this->permissionManager->method('isEnabledForUser')->willReturn(true);
118119
$this->permissionManager->method('userCanEdit')->willReturn(false);
119120
$this->capabilitiesService->method('getCapabilities')->willReturn(['something']);

0 commit comments

Comments
 (0)