Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
yotta
/
pictogram
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
60
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
9bdcbd8e
authored
Aug 14, 2017
by
Arturo Montejo Ráez
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
refactorized rootScope.user
parent
882fab6a
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
51 additions
and
57 deletions
sails/src/assets/scripts/controllers/main.js
sails/src/assets/scripts/modules/admin/controllers/licenses.js
sails/src/assets/scripts/modules/student/controllers/collections.js
sails/src/assets/scripts/modules/student/controllers/instructions.js
sails/src/assets/scripts/modules/student/controllers/session.js
sails/src/assets/scripts/modules/supervisor/controllers/instructions.js
sails/src/assets/scripts/modules/supervisor/controllers/setup.js
sails/src/assets/scripts/modules/supervisor/controllers/students.js
sails/src/assets/scripts/modules/supervisor/controllers/supervisor.js
sails/src/assets/scripts/modules/supervisor/controllers/supervisors.js
sails/src/assets/scripts/controllers/main.js
View file @
9bdcbd8e
...
...
@@ -24,7 +24,7 @@ var dashboardControllers = angular.module('dashboardControllers', ['dashboardCon
//
//
dashboardControllers
.
controller
(
'MainCtrl'
,
function
MainCtrl
(
$scope
,
$window
,
$location
,
$translate
,
$rootScope
,
$timeout
)
{
$scope
,
$window
,
$location
,
$translate
,
$rootScope
,
$timeout
<
)
{
$scope
.
user
=
$rootScope
.
user
;
...
...
sails/src/assets/scripts/modules/admin/controllers/licenses.js
View file @
9bdcbd8e
...
...
@@ -8,8 +8,6 @@ dashboardControllers.controller('AdminLicensesCtrl', function AdminLicensesCtrl(
$scope
,
$window
,
$http
,
config
,
$translate
,
ngToast
)
{
// The parameter 'config' is injected from config.js (defined in dashboardConfig module)
$scope
.
user
=
$rootScope
.
user
;
// Don't show the message at the begining
$scope
.
showmessagesupervisor
=
false
;
$scope
.
new_numbers
=
[];
...
...
@@ -22,7 +20,7 @@ dashboardControllers.controller('AdminLicensesCtrl', function AdminLicensesCtrl(
// Get all licenses for the user
$http
.
get
(
config
.
backend
+
'/license/'
+
$
s
cope
.
user
.
email
)
.
get
(
config
.
backend
+
'/license/'
+
$
rootS
cope
.
user
.
email
)
.
success
(
function
(
data
,
status
,
headers
,
config
)
{
$scope
.
licenses
=
data
;
})
...
...
sails/src/assets/scripts/modules/student/controllers/collections.js
View file @
9bdcbd8e
...
...
@@ -20,8 +20,6 @@ dashboardControllers.controller('StudentCollectionsCtrl', function StudentCollec
$translate
,
ngToast
)
{
$scope
.
user
=
$rootScope
.
user
;
$scope
.
emptyStudentPicto
=
{
id
:
null
,
picto
:
{
...
...
@@ -475,7 +473,7 @@ dashboardControllers.controller('StudentCollectionsCtrl', function StudentCollec
return
$scope
.
studentData
;
},
supervisor
:
function
()
{
return
$
s
cope
.
user
;
return
$
rootS
cope
.
user
;
},
onlyOwn
:
function
()
{
return
false
;
...
...
@@ -528,7 +526,7 @@ dashboardControllers.controller('StudentCollectionsCtrl', function StudentCollec
return
$scope
.
studentData
;
},
supervisor
:
function
()
{
return
$
s
cope
.
user
;
return
$
rootS
cope
.
user
;
},
onlyOwn
:
function
()
{
return
false
;
...
...
@@ -588,7 +586,7 @@ dashboardControllers.controller('StudentCollectionsCtrl', function StudentCollec
return
studentPicto
;
},
sup
:
function
()
{
return
$
s
cope
.
user
;
return
$
rootS
cope
.
user
;
},
stu
:
function
()
{
return
$scope
.
studentData
;
...
...
@@ -614,7 +612,7 @@ dashboardControllers.controller('StudentCollectionsCtrl', function StudentCollec
return
studentPicto
;
},
sup
:
function
()
{
return
$
s
cope
.
user
;
return
$
rootS
cope
.
user
;
},
stu
:
function
()
{
return
$scope
.
studentData
;
...
...
@@ -651,7 +649,7 @@ dashboardControllers.controller('StudentCollectionsCtrl', function StudentCollec
$http
.
post
(
config
.
backend
+
'/scene/stu/'
+
$scope
.
studentData
.
id
,
{
name
:
name
,
id_sup
:
$
s
cope
.
user
.
id
,
id_sup
:
$
rootS
cope
.
user
.
id
,
categories
:
$scope
.
newSceneCat
,
id_stu
:
$scope
.
studentData
.
id
})
...
...
sails/src/assets/scripts/modules/student/controllers/instructions.js
View file @
9bdcbd8e
...
...
@@ -6,8 +6,6 @@
dashboardControllers
.
controller
(
'StudentInstructionsCtrl'
,
function
StudentInstructionsCtrl
(
$rootScope
,
$scope
,
$stateParams
,
$http
,
config
,
$window
,
$translate
,
$modal
,
ngToast
,
newconfirm
)
{
$scope
.
user
=
$rootScope
.
user
;
// For tab navigation (here too, if the user refresh the page...)
$scope
.
nav
.
tab
=
'instructions'
;
...
...
@@ -25,7 +23,7 @@ dashboardControllers.controller('StudentInstructionsCtrl', function StudentInstr
// Query to meta_methods to fill the select fill with precharged methods
// and supervisor template methods
$http
.
get
(
config
.
backend
+
'/method/template/'
+
$
s
cope
.
user
.
id
)
.
get
(
config
.
backend
+
'/method/template/'
+
$
rootS
cope
.
user
.
id
)
.
success
(
function
(
data
,
status
,
headers
,
config
)
{
for
(
var
i
=
0
;
i
<
data
.
length
;
i
++
)
{
data
[
i
].
disabled
=
data
[
i
].
lang
!=
$translate
.
use
();
...
...
@@ -119,7 +117,7 @@ dashboardControllers.controller('StudentInstructionsCtrl', function StudentInstr
$translate
(
'confirmation'
).
then
(
function
(
translation
)
{
newconfirm
(
translation
).
then
(
function
()
{
if
(
$scope
.
method_selected
.
supervisor
==
$
s
cope
.
user
.
id
){
if
(
$scope
.
method_selected
.
supervisor
==
$
rootS
cope
.
user
.
id
){
$http
.
delete
(
config
.
backend
+
'/method/template/'
+
$scope
.
method_selected
.
id
)
.
success
(
function
(
data
,
status
,
headers
,
config
)
{
...
...
@@ -167,13 +165,13 @@ dashboardControllers.controller('StudentInstructionsCtrl', function StudentInstr
$scope
.
save_as_template
=
function
(
method
){
$http
.
post
(
config
.
backend
+
'/method/save'
,
{
'id_met'
:
method
.
id
,
'id_sup'
:
$
scope
.
user
.
id
,
'lang'
:
$s
cope
.
user
.
lang
})
.
post
(
config
.
backend
+
'/method/save'
,
{
'id_met'
:
method
.
id
,
'id_sup'
:
$
rootScope
.
user
.
id
,
'lang'
:
$rootS
cope
.
user
.
lang
})
.
then
(
//success
function
(
data
,
status
,
headers
,
config
)
{
//console.log('Saved method as template:' + JSON.stringify(data));
// Add to select method
$scope
.
methods_available
.
push
({
id
:
method
.
id
,
name
:
method
.
name
,
lang
:
$
s
cope
.
user
.
lang
});
$scope
.
methods_available
.
push
({
id
:
method
.
id
,
name
:
method
.
name
,
lang
:
$
rootS
cope
.
user
.
lang
});
ngToast
.
success
({
content
:
$translate
.
instant
(
'method_saved'
,
{
method_name
:
method
.
name
}),
...
...
sails/src/assets/scripts/modules/student/controllers/session.js
View file @
9bdcbd8e
...
...
@@ -13,8 +13,6 @@ dashboardControllers.controller('StudentSessionCtrl', function StudentSessionCtr
$translate
,
ngToast
)
{
$scope
.
user
=
$rootScope
.
user
;
// For tab navigation (here too, if the user refresh the page...)
$scope
.
nav
.
tab
=
'session'
;
...
...
@@ -122,7 +120,7 @@ dashboardControllers.controller('StudentSessionCtrl', function StudentSessionCtr
.
then
(
function
(
data
,
status
,
headers
,
config2
)
{
$http
// creamos un nuevo try
.
post
(
config
.
backend
+
'/try/'
,
{
ws
:
$scope
.
ws
,
student
:
$scope
.
studentData
.
id
,
supervisor
:
$
s
cope
.
user
.
id
,
begin
:
new
Date
().
toISOString
()
})
.
post
(
config
.
backend
+
'/try/'
,
{
ws
:
$scope
.
ws
,
student
:
$scope
.
studentData
.
id
,
supervisor
:
$
rootS
cope
.
user
.
id
,
begin
:
new
Date
().
toISOString
()
})
.
then
(
function
(
data
,
status
,
headers
,
config
)
{
$scope
.
load_tries
();
...
...
@@ -179,7 +177,7 @@ dashboardControllers.controller('StudentSessionCtrl', function StudentSessionCtr
$http
.
post
(
config
.
backend
+
'/ws'
,
{
"id_sup"
:
$
s
cope
.
user
.
id
,
"id_sup"
:
$
rootS
cope
.
user
.
id
,
"id_stu"
:
$scope
.
studentData
.
id
,
"id_ins"
:
$scope
.
selected
.
instruction
.
id
})
...
...
@@ -243,7 +241,7 @@ dashboardControllers.controller('StudentSessionCtrl', function StudentSessionCtr
.
post
(
config
.
backend
+
'/action'
,
{
"type"
:
"endsession"
,
"student"
:
$scope
.
studentData
.
id
,
"supervisor"
:
$
s
cope
.
user
.
id
,
"supervisor"
:
$
rootS
cope
.
user
.
id
,
})
.
success
(
function
(
data
,
status
,
headers
,
_config
)
{
// Adding resume action to the list of actions
...
...
@@ -286,7 +284,7 @@ dashboardControllers.controller('StudentSessionCtrl', function StudentSessionCtr
.
post
(
config
.
backend
+
'/action'
,
{
"type"
:
"pausesession"
,
"student"
:
$scope
.
studentData
.
id
,
"supervisor"
:
$
s
cope
.
user
.
id
"supervisor"
:
$
rootS
cope
.
user
.
id
})
.
success
(
function
(
data
,
status
,
headers
,
config
)
{
// adding pause action to the list of actions
...
...
@@ -313,7 +311,7 @@ dashboardControllers.controller('StudentSessionCtrl', function StudentSessionCtr
.
post
(
config
.
backend
+
'/action'
,
{
"type"
:
"resumesession"
,
"student"
:
$scope
.
studentData
.
id
,
"supervisor"
:
$
s
cope
.
user
.
id
,
"supervisor"
:
$
rootS
cope
.
user
.
id
,
})
.
success
(
function
(
data
,
status
,
headers
,
config
)
{
// Adding resume action to the list of actions
...
...
sails/src/assets/scripts/modules/supervisor/controllers/instructions.js
View file @
9bdcbd8e
...
...
@@ -3,7 +3,17 @@
//-----------------------
// Instructions Controller
//-----------------------
dashboardControllers
.
controller
(
'InstructionsCtrl'
,
function
InstructionsCtrl
(
$scope
,
$stateParams
,
$http
,
config
,
$window
,
$translate
,
$modal
,
ngToast
,
newconfirm
)
{
dashboardControllers
.
controller
(
'InstructionsCtrl'
,
function
InstructionsCtrl
(
$scope
,
$rootScope
,
$stateParams
,
$http
,
config
,
$window
,
$translate
,
$modal
,
ngToast
,
newconfirm
)
{
// ----------------------------------------------------------------------
// METHODS
...
...
@@ -20,7 +30,7 @@ dashboardControllers.controller('InstructionsCtrl', function InstructionsCtrl($s
// Query to meta_methods to fill the select fill with precharged methods
// and supervisor template methods
$http
.
get
(
config
.
backend
+
'/method/template/owned/'
+
$
s
cope
.
user
.
id
)
.
get
(
config
.
backend
+
'/method/template/owned/'
+
$
rootS
cope
.
user
.
id
)
.
success
(
function
(
data
,
status
,
headers
,
config
)
{
// Add to list
$scope
.
methods
=
data
;
...
...
@@ -38,8 +48,8 @@ dashboardControllers.controller('InstructionsCtrl', function InstructionsCtrl($s
var
new_data
=
{
name
:
$translate
.
instant
(
"new_method"
),
id_sup
:
$
s
cope
.
user
.
id
,
lang
:
$
s
cope
.
user
.
lang
,
id_sup
:
$
rootS
cope
.
user
.
id
,
lang
:
$
rootS
cope
.
user
.
lang
,
};
$http
...
...
@@ -101,7 +111,7 @@ dashboardControllers.controller('InstructionsCtrl', function InstructionsCtrl($s
method
:
method
.
id
,
name
:
$translate
.
instant
(
"new_instruction"
),
objective
:
$translate
.
instant
(
"new_objective"
),
lang
:
$
s
cope
.
user
.
lang
lang
:
$
rootS
cope
.
user
.
lang
};
$http
...
...
sails/src/assets/scripts/modules/supervisor/controllers/setup.js
View file @
9bdcbd8e
...
...
@@ -18,13 +18,11 @@ dashboardControllers.controller('SetupCtrl', function SetupCtrl(
config
,
CONSTANTS
)
{
$scope
.
user
=
$rootScope
.
user
;
// Don't show the message at the begining
$scope
.
showmessage
=
false
;
// Restore user values from sessionStorage
$scope
.
formdata
=
JSON
.
parse
(
JSON
.
stringify
(
$
s
cope
.
user
));
$scope
.
formdata
=
JSON
.
parse
(
JSON
.
stringify
(
$
rootS
cope
.
user
));
$scope
.
changeImg
=
function
()
{
...
...
@@ -55,15 +53,15 @@ dashboardControllers.controller('SetupCtrl', function SetupCtrl(
data
:
{
filename
:
name
,
folder
:
'supervisors'
,
id
:
$
s
cope
.
user
.
id
,
id
:
$
rootS
cope
.
user
.
id
,
file
:
Upload
.
dataUrltoBlob
(
dataUrl
,
name
)
}
})
.
then
(
function
(
res
)
{
$timeout
(
function
()
{
$
s
cope
.
user
.
pic
=
'/upload/supervisorAvatar/'
+
res
.
data
.
file
.
name
;
$window
.
sessionStorage
.
user
=
JSON
.
stringify
(
$
s
cope
.
user
);
$
rootS
cope
.
user
.
pic
=
'/upload/supervisorAvatar/'
+
res
.
data
.
file
.
name
;
$window
.
sessionStorage
.
user
=
JSON
.
stringify
(
$
rootS
cope
.
user
);
cb
();
});
},
function
(
res
)
{
...
...
@@ -99,7 +97,7 @@ dashboardControllers.controller('SetupCtrl', function SetupCtrl(
// Comprobation for new email
// If no change, it is deleted from supervisor object
if
(
supervisor
.
email
===
$
s
cope
.
user
.
email
)
{
if
(
supervisor
.
email
===
$
rootS
cope
.
user
.
email
)
{
delete
supervisor
.
email
;
}
...
...
@@ -108,8 +106,8 @@ dashboardControllers.controller('SetupCtrl', function SetupCtrl(
$http
.
put
(
config
.
backend
+
'/sup/'
+
supervisor
.
id
,
supervisor
)
.
success
(
function
(
data
)
{
$
s
cope
.
user
=
JSON
.
parse
(
JSON
.
stringify
(
data
));
$window
.
sessionStorage
.
user
=
JSON
.
stringify
(
$
s
cope
.
user
);
$
rootS
cope
.
user
=
JSON
.
parse
(
JSON
.
stringify
(
data
));
$window
.
sessionStorage
.
user
=
JSON
.
stringify
(
$
rootS
cope
.
user
);
ngToast
.
success
({
content
:
$translate
.
instant
(
'data_saved'
)
});
})
.
error
(
function
()
{
...
...
sails/src/assets/scripts/modules/supervisor/controllers/students.js
View file @
9bdcbd8e
...
...
@@ -18,8 +18,6 @@ dashboardControllers.controller('StudentsCtrl', function StudentsCtrl(
IOService
,
CONSTANTS
)
{
$scope
.
user
=
$rootScope
.
user
;
// --------------------------------------------------------
// Create new account
// --------------------------------------------------------
...
...
@@ -72,7 +70,7 @@ dashboardControllers.controller('StudentsCtrl', function StudentsCtrl(
current_method
:
'no_method'
,
current_instruction
:
'no_instruction'
,
license_number
:
null
,
id_sup
:
$
s
cope
.
user
.
id
id_sup
:
$
rootS
cope
.
user
.
id
};
$scope
.
slide
.
state
=
'accounts'
;
...
...
@@ -93,7 +91,7 @@ dashboardControllers.controller('StudentsCtrl', function StudentsCtrl(
$scope
.
addExisting
=
function
()
{
// Send link call to server
$http
.
post
(
config
.
backend
+
'/stu/license/sup/'
+
$
s
cope
.
user
.
id
,
{
license
:
$scope
.
formdata
.
license_number
})
$http
.
post
(
config
.
backend
+
'/stu/license/sup/'
+
$
rootS
cope
.
user
.
id
,
{
license
:
$scope
.
formdata
.
license_number
})
.
success
(
function
(
data
)
{
loadStudents
();
$scope
.
slide
.
rightTo
(
'confirmation'
);
...
...
@@ -158,7 +156,7 @@ dashboardControllers.controller('StudentsCtrl', function StudentsCtrl(
function
loadStudents
()
{
// Get list of supervisor's students
$http
.
get
(
config
.
backend
+
'/sup/'
+
$
s
cope
.
user
.
id
+
'/students'
)
$http
.
get
(
config
.
backend
+
'/sup/'
+
$
rootS
cope
.
user
.
id
+
'/students'
)
.
success
(
function
(
data
)
{
$scope
.
students
=
data
;
})
...
...
@@ -172,7 +170,7 @@ dashboardControllers.controller('StudentsCtrl', function StudentsCtrl(
*/
$scope
.
unlink_student
=
function
(
student
)
{
if
(
$window
.
confirm
(
$translate
.
instant
(
'confirmation'
)))
{
$http
.
delete
(
config
.
backend
+
'/stu/'
+
student
.
id
+
'/sup/'
+
$
s
cope
.
user
.
id
)
$http
.
delete
(
config
.
backend
+
'/stu/'
+
student
.
id
+
'/sup/'
+
$
rootS
cope
.
user
.
id
)
.
success
(
function
()
{
var
i
;
for
(
i
=
0
;
i
<
$scope
.
students
.
length
;
i
++
)
{
...
...
@@ -202,7 +200,7 @@ dashboardControllers.controller('StudentsCtrl', function StudentsCtrl(
IOService
.
on
(
'linkSupervisorToStudent'
,
function
(
eventData
)
{
eventData
.
sup_id
=
parseInt
(
eventData
.
sup_id
,
10
);
eventData
.
stu_id
=
parseInt
(
eventData
.
stu_id
,
10
);
if
(
eventData
.
sup_id
===
$
s
cope
.
user
.
id
)
{
if
(
eventData
.
sup_id
===
$
rootS
cope
.
user
.
id
)
{
IOService
.
get
(
'/stu/'
+
eventData
.
stu_id
,
function
(
studentData
)
{
var
i
;
var
studentAlreadyAdded
=
false
;
...
...
sails/src/assets/scripts/modules/supervisor/controllers/supervisor.js
View file @
9bdcbd8e
...
...
@@ -21,8 +21,6 @@ dashboardControllers.controller('SupervisorCtrl', function SupervisorCtrl(
if
(
!
$window
.
sessionStorage
.
user
)
return
$scope
.
logout
();
$scope
.
user
=
$rootScope
.
user
;
// Link to setup
$scope
.
setup
=
function
(){
$location
.
path
(
'/setup'
);
...
...
@@ -32,7 +30,7 @@ dashboardControllers.controller('SupervisorCtrl', function SupervisorCtrl(
IOService
.
post
(
'/sup/subscribe'
,
{
action
:
'subscribe'
,
attributes
:
{
id_sup
:
$
s
cope
.
user
.
id
,
id_sup
:
$
rootS
cope
.
user
.
id
,
ui
:
'PDB'
}
});
...
...
@@ -51,7 +49,7 @@ dashboardControllers.controller('SupervisorCtrl', function SupervisorCtrl(
return
null
;
},
supervisor
:
function
()
{
return
$
s
cope
.
user
;
return
$
rootS
cope
.
user
;
},
onlyOwn
:
function
()
{
return
true
;
...
...
sails/src/assets/scripts/modules/supervisor/controllers/supervisors.js
View file @
9bdcbd8e
...
...
@@ -6,8 +6,6 @@
dashboardControllers
.
controller
(
'SupervisorsCtrl'
,
function
SupervisorsCtrl
(
$rootScope
,
$scope
,
$window
,
$http
,
config
,
$translate
,
ngToast
)
{
$scope
.
user
=
$rootScope
.
user
;
$scope
.
inputs
=
{
search_str
:
''
,
email
:
''
...
...
@@ -17,7 +15,7 @@ dashboardControllers.controller('SupervisorsCtrl', function SupervisorsCtrl(
function
loadSupervisors
()
{
$http
.
get
(
config
.
backend
+
'/sup/'
+
$
s
cope
.
user
.
id
+
'/supervisors'
)
.
get
(
config
.
backend
+
'/sup/'
+
$
rootS
cope
.
user
.
id
+
'/supervisors'
)
.
success
(
function
(
data
,
status
,
headers
,
config
)
{
$scope
.
supervisors_list
=
data
;
console
.
log
(
$scope
.
supervisors_list
);
...
...
@@ -33,7 +31,7 @@ dashboardControllers.controller('SupervisorsCtrl', function SupervisorsCtrl(
*/
$scope
.
searchSup
=
function
()
{
if
(
!
$
s
cope
.
user
.
isOffice
)
{
if
(
!
$
rootS
cope
.
user
.
isOffice
)
{
console
.
log
(
"Forbidden action. You're not an office!"
);
return
;
}
...
...
@@ -63,13 +61,13 @@ dashboardControllers.controller('SupervisorsCtrl', function SupervisorsCtrl(
*/
$scope
.
confirmLink
=
function
()
{
if
(
!
$
s
cope
.
user
.
isOffice
)
{
if
(
!
$
rootS
cope
.
user
.
isOffice
)
{
console
.
log
(
"Forbidden action. You're not an office!"
);
return
;
}
$scope
.
showmessagesupfound
=
false
;
$http
.
post
(
config
.
backend
+
'/sup/'
+
$scope
.
supToAdd
.
id
+
'/off/'
+
$
s
cope
.
user
.
id
)
.
post
(
config
.
backend
+
'/sup/'
+
$scope
.
supToAdd
.
id
+
'/off/'
+
$
rootS
cope
.
user
.
id
)
.
success
(
function
(
data
,
status
,
headers
,
config
)
{
loadSupervisors
();
ngToast
.
success
(
$translate
.
instant
(
'supervisor_added_notified'
));
...
...
@@ -90,13 +88,13 @@ dashboardControllers.controller('SupervisorsCtrl', function SupervisorsCtrl(
*/
$scope
.
unlinkSupervisor
=
function
(
id
)
{
if
(
!
$
s
cope
.
user
.
isOffice
)
{
if
(
!
$
rootS
cope
.
user
.
isOffice
)
{
console
.
log
(
"Forbidden action. You're not an office!"
);
return
;
}
$http
.
delete
(
config
.
backend
+
'/sup/'
+
id
+
'/off/'
+
$
s
cope
.
user
.
id
)
.
delete
(
config
.
backend
+
'/sup/'
+
id
+
'/off/'
+
$
rootS
cope
.
user
.
id
)
.
success
(
function
(
data
,
status
,
headers
,
config
)
{
loadSupervisors
();
ngToast
.
success
(
$translate
.
instant
(
'supervisor_deleted'
));
...
...
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