00001 <?
00013 class SMS
00014 {
00018 public $toNumber = null;
00019
00023 public $fromNumber = null;
00024
00028 public $providers;
00029
00035 public function __construct()
00036 {
00037 $this->providers = array(
00038 'alltel' => new EmailSMSProvider('Cingular', '###@message.alltel.com'),
00039 'cingular' => new EmailSMSProvider('Cingular', '###@cingularME.com'),
00040 'nextel' => new EmailSMSProvider('Nextel', '###@messaging.nextel.com'),
00041 'sprint' => new EmailSMSProvider('Sprint', '###@messaging.sprintpcs.com'),
00042 'tmobile' => new EmailSMSProvider('T-Mobile', '###@@tmomail.net'),
00043 'uscellular' => new EmailSMSProvider('US Cellular', '###@email.uscc.net'),
00044 'verizon' => new EmailSMSProvider('Verizon', '###@vtext.com'),
00045 'virgin' => new EmailSMSProvider('Virgin Mobile', '###@vmobl.com'),
00046 );
00047
00048
00049
00050
00051
00052
00053
00054 }
00055
00062 public function setTo($number, $provider)
00063 {
00064 $this->toNumber = $this->getProvider($number, $provider);
00065 }
00066
00073 public function setFrom($number, $provider)
00074 {
00075 $this->fromNumber = $this->getProvider($number, $provider);
00076 }
00077
00084 public function send($message, $from = null)
00085 {
00086
00087 if ($from === null && $this->FromNumber instanceOf SMSProvider)
00088 $from = $this->fromNumber->getEmail();
00089
00090
00091 if ($from == '')
00092 {
00093 if (Config::get('sms_from_email'))
00094 $from = Config::get('sms_from_email');
00095 else if (Config::get('mailer_from'))
00096 $from = Config::get('mailer_from');
00097 else
00098 throw new Exception("Undefined from email.");
00099 }
00100
00101
00102 $this->toNumber->send($message, $from);
00103 }
00104
00111 public function getProvider($number, $provider)
00112 {
00113 if ($this->providers[$provider] instanceOf SMSProvider)
00114 {
00115 $provider = $this->providers[$provider];
00116 $provider->prepNumber($number);
00117
00118 return $provider;
00119 }
00120 else
00121 throw new Exception("Provider '$provider' not found.");
00122 }
00123 }
00124
00128 abstract class SMSProvider
00129 {
00133 public $name;
00134
00138 public $number;
00139
00145 public function __construct($name)
00146 {
00147 $this->name = $name;
00148 }
00149
00156 public static function formatNumber($number)
00157 {
00158 return preg_replace("/[^0-9]*/", "", $number);
00159 }
00160
00166 public function prepNumber($number)
00167 {
00168
00169 $number = self::formatNumber($number);
00170
00171
00172 $this->number = $number;
00173 }
00174
00181 abstract public function send($message, $from);
00182 }
00183
00189 class EmailSMSProvider extends SMSProvider
00190 {
00194 private $email;
00195
00202 public function __construct($name, $email)
00203 {
00204 parent::__construct($name);
00205
00206 $this->email = $email;
00207 }
00208
00214 public function getEmail()
00215 {
00216 return str_replace("###", $this->number, $this->email);
00217 }
00218
00225 public function send($message, $from)
00226 {
00227
00228 $email = $this->getEmail();
00229
00230
00231 Mail::send($email, '', $message, '', $from);
00232 }
00233 }
00234
00236 ?>