<?php

/**
 * Автоматическая генерация содержимого функции install() для модулей
 *
 * @package HostCMS
 * @version 6.x
 * @author Hostmake LLC
 * @copyright © 2005-2017 ООО "Хостмэйк" (Hostmake LLC), http://www.hostcms.ru
 */

require_once(dirname(__FILE__) . '/' . 'bootstrap.php');

define('CURRENT_SITE', 1);

$oSite = Core_Entity::factory('Site', CURRENT_SITE);
Core::initConstants($oSite);

// Массив сообщений
$aMessages = array();

// Экранирование апострофа
function addslashesapostrophe($str)
{
	return str_replace("'", "\'", $str);
}

// Заполнение списка форм центра администрирования
function setAdminForms()
{
	$oAdmin_Forms = Core_Entity::factory('Admin_Form');
	$oAdmin_Forms
		->queryBuilder()
		->clearOrderBy()
		->orderBy('admin_forms.id', 'DESC');

	$aAdmin_Forms = $oAdmin_Forms->findAll(FALSE);

	foreach ($aAdmin_Forms as $oAdmin_Form)
	{
		$checked = Core_Array::getPost('admin_form_' . $oAdmin_Form->id) == $oAdmin_Form->id
			? 'checked="checked"'
			: '';

			$oAdmin_Word_Value = Core_Entity::factory('Admin_Word_Value')->getByAdmin_word_id($oAdmin_Form->admin_word_id);
			$sAdminFormName = !is_null($oAdmin_Word_Value) ? $oAdmin_Word_Value->name : '';

		?>

		<div class="checkbox">
			<label>
				<input type="checkbox" name="admin_form_<?php echo $oAdmin_Form->id?>" value="<?php echo $oAdmin_Form->id?>" <?php echo $checked?>/> <?php echo $sAdminFormName?> <span class="label label-default"><?php echo $oAdmin_Form->id?></span>
			</label>
		</div>

		<?php
	}
}

// Создание Admin_Word и его Admin_Word_Values
function createAdminWords($oAdmin_Word)
{
	$content = '
	$oAdmin_Word = Core_Entity::factory(\'Admin_Word\')->save();
	';

	$aAdmin_Word_Values = $oAdmin_Word->Admin_Word_Values->findAll();

	foreach ($aAdmin_Word_Values as $oAdmin_Word_Value)
	{
		$lng = strtoupper($oAdmin_Word_Value->Admin_Language->shortname);

		$content .= '
	$oAdmin_Word_Value_'. $lng . ' = Core_Entity::factory(\'Admin_Word_Value\');
	$oAdmin_Word_Value_'. $lng . '->admin_language_id = ' . $oAdmin_Word_Value->admin_language_id . ';
	$oAdmin_Word_Value_'. $lng . '->name = \'' . addslashesapostrophe($oAdmin_Word_Value->name) . '\';
	$oAdmin_Word->add($oAdmin_Word_Value_'. $lng . ');
		';
	}

	return $content;
}

// Создание
if (Core_Array::getPost('apply'))
{
	// Результат
	$isReady = 0;

	$sDir = CMS_FOLDER . 'create_install/';

	// Создаем директорию для файлов
	Core_File::mkdir($sDir, CHMOD, TRUE);

	$sFilename = 'install_' . date("Y_m_d_H_i_s") . '.php'; // НЕ УДАЛЯТЬ !!!!

	$content = '<?php
';

	$oAdmin_Forms = Core_Entity::factory('Admin_Form');
	$oAdmin_Forms
		->queryBuilder()
		->clearOrderBy()
		->orderBy('admin_forms.id', 'DESC');

	$aAdmin_Forms = $oAdmin_Forms->findAll(FALSE);

	foreach ($aAdmin_Forms as $oAdmin_Form)
	{
		// Указано включать в файл
		if (!is_null(Core_Array::getPost('admin_form_' . $oAdmin_Form->id)))
		{
			$content .= '$oAdmin_Form = Core_Entity::factory(\'Admin_Form\')->getByGuid(\'' . $oAdmin_Form->guid . '\');' . "\n";

			$content .= "\n" . 'if (is_null($oAdmin_Form))
{';

			$content .= '
	/**
	 * Создаем значения Admin_Word_Value
	 */';
			// Создаст Admin_Word и его Admin_Word_Values
			$content .= createAdminWords($oAdmin_Form->Admin_Word);

$content .= '
	/**
	 * Создаем форму
	 */
	$oAdmin_Form = Core_Entity::factory(\'Admin_Form\');
	$oAdmin_Form->admin_word_id = $oAdmin_Word->id;
	$oAdmin_Form->on_page = ' . $oAdmin_Form->on_page . ';
	$oAdmin_Form->key_field = \'' . $oAdmin_Form->key_field . '\';
	$oAdmin_Form->show_operations = ' . $oAdmin_Form->show_operations . ';
	$oAdmin_Form->show_group_operations = ' . $oAdmin_Form->show_group_operations . ';
	$oAdmin_Form->default_order_field = \'' . $oAdmin_Form->default_order_field . '\';
	$oAdmin_Form->default_order_direction = ' . $oAdmin_Form->default_order_direction . ';
	$oAdmin_Form->guid = \'' . $oAdmin_Form->guid . '\';
	$oAdmin_Form->save();';

			$aAdmin_Form_Fields = $oAdmin_Form->Admin_Form_Fields->findAll();

			foreach ($aAdmin_Form_Fields as $oAdmin_Form_Field)
			{
$content .= '

	/**
	 * Создаем поле формы
	 */';
				// Создаст Admin_Word и его Admin_Word_Values
				$content .= createAdminWords($oAdmin_Form_Field->Admin_Word);

$content .= '
	$oAdmin_Form_Field = Core_Entity::factory(\'Admin_Form_Field\');
	$oAdmin_Form_Field->admin_word_id = $oAdmin_Word->id;
	$oAdmin_Form_Field->name = \'' . addslashesapostrophe($oAdmin_Form_Field->name) . '\';
	$oAdmin_Form_Field->sorting = ' . $oAdmin_Form_Field->sorting . ';
	$oAdmin_Form_Field->ico = \'' . $oAdmin_Form_Field->ico . '\';
	$oAdmin_Form_Field->type = ' . $oAdmin_Form_Field->type . ';
	$oAdmin_Form_Field->format = \'' . $oAdmin_Form_Field->format . '\';
	$oAdmin_Form_Field->allow_sorting = ' . $oAdmin_Form_Field->allow_sorting . ';
	$oAdmin_Form_Field->allow_filter = ' . $oAdmin_Form_Field->allow_filter . ';
	$oAdmin_Form_Field->editable = ' . $oAdmin_Form_Field->editable . ';
	$oAdmin_Form_Field->filter_type = ' . $oAdmin_Form_Field->filter_type . ';
	$oAdmin_Form_Field->class = \'' . $oAdmin_Form_Field->class . '\';
	$oAdmin_Form_Field->width = \'' . $oAdmin_Form_Field->width . '\';
	$oAdmin_Form_Field->image = \'' . $oAdmin_Form_Field->image . '\';
	$oAdmin_Form_Field->link = \'' . addslashesapostrophe($oAdmin_Form_Field->link) . '\';
	$oAdmin_Form_Field->onclick = \'' . addslashesapostrophe($oAdmin_Form_Field->onclick) . '\';
	$oAdmin_Form_Field->list = \'' . $oAdmin_Form_Field->list . '\';
	$oAdmin_Form->add($oAdmin_Form_Field);';
			}

			$aAdmin_Form_Actions = $oAdmin_Form->Admin_Form_Actions->findAll();

			foreach ($aAdmin_Form_Actions as $oAdmin_Form_Action)
			{
$content .= '

	/**
	 * Создаем действие формы
	 */';
				// Создаст Admin_Word и его Admin_Word_Values
				$content .= createAdminWords($oAdmin_Form_Action->Admin_Word);

$content .= '
	$oAdmin_Form_Action = Core_Entity::factory(\'Admin_Form_Action\');
	$oAdmin_Form_Action->admin_word_id = $oAdmin_Word->id;
	$oAdmin_Form_Action->name = \'' . addslashesapostrophe($oAdmin_Form_Action->name) . '\';
	$oAdmin_Form_Action->picture = \'' . addslashesapostrophe($oAdmin_Form_Action->picture) . '\';
	$oAdmin_Form_Action->icon = \'' . $oAdmin_Form_Action->icon . '\';
	$oAdmin_Form_Action->color = \'' . $oAdmin_Form_Action->color . '\';
	$oAdmin_Form_Action->single = \'' . $oAdmin_Form_Action->single . '\';
	$oAdmin_Form_Action->group = \'' . $oAdmin_Form_Action->group . '\';
	$oAdmin_Form_Action->sorting = \'' . $oAdmin_Form_Action->sorting . '\';
	$oAdmin_Form_Action->dataset = \'' . $oAdmin_Form_Action->dataset . '\';
	$oAdmin_Form_Action->confirm = \'' . $oAdmin_Form_Action->confirm . '\';
	$oAdmin_Form->add($oAdmin_Form_Action);';
			}

$content .= '
}
' . "\n";
		}
	}

	$content .= '
?>';

	// Создаем файл .php
	Core_File::write($sDir . $sFilename, $content);

	$isReady = 1;
}
?>

<!doctype html>
<html lang="ru">
<head>
	<meta charset="UTF-8"/>
	<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
	<title>Создание содержимого функции install() для модулей</title>
	<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
	<!--[if lt IE 9]>
	<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
	<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
	<![endif]-->
</head>
<body>
<div class="container">
	<div class="page-header"  style="margin-bottom: 40px;">
		<img src="http://www.hostcms.ru/images/logo.gif" class="pull-right"/>
		<h1>Генерация функции install() для модулей</h1>
	</div>

	<?php
	if (Core_Array::getPost('apply'))
	{
		if ($isReady == 1)
		{
			$aMessages[] = array('type' => 'success', 'text' => "Создано");
		}
		else
		{
			$aMessages[] = array('type' => 'danger', 'text' => "В процесе возникла ошибка!");
		}
	}

	foreach ($aMessages as $aMessage)
	{
		?><div class="alert alert-<?php echo $aMessage['type']?>" role="alert"><?php echo $aMessage['text']?></div><?php
	}
	?>

	<form name="template-create" action="create_install.php" method="POST" enctype="multipart/form-data">
		<section  style="margin: 40px 0;">
			<p>Скрипт создаст папку create_install в корне. В ней будут создаваться файлы вида install_XXX, где XXX — дата генерации файла.</p>
		</section>

		<section class="form-group" style="margin-bottom: 40px;">
			<h2 class="h4">Выберите формы центра администрирования</h2>
			<?php setAdminForms()?>
		</section>

		<hr/>
		<p class="clearfix" style="margin-bottom: 100px;">
			<input type="submit" name="apply" class="btn btn-primary" value="Создать"/>
		</p>
	</form>
</div>
</body>
</html>