<?php
	set_time_limit(0);
	date_default_timezone_set("Europe/Moscow");
	//libxml_disable_entity_loader("true");
	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;
	}
	$buf = create_guid();
	$GUID = substr($buf, 1, 36);
	
	$out = '<?xml version="1.0" encoding="utf-8" ?>';
	$out .= '<InspectionAct xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="urn://x-artefacts-smev-gov-ru/supplementary/commons/1.0.1" xmlns:Doc1="urn://x-artefacts-rosreestr-ru/commons/complex-types/document/1.0.1" xmlns:CadEng1="urn://x-artefacts-rosreestr-ru/commons/complex-types/cadastral-engineer/1.0.2" GUID="'.$GUID.'" NameSoftware="Система Техплан-онлайн www.tehplan-online.ru" VersionSoftware="1.0" xmlns="urn://x-artefacts-rosreestr-ru/incoming/inspection/1.0.1">';
		$Date = explode(".", $_POST['Date']);
		$out .= '<Contractor Date="'.$Date[2].'-'.$Date[1].'-'.$Date[0].'">';
			$out .= '<tns:FamilyName>'.$_POST['Eng_Surname'].'</tns:FamilyName>';
			$out .= '<tns:FirstName>'.$_POST['Eng_Name'].'</tns:FirstName>';
			if($_POST['Eng_Patronimyc']){
				$out .= '<tns:Patronymic>'.$_POST['Eng_Patronimyc'].'</tns:Patronymic>';
			}
			$out .= '<CadEng1:NCertificate>'.$_POST['Eng_Cert'].'</CadEng1:NCertificate>';
			$out .= '<CadEng1:Telephone>'.$_POST['Eng_Tel'].'</CadEng1:Telephone>';
			$out .= '<CadEng1:Address>'.$_POST['Eng_Address'].'</CadEng1:Address>';
			if($_POST['Eng_Email']){
				$out .= '<CadEng1:Email>'.$_POST['Eng_Email'].'</CadEng1:Email>';
			}
			if($_POST['Eng_Org_Name'] && $_POST['Eng_Org_Address']){
				$out .= '<CadEng1:Organization>';
					$out .= '<CadEng1:Name>'.$_POST['Eng_Org_Name'].'</CadEng1:Name>';
					$out .= '<CadEng1:AddressOrganization>'.$_POST['Eng_Org_Address'].'</CadEng1:AddressOrganization>';
				$out .= '</CadEng1:Organization>';
			}
		$out .= '</Contractor>';
		$out .= '<Client>';
		if($_POST['Client_Type'] == "Person"){
			$out .= '<Person>';
				$out .= '<tns:FamilyName>'.$_POST['Client_Surname'].'</tns:FamilyName>';
				$out .= '<tns:FirstName>'.$_POST['Client_Name'].'</tns:FirstName>';
				if($_POST['Client_Patronimyc']){
					$out .= '<tns:Patronymic>'.$_POST['Client_Patronimyc'].'</tns:Patronymic>';
				}
				if($_POST['Client_SNILS']){
					$SNILS = array("-", " ");
					$out .= '<SNILS>'.str_replace($SNILS, "", $_POST['Client_SNILS']).'</SNILS>';
				}
			$out .= '</Person>';
		}
		if($_POST['Client_Type'] == "Organization"){
			$out .= '<Organization>';
				$out .= '<Name>'.$_POST['Client_Name'].'</Name>';
			$out .= '</Organization>';
		}
		if($_POST['Client_Type'] == "Governance"){
			$out .= '<Governance>';
				$out .= '<Name>'.$_POST['Client_Name'].'</Name>';
			$out .= '</Governance>';
		}
		if($_POST['Client_Type'] == "ForeignOrganization"){
			$out .= '<ForeignOrganization>';
				$out .= '<Name>'.$_POST['Client_Name'].'</Name>';
				$out .= '<Country>'.$_POST['Client_Country'].'</Country>';
			$out .= '</ForeignOrganization>';
		}
		$out .= '</Client>';
		$out .= '<Object>';
			$out .= '<CadastralNumber>'.$_POST['Obj_Cad_Num'].'</CadastralNumber>';
			$out .= '<ObjectType>'.$_POST['Obj_Type'].'</ObjectType>';
		$out .= '</Object>';
		$out .= '<Documents>';
		
		for($i = 1; $i <= $_POST['add_new_doc_']; $i++){
			$f = fopen("DocumentsTP.csv", "r");
			$data = fgetcsv($f, 1000, ';');
			for($j = 1;;$j++){
				if($data[0] == $_POST['select_doc_'.$i])
				{
					$docname = $data[1];
					break;
				}
				$data = fgetcsv($f, 1000, ';');
			}
			$Document[$i] = $docname;
			$out .= "<Document>\n"; //Реквизиты документов
				$out .= "<Doc1:CodeDocument>"; //Код документа
				if($_POST['select_doc_'.$i][0] == "8"){
					$_POST['select_doc_'.$i] = "00".$_POST['select_doc_'.$i];
				}
				$out .= $_POST['select_doc_'.$i];
				$out .= "</Doc1:CodeDocument>\n";
				$out .= "<Doc1:Name>"; //Наименование документа
				$out .= $docname;
				$out .= "</Doc1:Name>\n";
				if($_POST['Series'.$i] != ""){
					$out .= "<Doc1:Series>";
					$out .= $_POST['Series'.$i];
					$out .= "</Doc1:Series>\n";
				}
				if($_POST['Number'.$i] != ""){
					$out .= "<Doc1:Number>";
					$out .= $_POST['Number'.$i];
					$out .= "</Doc1:Number>\n";
				}
				$docd = explode(".", $_POST['Date'.$i]);
				$out .= "<Doc1:Date>";
				$out .= $docd[2]."-".$docd[1]."-".$docd[0];
				$out .= "</Doc1:Date>\n";
				if($_POST['IssueOrgan'.$i] != ""){
					$out .= "<Doc1:IssueOrgan>";
					$out .= $_POST['IssueOrgan'.$i];
					$out .= "</Doc1:IssueOrgan>\n";
				}
				if($_POST['Desc'.$i] != ""){
					$out .= "<Doc1:Desc>";
					$out .= $_POST['Desc'.$i];
					$out .= "</Doc1:Desc>\n";
				}
				if($_POST['Img_Name'.$i] != ""){
					if(strpos($_POST['Img_Name'.$i], "C:") !== false){
						$ImgName = explode('\\', $_POST['Img_Name'.$i]);
						$_POST['Img_Name'.$i] = $ImgName[2];
					}
					$out .= "<Doc1:AppliedFile Kind='01' Name = 'Images\\".$_POST['Img_Name'.$i]."'/>";
				}
			$out .= "</Document>\n";
		}
		$out .= '</Documents>';
		$out .= '<Conclusion>';
		$out .= $_POST['conclusion'];
		$out .= '</Conclusion>';
	$out .= '</InspectionAct>';

	//-------------------------------------------------------------------------------------
	
	$output = iconv("Windows-1251", "UTF-8", $out);
	mkdir("./inspection_act/".$GUID, 0777);
	$fout = fopen("./inspection_act/".$GUID."/act_".$GUID.".xml", "w");
	fwrite($fout, $output);
	fclose($fout);
	
	
	//-------------------------------------------------------------------------------------
	
	copy("./excel/Акт обследования.docx", "./inspection_act/".$GUID."/Акт обследования.docx");
	$zip = new ZipArchive();
	$zip->open("./inspection_act/".$GUID."/Акт обследования.docx");
	$xml = $zip->getFromName('word/document.xml');
	
	if($_POST['Obj_Type'] == "002001002000"){
		$Obj_Type = "здания";
	}
	if($_POST['Obj_Type'] == "002001003000"){
		$Obj_Type = "помещения";
	}
	if($_POST['Obj_Type'] == "002001004000"){
		$Obj_Type = "сооружения";
	}
	if($_POST['Obj_Type'] == "002001005000"){
		$Obj_Type = "объекта незавершенного строительства";
	}
	$xml = str_replace("objtype", iconv("Windows-1251", "UTF-8", $Obj_Type), $xml);
	
	$xml = str_replace("objcadnum", iconv("Windows-1251", "UTF-8", $_POST['Obj_Cad_Num']), $xml);
	
	if($_POST['Client_Type'] == "Person"){
		$Client = $_POST['Client_Surname']." ".$_POST['Client_Name'];
		if($_POST['Client_Patronimyc']){
			$Client .= " ".$_POST['Client_Patronimyc'];
		}
		if($_POST['Client_SNILS']){
			$Client .= ", СНИЛС ".$_POST['Client_SNILS'];
		}
	}
	if($_POST['Client_Type'] == "Organization" || $_POST['Client_Type'] == "Governance"){
		$Client = $_POST['Client_Name'];
	}
	if($_POST['Client_Type'] == "ForeignOrganization"){
		$Client = $_POST['Client_Name'].", страна регистрации - ".$_POST['Client_Country'];
	}
	$xml = str_replace("client", iconv("Windows-1251", "UTF-8", $Client), $xml);
	
	$Cad_Eng = $_POST['Eng_Surname']." ".$_POST['Eng_Name'];
	if($_POST['Eng_Patronimyc']){
		$Cad_Eng .= " ".$_POST['Eng_Patronimyc'];
	}
	$xml = str_replace("cadengname", iconv("Windows-1251", "UTF-8", $Cad_Eng), $xml);
	
	$xml = str_replace("cadengnumber", iconv("Windows-1251", "UTF-8", $_POST['Eng_Cert']), $xml);
	
	$xml = str_replace("cadengtel", iconv("Windows-1251", "UTF-8", $_POST['Eng_Tel']), $xml);
	
	$xml = str_replace("cadengaddress", iconv("Windows-1251", "UTF-8", $_POST['Eng_Address']), $xml);
	
	$xml = str_replace("cadengemail", iconv("Windows-1251", "UTF-8", $_POST['Eng_Email']), $xml);
	
	if($_POST['Eng_Org_Name']){
		$Org = $_POST['Eng_Org_Name'].", ".$_POST['Eng_Org_Address'];
	}
	$xml = str_replace("cadorgname", iconv("Windows-1251", "UTF-8", $Org), $xml);
	
	$xml = str_replace("actdate", iconv("Windows-1251", "UTF-8", $_POST['Date']), $xml);
	
	$Docs = "";
	for($i = 1; $i <= $_POST['add_new_doc_']; $i++){
		if($i > 1){
			$Docs .= ", ";
		}
		$Doc = $Document[$i]." от ".$_POST['Date'.$i]." г.";
		if($_POST['Series'.$i]){
			$Doc .= " серия ".$_POST['Series'.$i];
		}
		$Doc .= " № ".$_POST['Number'.$i];
		$Docs .= $Doc;
	}
	$xml = str_replace("documents", iconv("Windows-1251", "UTF-8", $Docs), $xml);
	
	$xml = str_replace("conclusion", iconv("Windows-1251", "UTF-8", $_POST['conclusion']), $xml);
	
	$zip->deleteName('word/document.xml');
	$zip->addFromString('word/document.xml', $xml);
	$zip->close();
	
	//-------------------------------------------------------------------------------------
	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("./inspection_act/".$GUID."/act_".$GUID.".xml");

	if(!$xml->schemaValidate('C:\InspectionAct_v01\InspectionAct\InspectionAct_v01.xsd')){
		print '<b>При проверке документа возникли ошибки:</b>';
		libxml_display_errors();
	}else{
	
		$zip = new ZipArchive(); 
		$zip->open("./inspection_act/".$GUID."/act_".$GUID.".zip", ZIPARCHIVE::CREATE);
		$filecontents = file_get_contents("./inspection_act/".$GUID."/act_".$GUID.".xml");
		$zip->addFromString("act_".$GUID.".xml", $filecontents);
		
		$zip->addEmptyDir("Images");
		
		$filecontents = file_get_contents("./inspection_act/".$GUID."/Акт обследования.docx");
		$filename = iconv('windows-1251', 'cp866', "Акт обследования.docx");
		$zip->addFromString($filename, $filecontents);
		
		$zip->close();
		
		$file = "./inspection_act/".$GUID."/act_".$GUID.".zip";
		$size = filesize($file);
		header("Content-type: application/zip");
		header("Content-Length: ".$size);
		header("Content-Disposition: attachment; filename=act_".$GUID.".zip");
		readfile($file);
	}
?>