UNCLASSIFIED
Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Open sidebar
Platform One
P
Party Bus
Launchboard
launchboard-fe
Commits
54917212
You need to sign in or sign up before continuing.
Commit
54917212
authored
Aug 31, 2021
by
ckwolff
Browse files
Removing instances of keycloak id
parent
184e1722
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
102 additions
and
83 deletions
+102
-83
package-lock.json
package-lock.json
+81
-15
src/App.vue
src/App.vue
+1
-2
src/components/EditableInput.vue
src/components/EditableInput.vue
+3
-2
src/components/LaunchboardSettings.vue
src/components/LaunchboardSettings.vue
+1
-2
src/components/UserBanner.vue
src/components/UserBanner.vue
+5
-30
src/components/UserSelect.vue
src/components/UserSelect.vue
+1
-1
src/views/Team.vue
src/views/Team.vue
+2
-16
src/views/TrainingDetails.vue
src/views/TrainingDetails.vue
+4
-5
tests/e2e/fixtures/api/teams.json
tests/e2e/fixtures/api/teams.json
+0
-2
tests/e2e/fixtures/api/users.json
tests/e2e/fixtures/api/users.json
+0
-1
tests/e2e/fixtures/users/admin.json
tests/e2e/fixtures/users/admin.json
+0
-1
tests/e2e/fixtures/users/superAdmin.json
tests/e2e/fixtures/users/superAdmin.json
+0
-1
tests/e2e/fixtures/users/user.json
tests/e2e/fixtures/users/user.json
+0
-1
tests/unit/components/ProjectsSummary.spec.js
tests/unit/components/ProjectsSummary.spec.js
+4
-3
tests/unit/main.spec.js
tests/unit/main.spec.js
+0
-1
No files found.
package-lock.json
View file @
54917212
...
...
@@ -320,6 +320,12 @@
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001223.tgz",
"integrity": "sha512-k/RYs6zc/fjbxTjaWZemeSmOjO0JJV+KguOBA3NwPup8uzxM1cMhR2BD9XmO86GuqaqTCO8CgkgH9Rz//vdDiA=="
},
"colorette": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
"integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==",
"dev": true
},
"electron-to-chromium": {
"version": "1.3.811",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.811.tgz",
...
...
@@ -4267,6 +4273,12 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"colorette": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
"integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==",
"dev": true
},
"electron-to-chromium": {
"version": "1.3.811",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.811.tgz",
...
...
@@ -5144,6 +5156,12 @@
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz",
"integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==",
"dev": true
},
"colorette": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
"integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==",
"dev": true
}
}
},
...
...
@@ -6216,6 +6234,12 @@
}
}
},
"colorette": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
"integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==",
"dev": true
},
"electron-to-chromium": {
"version": "1.3.811",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.811.tgz",
...
...
@@ -7276,6 +7300,12 @@
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001223.tgz",
"integrity": "sha512-k/RYs6zc/fjbxTjaWZemeSmOjO0JJV+KguOBA3NwPup8uzxM1cMhR2BD9XmO86GuqaqTCO8CgkgH9Rz//vdDiA=="
},
"colorette": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
"integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==",
"dev": true
},
"electron-to-chromium": {
"version": "1.3.811",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.811.tgz",
...
...
@@ -12310,9 +12340,9 @@
},
"dependencies": {
"ws": {
"version": "7.5.
3
",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.
3
.tgz",
"integrity": "sha512-
kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5w
g==",
"version": "7.5.
4
",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.
4
.tgz",
"integrity": "sha512-
zP9z6GXm6zC27YtspwH99T3qTG7bBFv2VIkeHstMLrLlDJuzA7tQ5ls3OJ1hOGGCzTQPniNJoHXIAOS0Jljoh
g==",
"dev": true
}
}
...
...
@@ -12346,9 +12376,9 @@
}
},
"ws": {
"version": "7.5.
3
",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.
3
.tgz",
"integrity": "sha512-
kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5w
g=="
"version": "7.5.
4
",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.
4
.tgz",
"integrity": "sha512-
zP9z6GXm6zC27YtspwH99T3qTG7bBFv2VIkeHstMLrLlDJuzA7tQ5ls3OJ1hOGGCzTQPniNJoHXIAOS0Jljoh
g=="
}
}
},
...
...
@@ -12897,9 +12927,9 @@
"dev": true
},
"ws": {
"version": "7.5.
3
",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.
3
.tgz",
"integrity": "sha512-
kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5w
g==",
"version": "7.5.
4
",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.
4
.tgz",
"integrity": "sha512-
zP9z6GXm6zC27YtspwH99T3qTG7bBFv2VIkeHstMLrLlDJuzA7tQ5ls3OJ1hOGGCzTQPniNJoHXIAOS0Jljoh
g==",
"dev": true
}
}
...
...
@@ -15329,6 +15359,12 @@
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001244.tgz",
"integrity": "sha512-Wb4UFZPkPoJoKKVfELPWytRzpemjP/s0pe22NriANru1NoI+5bGNxzKtk7edYL8rmCWTfQO8eRiF0pn1Dqzx7Q=="
},
"colorette": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
"integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==",
"dev": true
},
"electron-to-chromium": {
"version": "1.3.811",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.811.tgz",
...
...
@@ -15726,6 +15762,12 @@
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001223.tgz",
"integrity": "sha512-k/RYs6zc/fjbxTjaWZemeSmOjO0JJV+KguOBA3NwPup8uzxM1cMhR2BD9XmO86GuqaqTCO8CgkgH9Rz//vdDiA=="
},
"colorette": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
"integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==",
"dev": true
},
"electron-to-chromium": {
"version": "1.3.811",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.811.tgz",
...
...
@@ -15889,6 +15931,12 @@
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001223.tgz",
"integrity": "sha512-k/RYs6zc/fjbxTjaWZemeSmOjO0JJV+KguOBA3NwPup8uzxM1cMhR2BD9XmO86GuqaqTCO8CgkgH9Rz//vdDiA=="
},
"colorette": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
"integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==",
"dev": true
},
"electron-to-chromium": {
"version": "1.3.811",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.811.tgz",
...
...
@@ -16368,6 +16416,12 @@
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001223.tgz",
"integrity": "sha512-k/RYs6zc/fjbxTjaWZemeSmOjO0JJV+KguOBA3NwPup8uzxM1cMhR2BD9XmO86GuqaqTCO8CgkgH9Rz//vdDiA=="
},
"colorette": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
"integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==",
"dev": true
},
"electron-to-chromium": {
"version": "1.3.811",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.811.tgz",
...
...
@@ -16569,6 +16623,12 @@
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001223.tgz",
"integrity": "sha512-k/RYs6zc/fjbxTjaWZemeSmOjO0JJV+KguOBA3NwPup8uzxM1cMhR2BD9XmO86GuqaqTCO8CgkgH9Rz//vdDiA=="
},
"colorette": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
"integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==",
"dev": true
},
"electron-to-chromium": {
"version": "1.3.811",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.811.tgz",
...
...
@@ -19105,6 +19165,12 @@
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001223.tgz",
"integrity": "sha512-k/RYs6zc/fjbxTjaWZemeSmOjO0JJV+KguOBA3NwPup8uzxM1cMhR2BD9XmO86GuqaqTCO8CgkgH9Rz//vdDiA=="
},
"colorette": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
"integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==",
"dev": true
},
"electron-to-chromium": {
"version": "1.3.811",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.811.tgz",
...
...
@@ -21437,9 +21503,9 @@
"dev": true
},
"ws": {
"version": "7.5.
3
",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.
3
.tgz",
"integrity": "sha512-
kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5w
g==",
"version": "7.5.
4
",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.
4
.tgz",
"integrity": "sha512-
zP9z6GXm6zC27YtspwH99T3qTG7bBFv2VIkeHstMLrLlDJuzA7tQ5ls3OJ1hOGGCzTQPniNJoHXIAOS0Jljoh
g==",
"dev": true
}
}
...
...
@@ -21715,9 +21781,9 @@
}
},
"ws": {
"version": "7.5.
3
",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.
3
.tgz",
"integrity": "sha512-
kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5w
g==",
"version": "7.5.
4
",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.
4
.tgz",
"integrity": "sha512-
zP9z6GXm6zC27YtspwH99T3qTG7bBFv2VIkeHstMLrLlDJuzA7tQ5ls3OJ1hOGGCzTQPniNJoHXIAOS0Jljoh
g==",
"dev": true
}
}
...
...
src/App.vue
View file @
54917212
...
...
@@ -26,8 +26,7 @@ export default {
syncDarkMode
()
{
// make sure vuetify matches the current preference
if
(
this
.
$store
&&
this
.
$store
.
state
.
userPreferences
.
userPreference
)
{
this
.
$vuetify
.
theme
.
dark
=
this
.
$store
.
state
.
userPreferences
.
userPreference
.
darkMode
;
this
.
$vuetify
.
theme
.
dark
=
this
.
$store
.
state
.
userPreferences
.
userPreference
.
darkMode
;
}
},
},
...
...
src/components/EditableInput.vue
View file @
54917212
...
...
@@ -95,8 +95,9 @@ export default {
if
(
!
this
.
$refs
.
editingElementWrapper
)
{
return
null
;
}
const
editInputs
=
this
.
$refs
.
editingElementWrapper
.
getElementsByTagName
(
"
input
"
);
const
editInputs
=
this
.
$refs
.
editingElementWrapper
.
getElementsByTagName
(
"
input
"
);
if
(
!
editInputs
||
editInputs
.
length
===
0
)
{
return
null
;
}
...
...
src/components/LaunchboardSettings.vue
View file @
54917212
...
...
@@ -84,8 +84,7 @@ export default {
mounted
()
{
this
.
user
=
this
.
$store
.
state
.
user
.
user
;
this
.
darkMode
=
this
.
$store
.
state
.
userPreferences
.
userPreference
.
darkMode
;
this
.
welcomeMenu
=
this
.
$store
.
state
.
userPreferences
.
userPreference
.
welcomeMessage
;
this
.
welcomeMenu
=
this
.
$store
.
state
.
userPreferences
.
userPreference
.
welcomeMessage
;
this
.
changeLoadingColor
();
},
methods
:
{
...
...
src/components/UserBanner.vue
View file @
54917212
...
...
@@ -13,12 +13,7 @@
>
<div
class=
"d-flex banner-row subhead section-header"
>
<div
class=
"
d-flex
align-items-center
flex-wrap flex-sm-nowrap
name-container
"
class=
"d-flex align-items-center flex-wrap flex-sm-nowrap name-container"
>
<v-avatar
class=
"mr-2 mr-md-4"
>
<img
v-if=
"avatar"
:src=
"avatar"
:alt=
"name"
/>
...
...
@@ -28,23 +23,13 @@
</div>
<div
v-if=
"$vuetify.breakpoint.mdAndUp"
class=
"
d-flex
align-items-center
justify-content-center
company-container
"
class=
"d-flex align-items-center justify-content-center company-container"
>
{{
company
}}
</div>
<div
v-if=
"$vuetify.breakpoint.mdAndUp"
class=
"
d-flex
align-items-center
justify-content-center
position-container
"
class=
"d-flex align-items-center justify-content-center position-container"
>
{{
position
}}
</div>
...
...
@@ -59,22 +44,12 @@
>
<div
class=
"d-flex banner-row subhead section-content"
>
<div
class=
"
d-flex
align-items-center
justify-content-center
company-container
"
class=
"d-flex align-items-center justify-content-center company-container"
>
{{
company
}}
</div>
<div
class=
"
d-flex
align-items-center
justify-content-center
position-container
"
class=
"d-flex align-items-center justify-content-center position-container"
>
{{
position
}}
</div>
...
...
src/components/UserSelect.vue
View file @
54917212
...
...
@@ -49,7 +49,7 @@
<img
v-if=
"item.avatar"
:src=
"item.avatar"
:alt=
"data.item.name"
/>
<v-icon
x-large
v-else
>
mdi-account-circle
</v-icon>
</v-list-item-avatar>
<v-list-item-content>
<v-list-item-content>
<v-list-item-title
class=
"text-left"
>
{{
item
.
name
}}
</v-list-item-title>
<v-list-item-subtitle
class=
"text-left"
>
{{
item
.
email
...
...
src/views/Team.vue
View file @
54917212
...
...
@@ -36,16 +36,7 @@
/>
<div
id=
"team-table-header"
class=
"
d-flex
flex-column
justify-center
align-top
flex-sm-row
mb-6
mt-4
pl-2
"
class=
"d-flex flex-column justify-center align-top flex-sm-row mb-6 mt-4 pl-2"
v-if=
"permission"
>
<div>
...
...
@@ -115,12 +106,7 @@
:multi-sort=
"false"
:mobile-breakpoint=
"mobileBreakpoint"
expand-icon=
"mdi-chevron-right"
class=
"
lb-mobile-enabled
background-transparent
position-relative
v-table-header
"
class=
"lb-mobile-enabled background-transparent position-relative v-table-header"
>
<template
v-slot:top
>
<!--
...
...
src/views/TrainingDetails.vue
View file @
54917212
...
...
@@ -529,11 +529,10 @@ export default {
},
async
fetchStudentData
()
{
try
{
const
studentResponse
=
await
TrainingService
.
getCourseRegistrationsById
(
this
.
$route
.
params
.
trainingId
,
{
...
this
.
params
,
attendance
:
true
}
);
const
studentResponse
=
await
TrainingService
.
getCourseRegistrationsById
(
this
.
$route
.
params
.
trainingId
,
{
...
this
.
params
,
attendance
:
true
}
);
this
.
listItems
=
studentResponse
.
registrations
?.
map
((
item
)
=>
{
item
.
completed
=
{
value
:
item
.
completed
,
loading
:
false
};
...
...
tests/e2e/fixtures/api/teams.json
View file @
54917212
...
...
@@ -9,7 +9,6 @@
"members"
:
[
{
"id"
:
1
,
"keycloakId"
:
"aaaaaaaa-da97-4f57-a322-5e2685be6591"
,
"picture"
:
null
,
"name"
:
"Test User"
,
"personnelType"
:
null
,
...
...
@@ -33,7 +32,6 @@
},
{
"id"
:
2
,
"keycloakId"
:
"bbbbbbbb-da97-4f57-a322-5e2685be6591"
,
"picture"
:
null
,
"name"
:
"Test Admin"
,
"personnelType"
:
null
,
...
...
tests/e2e/fixtures/api/users.json
View file @
54917212
...
...
@@ -9,7 +9,6 @@
"users"
:
[
{
"id"
:
2
,
"keycloakId"
:
"aaaaaaaa-56ff-4ddb-803a-8a1f4b73014e"
,
"picture"
:
null
,
"name"
:
"Test Admin"
,
"personnelType"
:
"P1 Personnel"
,
...
...
tests/e2e/fixtures/users/admin.json
View file @
54917212
{
"result"
:
{
"id"
:
1
,
"keycloakId"
:
"aaaaaaaa-da97-4f57-b322-5e2685be6591"
,
"picture"
:
null
,
"name"
:
"Test Admin"
,
"personnelType"
:
null
,
...
...
tests/e2e/fixtures/users/superAdmin.json
View file @
54917212
{
"result"
:
{
"id"
:
1
,
"keycloakId"
:
"aaaaaaaa-da97-4f57-c322-5e2685be6591"
,
"picture"
:
null
,
"name"
:
"Test Super Admin"
,
"personnelType"
:
null
,
...
...
tests/e2e/fixtures/users/user.json
View file @
54917212
{
"result"
:
{
"id"
:
1
,
"keycloakId"
:
"aaaaaaaa-da97-4f57-a322-5e2685be6591"
,
"picture"
:
null
,
"name"
:
"Test User"
,
"personnelType"
:
null
,
...
...
tests/unit/components/ProjectsSummary.spec.js
View file @
54917212
...
...
@@ -112,8 +112,8 @@ describe("ProjectsSummary", () => {
localVue
,
vuetify
,
});
const
failedProjectJobs
=
wrapper
.
vm
.
retrieveFailedProjectJobsFromFailedPipeline
(
{
const
failedProjectJobs
=
wrapper
.
vm
.
retrieveFailedProjectJobsFromFailedPipeline
(
{
id
:
"
1
"
,
links
:
{},
latestPipeline
:
{
...
...
@@ -127,7 +127,8 @@ describe("ProjectsSummary", () => {
],
},
favorite
:
true
,
});
}
);
expect
(
failedProjectJobs
.
length
===
1
).
toBeTruthy
();
});
it
(
"
should filter by favorited projects
"
,
()
=>
{
...
...
tests/unit/main.spec.js
View file @
54917212
...
...
@@ -12,7 +12,6 @@ const fakeWait = (ms, val) => {
describe
(
"
main
"
,
()
=>
{
const
mockUser
=
{
name
:
"
mockUser
"
,
roles
:
[]
};
const
mockUserPreference
=
{
keycloakId
:
"
mock-keycloak-id
"
,
darkMode
:
true
,
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment