<?php 
/**
 * Система управления сайтом HostCMS v. 5.xx
 * Copyright © 2005-2010 ООО "Хостмэйк" (Hostmake LLC), http://www.hostcms.ru
 *
 * Обработчик добавления/редактирования модуля Центра администрирования.
 * 
 * Файл: /admin/modules/action/add_modules.php
 * 
 * @author Hostmake LLC
 * @version 5.x
 */
$module = new modules();

$modules_name = to_str($_REQUEST['modules_name']);

$modules_id = to_int($_REQUEST['modules_id']);

$modules_description = to_str($_REQUEST['modules_description']);

$modules_status = to_int($_REQUEST['modules_status']);

// Только латинские буквы и цифры
$modules_path = preg_replace('/[^a-zA-Z0-9\-_]/u', '', to_str($_REQUEST['modules_path']));

$modules_order = to_int($_REQUEST['modules_order']);

$modules_parameters = to_str($_REQUEST['modules_parameters']);

$type = $modules_id ? 1 : 0;

// вставляем в базу
$result_add = $module->insert_module($type, $modules_id, $modules_name, $modules_description, $modules_status, $modules_path, $modules_order);

// Произошла ошибка вставки в базу...
if (!$result_add)
{
	// Выводим сообщения об ошибке
	if ($result_add === false)
	{
		// В базе есть модуль с таким же путем
		show_error_message($GLOBALS['MSG_modules']['modules_add_error_path1']);
	}
	else
	{
		// Для модуля задан пустой путь
		show_error_message($GLOBALS['MSG_modules']['modules_add_error_path2']);
	}
	
	$error_add_edit_module = 1;
}
else
{
	// Проверяем существует ли директория для модуля
	$dir = CMS_FOLDER . 'modules/' . $modules_path;

	if (!is_dir($dir)) // Не существует папка модуля
	{
		if (@mkdir($dir, CHMOD))
		{
			$flag_success_make_dir = true;
		}
		else // Ошибка при создании папки модуля
		{
			$flag_success_make_dir = false;
		}
	}
	else // Существует папка модуля
	{
		$flag_success_make_dir = true;
	}

	// Папка модуля существует или создана
	if ($flag_success_make_dir)
	{
		// Не существует файл модуля
		if (!is_file($dir . '/' . $modules_path . '.php'))
		{
			// Создадем файл модуля
			if ($f = @fopen($dir . '/' . $modules_path . '.php', 'w'))
			{
				fclose($f);
				$flag_success_make_file = true;
			}
			else
			{
				$error_add_edit_module = 2; // Ошибка создания файла модуля
				$flag_success_make_file = false;
			}
		}
		else
		{
			$flag_success_make_file = true;
		}

		if ($flag_success_make_file)
		{
			// Не существует папки для параметоров
			if (!is_dir($dir . '/config/')) 
			{
				// Создаем папку для параметров
				if (!@mkdir($dir . '/config/', CHMOD))
				{
					$error_add_edit_module = 3; // Ошибка создания папки параметров
					$flag_success_make_param_dir = false;
				}
				else
				{
					$flag_success_make_param_dir = true;
				}
			}
			else
			{
				$flag_success_make_param_dir = true;
			}

			// Папка для параметров модуля существует или создана
			if ($flag_success_make_param_dir)
			{
				$fname = $dir . '/config/config.php';

				// Обновлять файл конфигурации модуля можно, когда: идет редактирование модуля ($rewrite = 1), когда идет добавление модуля ($rewrite = 0), но файла конфигурации модуля не существует (!is_file($fname) = true)
				if (($rewrite == 1) || (!is_file($fname) && $rewrite == 0))
				{
					// Если конфиг модуля был передан не пустым
					if (trim(to_str($modules_parameters)) != '')
					{
						if (!$handle = @fopen($fname, 'w')) #создаем файл
						{
							$error_add_edit_module = 4; // Невозможно открыть файл параметоров модуля
						}
						else // Записываем параметры модуля
						{
							if (fwrite($handle, $modules_parameters) === false)
							{
								$error_add_edit_module = 5; // Невозможно записать в файл параметров модуля
							}

							fclose($handle);

							// Устанавливаем права доступа к файлу
							@chmod($fname, CHMOD_FILE);
						}
					}
					else // Файл конфига модуля передан пустым
					{
						// Иначе файл конфига удаляем
						if (file_exists($fname))
						{
							@unlink($fname);
						}
					}
				}
			}
		}
	}
	else
	{
		$error_add_edit_module = 1; // Ошибка создания папки модуля
	}
	// Не было ошибки при добавлении/редактировании
	if (!isset($error_add_edit_module))
	{
		// Вызов метода модуля 
						
		// Выбираем данные о модуле
		$res = $module->GetModule($result_add);

		$modules_path = $res['modules_path'];

		// Подключаем файлы модуля
		$kernel = & singleton('kernel');
		$kernel->AddModule($modules_path, true);
		
		if (class_exists($modules_path) && !$modules_id)
		{
			$objectModule = new $modules_path();
			
			if (method_exists($objectModule, 'Install'))
			{
				// Вызываем метод при установке модуля
				$objectModule->Install();
			}
		}
		
		$admin_forms = new admin_forms();
		$window_id = $admin_forms->GetWindowId();
		?><script type="text/javascript">
		$.appendInput('<?php echo $window_id?>', 'EditAddModule', 'modules_id', '<?php echo $result_add?>');
		</script><?php
	}

	if ($type)
	{
		show_message($GLOBALS['MSG_modules']['modules_edit_success']);
	}
	else 
	{
		show_message($GLOBALS['MSG_modules']['modules_add_success']);
	}
}
?>