Net_SMS
[ class tree: Net_SMS ] [ index: Net_SMS ] [ all elements ]

Source for file sms2email_http.php

Documentation is available at sms2email_http.php

  1. <?php
  2. /**
  3.  * Net_SMS_sms2email_http Class implements the HTTP API for accessing the
  4.  * sms2email (www.sms2email.com) SMS gateway.
  5.  *
  6.  * Copyright 2003-2006 Marko Djukic <marko@oblo.com>
  7.  *
  8.  * See the enclosed file COPYING for license information (LGPL). If you did
  9.  * not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
  10.  *
  11.  * $Horde: framework/Net_SMS/SMS/sms2email_http.php,v 1.33 2006/01/01 21:10:07 jan Exp $
  12.  *
  13.  * @author Marko Djukic <marko@oblo.com>
  14.  * @package Net_SMS
  15.  */
  16. class Net_SMS_sms2email_http extends Net_SMS {
  17.  
  18.     var $_base_url 'horde.sms2email.com/horde/';
  19.  
  20.     /**
  21.      * An array of capabilities, so that the driver can report which
  22.      * operations it supports and which it doesn't. Possible values are:<pre>
  23.      *   auth        - The gateway requires authentication before sending;
  24.      *   batch       - Batch sending is supported;
  25.      *   multi       - Sending of messages to multiple recipients is supported;
  26.      *   receive     - Whether this driver is capable of receiving SMS;
  27.      *   credit      - Is use of the gateway based on credits;
  28.      *   addressbook - Are gateway addressbooks supported;
  29.      *   lists       - Gateway support for distribution lists.
  30.      * </pre>
  31.      *
  32.      * @var array 
  33.      */
  34.     var $capabilities = array('auth'        => false,
  35.                               'batch'       => 100,
  36.                               'multi'       => true,
  37.                               'receive'     => false,
  38.                               'credit'      => true,
  39.                               'addressbook' => true,
  40.                               'lists'       => true);
  41.  
  42.     /**
  43.      * This function does the actual sending of the message.
  44.      *
  45.      * @access private
  46.      *
  47.      * @param array $message  The array containing the message and its send
  48.      *                         parameters.
  49.      * @param string $to      The destination string.
  50.      *
  51.      * @return array  An array with the success status and additional
  52.      *                 information.
  53.      */
  54.     function _send(&$message$to)
  55.     {
  56.         /* Set up the sending url. */
  57.         $url sprintf('postmsg.php?username=%s&password=%s&message=%s',
  58.                        urlencode($this->_params['user']),
  59.                        urlencode($this->_params['password']),
  60.                        urlencode($message['text']));
  61.  
  62.         /* Check if source from is set. */
  63.         if (!empty($message['send_params']['from'])) {
  64.             $url .= '&orig=' urlencode($message['send_params']['from']);
  65.         }
  66.         /* Check if message type is flash. */
  67.         if (!empty($message['send_params']['msg_type']&&
  68.             $message['send_params']['msg_type'== 'SMS_FLASH'{
  69.             $url .= '&flash=1';
  70.         }
  71.         /* Check if delivery report url has been set. */
  72.         if (!empty($this->_params['delivery_report'])) {
  73.             $url .= '&dlurl=' urlencode($this->_params['delivery_report'].
  74.                     'reportcode=%code&destinationnumber=%dest';
  75.         }
  76.  
  77.         /* Loop through recipients and do some minimal validity checking. */
  78.         if (is_array($to)) {
  79.             foreach ($to as $key => $val{
  80.                 if (preg_match('/^.*?<?\+?(\d{7,})(>|$)/'$val$matches)) {
  81.                     $to[$key$matches[1];
  82.                 else {
  83.                     /* FIXME: Silently drop bad recipients. This should be
  84.                      * logged and/or reported. */
  85.                     unset($to[$key]);
  86.                 }
  87.             }
  88.             $to implode(','$to);
  89.         else {
  90.             if (preg_match('/^.*?<?\+?(\d{7,})(>|$)/'$to$matches)) {
  91.                 $to $matches[1];
  92.             else {
  93.                 return array(0sprintf(_("Invalid recipient: \"%s\"")$to));
  94.             }
  95.         }
  96.  
  97.         /* Append the recipients of this message and call the url. */
  98.         $url .= '&to_num=' $to;
  99.         $response $this->_callURL($url);
  100.         if (is_a($response'PEAR_Error')) {
  101.             return array(0$response->getMessage());
  102.         }
  103.  
  104.         /* Parse the response, check for new lines in case of multiple
  105.          * recipients. */
  106.         $lines explode("\n"$response);
  107.         $response = array();
  108.  
  109.         if (count($lines> 1{
  110.             /* Multiple recipients. */
  111.             foreach ($lines as $line{
  112.                 $parts explode('To:'$line);
  113.                 $recipient trim($parts[1]);
  114.                 if ($lines[0== 'AQSMS-OK'{
  115.                     $response[$recipient= array(1null);
  116.                 else {
  117.                     $response[$recipient= array(0$lines[0]);
  118.                 }
  119.             }
  120.         else {
  121.             /* Single recipient. */
  122.             if ($lines[0== 'AQSMS-OK'{
  123.                 $response[$to= array(1null);
  124.             else {
  125.                 $response[$to= array(0$lines[0]);
  126.             }
  127.         }
  128.  
  129.         return $response;
  130.     }
  131.  
  132.     /**
  133.      * Returns the current credit balance on the gateway.
  134.      *
  135.      * @access private
  136.      *
  137.      * @return integer  The credit balance available on the gateway.
  138.      */
  139.     function _getBalance()
  140.     {
  141.         /* Set up the url and call it. */
  142.         $url sprintf('postmsg.php?username=%s&password=%s&cmd=credit',
  143.                        urlencode($this->_params['user']),
  144.                        urlencode($this->_params['password']));
  145.         $response $this->_callURL($url);
  146.         if (is_a($response'PEAR_Error')) {
  147.             return $response;
  148.         }
  149.  
  150.         /* Try splitting up the response. */
  151.         $lines explode('='$response);
  152.  
  153.         if ($lines[0== 'AQSMS-CREDIT'{
  154.             return $lines[1];
  155.         else {
  156.             return $this->getError($lines[0]_("Could not check balance. %s"));
  157.         }
  158.     }
  159.  
  160.     /**
  161.      * Adds a contact to the gateway's addressbook.
  162.      *
  163.      * @param string $name     The name for this contact
  164.      * @param integer $number  The contact's phone number.
  165.      *
  166.      * @return mixed  The remote contact ID on success or PEAR Error on
  167.      *                 failure.
  168.      */
  169.     function addContact($name$number)
  170.     {
  171.         /* Set up the url and call it. */
  172.         $url sprintf('postcontacts.php?username=%s&password=%s&cmd=ADDCONTACT&name=%s&number=%s',
  173.                        urlencode($this->_params['user']),
  174.                        urlencode($this->_params['password']),
  175.                        urlencode($name),
  176.                        $number);
  177.         $response $this->_callURL($url);
  178.         if (is_a($response'PEAR_Error')) {
  179.             return $response;
  180.         }
  181.  
  182.         /* Check if there was an error response. */
  183.         if (substr($response017!= 'AQSMS-CONTACTIDOK'{
  184.             return $this->getError($response_("Could not add contact. %s"));
  185.         }
  186.  
  187.         /* Split up the response. */
  188.         $lines explode(',='$response);
  189.         return $lines[1];
  190.     }
  191.  
  192.     /**
  193.      * Updates a contact in the gateway's addressbook.
  194.      *
  195.      * @param integer $id      The contact's ID on the gateway.
  196.      * @param string $name     The name for this contact
  197.      * @param integer $number  The contact's phone number.
  198.      *
  199.      * @return mixed  True on success or PEAR Error on failure.
  200.      */
  201.     function updateContact($id$name$number)
  202.     {
  203.         /* Set up the url and call it. */
  204.         $url sprintf('postcontacts.php?username=%s&password=%s&cmd=UPDATECONTACT&id=%s&name=%s&number=%s',
  205.                        urlencode($this->_params['user']),
  206.                        urlencode($this->_params['password']),
  207.                        $id,
  208.                        urlencode($name),
  209.                        $number);
  210.         $response $this->_callURL($url);
  211.         if (is_a($response'PEAR_Error')) {
  212.             return $response;
  213.         }
  214.  
  215.         /* Parse the response. */
  216.         if ($response == 'AQSMS-OK'{
  217.             return true;
  218.         else {
  219.             return $this->getError($response_("Could not update contact. %s"));
  220.         }
  221.     }
  222.  
  223.     /**
  224.      * Deletes a contact in the gateway's addressbook.
  225.      *
  226.      * @param integer $id  The contact's ID on the gateway.
  227.      *
  228.      * @return mixed  True on success or PEAR Error on failure.
  229.      */
  230.     function deleteContact($id)
  231.     {
  232.         /* Set up the url and call it. */
  233.         $url sprintf('postcontacts.php?username=%s&password=%s&cmd=DELETECONTACT&id=%s',
  234.                        urlencode($this->_params['user']),
  235.                        urlencode($this->_params['password']),
  236.                        $id);
  237.         $response $this->_callURL($url);
  238.         if (is_a($response'PEAR_Error')) {
  239.             return $response;
  240.         }
  241.  
  242.         /* Parse the response. */
  243.         if ($response == 'AQSMS-OK'{
  244.             return true;
  245.         else {
  246.             return $this->getError($response_("Could not delete contact. %s"));
  247.         }
  248.     }
  249.  
  250.     /**
  251.      * Fetches the entire address book from the gateway.
  252.      *
  253.      * @return mixed  Array of contacts on success or PEAR Error on failure.
  254.      *                 Format of the returned contacts is for example:<code>
  255.      *                    array(<uniqueid> => array('name'   => <name>,
  256.      *                                              'number' => <number>),
  257.      *                          <uniqueid> => array('name'   => <name>,
  258.      *                                              'number' => <number>));
  259.      *  </code>
  260.      */
  261.     function getAddressBook()
  262.     {
  263.         /* Set up the url and call it. */
  264.         $url sprintf('postcontacts.php?username=%s&password=%s&cmd=GETADDRESSBOOK',
  265.                        urlencode($this->_params['user']),
  266.                        urlencode($this->_params['password']));
  267.         $response $this->_callURL($url);
  268.         if (is_a($response'PEAR_Error')) {
  269.             return $response;
  270.         }
  271.  
  272.         /* Check if there was an error response. */
  273.         if (substr($response019!= 'AQSMS-ADDRESSBOOKOK'{
  274.             return $this->getError($response_("Could not retrieve address book. %s"));
  275.         }
  276.  
  277.         /* Parse the response and construct the array. */
  278.         list($response$contacts_strexplode(','$response2);
  279.  
  280.         /* Check that the full address book list has been received. */
  281.         $length substr($response19);
  282.         if (strlen($contacts_str!= $length{
  283.             return PEAR::raiseError(_("Could not fetch complete address book."));
  284.         }
  285.         $contacts_lines explode("\n"$contacts_str);
  286.         $contacts = array();
  287.         /* Loop through lines and pick out the fields, make sure that the ""
  288.          * are not included in the values, so get the line less 1 char on each
  289.          * end and split for ",". */
  290.         foreach ($contacts_lines as $line{
  291.             list($id$name$numberexplode('","'substr($line1-1));
  292.             $contacts[$id= array('name' => $name'number' => $number);
  293.         }
  294.  
  295.         return $contacts;
  296.     }
  297.  
  298.     /**
  299.      * Creates a new distribution list on the gateway.
  300.      *
  301.      * @param string $name    An arbitrary name for the new list.
  302.      * @param array $numbers  A simple array of numbers to add to the list.
  303.      *
  304.      * @return mixed  Gateway ID for the created list on success or PEAR Error
  305.      *                 on failure.
  306.      */
  307.     function listCreate($name$numbers)
  308.     {
  309.         /* Set up the url and call it. */
  310.         $url sprintf('postdistribution.php?username=%s&password=%s&cmd=ADDDISTLIST&name=%s&numlist=%s',
  311.                        urlencode($this->_params['user']),
  312.                        urlencode($this->_params['password']),
  313.                        urlencode($name),
  314.                        implode(','$numbers));
  315.         $response $this->_callURL($url);
  316.         if (is_a($response'PEAR_Error')) {
  317.             return $response;
  318.         }
  319.  
  320.         /* Check if there was an error response. */
  321.         if (substr($response016!= 'AQSMS-DISTITEMID'{
  322.             return $this->getError($response_("Could not create distribution list. %s"));
  323.         }
  324.  
  325.         /* Parse the response and get the distribution list ID. */
  326.         list($response$idexplode('='$response);
  327.  
  328.         /* TODO: do we need to check the length of the id string? */
  329.  
  330.         return $id;
  331.     }
  332.  
  333.     /**
  334.      * Deletes a distribution list from the gateway.
  335.      *
  336.      * @param string $id  The gateway ID for the list to delete.
  337.      *
  338.      * @return mixed  True on success or PEAR Error on failure.
  339.      */
  340.     function listDelete($id)
  341.     {
  342.         /* Set up the url and call it. */
  343.         $url sprintf('postdistribution.php?username=%s&password=%s&cmd=DELETEDISTLIST&distid=%s',
  344.                        urlencode($this->_params['user']),
  345.                        urlencode($this->_params['password']),
  346.                        $id);
  347.         $response $this->_callURL($url);
  348.         if (is_a($response'PEAR_Error')) {
  349.             return $response;
  350.         }
  351.  
  352.         /* Check response. */
  353.         if ($response == 'AQSMS-OK'{
  354.             return true;
  355.         else {
  356.             return $this->getError($response_("Could not delete distribution list. %s"));
  357.         }
  358.     }
  359.  
  360.     /**
  361.      * Updates a distribution list on the gateway.
  362.      *
  363.      * @param string $id       The gateway ID for the list to update.
  364.      * @param string $name     The arbitrary name of the list. If different
  365.      *                          from the original name that the list was created
  366.      *                          under, the list will be renamed.
  367.      * @param string $numbers  The new list of numbers in the list. If left
  368.      *                          empty, the result will be the same as calling
  369.      *                          the listRename() function.
  370.      *
  371.      * @return mixed  True on success or PEAR Error on failure.
  372.      */
  373.     function listUpdate($id$name$numbers = array())
  374.     {
  375.         /* Set up the url and call it. */
  376.         $url sprintf('postdistribution.php?username=%s&password=%s&cmd=UPDATELISTNAME&distid=%s&name=%s',
  377.                        urlencode($this->_params['user']),
  378.                        urlencode($this->_params['password']),
  379.                        $id,
  380.                        urlencode($name));
  381.  
  382.         /* Check if the list numbers need updating. */
  383.         if (!empty($numbers)) {
  384.             $url .= '&numbers=' implode(','$numbers);
  385.         }
  386.  
  387.         $response $this->_callURL($url);
  388.         if (is_a($response'PEAR_Error')) {
  389.             return $response;
  390.         }
  391.  
  392.         /* Check response. */
  393.         if ($response == 'AQSMS-OK'{
  394.             return true;
  395.         else {
  396.             return $this->getError($response_("Could not update distribution list. %s"));
  397.         }
  398.     }
  399.  
  400.     /**
  401.      * Renames a distribution list on the gateway. Does nothing other than
  402.      * calling the listUpdate() function with just the $id and $name
  403.      * variables.
  404.      *
  405.      * @param string $id    The gateway ID for the list to update.
  406.      * @param string $name  The new arbitrary name for the list.
  407.      *
  408.      * @return mixed  True on success or PEAR Error on failure.
  409.      */
  410.     function listRename($id$name)
  411.     {
  412.         return $this->listUpdate($id$name);
  413.     }
  414.  
  415.     /**
  416.      * Fetches a listing of available distribution lists on the server.
  417.      *
  418.      * @return mixed  An array of lists on success or PEAR Error on failure.
  419.      *                 Format of the returned lists is for example:<code>
  420.      *                    array(<uniqueid> => array('name'   => <name>),
  421.      *                          <uniqueid> => array('name'   => <name>));
  422.      *  </code>
  423.      */
  424.     function getLists()
  425.     {
  426.         /* Set up the url and call it. */
  427.         $url sprintf('postdistribution.php?username=%s&password=%s&cmd=GETCOMPACTLIST',
  428.                        urlencode($this->_params['user']),
  429.                        urlencode($this->_params['password']));
  430.         $response $this->_callURL($url);
  431.         if (is_a($response'PEAR_Error')) {
  432.             return $response;
  433.         }
  434.  
  435.         /* Check if there was an error response. */
  436.         if (substr($response022!= 'AQSMS-DISTRIBUTIONLIST'{
  437.             return $this->getError($response_("Could not retrieve distribution lists. %s"));
  438.         }
  439.  
  440.         /* Parse the response and construct the array. */
  441.         list($response$lists_strexplode(','$response2);
  442.  
  443.         /* Check that the full list of distribution lists has been received. */
  444.         $length substr($response22);
  445.         if (strlen($lists_str!= $length{
  446.             return PEAR::raiseError(_("Could not fetch the complete list of distribution lists."));
  447.         }
  448.         $lists_lines explode("\n"$lists_str);
  449.         $lists = array();
  450.         /* Loop through lines and pick out the fields, make sure that the ""
  451.          * are not included in the values, so get the line less 1 char on each
  452.          * end and split for ",". */
  453.         foreach ($lists_lines as $line{
  454.             list($id$name$countexplode('","'substr($line1-1));
  455.             $lists[$id= array('name'  => $name,
  456.                                 'count' => $count);
  457.         }
  458.  
  459.         return $lists;
  460.     }
  461.  
  462.     /**
  463.      * Fetches a specific distribution list from the gateway.
  464.      *
  465.      * @param string  The ID of the distribution list to fetch.
  466.      *
  467.      * @return mixed  An array of numbers in the list on success or PEAR Error
  468.      *                 on failure.
  469.      */
  470.     function getList($id)
  471.     {
  472.         /* Set up the url and call it. */
  473.         $url sprintf('postdistribution.php?username=%s&password=%s&cmd=GETNUMBERSWITHID&distid=%s',
  474.                        urlencode($this->_params['user']),
  475.                        urlencode($this->_params['password']),
  476.                        $id);
  477.         $response $this->_callURL($url);
  478.         if (is_a($response'PEAR_Error')) {
  479.             return $response;
  480.         }
  481.  
  482.         /* Check if there was an error response. */
  483.         if (substr($response022!= 'AQSMS-DISTRIBUTIONLIST'{
  484.             return $this->getError($response_("Could not retrieve distribution list. %s"));
  485.         }
  486.  
  487.         /* Parse the response and construct the array. */
  488.         list($response$list_strexplode(','$response2);
  489.  
  490.         /* Check that the full list of distribution lists has been received. */
  491.         $length substr($response22);
  492.         if (strlen($list_str!= $length{
  493.             return PEAR::raiseError(_("Could not fetch complete distribution list."));
  494.         }
  495.         $list_str trim($list_str);
  496.         list($count$numbersexplode('","'$list_str);
  497.  
  498.         /* TODO: Anything useful that can be done with the count of numbers at
  499.          * the start? */
  500.         $count substr($count1);
  501.  
  502.         /* Explode the list of numbers into an array and return. */
  503.         $numbers substr($numbers0-1);
  504.         return explode(','$numbers);
  505.     }
  506.  
  507.     /**
  508.      * Identifies this gateway driver and returns a brief description.
  509.      *
  510.      * @return array  Array of driver info.
  511.      */
  512.     function getInfo()
  513.     {
  514.         $info['name'_("sms2email via HTTP");
  515.         $info['desc'_("This driver allows sending of messages through the sms2email (http://sms2email.com) gateway, using the HTTP API");
  516.  
  517.         return $info;
  518.     }
  519.  
  520.     /**
  521.      * Returns the required parameters for this gateway driver. The settable
  522.      * parameters for this gateway are:<pre>
  523.      *   - user            - The username for authentication on the gateway;
  524.      *   - password        - The password for authentication on the gateway;
  525.      *   - ssl             - Whether or not to use SSL for communication with
  526.      *                       the gateway.
  527.      *   - delivery_report - A URL for a script which would accept delivery
  528.      *                       report from the gateway.
  529.      * </pre>
  530.      *
  531.      * @return array  Array of required parameters.
  532.      */
  533.     function getParams()
  534.     {
  535.         $params = array();
  536.         $params['user']     = array('label' => _("Username")'type' => 'text');
  537.         $params['password'= array('label' => _("Password")'type' => 'text');
  538.         $params['ssl']      = array('label'    => _("Use SSL"),
  539.                                     'type'     => 'boolean',
  540.                                     'required' => false);
  541.         $params['delivery_report'= array('label'    => _("URL for your script delivery status report"),
  542.                                            'type'     => 'text',
  543.                                            'required' => false);
  544.  
  545.  
  546.         return $params;
  547.     }
  548.  
  549.     /**
  550.      * Returns the parameters that can be set as default for sending messages
  551.      * using this gateway driver and displayed when sending messages.
  552.      *
  553.      * @return array  Array of parameters that can be set as default.
  554.      */
  555.     function getDefaultSendParams()
  556.     {
  557.         $params = array();
  558.         $params['from'= array(
  559.             'label' => _("Source address"),
  560.             'type' => 'text');
  561.  
  562.         $params['deliv_time'= array(
  563.             'label' => _("Delivery time"),
  564.             'type' => 'enum',
  565.             'params' => array(array('now' => _("immediate")'user' => _("user select"))));
  566.  
  567.         $types = array('SMS_TEXT' => 'SMS_TEXT''SMS_FLASH' => 'SMS_FLASH');
  568.         $params['msg_type'= array(
  569.             'label' => _("Message type"),
  570.             'type' => 'multienum',
  571.             'params' => array($types));
  572.  
  573.         return $params;
  574.     }
  575.  
  576.     /**
  577.      * Returns the parameters for sending messages using this gateway driver,
  578.      * displayed when sending messages. These are filtered out using the
  579.      * default values set up when creating the gateway.
  580.      *
  581.      * @return array  Array of required parameters.
  582.      * @todo  Would be nice to use a time/date setup rather than minutes from
  583.      *         now for the delivery time. Upload field for ringtones/logos?
  584.      */
  585.     function getSendParams($params)
  586.     {
  587.         if (empty($params['from'])) {
  588.             $params['from'= array(
  589.                 'label' => _("Source address"),
  590.                 'type' => 'text');
  591.         }
  592.  
  593.         if ($params['deliv_time'== 'user'{
  594.             $params['deliv_time'= array(
  595.                 'label' => _("Delivery time"),
  596.                 'type' => 'int',
  597.                 'desc' => _("Value in minutes from now."));
  598.         }
  599.  
  600.         if (count($params['msg_type']> 1{
  601.             $params['msg_type'= array(
  602.                 'label' => _("Message type"),
  603.                 'type' => 'enum',
  604.                 'params' => array($params['msg_type']));
  605.         else {
  606.             $params['msg_type'$params['msg_type'][0];
  607.         }
  608.  
  609.         return $params;
  610.     }
  611.  
  612.     /**
  613.      * Returns a string representation of an error code.
  614.      *
  615.      * @param integer $error  The error code to look up.
  616.      * @param string $text    An existing error text to use to raise a
  617.      *                         PEAR Error.
  618.      *
  619.      * @return mixed  A textual message corresponding to the error code or a
  620.      *                 PEAR Error if passed an existing error text.
  621.      *
  622.      * @todo  Check which of these are actually required and trim down the
  623.      *         list.
  624.      */
  625.     function getError($error$error_text '')
  626.     {
  627.         $error trim($error);
  628.  
  629.         /* An array of error codes returned by the gateway. */
  630.         $errors = array(
  631.             'AQSMS-NOAUTHDETAILS'        => _("No username and/or password sent."),
  632.             'AQSMS-AUTHERROR'            => _("Incorrect username and/or password."),
  633.             'AQSMS-NOMSG'                => _("No message supplied."),
  634.             'AQSMS-NODEST'               => _("No destination supplied."),
  635.             'AQSMS-NOCREDIT'             => _("Insufficient credit."),
  636.             'AQSMS-NONAMESUPPLIED'       => _("No name specified."),
  637.             'AQSMS-NONUMBERSUPPLIED'     => _("No number specified."),
  638.             'AQSMS-ADDRESSBOOKERROR'     => _("There was an error performing the specified address book function. Please try again later."),
  639.             'AQSMS-CONTACTIDERROR'       => _("The contact ID number was not specified, left blank or was not found in the database."),
  640.             'AQSMS-CONTACTUPDATEERROR'   => _("There was an error updating the contact details. Please try again later."),
  641.             'AQSMS-DISTIDERROR'          => _("The distribution list ID was either not specified, left blank or not found in the database."),
  642.             'AQSMS-NODISTLISTSUPPLIED'   => _("The distribution list was not specified."),
  643.             'AQSMS-INSUFFICIENTCREDITS'  => _("Insufficient credit to send to the distribution list."),
  644.             'AQSMS-NONUMBERLISTSUPPLIED' => _("Numbers not specified for updating in distribution list."),
  645.             'AQSMS-DISTLISTUPDATEERROR'  => _("There was an error updating the distribution list. Please try again later."));
  646.  
  647.         if (empty($error_text)) {
  648.             return $errors[$error];
  649.         else {
  650.             return PEAR::raiseError(sprintf($error_text$errors[$error]));
  651.         }
  652.     }
  653.  
  654.     /**
  655.      * Do the http call using a url passed to the function.
  656.      *
  657.      * @access private
  658.      *
  659.      * @param string $url  The url to call.
  660.      *
  661.      * @return mixed  The response on success or PEAR Error on failure.
  662.      */
  663.     function _callURL($url)
  664.     {
  665.         $options['method''POST';
  666.         $options['timeout'= 5;
  667.         $options['allowRedirects'= true;
  668.  
  669.         $url (empty($this->_params['ssl']'http://' 'https://'$this->_base_url $url;
  670.  
  671.         if (!@include_once 'HTTP/Request.php'{
  672.             return PEAR::raiseError(_("Missing PEAR package HTTP_Request."));
  673.         }
  674.         $http &new HTTP_Request($url$options);
  675.         @$http->sendRequest();
  676.         if ($http->getResponseCode(!= 200{
  677.             return PEAR::raiseError(sprintf(_("Could not open %s.")$url));
  678.         }
  679.  
  680.         return $http->getResponseBody();
  681.     }
  682.  
  683. }

Documentation generated on Mon, 11 Mar 2019 14:39:04 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.