nextcloud / nextcloud/formvox

Share dialog implies it shares the form with Nextcloud users, but manages the public link

Open
#137 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

0. Needs triage design documentation
Dominant language
PHP
Stars
6
Forks
5
PR merge metrics
No merged PRs in 30d

Description

Summary

The Share dialog is titled "Share form" and contains two user/group pickers, but it does not share a form with other Nextcloud users — it manages the public response link. This misleads users into thinking they are granting colleagues access to the form.

Reported by a user setting up a new Nextcloud for a nonprofit, who reasonably assumed the picker inside "Share form" was how you share a form with your team. They initially thought they had misconfigured something. They had not — our documentation described it incorrectly too.

The documentation is now fixed (0964d44, EN + NL, unreleased). The UI that caused the confusion is unchanged, so the next user will hit exactly the same wall.

Background: how sharing actually works

FormVox is file-based. Every form is a .fvform file in Files, so a form is shared through the regular Nextcloud sharing sidebar, with the normal permission model. This is a deliberate design choice and we intend to keep it — it means forms inherit Nextcloud's permissions, visibility and policies for free, rather than FormVox maintaining a parallel sharing system.

The problem is not the model. It is that the UI never says so.

What is misleading

Location Current text Why it misleads
src/components/ShareDialog.vue:4 Share form Promises sharing, delivers a link
src/components/ShareDialog.vue:7 Share this form with others to collect responses. The second half corrects the first, but is read later
src/components/ShareDialog.vue:247 Restrict to specific users/groups Main cause. A user/group picker inside a "Share" dialog reads as sharing
src/components/ShareDialog.vue:252 Only selected users and group members can access this form. "can access this form" confirms the wrong reading

The dialog contains no reference to Files at all. A user who opens it asking "how do I share this with a colleague" is never told where that actually happens.

What already exists

src/components/SettingsPanel.vue:22-26 already has a "Manage sharing" button that opens the real Nextcloud sharing sidebar, with the permission roles explained above it. The implementation (openNativeShareDialog, lines 58-79) tries OCA.Files.Sidebar and falls back to a redirect into Files.

That is exactly what the reporter was looking for. It just lives in the settings panel, while the button labelled Share goes somewhere else.

So this is a labelling and navigation problem, not missing functionality.

Proposed changes

1. Rename the dialog
  • ShareDialog.vue:4Share formResponse link
  • ShareDialog.vue:7Create a link so people can respond. To give colleagues access to the form itself, use Sharing.

Resolves the misunderstanding on the first line the user reads.

2. Add a route to Files inside the dialog

A line at the top of the dialog:

Looking to share with Nextcloud users? → Manage sharing

Reuses openNativeShareDialog from SettingsPanel.vue. That function would move out of the component into e.g. src/utils/sharing.js so both callers can use it.

3. Reword the restriction picker
  • ShareDialog.vue:247Restrict to specific users/groupsLimit who may submit
  • ShareDialog.vue:252This only restricts the response link. It does not give these people access to the form — for that, use Sharing.

The Notify on new responses picker (line 100) stays as is; that label is already unambiguous.

Explicitly out of scope

Building a picker-and-Submit sharing flow inside FormVox (select users → one button → they get a notification), which is what the reporter originally asked for.

Nextcloud has no generic share API for non-file objects — IShareProvider is typed against Node/Folder. Every app that wants this builds its own share table, picker, "shared with me" query and notification path. That gap has been on the server backlog since nextcloud/server#7315 (2017). nextcloud/forms did build it, and it took five years (nextcloud/forms#576, #563 in 2020 → #322 completed 2025-08-13).

Adding a second sharing system alongside the file share would mean two ways to share the same form that disagree with each other.

Nextcloud is now solving this at the platform level: nextcloud/server#51803 "Unified sharing across apps", milestone Nextcloud 35, with the bulk merged in PR nextcloud/server#62241 (2026-07-20). The API currently lives in the NCU\Sharing unstable namespace and is marked @experimental, so no timeline is promised — but that is the mechanism FormVox should adopt when it stabilises, rather than inventing its own.

Scope

Files touched ShareDialog.vue, SettingsPanel.vue, new helper in src/utils/
Translation strings 3 changed, 1 new
Data model / API no change
Migration none
Risk low — no behaviour change, only naming and navigation

Open questions

  1. Is Response link the right name? The dialog does more than the link alone (QR, embed, webhooks, response limit). Alternatives: Publish, Collect responses.
  2. Where should openNativeShareDialog live now that two components use it? src/utils/ currently holds l10n.js and odt-export.js.
  3. Should the editor's empty state also point at Files? A user who has never shared anything is never shown that sharing lives there.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with src/components/ShareDialog.vue and src/components/SettingsPanel.vue, especially the listed labels and openNativeShareDialog implementation. Decide where the shared helper belongs, then verify the dialog distinguishes response-link restrictions from form access and that Manage sharing opens the native Nextcloud sharing sidebar.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript
Domain
frontend
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.