src/Library/Subscribers/EadrEventSubscriber.php line 120

Open in your IDE?
  1. <?php
  2. namespace App\Library\Subscribers;
  3. use App\Library\Database;
  4. use App\Library\Event\EadrEvent;
  5. use App\Library\Event\EadrSyncEvent;
  6. use App\Library\Event\GrapperProcessEvent;
  7. use App\models\eadr;
  8. use App\models\emain;
  9. use Doctrine\DBAL\Exception;
  10. use Symfony\Component\Console\Output\OutputInterface;
  11. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use DateTime;
  14. class EadrEventSubscriber implements EventSubscriberInterface
  15. {
  16.     /**
  17.      * @return array[]
  18.      */
  19.     public static function getSubscribedEvents():array
  20.     {
  21.         return [
  22.             EadrEvent::EVENT=>[
  23.                 'inserEadr'1000
  24.             ],
  25.             EadrSyncEvent::EVENT=>[
  26.                 'processEvents'1000
  27.             ],
  28.             GrapperProcessEvent::EVENT_UPDATE => [
  29.                 'updateAddress'1000
  30.             ]
  31.         ];
  32.     }
  33.     public function __construct(
  34.         private readonly Database        $database,
  35.         private readonly EventDispatcherInterface $event
  36.     ){
  37.     }
  38.     /**
  39.      * @param GrapperProcessEvent $event
  40.      * @return void
  41.      * @throws Exception
  42.      */
  43.     public function updateAddress(GrapperProcessEvent $event):void
  44.     {
  45.         $event->addVerboseOutput('Updating Send Status');
  46.         $event->addVerboseOutput('Customer: '.$event->getAcount()->getId().' Address ID: '.$event->getAddress()->getId());
  47.         $event->addVerboseOutput('was sent?: '.(int)$event->isSent());
  48.         if($event->isSent()){
  49.               //updating all email addresses
  50.             $stmt $this->database->getConnection()->prepare(eadr::UPDATE_SENT);
  51.             $stmt->bindValue(1$event->getAddress()->getEmail());
  52.             $stmt->bindValue(2$event->getCustomerId());
  53.             $result $stmt->executeQuery();
  54.             //updating address with id
  55.             $stmt2 $this->database->getConnection()->prepare(eadr::UPDATE_SENT2);
  56.             $stmt2->bindValue(1$event->getAddress()->getId());
  57.             $stmt2->bindValue(2$event->getCustomerId());
  58.             $result2 $stmt2->executeQuery();
  59.         }
  60.     }
  61.     /**
  62.      * @param EadrSyncEvent $event
  63.      * @return void
  64.      * @throws Exception
  65.      */
  66.     public function processEvents(EadrSyncEvent $event){
  67.         if((int) $event->getCustomer()  < && $event->getCustomer() !== 'all'){
  68.             $event->getOutput()->writeln('no customer given. Customer 1 can\'t be synced');
  69.         }
  70.         if($event->getCustomer() !== 'all'){
  71.             $stmt $this->database->getConnection()->prepare(emain::FETCH_MISSING_EADR_ENTRIES);
  72.             $stmt->bindValue(1, (int)$event->getCustomer());
  73.         }else{
  74.             $stmt $this->database->getConnection()->prepare(emain::FETCH_MISSING_EADR_ALL_ENTRIES);
  75.         }
  76.         $resultSet $stmt->executeQuery();
  77.         while($row $resultSet->fetchAssociative()){
  78.             if($event->getOutput()->isVerbose()){
  79.                 $event->getOutput()->writeln($row['ID'] .'-'$row['eemail'].'-'.$row['emngemail']);
  80.                 $event->getOutput()->writeln('elocid: '.((int)$row['elocid'] <= 1?'not exists':'exists').' - emngid: '.((int)$row['emngid'] <= 1?'not exists':'exists'));
  81.             }
  82.             if((int)$row['elocid'] <= 1){
  83.                 $stmt2 $this->database->getConnection()->prepare(eadr::FETCH_MISSING_EADR_ENTRY);
  84.                 $stmt2->bindValue(1$row['eemail']);
  85.                 $stmt2->bindValue(2$row['euid']);
  86.                 $resultSet2 $stmt2->executeQuery();
  87.                 if($resultSet2->rowCount() < 1){
  88.                     $sEvent = new EadrEvent($event->getOutput(), (int)$row['ID'], false);
  89.                     $this->event->dispatch($sEventEadrEvent::EVENT);
  90.                 }
  91.             }
  92.             if((int)$row['emngid'] <= 1){
  93.                 $stmt2 $this->database->getConnection()->prepare(eadr::FETCH_MISSING_EADR_ENTRY);
  94.                 $stmt2->bindValue(1$row['emngemail']);
  95.                 $stmt2->bindValue(2$row['euid']);
  96.                 $resultSet2 $stmt2->executeQuery();
  97.                 if($resultSet2->rowCount() < 1){
  98.                     $sEvent = new EadrEvent($event->getOutput(), (int)$row['ID'], true);
  99.                     $this->event->dispatch($sEventEadrEvent::EVENT);
  100.                 }
  101.             }
  102.         }
  103.     }
  104.     /**
  105.      * @param OutputInterface $output
  106.      * @param int $eid
  107.      * @param bool $emn
  108.      * @return void
  109.      * @throws Exception
  110.      */
  111.     private function inserEadr(OutputInterface $outputint $eidbool $emn=false){
  112.         if($emn){
  113.             $stmt $this->database->getConnection()->prepare(emain::SELECT_EMNGID);
  114.         }else{
  115.             $stmt $this->database->getConnection()->prepare(emain::SELECT_ELOCID);
  116.         }
  117.         $stmt->bindValue(1$eid);
  118.         $resultSet $stmt->executeQuery();
  119.         if($output->isVerbose()){
  120.             $output->writeln($resultSet->rowCount() > 0?'entry not existing':'entry existing');
  121.         }
  122.         if($resultSet->rowCount() > 0){
  123.             $row $resultSet->fetchAssociative();
  124.             if(empty($row['email'])){
  125.                 if($output->isVerbose()){
  126.                     $output->writeln('<error>skipping '.$row['name'].' reason: no email</error>');
  127.                 }
  128.                 return;
  129.             }else{
  130.                 if($output->isVerbose()){
  131.                     $output->writeln('<info>creating entry for '.$row['name'].'</info>');
  132.                 }
  133.             }
  134.             $stmt3 $this->database->getConnection()->prepare(eadr::EMAIL_EXISTS);
  135.             $stmt3->bindValue(1$row['uid']);
  136.             $stmt3->bindValue(2$row['email']);
  137.             $validation $stmt3->executeQuery();
  138.             if($validation->rowCount()>0){
  139.                 if($output->isVerbose()){
  140.                     $output->writeln('<error>skipping '.$row['name'].' reason: email already exists</error>');
  141.                 }
  142.                 return;
  143.             }
  144.             $stmt2 $this->database->getConnection()->prepare(eadr::INSERT_EADR);
  145.             $stmt2->bindValue(1$row['name']);
  146.             $stmt2->bindValue(2$row['street']);
  147.             $stmt2->bindValue(3$row['zip']);
  148.             $stmt2->bindValue(4$row['district']);
  149.             $stmt2->bindValue(5$row['city']);
  150.             $stmt2->bindValue(6$row['country']);
  151.             $stmt2->bindValue(7$row['land']);
  152.             $stmt2->bindValue(8$row['tel']);
  153.             $stmt2->bindValue(9$row['fax']);
  154.             $stmt2->bindValue(10$row['mobile']);
  155.             $stmt2->bindValue(11$row['email']);
  156.             $stmt2->bindValue(12$row['www']);
  157.             $stmt2->bindValue(13, ($emn?2:1));
  158.             $stmt2->bindValue(14,  '1');
  159.             $stmt2->bindValue(15,  '1');
  160.             $stmt2->bindValue(16,  '1');
  161.             $stmt2->bindValue(17,  'enable,free');
  162.             $stmt2->bindValue(18$row['uid']);
  163.             $stmt2->executeQuery();
  164.             unset($row$stmt2$stmt3);
  165.         }
  166.     }
  167. }