Files
crm.clientright.ru/modules/PDFMaker2/views/SendEmail.php
Fedor ac7467f0b4 Major CRM updates: AI Assistant, Court Status API, S3 integration improvements, and extensive file storage system
- Added comprehensive AI Assistant system (aiassist/ directory):
  * Vector search and embedding capabilities
  * Typebot proxy integration
  * Elastic search functionality
  * Message classification and chat history
  * MCP proxy for external integrations

- Implemented Court Status API (GetCourtStatus.php):
  * Real-time court document status checking
  * Integration with external court systems
  * Comprehensive error handling and logging

- Enhanced S3 integration:
  * Improved file backup system with metadata
  * Batch processing capabilities
  * Enhanced error logging and recovery
  * Copy operations with URL fixing

- Added Telegram contact creation API
- Improved error logging across all modules
- Enhanced callback system for AI responses
- Extensive backup file storage with timestamps
- Updated documentation and README files

- File storage improvements:
  * Thousands of backup files with proper metadata
  * Fix operations for broken file references
  * Project-specific backup and recovery systems
  * Comprehensive file integrity checking

Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
2025-10-16 11:17:21 +03:00

268 lines
9.6 KiB
PHP

<?php
/* * *******************************************************************************
* The content of this file is subject to the PDF Maker license.
* ("License"); You may not use this file except in compliance with the License
* The Initial Developer of the Original Code is IT-Solutions4You s.r.o.
* Portions created by IT-Solutions4You s.r.o. are Copyright(C) IT-Solutions4You s.r.o.
* All Rights Reserved.
* ****************************************************************************** */
class PDFMaker_SendEmail_View extends Vtiger_ComposeEmail_View
{
/**
* @param Vtiger_Request $request
* @throws AppException
*/
public function checkPermission(Vtiger_Request $request)
{
if (!Users_Privileges_Model::isPermitted('Emails', 'EditView')) {
throw new AppException('LBL_PERMISSION_DENIED');
}
}
/**
* Function which will construct the compose email
* This will handle the case of attaching the invoice pdf as attachment
* @param Vtiger_Request $request
* @throws Exception
*/
public function composeMailData($request)
{
self::initializeRequest($request);
parent::composeMailData($request);
$viewer = $this->getViewer($request);
$mpdf = "";
/** @var PDFMaker_Module_Model $moduleModel */
$moduleModel = Vtiger_Module_Model::getInstance('PDFMaker');
$recordId = $request->get('record');
if ($request->has('record') && !$request->isEmpty('record')) {
$Records = array($recordId);
} else {
$Records = $moduleModel->getRecordsListFromRequest($request);
}
if (PDFMaker_Utils_Helper::count($Records) > 0) {
if ($request->has('language') && !$request->isEmpty('language')) {
$language = $request->get('language');
} else {
$language = Vtiger_Language_Handler::getLanguage();
}
$moduleName = $request->get('formodule');
$templateIds = $moduleModel->getRequestTemplatesIds($request);
$PDFMaker = new PDFMaker_PDFMaker_Model();
$name = $PDFMaker->GetPreparedMPDF($mpdf, $Records, $templateIds, $moduleName, $language);
$name = $PDFMaker->generate_cool_uri($name);
if (!empty($name)) {
$fileName = sprintf('%s.pdf', $name);
} else {
$fileName = sprintf('%s_%s.pdf', $moduleName, $recordId);
}
$current_user = $cu_model = Users_Record_Model::getCurrentUserModel();
if (!is_dir('storage/PDFMaker/')) {
mkdir('storage/PDFMaker/');
}
$path = sprintf('storage/PDFMaker/%s', $current_user->id);
if (!is_dir($path)) {
mkdir($path);
}
$pdfFilePath = $path . '/' . $fileName;
$mpdf->Output($pdfFilePath);
$attachmentDetails = array(
array(
'attachment' => $fileName,
'path' => $path,
'size' => filesize($pdfFilePath),
'type' => 'pdf',
'nondeletable' => true
)
);
$this->populateTo($request, $moduleName);
$viewer->assign('ATTACHMENTS', $attachmentDetails);
}
if ($recordId) {
$this->assignToEmail($request);
}
$viewer->view('ComposeEmailForm.tpl', 'Emails');
}
/**
* @param Vtiger_Request $request
*/
public function initializeRequest(Vtiger_Request $request)
{
if ($request->has('source_module') && !$request->has('fieldModule')) {
$request->set('fieldModule', $request->get('source_module'));
}
}
/**
* @param Vtiger_Request $request
* @param string $moduleName
* @throws Exception
*/
public function populateTo($request, $moduleName)
{
$viewer = $this->getViewer($request);
$inventoryRecordId = $request->get('record');
$recordModel = Vtiger_Record_Model::getInstanceById($inventoryRecordId, $moduleName);
$inventoryModule = $recordModel->getModule();
$inventotyfields = $inventoryModule->getFields();
$toEmailConsiderableFields = array('contact_id', 'account_id', 'vendor_id');
$db = PearDatabase::getInstance();
$to = array();
$to_info = array();
$toMailNamesList = array();
foreach ($toEmailConsiderableFields as $fieldName) {
if (!array_key_exists($fieldName, $inventotyfields)) {
continue;
}
$fieldModel = $inventotyfields[$fieldName];
if (!$fieldModel->isViewable()) {
continue;
}
$fieldValue = intval($recordModel->get($fieldName));
if (empty($fieldValue)) {
continue;
}
$referenceModule = Vtiger_Functions::getCRMRecordType($fieldValue);
$fieldLabel = decode_html(Vtiger_Util_Helper::getRecordName($fieldValue));
$referenceModuleModel = Vtiger_Module_Model::getInstance($referenceModule);
if (!$referenceModuleModel) {
continue;
}
if (isRecordExists($fieldValue)) {
$referenceRecordModel = Vtiger_Record_Model::getInstanceById($fieldValue, $referenceModule);
if ($referenceRecordModel->get('emailoptout')) {
continue;
}
}
$emailFields = $referenceModuleModel->getFieldsByType('email');
if (PDFMaker_Utils_Helper::count($emailFields) <= 0) {
continue;
}
$current_user = Users_Record_Model::getCurrentUserModel();
$queryGenerator = new QueryGenerator($referenceModule, $current_user);
$queryGenerator->setFields(array_keys($emailFields));
$query = $queryGenerator->getQuery();
$query .= ' AND crmid = ' . $fieldValue;
$result = $db->pquery($query, array());
$num_rows = $db->num_rows($result);
if ($num_rows <= 0) {
continue;
}
foreach ($emailFields as $fieldName => $emailFieldModel) {
$emailValue = $db->query_result($result, 0, $fieldName);
if (!empty($emailValue)) {
$to[] = $emailValue;
$to_info[$fieldValue][] = $emailValue;
$toMailNamesList[$fieldValue][] = array('label' => decode_html($fieldLabel), 'value' => $emailValue);
break;
}
}
if (!empty($to)) {
break;
}
}
$viewer->assign('TO', $to);
$viewer->assign('TOMAIL_NAMES_LIST', json_encode($toMailNamesList, JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP));
$viewer->assign('TOMAIL_INFO', $to_info);
}
/**
* @param Vtiger_Request $request
* @throws Exception
*/
public function assignToEmail(Vtiger_Request $request)
{
$viewer = $this->getViewer($request);
$recordId = $request->get('record');
$recordModule = $request->get('source_module');
$recordModel = Vtiger_Record_Model::getInstanceById($recordId, $recordModule);
if ($recordModel) {
$recordEmail = PDFMaker_Module_Model::getEmailFromRecord($recordModel);
$recordName = $recordModel->getName();
if (empty($recordEmail)) {
/** @var Vtiger_Field_Model $field */
foreach ($recordModel->getModule()->getFieldsByType('reference') as $field) {
$refFieldName = $field->get('name');
$refRecordId = $recordModel->get($refFieldName);
if ($recordModel->isEmpty($refFieldName)) {
continue;
}
foreach ($field->getReferenceList() as $refModuleName) {
$refRecordModel = Vtiger_Record_Model::getInstanceById($refRecordId, $refModuleName);
$refRecordEmail = PDFMaker_Module_Model::getEmailFromRecord($refRecordModel);
if (!empty($refRecordEmail)) {
$recordId = $refRecordId;
$recordEmail = $refRecordEmail;
$recordName = $refRecordModel->getName();
$recordModule = $refRecordModel->getModuleName();
break 2;
}
}
}
}
$to = array(
$recordEmail
);
$toInfo = array(
$recordId => array(
$recordEmail,
),
);
$toMailNamesList = array(
$recordId => array(
array(
'label' => decode_html($recordName),
'value' => $recordEmail,
),
),
);
$viewer->assign('TO', $to);
$viewer->assign('TOMAIL_NAMES_LIST', json_encode($toMailNamesList, JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP));
$viewer->assign('TOMAIL_INFO', $toInfo);
$viewer->assign('FIELD_MODULE', $recordModule);
}
}
}