%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;
}
}