%PDF- %PDF-
Direktori : /home/bitrix/www/local/php_interface/include/pdf/ |
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; } }