55
66<template >
77 <div class =" sidebar-tabs__content" >
8+ <NcNoteCard
9+ v-if =" locked"
10+ type =" info"
11+ :heading =" t('forms', 'Form is locked')"
12+ :text ="
13+ t('forms', 'Lock by {lockedBy}, expires: {lockedUntil}', {
14+ lockedBy: form.lockedBy ? form.lockedBy : form.ownerId,
15+ lockedUntil:
16+ lockedUntil === '' ? t('forms', 'never') : lockedUntil,
17+ })
18+ " />
19+ <NcButton
20+ v-if =" locked && isCurrentUserOwner"
21+ wide
22+ @click =" onFormLockChange(false)" >
23+ <template #icon >
24+ <NcIconSvgWrapper
25+ :svg =" svgLockOpen"
26+ :name =" t('forms', 'Open lock')" />
27+ </template >
28+ {{ t('forms', 'Unlock form') }}
29+ </NcButton >
830 <NcCheckboxRadioSwitch
931 :checked =" form.isAnonymous"
10- :disabled =" formArchived"
32+ :disabled =" formArchived || locked "
1133 type =" switch"
1234 @update:checked =" onAnonChange" >
1335 <!-- TRANSLATORS Checkbox to select whether responses will be stored anonymously or not -->
1638 <NcCheckboxRadioSwitch
1739 v-tooltip =" disableSubmitMultipleExplanation"
1840 :checked =" submitMultiple"
19- :disabled =" disableSubmitMultiple || formArchived"
41+ :disabled =" disableSubmitMultiple || formArchived || locked "
2042 type =" switch"
2143 @update:checked =" onSubmitMultipleChange" >
2244 {{ t('forms', 'Allow multiple responses per person') }}
2345 </NcCheckboxRadioSwitch >
2446 <NcCheckboxRadioSwitch
2547 :model-value =" form.allowEditSubmissions"
26- :disabled =" formArchived"
48+ :disabled =" formArchived || locked "
2749 type =" switch"
2850 @update:model-value =" onAllowEditSubmissionsChange" >
2951 {{ t('forms', 'Allow editing own responses') }}
3052 </NcCheckboxRadioSwitch >
3153 <NcCheckboxRadioSwitch
3254 :checked =" formExpires"
33- :disabled =" formArchived"
55+ :disabled =" formArchived || locked "
3456 type =" switch"
3557 @update:checked =" onFormExpiresChange" >
3658 {{ t('forms', 'Set expiration date') }}
3961 <NcDateTimePicker
4062 id =" expiresDatetimePicker"
4163 :clearable =" false"
64+ :disabled =" locked"
4265 :disabled-date =" notBeforeToday"
4366 :disabled-time =" notBeforeNow"
4467 :editable =" false"
5073 @change =" onExpirationDateChange" />
5174 <NcCheckboxRadioSwitch
5275 :checked =" form.showExpiration"
76+ :disabled =" locked"
5377 type =" switch"
5478 @update:checked =" onShowExpirationChange" >
5579 {{ t('forms', 'Show expiration date on form') }}
5680 </NcCheckboxRadioSwitch >
5781 </div >
5882 <NcCheckboxRadioSwitch
5983 :checked =" formClosed"
60- :disabled =" formArchived"
84+ :disabled =" formArchived || locked "
6185 aria-describedby =" forms-settings__close-form"
6286 type =" switch"
6387 @update:checked =" onFormClosedChange" >
6690 <p id =" forms-settings__close-form" class =" settings-hint" >
6791 {{ t('forms', 'Closed forms do not accept new submissions.') }}
6892 </p >
93+ <NcCheckboxRadioSwitch
94+ :model-value =" isFormLockedPermanently"
95+ :disabled ="
96+ formArchived
97+ || (locked && form.lockedUntil !== 0)
98+ || !isCurrentUserOwner
99+ "
100+ type =" switch"
101+ @update:model-value =" onFormLockChange" >
102+ {{ t('forms', 'Lock form permanently') }}
103+ </NcCheckboxRadioSwitch >
69104 <NcCheckboxRadioSwitch
70105 :checked =" formArchived"
71106 aria-describedby =" forms-settings__archive-form"
107+ :disabled =" locked"
72108 type =" switch"
73109 @update:checked =" onFormArchivedChange" >
74110 {{ t('forms', 'Archive form') }}
83119 </p >
84120 <NcCheckboxRadioSwitch
85121 :checked =" hasCustomSubmissionMessage"
86- :disabled =" formArchived"
122+ :disabled =" formArchived || locked "
87123 type =" switch"
88124 @update:checked =" onUpdateHasCustomSubmissionMessage" >
89125 {{ t('forms', 'Custom submission message') }}
103139 aria-describedby =" forms-submission-message-description"
104140 :aria-label =" t('forms', 'Custom submission message')"
105141 :value =" form.submissionMessage"
142+ :disabled =" locked"
106143 :maxlength =" maxStringLengths.submissionMessage"
107144 :placeholder ="
108145 t(
132169 </div >
133170 </div >
134171
135- <TransferOwnership :form =" form" />
172+ <TransferOwnership :locked = " locked " : form =" form" />
136173 </div >
137174</template >
138175
139176<script >
177+ import { getCurrentUser } from ' @nextcloud/auth'
140178import moment from ' @nextcloud/moment'
179+ import NcButton from ' @nextcloud/vue/components/NcButton'
141180import NcCheckboxRadioSwitch from ' @nextcloud/vue/components/NcCheckboxRadioSwitch'
142181import NcDateTimePicker from ' @nextcloud/vue/components/NcDateTimePicker'
182+ import NcIconSvgWrapper from ' @nextcloud/vue/components/NcIconSvgWrapper'
183+ import NcNoteCard from ' @nextcloud/vue/components/NcNoteCard'
143184import ShareTypes from ' ../../mixins/ShareTypes.js'
144185import TransferOwnership from ' ./TransferOwnership.vue'
145186
146187import { directive as ClickOutside } from ' v-click-outside'
147188import { loadState } from ' @nextcloud/initial-state'
148189import { FormState } from ' ../../models/Constants.ts'
190+ import svgLockOpen from ' ../../../img/lock_open.svg?raw'
149191
150192export default {
151193 components: {
194+ NcButton,
152195 NcCheckboxRadioSwitch,
153196 NcDateTimePicker,
197+ NcIconSvgWrapper,
198+ NcNoteCard,
154199 TransferOwnership,
155200 },
156201
@@ -167,6 +212,16 @@ export default {
167212 type: Object ,
168213 required: true ,
169214 },
215+
216+ locked: {
217+ type: Boolean ,
218+ required: true ,
219+ },
220+
221+ lockedUntil: {
222+ type: String ,
223+ default: ' ' ,
224+ },
170225 },
171226
172227 data () {
@@ -178,10 +233,19 @@ export default {
178233 maxStringLengths: loadState (' forms' , ' maxStringLengths' ),
179234 /** If custom submission message is shown as input or rendered markdown */
180235 editMessage: false ,
236+ svgLockOpen,
181237 }
182238 },
183239
184240 computed: {
241+ isCurrentUserOwner () {
242+ return getCurrentUser ().uid === this .form .ownerId
243+ },
244+
245+ isFormLockedPermanently () {
246+ return this .locked && this .form .lockedUntil === 0
247+ },
248+
185249 /**
186250 * If the form has a custom submission message or the user wants to add one (settings switch)
187251 */
@@ -297,6 +361,10 @@ export default {
297361 )
298362 },
299363
364+ onFormLockChange (locked ) {
365+ this .$emit (' update:formProp' , ' lockedUntil' , locked ? 0 : null )
366+ },
367+
300368 onFormArchivedChange (isArchived ) {
301369 this .$emit (
302370 ' update:formProp' ,
@@ -386,7 +454,6 @@ export default {
386454.sidebar - tabs__content {
387455 display: flex;
388456 flex- direction: column;
389- gap: 8px ;
390457}
391458.submission - message {
392459 & __description {
0 commit comments