5
5
6
6
<template >
7
7
<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 >
8
30
<NcCheckboxRadioSwitch
9
31
:checked =" form.isAnonymous"
10
- :disabled =" formArchived"
32
+ :disabled =" formArchived || locked "
11
33
type =" switch"
12
34
@update:checked =" onAnonChange" >
13
35
<!-- TRANSLATORS Checkbox to select whether responses will be stored anonymously or not -->
16
38
<NcCheckboxRadioSwitch
17
39
v-tooltip =" disableSubmitMultipleExplanation"
18
40
:checked =" submitMultiple"
19
- :disabled =" disableSubmitMultiple || formArchived"
41
+ :disabled =" disableSubmitMultiple || formArchived || locked "
20
42
type =" switch"
21
43
@update:checked =" onSubmitMultipleChange" >
22
44
{{ t('forms', 'Allow multiple responses per person') }}
23
45
</NcCheckboxRadioSwitch >
24
46
<NcCheckboxRadioSwitch
25
47
:model-value =" form.allowEditSubmissions"
26
- :disabled =" formArchived"
48
+ :disabled =" formArchived || locked "
27
49
type =" switch"
28
50
@update:model-value =" onAllowEditSubmissionsChange" >
29
51
{{ t('forms', 'Allow editing own responses') }}
30
52
</NcCheckboxRadioSwitch >
31
53
<NcCheckboxRadioSwitch
32
54
:checked =" formExpires"
33
- :disabled =" formArchived"
55
+ :disabled =" formArchived || locked "
34
56
type =" switch"
35
57
@update:checked =" onFormExpiresChange" >
36
58
{{ t('forms', 'Set expiration date') }}
39
61
<NcDateTimePicker
40
62
id =" expiresDatetimePicker"
41
63
:clearable =" false"
64
+ :disabled =" locked"
42
65
:disabled-date =" notBeforeToday"
43
66
:disabled-time =" notBeforeNow"
44
67
:editable =" false"
50
73
@change =" onExpirationDateChange" />
51
74
<NcCheckboxRadioSwitch
52
75
:checked =" form.showExpiration"
76
+ :disabled =" locked"
53
77
type =" switch"
54
78
@update:checked =" onShowExpirationChange" >
55
79
{{ t('forms', 'Show expiration date on form') }}
56
80
</NcCheckboxRadioSwitch >
57
81
</div >
58
82
<NcCheckboxRadioSwitch
59
83
:checked =" formClosed"
60
- :disabled =" formArchived"
84
+ :disabled =" formArchived || locked "
61
85
aria-describedby =" forms-settings__close-form"
62
86
type =" switch"
63
87
@update:checked =" onFormClosedChange" >
66
90
<p id =" forms-settings__close-form" class =" settings-hint" >
67
91
{{ t('forms', 'Closed forms do not accept new submissions.') }}
68
92
</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 >
69
104
<NcCheckboxRadioSwitch
70
105
:checked =" formArchived"
71
106
aria-describedby =" forms-settings__archive-form"
107
+ :disabled =" locked"
72
108
type =" switch"
73
109
@update:checked =" onFormArchivedChange" >
74
110
{{ t('forms', 'Archive form') }}
83
119
</p >
84
120
<NcCheckboxRadioSwitch
85
121
:checked =" hasCustomSubmissionMessage"
86
- :disabled =" formArchived"
122
+ :disabled =" formArchived || locked "
87
123
type =" switch"
88
124
@update:checked =" onUpdateHasCustomSubmissionMessage" >
89
125
{{ t('forms', 'Custom submission message') }}
103
139
aria-describedby =" forms-submission-message-description"
104
140
:aria-label =" t('forms', 'Custom submission message')"
105
141
:value =" form.submissionMessage"
142
+ :disabled =" locked"
106
143
:maxlength =" maxStringLengths.submissionMessage"
107
144
:placeholder ="
108
145
t(
132
169
</div >
133
170
</div >
134
171
135
- <TransferOwnership :form =" form" />
172
+ <TransferOwnership :locked = " locked " : form =" form" />
136
173
</div >
137
174
</template >
138
175
139
176
<script >
177
+ import { getCurrentUser } from ' @nextcloud/auth'
140
178
import moment from ' @nextcloud/moment'
179
+ import NcButton from ' @nextcloud/vue/components/NcButton'
141
180
import NcCheckboxRadioSwitch from ' @nextcloud/vue/components/NcCheckboxRadioSwitch'
142
181
import NcDateTimePicker from ' @nextcloud/vue/components/NcDateTimePicker'
182
+ import NcIconSvgWrapper from ' @nextcloud/vue/components/NcIconSvgWrapper'
183
+ import NcNoteCard from ' @nextcloud/vue/components/NcNoteCard'
143
184
import ShareTypes from ' ../../mixins/ShareTypes.js'
144
185
import TransferOwnership from ' ./TransferOwnership.vue'
145
186
146
187
import { directive as ClickOutside } from ' v-click-outside'
147
188
import { loadState } from ' @nextcloud/initial-state'
148
189
import { FormState } from ' ../../models/Constants.ts'
190
+ import svgLockOpen from ' ../../../img/lock_open.svg?raw'
149
191
150
192
export default {
151
193
components: {
194
+ NcButton,
152
195
NcCheckboxRadioSwitch,
153
196
NcDateTimePicker,
197
+ NcIconSvgWrapper,
198
+ NcNoteCard,
154
199
TransferOwnership,
155
200
},
156
201
@@ -167,6 +212,16 @@ export default {
167
212
type: Object ,
168
213
required: true ,
169
214
},
215
+
216
+ locked: {
217
+ type: Boolean ,
218
+ required: true ,
219
+ },
220
+
221
+ lockedUntil: {
222
+ type: String ,
223
+ default: ' ' ,
224
+ },
170
225
},
171
226
172
227
data () {
@@ -178,10 +233,19 @@ export default {
178
233
maxStringLengths: loadState (' forms' , ' maxStringLengths' ),
179
234
/** If custom submission message is shown as input or rendered markdown */
180
235
editMessage: false ,
236
+ svgLockOpen,
181
237
}
182
238
},
183
239
184
240
computed: {
241
+ isCurrentUserOwner () {
242
+ return getCurrentUser ().uid === this .form .ownerId
243
+ },
244
+
245
+ isFormLockedPermanently () {
246
+ return this .locked && this .form .lockedUntil === 0
247
+ },
248
+
185
249
/**
186
250
* If the form has a custom submission message or the user wants to add one (settings switch)
187
251
*/
@@ -297,6 +361,10 @@ export default {
297
361
)
298
362
},
299
363
364
+ onFormLockChange (locked ) {
365
+ this .$emit (' update:formProp' , ' lockedUntil' , locked ? 0 : null )
366
+ },
367
+
300
368
onFormArchivedChange (isArchived ) {
301
369
this .$emit (
302
370
' update:formProp' ,
@@ -386,7 +454,6 @@ export default {
386
454
.sidebar - tabs__content {
387
455
display: flex;
388
456
flex- direction: column;
389
- gap: 8px ;
390
457
}
391
458
.submission - message {
392
459
& __description {
0 commit comments