Commit 58021194 authored by Juorder Antonio's avatar Juorder Antonio

fix massixe setter message vacation, alias add and remove, edit mailbox to...

fix massixe setter message vacation, alias add and remove, edit mailbox to show all mailbox enable, etc
parent 65e6a796
1466524663 1466617142
\ No newline at end of file
module.exports = {"main":{"js":"/838029bundle.js"}} module.exports = {"main":{"js":"/419997bundle.js"}}
\ No newline at end of file \ No newline at end of file
...@@ -17,26 +17,50 @@ export default class MultipleTaskModal extends React.Component { ...@@ -17,26 +17,50 @@ export default class MultipleTaskModal extends React.Component {
this.onSubmit = this.onSubmit.bind(this); this.onSubmit = this.onSubmit.bind(this);
this.getOwnAccounts = this.getOwnAccounts.bind(this); this.getOwnAccounts = this.getOwnAccounts.bind(this);
this.handleChangeDate = this.handleChangeDate.bind(this); this.handleChangeDate = this.handleChangeDate.bind(this);
this.handleBlurTextAreaMessage = this.handleBlurTextAreaMessage.bind(this);
this.handleEnabledReplay = this.handleEnabledReplay.bind(this);
this.allAccounts = []; this.allAccounts = [];
this.loop = 0; this.loop = 0;
this.range = 200; this.range = 200;
this.initialDate = Utils.setInitialDate(); this.initialDate = Utils.setInitialDate();
this.dateStart = this.initialDate.formatted;
this.dateEnd = this.initialDate.formatted;
this.timestampStart = this.initialDate.timestamp;
this.timestampEnd = this.initialDate.timestamp;
this.state = { this.state = {
loaded: false loaded: false,
zimbraPrefOutOfOfficeFromDate: this.initialDate.timestamp,
zimbraPrefOutOfOfficeUntilDate: this.initialDate.timestamp,
zimbraPrefOutOfOfficeReplyEnabled: false,
zimbraPrefOutOfOfficeReply: '',
zimbraPrefOutOfOfficeFromDateInput: this.initialDate.formatted,
zimbraPrefOutOfOfficeUntilDateInput: this.initialDate.formatted
}; };
} }
handleChangeDate(x, from) { handleChangeDate(x, from) {
const ref = this.refs[from];
const timestamp = Utils.getInitialDateFromTimestamp(x); const timestamp = Utils.getInitialDateFromTimestamp(x);
const date = Utils.timestampToDate(timestamp);
const states = {};
ref.value = timestamp; states[from] = timestamp;
states[`${from}Input`] = date;
this.setState(states);
}
handleBlurTextAreaMessage(e) {
const zimbraPrefOutOfOfficeReply = e.target.value.trim();
if (zimbraPrefOutOfOfficeReply.length > 0) {
this.setState({
zimbraPrefOutOfOfficeReply
});
}
}
handleEnabledReplay(e) {
this.setState({
zimbraPrefOutOfOfficeReplyEnabled: e.target.checked
});
} }
onSubmit() { onSubmit() {
...@@ -44,13 +68,17 @@ export default class MultipleTaskModal extends React.Component { ...@@ -44,13 +68,17 @@ export default class MultipleTaskModal extends React.Component {
const domain = this.props.data; const domain = this.props.data;
const total = accounts.length; const total = accounts.length;
const collection = []; const collection = [];
const refs = this.refs;
let message = null; let message = null;
let err = false; let err = false;
const isEnabled = refs.zimbraPrefOutOfOfficeReplyEnabled.checked; const isEnabled = this.state.zimbraPrefOutOfOfficeReplyEnabled;
const responseText = this.state.zimbraPrefOutOfOfficeReply;
const start = this.state.zimbraPrefOutOfOfficeFromDate;
const end = this.state.zimbraPrefOutOfOfficeUntilDate;
const start = refs.zimbraPrefOutOfOfficeFromDate.value; if (this.props.show) {
const end = refs.zimbraPrefOutOfOfficeUntilDate.value; this.props.onHide();
}
if ((start > end) && isEnabled) { if ((start > end) && isEnabled) {
message = 'La fecha en la que termina su respuesta automática, debe ser mayor que en la que comienza.'; message = 'La fecha en la que termina su respuesta automática, debe ser mayor que en la que comienza.';
...@@ -83,11 +111,11 @@ export default class MultipleTaskModal extends React.Component { ...@@ -83,11 +111,11 @@ export default class MultipleTaskModal extends React.Component {
const attrs = {}; const attrs = {};
if (isEnabled) { if (isEnabled) {
const formatedStart = document.getElementById('zimbraPrefOutOfOfficeFromDate').value.split('/').reverse().join('') + '000000Z'; const formatedStart = this.state.zimbraPrefOutOfOfficeFromDateInput.split('/').reverse().join('') + '000000Z';
const formatedEnd = document.getElementById('zimbraPrefOutOfOfficeUntilDate').value.split('/').reverse().join('') + '000000Z'; const formatedEnd = this.state.zimbraPrefOutOfOfficeUntilDateInput.split('/').reverse().join('') + '000000Z';
attrs.zimbraPrefOutOfOfficeReplyEnabled = isEnabled.toString().toUpperCase(); attrs.zimbraPrefOutOfOfficeReplyEnabled = isEnabled.toString().toUpperCase();
attrs.zimbraPrefOutOfOfficeReply = refs.zimbraPrefOutOfOfficeReply.value; attrs.zimbraPrefOutOfOfficeReply = responseText;
attrs.zimbraPrefOutOfOfficeFromDate = formatedStart; attrs.zimbraPrefOutOfOfficeFromDate = formatedStart;
attrs.zimbraPrefOutOfOfficeUntilDate = formatedEnd; attrs.zimbraPrefOutOfOfficeUntilDate = formatedEnd;
} else { } else {
...@@ -122,6 +150,7 @@ export default class MultipleTaskModal extends React.Component { ...@@ -122,6 +150,7 @@ export default class MultipleTaskModal extends React.Component {
return true; return true;
} }
this.loop++;
setTimeout(() => { setTimeout(() => {
this.onSubmit(); this.onSubmit();
}, 200); }, 200);
...@@ -203,6 +232,7 @@ export default class MultipleTaskModal extends React.Component { ...@@ -203,6 +232,7 @@ export default class MultipleTaskModal extends React.Component {
let content = null; let content = null;
let messageLoading = 'Cargando...'; let messageLoading = 'Cargando...';
let labelError = null; let labelError = null;
const {zimbraPrefOutOfOfficeFromDate, zimbraPrefOutOfOfficeUntilDate, zimbraPrefOutOfOfficeReplyEnabled, zimbraPrefOutOfOfficeFromDateInput, zimbraPrefOutOfOfficeUntilDateInput} = this.state;
if (this.state.loading) { if (this.state.loading) {
const message = this.state.messageLoading; const message = this.state.messageLoading;
...@@ -232,7 +262,8 @@ export default class MultipleTaskModal extends React.Component { ...@@ -232,7 +262,8 @@ export default class MultipleTaskModal extends React.Component {
<input <input
type='checkbox' type='checkbox'
className='pretty' className='pretty'
ref='zimbraPrefOutOfOfficeReplyEnabled' defultChecked={zimbraPrefOutOfOfficeReplyEnabled}
onChange={this.handleEnabledReplay}
/> />
<span></span> <span></span>
</div> </div>
...@@ -257,13 +288,12 @@ export default class MultipleTaskModal extends React.Component { ...@@ -257,13 +288,12 @@ export default class MultipleTaskModal extends React.Component {
onChange={(x) => { onChange={(x) => {
this.handleChangeDate(x, 'zimbraPrefOutOfOfficeFromDate'); this.handleChangeDate(x, 'zimbraPrefOutOfOfficeFromDate');
}} }}
defaultText={this.dateStart} defaultText={zimbraPrefOutOfOfficeFromDateInput}
mode={'date'} mode={'date'}
/> />
<input <input
type='hidden' type='hidden'
ref='zimbraPrefOutOfOfficeFromDate' value={zimbraPrefOutOfOfficeFromDate}
value={this.timestampStart}
/> />
</div> </div>
</div> </div>
...@@ -282,7 +312,7 @@ export default class MultipleTaskModal extends React.Component { ...@@ -282,7 +312,7 @@ export default class MultipleTaskModal extends React.Component {
readOnly: 'readOnly' readOnly: 'readOnly'
} }
} }
defaultText={this.dateEnd} defaultText={zimbraPrefOutOfOfficeUntilDateInput}
onChange={(x) => { onChange={(x) => {
this.handleChangeDate(x, 'zimbraPrefOutOfOfficeUntilDate'); this.handleChangeDate(x, 'zimbraPrefOutOfOfficeUntilDate');
}} }}
...@@ -290,8 +320,7 @@ export default class MultipleTaskModal extends React.Component { ...@@ -290,8 +320,7 @@ export default class MultipleTaskModal extends React.Component {
/> />
<input <input
type='hidden' type='hidden'
ref='zimbraPrefOutOfOfficeUntilDate' value={zimbraPrefOutOfOfficeUntilDate}
value={this.timestampEnd}
/> />
</div> </div>
</div> </div>
...@@ -302,14 +331,14 @@ export default class MultipleTaskModal extends React.Component { ...@@ -302,14 +331,14 @@ export default class MultipleTaskModal extends React.Component {
</label> </label>
<div className='col-sm-8'> <div className='col-sm-8'>
<textarea <textarea
name='response' name='response'
id='responseBox' id='responseBox'
className='form-control' className='form-control'
rows='4' rows='4'
ref='zimbraPrefOutOfOfficeReply' onBlur={this.handleBlurTextAreaMessage}
> >
</textarea> </textarea>
</div> </div>
</div> </div>
</form> </form>
......
...@@ -106,19 +106,19 @@ export default class ImportMassiveModal extends React.Component { ...@@ -106,19 +106,19 @@ export default class ImportMassiveModal extends React.Component {
return null; return null;
} }
onChangeColumn(e, option, key) { onChangeColumn(e, current, selected, key) {
const parent = e.target.parentNode; const parent = e.target.parentNode;
Reflect.deleteProperty(this.disabled, current);
if (option.restart) { if (selected.restart) {
parent.classList.remove('ok-option'); parent.classList.remove('ok-option');
parent.classList.add('missing-option'); parent.classList.add('missing-option');
Reflect.deleteProperty(this.disabled, option.restart);
} }
if (option && !option.restart) { if (selected && !selected.restart) {
parent.classList.remove('missing-option'); parent.classList.remove('missing-option');
parent.classList.add('ok-option'); parent.classList.add('ok-option');
this.disabled[option] = { this.disabled[selected] = {
col: key col: key
}; };
} }
...@@ -423,8 +423,8 @@ export default class ImportMassiveModal extends React.Component { ...@@ -423,8 +423,8 @@ export default class ImportMassiveModal extends React.Component {
className: 'form-control' className: 'form-control'
}} }}
id={key} id={key}
onSelected={(e, option, id) => { onSelected={(e, current, selected, id) => {
this.onChangeColumn(e, option, id); this.onChangeColumn(e, current, selected, id);
}} }}
disabledOptions={this.disabled} disabledOptions={this.disabled}
selected={selected} selected={selected}
......
...@@ -58,18 +58,10 @@ export default class CreateMailBox extends React.Component { ...@@ -58,18 +58,10 @@ export default class CreateMailBox extends React.Component {
const parent = document.getElementById('add-mailbox'); const parent = document.getElementById('add-mailbox');
if (parent) { if (parent) {
this.addEventListenerFixed(parent, 'blur', this.getEnableAccountsFromDomain); Utils.addEventListenerFixed(parent, 'blur', this.getEnableAccountsFromDomain);
} }
} }
addEventListenerFixed(element, type, callback) {
const fixEvents = {
blur: 'focusout'
};
element.addEventListener(type, callback, typeof (fixEvents[type]) !== 'undefined');
}
getEnableAccountsFromDomain(e, currentDomain) { getEnableAccountsFromDomain(e, currentDomain) {
const target = 'react-datalist-input'; const target = 'react-datalist-input';
const hasEvent = e; const hasEvent = e;
...@@ -383,7 +375,10 @@ export default class CreateMailBox extends React.Component { ...@@ -383,7 +375,10 @@ export default class CreateMailBox extends React.Component {
let enableAccounts; let enableAccounts;
if (this.state.loadingEnableAccounts) { if (this.state.loadingEnableAccounts) {
enableAccounts = ( enableAccounts = (
<div className='text-center'> <div
className='text-center'
key={'loader-plans'}
>
<i className='fa fa-refresh fa-spin fa-2x'></i> <i className='fa fa-refresh fa-spin fa-2x'></i>
<p>Cargando casillas disponibles</p> <p>Cargando casillas disponibles</p>
</div> </div>
...@@ -500,6 +495,7 @@ export default class CreateMailBox extends React.Component { ...@@ -500,6 +495,7 @@ export default class CreateMailBox extends React.Component {
this.handleSubmit(e); this.handleSubmit(e);
}} }}
id='createAccount' id='createAccount'
key={'form-create-mailbox'}
> >
<div className='form-group string required'> <div className='form-group string required'>
<label className='string required col-sm-3 control-label'> <label className='string required col-sm-3 control-label'>
......
This diff is collapsed.
...@@ -348,7 +348,7 @@ export default class Mailboxes extends React.Component { ...@@ -348,7 +348,7 @@ export default class Mailboxes extends React.Component {
componentWillUnmount() { componentWillUnmount() {
EventStore.removeMessageListener(this.showMessage); EventStore.removeMessageListener(this.showMessage);
MailboxStore.removeListenerAddMassive(this.showMessage); MailboxStore.removeListenerAddMassive(this.refreshAllAccounts);
$('#sidebar-mailboxes').removeClass('active'); $('#sidebar-mailboxes').removeClass('active');
this.domainName = null; this.domainName = null;
//this.isMounted = false; //this.isMounted = false;
......
...@@ -118,7 +118,7 @@ export default class MailboxDetails extends React.Component { ...@@ -118,7 +118,7 @@ export default class MailboxDetails extends React.Component {
}); });
}).then((mailbox) => { }).then((mailbox) => {
MailboxStore.setCurrent(mailbox); MailboxStore.setCurrent(mailbox);
let items = mailbox.attrs.zimbraMailAlias || null; let items = mailbox.attrs.zimbraMailAlias || [];
if (items) { if (items) {
if (!Array.isArray(items)) { if (!Array.isArray(items)) {
......
...@@ -14,6 +14,7 @@ export default class SelectCol extends React.Component { ...@@ -14,6 +14,7 @@ export default class SelectCol extends React.Component {
} }
handleSelectChange(e, id) { handleSelectChange(e, id) {
const current = this.current;
e.preventDefault(); e.preventDefault();
if (this.props.onSelected) { if (this.props.onSelected) {
const option = e.target; const option = e.target;
...@@ -28,7 +29,7 @@ export default class SelectCol extends React.Component { ...@@ -28,7 +29,7 @@ export default class SelectCol extends React.Component {
} else { } else {
this.current = selected; this.current = selected;
} }
return this.props.onSelected(e, selected, id); return this.props.onSelected(e, current, selected, id);
} }
return null; return null;
} }
......
{ {
"debug": true, "debug": true,
"DEV": true, "DEV": true,
"enableStores" : true, "enableStores" : false,
"zimbraUrl": "http://zimbra.zboxapp.dev:9081/zimbra_proxy/service/admin/soap", "zimbraUrl": "http://zimbra.zboxapp.dev:9081/zimbra_proxy/service/admin/soap",
"zimbraProxy": "https://192.168.1.8:7071", "zimbraProxy": "https://192.168.1.8:7071",
"dnsApiUrl": "http://zimbra.zboxapp.dev:3000", "dnsApiUrl": "http://zimbra.zboxapp.dev:3000",
"webMailUrl": "https://192.168.1.8:8443", "webMailUrl": "https://192.168.1.8:8443",
"timeoutRequest": 60000,
"dns": { "dns": {
"url": "http://zimbra.zboxapp.dev:9081/powerdns_proxy", "url": "http://zimbra.zboxapp.dev:9081/powerdns_proxy",
"token": "otto", "token": "otto",
......
...@@ -57,6 +57,7 @@ function initZimbra() { ...@@ -57,6 +57,7 @@ function initZimbra() {
zimbra = new ZimbraAdminApi({ zimbra = new ZimbraAdminApi({
url: config.zimbraUrl url: config.zimbraUrl
}); });
zimbra.client.options.timeout = config.timeoutRequest;
zimbra.client.token = token; zimbra.client.token = token;
zimbra.client.session = { id: sessionId }; zimbra.client.session = { id: sessionId };
ZimbraStore.setCurrent(zimbra); ZimbraStore.setCurrent(zimbra);
......
...@@ -113,21 +113,25 @@ export default { ...@@ -113,21 +113,25 @@ export default {
active: { active: {
label: 'Activa', label: 'Activa',
isEnabledOnCreate: true, isEnabledOnCreate: true,
isEnabledOnEdit: true,
classes: 'label-success mailbox-status' classes: 'label-success mailbox-status'
}, },
locked: { locked: {
label: 'Inactiva', label: 'Inactiva',
isEnabledOnCreate: true, isEnabledOnCreate: true,
isEnabledOnEdit: true,
classes: 'label-warning mailbox-status' classes: 'label-warning mailbox-status'
}, },
lockout: { lockout: {
label: 'Bloqueada', label: 'Bloqueada',
isEnabledOnCreate: false, isEnabledOnCreate: false,
isEnabledOnEdit: false,
classes: 'label-warning mailbox-status' classes: 'label-warning mailbox-status'
}, },
closed: { closed: {
label: 'Cerrada', label: 'Cerrada',
isEnabledOnCreate: true, isEnabledOnCreate: true,
isEnabledOnEdit: true,
classes: 'label-default mailbox-status' classes: 'label-default mailbox-status'
} }
} }
......
...@@ -612,6 +612,23 @@ export function forceTimestampFromHumanDate(date) { ...@@ -612,6 +612,23 @@ export function forceTimestampFromHumanDate(date) {
return formattedTimeStamp; return formattedTimeStamp;
} }
export function timestampToDate(timestamp) {
const time = parseInt(timestamp, 10);
const generatedDate = new Date(time).toLocaleString();
const date = generatedDate.split(/\s/).shift();
const dateArr = date.split('/');
const dateParts = dateArr.map((item) => {
if (item.length < 2) {
return '0' + item;
}
return item;
});
const newDate = dateParts.join('/');
return newDate;
}
export function setInitialDate() { export function setInitialDate() {
const dateInstance = new Date(); const dateInstance = new Date();
const day = dateInstance.getDate().toString().length < 2 ? '0' + dateInstance.getDate().toString() : dateInstance.getDate(); const day = dateInstance.getDate().toString().length < 2 ? '0' + dateInstance.getDate().toString() : dateInstance.getDate();
...@@ -702,14 +719,14 @@ export function getDomainsCleaned(domains) { ...@@ -702,14 +719,14 @@ export function getDomainsCleaned(domains) {
} }
export function findDomaindIdFromAccount(account, domains) { export function findDomaindIdFromAccount(account, domains) {
const name = account === 'object' ? account.domain : account; const name = typeof account === 'object' ? account.domain : account;
const rightsDomains = domains.filter((domain) => { const rightsDomains = domains.filter((domain) => {
return name === domain.name; return name === domain.name;
}); });
const domainReturned = rightsDomains.length === 1 ? rightsDomains.pop() : null; const domainReturned = rightsDomains.length === 1 ? rightsDomains.pop() : null;
return domainReturned ? domainReturned.id : null; return domainReturned;
} }
export function sortByNames(a, b) { export function sortByNames(a, b) {
...@@ -778,3 +795,11 @@ export function makeRequest(response, dl, resolve, returnAPI, store) { ...@@ -778,3 +795,11 @@ export function makeRequest(response, dl, resolve, returnAPI, store) {
res.data = dl; res.data = dl;
return resolve(res); return resolve(res);
} }
export function addEventListenerFixed(element, type, callback) {
const fixEvents = {
blur: 'focusout'
};
element.addEventListener(type, callback, typeof (fixEvents[type]) !== 'undefined');
}
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