Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Z
zimbra-admin-api-js
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Public
zimbra-admin-api-js
Commits
d3ead1ca
Commit
d3ead1ca
authored
May 31, 2016
by
Juorder Antonio
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix add and remove members and allowers in distribution list
parent
fab81c33
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
136 additions
and
230 deletions
+136
-230
path.json
path.json
+1
-1
distribution_lists.jsx
src/components/distribution/distribution_lists.jsx
+118
-212
panel_actions.jsx
src/components/panel_actions.jsx
+9
-7
panel_actions_allows.jsx
src/components/panel_actions_allows.jsx
+7
-9
utils.jsx
src/utils/utils.jsx
+1
-1
No files found.
path.json
View file @
d3ead1ca
module.exports
=
{
"main"
:{
"js"
:
"/220021bundle.js"
}}
\ No newline at end of file
module.exports
=
{
"main"
:{
"js"
:
"/976919bundle.js"
}}
\ No newline at end of file
src/components/distribution/distribution_lists.jsx
View file @
d3ead1ca
...
...
@@ -28,16 +28,16 @@ export default class DistributionLists extends React.Component {
constructor
(
props
)
{
super
(
props
);
this
.
isStoreEnabled
=
true
;
this
.
isStoreEnabled
=
window
.
manager_config
.
enableStores
;
this
.
getDistributionLists
=
this
.
getDistributionLists
.
bind
(
this
);
this
.
showMessage
=
this
.
showMessage
.
bind
(
this
);
this
.
onDeleteMember
=
this
.
onDeleteMember
.
bind
(
this
);
this
.
onDeleteOwner
=
this
.
onDeleteOwner
.
bind
(
this
);
this
.
onSubmitMembers
=
this
.
onSubmitMembers
.
bind
(
this
);
this
.
onCancelMember
=
this
.
onCancelMember
.
bind
(
this
);
this
.
onCancelOwner
=
this
.
onCancelOwner
.
bind
(
this
);
this
.
onExportMembers
=
this
.
onExportMembers
.
bind
(
this
);
this
.
onExportAllowers
=
this
.
onExportAllowers
.
bind
(
this
);
this
.
makeRequest
=
this
.
makeRequest
.
bind
(
this
);
this
.
domain
=
null
;
this
.
isGlobalAdmin
=
UserStore
.
isGlobalAdmin
();
...
...
@@ -63,6 +63,54 @@ export default class DistributionLists extends React.Component {
Utils
.
exportAsCSV
(
data
,
'allowers'
,
title
,
true
);
}
makeRequest
(
response
,
dl
,
resolve
,
store
)
{
const
keys
=
Object
.
keys
(
response
).
sort
();
const
item
=
keys
[
0
];
const
res
=
store
||
{};
const
action
=
item
.
match
(
/
(
remove|add
)
/gi
);
if
(
action
)
{
var
element
=
response
[
item
];
if
(
element
&&
element
.
length
)
{
const
pop
=
element
.
pop
();
const
target
=
typeof
pop
===
'object'
?
pop
.
name
||
pop
.
id
:
pop
;
const
label
=
action
[
0
]
===
'remove'
?
'eliminar'
:
'agregar'
;
return
dl
[
item
](
target
,
(
er
,
success
)
=>
{
if
(
success
)
{
if
(
res
.
completed
)
{
res
.
completed
.
push
({
action
:
label
,
target
});
}
else
{
res
.
completed
=
[{
action
:
label
,
target
}];
}
const
api
=
success
.
api
?
success
:
dl
;
return
this
.
makeRequest
(
response
,
api
,
resolve
,
res
);
}
er
.
action
=
label
;
er
.
target
=
target
;
if
(
res
.
error
)
{
res
.
error
.
push
(
er
);
}
else
{
res
.
error
=
[
er
];
}
return
this
.
makeRequest
(
response
,
dl
,
resolve
,
res
);
});
}
else
{
Reflect
.
deleteProperty
(
response
,
item
);
return
this
.
makeRequest
(
response
,
dl
,
resolve
,
res
);
}
}
res
.
data
=
dl
;
return
resolve
(
res
);
}
getDistributionLists
()
{
const
domain
=
this
.
isStoreEnabled
?
DomainStore
.
getCurrent
()
:
null
;
const
id
=
this
.
props
.
params
.
id
;
...
...
@@ -109,7 +157,7 @@ export default class DistributionLists extends React.Component {
DomainStore
.
setMembers
(
data
.
distributionsList
.
members
);
}
this
.
setState
({
return
this
.
setState
({
distributionsList
:
data
.
distributionsList
,
members
:
this
.
isStoreEnabled
?
DomainStore
.
getMembers
()
:
data
.
distributionsList
.
members
,
owners
:
this
.
isStoreEnabled
?
DomainStore
.
getOwners
()
:
data
.
owners
,
...
...
@@ -125,233 +173,73 @@ export default class DistributionLists extends React.Component {
});
}
onSubmitOwners
(
response
)
{
if
(
response
.
refresh
)
{
response
.
refresh
.
forEach
((
member
)
=>
{
if
(
this
.
isStoreEnabled
)
{
DomainStore
.
addOwners
(
member
);
}
});
}
this
.
multipleActionsOwners
(
response
,
this
.
state
.
distributionsList
).
then
((
res
)
=>
{
//const newOwners = this.isStoreEnabled ? DomainStore.getOwners() : null;
onSubmitActions
(
response
)
{
return
new
Promise
((
resolve
)
=>
{
return
this
.
makeRequest
(
response
,
this
.
state
.
distributionsList
,
resolve
);
}).
then
((
data
)
=>
{
const
errors
=
[];
const
limit
=
res
.
length
;
for
(
let
i
=
0
;
i
<
limit
;
i
++
)
{
const
items
=
res
[
i
];
if
(
items
.
error
)
{
const
action
=
(
items
.
action
===
'remove'
)
?
'eliminar'
:
'agregar'
;
if
(
data
.
error
)
{
data
.
error
.
forEach
((
err
)
=>
{
errors
.
push
({
error
:
`Hubo un error al
${
action
}
${
items
.
item
}
, debido a :
${
items
.
erro
r
.
extra
.
reason
}
`
,
error
:
`Hubo un error al
${
err
.
action
}
${
err
.
target
}
, debido a :
${
er
r
.
extra
.
reason
}
`
,
type
:
MessagesType
.
ERROR
});
}
}
);
}
if
(
errors
.
length
!==
limit
)
{
if
(
data
.
completed
)
{
errors
.
push
({
error
:
'Se han guardado los datos
para permitidos
éxitosamente.'
,
error
:
'Se han guardado los datos éxitosamente.'
,
type
:
MessagesType
.
SUCCESS
});
}
if
(
this
.
state
.
domain
)
{
const
id
=
this
.
props
.
params
.
id
;
Client
.
getDistributionList
(
id
,
(
success
)
=>
{
success
.
getOwners
((
erro
r
,
owners
)
=>
{
const
dl
=
data
.
data
;
if
(
response
.
target
.
match
(
/owner/gi
))
{
return
dl
.
getOwners
((
er
r
,
owners
)
=>
{
if
(
owners
)
{
if
(
this
.
isStoreEnabled
)
{
DomainStore
.
setOwners
(
owners
);
}
this
.
setState
({
owners
,
error
:
errors
});
response
.
reset
();
}
});
},
(
err
)
=>
{
return
err
;
});
}
error
:
errors
.
length
>
0
?
errors
:
null
,
distributionsList
:
dl
});
}
onSubmitMembers
(
response
)
{
if
(
response
.
refresh
)
{
response
.
refresh
.
forEach
((
member
)
=>
{
if
(
this
.
isStoreEnabled
)
{
DomainStore
.
addMember
(
member
);
}
});
}
this
.
multipleActionsMembers
(
response
,
this
.
state
.
distributionsList
).
then
((
res
)
=>
{
const
newMembers
=
this
.
isStoreEnabled
?
DomainStore
.
getMembers
()
:
null
;
const
errors
=
[];
const
limit
=
res
.
length
;
const
id
=
this
.
props
.
params
.
id
;
return
Client
.
getDistributionList
(
id
,
(
success
)
=>
{
const
dl
=
success
;
for
(
let
i
=
0
;
i
<
limit
;
i
++
)
{
const
items
=
res
[
i
];
if
(
items
.
error
)
{
const
action
=
(
items
.
action
===
'remove'
)
?
'eliminar'
:
'agregar'
;
errors
.
push
({
error
:
`Hubo un error al
${
action
}
${
items
.
item
}
, debido a :
${
items
.
error
.
extra
.
reason
}
`
,
type
:
MessagesType
.
ERROR
return
this
.
setState
({
error
:
errors
.
length
>
0
?
errors
:
null
,
distributionsList
:
dl
,
members
:
dl
.
members
});
}
}
if
(
errors
.
length
!==
limit
)
{
errors
.
push
({
error
:
'Se han guardado los datos para miembros éxitosamente.'
,
type
:
MessagesType
.
SUCCESS
},
(
error
)
=>
{
return
GlobalActions
.
emitMessage
({
error
:
error
.
message
,
typeError
:
MessagesType
.
ERROR
});
}
this
.
setState
({
members
:
newMembers
,
error
:
errors
});
}).
finally
(()
=>
{
response
.
reset
();
});
}
multipleActionsMembers
(
response
,
account
)
{
const
promises
=
[];
if
(
response
.
add
||
response
.
remove
)
{
if
(
response
.
add
)
{
const
add
=
new
Promise
((
resolve
)
=>
{
account
.
addMembers
(
response
.
add
,
(
error
)
=>
{
const
res
=
{};
if
(
error
)
{
res
.
isCompleted
=
false
;
res
.
action
=
'add'
;
res
.
error
=
error
;
return
resolve
(
res
);
}
response
.
add
.
forEach
((
member
)
=>
{
if
(
this
.
isStoreEnabled
)
{
DomainStore
.
addMember
(
member
);
}
});
res
.
isCompleted
=
true
;
res
.
action
=
'add'
;
return
resolve
(
res
);
});
});
promises
.
push
(
add
);
}
if
(
response
.
remove
)
{
const
remove
=
new
Promise
((
resolve
)
=>
{
account
.
removeMembers
(
response
.
remove
,
(
error
)
=>
{
const
res
=
{};
if
(
error
)
{
res
.
isCompleted
=
false
;
res
.
action
=
'remove'
;
res
.
error
=
error
;
return
resolve
(
res
);
}
response
.
remove
.
forEach
((
member
)
=>
{
onDeleteMember
(
member
)
{
if
(
this
.
isStoreEnabled
)
{
DomainStore
.
removeMember
(
member
);
}
});
res
.
isCompleted
=
true
;
res
.
action
=
'remove'
;
return
resolve
(
res
);
});
});
promises
.
push
(
remove
);
}
}
return
Promise
.
all
(
promises
);
}
multipleActionsOwners
(
response
,
account
)
{
const
promises
=
[];
for
(
const
key
in
response
)
{
if
(
response
.
hasOwnProperty
(
key
)
&&
key
===
'add'
)
{
const
array
=
response
[
key
];
const
limit
=
array
.
length
;
for
(
let
index
=
0
;
index
<
limit
;
index
++
)
{
const
res
=
{};
const
newPermitido
=
array
[
index
];
const
promesa
=
new
Promise
((
resolve
)
=>
{
account
.
addOwner
(
newPermitido
,
(
error
)
=>
{
if
(
error
)
{
res
.
isCompleted
=
false
;
res
.
item
=
newPermitido
;
res
.
action
=
key
;
res
.
error
=
error
;
}
else
{
res
.
isCompleted
=
true
;
res
.
item
=
newPermitido
;
res
.
action
=
key
;
}
return
resolve
(
res
);
});
});
promises
.
push
(
promesa
);
}
}
if
(
response
.
hasOwnProperty
(
key
)
&&
key
===
'remove'
)
{
const
array
=
response
[
key
];
const
limit
=
array
.
length
;
for
(
let
index
=
0
;
index
<
limit
;
index
++
)
{
const
res
=
{};
const
permitido
=
array
[
index
].
name
||
array
[
index
].
id
;
const
promesa
=
new
Promise
((
resolve
)
=>
{
account
.
removeOwner
(
permitido
,
(
error
)
=>
{
if
(
error
)
{
res
.
isCompleted
=
false
;
res
.
item
=
response
[
key
][
index
];
res
.
action
=
key
;
res
.
error
=
error
;
}
else
{
res
.
isCompleted
=
true
;
res
.
item
=
response
[
key
][
index
];
res
.
action
=
key
;
}
let
currentMembers
=
this
.
isStoreEnabled
?
DomainStore
.
getMembers
()
:
null
;
return
resolve
(
res
);
});
if
(
!
currentMembers
)
{
currentMembers
=
this
.
state
.
members
.
filter
((
target
)
=>
{
return
target
!==
member
;
});
promises
.
push
(
promesa
);
}
}
}
return
Promise
.
all
(
promises
);
}
onDeleteMember
(
member
)
{
if
(
this
.
isStoreEnabled
)
{
DomainStore
.
removeMember
(
member
);
}
const
currentMembers
=
this
.
isStoreEnabled
?
DomainStore
.
getMembers
()
:
null
;
this
.
setState
({
members
:
currentMembers
,
...
...
@@ -367,7 +255,12 @@ export default class DistributionLists extends React.Component {
}
});
const
newMembers
=
this
.
isStoreEnabled
?
DomainStore
.
getMembers
()
:
null
;
let
newMembers
=
this
.
isStoreEnabled
?
DomainStore
.
getMembers
()
:
null
;
if
(
!
newMembers
)
{
newMembers
=
this
.
state
.
members
;
newMembers
.
push
(...
response
);
}
this
.
setState
({
members
:
newMembers
,
...
...
@@ -382,7 +275,14 @@ export default class DistributionLists extends React.Component {
if
(
this
.
isStoreEnabled
)
{
DomainStore
.
removeOwner
(
owner
);
}
const
currentOwners
=
this
.
isStoreEnabled
?
DomainStore
.
getOwners
()
:
null
;
let
currentOwners
=
this
.
isStoreEnabled
?
DomainStore
.
getOwners
()
:
null
;
if
(
!
currentOwners
)
{
currentOwners
=
this
.
state
.
owners
.
filter
((
target
)
=>
{
return
target
!==
owner
;
});
}
this
.
setState
({
owners
:
currentOwners
,
...
...
@@ -398,7 +298,11 @@ export default class DistributionLists extends React.Component {
}
});
const
newOwners
=
this
.
isStoreEnabled
?
DomainStore
.
getOwners
()
:
null
;
let
newOwners
=
this
.
isStoreEnabled
?
DomainStore
.
getOwners
()
:
null
;
if
(
!
newOwners
)
{
newOwners
=
this
.
state
.
owners
;
newOwners
.
push
(...
response
);
}
this
.
setState
({
owners
:
newOwners
,
...
...
@@ -435,7 +339,7 @@ export default class DistributionLists extends React.Component {
const
domain
=
this
.
state
.
domain
;
const
owners
=
this
.
state
.
owners
;
const
arrayMembers
=
this
.
state
.
members
;
const
membersFormatted
=
Utils
.
getMembers
(
data
.
m
embers
,
'Miembros'
);
const
membersFormatted
=
Utils
.
getMembers
(
arrayM
embers
,
'Miembros'
);
if
(
owners
.
length
>
0
)
{
isPrivate
=
(
...
...
@@ -489,7 +393,7 @@ export default class DistributionLists extends React.Component {
name=
{
'Miembros'
}
data=
{
arrayMembers
}
onApplyChanges=
{
(
response
)
=>
{
this
.
onSubmit
Member
s
(
response
);
this
.
onSubmit
Action
s
(
response
);
}
}
hasExport=
{
true
}
isEmail=
{
true
}
...
...
@@ -502,6 +406,7 @@ export default class DistributionLists extends React.Component {
onExport=
{
(
members
)
=>
{
this
.
onExportMembers
(
members
);
}
}
nameFunc=
{
'Members'
}
/>
);
...
...
@@ -510,7 +415,7 @@ export default class DistributionLists extends React.Component {
name=
{
'Permitidos'
}
data=
{
owners
}
onApplyChanges=
{
(
response
)
=>
{
this
.
onSubmit
Owner
s
(
response
);
this
.
onSubmit
Action
s
(
response
);
}
}
hasExport=
{
true
}
isEmail=
{
true
}
...
...
@@ -523,6 +428,7 @@ export default class DistributionLists extends React.Component {
onExport=
{
(
allowers
)
=>
{
this
.
onExportAllowers
(
allowers
);
}
}
nameFunc=
{
'Owner'
}
/>
);
}
...
...
@@ -581,14 +487,14 @@ export default class DistributionLists extends React.Component {
permitidos
:
allows
};
const
not
=
false
;
/*
const not = false;
//if (!this.isGlobalAdmin) {
if (not) {
tabNamesArray = ['Miembros'];
tabs = {
miembros: members
};
}
}
*/
panelTabs
=
(
<
PanelTab
...
...
src/components/panel_actions.jsx
View file @
d3ead1ca
...
...
@@ -274,21 +274,22 @@ export default class PanelActions extends React.Component {
onSubmit
()
{
const
response
=
{};
response
.
reset
=
this
.
reset
;
response
.
target
=
this
.
props
.
nameFunc
;
this
.
refs
.
savebutton
.
setAttribute
(
'disabled'
,
'disabled'
);
this
.
refs
.
savebutton
.
innerHTML
=
'Aplicando Cambios...'
;
/*
this.refs.savebutton.setAttribute('disabled', 'disabled');
this.refs.savebutton.innerHTML = 'Aplicando Cambios...';
*/
if
(
this
.
forAdd
.
length
>
0
)
{
response
.
add
=
this
.
forAdd
;
response
[
'add'
+
Utils
.
titleCase
(
this
.
props
.
nameFunc
)]
=
this
.
forAdd
;
}
if
(
this
.
forRemove
.
length
>
0
)
{
response
.
remove
=
this
.
forRemove
;
response
[
'remove'
+
Utils
.
titleCase
(
this
.
props
.
nameFunc
)]
=
this
.
forRemove
;
}
if
(
this
.
refresh
.
length
>
0
)
{
/*
if (this.refresh.length > 0) {
response.refresh = this.refresh;
}
}
*/
this
.
props
.
onApplyChanges
(
response
);
}
...
...
@@ -656,7 +657,8 @@ PanelActions.propTypes = {
hasExport
:
React
.
PropTypes
.
bool
,
showNameOnButton
:
React
.
PropTypes
.
bool
,
onExport
:
React
.
PropTypes
.
func
,
isEmail
:
React
.
PropTypes
.
bool
isEmail
:
React
.
PropTypes
.
bool
,
nameFunc
:
React
.
PropTypes
.
string
.
isRequired
};
PanelActions
.
defaultProps
=
{
...
...
src/components/panel_actions_allows.jsx
View file @
d3ead1ca
...
...
@@ -267,20 +267,17 @@ export default class PanelActions extends React.Component {
onSubmit
()
{
const
response
=
{};
response
.
reset
=
this
.
reset
;
response
.
target
=
this
.
props
.
nameFunc
;
this
.
refs
.
savebutton
.
setAttribute
(
'disabled'
,
'disabled'
);
this
.
refs
.
savebutton
.
innerHTML
=
'Aplicando Cambios...'
;
//
this.refs.savebutton.setAttribute('disabled', 'disabled');
//
this.refs.savebutton.innerHTML = 'Aplicando Cambios...';
if
(
this
.
forAdd
.
length
>
0
)
{
response
.
add
=
this
.
forAdd
;
response
[
'add'
+
Utils
.
titleCase
(
this
.
props
.
nameFunc
)]
=
this
.
forAdd
;
}
if
(
this
.
forRemove
.
length
>
0
)
{
response
.
remove
=
this
.
forRemove
;
}
if
(
this
.
refresh
.
length
>
0
)
{
response
.
refresh
=
this
.
refresh
;
response
[
'remove'
+
Utils
.
titleCase
(
this
.
props
.
nameFunc
)]
=
this
.
forRemove
;
}
if
(
this
.
props
.
onApplyChanges
)
{
...
...
@@ -656,7 +653,8 @@ PanelActions.propTypes = {
hasExport
:
React
.
PropTypes
.
bool
,
showNameOnButton
:
React
.
PropTypes
.
bool
,
onExport
:
React
.
PropTypes
.
func
,
isEmail
:
React
.
PropTypes
.
bool
isEmail
:
React
.
PropTypes
.
bool
,
nameFunc
:
React
.
PropTypes
.
string
.
isRequired
};
PanelActions
.
defaultProps
=
{
...
...
src/utils/utils.jsx
View file @
d3ead1ca
...
...
@@ -375,7 +375,7 @@ export function exportAsCSV(data, target, title, hasLabel) {
for
(
var
j
=
0
;
j
<
keys
.
length
;
j
++
)
{
let
col
=
null
;
if
(
typeof
item
===
'object'
)
{
if
(
typeof
item
===
'object'
&&
item
.
attrs
)
{
col
=
status
[
item
.
attrs
[
keys
[
j
]]]
||
item
.
attrs
[
keys
[
j
]];
}
...
...
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