@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.
Files changed (27) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/components/Content/Blocks/ExternalIntegration/LtiConsumer.vue +3 -0
  3. package/components/ExternalIntegration/Driver/Lti1p1/ManageConsumer.vue +43 -11
  4. package/components/ExternalIntegration/Driver/Lti1p1/ManageConsumers.vue +9 -2
  5. package/components/ExternalIntegration/Driver/Lti1p1/ManageProvider.vue +4 -1
  6. package/components/ExternalIntegration/Driver/Lti1p1/ManageProviders.vue +1 -0
  7. package/components/ExternalIntegration/Driver/Lti1p3/ManageConsumer.vue +45 -10
  8. package/components/ExternalIntegration/Driver/Lti1p3/ManageConsumers.vue +9 -2
  9. package/components/ExternalIntegration/Driver/Lti1p3/ManageProvider.vue +4 -0
  10. package/components/ExternalIntegration/Driver/Lti1p3/ManageProviders.vue +1 -0
  11. package/components/ExternalIntegration/Driver/ManageLti1p1.vue +2 -4
  12. package/components/ExternalIntegration/Driver/ManageLti1p3.vue +2 -4
  13. package/components/FileImport/FileImportMenu.vue +24 -19
  14. package/components/Settings/ExternalIntegration/LtiConsumerSettings.vue +6 -1
  15. package/components/Settings/ExternalIntegration/ManageCourseIntegrationSettings.vue +5 -3
  16. package/i18n/en-US/components/external_integration/driver/lti1p3.ts +1 -1
  17. package/i18n/en-US/components/external_integration/index.ts +5 -2
  18. package/i18n/en-US/shared/index.ts +2 -0
  19. package/i18n/en-US/shared/notification.ts +14 -0
  20. package/i18n/es-ES/components/external_integration/index.ts +5 -2
  21. package/i18n/es-ES/shared/index.ts +2 -0
  22. package/i18n/es-ES/shared/notification.ts +16 -0
  23. package/i18n/sv-SE/components/external_integration/index.ts +5 -2
  24. package/i18n/sv-SE/shared/index.ts +2 -0
  25. package/i18n/sv-SE/shared/notification.ts +15 -0
  26. package/package.json +1 -1
  27. package/plugin.js +4 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ### Release [0.12.0] created - 2025-03-25
4
+
5
+
6
+ ### Release [0.11.0] created - 2025-03-11
7
+
8
+
9
+ ### Hotfix [0.10.1] created - 2025-03-04
10
+
11
+
3
12
  ### Release [0.10.0] created - 2025-01-03
4
13
 
5
14
 
@@ -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 v-model="formValid" @submit.prevent>
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
- consumer.delete()
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()
@@ -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(
@@ -4,7 +4,12 @@
4
4
  <v-progress-circular size="128" indeterminate />
5
5
  </div>
6
6
  <div v-if="render">
7
- <v-form v-model="formValid" @submit.prevent>
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
- consumer.delete()
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()
@@ -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(
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div>
3
- <v-expansion-panels v-model="panel">
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 v-model="panel">
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="importVendor in enabledFileImports"
5
- :key="importVendor.product_code"
6
- @click="onClickImport(importVendor)"
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>{{ importVendor.icon }}</v-icon>
10
+ <v-icon>{{ vendor.icon }}</v-icon>
10
11
  </v-list-item-icon>
11
- <v-list-item-title>{{ $t(importVendor.i18n) }}</v-list-item-title>
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
- enabledFileImports() {
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 available = _.get(this.metadata, 'vendors', [])
83
+ const vendors = _.cloneDeep(_.get(this.metadata, 'vendors', []))
84
84
 
85
- // Loop over all the orgIntegrations that we've confirmed are enabled
86
- this.organizationIntegrations.forEach((orgInt) => {
87
- const productCode = _.get(orgInt, 'vendor.product_code')
88
- const found = available.find((c) => {
89
- return c.product_code === productCode && !!c.template
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
- found.organization_integration = orgInt
95
- enabled.push(found)
96
+ vendors[vendorIndex].organization_integration = found
96
97
  }
97
- })
98
98
 
99
- return enabled
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> <ManageLti1p1></ManageLti1p1> </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 plateform client identifier and and keyset urls are set !',
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: 'Provider (Students incoming to Windward)',
9
- consumer_panel_title: 'Consumer (Students outgoing from Windward)',
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: 'Proveedor (Estudiantes que llegan a Windward)',
9
- consumer_panel_title: 'Consumidor (Estudiantes que salen de Barlovento)',
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: 'Provider (studenter som kommer till Windward)',
9
- consumer_panel_title: 'Consumer (Students outgoing from Windward)',
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@windward/integrations",
3
- "version": "0.10.0",
3
+ "version": "0.12.0",
4
4
  "description": "Windward UI Plugin Integrations for 3rd Party Systems",
5
5
  "main": "plugin.js",
6
6
  "scripts": {
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
- disabled: false,
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
- disabled: true,
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
- disabled: true,
263
+ enabled: false,
263
264
  },
264
265
  ],
265
266
  },