src/EventSubscriber/ReportEventListener.php line 27

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use Pimcore\Db;
  4. use Pimcore\Mail;
  5. use Knp\Snappy\Pdf;
  6. use Knp\Snappy\Image;
  7. use Pimcore\Model\Asset;
  8. use App\Service\EmailService;
  9. use App\Service\TwitterService;
  10. use App\Service\NotificationService;
  11. use Pimcore\Model\DataObject\Report;
  12. use Pimcore\Model\DataObject\Customer;
  13. use Pimcore\Event\Model\DataObjectEvent;
  14. use Symfony\Component\Templating\EngineInterface;
  15. use App\C2IntegrationBundle\Service\C2Service;
  16. use Symfony\Contracts\Translation\TranslatorInterface;
  17. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  18. class ReportEventListener
  19. {
  20.     private $c2Service;
  21.     public function __construct(protected NotificationService $notificationService, private EmailService $emailService, private Pdf $snappy, private TwitterService $twitterService, private Image $snappyImage, private EngineInterface $twig)
  22.     {
  23.         $this->c2Service = new C2Service();
  24.     }
  25.     public function onObjectPublish(DataObjectEvent $event)
  26.     {
  27.         $object $event->getObject();
  28.         $tokens = [];
  29.         if (($object instanceof Report) && ($object->isPublished(true)) && ($object->getIsMannedReport() !== true)) {
  30.             $reportType $object->getReportType()?->getName() ?? 'Historical Report';
  31.             $organizations $object->getOrganization();
  32.             if ($organizations) {
  33.                 foreach ($organizations as $organization) {
  34.                     $users Customer::getByOrganization($organization);
  35.                     foreach ($users as $user) {
  36.                         if ($user?->getDeviceToken()) {
  37.                             $tokens[] = $user->getDeviceToken();
  38.                         }
  39.                     }
  40.                 }
  41.             } else {
  42.                 $db Db::get();
  43.                 $select $db->createQueryBuilder();
  44.                 $select->select('customer.deviceToken');
  45.                 $select->from('object_query_customer''customer');
  46.                 $select->innerJoin('customer''object_query_user_role''userRole''userRole.oo_id = customer.role__id');
  47.                 $select->andWhere("userRole.name = " $db->quote(USER_ROLES['CLIENT_ADMIN']) . " OR userRole.name = " $db->quote(USER_ROLES['CLIENT_USER']));
  48.                 $select->andWhere("customer.deviceToken != " $db->quote(null));
  49.                 $result $db->fetchAllAssociative($select);
  50.                 $deviceTokens array_column($result'deviceToken');
  51.                 foreach ($deviceTokens as $user) {
  52.                     $tokens[] = $user;
  53.                 }
  54.             }
  55.             if (!empty($tokens)) {
  56.                 $this->notificationService->sendNotification('Report''NCM Has published ' $reportType$tokens);
  57.             }
  58.             if ($reportType != 'Historical Report') {
  59.                 // $fileName = '_custom_weather_report.pdf';
  60.                 // $reportPath = '/report/ReportPdf';
  61.                 // if ($object->getReportType()?->getKey() == 'MannForecastReport') {
  62.                 //     $template =  'pdf/report_pdf_template.html.twig';
  63.                 // }elseif ($object->getReportType()?->getKey() == 'advance-custom-weather-report') {
  64.                 //     $template = 'pdf/advance_custom_report_pdf_template.html.twig';
  65.                 //     $fileName = '_advance_custom_weather_report.pdf';
  66.                 //     $reportPath = '/report/advanceCustomReportPdf';
  67.                 // }else {
  68.                 //     $template = 'pdf/automatic_report_pdf_template.html.twig';
  69.                 // }
  70.                 // new code added for new templates start
  71.                 // Determine the template and path based on the report type
  72.                 $templates = [
  73.                     'arabian-gulf-report' => 'pdfReportTemplates/arabian-gulf-report.html.twig',
  74.                     'red-sea-report' => 'pdfReportTemplates/red-sea-report.html.twig',
  75.                     'custom-weather-report' => 'pdfReportTemplates/custom-weather-report.html.twig',
  76.                     '10-day-forecast-report' => 'pdfReportTemplates/ten-day-forecast-report.html.twig',
  77.                     'mashaer-weather-report' => 'pdfReportTemplates/mashaer-weather-report.html.twig',
  78.                     'advance-custom-weather-report' => 'pdfReportTemplates/advance-custom-weather-report.html.twig',
  79.                 ];
  80.                 $defaultTemplate 'pdfReportTemplates/automatic_report_pdf_template.html.twig';
  81.                 $reportKey $object->getReportType()?->getReportkey();
  82.                 $template $templates[$reportKey] ?? $defaultTemplate;
  83.                 // Determine report path
  84.                 $reportPaths = [
  85.                     'red-sea-report' => '/report/advanceCustomReportPdf',
  86.                     'custom-weather-report' => '/report/advanceCustomReportPdf',
  87.                     '10-day-forecast-report' => '/report/advanceCustomReportPdf',
  88.                     'mashaer-weather-report' => '/report/advanceCustomReportPdf',
  89.                     'advance-custom-weather-report' => '/report/advanceCustomReportPdf',
  90.                 ];
  91.                 $reportPath $reportPaths[$reportKey] ?? '/report/ReportPdf';
  92.                 // new code added for new templates end
  93.                 $parameter = [
  94.                     'data' => $object,
  95.                     'reportTitleEn' => $object->getReportTitle('en'),
  96.                     'reportTitleAr' => $object->getReportTitle('ar'),
  97.                     'reportDescriptionEn' => $object->getDescription('en'),
  98.                     'reportDescriptionAr' => $object->getDescription('ar'),
  99.                     'reportDisclaimerEn' => $object->getReportDisclaimer('en'), // new 
  100.                     'reportDisclaimerAr' => $object->getReportDisclaimer('ar'), // new 
  101.                     'additionalNoteEn' => $object->getAdditionalNote('en'), // new 
  102.                     'additionalNoteAr' => $object->getAdditionalNote('ar'), // new 
  103.                     'stateOfTheSeaEn' => $object->getStateOfTheSea('en'), // new 
  104.                     'stateOfTheSeaAr' => $object->getStateOfTheSea('ar'), // new 
  105.                     'waveHeightEn' => $object->getWaveHeight('en'), // new 
  106.                     'waveHeightAr' => $object->getWaveHeight('ar'), // new 
  107.                     'surfaceWindEn' => $object->getSurfaceWind('en'), // new 
  108.                     'surfaceWindAr' => $object->getSurfaceWind('ar'), // new 
  109.                     'publishOnPdf' => $object->getPublishOnPdf() == true true false// new 
  110.                     'reportType' => $object->getReportType()?->getReportkey(),
  111.                     'template' => $template,
  112.                 ];
  113.                 $language = ['en''ar'];
  114.                 $pdfasset = [];
  115.                 foreach ($language as $lang) {
  116.                     $parameter['lang'] = $lang;
  117.                     $pdf \App\Lib\Utility::generatePdf($parameter$this->snappy);
  118.                     // new code added for new templates start
  119.                     // Set file name and report path
  120.                     $pdfReportName = ($object->getReportType()?->getName($lang) ?? 'Report') . '_' date('d-m-Y') . '_' rand(010000) . '_' time() .  '.pdf';
  121.                     $reportPath .= '/emails/' $object->getId();
  122.                     // new code added for new templates end
  123.                     $asset \App\Lib\Utility::createAsset($pdf$pdfReportName$reportPath);
  124.                     if ($asset instanceof Asset) {
  125.                         $pdfasset[$lang] = $asset;
  126.                     } else {
  127.                         $pdfasset[$lang] = '';
  128.                     }
  129.                 }
  130.                 // $object->setAssetAr($pdfasset['ar']);
  131.                 // $object->setAsset($pdfasset['en']);
  132.                 $object->save();
  133.             }
  134.             $emails = [];
  135.             if ($object->getEmails()) {
  136.                 $email explode(","$object->getEmails());
  137.                 $emails array_merge($email$emails);
  138.             }
  139.             if ($object->getSendEmail()) {
  140.                 if ($organizations) {
  141.                     foreach ($organizations as $organization) {
  142.                         $users Customer::getByOrganization($organization);
  143.                         foreach ($users as $user) {
  144.                             if ($user?->getEmail()) {
  145.                                 $emails[] = $user->getEmail();
  146.                             }
  147.                         }
  148.                     }
  149.                 }
  150.             }
  151.             if ($emails) {
  152.                 foreach ($emails as $email) {
  153.                     $emailAlertTemplate '/email/report_email';
  154.                     $param = [
  155.                         'body' => 'NCM Has published ' $reportType
  156.                     ];
  157.                     $purpose REPORT_MESSAGE;
  158.                     $html $this->twig->render('email/report_email_template.html.twig'$param);
  159.                     $mailSent $this->c2Service->sendCustomReportEmail($_ENV['CUSTOM_REPORT_TEMPLATE'], $object->getId(), $email$html$subject "اشعار مخصص لتوقع حالة طقس معرفة مسبقاً", [$pdfasset['en'], $pdfasset['ar']], $purpose);
  160.                     // $mailSent = $this->emailService->sendMail($param, $email, $emailAlertTemplate, $subject = "اشعار مخصص لتوقع حالة طقس معرفة مسبقاً", [$pdfasset['en']->getData(), $pdfasset['ar']->getData()],[$pdfasset['en']->getFilename(),$pdfasset['ar']->getFilename()],[$pdfasset['en']->getMimeType(), $pdfasset['ar']->getMimeType()]);
  161.                 }
  162.                 $pdfasset['en']->delete();
  163.                 $pdfasset['ar']->delete();
  164.             }
  165.             if ($object->getForTwitterChannel()) {
  166.                 $parameter = [
  167.                     'data' => $object,
  168.                     'reportTitleEn' => $object->getReportTitle('en'),
  169.                     'reportTitleAr' => $object->getReportTitle('ar'),
  170.                     'reportDescriptionEn' => $object->getDescription('en'),
  171.                     'reportDescriptionAr' => $object->getDescription('ar'),
  172.                     'reportDisclaimerEn' => $object->getReportDisclaimer('en'), // new 
  173.                     'reportDisclaimerAr' => $object->getReportDisclaimer('ar'), // new 
  174.                     'additionalNoteEn' => $object->getAdditionalNote('en'), // new 
  175.                     'additionalNoteAr' => $object->getAdditionalNote('ar'), // new 
  176.                     'stateOfTheSeaEn' => $object->getStateOfTheSea('en'), // new 
  177.                     'stateOfTheSeaAr' => $object->getStateOfTheSea('ar'), // new 
  178.                     'waveHeightEn' => $object->getWaveHeight('en'), // new 
  179.                     'waveHeightAr' => $object->getWaveHeight('ar'), // new 
  180.                     'surfaceWindEn' => $object->getSurfaceWind('en'), // new 
  181.                     'surfaceWindAr' => $object->getSurfaceWind('ar'), // new 
  182.                     'publishOnPdf' => $object->getPublishOnPdf() == true true false// new 
  183.                     'lang' => 'ar'
  184.                 ];
  185.                 // if ($object->getReportType()?->getKey() == 'advance-custom-weather-report') {
  186.                 //     $templateImage = 'pdf/advance_custom_report_pdf_template.html.twig';
  187.                 //     $fileName = '_advance_custom_weather_report.pdf';
  188.                 //     $reportPath = '/report/advanceCustomReportPdf';
  189.                 // }else {
  190.                 //     $templateImage = 'pdf/automatic_report_pdf_template.html.twig';
  191.                 // }
  192.                 // new code added for new templates start
  193.                 // Determine the template and path based on the report type
  194.                 $templateImage = [
  195.                     'arabian-gulf-report' => 'pdfReportTemplates/arabian-gulf-report.html.twig',
  196.                     'red-sea-report' => 'pdfReportTemplates/red-sea-report.html.twig',
  197.                     'custom-weather-report' => 'pdfReportTemplates/custom-weather-report.html.twig',
  198.                     '10-day-forecast-report' => 'pdfReportTemplates/ten-day-forecast-report.html.twig',
  199.                     'mashaer-weather-report' => 'pdfReportTemplates/mashaer-weather-report.html.twig',
  200.                     'advance-custom-weather-report' => 'pdfReportTemplates/advance-custom-weather-report.html.twig',
  201.                 ];
  202.                 // new code added for new templates end
  203.                 $defaultTemplate 'pdfReportTemplates/automatic_report_pdf_template.html.twig';
  204.                 $reportKey $object->getReportType()?->getReportkey();
  205.                 $templateImage $templateImage[$reportKey] ?? $defaultTemplate;
  206.                 $html $this->twig->render($templateImage$parameter);
  207.                 $this->snappyImage->setOption('enable-local-file-access'true);
  208.                 $this->snappyImage->setOption('width''2500');
  209.                 $this->snappyImage->setOption('height''2500');
  210.                 $this->snappyImage->setOption('format''jpeg');
  211.                 // $this->snappyImage->setOption('transparent', true);
  212.                 $image $this->snappyImage->getOutputFromHtml($html);
  213.                 $asset \App\Lib\Utility::createAsset($imagerand(010000) . '_' time() . '_custom_weather_report.jpeg''ReportImages');
  214.                 $asset_path PIMCORE_PROJECT_ROOT '/public/var/assets' $asset->getPath() . $asset->getFileName();
  215.                 $media_id $this->twitterService->uploadMedia($asset_path'Custom Weather Report has Published');
  216.                 if ($media_id) {
  217.                     // $this->twitterService->postTweet('Custom Weather Report has Published.', $media_id["result"]);
  218.                     $asset->delete();
  219.                 }
  220.             }
  221.         }
  222.     }
  223. }