<?php

file_put_contents(ENGINE_DIR . '/inc/cdnm/reports/ok.log', '', LOCK_EX);
file_put_contents(ENGINE_DIR . '/inc/cdnm/reports/exist.log', '', LOCK_EX);
file_put_contents(ENGINE_DIR . '/inc/cdnm/reports/error.log', '', LOCK_EX);


$base_text = 'Kinopoisk, IMDb, World-Art (аниме), Kinorium, TMDB, Shikimori, MyDramaList';
?><!DOCTYPE html>
<html>
<head>
	
	<meta charset="<?=$this->dle_config['charset']?>" />

	<title>CDNM - Админпанель - Массовое проставление ссылок</title>

	<!-- cdnm CSS -->
	<link type="text/css" href="/engine/skins/cdnm/css/default.css?v=<?=time()?>" rel="stylesheet" />
	
	<!-- Bootstrap 3.2.0 CSS -->
	<link type="text/css" href="/engine/skins/cdnm/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
	<link type="text/css" href="/engine/skins/cdnm/bootstrap/css/bootstrap-theme.min.css" rel="stylesheet" />

	<!-- Подключаем jQuery для старых версий скрипта -->
	<script type="text/javascript" src="/engine/skins/cdnm/js/jquery-1.11.1.min.js"></script>

	<!-- Additional Scripts -->
	<script type="text/javascript" src="/engine/skins/cdnm/js/main.js"></script>

	<!-- Bootstrap 3.2.0 JavaScript -->
	<script type="text/javascript" src="/engine/skins/cdnm/bootstrap/js/bootstrap.min.js"></script>

</head>
<body>
	
	<div class="navbar navbar-default navbar-fixed-top" role="navigation">
		<div class="container">
			<div class="navbar-header">
				<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
					<span class="sr-only">Включить навигацию</span>
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
				</button>
				<a class="navbar-brand" href="?mod=cdnm">CDN Movies</a>
			</div>
			<div class="navbar-collapse collapse">
				<ul class="nav navbar-nav">
					<li><a href="?mod=cdnm&amp;action=settings">Настройки</a></li>
					<li class="active"><a href="?mod=cdnm&amp;action=replace">Проставление ссылок</a></li>
				</ul>
				<div class="navbar-form navbar-right">
					<button type="button" class="btn btn-primary" onclick="location.href = '?';">Админпанель сайта</button>
				</div>
			</div>
		</div>
	</div>
	
	<div class="container">
		
		<div class="alert alert-warning" role="alert">
			Массовое проставление ссылок производится по полям <b>ID видео в базе cdnm</b>, <b>kinopoisk.ru</b>, <b>www.imdb.com</b> и <b>world-art.ru</b>!
			<br/>Перед началом массового проставления ссылок убедитесь что вы настроили все необходимые доп. поля!
		</div>
		
		<?php if (empty($this->config['cdnm_debug'])): ?>
		<div class="alert alert-info" role="alert">
			Выполнение может занять некоторое время, длительность зависит от количества новостей и скорости работы сервера.
		</div>
		<?php else: ?>
		<div class="alert alert-danger" role="alert">
			Проставление ссылок может работать с ошибками, отключите "Режим отдалки" в настройках!
		</div>
		<?php endif; ?>
		
		<div class="panel panel-default">
			<div class="panel-heading">
				<h3 class="panel-title">Массовое проставление ссылок</h3>
			</div>
			<table class="table table-bordered">
				<thead>
					<tr>
						<td colspan="2">
							<div class="form-group">
								<label for="moduleType">Тип</label>
								<div class="col-sm-4 settings-input-col">
									<select id="moduleType" class="form-control cdnm-replace-field">
										<option value="1" selected>Все</option>
										<option value="2">Опубликованные</option>
										<option value="3">Неопубликованные</option>
									</select>
								</div>
								<span class="help-block">Выберите тип записей которым будет проставляться ссылка</span>
							</div>
							<div class="form-group">
								<label for="moduleType">Категории</label>
								<div class="col-sm-12 settings-input-col">
									<?php
										$xfieldsaction = "categoryfilter";
										include ENGINE_DIR . '/inc/xfields.php';
										echo $categoryfilter;

										$categories_list = CategoryNewsSelection(0, 0);
									?>
									<select data-placeholder="Выберите категории ..." name="category[]" id="category" onchange="onCategoryChange(this)" class="categoryselect" multiple style="width:100%;max-width:350px;"><?=$categories_list?></select>
									<div class="category-inverse"><input class="checkbox-inline cdnm-replace-field" type="checkbox" id="category_inverse" name="category_inverse" value="1" title="Не проходить выбранные категории" /></div>
									<script type="text/javascript">
									<!--
										$(".categoryselect").chosen({
											allow_single_deselect: true,
											no_results_text: "Ничего не найдено"
										});
									-->
									</script>
								</div>
								<span class="help-block">Категории (с учетом подкатегорий) в которых будет массовое проставление ссылок</span>
							</div>
							<div class="form-group">
								<label for="moduleRewrite">Перезаписывать</label>
								<div class="col-sm-12 settings-input-col">
									<button type="button" id="moduleRewriteButtom" class="btn btn-sm btn-danger cdnm-replace-field" style="margin: 2px 0; font-weight: bold;">НЕТ</button>
									<input type="hidden" id="moduleRewrite" value="0" />
									<span>&nbsp;&nbsp;&nbsp;Перезаписывать ссылку и данные где они уже есть</span>
								</div>
							</div>
							<div class="form-group">
								<label>Только ссылка</label>
								<div class="col-sm-12 settings-input-col">
									<input type="checkbox" name="only_url" class="moduleField" value="only_url"> Заполнять только поле с сылкой
								</div>
								<span class="help-block">Кроме поля с ссылкой плеера ничего больше не заполняется</span>
							</div>
							<div class="form-group">
								<label>Только новые</label>
								<div class="col-sm-12 settings-input-col">
									<input type="checkbox" id="only_no_url" name="only_no_url" class="moduleField" value="only_no_url"> Проверять только по новостям без ссылки на плеер
								</div>
								<span class="help-block">Если поле плеера заполнено, новость не будет проверяться</span>
							</div>
							<div class="form-group">
								<label>Постер</label>
								<div class="col-sm-12 settings-input-col">
									<input type="checkbox" id="poster_rewrite" name="poster_rewrite" class="moduleField" value="poster_rewrite"> Принудительно обновлять постеры
								</div>
								<span class="help-block">Если постеры были раньше проставлены другим модулем и нужно их заменить</span>
							</div>
							
						</td>
						<td colspan="2">
							<div class="form-group">
								<label for="moduleField">Приоритет поиска по ID из базы</label>
								<div class="col-sm-12 settings-input-col">
									<div class="fields-list">
										<label><?=($base_text)?></label>
									</div>
								</div>
							</div>
							<div class="form-group">
								<label for="moduleThreads">Потоки</label>
								<div class="col-sm-4 settings-input-col">
									<select id="moduleThreads" class="form-control cdnm-replace-field">
										<option value="1">1</option>
										<option value="2">2</option>
										<option value="3">3</option>
										<option value="5" selected>5</option>
										<option value="7">7</option>
										<option value="10">10</option>
									</select>
								</div>
								<span class="help-block">Выставите оптимальное кол-во одновременных потоков<br><i>Рекомендуемое значение (<b>5</b>)</i></span>
								<br>
								<div class="col-sm-12 settings-input-col">
									<input type="checkbox" id="big_query" name="big_query" class="moduleField" value="big_query"> * Найти все новости без ссылки за один запрос
								</div>
								<span class="help-block"> * В некоторых случаях может быть полезно для ускорения проставления</span>
							</div>
							<div class="form-group">
								<label for="moduleInterval">Интервал</label>
								<div class="col-sm-4 settings-input-col">
									<select id="moduleInterval" class="form-control cdnm-replace-field">
										<option value="0" selected>0 мс</option>
										<option value="100">100 мс</option>
										<option value="200">200 мс</option>
										<option value="300">300 мс</option>
										<option value="500">500 мс</option>
										<option value="1000">1 сек</option>
										<option value="2000" selected>2 сек</option>
										<option value="3000">3 сек</option>
									</select>
								</div>
								<span class="help-block">Выставите оптимальный интервал межу запуском потовков<br><i>Рекомендуемое значение (<b>1 сек</b>)</i></span>
							</div>
							<span class="alert alert-warning">! Потоки и интервалы можно менять во время проставления</span>
						</td>
					</tr>
					<tr>
						<th width="25%" class="info">Всего записей в базе</th>
						<th width="25%" class="success">Ссылка проставлена успешно</th>
						<th width="25%" class="warning">Ссылка уже существует</th>
						<th width="25%" class="danger">Видео не найдено</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="info">
							<span id="cdnmReplaceStatusInfo" class="label label-info cdnm-status-label"><?=$post['count']?></span>
						</td>
						<td class="success">
							<a href="/engine/inc/cdnm/reports/ok.log" target="_blank" class="report-not-found"><span id="cdnmReplaceStatusSuccess" class="label label-success cdnm-status-label">0</span></a>
						</td>
						<td class="warning">
							<a href="/engine/inc/cdnm/reports/exist.log" target="_blank" class="report-not-found"><span id="cdnmReplaceStatusWarning" class="label label-warning cdnm-status-label">0</span></a>
						</td>
						<td class="danger">
							<a href="/engine/inc/cdnm/reports/error.log" target="_blank" class="report-not-found"><span id="cdnmReplaceStatusDanger" class="label label-danger cdnm-status-label">0</span></a>
						</td>
					</tr>
				</tbody>
			</table>
			<?php if ($post['count']) { ?>
			<div class="panel-footer" id="cdnmReplacePanel">
				<button type="button" id="cdnmReplaceBeginButton" class="btn btn-success">Начать</button>
				<button type="button" id="cdnmReplaceStopButton" class="btn btn-default" style="display:none">Остановить</button>
				<button type="button" id="cdnmReplaceCancelButton" class="btn btn-danger" style="display:none">Отменить</button>
			</div>
			<?php } ?>
			
		</div>

		<div class="panel panel-default" id="report" style="display: none">
			<div class="panel-heading">
				<h3 class="panel-title">Отчет: Видео не найдено</h3>
			</div>
			
			<table class="table table-bordered"></table>
		</div>

		<footer>
			<p><?php echo $this->copyright; ?></p>
		</footer>
	</div>
	
	<div id="cdnmReplaceStatus" style="display:none">canchel</div>
	<div id="cdnmReplaceLastPostId" style="display:none"></div>

	<!-- cdnm JavaScript -->
	<script type="text/javascript">
	<!--
		function cdnm_replace_start() {
			// $(".cdnm-replace-field").attr("disabled", "disabled");
			$("#moduleType").attr("disabled", "disabled");
			$(".moduleField").attr("disabled", "disabled");
			
			$("#category").prop("disabled", true).trigger("liszt:updated");
			
			$("#cdnmReplaceBeginButton").hide().text("Продолжить");
			$("#cdnmReplaceStopButton, #cdnmReplaceCancelButton").show();
			
			$("#cdnmReplaceStatus").text("working");
			
			cdnm_replace_working();
		}
		
		var threads_work = statcdnm_ok = statcdnm_exist = statcdnm_error = 0;
		function cdnm_replace_working() {
			if ($("#cdnmReplaceStatus").text() == "cancel") {
				cdnm_replace_cancel(true);
			}
			var threads = parseInt($("#moduleThreads").val());
			var interval = parseInt($("#moduleInterval").val());
			
			if (threads_work >= threads) setTimeout("cdnm_replace_working()", interval);
			else if ($("#cdnmReplaceStatus").text() == "working") {
				var type = parseInt($("#moduleType").val());
				var fields = [];

				var fields_i = 0;
				$.each($(".moduleField"), function(key, element) {
					if ($(element).is(":checked")) {
						fields[fields_i] = $(element).val();
						fields_i++;
					}
				});
				fields_ajax = '';
				if (fields.length > 0) fields_ajax = '&fields=' + fields.join('|');
				
				var all_url = false;
				if ($("#big_query").is(":checked")) all_url = true;

				var category = ""; 
				$("#category :selected").each(function(i, sel){ 
					if (category == "")
						category += $(sel).val();
					else
						category += "," + $(sel).val();
				});
				if ($("#category_inverse").is(":checked"))
					var category_inverse = 1;
				else
					var category_inverse = 0;
				
				var get_replace_threads_url = "/engine/ajax/cdnm.php?action=get_replace_threads&type=" + type + "&threads=" + threads + "&category=" + category + "&category_inverse=" + category_inverse + fields_ajax;
				
				var last_post_id = parseInt($("#cdnmReplaceLastPostId").text());
				if (last_post_id)
					get_replace_threads_url += "&last_post_id=" + last_post_id;
				else {
					$("#cdnmReplaceStatusSuccess, #cdnmReplaceStatusWarning, #cdnmReplaceStatusDanger").text("0");
					statcdnm_ok = statcdnm_exist = statcdnm_error = 0;
				}
				
				if (threads) {
					$.ajax({
						url: get_replace_threads_url,
						dataType: "json",
						cache: false,
						success: function(data) {
							if (data.status == "ok") {
								if (data.count)
									$("#cdnmReplaceStatusInfo").text(data.count);
								
								if (all_url)
									cdnm_replace_all_working(data.next_posts_id);
								else {
									$.each(data.next_posts_id, function(i, val) {
										var num = i + 1;
										
										if (num == data.next_posts_id.length) {
											$("#cdnmReplaceLastPostId").text(val);
											
											if ($("#cdnmReplaceStatus").text() == "stop") {
												$(document).ajaxStop(function() {
													cdnm_replace_stop();
												});
											}
											
											setTimeout("cdnm_replace_working()", interval);
										}
										
										cdnm_replace_thread(val, fields);									
										
									});
								}

							}
							if (data.status == "end") {
								if (data.code && data.code == "#00")
									alert("По вашему критерию в базе не найдено ни одной записи.");
								else 
									alert("Проставление завершено.");
									threads_work = 0;
									cdnm_replace_cancel(true);
							}
							
						}
						/*
						error: function(data) {
							console.log(data.responseText);
							alert(data.responseText);
						}
						*/
					});
				}
			}
		}
		
		var threads_num = 0;
		function cdnm_replace_all_working(all_thread) {
			if ($("#cdnmReplaceStatus").text() == "cancel" || threads_num >= all_thread.length) {
				cdnm_replace_cancel(true);
			}
			
			// console.log(all_thread);
			// console.log(threads_work);
			// console.log(threads_num);
			// console.log($("#cdnmReplaceStatus").text());
				
			var threads = parseInt($("#moduleThreads").val());
			var interval = parseInt($("#moduleInterval").val());
			
			if (threads_work >= threads) {
				// console.log('1pause-'+threads_work);
				setTimeout(() => cdnm_replace_all_working(all_thread), interval);
			}
			else if ($("#cdnmReplaceStatus").text() == "working") {
				var fields = [];
				var fields_i = 0;
				$.each($(".moduleField"), function(key, element) {
					if ($(element).is(":checked")) {
						fields[fields_i] = $(element).val();
						fields_i++;
					}
				});

				for (num = threads_num; num < all_thread.length; num++) {
					cdnm_replace_thread(all_thread[num], fields);
					threads_num = num + 1;
					
			// console.log(num);
			// console.log(threads_num);
			// console.log(all_thread.length);
			
					if (threads_work >= threads) {
						// console.log('2pause-'+threads_work);
						setTimeout(() => cdnm_replace_all_working(all_thread), interval);
						break;
					}
					if (threads_num >= all_thread.length) {
						alert("Проставление завершено.");
						cdnm_replace_cancel(true);
					}
					if ($("#cdnmReplaceStatus").text() == "cancel") {
						cdnm_replace_cancel(true);
						break;
					}
				}
			}
		}
		
		function cdnm_replace_thread(post_id, fields) {
			if ($("#cdnmReplaceStatus").text() == "cancel")
				return;
			threads_work++;
			
			var replace_thread_url = "/engine/ajax/cdnm.php?action=replace_thread&post_id=" + post_id + "&fields=" + fields.join("|");

			var rewrite = parseInt($("#moduleRewrite").val());
			if (rewrite) {
				replace_thread_url += "&rewrite=" + rewrite;
			}
								
			$.ajax({
				url: replace_thread_url,
				dataType: "json",
				cache: false,
				success: function(data) {
					console.log(data);
					if (data.status == "ok") {
						statcdnm_ok++
						$("#cdnmReplaceStatusSuccess").text(statcdnm_ok);
					}
					if (data.status == "exist") {
						statcdnm_exist++;
						$("#cdnmReplaceStatusWarning").text(statcdnm_exist);
					}
					if (data.status == "error") {
						statcdnm_error++;
						$("#cdnmReplaceStatusDanger").text(statcdnm_error);
						
						$("#report").show();
						var out_base = ''
						for (var key in data.out_base) {
							var sep = '';
							if (out_base != '') sep = ' .:. ';
							
							out_base += sep + key + ' : "' + data.out_base[key]+'"';
						}
						$("#report table").append('<tbody><tr><td>'+data.log+'</td><tr><tr><td>'+out_base+'</td><tr></tbody>');
					}
					
					threads_work--;
					if ($("#cdnmReplaceStatus").text() == "cancel")
						return;
				}, //end succes
				error: function(data) {
					threads_work--;
					statcdnm_error++;
					$("#cdnmReplaceStatusDanger").text(statcdnm_error);
				}
			});
		}
		
		function cdnm_replace_stop() {
			setTimeout(function () {
				$("#cdnmReplaceBeginButton").show();
				$("#cdnmReplaceStopButton").removeAttr("disabled").hide().removeAttr("disabled");
			}, 0);
		}
		function cdnm_replace_cancel(end) {
			$("#cdnmReplaceStatus").text("cancel");
			threads_work, threads_num = 0;
			
			setTimeout(function () {
				$(".cdnm-replace-field").removeAttr("disabled");
				$(".moduleField").removeAttr("disabled");
				$("#category").prop("disabled", false).trigger("liszt:updated");
				
				$("#cdnmReplaceBeginButton").text("Начать").show();
				$("#cdnmReplaceStopButton, #cdnmReplaceCancelButton").hide();
				
				if (!end)
					$("#cdnmReplaceStatusSuccess, #cdnmReplaceStatusWarning, #cdnmReplaceStatusDanger").text("0");
				
				$("#cdnmReplaceLastPostId").text("");
			}, 0);
		}
		
		$("#moduleRewriteButtom").click(function() {
			var on = parseInt($(this).next("input").val());

			if (on) {
				$(this).removeClass("btn-success").addClass("btn-danger").text("НЕТ");
				$(this).next("input").val("0");
			} else {
				$(this).removeClass("btn-danger").addClass("btn-success").text("ДА");
				$(this).next("input").val("1");
			}
		});
		
		$("#cdnmReplaceBeginButton").click(function() {
			cdnm_replace_start();
		});
		$("#cdnmReplaceStopButton").click(function() {
			$("#cdnmReplaceStatus").text("stop");
			
			$("#cdnmReplaceStopButton").attr("disabled", "disabled");
		});
		$("#cdnmReplaceCancelButton").click(function() {
			cdnm_replace_cancel();
		});
	-->
	</script>
	
</body>
</html>