Joywork/ajax/send_pdf.php

283 lines
10 KiB
PHP
Raw Normal View History

2026-05-22 20:21:54 +02:00
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/config.php");
ini_set('memory_limit', '8192M');
//error_reporting(E_ALL | E_STRICT);
//ini_set('display_errors', 1);
// hide_client_contacts: блокируем РЕАЛЬНУЮ отправку (mail/whatsapp/telegram) PDF-презентации.
// Генерацию PDF и ссылки (без отправки) разрешаем.
$_postSendType = isset($_POST['send_type']) ? $_POST['send_type'] : '';
$_isActualSend = in_array($_postSendType, ['mail', 'whatsapp', 'telegram'], true);
if ($_isActualSend
&& function_exists('should_hide_contacts_for_current_user')
&& should_hide_contacts_for_current_user()
) {
http_response_code(403);
echo json_encode([
'error' => 'hide_client_contacts',
'message' => 'Отправка PDF-презентаций через E-mail/WhatsApp/Telegram недоступна: контакты клиентов скрыты.'
]);
exit;
}
if($_POST['clients'])
{
$user = new User();
$user->get($_SESSION['id']);
if($user->agencyName) {
$title = 'Агентство недвижимости '.$user->agencyName;
} else {
$title = $user->fio;
}
if($user->phoneAgency) {
$phone = $user->phoneAgency;
} else {
$phone = $user->phone;
}
if($_SESSION['agency']) {
$manager = trim($user->last_name . ' ' . $user->first_name . ' ' . $user->middle_name);
} else {
$manager = $_SESSION['fio'];
}
$send_type = 0;
if(!empty($SEND_TYPE_PDF[$_POST['send_type']])){
$send_type = $SEND_TYPE_PDF[$_POST['send_type']];
}
$theme = !empty($_POST['theme']) ? $_POST['theme'] : "Презентации объектов недвижимости";
$txt = !empty($_POST['txt']) ? str_replace("\n","<br>",$_POST['txt']) : "Уважаемый клиент, отправляю Вам варианты объектов недвижимости. С удовольствием отвечу на ваши вопросы.";
$footer = "<br> $manager<br> ".$user->phone."<br> ".$user->email;
if ($_SESSION['individual'] == 0) {
$footer .= "<br> $title<br>$phone";
}
$pdfs = $adresses = array();
$clientIds = $_POST['clients'];
$requestId = isset($_POST['request']) ? (int)$_POST['request'] : null;
$userId = $_SESSION['id'];
$toSend = $_SESSION['to_send'];
$toSendNewBuildings = $_SESSION['to_send_newbuilding'];
$toSendComplexes = $_SESSION['to_send_complexes'];
$toSendASFilter = $_SESSION['to_send_asfilter'];
$_SESSION['to_send'] = array();
$_SESSION['to_send_newbuilding'] = array();
$_SESSION['to_send_complexes'] = array();
$_SESSION['to_send_asfilter'] = array();
session_write_close();
$closes_contact = array();
if($send_type == 0){
$closes_contact = json_decode($_POST['closes_contact'], true);
}
$prices = array();
if(isset($_POST['priсes'])){
$prices = json_decode($_POST['priсes'], true);
}
$hideAddresses = [];
if(isset($_POST['address'])){
$hideAddresses = json_decode($_POST['address'], true);
}
$result = SelectelApi::getTokenAndUrl();
$token = $result[0];
$storageUrl = $result[1];
foreach($toSend as $sts)
{
$pdfs[] = $_SERVER['DOCUMENT_ROOT']."/pdf/$sts-$userId.pdf";
$sql = "SELECT nazv, adres, phone, sobstv FROM objects WHERE id=$sts";
$rez = mysql_query($sql);
$obj = mysql_fetch_assoc($rez);
//Доп обработка
if(!$obj['etazh']) $obj['etazh']=Filter::getFloorFromName($obj['nazv'],true);
else Filter::getFloorFromName($obj['nazv'],true);
if(!$obj['etazh_iz']) $obj['etazh_iz']=Filter::getMaxFloorFromName($obj['nazv'],true);
else Filter::getMaxFloorFromName($obj['nazv'],true);
Filter::getSpaceFromName($obj['nazv'],true);
$obj['nazv']=Filter::name($obj['nazv']);
$adresses[] = $obj['nazv'];
if(isset($hideAddresses[$sts]) && $hideAddresses[$sts] == 1){
$obj['adres'] = '';
}
$sql = "INSERT INTO archive(nazv, adres, phone, sobstv, id_obj) VALUES('$obj[nazv]', '$obj[adres]', '$obj[phone]', '$obj[sobstv]', '$sts')";
mysql_query($sql);
foreach ($clientIds as $id_client) {
$close_contact = 0;
if(isset($closes_contact[$sts])){
$close_contact = $closes_contact[$sts];
}
$cena = 0;
if(isset($prices[$sts])){
$cena = $prices[$sts];
}
$urlToSave = "/pdf/$sts-$userId.pdf";
//сохраняем ПДФ в селектел
if ($token && $storageUrl) {
$fullPath = $_SERVER['DOCUMENT_ROOT']."/pdf/$sts-$userId.pdf";
$name = "$sts-$userId.pdf";
$x = mb_substr($name,0,1);
$y = mb_substr($name,1,1);
$z = mb_substr($name,2,1);
$dstFile = "$x/$y/$z/$name";
$r = SelectelApi::uploadPdfFile($storageUrl, $token, $fullPath, $dstFile);
if ($r) {
//заменяем путь на новый
$urlToSave = "https://pdf.joywork.ru/" . $dstFile;
}
}
$sql = "INSERT INTO sended_pdf(id_agent, id_object, date_send, id_client, nazv, path, close_contact, send_type, new_price, id_request) VALUES('$userId', '$sts', NOW(), '$id_client', '$obj[nazv] $obj[adres]', '$urlToSave', $close_contact, $send_type, '$cena', '$requestId')";
mysql_query($sql);
$sql = "UPDATE clients SET stage = 3 WHERE id = $id_client";
mysql_query($sql);
}
if (count($toSendASFilter) > 0) {
$asfilter = new AutoSearch();
foreach ($toSendASFilter as $filter_id => $object_id) {
if (!is_null($filter_id) && !is_null($object_id))
$asfilter->addObjectToSended($filter_id, $object_id);
}
}
}
foreach($toSendNewBuildings as $sts)
{
$linkUrl = "https://joywork.ru/newbuilding-view.php?id=$sts&token=".md5($userId);
$sql = "SELECT a.id, a.number, b.name, b.address FROM apartments a, blocks b WHERE b.id = a.block_id AND a.id='$sts'";
$rez = mysql_query($sql);
if (mysql_num_rows($rez) > 0) {
$objts = mysql_fetch_assoc($rez);
if(isset($hideAddresses[$sts]) && $hideAddresses[$sts] == 1){
$objts['address'] = '';
}
$nazv = "Квартира №$objts[number] в комплексе $objts[name]";
if($send_type == 0) {
$txt .= "<br/><a href='$linkUrl' target='_blank'>$nazv</a><br/>";
} else {
$txt .= $nazv . " " . $linkUrl;
}
foreach ($clientIds as $id_client) {
$sql = "INSERT INTO sended_pdf_newbuildings(id_agent, id_object, date_send, id_client, nazv, path, send_type, id_request) VALUES('$userId', '$sts', NOW(), '$id_client', '$nazv $objts[address]', '$linkUrl', $send_type, '$requestId')";
mysql_query($sql);
}
if (count($toSendASFilter) > 0) {
$asfilter = new AutoSearch();
foreach ($toSendASFilter as $filter_id => $object_id) {
if (!is_null($filter_id) && !is_null($object_id))
$asfilter->addObjectToSended($filter_id, $object_id);
}
}
}
}
foreach($toSendComplexes as $tsc)
{
$linkUrl = "https://joywork.ru/newbuilding-view.php?id=$sts&token=".md5($userId);
// $sql = "SELECT a.id, a.number, b.name, b.address FROM apartments a, blocks b WHERE b.id = a.block_id AND a.id='$tsc'";
$sql = "SELECT cr.id as id, cl.name as complex_name, cl.id as complex_id, cr.type as type, cr.number as number, ca.address as address FROM complex_list cl
JOIN complex_houses ch ON ch.complex_id = cl.id
JOIN complex_entrances ce ON ce.complex_house_id = ch.id
JOIN complex_floors cf ON cf.complex_entrance_id = ce.id
JOIN complex_rooms cr ON cr.floor_id = cf.id
LEFT JOIN complex_address ca on ca.complex_id = cl.id
where cr.id = $ts
";
$rez = mysql_query($sql);
if (mysql_num_rows($rez) > 0) {
$objts = mysql_fetch_assoc($rez);
if(isset($hideAddresses[$tsc]) && $hideAddresses[$tsc] == 1){
$objts['address'] = '';
// var_dump($objts);die;
}
$nazv = "Квартира №$objts[number] в комплексе $objts[name]";
if($send_type == 0) {
$txt .= "<br/><a href='$linkUrl' target='_blank'>$nazv</a><br/>";
} else {
$txt .= $nazv . " " . $linkUrl;
}
foreach ($clientIds as $id_client) {
$sql = "INSERT INTO sended_pdf_newbuildings(id_agent, id_object, date_send, id_client, nazv, path, send_type, id_request) VALUES('$userId', '$sts', NOW(), '$id_client', '$nazv $objts[address]', '$linkUrl', $send_type, '$requestId')";
mysql_query($sql);
}
if (count($toSendASFilter) > 0) {
$asfilter = new AutoSearch();
foreach ($toSendASFilter as $filter_id => $object_id) {
if (!is_null($filter_id) && !is_null($object_id))
$asfilter->addObjectToSended($filter_id, $object_id);
}
}
}
}
$txt .= $footer;
for($i=0; $i < count($pdfs); $i++)
{
$num = $i+1;
$pis[$x][] = $pdfs[$i];
$addr[$x][] = $adresses[$i];
if($num % 5 == 0) $x++;
}
foreach ($clientIds as $clientId) {
$mail = mysql_result(mysql_query("SELECT email FROM clients WHERE deleted <> 1 AND id = $clientId"),0);
if (isset($pis)) {
foreach ($pis as $x => $pismo) {
mailClientByIdWithConfirm($userId, trim($mail), $theme, $txt, $pismo, $addr[$x]);
if ($token && $storageUrl) {
foreach ($pismo as $i => $path) {
//удаляем файл с локального сервера
unlink($path);
}
}
sleep(1);
}
} else {
mailClientByIdWithConfirm($userId, trim($mail), $theme, $txt, [], []);
}
}
}