src/Services/Platform/ExternalMessageTools.php line 23

Open in your IDE?
  1. <?php
  2. //----------------------------------------------------------------------
  3. // src/Services/Platform/ExternalMessageTools.php
  4. //----------------------------------------------------------------------
  5. namespace App\Services\Platform;
  6. use Doctrine\Persistence\ManagerRegistry;
  7. use App\Entity\Common\RefGenerator;
  8. use App\Entity\Communication\Sms\Sms;
  9. use App\Entity\Platform\ExternalMessage\ExternalMessage;
  10. use App\Entity\Platform\ExternalMessage\ExternalMessageStatus;
  11. use App\Entity\Platform\ExternalMessage\ExternalMessageType;
  12. use App\Services\Common\RefGeneratorTools;
  13. class ExternalMessageTools
  14. {
  15.     public function __construct(ManagerRegistry $doctrineRefGeneratorTools $refGeneratorTools)
  16.     {
  17.         $this->em $doctrine->getManager();
  18.         $this->refGeneratorTools $refGeneratorTools;
  19.     }
  20.     /**
  21.      * createExternalMessageForSmsChild
  22.      *
  23.      * Creates an ExternalMessage for a Sms response
  24.      *         ie. an Sms with a not null parent
  25.      *        ie. a Child Sms
  26.      * This is used by SmsProviderTools :: craftObjectsFromTwilioData
  27.      *
  28.      * @param  Sms $sms
  29.      * @return null|ExternalMessage
  30.      */
  31.     public function createExternalMessageForSmsChild(Sms $sms)
  32.     {
  33.         if ($sms->getParent() === null)
  34.         {
  35.             return null;
  36.         }
  37.         if (in_array(null, [$sms->getClient(), $sms->getClient()->getIndividual(), $sms->getSociety(), $sms->getSocietyGroup()]))
  38.         {
  39.             return null;
  40.         }
  41.         $client $sms->getClient();
  42.         $individual $sms->getClient()->getIndividual();
  43.         $society $sms->getSociety();
  44.         $societyGroup $sms->getSocietyGroup();
  45.         // Handle ExternalMessageStatus and ExternalMessageType
  46.         $status $this->em
  47.             ->getRepository(ExternalMessageStatus::class)
  48.             ->findOneBy(array(
  49.                 "societyGroup" => $societyGroup,
  50.                 "defaultValue" => 1,
  51.             ));
  52.         $type $this->em
  53.             ->getRepository(ExternalMessageType::class)
  54.             ->findOneBy(array("sms" => 1));
  55.         if ($status === null)
  56.         {
  57.             $msg "Default ExternalMessageStatus not found for societyGroup ".$societyGroup->displayForLog();
  58.             $this->logTools->errorlog($msg$sms->getProvider());
  59.             $this->logTools->smsLogDebug($msg$sms->getProvider());
  60.             return null;
  61.         }
  62.         if ($type === null)
  63.         {
  64.             $msg "Default ExternalMessageType not found for societyGroup ".$societyGroup->displayForLog();
  65.             $this->logTools->errorlog($msg$sms->getProvider());
  66.             $this->logTools->smsLogDebug($msg$sms->getProvider());
  67.             return null;
  68.         }
  69.         // At this point nothing can go wrong any more, start creating data
  70.         $externalMessage = new ExternalMessage();
  71.         $externalMessage->setSubject($sms->getSubject());
  72.         $externalMessage->setBody($sms->getBody());
  73.         $externalMessage->setClient($client);
  74.         $externalMessage->setMission($sms->getMission());
  75.         $externalMessage->setLastname($individual->getLastname());
  76.         $externalMessage->setFirstname($individual->getFirstname());
  77.         $externalMessage->setEmail($individual->getEmail());
  78.         $externalMessage->setPhoneNumber($sms->getEmitter());
  79.         $externalMessage->setCompany($individual->getCompany());
  80.         $externalMessage->setSociety($society);
  81.         $address $individual->getAddress();
  82.         if ($address !== null)
  83.         {
  84.             $externalMessage->setAddress($address->displayAddressComplement());
  85.             $externalMessage->setPostalCode($address->getPostalCode());
  86.             $externalMessage->setTown($address->getTown());
  87.         }
  88.         $externalMessage->setStatus($status);
  89.         $externalMessage->setType($type);
  90.         // Create Reference
  91.         $this->refGeneratorTools->craftRef($externalMessageRefGenerator::CODE_EXTERNAL_MESSAGE);
  92.         // Link Sms
  93.         $externalMessage->setSms($sms);
  94.         $externalMessage->setParentSms($sms->getParent());
  95.         // Link SmsMode : Not needed for now, we are not handling client responses via the SmsMode api for now
  96.         // Link SmsTwilio : done in SmsProviderTools
  97.         $this->em->persist($externalMessage);
  98.         return $externalMessage;
  99.     }
  100.     /**
  101.      * createExternalMessageResponseForSms
  102.      *
  103.      * Creates an ExternalMessage as a Client Response for a Sms
  104.      * This is used by ExternalMessageController :: handleSmsResponseFromClient
  105.      *
  106.      * @param  Sms $sms
  107.      * @return null|ExternalMessage
  108.      */
  109.     public function createExternalMessageResponseForSms(Sms $sms)
  110.     {
  111.         $client $sms->getClient();
  112.         $society $sms->getSociety();
  113.         $societyGroup $sms->getSocietyGroup();
  114.         if ($client === null || $society === null || $societyGroup === null)
  115.         {
  116.             return null;
  117.         }
  118.         $individual $sms->getClient()->getIndividual();
  119.         if ($individual === null)
  120.         {
  121.             return null;
  122.         }
  123.         // Handle ExternalMessageStatus and ExternalMessageType
  124.         $status $this->em
  125.             ->getRepository(ExternalMessageStatus::class)
  126.             ->findOneBy(array(
  127.                 "societyGroup" => $societyGroup,
  128.                 "defaultValue" => 1,
  129.             ));
  130.         $type $this->em
  131.             ->getRepository(ExternalMessageType::class)
  132.             ->findOneBy(array("sms" => 1));
  133.         if ($status === null)
  134.         {
  135.             $msg "Default ExternalMessageStatus not found for societyGroup ".$societyGroup->displayForLog();
  136.             $this->logTools->errorlog($msg$sms->getProvider());
  137.             $this->logTools->smsLogDebug($msg$sms->getProvider());
  138.             return null;
  139.         }
  140.         if ($type === null)
  141.         {
  142.             $msg "Default ExternalMessageType not found for societyGroup ".$societyGroup->displayForLog();
  143.             $this->logTools->errorlog($msg$sms->getProvider());
  144.             $this->logTools->smsLogDebug($msg$sms->getProvider());
  145.             return null;
  146.         }
  147.         // At this point nothing can go wrong any more, start creating data
  148.         $externalMessage = new ExternalMessage();
  149.         $externalMessage->setClient($client);
  150.         $externalMessage->setMission($sms->getMission());
  151.         $externalMessage->setLastname($individual->getLastname());
  152.         $externalMessage->setFirstname($individual->getFirstname());
  153.         $externalMessage->setEmail($individual->getEmail());
  154.         $externalMessage->setPhoneNumber($sms->getRecipient());
  155.         $externalMessage->setCompany($individual->getCompany());
  156.         $externalMessage->setSociety($society);
  157.         $address $individual->getAddress();
  158.         if ($address !== null)
  159.         {
  160.             $externalMessage->setAddress($address->displayAddressComplement());
  161.             $externalMessage->setPostalCode($address->getPostalCode());
  162.             $externalMessage->setTown($address->getTown());
  163.         }
  164.         $externalMessage->setStatus($status);
  165.         $externalMessage->setType($type);
  166.         // Create Reference
  167.         $this->refGeneratorTools->craftRef($externalMessageRefGenerator::CODE_EXTERNAL_MESSAGE);
  168.         // Link Sms
  169.         $externalMessage->setParentSms($sms);
  170.         // Plan.io Task #3922
  171.         $externalMessage->setLoggingData([
  172.             "special_author" => "sms_client_response",
  173.         ]);
  174.         // Do not persit here, body is not yet set and I want to log it :)
  175.         // $this->em->persist($externalMessage);
  176.         return $externalMessage;
  177.     }
  178. }