Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
erp5-Boxiang
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Hamza
erp5-Boxiang
Commits
0f00ac87
Commit
0f00ac87
authored
Aug 20, 2018
by
Vincent Bechu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[erp5_officejs_ui_test] Add tests on upload with erp5 storage
parent
769ea29c
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
504 additions
and
0 deletions
+504
-0
bt5/erp5_officejs_ui_test/PathTemplateItem/portal_tests/officejs_ui_ooo_spreadsheet_zuite/testOnlyOfficeSpreadsheetConvertErp5Synchronize.xml
...zuite/testOnlyOfficeSpreadsheetConvertErp5Synchronize.xml
+58
-0
bt5/erp5_officejs_ui_test/PathTemplateItem/portal_tests/officejs_ui_ooo_spreadsheet_zuite/testOnlyOfficeSpreadsheetConvertErp5Synchronize.zpt
...zuite/testOnlyOfficeSpreadsheetConvertErp5Synchronize.zpt
+49
-0
bt5/erp5_officejs_ui_test/PathTemplateItem/portal_tests/officejs_ui_ooo_spreadsheet_zuite/testOnlyfficeSpreadsheetBadDocumentState.xml
...dsheet_zuite/testOnlyfficeSpreadsheetBadDocumentState.xml
+58
-0
bt5/erp5_officejs_ui_test/PathTemplateItem/portal_tests/officejs_ui_ooo_spreadsheet_zuite/testOnlyfficeSpreadsheetBadDocumentState.zpt
...dsheet_zuite/testOnlyfficeSpreadsheetBadDocumentState.zpt
+50
-0
bt5/erp5_officejs_ui_test/SkinTemplateItem/portal_skins/erp5_officejs_ui_test/gadget_officejs_create_bad_document.html.html
...ejs_ui_test/gadget_officejs_create_bad_document.html.html
+22
-0
bt5/erp5_officejs_ui_test/SkinTemplateItem/portal_skins/erp5_officejs_ui_test/gadget_officejs_create_bad_document.html.xml
...cejs_ui_test/gadget_officejs_create_bad_document.html.xml
+28
-0
bt5/erp5_officejs_ui_test/SkinTemplateItem/portal_skins/erp5_officejs_ui_test/gadget_officejs_create_bad_document.js.js
...fficejs_ui_test/gadget_officejs_create_bad_document.js.js
+47
-0
bt5/erp5_officejs_ui_test/SkinTemplateItem/portal_skins/erp5_officejs_ui_test/gadget_officejs_create_bad_document.js.xml
...ficejs_ui_test/gadget_officejs_create_bad_document.js.xml
+32
-0
bt5/erp5_officejs_ui_test/SkinTemplateItem/portal_skins/erp5_officejs_ui_test/gadget_ooffice_upload_erp5.html.html
...rp5_officejs_ui_test/gadget_ooffice_upload_erp5.html.html
+26
-0
bt5/erp5_officejs_ui_test/SkinTemplateItem/portal_skins/erp5_officejs_ui_test/gadget_ooffice_upload_erp5.html.xml
...erp5_officejs_ui_test/gadget_ooffice_upload_erp5.html.xml
+28
-0
bt5/erp5_officejs_ui_test/SkinTemplateItem/portal_skins/erp5_officejs_ui_test/gadget_ooffice_upload_erp5.js.js
...ns/erp5_officejs_ui_test/gadget_ooffice_upload_erp5.js.js
+74
-0
bt5/erp5_officejs_ui_test/SkinTemplateItem/portal_skins/erp5_officejs_ui_test/gadget_ooffice_upload_erp5.js.xml
...s/erp5_officejs_ui_test/gadget_ooffice_upload_erp5.js.xml
+32
-0
No files found.
bt5/erp5_officejs_ui_test/PathTemplateItem/portal_tests/officejs_ui_ooo_spreadsheet_zuite/testOnlyOfficeSpreadsheetConvertErp5Synchronize.xml
0 → 100644
View file @
0f00ac87
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"ZopePageTemplate"
module=
"Products.PageTemplates.ZopePageTemplate"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
_bind_names
</string>
</key>
<value>
<object>
<klass>
<global
name=
"NameAssignments"
module=
"Shared.DC.Scripts.Bindings"
/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key>
<string>
_asgns
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
name_subpath
</string>
</key>
<value>
<string>
traverse_subpath
</string>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key>
<string>
content_type
</string>
</key>
<value>
<string>
text/html
</string>
</value>
</item>
<item>
<key>
<string>
expand
</string>
</key>
<value>
<int>
0
</int>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
testOnlyOfficeSpreadsheetConvertErp5Synchronize
</string>
</value>
</item>
<item>
<key>
<string>
output_encoding
</string>
</key>
<value>
<string>
utf-8
</string>
</value>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<unicode></unicode>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
bt5/erp5_officejs_ui_test/PathTemplateItem/portal_tests/officejs_ui_ooo_spreadsheet_zuite/testOnlyOfficeSpreadsheetConvertErp5Synchronize.zpt
0 → 100644
View file @
0f00ac87
<html
xmlns:tal=
"http://xml.zope.org/namespaces/tal"
xmlns:metal=
"http://xml.zope.org/namespaces/metal"
>
<head>
<meta
http-equiv=
"Content-Type"
content=
"text/html; charset=UTF-8"
>
<title>
Test OfficeJS UI
</title>
</head>
<body>
<table
cellpadding=
"1"
cellspacing=
"1"
border=
"1"
>
<thead>
<tr><td
rowspan=
"1"
colspan=
"3"
>
Test OfficeJS UI
</td></tr>
</thead><tbody>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplate/macros/init"
/>
<!-- Clean Up -->
<tr>
<td>
open
</td>
<td>
${base_url}/bar_module/ListBoxZuite_reset
</td>
<td></td>
</tr>
<tr>
<td>
assertTextPresent
</td>
<td>
Reset Successfully.
</td>
<td></td>
</tr>
<!-- Initialize -->
<tr>
<td>
store
</td>
<td>
Test Document
</td>
<td>
title
</td>
</tr>
<tr>
<td>
open
</td>
<td>
${base_url}/portal_skins/erp5_officejs_ui_test/gadget_ooffice_upload_erp5.html
</td>
<td></td>
</tr>
<tr>
<td>
waitForElementPresent
</td>
<td>
//div[text()='Document Created']
</td>
<td></td>
</tr>
<tr>
<td>
store
</td>
<td>
ooffice_spreadsheet
</td>
<td>
install_url
</td>
</tr>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForOfficejsUi/macros/wait_install"
/>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForOnlyOffice/macros/choice_erp5_storage"
/>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_listbox_loaded"
/>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForOnlyOffice/macros/open_document_with_title"
/>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForOnlyOffice/macros/wait_for_load_spreadsheet"
/>
\ No newline at end of file
bt5/erp5_officejs_ui_test/PathTemplateItem/portal_tests/officejs_ui_ooo_spreadsheet_zuite/testOnlyfficeSpreadsheetBadDocumentState.xml
0 → 100644
View file @
0f00ac87
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"ZopePageTemplate"
module=
"Products.PageTemplates.ZopePageTemplate"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
_bind_names
</string>
</key>
<value>
<object>
<klass>
<global
name=
"NameAssignments"
module=
"Shared.DC.Scripts.Bindings"
/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key>
<string>
_asgns
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
name_subpath
</string>
</key>
<value>
<string>
traverse_subpath
</string>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key>
<string>
content_type
</string>
</key>
<value>
<string>
text/html
</string>
</value>
</item>
<item>
<key>
<string>
expand
</string>
</key>
<value>
<int>
0
</int>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
testOnlyfficeSpreadsheetBadDocumentState
</string>
</value>
</item>
<item>
<key>
<string>
output_encoding
</string>
</key>
<value>
<string>
utf-8
</string>
</value>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<unicode></unicode>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
bt5/erp5_officejs_ui_test/PathTemplateItem/portal_tests/officejs_ui_ooo_spreadsheet_zuite/testOnlyfficeSpreadsheetBadDocumentState.zpt
0 → 100644
View file @
0f00ac87
<html
xmlns:tal=
"http://xml.zope.org/namespaces/tal"
xmlns:metal=
"http://xml.zope.org/namespaces/metal"
>
<head>
<meta
http-equiv=
"Content-Type"
content=
"text/html; charset=UTF-8"
>
<title>
Test OfficeJS UI
</title>
</head>
<body>
<table
cellpadding=
"1"
cellspacing=
"1"
border=
"1"
>
<thead>
<tr>
<td
rowspan=
"1"
colspan=
"3"
>
Test OfficeJS UI
</td>
</tr>
</thead>
<tbody>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplate/macros/init"
/>
<tr>
<td>
store
</td>
<td>
ooffice_spreadsheet
</td>
<td>
install_url
</td>
</tr>
<tr>
<td>
store
</td>
<td>
Bad Document
</td>
<td>
title
</td>
</tr>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForOfficejsUi/macros/wait_install"
/>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForOnlyOffice/macros/choice_erp5_storage"
/>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_listbox_loaded"
/>
<tr>
<td>
open
</td>
<td>
${base_url}/portal_skins/erp5_officejs_ui_test/gadget_officejs_create_bad_document.html
</td>
<td></td>
</tr>
<tr>
<td>
waitForElementPresent
</td>
<td>
//div[text()='Document Created']
</td>
<td></td>
</tr>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForOfficejsUi/macros/wait_install"
/>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_listbox_loaded"
/>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForOnlyOffice/macros/synchronize"
/>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_listbox_loaded"
/>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForOnlyOffice/macros/open_document_with_title"
/>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForOnlyOffice/macros/wait_for_load_spreadsheet"
/>
</tbody>
</table>
</body>
</html>
\ No newline at end of file
bt5/erp5_officejs_ui_test/SkinTemplateItem/portal_skins/erp5_officejs_ui_test/gadget_officejs_create_bad_document.html.html
0 → 100644
View file @
0f00ac87
<!DOCTYPE html>
<html>
<head>
<!--
data-i18n=No records
data-i18n=Records
-->
<meta
http-equiv=
"Content-type"
content=
"text/html; charset=utf-8"
/>
<meta
name=
"viewport"
content=
"width=device-width"
/>
<title>
Bad Storage Creation
</title>
<!-- renderjs -->
<script
src=
"rsvp.js"
></script>
<script
src=
"renderjs.js"
></script>
<script
src=
"jio.js"
></script>
<!-- custom script -->
<script
src=
"gadget_officejs_create_bad_document.js"
type=
"text/javascript"
></script>
</head>
<body>
</body>
</html>
\ No newline at end of file
bt5/erp5_officejs_ui_test/SkinTemplateItem/portal_skins/erp5_officejs_ui_test/gadget_officejs_create_bad_document.html.xml
0 → 100644
View file @
0f00ac87
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"File"
module=
"OFS.Image"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
__name__
</string>
</key>
<value>
<string>
gadget_officejs_create_bad_document.html
</string>
</value>
</item>
<item>
<key>
<string>
content_type
</string>
</key>
<value>
<string>
text/html
</string>
</value>
</item>
<item>
<key>
<string>
precondition
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<string></string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
bt5/erp5_officejs_ui_test/SkinTemplateItem/portal_skins/erp5_officejs_ui_test/gadget_officejs_create_bad_document.js.js
0 → 100644
View file @
0f00ac87
/*jslint indent: 2, nomen: true */
/*global window, rJS, jIO, document*/
(
function
(
window
,
rJS
,
jIO
,
document
,
URL
)
{
"
use strict
"
;
rJS
(
window
)
.
declareService
(
function
()
{
var
storage
=
jIO
.
createJIO
({
type
:
"
indexeddb
"
,
database
:
"
officejs-erp5
"
}),
gadget
=
this
;
return
storage
.
put
(
'
bad_document
'
,
{
'
filename
'
:
'
test.xlsx
'
,
'
title
'
:
'
Bad Document
'
,
'
portal_type
'
:
'
Spreadsheet
'
,
'
mime_type
'
:
'
xlsx
'
,
'
modification_date
'
:
'
Fri, 17 Aug 2018 11:21:22 +0000
'
,
'
content_type
'
:
"
application/x-asc-spreadsheet
"
})
.
push
(
function
(
id
)
{
return
jIO
.
util
.
ajax
({
type
:
"
GET
"
,
url
:
new
URL
(
'
./test_ooo_spreadsheet.xlsx
'
,
window
.
location
.
href
),
dataType
:
"
blob
"
})
.
then
(
function
(
res
)
{
return
storage
.
putAttachment
(
id
,
'
data
'
,
res
.
target
.
response
);
});
})
.
push
(
function
()
{
return
storage
.
put
(
'
CloudoooConversion/bad_document/xlsy
'
,
{
'
from
'
:
"
xlsx
"
,
'
id
'
:
'
bad_document
'
,
'
modification_date
'
:
"
Fri, 17 Aug 2018 11:21:22 +0000
"
,
'
name
'
:
"
data
"
,
'
status
'
:
"
convert
"
,
to
:
"
xlsy
"
});
})
.
push
(
function
()
{
var
div
=
document
.
createElement
(
'
div
'
);
div
.
textContent
=
'
Document Created
'
;
gadget
.
element
.
appendChild
(
div
);
});
});
}(
window
,
rJS
,
jIO
,
document
,
URL
));
bt5/erp5_officejs_ui_test/SkinTemplateItem/portal_skins/erp5_officejs_ui_test/gadget_officejs_create_bad_document.js.xml
0 → 100644
View file @
0f00ac87
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"File"
module=
"OFS.Image"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
_Cacheable__manager_id
</string>
</key>
<value>
<string>
http_cache
</string>
</value>
</item>
<item>
<key>
<string>
__name__
</string>
</key>
<value>
<string>
gadget_officejs_create_bad_document.js
</string>
</value>
</item>
<item>
<key>
<string>
content_type
</string>
</key>
<value>
<string>
application/javascript
</string>
</value>
</item>
<item>
<key>
<string>
precondition
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<string></string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
bt5/erp5_officejs_ui_test/SkinTemplateItem/portal_skins/erp5_officejs_ui_test/gadget_ooffice_upload_erp5.html.html
0 → 100644
View file @
0f00ac87
<!DOCTYPE html>
<html>
<head>
<!--
data-i18n=No records
data-i18n=Records
-->
<meta
http-equiv=
"Content-type"
content=
"text/html; charset=utf-8"
/>
<meta
name=
"viewport"
content=
"width=device-width"
/>
<title>
Upload OnlyOffice Document
</title>
<!-- renderjs -->
<script
src=
"rsvp.js"
></script>
<script
src=
"renderjs.js"
></script>
<script
src=
"jio.js"
></script>
<!-- custom script -->
<script
src=
"gadget_ooffice_upload_erp5.js"
type=
"text/javascript"
></script>
</head>
<body>
<script
data-renderjs-configuration=
"portal_type"
type=
"text/x-renderjs-configuration"
>
Spreadsheet
</script>
<script
data-renderjs-configuration=
"format"
type=
"text/x-renderjs-configuration"
>
xlsx
</script>
<script
data-renderjs-configuration=
"ooo_format"
type=
"text/x-renderjs-configuration"
>
xlsy
</script>
<script
data-renderjs-configuration=
"type"
type=
"text/x-renderjs-configuration"
>
spreadsheet
</script>
</body>
</html>
\ No newline at end of file
bt5/erp5_officejs_ui_test/SkinTemplateItem/portal_skins/erp5_officejs_ui_test/gadget_ooffice_upload_erp5.html.xml
0 → 100644
View file @
0f00ac87
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"File"
module=
"OFS.Image"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
__name__
</string>
</key>
<value>
<string>
gadget_ooffice_upload_erp5.html
</string>
</value>
</item>
<item>
<key>
<string>
content_type
</string>
</key>
<value>
<string>
text/html
</string>
</value>
</item>
<item>
<key>
<string>
precondition
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<string></string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
bt5/erp5_officejs_ui_test/SkinTemplateItem/portal_skins/erp5_officejs_ui_test/gadget_ooffice_upload_erp5.js.js
0 → 100644
View file @
0f00ac87
/*jslint indent: 2, nomen: true */
/*global window, rJS, jIO, URL, RSVP*/
(
function
(
window
,
rJS
,
jIO
,
URL
,
RSVP
)
{
"
use strict
"
;
rJS
(
window
)
.
declareService
(
function
()
{
var
storage
=
jIO
.
createJIO
({
type
:
"
indexeddb
"
,
database
:
"
officejs-erp5
"
}),
gadget
=
this
,
element_list
=
gadget
.
element
.
querySelectorAll
(
"
[data-renderjs-configuration]
"
),
len
=
element_list
.
length
,
i
,
param
=
{};
for
(
i
=
0
;
i
<
len
;
i
+=
1
)
{
param
[
element_list
[
i
].
getAttribute
(
'
data-renderjs-configuration
'
)]
=
element_list
[
i
].
textContent
;
}
return
storage
.
put
(
'
test_ooo_
'
+
param
.
type
,
{
'
reference
'
:
'
test_ooffice_upload
'
,
'
title
'
:
'
Test Document
'
,
'
filename
'
:
'
test.
'
+
param
.
ooo_format
,
'
portal_type
'
:
param
.
portal_type
,
'
parent_relative_url
'
:
"
document_module
"
,
'
content_type
'
:
"
application/x-asc-
"
+
param
.
type
,
'
modification_date
'
:
new
Date
().
toISOString
()
})
.
push
(
function
(
id
)
{
return
new
RSVP
.
Queue
()
.
push
(
function
()
{
return
jIO
.
util
.
ajax
({
type
:
"
GET
"
,
url
:
new
URL
(
'
./test_ooo_
'
+
param
.
type
+
'
.
'
+
param
.
format
,
window
.
location
.
href
),
dataType
:
"
blob
"
});
})
.
push
(
function
(
res
)
{
return
storage
.
putAttachment
(
id
,
param
.
format
,
res
.
target
.
response
);
})
.
push
(
function
()
{
return
RSVP
.
all
([
storage
.
put
(
'
CloudoooConversion/
'
+
id
+
'
/
'
+
param
.
ooo_format
,
{
status
:
'
convert
'
,
from
:
param
.
format
,
to
:
param
.
ooo_format
,
id
:
id
,
name
:
param
.
format
}
),
storage
.
put
(
'
CloudoooConversion/
'
+
id
+
'
/
'
+
param
.
ooo_format
,
{
status
:
'
convert
'
,
from
:
param
.
format
,
to
:
param
.
ooo_format
,
id
:
id
,
name
:
param
.
format
}
)
]);
});
})
.
push
(
function
()
{
var
div
=
window
.
document
.
createElement
(
'
div
'
);
div
.
textContent
=
'
Document Created
'
;
gadget
.
element
.
appendChild
(
div
);
});
});
}(
window
,
rJS
,
jIO
,
URL
,
RSVP
));
bt5/erp5_officejs_ui_test/SkinTemplateItem/portal_skins/erp5_officejs_ui_test/gadget_ooffice_upload_erp5.js.xml
0 → 100644
View file @
0f00ac87
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"File"
module=
"OFS.Image"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
_Cacheable__manager_id
</string>
</key>
<value>
<string>
http_cache
</string>
</value>
</item>
<item>
<key>
<string>
__name__
</string>
</key>
<value>
<string>
gadget_ooffice_upload_erp5.js
</string>
</value>
</item>
<item>
<key>
<string>
content_type
</string>
</key>
<value>
<string>
application/javascript
</string>
</value>
</item>
<item>
<key>
<string>
precondition
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<string></string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
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