Commit 54ee229e authored by Juorder Antonio's avatar Juorder Antonio

get mailquota from attrs, add missing atts inside config file, centralize status in constants.

parent 778b7ee7
...@@ -159,7 +159,7 @@ export default class AddAdminModal extends React.Component { ...@@ -159,7 +159,7 @@ export default class AddAdminModal extends React.Component {
</td> </td>
<td className='text-center'> <td className='text-center'>
<a <a
className='btn btn-warning btn-xs' className='btn btn-info btn-xs'
onClick={(e) => this.handleAddAdmin(e, u)} onClick={(e) => this.handleAddAdmin(e, u)}
> >
{'Activar Admin'} {'Activar Admin'}
......
...@@ -75,7 +75,7 @@ export default class AntiSpam extends React.Component { ...@@ -75,7 +75,7 @@ export default class AntiSpam extends React.Component {
if (invalidInput.test(value)) { if (invalidInput.test(value)) {
EventStore.emitMessage({ EventStore.emitMessage({
message: 'El valor de esta lista no puede contener caracteres "Ñ".', message: 'El valor de esta lista no puede contener caracteres especiales.',
typeError: MessageType.ERROR typeError: MessageType.ERROR
}); });
return false; return false;
......
...@@ -144,7 +144,7 @@ export default class CreateDomain extends React.Component { ...@@ -144,7 +144,7 @@ export default class CreateDomain extends React.Component {
if (!this.state.isGlobalAdmin) { if (!this.state.isGlobalAdmin) {
form = ( form = (
<div className='text-center'> <div className='text-center'>
<h4> <h4 className='text-danger'>
{'Lo sentimos pero usted no tiene permiso para crear dominios.'} {'Lo sentimos pero usted no tiene permiso para crear dominios.'}
</h4> </h4>
</div> </div>
......
...@@ -8,6 +8,7 @@ import Panel from '../panel.jsx'; ...@@ -8,6 +8,7 @@ import Panel from '../panel.jsx';
import StatusLabel from '../status_label.jsx'; import StatusLabel from '../status_label.jsx';
import CompanyStore from '../../stores/company_store.jsx'; import CompanyStore from '../../stores/company_store.jsx';
import UserStore from '../../stores/user_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';
...@@ -21,6 +22,7 @@ export default class DomainGeneralInfo extends React.Component { ...@@ -21,6 +22,7 @@ export default class DomainGeneralInfo extends React.Component {
this.getMXRecord = this.getMXRecord.bind(this); this.getMXRecord = this.getMXRecord.bind(this);
this.renovationDate = this.renovationDate.bind(this); this.renovationDate = this.renovationDate.bind(this);
this.getCompany = this.getCompany.bind(this); this.getCompany = this.getCompany.bind(this);
this.isGlobalAdmin = UserStore.isGlobalAdmin();
this.state = { this.state = {
mx: null, mx: null,
...@@ -80,6 +82,7 @@ export default class DomainGeneralInfo extends React.Component { ...@@ -80,6 +82,7 @@ export default class DomainGeneralInfo extends React.Component {
} }
render() { render() {
const domain = this.props.domain; const domain = this.props.domain;
let editDomainButton = null;
const infoBody = ( const infoBody = (
<div className='row'> <div className='row'>
<div className='col-md-12'> <div className='col-md-12'>
...@@ -125,13 +128,15 @@ export default class DomainGeneralInfo extends React.Component { ...@@ -125,13 +128,15 @@ export default class DomainGeneralInfo extends React.Component {
</div> </div>
); );
const editDomainButton = [{ if (this.isGlobalAdmin) {
label: 'Editar', editDomainButton = [{
props: { label: 'Editar',
className: 'btn btn-default btn-xs', props: {
onClick: (e) => Utils.handleLink(e, `/domains/${this.props.params.id}/edit`, this.props.location) className: 'btn btn-default btn-xs',
} onClick: (e) => Utils.handleLink(e, `/domains/${this.props.params.id}/edit`, this.props.location)
}]; }
}];
}
return ( return (
<Panel <Panel
......
...@@ -7,6 +7,7 @@ import Panel from '../panel.jsx'; ...@@ -7,6 +7,7 @@ import Panel from '../panel.jsx';
import CompanyStore from '../../stores/company_store.jsx'; import CompanyStore from '../../stores/company_store.jsx';
import DomainStore from '../../stores/domain_store.jsx'; import DomainStore from '../../stores/domain_store.jsx';
import UserStore from '../../stores/user_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';
...@@ -22,6 +23,7 @@ export default class EditDomain extends React.Component { ...@@ -22,6 +23,7 @@ export default class EditDomain extends React.Component {
this.getDomain = this.getDomain.bind(this); this.getDomain = this.getDomain.bind(this);
this.getCompanies = this.getCompanies.bind(this); this.getCompanies = this.getCompanies.bind(this);
this.handleSubmit = this.handleSubmit.bind(this); this.handleSubmit = this.handleSubmit.bind(this);
this.isGlobalAdmin = UserStore.isGlobalAdmin();
this.state = {}; this.state = {};
} }
...@@ -128,6 +130,7 @@ export default class EditDomain extends React.Component { ...@@ -128,6 +130,7 @@ export default class EditDomain extends React.Component {
render() { render() {
const domain = this.state.domain; const domain = this.state.domain;
const error = this.state.error; const error = this.state.error;
let form = null;
if (domain || error) { if (domain || error) {
const companies = this.state.companies; const companies = this.state.companies;
...@@ -180,71 +183,72 @@ export default class EditDomain extends React.Component { ...@@ -180,71 +183,72 @@ export default class EditDomain extends React.Component {
// </div> // </div>
// </div> // </div>
const form = ( if (this.isGlobalAdmin) {
<form form = (
className='simple_form form-horizontal mailbox-form' <form
onSubmit={this.handleSubmit} className='simple_form form-horizontal mailbox-form'
> onSubmit={this.handleSubmit}
<div className='form-group string required'> >
<label className='string required col-sm-3 control-label'> <div className='form-group string required'>
<abbr title='requerido'>{'*'}</abbr> <label className='string required col-sm-3 control-label'>
{'Nombre'} <abbr title='requerido'>{'*'}</abbr>
</label> {'Nombre'}
</label>
<div className='col-sm-8'>
<input <div className='col-sm-8'>
type='text' <input
className='form-control' type='text'
ref='domainName' className='form-control'
value={domain.name} ref='domainName'
disabled='disabled' value={domain.name}
/> disabled='disabled'
/>
</div>
</div> </div>
</div>
{lastRenovation} {lastRenovation}
<div className='form-group string'> <div className='form-group string'>
<label className='string required col-sm-3 control-label'> <label className='string required col-sm-3 control-label'>
<abbr title='requerido'>{'*'}</abbr> <abbr title='requerido'>{'*'}</abbr>
{'Empresa'} {'Empresa'}
</label> </label>
<div className='col-sm-8'> <div className='col-sm-8'>
<select <select
className='form-control select required' className='form-control select required'
data-required='true' data-required='true'
data-message='Debe especificar a que empresa corresponde el dominio' data-message='Debe especificar a que empresa corresponde el dominio'
ref='company' ref='company'
defaultValue={domain.attrs.businessCategory} defaultValue={domain.attrs.businessCategory}
> >
{companiesOptions} {companiesOptions}
</select> </select>
</div>
</div> </div>
</div>
<div className='form-group string'>
<label className='string col-sm-3 control-label'>
{'Descripción'}
</label>
<div className='col-sm-8'> <div className='form-group string'>
<input <label className='string col-sm-3 control-label'>
type='text' {'Descripción'}
className='form-control' </label>
ref='description'
placeholder='Descripción del dominio' <div className='col-sm-8'>
defaultValue={domain.attrs.description} <input
/> type='text'
className='form-control'
ref='description'
placeholder='Descripción del dominio'
defaultValue={domain.attrs.description}
/>
</div>
</div> </div>
</div>
<div className='form-group string'> <div className='form-group string'>
<label className='string col-sm-3 control-label'> <label className='string col-sm-3 control-label'>
{'Notas'} {'Notas'}
</label> </label>
<div className='col-sm-8'> <div className='col-sm-8'>
<Textarea <Textarea
className='form-control' className='form-control'
ref='notes' ref='notes'
...@@ -253,28 +257,37 @@ export default class EditDomain extends React.Component { ...@@ -253,28 +257,37 @@ export default class EditDomain extends React.Component {
minRows={3} minRows={3}
maxRows={9} maxRows={9}
/> />
</div>
</div> </div>
</div>
<div className='form-group'> <div className='form-group'>
<div className='col-sm-8 col-sm-offset-3'> <div className='col-sm-8 col-sm-offset-3'>
<input <input
type='submit' type='submit'
name='commit' name='commit'
value='Guardar' value='Guardar'
className='btn btn-info' className='btn btn-info'
/> />
<a <a
href='#' href='#'
className='btn btn-default' className='btn btn-default'
onClick={(e) => Utils.handleLink(e, `/domains/${domain.id}`)} onClick={(e) => Utils.handleLink(e, `/domains/${domain.id}`)}
> >
{'Cancelar'} {'Cancelar'}
</a> </a>
</div>
</div> </div>
</form>
);
} else {
form = (
<div className='text-center'>
<h4 className='text-danger'>
{'Lo sentimos pero usted no tiene permiso para editar dominios.'}
</h4>
</div> </div>
</form> );
); }
const actions = [ const actions = [
{ {
......
...@@ -86,6 +86,14 @@ export default class CreateDomainForm extends React.Component { ...@@ -86,6 +86,14 @@ export default class CreateDomainForm extends React.Component {
const name = this.refs.domainName.value.trim(); const name = this.refs.domainName.value.trim();
const businessCategory = this.refs.company.value.trim(); const businessCategory = this.refs.company.value.trim();
const zimbraDomainStatus = this.refs.zimbraDomainStatus.value.trim(); const zimbraDomainStatus = this.refs.zimbraDomainStatus.value.trim();
const isDomain = /^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$/gi;
if (!isDomain.test(name)) {
return GlobalActions.emitMessage({
message: 'No se permite caracteres especiales en un dominio, por favor verificar.',
typeError: MessageType.ERROR
});
}
plans.forEach((p) => { plans.forEach((p) => {
zimbraDomainCOSMaxAccounts.push(`${this.refs[`plan-${p}`].getAttribute('data-id')}:${this.refs[`plan-${p}`].value || 0}`); zimbraDomainCOSMaxAccounts.push(`${this.refs[`plan-${p}`].getAttribute('data-id')}:${this.refs[`plan-${p}`].value || 0}`);
......
...@@ -246,6 +246,21 @@ export default class CreateMailBox extends React.Component { ...@@ -246,6 +246,21 @@ export default class CreateMailBox extends React.Component {
domains.push(object[limit].name); domains.push(object[limit].name);
} }
const options = Object.keys(Constants.status).map((option, i) => {
if (Constants.status[option].isEnabledOnCreate) {
return (
<option
value={option}
key={`option-plan-${i}`}
>
{Constants.status[option].label}
</option>
);
}
return null;
});
for (let plan in plans) { for (let plan in plans) {
if (plans.hasOwnProperty(plan)) { if (plans.hasOwnProperty(plan)) {
const item = ( const item = (
...@@ -364,9 +379,7 @@ export default class CreateMailBox extends React.Component { ...@@ -364,9 +379,7 @@ export default class CreateMailBox extends React.Component {
className='form-control' className='form-control'
ref='zimbraAccountStatus' ref='zimbraAccountStatus'
> >
<option value='active'>Activa</option> {options}
<option value='closed'>Cerrada</option>
<option value='locked'>Bloqueada</option>
</select> </select>
</div> </div>
</div> </div>
......
...@@ -51,12 +51,7 @@ export default class Mailboxes extends React.Component { ...@@ -51,12 +51,7 @@ export default class Mailboxes extends React.Component {
this.cos = Utils.getEnabledPlansByCos(ZimbraStore.getAllCos()); this.cos = Utils.getEnabledPlansByCos(ZimbraStore.getAllCos());
this.cosById = Utils.getEnabledPlansByCosId(ZimbraStore.getAllCos()); this.cosById = Utils.getEnabledPlansByCosId(ZimbraStore.getAllCos());
this.isRefreshing = true; this.isRefreshing = true;
this.optionStatus = { this.optionStatus = Constants.status;
active: 'Active',
locked: 'Inactiva',
lockout: 'Bloqueada',
closed: 'Cerrada'
};
this.optionPlans = window.manager_config.plans; this.optionPlans = window.manager_config.plans;
this.domainId = null; this.domainId = null;
this.domainName = null; this.domainName = null;
...@@ -602,7 +597,7 @@ export default class Mailboxes extends React.Component { ...@@ -602,7 +597,7 @@ export default class Mailboxes extends React.Component {
key={`status-${i}`} key={`status-${i}`}
value={`${item}`} value={`${item}`}
> >
{Utils.titleCase(this.optionStatus[item])} {Utils.titleCase(this.optionStatus[item].label)}
</option> </option>
); );
}); });
......
//import ZimbraStore from '../../stores/zimbra_store.jsx';
import React from 'react'; import React from 'react';
import * as Utils from '../../utils/utils.jsx'; import * as Utils from '../../utils/utils.jsx';
import ZimbraStore from '../../stores/zimbra_store.jsx';
import bytesConvertor from 'bytes'; import bytesConvertor from 'bytes';
import Constants from '../../utils/constants.jsx';
export default class BlockGeneralInfoMailbox extends React.Component { export default class BlockGeneralInfoMailbox extends React.Component {
constructor(props) { constructor(props) {
//this.sizeEnabled = Utils.getEnabledPlansObjectByCos(ZimbraStore.getAllCos(), this.props.data.attrs.zimbraCOSId);
super(props); super(props);
this.date = null; this.date = null;
this.status = null; this.status = null;
this.className = null; this.className = null;
this.lastConection = 'No se ha conectado'; this.lastConection = 'No se ha conectado';
this.getMailSize = this.getMailSize.bind(this); this.getMailSize = this.getMailSize.bind(this);
this.sizeEnabled = Utils.getEnabledPlansObjectByCos(ZimbraStore.getAllCos(), this.props.data.attrs.zimbraCOSId);
console.log('cosID', this.props.data.attrs.zimbraCOSId); //eslint-disable-line no-console
console.log('all cos', ZimbraStore.getAllCos()); //eslint-disable-line no-console
this.state = {}; this.state = {};
} }
...@@ -34,24 +33,11 @@ export default class BlockGeneralInfoMailbox extends React.Component { ...@@ -34,24 +33,11 @@ export default class BlockGeneralInfoMailbox extends React.Component {
componentWillMount() { componentWillMount() {
this.date = Utils.dateFormatted(this.props.data.attrs.zimbraCreateTimestamp); this.date = Utils.dateFormatted(this.props.data.attrs.zimbraCreateTimestamp);
switch (this.props.data.attrs.zimbraAccountStatus) { const status = this.props.data.attrs.zimbraAccountStatus;
case 'lockout':
this.status = 'Bloqueada'; if (Constants.status[status]) {
this.className = 'label-locked mailbox-status'; this.status = Constants.status[status].label;
break; this.className = Constants.status[status].classes;
case 'active':
this.status = 'Activa';
this.className = 'label-success mailbox-status';
break;
case 'closed':
this.status = 'Cerrada';
this.className = 'label-default mailbox-status';
break;
case 'locked':
this.status = 'Inactiva';
this.className = 'label-warning mailbox-status';
break;
default:
} }
if (this.props.data.attrs.zimbraLastLogonTimestamp) { if (this.props.data.attrs.zimbraLastLogonTimestamp) {
...@@ -68,9 +54,10 @@ export default class BlockGeneralInfoMailbox extends React.Component { ...@@ -68,9 +54,10 @@ export default class BlockGeneralInfoMailbox extends React.Component {
if (this.state.size) { if (this.state.size) {
size = this.state.size; size = this.state.size;
} }
console.log(this.sizeEnabled); //eslint-disable-line no-console
if (this.sizeEnabled.hasOwnProperty('attrs') && this.sizeEnabled.attrs.zimbraMailQuota) { if (this.props.data.attrs.zimbraMailQuota) {
const sizeOfPlan = typeof this.sizeEnabled.attrs.zimbraMailQuota === 'string' ? parseInt(this.sizeEnabled.attrs.zimbraMailQuota, 10) : this.sizeEnabled.attrs.zimbraMailQuota; const attrs = this.props.data.attrs;
const sizeOfPlan = typeof attrs.zimbraMailQuota === 'string' ? parseInt(attrs.zimbraMailQuota, 10) : attrs.zimbraMailQuota;
sizeEnaled = (sizeOfPlan) ? bytesConvertor(sizeOfPlan) : 'Ilimitado'; sizeEnaled = (sizeOfPlan) ? bytesConvertor(sizeOfPlan) : 'Ilimitado';
} }
......
...@@ -54,6 +54,7 @@ ...@@ -54,6 +54,7 @@
"zimbraCOSId": true, "zimbraCOSId": true,
"zimbraAccountStatus": true, "zimbraAccountStatus": true,
"zimbraMailHost": true, "zimbraMailHost": true,
"zimbraMailQuota": true,
"zimbraArchiveAccount": true, "zimbraArchiveAccount": true,
"zimbraMailAlias": true, "zimbraMailAlias": true,
"zimbraPrefOutOfOfficeReplyEnabled": true, "zimbraPrefOutOfOfficeReplyEnabled": true,
......
...@@ -105,5 +105,27 @@ export default { ...@@ -105,5 +105,27 @@ export default {
'TSIG', 'TSIG',
'TXT', 'TXT',
'WKS' 'WKS'
] ],
status: {
active: {
label: 'Activa',
isEnabledOnCreate: true,
classes: 'label-success mailbox-status'
},
locked: {
label: 'Inactiva',
isEnabledOnCreate: true,
classes: 'label-warning mailbox-status'
},
lockout: {
label: 'Bloqueada',
isEnabledOnCreate: false,
classes: 'label-warning mailbox-status'
},
closed: {
label: 'Cerrada',
isEnabledOnCreate: true,
classes: 'label-default mailbox-status'
}
}
}; };
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