Cyber Anakins Lightsaber - A Minishell-based backdoor

Current Path : /home/bjb2293782/xn--80abaeoqbbrbgf8aea5a2a2z.xn--p1ai/docs/
Upload File :
Current File : /home/bjb2293782/xn--80abaeoqbbrbgf8aea5a2a2z.xn--p1ai/docs/worktimeeditor.js

function createHolidayProperty(grid, title, value)
{
	    
	var tr = grid.tbody.appendChild(document.createElement('TR'));
	var td = tr.appendChild(document.createElement('TD'));
	td.className="propTitle";
	td.innerHTML = title;

	td = tr.appendChild(document.createElement('TD'));
	td.className="propValue";

	var weekDaysShort = ["Пн","Вт","Ср","Чт","Пт","Сб","Вс"];
	var weekDaysNumbers = [1,2,3,4,5,6,0];
	
	tr.editors = new Array(7);
	for(var i=0; i < 7; i++)
	{
		var lbl = td.appendChild(document.createElement('LABEL'));
		var chk = lbl.appendChild(createInput('CHECKBOX'));
		var w = weekDaysNumbers[i];
		tr.editors[ w ] = chk;

		var span = lbl.appendChild(document.createElement('SPAN'));
		span.innerHTML = weekDaysShort[i];

		td.appendChild(document.createElement('SPAN')).innerHTML="&nbsp;&nbsp;&nbsp;";
	}


	tr.getValue=function()
	{
		var value = '';
		for(var i=0; i < tr.editors.length; i++)
		{
			if (this.editors[i].checked)
			{
				if (value!='') value+=',';
				value+=i;
			}
		}
		return value;
	}	

	tr.setValue=function(value)
	{
		var holidays=[];
		if (value!='') holidays = value.split(",");
		for(var i=0; i < holidays.length; i++) holidays[i]=parseInt(holidays[i]);

		for(var i=0; i < 7; i++)
		{
			this.editors[i].checked = holidays.indexOf(i)>=0;
		}	
	}

	tr.setValue(value);


	return tr;
}



function openWorktimeDialog(filial, json)
{
	var dlg = openDialogBoxWithButtons("Правка расписания работы", 640, 400);
	var tabControl = new TabControl(dlg.innerElement);

	var page,grid;
	var sanitarDays = 
		[{id:-1, text:'Последний понедельник месяца'},
		 {id:-2, text:'Последний вторник месяца'},
		 {id:-3, text:'Последняя среда месяца'},
		 {id:-4, text:'Последний четверг месяца'},
		 {id:-5, text:'Последняя пятница месяца'},
		 {id:-6, text:'Последняя суббота месяца'},
		 {id:-7, text:'Последнее воскресенье месяца'},
		 {id:-8, text:'Последний раб.день месяца'},

		 {id:1, text:'Первый понедельник месяца'},
		 {id:2, text:'Первый вторник месяца'},
		 {id:3, text:'Первая среда месяца'},
		 {id:4, text:'Первый четверг месяца'},
		 {id:5, text:'Первая пятница месяца'},
		 {id:6, text:'Первая суббота месяца'},
		 {id:7, text:'Первое воскресенье месяца'},
		 {id:8, text:'Первый раб.день месяца'}];


	//-----------	
	page = tabControl.addTab('Обычное время работы');
	grid = createPropertyGrid(page);

	var regularSinceEditor = createTimeProperty(grid, "с:",json.regular.since);
	var regularToEditor = createTimeProperty(grid, "по:",json.regular.to);
	var regularHolidayEditor=createHolidayProperty(grid, "Выходные:",json.regular.holidays);
	var regularSanitarEditor=createComboBoxProperty(grid, "Санитарный день:", sanitarDays, json.regular.sanitar);
	var regularNotWorksCheckBox=createCheckBoxProperty(grid, "Деятельность приостановлена:", json.regular.notworks!=0);

	//-----------	
	page = tabControl.addTab('Летний период');
	grid = createPropertyGrid(page);

	var summerSinceEditor = createTimeProperty(grid, "с:",json.summer.since);
	var summerToEditor = createTimeProperty(grid, "по:",json.summer.to);
	var summerHolidayEditor=createHolidayProperty(grid, "Выходные:",json.summer.holidays);
	var summerSanitarEditor=createComboBoxProperty(grid, "Санитарный день:", sanitarDays, json.summer.sanitar);


	//-----------	
	page = tabControl.addTab('Спец.расписание');

	page.innerHTML = "<small>Добавьте сюда записи о рабочем времени или его ограничении в какие-то особые дни</small><Br>";

	var toolBar = createToolBar(page);
	toolBar.style.width="100%";
	createSpeedButton(toolBar, "plus.gif", "Добавить",
		function()
		{
			var date = new Date();
			var dateStr = twodigits(date.getDate())+'.'+twodigits(date.getMonth()+1)+'.'+date.getFullYear();
			var json = {date:dateStr, time:'N:Спецобслуживание'};

			var block = scrollBox.appendChild(createBlock(json));
			scrollBox.scrollTop=1000000000;
			block.typeEditor.focus();
		});

	var delBtn = createSpeedButton(toolBar, "del.png", "Удалить",
		function()
		{
			if (!activeBlock) return;

			yesNoDialog("Удалить данную запись?","Удаление",
				function()
				{
					if (!activeBlock) return false;
					scrollBox.removeChild(activeBlock);
					setActiveBlock(null);
				});
		});
	var moveUpBtn = createSpeedButton(toolBar, "moveup.png","Переместить выше",
		function()
		{
			if (activeBlock && activeBlock.previousSibling)
			{
				var prevBlock = activeBlock.previousSibling;
				scrollBox.removeChild(activeBlock);
				scrollBox.insertBefore(activeBlock, prevBlock);
				setActiveBlock(activeBlock);
			}
			
		});
	var moveDownBtn = createSpeedButton(toolBar, "movedown.png","Переместить ниже",
		function()
		{
			if (activeBlock && activeBlock.nextSibling)
			{
				var nextBlock = activeBlock.nextSibling.nextSibling;
				scrollBox.removeChild(activeBlock);

				if (!nextBlock)
					scrollBox.appendChild(activeBlock);
				else
					scrollBox.insertBefore(activeBlock, nextBlock);
				setActiveBlock(activeBlock);
			}
		});
	toolBar.end();


	delBtn.setDisabled(true);
	moveUpBtn.setDisabled(true);
	moveDownBtn.setDisabled(true);

	

	var scrollBox = page.appendChild(document.createElement('DIV'));
	scrollBox.style.overflowY="scroll";
	scrollBox.style.border="1px solid #666666";
	scrollBox.style.padding="4 4 4 4";
	scrollBox.style.width=610;
	scrollBox.style.height=240;
	scrollBox.style.backgroundColor="#99AABB";

	var activeBlock = null;

	var setActiveBlock = function(block)
	{
		activeBlock = block;
		if (activeBlock)
		{
			moveUpBtn.setDisabled(!activeBlock.previousSibling);
			moveDownBtn.setDisabled(!activeBlock.nextSibling);
			delBtn.setDisabled(false);
		}
		else
		{
			moveUpBtn.setDisabled(true);
			moveDownBtn.setDisabled(true);
			delBtn.setDisabled(true);
		}
	}


	var createBlock = function(special)
	{
		var block = scrollBox.appendChild(document.createElement('DIV'));
		block.style.marginTop=4;
		block.style.marginBottom=4;
		block.style.border="1px solid #6699CC";
		block.style.backgroundColor="e0e0e0";
		block.style.borderRadius="10px";
		block.style.padding="8 8 8 8";


		var table = block.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.align="right";
		td.noWrap = true;
		td.innerHTML = 'Тип:';


		td = tr.appendChild(document.createElement('TD'));
		td.width="99%";

		var typeEditor = block.typeEditor = td.appendChild(document.createElement('SELECT'));
		var op = typeEditor.appendChild(document.createElement('OPTION'));
		op.text = 'Конкретный день';
		op = typeEditor.appendChild(document.createElement('OPTION'));
		op.text = 'С ... по ...';

		typeEditor.block = block;
		typeEditor.onfocus = function()
			{
				setActiveBlock(this.block);
			};
		typeEditor.onchange=function()
			{
				this.block.singleDateDiv.style.display=this.selectedIndex==0 ? "": "none";
				this.block.rangeDateDiv.style.display=this.selectedIndex==1 ? "": "none";
			};



		tr = tbody.appendChild(document.createElement('TR'));
		td = tr.appendChild(document.createElement('TD'));
		td.noWrap = true;
		td.align="right";
		td.innerHTML = 'Дата:';
		block.singleDateDiv = tr;

		td = tr.appendChild(document.createElement('TD'));
		td.width="99%";

		var singleDateEditor = block.singleDateEditor = td.appendChild(createInput('DATE'));
		singleDateEditor.style.width = 150;

		singleDateEditor.block = block;
		singleDateEditor.onfocus = function()
			{
				setActiveBlock(this.block);
			};



		tr = tbody.appendChild(document.createElement('TR'));
		td = tr.appendChild(document.createElement('TD'));
		td.noWrap = true;
		td.align="right";
		td.innerHTML = 'Дата с:';
		block.rangeDateDiv = tr;

		td = tr.appendChild(document.createElement('TD'));
		td.width="99%";

		var sinceDateEditor = block.sinceDateEditor = td.appendChild(createInput('DATE'));
		sinceDateEditor.style.width = 150;

		sinceDateEditor.block = block;
		sinceDateEditor.onfocus = function()
			{
				setActiveBlock(this.block);
			};

		td.appendChild(document.createElement('SPAN')).innerHTML = ' по: ';
		var toDateEditor = block.toDateEditor = td.appendChild(createInput('DATE'));
		toDateEditor.style.width = 150;

		toDateEditor.block = block;
		toDateEditor.onfocus = function()
			{
				setActiveBlock(this.block);
			};

        

		tr = tbody.appendChild(document.createElement('TR'));
		td = tr.appendChild(document.createElement('TD'));
		td.noWrap = true;
		td.align="right";
		td.innerHTML = 'Режим работы:';

		td = tr.appendChild(document.createElement('TD'));
		td.width="99%";

		var modeEditor = block.modeEditor = td.appendChild(document.createElement('SELECT'));
		op = modeEditor.appendChild(document.createElement('OPTION'));
		op.text = 'Не работает';

		op = modeEditor.appendChild(document.createElement('OPTION'));
		op.text = 'Особое время работы';


		modeEditor.block = block;
		modeEditor.onfocus = function()
			{
				setActiveBlock(this.block);
			};
		modeEditor.onchange=function()
			{
				this.block.reasonDiv.style.display=this.selectedIndex == 0 ? "" : "none";
				this.block.timeDiv.style.display=this.selectedIndex == 1 ? "" : "none";
			};



		tr = tbody.appendChild(document.createElement('TR'));
		td = tr.appendChild(document.createElement('TD'));
		block.reasonDiv = tr;
		td.noWrap = true;
		td.align="right";
		td.innerHTML = 'Причина:';

		td = tr.appendChild(document.createElement('TD'));
		var reasonEditor = block.reasonEditor = td.appendChild(createInput('text'));
		reasonEditor.style.width=350;


		reasonEditor.block = block;
		reasonEditor.onfocus = function()
			{
				setActiveBlock(this.block);
			};


		tr = tbody.appendChild(document.createElement('TR'));
		td = tr.appendChild(document.createElement('TD'));
		block.timeDiv = tr;
		td.noWrap = true;
		td.align="right";
		td.innerHTML = 'Время с:';

		td = tr.appendChild(document.createElement('TD'));
		var timeSinceEditor = block.timeSinceEditor = td.appendChild(createInput('time'));

		timeSinceEditor.block = block;
		timeSinceEditor.onfocus = function()
			{
				setActiveBlock(this.block);
			};


		timeSinceEditor.style.width=120;
		td.appendChild(document.createElement('SPAN')).innerHTML=" по: ";
		var timeToEditor = block.timeToEditor = td.appendChild(createInput('time'));
		timeToEditor.style.width=120;

		timeToEditor.block = block;
		timeToEditor.onfocus = function()
			{
				setActiveBlock(this.block);
			};

		var g = special.date.match(/(\d+)\.(\d+)\.(\d+)\-(\d+)\.(\d+)\.(\d+)/);
		if (g)
		{
			typeEditor.selectedIndex=1;
			typeEditor.onchange();

			sinceDateEditor.value=g[3]+'-'+twodigits(g[2])+'-'+twodigits(g[1]);
			toDateEditor.value=g[6]+'-'+twodigits(g[5])+'-'+twodigits(g[4]);
		}
		else
		{
			typeEditor.selectedIndex=0;
			typeEditor.onchange();

			g = special.date.match(/(\d+)\.(\d+)\.(\d+)/);
			if (g)
				singleDateEditor.value=g[3]+'-'+twodigits(g[2])+'-'+twodigits(g[1]);
		}


		g = special.time.match(/(\d+)\:(\d+)\-(\d+)\:(\d+)/);
		if (g)
		{
			modeEditor.selectedIndex = 1;
			modeEditor.onchange();

			timeSinceEditor.value = g[1]+':'+g[2];
			timeToEditor.value = g[3]+':'+g[4];
		}
		else
		{
			modeEditor.selectedIndex = 0;
			modeEditor.onchange();

			g = special.time.match(/^N\:(.*)/);
			if (g)
				reasonEditor.value = g[1];
		}

		block.getValue=function()
		{
			var dateStr='';
			if (this.typeEditor.selectedIndex==0)
			{
				var g = this.singleDateEditor.value.match(/(\d+)\-(\d+)\-(\d+)/);
				if (g)
					dateStr = g[3]+'.'+g[2]+'.'+g[1];
			}
			else
			{
				var g = this.sinceDateEditor.value.match(/(\d+)\-(\d+)\-(\d+)/);
				if (g)
					dateStr = g[3]+'.'+g[2]+'.'+g[1]+'-';

				g = this.toDateEditor.value.match(/(\d+)\-(\d+)\-(\d+)/);
				if (g)
					dateStr += g[3]+'.'+g[2]+'.'+g[1];
			}

			var timeStr = 'N:';
			if (this.modeEditor.selectedIndex==0)
			{
				timeStr = 'N:'+this.reasonEditor.value.trim();
			}
			else
			{
				timeStr='';
				var g = this.timeSinceEditor.value.match(/^(\d+)\:(\d+)/);
				if (g)
					timeStr = g[1]+':'+g[2]+'-';

				g = this.timeToEditor.value.match(/^(\d+)\:(\d+)/);
				if (g)
					timeStr += g[1]+':'+g[2];
			}

			return {date:dateStr, time:timeStr};
		};

		return block;
	}


	for(var i=0; i < json.special.length; i++)
	{
		createBlock(json.special[i]);
	}



	var btn = dlg.buttonPanel.appendChild(createInput('button'));
	btn.value = "OK";
	btn.onclick=function()
		{
			var body = '';
			body+='[regular]';
			body+='\nsince='+regularSinceEditor.getValue();
			body+='\nto='+regularToEditor.getValue();
			body+='\nholidays='+regularHolidayEditor.getValue();
			body+='\nsanitar='+regularSanitarEditor.getValue();
			body+='\nnotworks='+(regularNotWorksCheckBox.getValue() ? 1:0);
			body+='\n';

			body+='\n[summer]';
			body+='\nsince='+summerSinceEditor.getValue();
			body+='\nto='+summerToEditor.getValue();
			body+='\nholidays='+summerHolidayEditor.getValue();
			body+='\nsanitar='+summerSanitarEditor.getValue();
			body+='\n';

			body+='\n[special]';

			var block = scrollBox.firstChild;
			while(block)
			{
				if (block.getValue)
				{
					var g = block.getValue();
					body+='\n'+g.date+'='+g.time;
				}
		
				block = block.nextSibling;
			}
			body+='\n';



			var post = "action=worktime:set";
			post+='&filial='+filial;
			post+='&body='+encodeURIComponent(body);


			var btn = this;
			btn.disabled=true;

			sendXHR('api.php',post,
				function(response)
				{
					dlg.close();
					location.reload();
				},
				function(error)
				{
					btn.disabled=false;
					errorBox(error);
				});	
		};
	
	btn = dlg.buttonPanel.appendChild(createInput('button'));
	btn.value="Закрыть";
	btn.onclick = function()
		{
			dlg.close();
			if (reload) location.reload();
		};

	dlg.alignInScreenCenter();
}



function editWorktime(filial)
{
	sendXHR('api.php','action=worktime:get&filial='+filial,
		function(response)
		{
			openWorktimeDialog(filial, JSON.parse(response));
		},
		function(error)
		{
			errorBox(error);
		});	
}

May the force be with you, always.