Cyber Anakins Lightsaber - A Minishell-based backdoor
function openProgDescDialog(json, doOpen)
{
var dlg = openDialogBoxWithButtons("Правка мероприятия "+json.id, 800, 500);
var tabControl = new TabControl(dlg.innerElement);
var page,grid;
page = tabControl.addTab('Основные');
grid = createPropertyGrid(page);
var nameEditor = createEditProperty(grid, "Название мероприятия:", "100%", json.name);
var subnameEditor = createEditProperty(grid, "Расшифровка названия:", "100%", json.subname);
var descEditor = createMemoProperty(grid, "Описание мероприятия:", 14, json.desc);
var categoryEditor = createEditProperty(grid, "Возрастная категория:", 80, json.category);
categoryEditor.editor.type="number";
categoryEditor.editor.min=0;
categoryEditor.editor.max=100;
categoryEditor.editor.parentNode.appendChild(document.createElement('SPAN')).innerHTML='+';
var peopleEditor = createEditProperty(grid, "Кол-во людей:", 80, json.people);
peopleEditor.editor.type="number";
peopleEditor.editor.min=0;
peopleEditor.editor.max=100000;
page = tabControl.addTab('Иллюстрации');
createImageProperty(page, 320,320, json.images,
function(formData, onOK)
{
formData.append('action','progdesc:addimages');
formData.append('id',json.id);
sendXHR('api.php', formData,
function(response)
{
onOK(response);
},
function(error)
{
errorBox(error);
});
},
function(fileName, onOK)
{
sendXHR("api.php","action=progdesc:delimage&file="+encodeURIComponent(fileName),
function(response)
{
onOK();
},
function(error)
{
errorBox(error);
});
});
page = tabControl.addTab('Запись');
grid = createPropertyGrid(page);
var needRegisterEditor = createCheckBoxProperty(grid, "По предварительной записи:", json.needRegister!=0,
function()
{
howToRegisterEditor.style.display=this.checked ? "" : "none";
whenRegisterEditor.style.display=this.checked ? "" : "none";
});
var howToRegisterEditor = createMemoProperty(grid, "Как записаться:", 4, json.howToRegister);
var whenRegisterEditor = createDateProperty(grid, "До какого числа можно записаться:", json.whenRegister);
howToRegisterEditor.style.display=json.needRegister!=0 ? "" : "none";
whenRegisterEditor.style.display=json.needRegister!=0 ? "" : "none";
createLinkProperty(grid, "Опубликовал:", json.author, json.authorName, editAdmin);
createStaticProperty(grid, "Когда:", json.editTime);
var btn = dlg.buttonPanel.appendChild(createInput('button'));
btn.value = "OK";
btn.onclick=function()
{
var post = "action=progdesc:set";
post+='&id='+json.id;
post+='&name='+encodeURIComponent(nameEditor.getValue());
post+='&subname='+encodeURIComponent(subnameEditor.getValue());
post+='&desc='+encodeURIComponent(descEditor.getValue());
post+='&category='+categoryEditor.getValue();
post+='&people='+peopleEditor.getValue();
post+='&needRegister='+(needRegisterEditor.getValue()?1:0);
post+='&howToRegister='+encodeURIComponent(howToRegisterEditor.getValue());
post+='&whenRegister='+encodeURIComponent(whenRegisterEditor.getValue());
var btn = this;
btn.disabled=true;
sendXHR('api.php',post,
function(response)
{
dlg.close();
if (doOpen)
location = 'progdesc.php?id='+json.id;
else
location.reload();
},
function(error)
{
btn.disabled=false;
errorBox(error);
});
};
btn = dlg.buttonPanel.appendChild(createInput('button'));
btn.value="Закрыть";
btn.onclick = function()
{
dlg.close();
};
nameEditor.editor.focus();
dlg.alignInScreenCenter();
}
function editProgDesc(id,doOpen)
{
sendXHR('api.php','action=progdesc:get&id='+id,
function(response)
{
openProgDescDialog(JSON.parse(response),doOpen);
},
function(error)
{
errorBox(error);
});
}
function newProgDesc(filial, doOpen)
{
if (!filial) filial = adminFilial;
sendXHR('api.php','action=progdesc:new&filial='+filial,
function(response)
{
openProgDescDialog(JSON.parse(response), doOpen);
},
function(error)
{
errorBox(error);
});
}
function delProgDesc(id)
{
yesNoDialog("Удалить данное мероприятие?","Удаление мероприятия",
function()
{
sendXHR("api.php","action=progdesc:del&id="+id,
function()
{
location.reload();
},
function(error)
{
errorBox(error);
});
});
}
function openWeekDayProgDialog(json, filial, weekDay)
{
var weekDayNames = ['','понедельник','вторник','среду','четверг','пятницу','субботу','воскресенье'];
var dlg = openDialogBoxWithButtons("Правка расписания на "+weekDayNames[weekDay], 700, 500);
var toolBar = createToolBar(dlg.innerElement);
toolBar.style.width="100%";
createSpeedButton(toolBar, "plus.gif", "Добавить",
function()
{
var block = scrollBox.firstChild;
var since = '12:00';
while(block)
{
if (block.toEditor)
{
if (block.toEditor.value > since) since = block.toEditor.value;
}
block = block.nextSibling;
}
var to = '14:00';
var g = since.match(/^(\d+):(\d+)/);
if (g)
{
to = (parseInt(g[1])+2).toString()+':'+g[2];
}
block = scrollBox.appendChild(createBlock({since:since,to:to,desc:0,'comment':''}));
scrollBox.scrollTop=1000000000;
block.sinceEditor.focus();
});
var delBtn = createSpeedButton(toolBar, "del.png", "Удалить",
function()
{
if (!activeBlock) return;
yesNoDialog("Удалить запись из расписания?","Удаление",
function()
{
if (!activeBlock) return false;
scrollBox.removeChild(activeBlock);
setActiveBlock(null);
});
});
toolBar.end();
delBtn.setDisabled(true);
var scrollBox = dlg.innerElement.appendChild(document.createElement('DIV'));
scrollBox.style.overflowY="scroll";
scrollBox.style.border="1px solid #666666";
scrollBox.style.padding="4 4 4 4";
scrollBox.style.width=788;
scrollBox.style.height=400;
scrollBox.style.backgroundColor="#99AABB";
var activeBlock = null;
var setActiveBlock = function(block)
{
activeBlock = block;
if (activeBlock)
{
delBtn.setDisabled(false);
}
else
{
delBtn.setDisabled(true);
}
}
var createBlock = function(prog)
{
var div = document.createElement('DIV');
div.style.marginTop=4;
div.style.marginBottom=4;
div.style.border="1px solid #6699CC";
div.style.backgroundColor="e0e0e0";
div.style.borderRadius="10px";
div.style.padding="8 8 8 8";
var table = div.appendChild(document.createElement('TABLE'));
table.style.width="100%";
var tbody = table.appendChild(document.createElement('TBODY'));
var tr = tbody.appendChild(document.createElement('TR'));
var td = tr.appendChild(document.createElement('TD'));
td.width="1%";
td.noWrap=true;
td.align="right";
td.innerHTML = 'с:';
td.vAlign="bottom";
td = tr.appendChild(document.createElement('TD'));
td.width="1%";
td.vAlign="bottom";
var sinceEditor = div.sinceEditor = td.appendChild(createInput('time'));
sinceEditor.style.width=100;
sinceEditor.value=prog.since;
sinceEditor.block = div;
sinceEditor.onfocus = function() { setActiveBlock(this.block); }
td = tr.appendChild(document.createElement('TD'));
td.width="99%";
td.innerHTML='Мероприятие:<br>';
var progComboBox = div.progEditor = td.appendChild(document.createElement('SELECT'));
progComboBox.style.width="100%";
var op = progComboBox.appendChild(document.createElement('OPTION'));
op.text = '';
op.value = 0;
for(var i=0; i < json.progdescriptions.length; i++)
{
op = progComboBox.appendChild(document.createElement('OPTION'));
op.text = _html_(json.progdescriptions[i].name);
op.value = _html_(json.progdescriptions[i].id);
if (prog.desc == json.progdescriptions[i].id) op.selected=true;
}
progComboBox.getValue = function()
{
return this.options[this.selectedIndex].value;
};
progComboBox.block = div;
progComboBox.onfocus = function() { setActiveBlock(this.block); }
tr = tbody.appendChild(document.createElement('TR'));
var td = tr.appendChild(document.createElement('TD'));
td.width="1%";
td.noWrap=true;
td.align="right";
td.innerHTML = 'до:';
td.vAlign="bottom";
td = tr.appendChild(document.createElement('TD'));
td.width="1%";
td.vAlign="bottom";
var toEditor = div.toEditor = td.appendChild(createInput('time'));
toEditor.style.width=100;
toEditor.value=prog.to;
toEditor.block = div;
toEditor.onfocus = function() { setActiveBlock(this.block); }
td = tr.appendChild(document.createElement('TD'));
td.width="99%";
td.innerHTML='Комментарий:<br>';
var commentEditor = div.commentEditor = td.appendChild(createInput('text'));
commentEditor.style.width="100%";
commentEditor.placeholder="Неделя, группа и т.п.";
commentEditor.value=prog.comment;
commentEditor.block = div;
commentEditor.onfocus = function() { setActiveBlock(this.block); }
return div;
}
for(var i=0; i < json.programs.length; i++)
{
scrollBox.appendChild(createBlock(json.programs[i]));
}
var btn = dlg.buttonPanel.appendChild(createInput('button'));
btn.value="OK";
btn.onclick=function()
{
var text = '';
var block = scrollBox.firstChild;
while(block)
{
if (block.sinceEditor)
{
if (text!='') text+='\n';
text+=block.sinceEditor.value;
text+='\t';
text+=block.toEditor.value;
text+='\t';
text+=block.progEditor.getValue();
text+='\t';
text+=block.commentEditor.value.trim();
}
block = block.nextSibling;
}
var btn = this;
btn.disabled=true;
sendXHR('api.php','action=prog:set&filial='+filial+'&weekday='+weekDay+'&programs='+encodeURIComponent(text),
function()
{
dlg.close();
location.reload();
},
function(error)
{
btn.disabled=false;
errorBox(error);
});
};
btn = dlg.buttonPanel.appendChild(createInput('button'));
btn.value="Закрыть";
btn.onclick=function()
{
dlg.close();
};
dlg.alignInScreenCenter();
}
function editProg(filial, weekDay)
{
sendXHR("api.php","action=prog:get&filial="+filial+"&weekday="+weekDay,
function(response)
{
openWeekDayProgDialog(JSON.parse(response), filial, weekDay);
},
function(error)
{
errorBox(error);
});
}
May the force be with you, always.