%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/components/bitrix/sale.location.import/templates/admin/ |
| Current File : //home/bitrix/www/bitrix/components/bitrix/sale.location.import/templates/admin/script.js |
BX.namespace('BX.Sale.component.location');
if(typeof BX.Sale.component.location.import == 'undefined' && typeof BX.ui != 'undefined' && typeof BX.ui.widget != 'undefined'){
BX.Sale.component.location.import = function(opts, nf){
this.parentConstruct(BX.Sale.component.location.import, opts);
BX.merge(this, {
opts: { // default options
url: '/somewhere.php',
ajaxFlag: 'AJAX_MODE',
progressWidth : 500,
firstImport: false,
statistics: {}
},
vars: { // significant variables
stage: false,
state: 'remote',
formSubmitted: false,
fileUploaded: false,
awaitInterruption: false,
firstImport: false,
statistics: {}
},
ctrls: { // links to controls
buttons: {}
},
sys: {
code: 'loc-i'
}
});
this.handleInitStack(nf, BX.Sale.component.location.import, opts);
};
BX.extend(BX.Sale.component.location.import, BX.ui.widget);
BX.merge(BX.Sale.component.location.import.prototype, {
init: function(){
var so = this.opts,
sv = this.vars,
sc = this.ctrls,
ctx = this;
sv.firstImport = so.firstImport;
sv.statistics = BX.clone(so.statistics);
// iterator
sv.iterator = new BX.iterator({
source: so.url,
interval: 100,
waitAjaxOnStop: true,
whenHit: function(result){
ctx.setPercent(result.data.PERCENT);
var next = result.data.NEXT_STAGE;
// set message
if(BX.type.isNotEmptyString(next) && sv.stage != result.data.NEXT_STAGE)
ctx.setStage(result.data.NEXT_STAGE);
var proceed = result.data.PERCENT < 100;
if(!proceed)
{
if(typeof result.data.STAT != 'undefined')
ctx.updateStatistics(result.data.STAT);
var lastRequest = this.vars.fields;
if((typeof lastRequest.OPTIONS != 'undefined' && typeof lastRequest.OPTIONS.DROP_ALL != 'undefined') || (typeof lastRequest.ONLY_DELETE_ALL != 'undefined'))
sv.firstImport = false; // now it is definitely NOT a first import
}
return proceed;
}
});
sv.iterator.bindEvent('set-status', function(stat){
if(this.vars.fields.ONLY_DELETE_ALL == 1)
{
if(stat == 'R'){
sc.buttons.startStop.setAttribute('disabled', 'disabled');
sc.buttons.deleteAll.setAttribute('disabled', 'disabled');
ctx.setCSSState('running');
}else if(stat == 'S'){
sc.buttons.startStop.removeAttribute('disabled');
sc.buttons.deleteAll.removeAttribute('disabled');
ctx.dropCSSState('running');
ctx.setStage('COMPLETE_REMOVE_ALL');
}
}
else
{
if(stat == 'R'){
sc.buttons.startStop.value = so.messages.stop;
ctx.setCSSState('running');
}else if(stat == 'I'){
sc.buttons.startStop.value = so.messages.stopping;
sc.buttons.startStop.setAttribute('disabled', 'disabled');
ctx.setStage('INTERRUPTING');
sv.awaitInterruption = true;
}else if(stat == 'S'){
function enableButtons(){
sc.buttons.startStop.value = so.messages.start;
ctx.dropCSSState('running');
sc.buttons.startStop.removeAttribute('disabled');
ctx.setStage(sv.awaitInterruption ? 'INTERRUPTED' : 'COMPLETE');
sv.awaitInterruption = false;
}
if(false && sv.awaitInterruption){
// here we must ensure indexes restored
BX.ajax({
url: so.url,
method: 'post',
dataType: 'html',
async: true,
processData: true,
emulateOnload: true,
start: true,
data: {'RESTORE_INDEXES': 1},
//cache: true,
onsuccess: enableButtons,
onfailure: enableButtons
});
}else
enableButtons();
}
}
});
// tree
sv.tree = new BX.ui.itemTree({
scope: this.getControl('location-set'),
bindEvents: {
'toggle-bundle-before': function(way, controls){
BX[way ? 'addClass' : 'removeClass'](controls.expander, 'expanded');
}
}
});
// file loader
sc.fLoader = new BX.ui.fileAsyncLoader({
scope: ctx.getControl('userfile'),
url: so.pageUrl
});
// moving item back to its designed origin
var moveInputBack = function(){
var admInput = BX.findChildren(this.ctrls.inputContainer, {className: 'adm-input-file'});
admInput[0].appendChild(this.ctrls.input);
}
sc.fLoader.bindEvent('upload-success', function(){
sv.fileUploaded = true;
moveInputBack.call(this);
});
sc.fLoader.bindEvent('upload-fail', function(){
sv.fileUploaded = false;
moveInputBack.call(this);
});
sc.buttons.startStop = this.getControl('button-start');
sc.buttons.deleteAll = this.getControl('delete-all');
sc.nameOfSet = this.getControl('location-set');
sc.percentIndicator = this.getControl('percents', false, false, true);
sc.percentGrade = this.getControl('adm-progress-bar-inner');
sc.statusText = this.getControl('status-text');
sc.statictics = {
list: this.getControl('stat-list'),
all: this.getControl('stat-all'),
groups: this.getControl('stat-groups')
};
//this.pushFuncStack('buildUpDOM', BX.Sale.component.location.import);
this.pushFuncStack('bindEvents', BX.Sale.component.location.import);
},
/*buildUpDOM: function(){},*/
bindEvents: function(){
var sc = this.ctrls,
sv = this.vars,
so = this.opts,
ctx = this;
// iterator
BX.bind(sc.buttons.startStop, 'click', function(){
if(sv.iterator.getIsRunning()){
sv.iterator.stop();
}else{
// location sets
var children = BX.findChildren(sc.nameOfSet, {tag: 'input'}, true);
var sets = [];
for(var k in children){
if(children[k].checked && children[k].name.length > 0 && children[k].value.length > 0)
sets.push(children[k].value);
}
if(sv.state == 'remote' && !sets.length)
{
alert(so.messages.selectItems);
return;
}
if(sv.state == 'file' && !sv.fileUploaded)
{
alert(so.messages.uploadFile);
return;
}
var request = {
LOCATION_SETS: sets,
ADDITIONAL: ctx.getFormControlValues('additional'),
OPTIONS: ctx.getFormControlValues('option')
};
request[so.ajaxFlag] = 1;
if(request.OPTIONS.DROP_ALL && !ctx.askRemove())
return;
ctx.setPercent(0);
ctx.setStage('DOWNLOAD_FILES');
BX.show(ctx.getControl('progressbar'));
sv.iterator.start(request);
}
});
BX.bind(sc.buttons.deleteAll, 'click', function(e){
if(ctx.askRemove()){
var request = {
ONLY_DELETE_ALL: 1
};
request[so.ajaxFlag] = 1;
ctx.setPercent(0);
ctx.setStage('DELETE_ALL');
BX.show(ctx.getControl('progressbar'));
sv.iterator.start(request);
}
BX.PreventDefault(e);
});
var onError = function(errors){
sc.buttons.startStop.value = so.messages.start;
var errMsg = [];
if(typeof errors != 'undefined'){
for(var k in errors){
if(errors[k].message)
errMsg.push(errors[k].message);
}
}
ctx.setStatusText(so.messages.error_occured+': '+errMsg.join(', '), true);
}
sv.iterator.bindEvent('server-error', onError);
sv.iterator.bindEvent('ajax-error', onError);
var setState = function(state, initial){
sc.scope.className = '';
ctx.setCSSState('mode-'+state);
sv.state = state;
/*
if(!initial && state == 'remote'){
sv.fileUploaded = false;
sc.fLoader.hideMessages();
}
*/
}
BX.bindDelegate(this.getControl('mode-switch'), 'change', {tag: 'input'}, function(){
setState(this.value);
});
setState('remote', true);
},
askRemove: function(){
var so = this.opts;
if(typeof this.vars.statistics.TOTAL != 'undefined' && this.vars.statistics.TOTAL.CNT == 0)
return true; // empty base
var hasRelicLocations = this.vars.firstImport;
var answer = confirm(so.messages[hasRelicLocations ? 'confirm_delete_relic' : 'confirm_delete']);
return (hasRelicLocations && !answer) || (!hasRelicLocations && answer);
},
setPercent: function(value){
var sc = this.ctrls,
so = this.opts;
value = parseInt(value);
if(value < 0)
value = 0;
if(value > 100)
value = 100;
if(sc.percentIndicator != null){
for(var k in sc.percentIndicator){
sc.percentIndicator[k].innerHTML = value;
}
}
value = value * (so.progressWidth / 100) - 4;
if(value < 0)
value = 0;
BX.style(sc.percentGrade, 'width', value+'px');
},
setStatusText: function(text, highlight){
this.ctrls.statusText.innerHTML = BX.util.htmlspecialchars(text);
BX.style(this.ctrls.statusText, 'color', highlight ? 'red' : 'inherit');
},
setStage: function(stageCode){
var so = this.opts,
sv = this.vars;
if(typeof so.messages['stage_'+stageCode] == 'undefined'){
this.setStatusText(BX.util.htmlspecialchars(stageCode), true);
sv.stage = false;
return;
}
this.setStatusText(this.opts.messages['stage_'+stageCode], false);
sv.stage = stageCode;
},
getFormControlValues: function(fcCode){
var result = {};
var controls = this.getControl(fcCode, true, false, true);
for(var k = 0; k < controls.length; k++)
{
var opt = controls[k];
if('name' in opt)
{
var name = opt.name;
if(!('type' in opt))
continue;
if(opt.nodeName == 'INPUT' && (opt.type == 'checkbox' || opt.type == 'radio') && !opt.checked)
continue;
result[name] = opt.value;
}
}
return result;
},
setTab: function(tab)
{
BX.style(this.ctrls.buttons.startStop, 'visibility', tab == 'tab_cleanup' ? 'hidden' : 'visible');
},
updateStatistics: function(stat){
var sc = this.ctrls;
BX.cleanNode(sc.statictics.list);
var html = '';
var all = 0;
var groups = 0;
for(var k in stat)
{
if(typeof this.vars.statistics[stat[k].CODE] == 'undefined')
this.vars.statistics[stat[k].CODE] = {};
this.vars.statistics[stat[k].CODE].CNT = stat[k].CNT;
if(typeof stat[k].NAME == 'string' && stat[k].NAME.length > 0)
{
html += this.getHTMLByTemplate('stat-item', {
type: stat[k].NAME,
count: parseInt(stat[k].CNT)
});
}
if(stat[k].CODE == 'TOTAL')
all = parseInt(stat[k].CNT);
if(stat[k].CODE == 'GROUPS')
groups = parseInt(stat[k].CNT);
}
BX.html(sc.statictics.list, html);
BX.html(sc.statictics.all, all);
BX.html(sc.statictics.groups, groups);
}
});
}