      1: <?php
      2:
      3: namespace SMSApi\Api\Action\Sms;
      4:
      5: use SMSApi\Api\Action\AbstractAction;
      6: use SMSApi\Api\Response\StatusResponse;
      7: use SMSApi\Proxy\Uri;
      8:
      9: /**
     10:  * Class Send
     11:  * @package SMSApi\Api\Action\Sms
     12:  *
     13:  * @method StatusResponse execute()
     14:  */
     15: class Send extends AbstractAction
     16: {
     17:     /**
     18:      * @var string
     19:      */
     20:     protected $encoding = 'utf-8';
     21:
     22:     /**
     23:      * @param $data
     24:      * @return StatusResponse
     25:      */
     26:     protected function response($data)
     27:     {
     28:         return new StatusResponse($data);
     29:     }
     30:
     31:     /**
     32:      * @return Uri
     33:      * @throws \SMSApi\Exception\ActionException
     34:      */
     35:     public function uri() {
     36:
     37:         $query = "";
     38:
     39:         $query .= $this->paramsLoginToQuery();
     40:
     41:         $query .= $this->paramsBasicToQuery();
     42:
     43:         $query .= $this->paramsOther();
     44:
     45:         return new Uri( $this->proxy->getProtocol(), $this->proxy->getHost(), $this->proxy->getPort(), "/api/sms.do", $query );
     46:     }
     47:
     48:     /**
     49:      * Set SMS text message.
     50:      *
     51:      * Content of one message is normally 160 characters per single
     52:      * SMS or 70 in case of using at least one special character
     53:      *
     54:      * @param $text
     55:      * @return $this
     56:      */
     57:     public function setText( $text ) {
     58:         $this->params[ 'message' ] = urlencode( $text );
     59:         return $this;
     60:     }
     61:
     62:     /**
     63:      * Set the SMS encoding charset, default is UTF-8.
     64:      *
     65:      * Example:
     66:      * windows-1250
     67:      * iso-8859-2
     68:      *
     69:      * @param string $encoding
     70:      * @return $this
     71:      */
     72:     public function setEncoding( $encoding ) {
     73:         $this->encoding = $encoding;
     74:         return $this;
     75:     }
     76:
     77:
     78:     /**
     79:      * Set mobile phone number of the recipients.
     80:      *
     81:      * @param string|array|int $to Phone number recipient/s.
     82:      * @return $this
     83:      */
     84:     public function setTo( $to ) {
     85:
     86:         if ( !is_array( $to ) ) {
     87:             $to = array( $to );
     88:         }
     89:
     90:         $this->to->exchangeArray( $to );
     91:         return $this;
     92:     }
     93:
     94:     /**
     95:      * Set name of the group from the phone book to which message should be sent.
     96:      *
     97:      * @param string $group String group name
     98:      * @return $this
     99:      */
    100:     public function setGroup( $group ) {
    101:         $this->group = $group;
    102:         return $this;
    103:     }
    104:
    105:     /**
    106:      * Set scheduled date sending message.
    107:      *
    108:      * Setting a past date will result in sending message instantly.
    109:      *
    110:      * @param mixed $date set timestamp or ISO 8601 date format
    111:      * @return $this
    112:      */
    113:     public function setDateSent( $date ) {
    114:         $this->date = $date;
    115:         return $this;
    116:     }
    117:
    118:     /**
    119:      * Set optional custom value sent with SMS and sent back in CALLBACK.
    120:      *
    121:      * @param string|array $idx
    122:      * @return $this
    123:      */
    124:     public function setIDx( $idx ) {
    125:         if ( !is_array( $idx ) ) {
    126:             $idx = array( $idx );
    127:         }
    128:
    129:         $this->idx->exchangeArray( $idx );
    130:         return $this;
    131:     }
    132:
    133:     /**
    134:      * Set checking idx is unique.
    135:      *
    136:      * Prevents from sending more than one message with the same idx.
    137:      * When this parameter is set and message with the same idx was
    138:      * already sent error 53 is returned.
    139:      *
    140:      * @param bool $check
    141:      * @return $this
    142:      */
    143:     public function setCheckIDx( $check ) {
    144:         if ( $check == true ) {
    145:             $this->params[ "check_idx" ] = "1";
    146:         } else if ( $check == false ) {
    147:             $this->params[ "check_idx" ] = "0";
    148:         }
    149:
    150:         return $this;
    151:     }
    152:
    153:     /**
    154:      * Set affiliate code.
    155:      *
    156:      * @param string $partner affiliate code
    157:      * @return $this
    158:      */
    159:     public function setPartner( $partner ) {
    160:         $this->params[ "partner_id" ] = $partner;
    161:         return $this;
    162:     }
    163:
    164:     /**
    165:      *
    166:      * Set expiration date.
    167:      *
    168:      * Message expiration date (in unix timestamp) is a date after which message won't be
    169:      * delivered if it wasn't delivered yet. The difference between date sent and expiration
    170:      * date can't be less than 1 hour and more than 12 hours. Time will be set with
    171:      * tolerance +/- 5 minutes.
    172:      *
    173:      * @param int $date in timestamp
    174:      * @return $this
    175:      */
    176:     public function setDateExpire( $date ) {
    177:         $this->params[ "expiration_date" ] = $date;
    178:         return $this;
    179:     }
    180:
    181:     /**
    182:      * Set name of the sender.
    183:      *
    184:      * To send SMS as ECO use sender name `ECO`.
    185:      * To send SMS as 2Way use sender name `2Way`.
    186:      *
    187:      * Only verified names are being accepted.
    188:      *
    189:      * @param string $sender sender name or eco or 2way
    190:      * @return $this
    191:      */
    192:     public function setSender( $sender ) {
    193:         $this->params[ "from" ] = $sender;
    194:         return $this;
    195:     }
    196:
    197:     /**
    198:      * Set protection from send multipart messages.
    199:      *
    200:      * If the message will contain more than 160 chars (single message) it won't be
    201:      * sent and return error
    202:      *
    203:      * @param bool $single
    204:      * @return $this
    205:      */
    206:     public function setSingle( $single ) {
    207:         if ( $single == true ) {
    208:             $this->params[ "single" ] = "1";
    209:         } else if ( $single == false ) {
    210:             $this->params[ "single" ] = "0";
    211:         }
    212:
    213:         return $this;
    214:     }
    215:
    216:     /**
    217:      * Set protection from sending messages containing special characters.
    218:      *
    219:      * @param bool $noUnicode if true turn on protection
    220:      * @return $this
    221:      */
    222:     public function setNoUnicode( $noUnicode ) {
    223:         if ( $noUnicode == true ) {
    224:             $this->params[ "nounicode" ] = "1";
    225:         } else if ( $noUnicode == false ) {
    226:             $this->params[ "nounicode" ] = "0";
    227:         }
    228:
    229:         return $this;
    230:     }
    231:
    232:     /**
    233:      * Set SMS message data coding.
    234:      *
    235:      * This parameter allows to send WAP PUSH messages.
    236:      *
    237:      * Example: bin
    238:      *
    239:      * @param string $dataCoding
    240:      * @return $this
    241:      */
    242:     public function setDataCoding( $dataCoding ) {
    243:         $this->params[ "datacoding" ] = $dataCoding;
    244:         return $this;
    245:     }
    246:
    247:     /**
    248:      * Set SMS message in flash mode.
    249:      *
    250:      * Flash SMS are automatically presented on the mobile screen and
    251:      * have to be saved to be default stored in inbox.
    252:      *
    253:      * @param bool $flash
    254:      * @return $this
    255:      */
    256:     public function setFlash( $flash ) {
    257:         if ( $flash == true ) {
    258:             $this->params[ "flash" ] = "1";
    259:         } else if ( $flash == false && isset( $this->params[ "flash" ] ) ) {
    260:             unset( $this->params[ "flash" ] );
    261:         }
    262:
    263:         return $this;
    264:     }
    265:
    266:     /**
    267:      * Set normalize SMS text.
    268:      *
    269:      * Removing dialectic characters from message.
    270:      *
    271:      * @param bool $normalize
    272:      * @return $this
    273:      */
    274:     public function setNormalize( $normalize ) {
    275:
    276:         if ( $normalize == true ) {
    277:             $this->params[ "normalize" ] = "1";
    278:         } else if ( $normalize == false && isset( $this->params[ "normalize" ] ) ) {
    279:             unset( $this->params[ "normalize" ] );
    280:         }
    281:
    282:         return $this;
    283:     }
    284:
    285:     /**
    286:      * Set higher priority of sending message.
    287:      * Prohibited for bulk messages.
    288:      *
    289:      * @param bool $fast if true set higher priority otherwise normal priority
    290:      * @return $this
    291:      */
    292:     public function setFast( $fast ) {
    293:         if ( $fast == true ) {
    294:             $this->params[ "fast" ] = "1";
    295:         } else if ( $fast == false && isset( $this->params[ "fast" ] ) ) {
    296:             unset( $this->params[ "fast" ] );
    297:         }
    298:
    299:         return $this;
    300:     }
    301:
    302:     /**
    303:      * Set personalized parameters to bulk messages.
    304:      *
    305:      * @param int $i
    306:      * @param string|string[] $text
    307:      * @return $this
    308:      * @throws \OutOfRangeException
    309:      */
    310:     public function SetParam($i, $text) {
    311:
    312:         if ( $i > 3 || $i < 0 ) {
    313:             throw new \OutOfRangeException;
    314:         }
    315:
    316:         $value = is_array($text) ? implode('|', $text) : $text;
    317:         $this->params['param'.($i+1)] = urlencode( $value );
    318:
    319:         return $this;
    320:     }
    321:
    322:     /**
    323:      * Set template
    324:      * @param $name
    325:      * @return $this
    326:      */
    327:     public function setTemplate($name)
    328:     {
    329:         $this->params['template'] = urlencode($name);
    330:
    331:         return $this;
    332:     }
    333: }
    334: