[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/infrastructure/sms/worker/ -> PhabricatorSMSSendWorker.php (source)

   1  <?php
   2  
   3  final class PhabricatorSMSSendWorker
   4    extends PhabricatorSMSWorker {
   5  
   6    public function getMaximumRetryCount() {
   7      return PhabricatorSMS::MAXIMUM_SEND_TRIES;
   8    }
   9  
  10    public function getWaitBeforeRetry(PhabricatorWorkerTask $task) {
  11      return phutil_units('1 minute in seconds');
  12    }
  13  
  14    public function doWork() {
  15      $viewer = PhabricatorUser::getOmnipotentUser();
  16  
  17      $task_data = $this->getTaskData();
  18  
  19      $sms = id(new PhabricatorSMS())
  20        ->loadOneWhere('id = %d', $task_data['smsID']);
  21  
  22      if (!$sms) {
  23        throw new PhabricatorWorkerPermanentFailureException(
  24          pht('SMS object was not found.'));
  25      }
  26  
  27      // this has the potential to be updated asynchronously
  28      if ($sms->getSendStatus() == PhabricatorSMS::STATUS_SENT) {
  29        return;
  30      }
  31  
  32      $adapter = PhabricatorEnv::getEnvConfig('sms.default-adapter');
  33      $adapter = newv($adapter, array());
  34      if ($sms->hasBeenSentAtLeastOnce()) {
  35        $up_to_date_status = $adapter->pollSMSSentStatus($sms);
  36        if ($up_to_date_status) {
  37          $sms->setSendStatus($up_to_date_status);
  38          if ($up_to_date_status  == PhabricatorSMS::STATUS_SENT) {
  39            $sms->save();
  40            return;
  41          }
  42        }
  43        // TODO - re-jigger this so we can try if appropos (e.g. rate limiting)
  44        return;
  45      }
  46  
  47      $from_number = PhabricatorEnv::getEnvConfig('sms.default-sender');
  48      // always set the from number if we get this far in case of configuration
  49      // changes.
  50      $sms->setFromNumber($from_number);
  51  
  52      $adapter->setTo($sms->getToNumber());
  53      $adapter->setFrom($sms->getFromNumber());
  54      $adapter->setBody($sms->getBody());
  55      // give the provider name the same treatment as phone number
  56      $sms->setProviderShortName($adapter->getProviderShortName());
  57  
  58      try {
  59        $result = $adapter->send();
  60        list($sms_id, $sent_status) = $adapter->getSMSDataFromResult($result);
  61      } catch (PhabricatorWorkerPermanentFailureException $e) {
  62        $sms->setSendStatus(PhabricatorSMS::STATUS_FAILED_PERMANENTLY);
  63        $sms->save();
  64        throw $e;
  65      } catch (Exception $e) {
  66        $sms->setSendStatus(PhabricatorSMS::STATUS_FAILED_PERMANENTLY);
  67        $sms->save();
  68        throw new PhabricatorWorkerPermanentFailureException(
  69          $e->getMessage());
  70      }
  71      $sms->setProviderSMSID($sms_id);
  72      $sms->setSendStatus($sent_status);
  73      $sms->save();
  74    }
  75  
  76  }


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1