Commit 12560b80 authored by Juorder Gonzalez's avatar Juorder Gonzalez

Merge pull request #98 from ZBoxApp/issues_resolved_manager

add store functionality to companies, and show or hide if user is glo…
parents 1cb0e59a 2b316059
module.exports = {"main":{"js":"/263980bundle.js"}} module.exports = {"main":{"js":"/699779bundle.js"}}
\ No newline at end of file \ No newline at end of file
...@@ -11,6 +11,8 @@ import Panel from '../panel.jsx'; ...@@ -11,6 +11,8 @@ import Panel from '../panel.jsx';
import CompaniesStore from '../../stores/company_store.jsx'; import CompaniesStore from '../../stores/company_store.jsx';
import ZimbraStore from '../../stores/zimbra_store.jsx'; import ZimbraStore from '../../stores/zimbra_store.jsx';
import UserStore from '../../stores/user_store.jsx';
import DomainStore from '../../stores/domain_store.jsx';
import * as Client from '../../utils/client.jsx'; import * as Client from '../../utils/client.jsx';
import * as Utils from '../../utils/utils.jsx'; import * as Utils from '../../utils/utils.jsx';
...@@ -30,6 +32,8 @@ export default class Companies extends React.Component { ...@@ -30,6 +32,8 @@ export default class Companies extends React.Component {
this.getDomains = this.getDomains.bind(this); this.getDomains = this.getDomains.bind(this);
this.getPlans = this.getPlans.bind(this); this.getPlans = this.getPlans.bind(this);
this.gotoCompany = this.gotoCompany.bind(this); this.gotoCompany = this.gotoCompany.bind(this);
this.isGlobalAdmin = UserStore.isGlobalAdmin();
} }
gotoCompany(e, company) { gotoCompany(e, company) {
...@@ -47,29 +51,65 @@ export default class Companies extends React.Component { ...@@ -47,29 +51,65 @@ export default class Companies extends React.Component {
return GlobalActions.emitEndLoading(); return GlobalActions.emitEndLoading();
} }
return Client.getAllCompanies().then((data) => { const mydomain = UserStore.getCurrentUser().name.split('@').pop();
const domains = data.map((company) => {
return self.getDomains(company);
});
return Promise.all(domains).then((comps) => { if (this.isGlobalAdmin) {
CompaniesStore.setCompanies(comps); return Client.getAllCompanies().then((data) => {
const domains = data.map((company) => {
return self.getDomains(company);
});
self.setState({ return Promise.all(domains).then((comps) => {
companies: comps CompaniesStore.setCompanies(comps);
self.setState({
companies: comps
});
}).
catch((error) => {
self.setState({error: {
message: error,
type: messageTypes.ERROR
}});
}); });
}). }).catch((error) => {
catch((error) => { self.setState({error});
}).finally(() => {
GlobalActions.emitEndLoading();
});
}
if (DomainStore.getDomains()) {
const domain = DomainStore.getDomainByName(mydomain);
Client.getCompany(domain.attrs.businessCategory, (company) => {
CompaniesStore.setCompanies(company);
}, (error) => {
self.setState({error: { self.setState({error: {
message: error, message: error,
type: messageTypes.ERROR type: messageTypes.ERROR
}}); }});
}); });
}).catch((error) => { } else {
self.setState({error}); Client.getDomain(mydomain, (dom) => {
}).finally(() => { Client.getCompany(dom.attrs.businessCategory, (company) => {
GlobalActions.emitEndLoading(); self.setState({
}); companies: company
});
}, (error) => {
self.setState({error: {
message: error,
type: messageTypes.ERROR
}});
});
}, (error) => {
self.setState({
error,
type: messageTypes.ERROR
});
});
}
return GlobalActions.emitEndLoading();
} }
getDomains(company) { getDomains(company) {
......
...@@ -7,6 +7,8 @@ import DNSZoneForm from './multiform/dns_form.jsx'; ...@@ -7,6 +7,8 @@ import DNSZoneForm from './multiform/dns_form.jsx';
import DomainStore from '../../stores/domain_store.jsx'; import DomainStore from '../../stores/domain_store.jsx';
import EventStore from '../../stores/event_store.jsx'; import EventStore from '../../stores/event_store.jsx';
import MessageBar from '../message_bar.jsx'; import MessageBar from '../message_bar.jsx';
import UserStore from '../../stores/user_store.jsx';
import * as GlobalActions from '../../action_creators/global_actions.jsx';
export default class CreateDomain extends React.Component { export default class CreateDomain extends React.Component {
constructor(props) { constructor(props) {
...@@ -15,6 +17,7 @@ export default class CreateDomain extends React.Component { ...@@ -15,6 +17,7 @@ export default class CreateDomain extends React.Component {
this.getNextStep = this.getNextStep.bind(this); this.getNextStep = this.getNextStep.bind(this);
this.showMessage = this.showMessage.bind(this); this.showMessage = this.showMessage.bind(this);
this.isGlobalAdmin = UserStore.isGlobalAdmin();
this.multiform = window.manager_config.multiFormDomain; this.multiform = window.manager_config.multiFormDomain;
let total = 1; let total = 1;
...@@ -30,7 +33,8 @@ export default class CreateDomain extends React.Component { ...@@ -30,7 +33,8 @@ export default class CreateDomain extends React.Component {
this.state = { this.state = {
step: 1, step: 1,
total total,
isGlobalAdmin: this.isGlobalAdmin
}; };
} }
...@@ -56,6 +60,7 @@ export default class CreateDomain extends React.Component { ...@@ -56,6 +60,7 @@ export default class CreateDomain extends React.Component {
componentDidMount() { componentDidMount() {
DomainStore.addNextStepListener(this.getNextStep); DomainStore.addNextStepListener(this.getNextStep);
EventStore.addMessageListener(this.showMessage); EventStore.addMessageListener(this.showMessage);
GlobalActions.emitEndLoading();
} }
componentWillUnmount() { componentWillUnmount() {
...@@ -73,76 +78,97 @@ export default class CreateDomain extends React.Component { ...@@ -73,76 +78,97 @@ export default class CreateDomain extends React.Component {
width: `${width}%` width: `${width}%`
}; };
let error = null; let error = null;
let actions = null;
if (this.state.isGlobalAdmin) {
if (this.state.error) {
error = (
<MessageBar
message={this.state.error}
type={this.state.type}
autoclose={true}
/>
);
}
if (this.state.error) { let step = this.state.step;
error = (
<MessageBar
message={this.state.error}
type={this.state.type}
autoclose={true}
/>
);
}
let step = this.state.step;
if (!this.multiform.hasMailCleaner && step > 1) { if (!this.multiform.hasMailCleaner && step > 1) {
++step; ++step;
} }
switch (step) { switch (step) {
case 1: case 1:
form = ( form = (
<CreateDomainForm <CreateDomainForm
params={this.props.params} params={this.props.params}
state={this.state} state={this.state}
/> />
); );
titleForm = 'Creación de Dominio'; titleForm = 'Creación de Dominio';
break; break;
case 2: case 2:
form = <MailCleanerForm state={this.state}/>; form = <MailCleanerForm state={this.state}/>;
titleForm = 'Asignación del Dominio al MailCleaner'; titleForm = 'Asignación del Dominio al MailCleaner';
break; break;
case 3: case 3:
form = <DNSZoneForm state={this.state}/>; form = <DNSZoneForm state={this.state}/>;
titleForm = 'Asignación de la Zona DNS'; titleForm = 'Asignación de la Zona DNS';
break; break;
} }
//onClick: (e) => Utils.handleLink(e, backUrl) //onClick: (e) => Utils.handleLink(e, backUrl)
const actions = [ actions = [
{ {
label: 'Cancelar', label: 'Cancelar',
props: { props: {
className: 'btn btn-default btn-xs' className: 'btn btn-default btn-xs'
}
} }
} ];
];
if (this.state.total > 1) {
if (this.state.total > 1) { progressForm = (
progressForm = ( <div className='progress'>
<div className='progress'> <div
<div className={'progress-bar progress-bar-info progress-bar-striped active text-center step'}
className={'progress-bar progress-bar-info progress-bar-striped active text-center step'} style={progressSize}
style={progressSize} >
> <span className='progress-text'>{`${titleForm} - ${progress}`}</span>
<span className='progress-text'>{`${titleForm} - ${progress}`}</span> </div>
</div> </div>
);
}
}
if (!this.state.isGlobalAdmin) {
form = (
<div className='text-center'>
<h4>
{'Lo sentimos pero usted no tiene permiso para crear dominios.'}
</h4>
</div> </div>
); );
} }
return ( return (
<Panel <div>
title={'Agregar Dominio'} <div className='content animate-panel'>
classHeader={'forum-box'} <div className='row'>
btnsHeader={actions} <div className='col-md-12 panel-with-tabs'>
> <Panel
{error} title={'Agregar Dominio'}
{progressForm} classHeader={'forum-box'}
{form} btnsHeader={actions}
</Panel> >
{error}
{progressForm}
{form}
</Panel>
</div>
</div>
</div>
</div>
); );
} }
} }
......
...@@ -33,8 +33,10 @@ export default class SearchView extends React.Component { ...@@ -33,8 +33,10 @@ export default class SearchView extends React.Component {
loading: true loading: true
}); });
Client.search({ Client.search({
maxResults: window.manager_config.maxResultOnRequestZimbra,
query: `(|(mail=*${query}*)(cn=*${query}*)(sn=*${query}*)(gn=*${query}*)(displayName=*${query}*)(zimbraMailDeliveryAddress=*${query}*)(zimbraDomainName=*${query}*)(uid=*${query}*)(zimbraMailAlias=*${query}*)(uid=*${query}*)(zimbraDomainName=*${query}*)(cn=*${query}*))`, query: `(|(mail=*${query}*)(cn=*${query}*)(sn=*${query}*)(gn=*${query}*)(displayName=*${query}*)(zimbraMailDeliveryAddress=*${query}*)(zimbraDomainName=*${query}*)(uid=*${query}*)(zimbraMailAlias=*${query}*)(uid=*${query}*)(zimbraDomainName=*${query}*)(cn=*${query}*))`,
types: 'accounts,distributionlists,domains' types: 'accounts,distributionlists,domains',
attrs: 'objectClass'
}, (success) => { }, (success) => {
const result = []; const result = [];
...@@ -55,7 +57,8 @@ export default class SearchView extends React.Component { ...@@ -55,7 +57,8 @@ export default class SearchView extends React.Component {
return this.setState({ return this.setState({
result, result,
loading: false loading: false,
notfound: false
}); });
}, (error) => { }, (error) => {
console.log(error); //eslint-disable-line no-console console.log(error); //eslint-disable-line no-console
...@@ -131,6 +134,7 @@ export default class SearchView extends React.Component { ...@@ -131,6 +134,7 @@ export default class SearchView extends React.Component {
<tr <tr
key={id} key={id}
className={'mailbox-row'} className={'mailbox-row'}
onClick={(e) => Utils.handleLink(e, url)}
> >
<td className={'mailbox-name'}> <td className={'mailbox-name'}>
{tipo} {tipo}
...@@ -166,7 +170,7 @@ export default class SearchView extends React.Component { ...@@ -166,7 +170,7 @@ export default class SearchView extends React.Component {
id='index-domains' id='index-domains'
cellPadding='1' cellPadding='1'
cellSpacing='1' cellSpacing='1'
className='table table-condensed table-striped vertical-align index-mailbox-table' className='table table-condensed table-striped vertical-align index-mailbox-table table-search'
> >
<thead> <thead>
<tr> <tr>
......
.margin-left { .margin-left {
margin-left: 5px; margin-left: 5px;
} }
.table-search {
.mailbox-row {
transition: background-color .5s;
&:hover {
background-color: $color-background;
cursor: pointer;
}
}
}
...@@ -18,6 +18,7 @@ class DomainStoreClass extends EventEmitter { ...@@ -18,6 +18,7 @@ class DomainStoreClass extends EventEmitter {
resetThisStore() { resetThisStore() {
this.current = null; this.current = null;
this.domains = null;
this.distributionListOwners = null; this.distributionListOwners = null;
this.distributionListMembers = null; this.distributionListMembers = null;
this.zoneDNS = null; this.zoneDNS = null;
...@@ -39,6 +40,24 @@ class DomainStoreClass extends EventEmitter { ...@@ -39,6 +40,24 @@ class DomainStoreClass extends EventEmitter {
return null; return null;
} }
getDomainByName(name) {
if (this.domains) {
const data = this.domains.domain;
if (data) {
let length = data.length;
for (;length-- > 0;) {
if (data[length].name === name) {
return data[length];
}
}
}
}
return null;
}
getCurrent() { getCurrent() {
return this.current; return this.current;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment