<?php
	session_start();
	if(strpos($_SESSION['userdir'], "new_mp")){
	}else{
	$_SESSION['userdir'] = $_SESSION['userdir']."/new_mp";
	}
	function create_guid($namespace = ''){    
		static $guid = '';
		$uid = uniqid("", true);
		$data = $namespace;
		$data .= $_SERVER['REQUEST_TIME'];
		$data .= $_SERVER['HTTP_USER_AGENT'];
		$data .= $_SERVER['LOCAL_ADDR'];
		$data .= $_SERVER['LOCAL_PORT'];
		$data .= $_SERVER['REMOTE_ADDR'];
		$data .= $_SERVER['REMOTE_PORT'];
		$hash = strtoupper(hash('ripemd128', $uid . $guid . md5($data)));
		$guid = '{' .  
				substr($hash,  0,  8) .
				'-' .
				substr($hash,  8,  4) .
				'-' .
				substr($hash, 12,  4) .
				'-' .
				substr($hash, 16,  4) .
				'-' .
				substr($hash, 20, 12) .
				'}';
		return $guid;
	}
	set_time_limit(0);
	$buf = create_guid();
	$GUID = substr($buf, 1, 32);
	
	$date_e = explode(".", $_POST['Date_End']);
	
	
	//Формируем XML
	$out = "<?xml version='1.0' encoding='UTF-8'?>\n";
	$out .= iconv("Windows-1251", "UTF-8", "<!-- Изготовлено с помощью системы tehplan-online.ru -->\n");
	$out .= "<STD_MP>";
		$out .= "<eDocument CodeType = '014' Version = '03' GUID = '".$GUID."'>";
			if($_POST['Contractor'] == "Cadastral_Engineer"){
				$out .= iconv("Windows-1251", "UTF-8", "<Sender Name = '".$_POST['Cad_Org_name']."' Date_Upload = '".$date_e[2]."-".$date_e[1]."-".$date_e[0]."' FIO = '".$_POST['Cad_Eng_FIO']."' E_Mail = '".$_POST['Cad_Eng_E_mail']."' Telephone = '".$_POST['Cad_Eng_Telephone']."'>");
			}
			if($_POST['Contractor'] == "Cadastral_Organization"){
				$out .= iconv("Windows-1251", "UTF-8", "<Sender Name = '".$_POST['Cad_Org_name']."' Date_Upload = '".$date_e[2]."-".$date_e[1]."-".$date_e[0]."' FIO = '".$_POST['Cad_Org_Officer']."' E_Mail = '".$_POST['Cad_Org_E_mail']."' Telephone = '".$_POST['Cad_Org_Telephone']."'>");
			}
			$out .= "</Sender>";
			$out .= "<Recipient>";
			$out .= "</Recipient>";
		$out .= "</eDocument>";
		$out .= "<Package>";
			$out .= "<FormParcels>";
				
				for($i = 1; $i <= $_POST['numparcel']; $i++){
				
					$out .= iconv("Windows-1251", "UTF-8", "<NewParcel Name = '".$_POST['Parcel_Name']."' Method = '5' Definition = '".$_POST['ParcelDef'.$i]."'>");
						$out .= "<CadastralBlock>";
							$out .= $_POST['Cad_Number'];
						$out .= "</CadastralBlock>";
						
						if($_POST['numprovide'.$i] != 0){
							$out .= "<Providing_Pass_CadastralNumbers>";
							for($j = 1; $j <= $_POST['numprovide'.$i]; $j++){
								$out .= "<CadastralNumber>";
									$out .= iconv("Windows-1251", "UTF-8", $_POST['provide'.$i.'_'.$j]);
								$out .= "</CadastralNumber>";
							}
							$out .= "</Providing_Pass_CadastralNumbers>";
						}
						
						if($_POST['buildnum'.$i] != 0){
							$out .= "<Inner_CadastralNumbers>";
							for($j = 1; $j <= $_POST['buildnum'.$i]; $j++){
								$out .= "<CadastralNumber>";
									$out .= iconv("Windows-1251", "UTF-8", $_POST['buildnum'.$i.'_'.$j]);
								$out .= "</CadastralNumber>";
							}
							$out .= "</Inner_CadastralNumbers>";
						}
						
						$out .= "<Area>";
							$out .= "<Area>";
								$out .= iconv("Windows-1251", "UTF-8", $_POST['Area'.$i]);
							$out .= "</Area>";
							$out .= "<Unit>";
								$out .= iconv("Windows-1251", "UTF-8", "055");
							$out .= "</Unit>";
							$out .= "<Innccuracy>";
								$out .= iconv("Windows-1251", "UTF-8", $_POST['TArea'.$i]);
							$out .= "</Innccuracy>";
						$out .= "</Area>";
						
						$out .= "<Location>";
						$out .= "<Address>";
							if(!trim($_POST['OKATO']) == "")
							{
							$out .= "<Code_OKATO>";//ОКАТО
							$out .= $_POST['OKATO'];
							$out .= "</Code_OKATO>";
							}
							if(!trim($_POST['KLADR']) == "")
							{
							$out .= "<Code_KLADR>";//КЛАДР
							$out .= $_POST['KLADR'];
							$out .= "</Code_KLADR>";
							}
							if(!trim($_POST['Postal_Code']) == "")
							{
							$out .= "<Postal_Code>";//Почтовый индекс
							$out .= $_POST['Postal_Code'];
							$out .= "</Postal_Code>";
							}
							$out .= "<Region>";//Код региона
							$out .= $_POST['region'];
							$out .= "</Region>";
							$out .= iconv("Windows-1251", "UTF-8", "<District Name='".$_POST['District']."' Type ='".$_POST['District_type']."'>");//Район
							$out .= "</District>";
							if(isset($_POST['City'])){
							$out .= iconv("Windows-1251", "UTF-8", "<City Name='".$_POST['City']."' Type ='".$_POST['City_type']."'>");//Муниципальное образование
							$out .= "</City>";
							}
							if(isset($_POST['City_District'])){
							$out .= iconv("Windows-1251", "UTF-8", "<Urban_District Name='".$_POST['City_District']."' Type ='р-н'>");//Городской район
							$out .= "</Urban_District>";
							}
							if(isset($_POST['Soviet_Village'])){
							$out .= iconv("Windows-1251", "UTF-8", "<Soviet_Village Name='".$_POST['Soviet_Village']."' Type ='с/с'>");//Сельсовет
							$out .= "</Soviet_Village>";
							}
							if(isset($_POST['Locality'])){
							$out .= iconv("Windows-1251", "UTF-8", "<Locality Name='".$_POST['Locality']."' Type ='".$_POST['Locality_type']."'>");//Населенный пункт
							$out .= "</Locality>";
							}
							$out .= iconv("Windows-1251", "UTF-8", "<Street Name='".$_POST['Street_Name']."' Type ='".$_POST['Street_Type']."'>");//Улица
							$out .= "</Street>";
							if(!trim($_POST['Level1_Name']) == "")
							{
							$out .= iconv("Windows-1251", "UTF-8", "<Level1 Type='".$_POST['Level1_Type']."' Value ='".$_POST['Level1_Name']."'>");//Дом
							$out .= "</Level1>";
							}
							if(!trim($_POST['Level2_Name']) == "")
							{
							$out .= iconv("Windows-1251", "UTF-8", "<Level2 Type='".$_POST['Level2_Type']."' Value ='".$_POST['Level2_Name']."'>");//Корпус
							$out .= "</Level2>";
							}
							if(!trim($_POST['Level3_Name']) == "")
							{
							$out .= iconv("Windows-1251", "UTF-8", "<Level3 Type='".$_POST['Level3_Type']."' Value ='".$_POST['Level3_Name']."'>");//Строение
							$out .= "</Level3>";
							}
							if(!trim($_POST['Level4_Name']) == "")
							{
							$out .= iconv("Windows-1251", "UTF-8", "<Apartment Type='".$_POST['Level4_Type']."' Value ='".$_POST['Level4_Name']."'>");//Квартира
							$out .= "</Apartment>";
							}
							if(!trim($_POST['Other']) == "")
							{
							$out .= "<Other>";//Иное
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Other']);
							$out .= "</Other>";
							}
							if(!trim($_POST['address'.$i]) == "")
							{
							$out .= "<Note>";//Неформализованное описание
							$out .= iconv("Windows-1251", "UTF-8", $_POST['address'.$i]);
							$out .= "</Note>";
							}
						$out .= "</Address>";
						$out .= "</Location>";
						
						$out .= "<Category Category = '".$_POST['Category'.$i]."'>";
						$out .= "</Category>";
						
						$out .= "<Utilization Kind = '".$_POST['Util'.$i]."'";
						if(!trim($_POST['UtilDoc']) == ""){
							$out .= iconv("Windows-1251", "UTF-8", " ByDoc = '".$_POST['UtilDoc']."'");
						}
						$out .= "></Utilization>";
						
						if($_POST['numcont'.$i] == 1){
							
							$out .= iconv("Windows-1251", "UTF-8", "<Entity_Spatial Ent_Sys = 'ID_".$_POST['region']."'>");
							
								$out .= "<Spatial_Element>";
									for($k = 1; $k <= $_POST['numpoints'.$i.'_1']; $k++){
										$out .= iconv("Windows-1251", "UTF-8", "<Spelement_Unit Type_Unit = 'Точка' Su_Nmb = '".$k."'>");
											$out .= iconv("Windows-1251", "UTF-8", "<Ordinate X = '".$_POST['input_cx'.$i.'_1_'.$k]."' Y = '".$_POST['input_cy'.$i.'_1_'.$k]."' Ord_Nmb = '".$k."' Num_Geopoint = '".$_POST['input_number'.$i.'_1_'.$k]."' Delta_Geopoint = '".$_POST['input_precisionvalue'.$i.'_1']."'/>");
										$out .= "</Spelement_Unit>";
									}
								$out .= "</Spatial_Element>";
								
								if(isset($_POST['Length'.$i.'_1_1'])){
									$out .= "<Borders>";
									
									for($k = 1; $k <= $_POST['numpoints'.$i.'_1']; $k++){
										if($k == $_POST['numpoints'.$i.'_1']){
											$next = 1;
										}else{
											$next = $k + 1;
										}
										$out .= "<Border Spatial = '1' Point1 = '".$k."' Point2 = '".$next."'>";
											
											$out .= "<Edge>";
												$out .= "<Length>";
													$out .= $_POST['Length'.$i.'_1_'.$k];
												$out .= "</Length>";
											$out .= "</Edge>";
											
										$out .= "</Border>";
									}
									$out .= "</Borders>";
								}
							$out .= "</Entity_Spatial>";
							
						}else{
							$pointnum = 0;
							$out .= "<Contours>";
							
							for($j = 1; $j <= $_POST['numcont'.$i]; $j++){
							
								$out .= "<Contour Number_PP = '".$j."/".$_POST['numcont'.$i]."'>";
									$out .= "<Area>";
										$out .= "<Area>";
											$out .= $_POST['area'.$i.'_'.$j];
										$out .= "</Area>";
										$out .= "<Unit>";
											$out .= iconv("Windows-1251", "UTF-8", "055");
										$out .= "</Unit>";
										$out .= "<Innccuracy>";
											$out .= $_POST['deltaP'.$i.'_'.$j];
										$out .= "</Innccuracy>";
									$out .= "</Area>";
									$out .= iconv("Windows-1251", "UTF-8", "<Entity_Spatial Ent_Sys = 'ID_".$_POST['region']."'>");
										$out .= "<Spatial_Element>";
											
											for($k = 1; $k <= $_POST['numpoints'.$i.'_'.$j]; $k++){
												$pointnum++;
												if($k == 1){
													$first = $pointnum;
												}
												$out .= iconv("Windows-1251", "UTF-8", "<Spelement_Unit Type_Unit = 'Точка' Su_Nmb = '".$pointnum."'>");
													$out .= iconv("Windows-1251", "UTF-8", "<Ordinate X = '".$_POST['input_cx'.$i.'_'.$j.'_'.$k]."' Y = '".$_POST['input_cy'.$i.'_'.$j.'_'.$k]."' Ord_Nmb = '".$pointnum."' Num_Geopoint = '".$_POST['input_number'.$i.'_'.$j.'_'.$k]."' Delta_Geopoint = '".$_POST['input_precisionvalue'.$i.'_'.$j]."'/>");
												$out .= "</Spelement_Unit>";
											}
										
										$out .= "</Spatial_Element>";
										
										if(isset($_POST['Length'.$i.'_'.$j.'_1'])){
											$out .= "<Borders>";
											$counter = $first;
											for($k = 1; $k <= $_POST['numpoints'.$i.'_'.$j]; $k++){
												
												if($k == $_POST['numpoints'.$i.'_'.$j]){
													$next = $first;
												}else{
													$next = $counter + 1;
												}
												$out .= "<Border Spatial = '".$j."' Point1 = '".$counter."' Point2 = '".$next."'>";
													
													$out .= "<Edge>";
														$out .= "<Length>";
															$out .= $_POST['Length'.$i.'_'.$j.'_'.$k];
														$out .= "</Length>";
													$out .= "</Edge>";
													
												$out .= "</Border>";
												$counter++;
											}
											$out .= "</Borders>";
										}
									$out .= "</Entity_Spatial>";
									
								$out .= "</Contour>";
							
							}
							
							$out .= "</Contours>";
							
						}
						
						
					$out .= "</NewParcel>";
				
				}
				
				
			$out .= "</FormParcels>";
		$out .= "</Package>";
		
			$out .= "<Contractor Date = '".$date_e[2]."-".$date_e[1]."-".$date_e[0]."'>";//Кадастровый инженер
				if($_POST['Contractor'] == "Cadastral_Engineer"){
					$out .= "<Cadastral_Engineer>";//Физическое лицо
						$out .= "<FIO>";//Фамилия, Имя, Отчество
						$Cad_Eng_FIO = explode(" ", trim($_POST['Cad_Eng_FIO']));
							$out .= "<Surname>";//Фамилия
							$out .= iconv("Windows-1251", "UTF-8", $Cad_Eng_FIO[0]);
							$out .= "</Surname>";
							$out .= "<First>";//Имя
							$out .= iconv("Windows-1251", "UTF-8", $Cad_Eng_FIO[1]);
							$out .= "</First>";
							if(isset($Cad_Eng_FIO[2])){
							$out .= "<Patronymic>";//Отчество
							$out .= iconv("Windows-1251", "UTF-8", $Cad_Eng_FIO[2]);
							$out .= "</Patronymic>";
							}
						$out .= "</FIO>";
						$out .= "<N_Certificate>";//Номер квалификационного аттестата кадастрового инженера
						$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Eng_N_Certificate']);
						$out .= "</N_Certificate>";
						$out .= "<INN>";//ИНН
						$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Eng_INN']);
						$out .= "</INN>";
						$out .= "<Telephone>";//Контактный телефон
						$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Eng_Telephone']);
						$out .= "</Telephone>";
						$out .= "<E_mail>";//Электронный адрес
						$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Eng_E_mail']);
						$out .= "</E_mail>";
						$out .= "<Address>";//Адрес
						$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Eng_Address']);
						$out .= "</Address>";
						$out .= "<Organization>";
							$out .= "<Name>";//Название организации Юр. лица
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_name']);
							$out .= "</Name>";
							$out .= "<Code_OGRN>";//Код ОГРН
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_OGRN']);
							$out .= "</Code_OGRN>";
							$out .= "<Telephone>";//Контактный телефон
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_Telephone']);
							$out .= "</Telephone>";
							$out .= "<E_mail>";//Электронный адрес
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_E_mail']);
							$out .= "</E_mail>";
							$out .= "<Address>";//Адрес
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_Address']);
							$out .= "</Address>";
							//$out .= "<Document>";//Реквизиты документа, подтверждающего аккредитацию
							//$out .= $_POST['Cad_Org_Document'];
							//$out .= "</Document>";
						$out .= "</Organization>";
					$out .= "</Cadastral_Engineer>";
				}
				if($_POST['Contractor'] == "Cadastral_Organization"){
					$out .= "<Cadastral_Organization>";//Юридическое лицо
						$out .= "<Name>";//Название организации Юр. лица
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_name']);
							$out .= "</Name>";
							$out .= "<Code_OGRN>";//Код ОГРН
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_OGRN']);
							$out .= "</Code_OGRN>";
							$out .= "<Officer>";//Должностное лицо
							$Cad_Org_FIO = explode(" ", trim($_POST['Cad_Org_Officer']));
								$out .= "<Surname>";//Фамилия
								$out .= iconv("Windows-1251", "UTF-8", $Cad_Org_FIO[0]);
								$out .= "</Surname>";
								$out .= "<First>";//Имя
								$out .= iconv("Windows-1251", "UTF-8", $Cad_Org_FIO[1]);
								$out .= "</First>";
								if(isset($Cad_Org_FIO[2])){
								$out .= "<Patronymic>";//Отчество
								$out .= iconv("Windows-1251", "UTF-8", $Cad_Org_FIO[2]);
								$out .= "</Patronymic>";
								}
							$out .= "</Officer>";
							$out .= "<Telephone>";//Контактный телефон
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_Telephone']);
							$out .= "</Telephone>";
							$out .= "<E_mail>";//Электронный адрес
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_E_mail']);
							$out .= "</E_mail>";
							$out .= "<Address>";//Адрес
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_Address']);
							$out .= "</Address>";
							$out .= "<Document>";//Реквизиты документа, подтверждающего аккредитацию
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_Document']);
							$out .= "</Document>";
					$out .= "</Cadastral_Organization>";
				}
				
			$out .= "</Contractor>";
		
		$out .= "<Coord_Systems>";
			$out .= iconv("Windows-1251", "UTF-8", "<Coord_System Name = '".$_POST['coord_sys']."' Cs_Id = 'ID_".$_POST['region']."'>");
			$out .= "</Coord_System>";
		$out .= "</Coord_Systems>";
		
	$out .= "</STD_MP>";
	
	$fout = fopen($_SESSION['userdir']."/GKUZU_".$GUID.".xml", "w");
	fwrite($fout, $out);
	fclose($fout);
	
function libxml_display_error($error)
{
    $return = "<br/>\n";
    switch ($error->level) {
        case LIBXML_ERR_WARNING:
            $return .= "<b>Warning $error->code</b>: ";
            break;
        case LIBXML_ERR_ERROR:
            $return .= "<b>Error $error->code</b>: ";
            break;
        case LIBXML_ERR_FATAL:
            $return .= "<b>Fatal Error $error->code</b>: ";
            break;
    }
    $return .= trim($error->message);
    if ($error->file) {
        $return .=    " in <b>$error->file</b>";
    }
    $return .= " on line <b>$error->line</b>\n";

    return $return;
}

function libxml_display_errors() {
    $errors = libxml_get_errors();
    foreach ($errors as $error) {
        print libxml_display_error($error);
    }
    libxml_clear_errors();
}

// Enable user error handling
libxml_use_internal_errors(true);

$xml = new DOMDocument();
$xml->load($_SESSION['userdir']."/GKUZU_".$GUID.".xml");

if (!$xml->schemaValidate('C:\Разработка\doc_V03_STD_MP\V03_STD_МP\STD_MP.xsd')) {
    print '<b>DOMDocument::schemaValidate() Generated Errors!</b>';
    libxml_display_errors();
}else{
	$file=$_SESSION['userdir']."/GKUZU_".$GUID.".xml";
	header("Content-type: application/zip");
	header("Content-Disposition: attachment; filename=GKUZU_".$GUID.".xml");
	readfile($file);
}
?>