<?php 
/**
 * Система управления сайтом HostCMS v. 5.xx
 * Copyright © 2005-2010 ООО "Хостмэйк" (Hostmake LLC), http://www.hostcms.ru
 *
 * Ajax загрузчик формы списка оптимизированных таблиц.
 * 
 * Файл: /admin/ExecSqlQuery/action/load_optimize_table.php
 * 
 * @author Hostmake LLC
 * @version 5.x
 */
function LoadAjaxData(&$admin_forms)
{
	$on_page = $admin_forms->GetOnPageCount();

	$page = to_int($_REQUEST['limit']);
	$begin = ($page == 0) ? 0 : ($page - 1) * $on_page;

	$param = array();

	$param['limit'][0] = array('begin' => $begin, 'count' => $on_page);

	$new_path_array[] = array (
	'link' => $admin_forms->GetHtmlCallDoLoadAjax($admin_forms->AAction, '', 0, 'load_data'),
	'onclick' => $admin_forms->GetOnClickCallDoLoadAjax($admin_forms->AAction, '', 0, 'load_data'),
	'name' => $GLOBALS['MSG_ExecSqlQuery']['form_title']);

	$new_path_array[] = array (
	'link' => $admin_forms->GetHtmlCallDoLoadAjax($admin_forms->AAction, '', 125, 'load_data'),
	'onclick' => $admin_forms->GetOnClickCallDoLoadAjax($admin_forms->AAction, '', 125, 'load_data'),
	'name' => $GLOBALS['MSG_ExecSqlQuery']['optimize_table_title']);

	$DataBase = & singleton('DataBase');

	$ExecSqlQuery = new ExecSqlQuery();

	// Получаем список всех таблиц БД
	$table_list = $ExecSqlQuery->GetTableNames();

	$query = "OPTIMIZE TABLE $table_list";
	$tables_resource = $DataBase->query($query);

	// Выборка нужных записей.
	$j = 1;

	while ($row = mysql_fetch_row($tables_resource))
	{
		// Bugfix with dbname.tablename
		$table_name = str_replace('.', '`.`', $row[0]);
		
		// Сбрасывать для этих таблиц автоинкремент нельзя
		if (mb_strpos($row[0], 'admin_forms_') === false
		&& mb_strpos($row[0], 'admin_language') === false
		&& mb_strpos($row[0], 'admin_words_') === false)
		{
			// Сбрасываем автоинкремент
			// Использовать `` нельзя, т.к. имя таблицы идет с именем базы!
			$DataBase->query("ALTER TABLE `{$table_name}` AUTO_INCREMENT = 1");
		}
		
		// Проверка на дублирующиеся индексы
		$index_resource = $DataBase->query("SHOW INDEX FROM `{$table_name}`");
		
		$aIndexes = array();
		while ($index_row = mysql_fetch_assoc($index_resource))
		{
			$aIndexes[$index_row['Key_name']][] = $index_row['Column_name'];
		}
		
	 	 //foreach ($aIndexes as $aIndexKey1 => $aIndexRow1)
		 while ($aIndexRow1 = array_shift($aIndexes))
	 	 {
            foreach ($aIndexes as $aIndexKey2 => $aIndexRow2)
            {
            	// Вычисляем пересечение массивов
            	$aArray_intersect = array_intersect($aIndexRow1, $aIndexRow2);
                
            	// Пересеченный массив идентичен двум исходным
            	if (count($aArray_intersect) == count($aIndexRow1)
            	&& count($aArray_intersect) == count($aIndexRow2))
                {
                    show_message(sprintf($GLOBALS['MSG_ExecSqlQuery']['drop_index'], $aIndexKey2, $row[0]));
                    $DataBase->query("ALTER TABLE `{$table_name}` DROP INDEX `{$aIndexKey2}`");
                }
            }
        }
		
		$param['data'][0][$j]['param_table_name'] = $row[0];
		$param['data'][0][$j]['param_operation_name'] = $row[1];
		$param['data'][0][$j]['param_message_type'] = $row[2];
		$param['data'][0][$j]['param_message_text'] = $row[3];

		$j++;
	}

	// Число нужных записей.
	$count = $j-1;

	$param['total_count'][] = $count;
	$param['current_page'] = $page;
	$param['on_page'] = $on_page;
	$param['path_array'] = $new_path_array;

	$param['title'] = $GLOBALS['MSG_ExecSqlQuery']['optimize_table_title'];

	$param['error'] = show_message($GLOBALS['MSG_ExecSqlQuery']['optimize_success']);

	return $param;
}

?>