%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/bitrix/www/local/php_interface/include/pdf/
Upload File :
Create Path :
Current File : /home/bitrix/www/local/php_interface/include/pdf/pdf.php

<?php

class ProfilePDFCreator
{
	const CASTING_FEEDBACK_PDF = 'CASTING_FEEDBACK_PDF';
	const PDF_NAME_TEMPLATE = '#CODE#-zcard-port4lio.pdf';
	
	private $dompdf;
	private $profileCode;
	private $isTest;
	public $arFields;

	function __construct($profileCode, $isTest = false)
	{
		require_once $_SERVER['DOCUMENT_ROOT'].'/local/php_interface/dompdf/autoload.inc.php';
		$this->dompdf = new Dompdf\Dompdf();
		$this->dompdf->getOptions()->setIsRemoteEnabled(true);
		$this->profileCode = $profileCode;
		$this->isTest = $isTest;
		$this->loadProfile();
	}
	
	static function init()
	{
		AddEventHandler('main', 'OnBeforeEventSend', array('ProfilePDFCreator','OnBeforeEventSendHandler'));
	}
	
	static function OnBeforeEventSendHandler(&$arFields, &$eventMessage)
	{
		if ($eventMessage['EVENT_NAME'] == static::CASTING_FEEDBACK_PDF && strlen($arFields['PROFILE_CODE']) > 0)
		{
			$pdfCreator = new static($arFields['PROFILE_CODE']);
			if (($pdfFile = $pdfCreator->savePDF()) && file_exists($pdfFile))
			{
				$arFile = CFile::MakeFileArray($pdfFile);
				$arFile['name'] = str_replace('#CODE#', $arFields['PROFILE_CODE'], static::PDF_NAME_TEMPLATE);
				$arFile['MODULE_ID'] = 'casting_feedback';
				$eventMessage['FILE'][] = CFile::SaveFile($arFile, "casting_feedback");
			}
		}
	}
	
	function loadProfile()
	{
		$arUser = false;
		$dbProfile = CIBlockElement::GetList(Array(), Array("IBLOCK_ID"=>IBLOCK_PROFILE_ID, "CODE"=>$this->profileCode), false, false,
			array("IBLOCK_ID", "ID", "NAME", "CODE", "DETAIL_PICTURE", "DETAIL_TEXT", "IBLOCK_SECTION_ID", "PROPERTY_*"));

		if ($ob = $dbProfile->GetNextElement()){
			$ar_fields = $ob->GetFields();
			$pr_avatar = CFile::GetPath($ar_fields["DETAIL_PICTURE"]);
			$pr_code = SITE_DIR.$ar_fields['CODE']."/";
			$db_list = CIBlockSection::GetList(Array(),
				array("IBLOCK_ID"=>4, "DEPTH_LEVEL"=>1, "UF_PORTF_USR"=>$ar_fields['ID']), false,
				array("IBLOCK_ID", "ID", "UF_PORTF_USR")
			);

			if ($ar_result = $db_list->GetNext())
			{
				$sid = $ar_result["ID"];
				$count = 0;
				$r_port = CIBlockElement::GetList(array("RAND"=>"ASC"),
					array("IBLOCK_ID"=>4, "SECTION_ID"=>$sid, "INCLUDE_SUBSECTIONS"=>"Y", "!PROPERTY_ADULT"=>1), false, false,
					array("IBLOCK_ID", "ID", "NAME", "CODE", "DETAIL_PICTURE", "DETAIL_TEXT", "IBLOCK_SECTION_ID", "PROPERTY_*"));

				while ($ar_res_port = $r_port->GetNext()) {
					if ($ar_port_item = CFile::GetFileArray($ar_res_port['DETAIL_PICTURE']))
					{
						$ar_port_item['ASPECT_RATIO'] = $ar_port_item['HEIGHT'] / $ar_port_item['WIDTH'];
						$ar_port[] = $ar_port_item;
						if (++$count == 9) break;
					}
				};
			}

			$ar_props = $ob->GetProperties();

			$dbUser = CUser::GetByID($ar_props['ACCOUNT']['VALUE']);
			$arUser = $dbUser->Fetch();

			$pr_age = $ar_props["AGE"]["VALUE"];
			$pr_height = $ar_props["HEIGHT"]["VALUE"];
			$pr_weight = $ar_props["WEIGHT"]["VALUE"];
			$pr_breast = $ar_props["BREAST"]["VALUE"];
			$pr_waist = $ar_props["WAIST"]["VALUE"];
			$pr_hip = $ar_props["HIP"]["VALUE"];
			$region = '';
			if (isset($ar_props["REGION"]["VALUE"]) && intval($ar_props["REGION"]["VALUE"]) > 0){
				$arFilter = Array("ID"=>$ar_props["REGION"]["VALUE"]);
				$arSelect = Array("ID", "NAME", "IBLOCK_SECTION_ID", "PROPERTY_NAME_RU");
				$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
				if($ar_res = $res->GetNext()) {$nam_reg = (isset($ar_res["PROPERTY_NAME_RU_VALUE"]) && SITE_ID == "ru") ?
					$ar_res["PROPERTY_NAME_RU_VALUE"] : $ar_res["NAME"];  $region = $nam_reg; $s_ida=$ar_res["IBLOCK_SECTION_ID"];}
				if (isset($s_ida)){
					$arFilter = Array("ID"=>$s_ida, "IBLOCK_ID"=>6);
					$arSelect = Array("ID", "NAME",  "IBLOCK_SECTION_ID", "UF_NAME_RU");
					$res = CIBlockSection::GetList(Array(), $arFilter, false, $arSelect, false);
					if($ar_res = $res->GetNext()) {$s_idb=$ar_res["IBLOCK_SECTION_ID"]; if (intval($s_idb) == 31){$nam_reg =
						(isset($ar_res["UF_NAME_RU"]) && SITE_ID == "ru") ? $ar_res["UF_NAME_RU"] : $ar_res["NAME"];  $region = $region.", ".$nam_reg;};}
				};
				if (isset($s_idb)){
					$arFilter = Array("ID"=>$s_idb, "IBLOCK_ID"=>6);
					$arSelect = Array("ID", "NAME", "IBLOCK_SECTION_ID", "UF_NAME_RU");
					$res = CIBlockSection::GetList(Array(), $arFilter, false, $arSelect, false);
					if($ar_res = $res->GetNext()) {$nam_reg = (isset($ar_res["UF_NAME_RU"]) && SITE_ID == "ru") ?
						$ar_res["UF_NAME_RU"] : $ar_res["NAME"];  $region = $region.", ".$nam_reg; $s_idc=$ar_res["IBLOCK_SECTION_ID"];}
				};
			}
		}

		// Сортировка фотографий по соотношению сторон
		usort($ar_port, function($a, $b){
			return ($a['ASPECT_RATIO'] < $b['ASPECT_RATIO']) ? 1 : -1;
		});

		$arSort = array(
			array(0,5,6),
			array(1,4,7),
			array(2,3,8)
		);

		$arPortfolio = array();

		foreach($arSort as $colIdx => $arCol)
		{
			$arPortfolio[$colIdx]['RATION'] = 0;
			foreach($arCol as $i)
			{
				if (isset($ar_port[$i]) && (($arPortfolio[$colIdx]['RATION'] + $ar_port[$i]['ASPECT_RATIO']) < 3.25))
				{
					$arPortfolio[$colIdx]['ITEMS'][] = $ar_port[$i];
					$arPortfolio[$colIdx]['RATION'] += $ar_port[$i]['ASPECT_RATIO'];
				}

			}
		}

		foreach($arPortfolio as &$arCol) shuffle($arCol['ITEMS']);

		usort($arPortfolio, function($a,$b){
			return ($a['RATION'] < $b['RATION']) ? -1 : 1;
		});

		array_push($arPortfolio, array_shift($arPortfolio));

		$this->arFields = array(
			"PROFILE_NAME" => $arUser?($arUser['NAME'].' '.$arUser['LAST_NAME']):'',
			"PROFILE_AVATAR" => isset($pr_avatar)?$pr_avatar:'',
			"PROFILE_AGE" => isset($pr_age)?$pr_age:'',
			"PROFILE_REGION" => isset($region)?$region:'',
			"PROFILE_PHONE" => $arUser?$arUser["PERSONAL_MOBILE"]:'',
			"PROFILE_EMAIL" => $arUser?$arUser["PERSONAL_MAILBOX"]:'',
			"PROFILE_HEIGHT" => isset($pr_height)?$pr_height:'',
			"PROFILE_WEIGHT" => isset($pr_weight)?$pr_weight:'',
			"PROFILE_BREAST" => isset($pr_breast)?$pr_breast:'',
			"PROFILE_WAIST" => isset($pr_waist)?$pr_waist:'',
			"PROFILE_HIP" => isset($pr_hip)?$pr_hip:'',
			"FEEDBACK_URL" => isset($pr_code)?$pr_code:'',
			"PROFILE_PORTFOLIO" => $arPortfolio,
		);
	}

	function createHTML()
	{
		ob_start();
		include(dirname(__FILE__).'/html.php');
		$html = ob_get_contents();
		ob_end_clean();
		return $html;
	}
	
	/**
	 * Генерирует и сохраняет PDF во временный файл
	 * @return string Путь к файлу
	 */
	function savePDF()
	{
		$this->dompdf->loadHtml($this->createHTML());
		$this->dompdf->setPaper('A4');
		$this->dompdf->render();
		$pdf_content = $this->dompdf->output();
		$filename = tempnam('/tmp','PDF');
		file_put_contents($filename, $pdf_content);
		return $filename;
	}
	
	function createPDF()
	{
		$this->dompdf->loadHtml($this->createHTML());
		$this->dompdf->setPaper('A4');
		$this->dompdf->render();
		$pdf_content = $this->dompdf->output();

		header('Content-Type: application/pdf');
		header('Content-Disposition: inline; filename="profile.pdf"');
		header('Cache-Control: private, max-age=0, must-revalidate');
		header('Pragma: public');

		echo $pdf_content;
	}
}

Zerion Mini Shell 1.0