Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
slapos.core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Labels
Merge Requests
18
Merge Requests
18
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Jobs
Commits
Open sidebar
nexedi
slapos.core
Commits
7e382c9b
Commit
7e382c9b
authored
Jul 01, 2019
by
Rafael Monnerat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
slapos_jio: An user can invite another user to its organisation
parent
bd7b6ca5
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
351 additions
and
17 deletions
+351
-17
master/bt5/slapos_jio/PathTemplateItem/web_page_module/rjs_gadget_erp5_page_slap_organisation_view_js.js
..._module/rjs_gadget_erp5_page_slap_organisation_view_js.js
+55
-13
master/bt5/slapos_jio/PathTemplateItem/web_page_module/rjs_gadget_erp5_page_slap_organisation_view_js.xml
...module/rjs_gadget_erp5_page_slap_organisation_view_js.xml
+2
-2
master/bt5/slapos_jio/PathTemplateItem/web_page_module/rjs_gadget_slapos_header_js.js
...mplateItem/web_page_module/rjs_gadget_slapos_header_js.js
+1
-0
master/bt5/slapos_jio/PathTemplateItem/web_page_module/rjs_gadget_slapos_header_js.xml
...plateItem/web_page_module/rjs_gadget_slapos_header_js.xml
+2
-2
master/bt5/slapos_jio/SkinTemplateItem/portal_skins/slapos_hal_json_style/Base_getInvitationLink.py
...tal_skins/slapos_hal_json_style/Base_getInvitationLink.py
+27
-0
master/bt5/slapos_jio/SkinTemplateItem/portal_skins/slapos_hal_json_style/Base_getInvitationLink.xml
...al_skins/slapos_hal_json_style/Base_getInvitationLink.xml
+70
-0
master/bt5/slapos_jio/SkinTemplateItem/portal_skins/slapos_hal_json_style/Organisation_acceptInvitation.py
...ns/slapos_hal_json_style/Organisation_acceptInvitation.py
+41
-0
master/bt5/slapos_jio/SkinTemplateItem/portal_skins/slapos_hal_json_style/Organisation_acceptInvitation.xml
...s/slapos_hal_json_style/Organisation_acceptInvitation.xml
+70
-0
master/bt5/slapos_jio/SkinTemplateItem/portal_skins/slapos_hal_json_style/Organisation_getAssociatedPersonList.py
...os_hal_json_style/Organisation_getAssociatedPersonList.py
+13
-0
master/bt5/slapos_jio/SkinTemplateItem/portal_skins/slapos_hal_json_style/Organisation_getAssociatedPersonList.xml
...s_hal_json_style/Organisation_getAssociatedPersonList.xml
+70
-0
No files found.
master/bt5/slapos_jio/PathTemplateItem/web_page_module/rjs_gadget_erp5_page_slap_organisation_view_js.js
View file @
7e382c9b
...
...
@@ -30,6 +30,48 @@
});
})
.
allowPublicAcquisition
(
"
jio_allDocs
"
,
function
(
param_list
)
{
var
gadget
=
this
;
return
gadget
.
jio_allDocs
(
param_list
[
0
])
.
push
(
function
(
result
)
{
var
i
,
value
,
jio_key_value
,
len
=
result
.
data
.
total_rows
;
for
(
i
=
0
;
i
<
len
;
i
+=
1
)
{
if
(
1
||
(
result
.
data
.
rows
[
i
].
value
.
hasOwnProperty
(
"
title
"
)))
{
value
=
result
.
data
.
rows
[
i
].
value
.
title
;
result
.
data
.
rows
[
i
].
value
.
title
=
{
field_gadget_param
:
{
css_class
:
""
,
"
default
"
:
value
,
key
:
"
title
"
,
editable
:
1
,
url
:
"
gadget_slapos_label_listbox_field.html
"
,
title
:
"
Title
"
,
type
:
"
GadgetField
"
}
};
value
=
result
.
data
.
rows
[
i
].
value
.
default_email_text
;
result
.
data
.
rows
[
i
].
value
.
default_email_text
=
{
field_gadget_param
:
{
css_class
:
""
,
"
default
"
:
value
,
key
:
"
default_email_text
"
,
editable
:
1
,
url
:
"
gadget_slapos_label_listbox_field.html
"
,
title
:
"
Status
"
,
type
:
"
GadgetField
"
}
};
result
.
data
.
rows
[
i
].
value
[
"
listbox_uid:list
"
]
=
{
key
:
"
listbox_uid:list
"
,
value
:
2713
};
}
}
return
result
;
});
})
.
onEvent
(
'
submit
'
,
function
()
{
var
gadget
=
this
;
return
gadget
.
notifySubmitting
()
...
...
@@ -61,7 +103,10 @@
]);
})
.
push
(
function
(
result
)
{
var
column_list
=
[],
var
column_list
=
[
[
'
title
'
,
'
Title
'
],
[
'
default_email_text
'
,
'
Email
'
]
],
editable
=
gadget
.
state
.
editable
;
return
result
[
0
].
render
({
erp5_document
:
{
...
...
@@ -92,13 +137,13 @@
"
column_list
"
:
column_list
,
"
show_anchor
"
:
0
,
"
default_params
"
:
{},
"
editable
"
:
0
,
"
editable
"
:
1
,
"
editable_column_list
"
:
[],
"
key
"
:
"
slap_organisation_computer_listbox
"
,
"
lines
"
:
10
,
"
list_method
"
:
"
Organisation_get
ComputerTracking
List
"
,
"
list_method
"
:
"
Organisation_get
AssociatedPerson
List
"
,
"
list_method_template
"
:
result
[
1
]
+
"
ERP5Document_getHateoas?mode=search&
"
+
"
list_method=Organisation_get
ComputerTracking
List&relative_url=
"
+
"
list_method=Organisation_get
AssociatedPerson
List&relative_url=
"
+
gadget
.
state
.
jio_key
+
"
&default_param_json=eyJpZ25vcmVfdW5rbm93bl9jb2x1bW5zIjogdHJ1ZX0={&query,select_list*,limit*,sort_on*,local_roles*}
"
,
"
query
"
:
"
urn:jio:allDocs?query=
"
,
"
portal_type
"
:
[],
...
...
@@ -119,12 +164,7 @@
form_definition
:
{
group_list
:
[[
"
left
"
,
[[
"
my_title
"
],
[
"
my_reference
"
],
[
'
my_monitoring_status
'
],
[
"
my_default_geographical_location_longitude
"
],
[
"
my_default_geographical_location_latitude
"
]]
],
[
"
right
"
,
[[
'
my_organisation_map
'
]]
[[
"
my_title
"
],
[
"
my_reference
"
]]
],
[
"
bottom
"
,
[[
"
listbox
"
]]
...
...
@@ -135,15 +175,17 @@
.
push
(
function
()
{
return
RSVP
.
all
([
gadget
.
getUrlFor
({
command
:
"
change
"
,
options
:
{
editable
:
true
}}),
gadget
.
getUrlFor
({
command
:
'
history_previous
'
}),
gadget
.
getUrlFor
({
command
:
"
change
"
,
options
:
{
page
:
"
slap_delete_organisation
"
}})
gadget
.
getUrlFor
({
command
:
"
change
"
,
options
:
{
page
:
"
slap_person_view
"
}}),
gadget
.
getUrlFor
({
command
:
"
change
"
,
options
:
{
page
:
"
slap_delete_organisation
"
}}),
gadget
.
getUrlFor
({
command
:
"
change
"
,
options
:
{
page
:
"
slap_organisation_get_invitation_link
"
}})
]);
})
.
push
(
function
(
url_list
)
{
var
header_dict
=
{
selection_url
:
url_list
[
1
],
page_title
:
"
Site
:
"
+
gadget
.
state
.
doc
.
title
,
page_title
:
"
Organisation
:
"
+
gadget
.
state
.
doc
.
title
,
delete_url
:
url_list
[
2
],
invitation_url
:
url_list
[
3
],
save_action
:
true
};
if
(
!
gadget
.
state
.
editable
)
{
...
...
master/bt5/slapos_jio/PathTemplateItem/web_page_module/rjs_gadget_erp5_page_slap_organisation_view_js.xml
View file @
7e382c9b
...
...
@@ -230,7 +230,7 @@
</item>
<item>
<key>
<string>
serial
</string>
</key>
<value>
<string>
976.
40660.54394.14284
</string>
</value>
<value>
<string>
976.
51816.56601.26897
</string>
</value>
</item>
<item>
<key>
<string>
state
</string>
</key>
...
...
@@ -248,7 +248,7 @@
</tuple>
<state>
<tuple>
<float>
156
1428006.67
</float>
<float>
156
2012361.29
</float>
<string>
UTC
</string>
</tuple>
</state>
...
...
master/bt5/slapos_jio/PathTemplateItem/web_page_module/rjs_gadget_slapos_header_js.js
View file @
7e382c9b
...
...
@@ -43,6 +43,7 @@
[
'
add_login_url
'
,
'
Add Login
'
,
'
plus
'
],
[
'
add_organisation_url
'
,
'
Add Organisation
'
,
'
plus
'
],
[
'
token_url
'
,
'
Token
'
,
'
key
'
],
[
'
invitation_url
'
,
'
Invite User
'
,
'
key
'
],
[
'
request_certificate_url
'
,
'
Request Certificate
'
,
'
certificate
'
],
[
'
revoke_certificate_url
'
,
'
Revoke Certificate
'
,
'
ban
'
],
[
'
rss_url
'
,
'
RSS
'
,
'
rss
'
],
...
...
master/bt5/slapos_jio/PathTemplateItem/web_page_module/rjs_gadget_slapos_header_js.xml
View file @
7e382c9b
...
...
@@ -230,7 +230,7 @@
</item>
<item>
<key>
<string>
serial
</string>
</key>
<value>
<string>
976.
9867.41515.40260
</string>
</value>
<value>
<string>
976.
40547.45717.53213
</string>
</value>
</item>
<item>
<key>
<string>
state
</string>
</key>
...
...
@@ -248,7 +248,7 @@
</tuple>
<state>
<tuple>
<float>
1561
421021.85
</float>
<float>
1561
750946.36
</float>
<string>
UTC
</string>
</tuple>
</state>
...
...
master/bt5/slapos_jio/SkinTemplateItem/portal_skins/slapos_hal_json_style/Base_getInvitationLink.py
0 → 100644
View file @
7e382c9b
import
json
from
zExceptions
import
Unauthorized
portal
=
context
.
getPortalObject
()
person
=
portal
.
portal_membership
.
getAuthenticatedMember
().
getUserValue
()
if
context
.
getPortalType
()
!=
"Organisation"
:
raise
Unauthorized
web_site
=
context
.
getWebSiteValue
()
request_method
=
"POST"
request_url
=
"%s/%s/%s"
%
(
web_site
.
absolute_url
(),
context
.
getRelativeUrl
(),
"Organisation_acceptInvitation"
)
# Maybe it would be better to use another portal_type
access_token
=
portal
.
invitation_token_module
.
newContent
(
portal_type
=
"Invitation Token"
,
source_value
=
person
,
url_string
=
request_url
,
url_method
=
request_method
)
access_token
.
validate
()
request
=
context
.
REQUEST
response
=
request
.
RESPONSE
response
.
setHeader
(
'Content-Type'
,
"application/json"
)
return
json
.
dumps
({
'invitation_link'
:
"%s?invitation_token=%s"
%
(
request_url
,
access_token
.
getId
())})
master/bt5/slapos_jio/SkinTemplateItem/portal_skins/slapos_hal_json_style/Base_getInvitationLink.xml
0 → 100644
View file @
7e382c9b
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"PythonScript"
module=
"Products.PythonScripts.PythonScript"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
Script_magic
</string>
</key>
<value>
<int>
3
</int>
</value>
</item>
<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_container
</string>
</key>
<value>
<string>
container
</string>
</value>
</item>
<item>
<key>
<string>
name_context
</string>
</key>
<value>
<string>
context
</string>
</value>
</item>
<item>
<key>
<string>
name_m_self
</string>
</key>
<value>
<string>
script
</string>
</value>
</item>
<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>
_params
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
_proxy_roles
</string>
</key>
<value>
<tuple>
<string>
Manager
</string>
</tuple>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
Base_getInvitationLink
</string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
master/bt5/slapos_jio/SkinTemplateItem/portal_skins/slapos_hal_json_style/Organisation_acceptInvitation.py
0 → 100644
View file @
7e382c9b
from
zExceptions
import
Unauthorized
portal
=
context
.
getPortalObject
()
if
invitation_token
is
None
:
raise
ValueError
(
"Invitation Token is required"
)
if
context
.
getPortalType
()
!=
"Organisation"
:
raise
Unauthorized
(
"Context is not an Organisation"
)
person
=
portal
.
portal_membership
.
getAuthenticatedMember
().
getUserValue
()
if
person
is
None
:
raise
ValueError
(
"You must be logged in!"
)
try
:
invitation_token
=
portal
.
invitation_token_module
[
invitation_token
]
except
KeyError
:
raise
ValueError
(
"Invitation Token is not found."
)
if
invitation_token
.
getPortalType
()
!=
"Invitation Token"
:
raise
ValueError
(
"Invitation Token is not found."
)
if
invitation_token
.
getValidationState
()
!=
"validated"
:
raise
ValueError
(
"Invitation Token was already used."
)
if
invitation_token
.
getSourceValue
()
==
person
:
raise
ValueError
(
"Invitation Token cannot be used by the same user that generated the token!"
)
for
assignment
in
person
.
objectValues
(
portal_type
=
"Assignment"
):
if
assignment
.
getSubordination
()
==
context
.
getRelativeUrl
():
invitation_token
.
invalidate
(
comment
=
"User already has assignment to the Person"
)
return
"Already had stuff"
person
.
newContent
(
title
=
"Assigment for Site %s"
%
context
.
getTitle
(),
portal_type
=
"Assignment"
,
destination_value
=
context
).
open
()
invitation_token
.
invalidate
()
return
'Go charlie'
master/bt5/slapos_jio/SkinTemplateItem/portal_skins/slapos_hal_json_style/Organisation_acceptInvitation.xml
0 → 100644
View file @
7e382c9b
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"PythonScript"
module=
"Products.PythonScripts.PythonScript"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
Script_magic
</string>
</key>
<value>
<int>
3
</int>
</value>
</item>
<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_container
</string>
</key>
<value>
<string>
container
</string>
</value>
</item>
<item>
<key>
<string>
name_context
</string>
</key>
<value>
<string>
context
</string>
</value>
</item>
<item>
<key>
<string>
name_m_self
</string>
</key>
<value>
<string>
script
</string>
</value>
</item>
<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>
_params
</string>
</key>
<value>
<string>
invitation_token=None
</string>
</value>
</item>
<item>
<key>
<string>
_proxy_roles
</string>
</key>
<value>
<tuple>
<string>
Manager
</string>
</tuple>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
Organisation_acceptInvitation
</string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
master/bt5/slapos_jio/SkinTemplateItem/portal_skins/slapos_hal_json_style/Organisation_getAssociatedPersonList.py
0 → 100644
View file @
7e382c9b
from
Products.ERP5Type.Document
import
newTempDocument
temp_object_list
=
[]
for
assignment
in
context
.
getDestinationRelatedValueList
(
portal_type
=
"Assignment"
):
person
=
assignment
.
getParentValue
()
temp_object_list
.
append
(
newTempDocument
(
context
,
str
(
person
.
getId
()),
title
=
person
.
getTitle
(),
default_email_text
=
person
.
getDefaultEmailText
()
)
)
return
temp_object_list
master/bt5/slapos_jio/SkinTemplateItem/portal_skins/slapos_hal_json_style/Organisation_getAssociatedPersonList.xml
0 → 100644
View file @
7e382c9b
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"PythonScript"
module=
"Products.PythonScripts.PythonScript"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
Script_magic
</string>
</key>
<value>
<int>
3
</int>
</value>
</item>
<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_container
</string>
</key>
<value>
<string>
container
</string>
</value>
</item>
<item>
<key>
<string>
name_context
</string>
</key>
<value>
<string>
context
</string>
</value>
</item>
<item>
<key>
<string>
name_m_self
</string>
</key>
<value>
<string>
script
</string>
</value>
</item>
<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>
_params
</string>
</key>
<value>
<string>
**kw
</string>
</value>
</item>
<item>
<key>
<string>
_proxy_roles
</string>
</key>
<value>
<tuple>
<string>
Manager
</string>
</tuple>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
Organisation_getAssociatedPersonList
</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