freenetis-github/application/libraries/Sms.php @ 49a8b6b4
8baed187 | Michal Kliment | <?php defined('SYSPATH') or die('No direct script access.');
|
|
/*
|
|||
* This file is part of open source system FreenetIS
|
|||
* and it is released under GPLv3 licence.
|
|||
*
|
|||
* More info about licence can be found:
|
|||
* http://www.gnu.org/licenses/gpl-3.0.html
|
|||
*
|
|||
* More info about project can be found:
|
|||
* http://www.freenetis.org/
|
|||
*
|
|||
*/
|
|||
/**
|
|||
* Abstract class for SMS drivers.
|
|||
*
|
|||
* @author Roman Sevcik, Ondrej Fibich
|
|||
*/
|
|||
abstract class Sms
|
|||
{
|
|||
// prefix for drivers classes
|
|||
const DRIVER_CLASS_PREFIX = 'Sms_';
|
|||
// state of driver (these are used in database table config)
|
|||
const DRIVER_INACTIVE = 1;
|
|||
const DRIVER_ACTIVE = 2;
|
|||
// ids of drivers (these are used in database table sms_messages)
|
|||
const SOUNDWINV100 = 2;
|
|||
const KLIKNIAVOLEJ = 3;
|
|||
/**
|
|||
* Array of availables drivers for factory method.
|
|||
* Keys:
|
|||
*
|
|||
* id ID used in databse
|
|||
* name Name
|
|||
* description Another info about driver for user
|
|||
* hostname Hostname of gateway [optional]
|
|||
c1bdc1c4 | Michal Kliment | * help Translatable help hint string [optional]
|
|
8baed187 | Michal Kliment | * test_mode_enabled Indicator of test mode (driver does not send anything)
|
|
*
|
|||
* @var array
|
|||
*/
|
|||
private static $DRIVERS = array
|
|||
(
|
|||
'SOUNDWINV100' => array
|
|||
(
|
|||
'id' => self::SOUNDWINV100,
|
|||
'name' => 'Soundwin V100',
|
|||
'class' => 'Soudvinv100',
|
|||
'description' => 'GMS',
|
|||
c1bdc1c4 | Michal Kliment | 'help' => 'sms_driver_soudvinv100',
|
|
8baed187 | Michal Kliment | 'test_mode_enabled' => FALSE,
|
|
),
|
|||
'KLIKNIAVOLEJ' => array
|
|||
(
|
|||
'id' => self::KLIKNIAVOLEJ,
|
|||
'name' => 'KlikniaVolej.cz',
|
|||
'class' => 'Klikniavolej',
|
|||
'description' => 'SMS',
|
|||
fa4d0224 | Ondřej Fibich | 'hostname' => 'api.klikniavolej.cz:80',
|
|
c1bdc1c4 | Michal Kliment | 'help' => 'sms_driver_klikniavolej',
|
|
8baed187 | Michal Kliment | 'test_mode_enabled' => TRUE,
|
|
),
|
|||
);
|
|||
/**
|
|||
* ID of loaded driver (loaded automaticly in factory method)
|
|||
*
|
|||
* @var integer
|
|||
*/
|
|||
private $driver = FALSE;
|
|||
/**
|
|||
* Hostname of gate
|
|||
*
|
|||
* @var string
|
|||
*/
|
|||
protected $hostname;
|
|||
/**
|
|||
* User for connecting to the gate
|
|||
*
|
|||
* @var string
|
|||
*/
|
|||
protected $user;
|
|||
/**
|
|||
* Password for connecting to the gate
|
|||
*
|
|||
* @var string
|
|||
*/
|
|||
protected $password;
|
|||
/**
|
|||
* Factory for SMS drivers
|
|||
*
|
|||
* @param mixed $driver String index of driver or integer ID of driver.
|
|||
* @return Sms Sms instance or NULL if driver name or ID is incorect.
|
|||
*/
|
|||
public static function factory($driver)
|
|||
{
|
|||
$selected_driver = self::_get_driver_index($driver);
|
|||
if ($selected_driver)
|
|||
{
|
|||
$driver = self::$DRIVERS[$selected_driver];
|
|||
$class_name = self::DRIVER_CLASS_PREFIX . $driver['class'];
|
|||
if (Kohana::auto_load($class_name))
|
|||
{
|
|||
/* @var $sms_driver_instance Sms */
|
|||
$sms_driver_instance = new $class_name;
|
|||
$sms_driver_instance->driver = $driver['id'];
|
|||
$sms_driver_instance->hostname = @$driver['hostname'];
|
|||
return $sms_driver_instance;
|
|||
}
|
|||
}
|
|||
return NULL;
|
|||
}
|
|||
/**
|
|||
* Gets index of driver
|
|||
*
|
|||
* @param mixed $driver String index of driver or integer ID of driver.
|
|||
* @return mixed String key on success FALSE on error.
|
|||
*/
|
|||
private static function _get_driver_index($driver)
|
|||
{
|
|||
if (array_key_exists($driver, self::$DRIVERS))
|
|||
{
|
|||
return $driver;
|
|||
}
|
|||
else
|
|||
{
|
|||
foreach (self::$DRIVERS as $key => $available_driver)
|
|||
{
|
|||
if ($available_driver['id'] == $driver)
|
|||
{
|
|||
return $key;
|
|||
}
|
|||
}
|
|||
}
|
|||
return FALSE;
|
|||
}
|
|||
/**
|
|||
* Gets name of driver
|
|||
*
|
|||
* @param integer $driver String index of driver or integer ID of driver.
|
|||
c1bdc1c4 | Michal Kliment | * @param boolean $with_help Should contain name help as well [optional]
|
|
8baed187 | Michal Kliment | * @return string
|
|
*/
|
|||
c1bdc1c4 | Michal Kliment | public static function get_driver_name($driver, $with_help = FALSE)
|
|
8baed187 | Michal Kliment | {
|
|
$selected_driver = self::_get_driver_index($driver);
|
|||
if ($selected_driver)
|
|||
{
|
|||
$d = self::$DRIVERS[$selected_driver];
|
|||
c1bdc1c4 | Michal Kliment | $name = $d['description'] . ' ' . __('Gateway') . ' ' . $d['name'];
|
|
// help available?
|
|||
if ($with_help && isset($d['help']))
|
|||
{
|
|||
$name .= ' ' . help::hint($d['help']);
|
|||
}
|
|||
return $name;
|
|||
8baed187 | Michal Kliment | }
|
|
return __('Inactive');
|
|||
}
|
|||
/**
|
|||
* Gets drivers array
|
|||
*
|
|||
* @return array
|
|||
*/
|
|||
public static function get_drivers()
|
|||
{
|
|||
return self::$DRIVERS;
|
|||
}
|
|||
/**
|
|||
* Gets list of active drivers for selectboxes.
|
|||
* Key is id of driver and value is name.
|
|||
*
|
|||
* @return array
|
|||
*/
|
|||
public static function get_active_drivers()
|
|||
{
|
|||
$available_drivers = self::get_drivers();
|
|||
$active_drivers = array();
|
|||
foreach ($available_drivers as $driver)
|
|||
{
|
|||
$key = $driver['id'];
|
|||
if (Settings::get('sms_driver_state' . $key) == Sms::DRIVER_ACTIVE)
|
|||
{
|
|||
$active_drivers[$key] = Sms::get_driver_name($key);
|
|||
}
|
|||
}
|
|||
return $active_drivers;
|
|||
}
|
|||
/**
|
|||
* Check if there are any active drivers
|
|||
*
|
|||
* @return bool
|
|||
*/
|
|||
public static function has_active_driver()
|
|||
{
|
|||
return count(self::get_active_drivers());
|
|||
}
|
|||
/**
|
|||
* Checks if SMS are enabled on server
|
|||
*
|
|||
* @return bool
|
|||
*/
|
|||
public static function enabled()
|
|||
{
|
|||
return function_exists('curl_init');
|
|||
}
|
|||
/**
|
|||
* Construct cannot be called from outside
|
|||
*/
|
|||
protected function __construct()
|
|||
{
|
|||
}
|
|||
/**
|
|||
* Sets hostname of gate
|
|||
*
|
|||
* @param string $hostname
|
|||
*/
|
|||
public function set_hostname($hostname)
|
|||
{
|
|||
$this->hostname = $hostname;
|
|||
}
|
|||
/**
|
|||
* Sets user to gate
|
|||
*
|
|||
* @param string $user
|
|||
*/
|
|||
public function set_user($user)
|
|||
{
|
|||
$this->user = $user;
|
|||
}
|
|||
/**
|
|||
* Sets password to gate
|
|||
*
|
|||
* @param string $password
|
|||
*/
|
|||
public function set_password($password)
|
|||
{
|
|||
$this->password = $password;
|
|||
}
|
|||
/**
|
|||
* Sets test (no SMS are sended, just states are made).
|
|||
* Do nothing by default.
|
|||
*
|
|||
* @param bool $test
|
|||
*/
|
|||
public function set_test($test)
|
|||
{
|
|||
}
|
|||
/**
|
|||
* Gets state of message
|
|||
*
|
|||
* @return mixed State or FALSE on no error
|
|||
*/
|
|||
abstract public function get_status();
|
|||
/**
|
|||
* Gets error report
|
|||
*
|
|||
* @return mixed Error report or FALSE on no error
|
|||
*/
|
|||
abstract public function get_error();
|
|||
/**
|
|||
* Test if connection to server is OK
|
|||
*
|
|||
* @return bool
|
|||
*/
|
|||
abstract public function test_conn();
|
|||
/**
|
|||
* Try to send SMS messages
|
|||
*
|
|||
* @param string $sender Sender of message
|
|||
* @param string $recipient Recipier of message
|
|||
* @param string $message Text of message
|
|||
* @return boolean FALSE on error TRUE on success
|
|||
*/
|
|||
abstract public function send($sender, $recipient, $message);
|
|||
/**
|
|||
* Try to receive SMS messages
|
|||
*
|
|||
* @return boolean FALSE on error TRUE on success
|
|||
*/
|
|||
abstract public function receive();
|
|||
/**
|
|||
* Gets recieved messages after receive
|
|||
*
|
|||
* @return array
|
|||
*/
|
|||
abstract public function get_received_messages();
|
|||
}
|