<?php
/**
 * Система управления сайтом HostCMS v. 5.xx
 * Copyright © 2005-2010 ООО "Хостмэйк" (Hostmake LLC), http://www.hostcms.ru
 *
 * Модуль ExecSqlQuery.
 *
 * Файл: /admin/ExecSqlQuery/ExecSqlQuery.php
 *
 * @author Hostmake LLC
 * @version 5.x
 */
// Подключаем основные классы.
require_once('../../main_classes.php');

$admin = new Admin();

// Проверка авторизации пользователя.
$admin->admin_session_valid('ExecSqlQuery');

$kernel = & singleton('kernel');

// Инсталляция всех модулей ядра.
$kernel->LoadModules(!isset($_REQUEST['JsHttpRequest']));

// Инициализация CURRENT_SITE и констант.
$admin->admin_init();

if (!isset($_REQUEST['JsHttpRequest']))
{
	do_html_header_admin($GLOBALS['MSG_ExecSqlQuery']['header_admin_param']);
}

$admin_forms = & singleton('admin_forms');

$ExecSqlQuery = new ExecSqlQuery();

// Отображение форм
switch (to_int($_REQUEST['admin_forms_id']))
{
	default:
		{
			ob_start();

			// Нажали кнопку "Выполнить запрос"
			if (isset($_REQUEST['exec_sql']))
			{
				if (defined('READ_ONLY') && READ_ONLY)
				{
					$kernel->ReadMode();
				}
				else
				{
					$sql_query = '';

					// Получаем переданную информацию
					// Запрос введен в текстовое поле
					if (to_str($_REQUEST['sql_query']) != '')
					{
						$sql_query = to_str($_REQUEST['sql_query']);
						$f_textarea = 1;
					}
					else
					{
						// Выбран файл, начинаем работу с ним
						if (isset($_FILES['file_sql']['tmp_name']))
						{
							// Проверяем существование файла
							if (is_file($_FILES['file_sql']['tmp_name']))
							{
								$File = new File();
								// Получаем данные в строку запроса
								$sql_query = $File->GetFileContent($_FILES['file_sql']['tmp_name']);
							}
						}
					}

					$ExecSqlQuery = new ExecSqlQuery();

					// Выполняем запрос
					$count_query = $ExecSqlQuery->ExecDump($sql_query);
					
					if ($count_query != 0)
					{
						show_message(sprintf($GLOBALS['MSG_ExecSqlQuery']['success_message'], $count_query));
					}
					elseif (strlen(trim($sql_query)) == 0)
					{
						show_error_message($GLOBALS['MSG_ExecSqlQuery']['error_message']);
					}

					$DataBase = & singleton('DataBase');
					
					$result = $DataBase->result;

					$show_rows = 30;
					
					// Был 1 запрос и в результате выполнения дампа есть строки
					if (is_resource($result) && $count_query == 1 && mysql_num_rows($result) > 0)
					{
						$num_rows = mysql_num_rows($result);
						
						function ShowTableTitleTr($result)
						{
							// Возвращаемся к началу источника
							mysql_data_seek($result, 0);
							
							?><tr class="admin_table_title"><?php
							$row = mysql_fetch_assoc($result);
							
							if (is_array($row) && count($row) > 0)
							{
								foreach ($row as $key => $value)
								{
									?><td><?php echo $key?></td><?php
								}
							}
							?></tr><?php
						}
					
						?><div style="height: 200px; overflow: auto">
						<table class="admin_table sql_explain"><?php
						
						// Верхний вывод заголовка таблицы
						ShowTableTitleTr($result);
						
						// Возвращаемся к началу источника
						mysql_data_seek($result, 0);
						
						$url = & singleton('url');
						
						$position = 0;
						
						while ($row = mysql_fetch_assoc($result))
						{
							// Выводим N первых записей
							if ($position < $show_rows)
							{
								?><tr><?php
								if (is_array($row) && count($row) > 0)
								{
									foreach ($row as $value)
									{
										if (is_null($value))
										{
											$value = 'NULL';
										}
										?><td><?php echo $url->link_len(strip_tags($value), 100)?></td><?php
									}
								}
								?></tr><?php
							}
							else
							{
								break;
							}
							$position++;
						}
						
						if ($num_rows < $show_rows)
						{
							$show_rows = $num_rows; 
						}
						
						// Нижний вывод заголовка таблицы
						ShowTableTitleTr($result);
						
						?></table>
						</div>
						<p><?php echo sprintf($GLOBALS['MSG_ExecSqlQuery']['rows_count'], $num_rows, $show_rows)?></p><?php
					}
				
					// Была ошибка
					if ($count_query == 0 && isset($f_textarea)
					// или длина запроса меньше 10 Кб
					|| mb_strlen($sql_query) < 10240)
					{
						// Переменная для вывода текста запроса в случае ошибки
						$text_query_show = $sql_query;
					}
				}
			}

			// Получаем информацию о сайте
			$site = & singleton ('site');
			$result_site = $site->select_site(CURRENT_SITE);
			$row_site = mysql_fetch_assoc($result_site);

			$form_params['form_attribs']['method'] = 'post';
			$form_params['form_attribs']['action'] = '/admin/ExecSqlQuery/ExecSqlQuery.php';
			$form_params['title'] = $GLOBALS['MSG_ExecSqlQuery']['form_title'];

			// Формируем верхнее меню.
			$menu = array();
			$menu[$k = 0]['name'] = $GLOBALS['MSG_ExecSqlQuery']['table'];
			$menu[$k]['link'] = '';
			$menu[$k]['icon'] = '';

			$sub_menu = array();
			$sub_menu[$p = 0]['name'] = $GLOBALS['MSG_ExecSqlQuery']['optimize_table'];
			$sub_menu[$p]['link'] = $admin_forms->GetHtmlCallDoLoadAjax('/admin/ExecSqlQuery/ExecSqlQuery.php', '', 125, 'load_data');
			$sub_menu[$p]['onclick'] = $admin_forms->GetOnClickCallDoLoadAjax('/admin/ExecSqlQuery/ExecSqlQuery.php', '', 125, 'load_data');
			$sub_menu[$p]['icon'] = '/admin/images/database_refresh.gif';

			$sub_menu[++$p]['name'] = $GLOBALS['MSG_ExecSqlQuery']['repair_table'];
			$sub_menu[$p]['link'] = $admin_forms->GetHtmlCallDoLoadAjax('/admin/ExecSqlQuery/ExecSqlQuery.php', '', 126, 'load_data');
			$sub_menu[$p]['onclick'] = $admin_forms->GetOnClickCallDoLoadAjax('/admin/ExecSqlQuery/ExecSqlQuery.php', '', 126, 'load_data');
			$sub_menu[$p]['icon'] = '/admin/images/database_error.gif';

			// Добавляем подэлементы.
			$menu[$k]['sub_items'] = $sub_menu;

			$admin_forms_fields = new admin_forms_fields($form_params);

			$admin_forms_fields->AddMenu($menu);

			// Параметры.
			$tab_id = $admin_forms_fields->AddTab('');

			ob_start();

			show_message($GLOBALS['MSG_ExecSqlQuery']['form_warning']);

			$text1 = ob_get_clean();

			$param = array();
			$param['tab_id'] = $tab_id;
			$param['name'] = 'text';
			$param['caption'] = $text1;
			$param['type'] = 8; // Поле ввода.

			$admin_forms_fields->AddField($param);

			$param = array();
			$param['tab_id'] = $tab_id;
			$param['name'] = 'sql_query';
			$param['caption'] = $GLOBALS['MSG_ExecSqlQuery']['query_text'];
			$param['type'] = 5; // Поле ввода.
			$param['attributes']['cols'] = 40;
			$param['attributes']['rows'] = 15;
			$param['value'] = to_str($text_query_show);
			$admin_forms_fields->AddField($param);
			// Разделитель.
			$admin_forms_fields->AddSeparator($tab_id);

			$param = array();
			$param['tab_id'] = $tab_id;
			$param['name'] = 'file_sql';
			$param['caption'] = $GLOBALS['MSG_ExecSqlQuery']['load_file'];
			$param['type'] = 9; // файл
			$param['value'] = '';
			$param['div_attributes']['style'] = 'float: left; margin-top: 5px';
			$param['options'] = array();
			$param['options']['make_small_image_from_big_show'] = 0; // отображать ли checkbox с подписью "Создать малое изображение из большого" (1 -  отображать (по умолчанию), 0 - не отображать);
			$param['options']['make_small_image_from_big_checked'] = 0;
			$param['options']['load_small_image_show'] = 0;
			$param['options']['image_big_max_width'] = 0;
			$param['options']['image_big_max_height'] = 0;
			$param['options']['image_small_max_width'] = 0;
			$param['options']['image_small_max_height'] = 0;
			$param['options']['used_watermark_big_image_show'] = 0;
			$param['options']['used_watermark_big_image_checked'] = 0;
			$param['options']['watermark_position_x'] = 0;
			$param['options']['watermark_position_y'] = 0;
			$param['options']['used_watermark_small_image_show'] = 0;
			$param['options']['used_watermark_small_image_checked'] = 0;
			$param['options']['show_big_image_params'] = 0;

			$admin_forms_fields->AddField($param);
			// Разделитель.
			$admin_forms_fields->AddSeparator($tab_id);

			// Кнопка "Применить".
			$param = array();
			$param['name'] = 'exec_sql';
			$param['caption'] = $GLOBALS['MSG_ExecSqlQuery']['form_button_name'];
			$param['image'] = '/admin/images/send_email.gif';
			$param['attributes']['onclick'] = "res =confirm('{$GLOBALS['MSG_ExecSqlQuery']['form_warning2']}'); if (res){return SendForm('{$admin_forms_fields->GetWindowId()}', '{$admin_forms_fields->AAction}', '{$admin_forms_fields->AAdditionalParams}', this, ".to_int($_REQUEST['admin_forms_id']).", 'load_data', " . to_int($admin_forms_fields->form_params['current_page']) . ", " . to_int($admin_forms_fields->form_params['on_page']) . " )} else{ return false};";
			$param['attributes']['type'] = 'submit';
			$admin_forms_fields->AddButton($param);

			// Отображение формы.
			$admin_forms_fields->ShowForm();

			$form_html = ob_get_clean();

			if (!isset($_REQUEST['JsHttpRequest']))
			{
				?><div id="id_content"><?php echo $form_html?></div><?php
			}
			else
			{
				$JsHttpRequest = new JsHttpRequest('UTF-8');

				$GLOBALS['_RESULT'] = array(
				'error' => '',
				'form_html' => $form_html,
				'title' => $GLOBALS['MSG_ExecSqlQuery']['header_admin_param']);

				echo $JsHttpRequest->LOADER;
				exit();
			}

			break;
		}

case 125:
	{
		if (defined('READ_ONLY') && READ_ONLY)
		{
			$JsHttpRequest = new JsHttpRequest('UTF-8');

			ob_start();

			$kernel = & singleton('kernel');
			$kernel->ReadMode();

			$GLOBALS['_RESULT'] = array(
				'error' => ob_get_clean(),
				'title' => $GLOBALS['MSG_ExecSqlQuery']['header_admin_param']);

			echo $JsHttpRequest->LOADER;
			exit();

		}
		else
		{
			include(CMS_FOLDER . '/admin/ExecSqlQuery/action/load_optimize_table.php');
			$admin_forms->ProcessAjax(to_int($_REQUEST['admin_forms_id']));
		}
		break;
	}
case 126:
	{
		if (defined('READ_ONLY') && READ_ONLY)
		{
			$JsHttpRequest = new JsHttpRequest('UTF-8');

			ob_start();

			$kernel = & singleton('kernel');
			$kernel->ReadMode();

			$GLOBALS['_RESULT'] = array(
				'error' => ob_get_clean(),
				'title' => $GLOBALS['MSG_ExecSqlQuery']['header_admin_param']);

			echo $JsHttpRequest->LOADER;
			exit();
		}
		else
		{
			include(CMS_FOLDER . '/admin/ExecSqlQuery/action/load_repair_table.php');
			$admin_forms->ProcessAjax(to_int($_REQUEST['admin_forms_id']));
		}
		break;
	}
}

if (!isset($_REQUEST['JsHttpRequest']))
{
	do_html_footer_admin();
}
?>