@windward/integrations 0.10.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/components/Content/Blocks/ExternalIntegration/LtiConsumer.vue +3 -0
- package/components/ExternalIntegration/Driver/Lti1p1/ManageConsumer.vue +43 -11
- package/components/ExternalIntegration/Driver/Lti1p1/ManageConsumers.vue +9 -2
- package/components/ExternalIntegration/Driver/Lti1p1/ManageProvider.vue +4 -1
- package/components/ExternalIntegration/Driver/Lti1p1/ManageProviders.vue +1 -0
- package/components/ExternalIntegration/Driver/Lti1p3/ManageConsumer.vue +45 -10
- package/components/ExternalIntegration/Driver/Lti1p3/ManageConsumers.vue +9 -2
- package/components/ExternalIntegration/Driver/Lti1p3/ManageProvider.vue +4 -0
- package/components/ExternalIntegration/Driver/Lti1p3/ManageProviders.vue +1 -0
- package/components/ExternalIntegration/Driver/ManageLti1p1.vue +2 -4
- package/components/ExternalIntegration/Driver/ManageLti1p3.vue +2 -4
- package/components/FileImport/FileImportMenu.vue +24 -19
- package/components/Settings/ExternalIntegration/LtiConsumerSettings.vue +6 -1
- package/components/Settings/ExternalIntegration/ManageCourseIntegrationSettings.vue +5 -3
- package/i18n/en-US/components/external_integration/driver/lti1p3.ts +1 -1
- package/i18n/en-US/components/external_integration/index.ts +5 -2
- package/i18n/en-US/shared/index.ts +2 -0
- package/i18n/en-US/shared/notification.ts +14 -0
- package/i18n/es-ES/components/external_integration/index.ts +5 -2
- package/i18n/es-ES/shared/index.ts +2 -0
- package/i18n/es-ES/shared/notification.ts +16 -0
- package/i18n/sv-SE/components/external_integration/index.ts +5 -2
- package/i18n/sv-SE/shared/index.ts +2 -0
- package/i18n/sv-SE/shared/notification.ts +15 -0
- package/package.json +1 -1
- package/plugin.js +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -230,6 +230,9 @@ export default {
|
|
|
230
230
|
if (_.isEmpty(this.block.metadata.config.instructions)) {
|
|
231
231
|
this.block.metadata.config.instructions = ''
|
|
232
232
|
}
|
|
233
|
+
if (_.isEmpty(this.block.metadata.config.launch_type)) {
|
|
234
|
+
this.block.metadata.config.launch_type = 'new_window'
|
|
235
|
+
}
|
|
233
236
|
},
|
|
234
237
|
mounted() {
|
|
235
238
|
if (
|
|
@@ -4,7 +4,12 @@
|
|
|
4
4
|
<v-progress-circular size="128" indeterminate />
|
|
5
5
|
</div>
|
|
6
6
|
<div v-if="render">
|
|
7
|
-
<v-form
|
|
7
|
+
<v-form
|
|
8
|
+
ref="form"
|
|
9
|
+
:key="updateKey"
|
|
10
|
+
v-model="formValid"
|
|
11
|
+
@submit.prevent
|
|
12
|
+
>
|
|
8
13
|
<v-row justify="center" align="center" class="mt-5">
|
|
9
14
|
<v-col cols="12">
|
|
10
15
|
<v-text-field
|
|
@@ -19,12 +24,14 @@
|
|
|
19
24
|
'windward.integrations.components.external_integration.target_url'
|
|
20
25
|
)
|
|
21
26
|
"
|
|
27
|
+
:rules="$Validation.getRule('url')"
|
|
22
28
|
></v-text-field>
|
|
23
29
|
<v-text-field
|
|
24
30
|
v-model="consumer.name"
|
|
25
31
|
:placeholder="$t('shared.forms.name')"
|
|
26
32
|
:label="$t('shared.forms.name')"
|
|
27
33
|
:hint="$t('shared.forms.name')"
|
|
34
|
+
:rules="$Validation.getRule('exists')"
|
|
28
35
|
></v-text-field>
|
|
29
36
|
|
|
30
37
|
<label for="description">{{
|
|
@@ -57,6 +64,7 @@
|
|
|
57
64
|
(consumer.id ? 'change_key' : 'key')
|
|
58
65
|
)
|
|
59
66
|
"
|
|
67
|
+
:rules="$Validation.getRule('exists')"
|
|
60
68
|
></v-text-field>
|
|
61
69
|
|
|
62
70
|
<v-text-field
|
|
@@ -75,9 +83,22 @@
|
|
|
75
83
|
: 'secret')
|
|
76
84
|
)
|
|
77
85
|
"
|
|
86
|
+
:rules="$Validation.getRule('exists')"
|
|
78
87
|
>
|
|
79
88
|
</v-text-field>
|
|
80
89
|
|
|
90
|
+
<v-select
|
|
91
|
+
v-model="consumer.metadata.security_level"
|
|
92
|
+
:items="securityLevels"
|
|
93
|
+
item-text="name"
|
|
94
|
+
item-value="value"
|
|
95
|
+
:label="$t(
|
|
96
|
+
'windward.integrations.components.external_integration.security_level'
|
|
97
|
+
)"
|
|
98
|
+
outlined
|
|
99
|
+
:rules="$Validation.getRule('exists')"
|
|
100
|
+
></v-select>
|
|
101
|
+
|
|
81
102
|
<v-data-table
|
|
82
103
|
:headers="customParameterHeaders"
|
|
83
104
|
:items="consumer.metadata.custom"
|
|
@@ -133,15 +154,6 @@
|
|
|
133
154
|
</div>
|
|
134
155
|
</template>
|
|
135
156
|
</v-data-table>
|
|
136
|
-
<br />
|
|
137
|
-
<v-select
|
|
138
|
-
v-model="consumer.metadata.security_level"
|
|
139
|
-
:items="securityLevels"
|
|
140
|
-
item-text="name"
|
|
141
|
-
item-value="value"
|
|
142
|
-
label="Security Level"
|
|
143
|
-
outlined
|
|
144
|
-
></v-select>
|
|
145
157
|
</v-col>
|
|
146
158
|
</v-row>
|
|
147
159
|
</v-form>
|
|
@@ -157,6 +169,7 @@ import Organization from '~/models/Organization'
|
|
|
157
169
|
import Course from '~/models/Course'
|
|
158
170
|
import TextEditor from '~/components/Text/TextEditor.vue'
|
|
159
171
|
import FormVue from '~/components/Core/Form'
|
|
172
|
+
import Crypto from '~/helpers/Crypto'
|
|
160
173
|
|
|
161
174
|
export default {
|
|
162
175
|
name: 'ManageLti1p1ConsumerDriver',
|
|
@@ -214,6 +227,7 @@ export default {
|
|
|
214
227
|
{ name: 'Anonymous', value: 'anonymous' },
|
|
215
228
|
// { name: 'Custom', value: 'custom' }, // TODO: When this is selected provide direct access to check off LTI fields
|
|
216
229
|
],
|
|
230
|
+
updateKey: Crypto.id(),
|
|
217
231
|
}
|
|
218
232
|
},
|
|
219
233
|
computed: {
|
|
@@ -268,7 +282,6 @@ export default {
|
|
|
268
282
|
new Organization({ id: this.organization.id }),
|
|
269
283
|
new Course({ id: this.course.id })
|
|
270
284
|
)
|
|
271
|
-
|
|
272
285
|
try {
|
|
273
286
|
consumer = await consumer.save()
|
|
274
287
|
this.consumer = consumer
|
|
@@ -279,6 +292,7 @@ export default {
|
|
|
279
292
|
|
|
280
293
|
this.$dialog.success(this.$t('shared.forms.saved'))
|
|
281
294
|
this.$emit('update:consumer', consumerEvent)
|
|
295
|
+
this.resetConsumer()
|
|
282
296
|
} catch (e) {
|
|
283
297
|
this.$dialog.error(
|
|
284
298
|
this.$t('windward.integrations.shared.error.save_failed')
|
|
@@ -290,6 +304,24 @@ export default {
|
|
|
290
304
|
await this.save()
|
|
291
305
|
}
|
|
292
306
|
},
|
|
307
|
+
async onSaveAndNew() {
|
|
308
|
+
this.$refs.form.validate()
|
|
309
|
+
if (this.formValid) {
|
|
310
|
+
await this.save()
|
|
311
|
+
}
|
|
312
|
+
},
|
|
313
|
+
resetConsumer() {
|
|
314
|
+
const emptyConsumer = {
|
|
315
|
+
version: '1.1',
|
|
316
|
+
metadata: {
|
|
317
|
+
custom: [],
|
|
318
|
+
security_level: '',
|
|
319
|
+
security: [],
|
|
320
|
+
},
|
|
321
|
+
}
|
|
322
|
+
this.consumer = new LtiConsumer(emptyConsumer)
|
|
323
|
+
this.updateKey = Crypto.id()
|
|
324
|
+
},
|
|
293
325
|
},
|
|
294
326
|
}
|
|
295
327
|
</script>
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
action-save
|
|
6
6
|
action-save-new
|
|
7
7
|
@click:save="onSaved"
|
|
8
|
+
@click:save-new="onSaved"
|
|
8
9
|
>
|
|
9
10
|
<template #title>{{
|
|
10
11
|
$t(
|
|
@@ -218,8 +219,14 @@ export default {
|
|
|
218
219
|
],
|
|
219
220
|
})
|
|
220
221
|
},
|
|
221
|
-
deleteConsumer(consumer) {
|
|
222
|
-
|
|
222
|
+
async deleteConsumer(consumer) {
|
|
223
|
+
try {
|
|
224
|
+
await consumer.delete()
|
|
225
|
+
this.loadConsumers()
|
|
226
|
+
} catch (error) {
|
|
227
|
+
this.$dialog.error(this.$t('shared.response.error'))
|
|
228
|
+
console.error('Error deleting consumer', error)
|
|
229
|
+
}
|
|
223
230
|
},
|
|
224
231
|
},
|
|
225
232
|
}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
<v-form
|
|
8
8
|
:id="formId"
|
|
9
9
|
ref="form"
|
|
10
|
+
:key="updateKey"
|
|
10
11
|
v-model="formValid"
|
|
11
12
|
@submit="onFormSubmit"
|
|
12
13
|
>
|
|
@@ -15,7 +16,6 @@
|
|
|
15
16
|
<ProviderTargetPicker
|
|
16
17
|
v-model="provider"
|
|
17
18
|
></ProviderTargetPicker>
|
|
18
|
-
|
|
19
19
|
<v-text-field
|
|
20
20
|
id="target-url"
|
|
21
21
|
v-model="provider.target"
|
|
@@ -267,6 +267,7 @@ import FormVue from '~/components/Core/Form.vue'
|
|
|
267
267
|
import Role from '~/models/Role'
|
|
268
268
|
import Organization from '~/models/Organization'
|
|
269
269
|
import Course from '~/models/Course'
|
|
270
|
+
import Crypto from '~/helpers/Crypto'
|
|
270
271
|
|
|
271
272
|
export default {
|
|
272
273
|
name: 'ManageLti1p1ProviderDriver',
|
|
@@ -301,6 +302,7 @@ export default {
|
|
|
301
302
|
name: null,
|
|
302
303
|
id: null,
|
|
303
304
|
},
|
|
305
|
+
updateKey: Crypto.id(),
|
|
304
306
|
}
|
|
305
307
|
},
|
|
306
308
|
async fetch() {
|
|
@@ -399,6 +401,7 @@ export default {
|
|
|
399
401
|
version: '1.1',
|
|
400
402
|
})
|
|
401
403
|
}
|
|
404
|
+
this.updateKey = Crypto.id()
|
|
402
405
|
},
|
|
403
406
|
async onSave() {
|
|
404
407
|
this.$refs.form.validate()
|
|
@@ -4,7 +4,12 @@
|
|
|
4
4
|
<v-progress-circular size="128" indeterminate />
|
|
5
5
|
</div>
|
|
6
6
|
<div v-if="render">
|
|
7
|
-
<v-form
|
|
7
|
+
<v-form
|
|
8
|
+
ref="form"
|
|
9
|
+
:key="updateKey"
|
|
10
|
+
v-model="formValid"
|
|
11
|
+
@submit.prevent
|
|
12
|
+
>
|
|
8
13
|
<v-row justify="center" align="center" class="mt-5">
|
|
9
14
|
<v-col cols="12">
|
|
10
15
|
<v-text-field
|
|
@@ -19,12 +24,14 @@
|
|
|
19
24
|
'windward.integrations.components.external_integration.target_url'
|
|
20
25
|
)
|
|
21
26
|
"
|
|
27
|
+
:rules="$Validation.getRule('url')"
|
|
22
28
|
></v-text-field>
|
|
23
29
|
<v-text-field
|
|
24
30
|
v-model="consumer.name"
|
|
25
31
|
:placeholder="$t('shared.forms.name')"
|
|
26
32
|
:label="$t('shared.forms.name')"
|
|
27
33
|
:hint="$t('shared.forms.name')"
|
|
34
|
+
:rules="$Validation.getRule('exists')"
|
|
28
35
|
></v-text-field>
|
|
29
36
|
|
|
30
37
|
<label for="description">{{
|
|
@@ -54,6 +61,7 @@
|
|
|
54
61
|
'windward.integrations.components.external_integration.driver.lti1p3.tool_oidc_auth_endpoint'
|
|
55
62
|
)
|
|
56
63
|
"
|
|
64
|
+
:rules="$Validation.getRule('url')"
|
|
57
65
|
></v-text-field>
|
|
58
66
|
<v-text-field
|
|
59
67
|
v-model="consumer.metadata.tool_public_keyset_url"
|
|
@@ -67,8 +75,23 @@
|
|
|
67
75
|
'windward.integrations.components.external_integration.driver.lti1p3.tool_public_keyset_url'
|
|
68
76
|
)
|
|
69
77
|
"
|
|
78
|
+
:rules="$Validation.getRule('url')"
|
|
70
79
|
></v-text-field>
|
|
71
80
|
|
|
81
|
+
<v-select
|
|
82
|
+
v-model="consumer.metadata.security_level"
|
|
83
|
+
:items="securityLevels"
|
|
84
|
+
item-text="name"
|
|
85
|
+
item-value="value"
|
|
86
|
+
:label="
|
|
87
|
+
$t(
|
|
88
|
+
'windward.integrations.components.external_integration.security_level'
|
|
89
|
+
)
|
|
90
|
+
"
|
|
91
|
+
outlined
|
|
92
|
+
:rules="$Validation.getRule('exists')"
|
|
93
|
+
></v-select>
|
|
94
|
+
|
|
72
95
|
<v-data-table
|
|
73
96
|
:headers="customParameterHeaders"
|
|
74
97
|
:items="consumer.metadata.custom"
|
|
@@ -124,15 +147,6 @@
|
|
|
124
147
|
</div>
|
|
125
148
|
</template>
|
|
126
149
|
</v-data-table>
|
|
127
|
-
<br />
|
|
128
|
-
<v-select
|
|
129
|
-
v-model="consumer.metadata.security_level"
|
|
130
|
-
:items="securityLevels"
|
|
131
|
-
item-text="name"
|
|
132
|
-
item-value="value"
|
|
133
|
-
label="Security Level"
|
|
134
|
-
outlined
|
|
135
|
-
></v-select>
|
|
136
150
|
</v-col>
|
|
137
151
|
</v-row>
|
|
138
152
|
</v-form>
|
|
@@ -148,6 +162,7 @@ import Organization from '~/models/Organization'
|
|
|
148
162
|
import Course from '~/models/Course'
|
|
149
163
|
import TextEditor from '~/components/Text/TextEditor.vue'
|
|
150
164
|
import FormVue from '~/components/Core/Form'
|
|
165
|
+
import Crypto from '~/helpers/Crypto'
|
|
151
166
|
|
|
152
167
|
export default {
|
|
153
168
|
name: 'ManageLti1p3ConsumerDriver',
|
|
@@ -205,6 +220,7 @@ export default {
|
|
|
205
220
|
{ name: 'Anonymous', value: 'anonymous' },
|
|
206
221
|
// { name: 'Custom', value: 'custom' }, // TODO: When this is selected provide direct access to check off LTI fields
|
|
207
222
|
],
|
|
223
|
+
updateKey: Crypto.id(),
|
|
208
224
|
}
|
|
209
225
|
},
|
|
210
226
|
computed: {
|
|
@@ -270,6 +286,7 @@ export default {
|
|
|
270
286
|
|
|
271
287
|
this.$dialog.success(this.$t('shared.forms.saved'))
|
|
272
288
|
this.$emit('update:consumer', consumerEvent)
|
|
289
|
+
this.resetConsumer()
|
|
273
290
|
} catch (e) {
|
|
274
291
|
this.$dialog.error(
|
|
275
292
|
this.$t('windward.integrations.shared.error.save_failed')
|
|
@@ -281,6 +298,24 @@ export default {
|
|
|
281
298
|
await this.save()
|
|
282
299
|
}
|
|
283
300
|
},
|
|
301
|
+
async onSaveAndNew() {
|
|
302
|
+
this.$refs.form.validate()
|
|
303
|
+
if (this.formValid) {
|
|
304
|
+
await this.save()
|
|
305
|
+
}
|
|
306
|
+
},
|
|
307
|
+
resetConsumer() {
|
|
308
|
+
const emptyConsumer = {
|
|
309
|
+
version: '1.3',
|
|
310
|
+
metadata: {
|
|
311
|
+
custom: [],
|
|
312
|
+
security_level: '',
|
|
313
|
+
security: [],
|
|
314
|
+
},
|
|
315
|
+
}
|
|
316
|
+
this.consumer = new LtiConsumer(emptyConsumer)
|
|
317
|
+
this.updateKey = Crypto.id()
|
|
318
|
+
},
|
|
284
319
|
},
|
|
285
320
|
}
|
|
286
321
|
</script>
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
action-save
|
|
6
6
|
action-save-new
|
|
7
7
|
@click:save="onSaved"
|
|
8
|
+
@click:save-new="onSaved"
|
|
8
9
|
>
|
|
9
10
|
<template #title>{{
|
|
10
11
|
$t(
|
|
@@ -245,8 +246,14 @@ export default {
|
|
|
245
246
|
],
|
|
246
247
|
})
|
|
247
248
|
},
|
|
248
|
-
deleteConsumer(consumer) {
|
|
249
|
-
|
|
249
|
+
async deleteConsumer(consumer) {
|
|
250
|
+
try {
|
|
251
|
+
await consumer.delete()
|
|
252
|
+
await this.loadConsumers()
|
|
253
|
+
} catch (e) {
|
|
254
|
+
this.$dialog.error(this.$t('shared.response.error'))
|
|
255
|
+
console.error('Error deleting consumer', e)
|
|
256
|
+
}
|
|
250
257
|
},
|
|
251
258
|
},
|
|
252
259
|
}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
<v-form
|
|
8
8
|
:id="formId"
|
|
9
9
|
ref="form"
|
|
10
|
+
:key="updateKey"
|
|
10
11
|
v-model="formValid"
|
|
11
12
|
@submit="onFormSubmit"
|
|
12
13
|
>
|
|
@@ -367,6 +368,7 @@ import FormVue from '~/components/Core/Form.vue'
|
|
|
367
368
|
import Role from '~/models/Role'
|
|
368
369
|
import Organization from '~/models/Organization'
|
|
369
370
|
import Course from '~/models/Course'
|
|
371
|
+
import Crypto from '~/helpers/Crypto'
|
|
370
372
|
|
|
371
373
|
export default {
|
|
372
374
|
name: 'ManageLti1p3ProviderDriver',
|
|
@@ -395,6 +397,7 @@ export default {
|
|
|
395
397
|
name: null,
|
|
396
398
|
id: null,
|
|
397
399
|
},
|
|
400
|
+
updateKey: Crypto.id(),
|
|
398
401
|
}
|
|
399
402
|
},
|
|
400
403
|
async fetch() {
|
|
@@ -516,6 +519,7 @@ export default {
|
|
|
516
519
|
version: '1.3',
|
|
517
520
|
})
|
|
518
521
|
}
|
|
522
|
+
this.updateKey = Crypto.id()
|
|
519
523
|
},
|
|
520
524
|
async onSave() {
|
|
521
525
|
this.$refs.form.validate()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div>
|
|
3
|
-
<v-expansion-panels
|
|
3
|
+
<v-expansion-panels flat accordion>
|
|
4
4
|
<v-expansion-panel>
|
|
5
5
|
<v-expansion-panel-header>
|
|
6
6
|
{{
|
|
@@ -37,9 +37,7 @@ export default {
|
|
|
37
37
|
name: 'ManageLti1p1Driver',
|
|
38
38
|
components: { ManageProviders, ManageConsumers },
|
|
39
39
|
data() {
|
|
40
|
-
return {
|
|
41
|
-
panel: 0,
|
|
42
|
-
}
|
|
40
|
+
return {}
|
|
43
41
|
},
|
|
44
42
|
}
|
|
45
43
|
</script>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div>
|
|
3
|
-
<v-expansion-panels
|
|
3
|
+
<v-expansion-panels flat accordion>
|
|
4
4
|
<v-expansion-panel>
|
|
5
5
|
<v-expansion-panel-header>
|
|
6
6
|
{{
|
|
@@ -37,9 +37,7 @@ export default {
|
|
|
37
37
|
name: 'ManageLti1p3Driver',
|
|
38
38
|
components: { ManageProviders, ManageConsumers },
|
|
39
39
|
data() {
|
|
40
|
-
return {
|
|
41
|
-
panel: 0,
|
|
42
|
-
}
|
|
40
|
+
return {}
|
|
43
41
|
},
|
|
44
42
|
}
|
|
45
43
|
</script>
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div>
|
|
3
3
|
<v-list-item
|
|
4
|
-
v-for="
|
|
5
|
-
:key="
|
|
6
|
-
|
|
4
|
+
v-for="vendor in vendors"
|
|
5
|
+
:key="vendor.product_code"
|
|
6
|
+
:disabled="!vendor.enabled"
|
|
7
|
+
@click="onClickImport(vendor)"
|
|
7
8
|
>
|
|
8
9
|
<v-list-item-icon>
|
|
9
|
-
<v-icon>{{
|
|
10
|
+
<v-icon>{{ vendor.icon }}</v-icon>
|
|
10
11
|
</v-list-item-icon>
|
|
11
|
-
<v-list-item-title>{{ $t(
|
|
12
|
+
<v-list-item-title>{{ $t(vendor.i18n) }}</v-list-item-title>
|
|
12
13
|
</v-list-item>
|
|
13
14
|
|
|
14
15
|
<DialogBox
|
|
@@ -22,7 +23,7 @@
|
|
|
22
23
|
<template #form="{ on, attrs }">
|
|
23
24
|
<component
|
|
24
25
|
:is="activeVendor.template"
|
|
25
|
-
v-if="activeVendor"
|
|
26
|
+
v-if="activeVendor && activeVendor.organization_integration"
|
|
26
27
|
:organization-integration="
|
|
27
28
|
activeVendor.organization_integration
|
|
28
29
|
"
|
|
@@ -38,8 +39,8 @@
|
|
|
38
39
|
<script>
|
|
39
40
|
import _ from 'lodash'
|
|
40
41
|
import { mapGetters } from 'vuex'
|
|
41
|
-
import Organization from '../../models/Organization'
|
|
42
42
|
import DialogBox from '~/components/Core/DialogBox.vue'
|
|
43
|
+
import Organization from '../../models/Organization'
|
|
43
44
|
|
|
44
45
|
export default {
|
|
45
46
|
name: 'FileImportMenu',
|
|
@@ -77,26 +78,30 @@ export default {
|
|
|
77
78
|
...mapGetters({
|
|
78
79
|
organization: 'organization/get',
|
|
79
80
|
}),
|
|
80
|
-
|
|
81
|
-
const enabled = []
|
|
81
|
+
vendors() {
|
|
82
82
|
// Get only the vendors that are defined to be displayed as a fileImport vendor from plugin.js
|
|
83
|
-
const
|
|
83
|
+
const vendors = _.cloneDeep(_.get(this.metadata, 'vendors', []))
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
85
|
+
for (const vendorIndex in vendors) {
|
|
86
|
+
const productCode = vendors[vendorIndex].product_code
|
|
87
|
+
const found = this.organizationIntegrations.find((orgInt) => {
|
|
88
|
+
return (
|
|
89
|
+
_.get(orgInt, 'vendor.product_code') === productCode &&
|
|
90
|
+
!!vendors[vendorIndex].template
|
|
91
|
+
)
|
|
90
92
|
})
|
|
91
93
|
|
|
92
94
|
if (found) {
|
|
93
95
|
// Set the organization integration so we can reference the api later
|
|
94
|
-
|
|
95
|
-
enabled.push(found)
|
|
96
|
+
vendors[vendorIndex].organization_integration = found
|
|
96
97
|
}
|
|
97
|
-
})
|
|
98
98
|
|
|
99
|
-
|
|
99
|
+
vendors[vendorIndex].enabled =
|
|
100
|
+
vendors[vendorIndex].enabled &&
|
|
101
|
+
_.get(found, 'enabled', false)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return vendors
|
|
100
105
|
},
|
|
101
106
|
},
|
|
102
107
|
mounted() {},
|
|
@@ -171,7 +171,12 @@ export default {
|
|
|
171
171
|
}),
|
|
172
172
|
},
|
|
173
173
|
watch: {},
|
|
174
|
-
beforeMount() {
|
|
174
|
+
beforeMount() {
|
|
175
|
+
// Default the launch type to new window if undefined
|
|
176
|
+
if (_.isEmpty(this.block.metadata.config.launch_type)) {
|
|
177
|
+
this.block.metadata.config.launch_type = 'new_window'
|
|
178
|
+
}
|
|
179
|
+
},
|
|
175
180
|
mounted() {},
|
|
176
181
|
methods: {},
|
|
177
182
|
}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
}}
|
|
20
20
|
</v-tab>
|
|
21
21
|
|
|
22
|
-
<v-tab>
|
|
22
|
+
<v-tab v-if="ltiReady">
|
|
23
23
|
{{
|
|
24
24
|
$t(
|
|
25
25
|
'windward.integrations.pages.course.external_integration.scorm_1p2'
|
|
@@ -29,10 +29,11 @@
|
|
|
29
29
|
</v-tabs>
|
|
30
30
|
|
|
31
31
|
<v-tabs-items v-model="tab">
|
|
32
|
-
<v-tab-item>
|
|
32
|
+
<v-tab-item>
|
|
33
|
+
<ManageLti1p1></ManageLti1p1>
|
|
34
|
+
</v-tab-item>
|
|
33
35
|
<v-tab-item>
|
|
34
36
|
<ManageLti1p3 />
|
|
35
|
-
<!-- <p class="ma-5">LTI 1.3 Not yet implemented</p>-->
|
|
36
37
|
</v-tab-item>
|
|
37
38
|
<v-tab-item>
|
|
38
39
|
<p class="ma-5">SCORM 1.2 Not yet implemented</p>
|
|
@@ -50,6 +51,7 @@ export default {
|
|
|
50
51
|
data() {
|
|
51
52
|
return {
|
|
52
53
|
tab: 0,
|
|
54
|
+
ltiReady: false,
|
|
53
55
|
}
|
|
54
56
|
},
|
|
55
57
|
}
|
|
@@ -13,7 +13,7 @@ export default {
|
|
|
13
13
|
tool_client_id: 'Tool Client ID',
|
|
14
14
|
platform_deployment_id: 'Deployment ID',
|
|
15
15
|
enable_button_feedback:
|
|
16
|
-
'Link can only be enabled once
|
|
16
|
+
'Link can only be enabled once platform client identifier and and keyset urls are set !',
|
|
17
17
|
parameter_name: 'Custom Parameter Name',
|
|
18
18
|
value: 'Value',
|
|
19
19
|
new: 'New LTI Link',
|
|
@@ -5,12 +5,15 @@ export default {
|
|
|
5
5
|
driver: { lti1p1, lti1p3 },
|
|
6
6
|
provider_target: providerTarget,
|
|
7
7
|
|
|
8
|
-
provider_panel_title:
|
|
9
|
-
|
|
8
|
+
provider_panel_title:
|
|
9
|
+
'Provider (users incoming to LearningEdge from another system)',
|
|
10
|
+
consumer_panel_title:
|
|
11
|
+
'Consumer (users outgoing from LearningEdge to another system)',
|
|
10
12
|
|
|
11
13
|
target: 'Target',
|
|
12
14
|
target_url: 'Target Url',
|
|
13
15
|
launch_url: 'Launch Url',
|
|
16
|
+
security_level: 'Security Level',
|
|
14
17
|
|
|
15
18
|
send_grades: 'Send grades to host LMS',
|
|
16
19
|
grade_sync: 'Grade Sync',
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import contentBlocks from './content_blocks'
|
|
2
2
|
import settings from './settings'
|
|
3
3
|
import menu from './menu'
|
|
4
|
+
import notification from './notification'
|
|
4
5
|
import permission from './permission'
|
|
5
6
|
import file from './file'
|
|
6
7
|
import error from './error'
|
|
@@ -9,6 +10,7 @@ export default {
|
|
|
9
10
|
content_blocks: contentBlocks,
|
|
10
11
|
settings,
|
|
11
12
|
menu,
|
|
13
|
+
notification,
|
|
12
14
|
permission,
|
|
13
15
|
file,
|
|
14
16
|
error,
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
event: {
|
|
3
|
+
type_title: {
|
|
4
|
+
'windward-integrations-import-complete':
|
|
5
|
+
'3rd Party Import Complete',
|
|
6
|
+
'windward-integrations-import-fail': '3rd Party Import Failed',
|
|
7
|
+
},
|
|
8
|
+
|
|
9
|
+
type_description: {
|
|
10
|
+
'windward-core-ask-the-expert': '3rd Party Import Complete',
|
|
11
|
+
'windward-core-contact-support': '3rd Party Import Failed',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
}
|
|
@@ -5,12 +5,15 @@ export default {
|
|
|
5
5
|
driver: { lti1p1, lti1p3 },
|
|
6
6
|
provider_target: providerTarget,
|
|
7
7
|
|
|
8
|
-
provider_panel_title:
|
|
9
|
-
|
|
8
|
+
provider_panel_title:
|
|
9
|
+
'Proveedor (usuarios que ingresan a LearningEdge desde otro sistema)',
|
|
10
|
+
consumer_panel_title:
|
|
11
|
+
'Consumidor (usuarios que salen de LearningEdge a otro sistema)',
|
|
10
12
|
|
|
11
13
|
target: 'Objetivo',
|
|
12
14
|
target_url: 'URL de destino',
|
|
13
15
|
launch_url: 'URL de inicio',
|
|
16
|
+
security_level: 'Nivel de Seguridad',
|
|
14
17
|
|
|
15
18
|
send_grades: 'Enviar calificaciones al LMS anfitrión',
|
|
16
19
|
grade_sync: 'Sincronización de calificaciones',
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import contentBlocks from './content_blocks'
|
|
2
2
|
import settings from './settings'
|
|
3
3
|
import menu from './menu'
|
|
4
|
+
import notification from './notification'
|
|
4
5
|
import permission from './permission'
|
|
5
6
|
import file from './file'
|
|
6
7
|
import error from './error'
|
|
@@ -9,6 +10,7 @@ export default {
|
|
|
9
10
|
content_blocks: contentBlocks,
|
|
10
11
|
settings,
|
|
11
12
|
menu,
|
|
13
|
+
notification,
|
|
12
14
|
permission,
|
|
13
15
|
file,
|
|
14
16
|
error,
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
event: {
|
|
3
|
+
type_title: {
|
|
4
|
+
'windward-integrations-import-complete':
|
|
5
|
+
'Importación de terceros completa',
|
|
6
|
+
'windward-integrations-import-fail':
|
|
7
|
+
'Error en la importación de terceros',
|
|
8
|
+
},
|
|
9
|
+
|
|
10
|
+
type_description: {
|
|
11
|
+
'windward-core-ask-the-expert': 'Importación de terceros completa',
|
|
12
|
+
'windward-core-contact-support':
|
|
13
|
+
'Error en la importación de terceros',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
}
|
|
@@ -5,12 +5,15 @@ export default {
|
|
|
5
5
|
driver: { lti1p1, lti1p3 },
|
|
6
6
|
provider_target: providerTarget,
|
|
7
7
|
|
|
8
|
-
provider_panel_title:
|
|
9
|
-
|
|
8
|
+
provider_panel_title:
|
|
9
|
+
'Leverantör (användare som kommer till LearningEdge från ett annat system)',
|
|
10
|
+
consumer_panel_title:
|
|
11
|
+
'Konsument (användare som går från LearningEdge till ett annat system)',
|
|
10
12
|
|
|
11
13
|
target: 'Mål',
|
|
12
14
|
target_url: 'Måladress',
|
|
13
15
|
launch_url: 'Launch Url',
|
|
16
|
+
security_level: 'Säkerhetsnivå',
|
|
14
17
|
|
|
15
18
|
send_grades: 'Skicka betyg till värd LMS',
|
|
16
19
|
grade_sync: 'Grade Sync',
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import contentBlocks from './content_blocks'
|
|
2
2
|
import settings from './settings'
|
|
3
3
|
import menu from './menu'
|
|
4
|
+
import notification from './notification'
|
|
4
5
|
import permission from './permission'
|
|
5
6
|
import file from './file'
|
|
6
7
|
import error from './error'
|
|
@@ -9,6 +10,7 @@ export default {
|
|
|
9
10
|
content_blocks: contentBlocks,
|
|
10
11
|
settings,
|
|
11
12
|
menu,
|
|
13
|
+
notification,
|
|
12
14
|
permission,
|
|
13
15
|
file,
|
|
14
16
|
error,
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
event: {
|
|
3
|
+
type_title: {
|
|
4
|
+
'windward-integrations-import-complete':
|
|
5
|
+
'Tredjepartsimport slutförd',
|
|
6
|
+
'windward-integrations-import-fail':
|
|
7
|
+
'Tredjepartsimport misslyckades',
|
|
8
|
+
},
|
|
9
|
+
|
|
10
|
+
type_description: {
|
|
11
|
+
'windward-core-ask-the-expert': 'Tredje parts import klar',
|
|
12
|
+
'windward-core-contact-support': 'Tredjepartsimport misslyckades',
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
}
|
package/package.json
CHANGED
package/plugin.js
CHANGED
|
@@ -20,6 +20,7 @@ import CourseJobLog from './components/Navigation/Items/CourseJobLog.vue'
|
|
|
20
20
|
|
|
21
21
|
export default {
|
|
22
22
|
name: 'windward.integrations.name',
|
|
23
|
+
version: null,
|
|
23
24
|
hooks: {
|
|
24
25
|
beforeContent: (body) => {
|
|
25
26
|
return body
|
|
@@ -245,21 +246,21 @@ export default {
|
|
|
245
246
|
i18n: 'windward.integrations.shared.file.import_resourcespace',
|
|
246
247
|
icon: 'mdi-cube',
|
|
247
248
|
product_code: 'resourcespace',
|
|
248
|
-
|
|
249
|
+
enabled: true,
|
|
249
250
|
},
|
|
250
251
|
{
|
|
251
252
|
template: FileImportGoogleDrive,
|
|
252
253
|
i18n: 'windward.integrations.shared.file.import_google_drive',
|
|
253
254
|
icon: 'mdi-google-drive',
|
|
254
255
|
product_code: 'google_drive',
|
|
255
|
-
|
|
256
|
+
enabled: false,
|
|
256
257
|
},
|
|
257
258
|
{
|
|
258
259
|
template: FileImportDropbox,
|
|
259
260
|
i18n: 'windward.integrations.shared.file.import_dropbox',
|
|
260
261
|
icon: 'mdi-dropbox',
|
|
261
262
|
product_code: 'dropbox',
|
|
262
|
-
|
|
263
|
+
enabled: false,
|
|
263
264
|
},
|
|
264
265
|
],
|
|
265
266
|
},
|