mirror of
https://github.com/fusionpbx/fusionpbx.git
synced 2026-01-06 11:43:50 +00:00
Initial Rewrite
This commit is contained in:
155
core/install/resources/classes/detect_switch.php
Normal file
155
core/install/resources/classes/detect_switch.php
Normal file
@@ -0,0 +1,155 @@
|
||||
<?php
|
||||
/*
|
||||
FusionPBX
|
||||
Version: MPL 1.1
|
||||
|
||||
The contents of this file are subject to the Mozilla Public License Version
|
||||
1.1 (the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
http://www.mozilla.org/MPL/
|
||||
|
||||
Software distributed under the License is distributed on an "AS IS" basis,
|
||||
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
for the specific language governing rights and limitations under the
|
||||
License.
|
||||
|
||||
The Original Code is FusionPBX
|
||||
|
||||
The Initial Developer of the Original Code is
|
||||
Mark J Crane <markjcrane@fusionpbx.com>
|
||||
Copyright (C) 2010-2015
|
||||
All Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
Matthew Vale <github@mafoo.org>
|
||||
|
||||
*/
|
||||
require_once "root.php";
|
||||
require_once "resources/classes/EventSocket.php";
|
||||
|
||||
//define the install class
|
||||
class detect_switch {
|
||||
|
||||
// version information
|
||||
protected $_major;
|
||||
protected $_minor;
|
||||
|
||||
// folders
|
||||
protected $_base_dir = '';
|
||||
protected $_cache_dir = '';
|
||||
protected $_certs_dir = '';
|
||||
protected $_conf_dir = '';
|
||||
protected $_db_dir = '';
|
||||
protected $_external_ssl_dir = '';
|
||||
protected $_grammar_dir = '';
|
||||
protected $_htdocs_dir = '';
|
||||
protected $_internal_ssl_dir = '';
|
||||
protected $_log_dir = '';
|
||||
protected $_mod_dir = '';
|
||||
protected $_recordings_dir = '';
|
||||
protected $_run_dir = '';
|
||||
protected $_script_dir = '';
|
||||
protected $_sounds_dir = '';
|
||||
protected $_storage_dir = '';
|
||||
protected $_temp_dir = '';
|
||||
|
||||
function major() { return $this->_major; }
|
||||
function minor() { return $this->_minor; }
|
||||
function base_dir() { return $this->_base_dir; }
|
||||
function cache_dir() { return $this->_cache_dir; }
|
||||
function certs_dir() { return $this->_certs_dir; }
|
||||
function conf_dir() { return $this->_conf_dir; }
|
||||
function db_dir() { return $this->_db_dir; }
|
||||
function external_ssl_dir() { return $this->_external_ssl_dir; }
|
||||
function grammar_dir() { return $this->_grammar_dir; }
|
||||
function htdocs_dir() { return $this->_htdocs_dir; }
|
||||
function internal_ssl_dir() { return $this->_internal_ssl_dir; }
|
||||
function log_dir() { return $this->_log_dir; }
|
||||
function mod_dir() { return $this->_mod_dir; }
|
||||
function recordings_dir() { return $this->_recordings_dir; }
|
||||
function run_dir() { return $this->_run_dir; }
|
||||
function script_dir() { return $this->_script_dir; }
|
||||
function sounds_dir() { return $this->_sounds_dir; }
|
||||
function storage_dir() { return $this->_storage_dir; }
|
||||
function temp_dir() { return $this->_temp_dir; }
|
||||
|
||||
// event socket
|
||||
public $event_host = 'localhost';
|
||||
public $event_port = '8021';
|
||||
public $event_password = 'ClueCon';
|
||||
protected $event_socket;
|
||||
|
||||
public function __construct($event_host, $event_port, $event_password) {
|
||||
if($event_host){ $this->event_host = $event_host; }
|
||||
if($event_port){ $this->event_port = $event_port; }
|
||||
if($event_password){ $this->event_password = $event_password; }
|
||||
$this->connect_event_socket();
|
||||
if(!$this->event_socket){
|
||||
$this->detect_event_socket();
|
||||
}
|
||||
}
|
||||
|
||||
protected function detect_event_socket() {
|
||||
//perform searches for user's config here
|
||||
}
|
||||
|
||||
public function detect() {
|
||||
$this->connect_event_socket();
|
||||
if(!$this->event_socket){
|
||||
throw new Exception('Failed to use event socket');
|
||||
}
|
||||
$FS_Version = $this->event_socket_request('api version');
|
||||
preg_match("/FreeSWITCH Version (\d+)\.(\d(?:\.\d+)?)/", $FS_Version, $matches);
|
||||
$this->_major = $matches[1];
|
||||
$this->_minor = $matches[2];
|
||||
$FS_Vars = $this->event_socket_request('api global_getvar');
|
||||
foreach (explode("\n",$FS_Vars) as $FS_Var){
|
||||
preg_match("/(\w+_dir)=(.*)/", $FS_Var, $matches);
|
||||
if(count($matches) > 0 and property_exists($this, "_" . $matches[1])){
|
||||
$field = "_" . $matches[1];
|
||||
$this->$field = $matches[2];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function show_config() {
|
||||
$buffer = '';
|
||||
$buffer .= "FreeSWITCH Verson => " . $this->_major . "." . $this->_minor . "\n";
|
||||
$buffer .= "base_dir => " . $this->_base_dir ."\n";
|
||||
$buffer .= "cache_dir => " . $this->_cache_dir ."\n";
|
||||
$buffer .= "certs_dir => " . $this->_certs_dir ."\n";
|
||||
$buffer .= "conf_dir => " . $this->_conf_dir ."\n";
|
||||
$buffer .= "db_dir => " . $this->_db_dir ."\n";
|
||||
$buffer .= "external_ssl_dir => " . $this->_external_ssl_dir ."\n";
|
||||
$buffer .= "grammar_dir => " . $this->_grammar_dir ."\n";
|
||||
$buffer .= "htdocs_dir => " . $this->_htdocs_dir ."\n";
|
||||
$buffer .= "internal_ssl_dir => " . $this->_internal_ssl_dir ."\n";
|
||||
$buffer .= "log_dir => " . $this->_log_dir ."\n";
|
||||
$buffer .= "mod_dir => " . $this->_mod_dir ."\n";
|
||||
$buffer .= "recordings_dir => " . $this->_recordings_dir ."\n";
|
||||
$buffer .= "run_dir => " . $this->_run_dir ."\n";
|
||||
$buffer .= "script_dir => " . $this->_script_dir ."\n";
|
||||
$buffer .= "sounds_dir => " . $this->_sounds_dir ."\n";
|
||||
$buffer .= "storage_dir => " . $this->_storage_dir ."\n";
|
||||
$buffer .= "temp_dir => " . $this->_temp_dir ."\n";
|
||||
return $buffer;
|
||||
}
|
||||
|
||||
protected function connect_event_socket(){
|
||||
$esl = new EventSocket;
|
||||
if ($esl->connect($this->event_host, $this->event_port, $this->event_password)) {
|
||||
$this->event_socket = $esl->reset_fp();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected function event_socket_request($cmd) {
|
||||
$esl = new EventSocket($this->event_socket);
|
||||
$result = $esl->request($cmd);
|
||||
$esl->reset_fp();
|
||||
return $result;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
992
core/install/resources/classes/install_fusionpbx.php
Normal file
992
core/install/resources/classes/install_fusionpbx.php
Normal file
@@ -0,0 +1,992 @@
|
||||
<?php
|
||||
/*
|
||||
FusionPBX
|
||||
Version: MPL 1.1
|
||||
|
||||
The contents of this file are subject to the Mozilla Public License Version
|
||||
1.1 (the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
http://www.mozilla.org/MPL/
|
||||
|
||||
Software distributed under the License is distributed on an "AS IS" basis,
|
||||
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
for the specific language governing rights and limitations under the
|
||||
License.
|
||||
|
||||
The Original Code is FusionPBX
|
||||
|
||||
The Initial Developer of the Original Code is
|
||||
Mark J Crane <markjcrane@fusionpbx.com>
|
||||
Copyright (C) 2010-2015
|
||||
All Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
Mark J Crane <markjcrane@fusionpbx.com>
|
||||
Matthew Vale <github@mafoo.org>
|
||||
*/
|
||||
include "root.php";
|
||||
|
||||
//define the install class
|
||||
class install_fusionpbx {
|
||||
|
||||
protected $domain_uuid;
|
||||
protected $domain_name;
|
||||
protected $detect_switch;
|
||||
protected $config_php;
|
||||
protected $menu_uuid = 'b4750c3f-2a86-b00d-b7d0-345c14eca286';
|
||||
protected $dbh;
|
||||
|
||||
public $debug = false;
|
||||
|
||||
public $install_msg;
|
||||
public $install_language = 'en-us';
|
||||
public $admin_username;
|
||||
public $admin_password;
|
||||
public $default_country = 'US';
|
||||
public $template_name = 'enhanced';
|
||||
|
||||
public $db_type;
|
||||
public $db_path;
|
||||
public $db_host;
|
||||
public $db_port;
|
||||
public $db_name;
|
||||
public $db_username;
|
||||
public $db_password;
|
||||
|
||||
function __construct($domain_name, $domain_uuid, $detect_switch) {
|
||||
if(!is_a($detect_switch, 'detect_switch')){
|
||||
throw new Exception('The parameter $detect_switch must be a detect_switch object (or a subclass of)');
|
||||
}
|
||||
$this->domain_uuid = $domain_uuid;
|
||||
$this->domain_name = $domain_name;
|
||||
$this->detect_switch = $detect_switch;
|
||||
if (is_dir("/etc/fusionpbx")){
|
||||
$this->config_php = "/etc/fusionpbx/config.php";
|
||||
} elseif (is_dir("/usr/local/etc/fusionpbx")){
|
||||
$this->config_php = "/usr/local/etc/fusionpbx/config.php";
|
||||
}
|
||||
elseif (is_dir($_SERVER['DOCUMENT_ROOT'].PROJECT_PATH."/resources")) {
|
||||
$this->config_php = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/resources/config.php";
|
||||
}
|
||||
else {
|
||||
$this->config_php = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/resources/config.php";
|
||||
}
|
||||
}
|
||||
|
||||
function write_debug($message) {
|
||||
if($this->debug){
|
||||
echo "$message\n";
|
||||
}
|
||||
}
|
||||
|
||||
function write_progress($message) {
|
||||
echo "$message\n";
|
||||
}
|
||||
|
||||
function install() {
|
||||
ini_set('max_execution_time',3600);
|
||||
$this->create_config_php();
|
||||
$this->create_database();
|
||||
$this->create_domain();
|
||||
$this->create_superuser();
|
||||
require "resources/require.php";
|
||||
$this->create_menus();
|
||||
$this->post_create();
|
||||
}
|
||||
|
||||
protected function create_config_php() {
|
||||
$tmp_config = "<?php\n";
|
||||
$tmp_config .= "/* \$Id\$ */\n";
|
||||
$tmp_config .= "/*\n";
|
||||
$tmp_config .= " config.php\n";
|
||||
$tmp_config .= " Copyright (C) 2008, 2013 Mark J Crane\n";
|
||||
$tmp_config .= " All rights reserved.\n";
|
||||
$tmp_config .= "\n";
|
||||
$tmp_config .= " Redistribution and use in source and binary forms, with or without\n";
|
||||
$tmp_config .= " modification, are permitted provided that the following conditions are met:\n";
|
||||
$tmp_config .= "\n";
|
||||
$tmp_config .= " 1. Redistributions of source code must retain the above copyright notice,\n";
|
||||
$tmp_config .= " this list of conditions and the following disclaimer.\n";
|
||||
$tmp_config .= "\n";
|
||||
$tmp_config .= " 2. Redistributions in binary form must reproduce the above copyright\n";
|
||||
$tmp_config .= " notice, this list of conditions and the following disclaimer in the\n";
|
||||
$tmp_config .= " documentation and/or other materials provided with the distribution.\n";
|
||||
$tmp_config .= "\n";
|
||||
$tmp_config .= " THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,\n";
|
||||
$tmp_config .= " INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY\n";
|
||||
$tmp_config .= " AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n";
|
||||
$tmp_config .= " AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n";
|
||||
$tmp_config .= " OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n";
|
||||
$tmp_config .= " SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n";
|
||||
$tmp_config .= " INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n";
|
||||
$tmp_config .= " CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n";
|
||||
$tmp_config .= " ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n";
|
||||
$tmp_config .= " POSSIBILITY OF SUCH DAMAGE.\n";
|
||||
$tmp_config .= "*/\n";
|
||||
$tmp_config .= "\n";
|
||||
$tmp_config .= "//-----------------------------------------------------\n";
|
||||
$tmp_config .= "// settings:\n";
|
||||
$tmp_config .= "//-----------------------------------------------------\n";
|
||||
$tmp_config .= "\n";
|
||||
$tmp_config .= " //set the database type\n";
|
||||
$tmp_config .= " \$db_type = '".$this->db_type."'; //sqlite, mysql, pgsql, others with a manually created PDO connection\n";
|
||||
$tmp_config .= "\n";
|
||||
if ($this->db_type == "sqlite") {
|
||||
$tmp_config .= " //sqlite: the db_name and db_path are automatically assigned however the values can be overidden by setting the values here.\n";
|
||||
$tmp_config .= " \$db_name = '".$this->db_name."'; //host name/ip address + '.db' is the default database filename\n";
|
||||
$tmp_config .= " \$db_path = '".$this->db_path."'; //the path is determined by a php variable\n";
|
||||
}
|
||||
$tmp_config .= "\n";
|
||||
$tmp_config .= " //mysql: database connection information\n";
|
||||
if ($this->db_type == "mysql") {
|
||||
if ($this->db_host == "localhost") {
|
||||
//if localhost is used it defaults to a Unix Socket which doesn't seem to work.
|
||||
//replace localhost with 127.0.0.1 so that it will connect using TCP
|
||||
$this->db_host = "127.0.0.1";
|
||||
}
|
||||
$tmp_config .= " \$db_host = '".$this->db_host."';\n";
|
||||
$tmp_config .= " \$db_port = '".$this->db_port."';\n";
|
||||
$tmp_config .= " \$db_name = '".$this->db_name."';\n";
|
||||
$tmp_config .= " \$db_username = '".$this->db_username."';\n";
|
||||
$tmp_config .= " \$db_password = '".$this->db_password."';\n";
|
||||
}
|
||||
else {
|
||||
$tmp_config .= " //\$db_host = '';\n";
|
||||
$tmp_config .= " //\$db_port = '';\n";
|
||||
$tmp_config .= " //\$db_name = '';\n";
|
||||
$tmp_config .= " //\$db_username = '';\n";
|
||||
$tmp_config .= " //\$db_password = '';\n";
|
||||
}
|
||||
$tmp_config .= "\n";
|
||||
$tmp_config .= " //pgsql: database connection information\n";
|
||||
if ($this->db_type == "pgsql") {
|
||||
$tmp_config .= " \$db_host = '".$this->db_host."'; //set the host only if the database is not local\n";
|
||||
$tmp_config .= " \$db_port = '".$this->db_port."';\n";
|
||||
$tmp_config .= " \$db_name = '".$this->db_name."';\n";
|
||||
$tmp_config .= " \$db_username = '".$this->db_username."';\n";
|
||||
$tmp_config .= " \$db_password = '".$this->db_password."';\n";
|
||||
}
|
||||
else {
|
||||
$tmp_config .= " //\$db_host = '".$this->db_host."'; //set the host only if the database is not local\n";
|
||||
$tmp_config .= " //\$db_port = '".$this->db_port."';\n";
|
||||
$tmp_config .= " //\$db_name = '".$this->db_name."';\n";
|
||||
$tmp_config .= " //\$db_username = '".$this->db_username."';\n";
|
||||
$tmp_config .= " //\$db_password = '".$this->db_password."';\n";
|
||||
}
|
||||
$tmp_config .= "\n";
|
||||
$tmp_config .= " //show errors\n";
|
||||
$tmp_config .= " ini_set('display_errors', '1');\n";
|
||||
$tmp_config .= " //error_reporting (E_ALL); // Report everything\n";
|
||||
$tmp_config .= " //error_reporting (E_ALL ^ E_NOTICE); // Report everything\n";
|
||||
$tmp_config .= " error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING ); //hide notices and warnings";
|
||||
$tmp_config .= "\n";
|
||||
$tmp_config .= "?>";
|
||||
|
||||
if((file_exists($this->config_php) and !is_writable($this->config_php))
|
||||
or !is_writable(dirname($this->config_php))
|
||||
){
|
||||
throw new Exception("cannot write to '" . $this->config_php . "'" );
|
||||
}
|
||||
$this->write_progress("Creating " . $this->config_php);
|
||||
$fout = fopen($this->config_php,"w");
|
||||
fwrite($fout, $tmp_config);
|
||||
unset($tmp_config);
|
||||
fclose($fout);
|
||||
}
|
||||
|
||||
protected function create_database() {
|
||||
require $this->config_php;
|
||||
$this->write_progress("creating database as " . $this->db_type);
|
||||
$function = "create_database_" . $this->db_type;
|
||||
$this->$function();
|
||||
global $db;
|
||||
$db = $this->dbh;
|
||||
}
|
||||
protected function create_database_sqlite() {
|
||||
//sqlite database will be created when the config.php is loaded and only if the database file does not exist
|
||||
try {
|
||||
$this->dbh = new PDO('sqlite:'.$this->db_path.'/'.$this->db_name); //sqlite 3
|
||||
//$this->dbh = new PDO('sqlite::memory:'); //sqlite 3
|
||||
}
|
||||
catch (PDOException $error) {
|
||||
throw Exception("Failed to create database: " . $error->getMessage());
|
||||
}
|
||||
|
||||
//add additional functions to SQLite - bool PDO::sqliteCreateFunction ( string function_name, callback callback [, int num_args] )
|
||||
if (!function_exists('php_now')) {
|
||||
function php_now() {
|
||||
if(function_exists("date_default_timezone_set") and function_exists("date_default_timezone_get")) {
|
||||
@date_default_timezone_set(@date_default_timezone_get());
|
||||
}
|
||||
return date("Y-m-d H:i:s");
|
||||
}
|
||||
}
|
||||
$this->dbh->sqliteCreateFunction('now', 'php_now', 0);
|
||||
|
||||
//add the database structure
|
||||
require_once "resources/classes/schema.php";
|
||||
$schema = new schema;
|
||||
$schema->db = $this->dbh;
|
||||
$schema->db_type = $this->db_type;
|
||||
$schema->sql();
|
||||
$schema->exec();
|
||||
|
||||
//get the contents of the sql file
|
||||
if (file_exists('/usr/share/examples/fusionpbx/resources/install/sql/sqlite.sql')){
|
||||
$filename = "/usr/share/examples/fusionpbx/resources/install/sql/sqlite.sql";
|
||||
}
|
||||
else {
|
||||
$filename = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/resources/install/sql/sqlite.sql';
|
||||
}
|
||||
$file_contents = file_get_contents($filename);
|
||||
unset($filename);
|
||||
|
||||
//replace \r\n with \n then explode on \n
|
||||
$file_contents = str_replace("\r\n", "\n", $file_contents);
|
||||
|
||||
//loop line by line through all the lines of sql code
|
||||
$this->dbh->beginTransaction();
|
||||
$string_array = explode("\n", $file_contents);
|
||||
$x = 0;
|
||||
foreach($string_array as $sql) {
|
||||
try {
|
||||
$this->dbh->query($sql);
|
||||
}
|
||||
catch (PDOException $error) {
|
||||
throw new Exception("error creating database: " . $error->getMessage() . "\n" . $sql );
|
||||
}
|
||||
$x++;
|
||||
}
|
||||
unset ($file_contents, $sql);
|
||||
$this->dbh->commit();
|
||||
|
||||
//set the file permissions
|
||||
chmod($this->db_path.'/'.$this->db_name, 0777);
|
||||
}
|
||||
|
||||
protected function create_database_pgsql() {
|
||||
|
||||
//if $this->db_create_username provided, attempt to create new PG role and database
|
||||
if (strlen($this->db_create_username) > 0) {
|
||||
try {
|
||||
if (strlen($this->db_port) == 0) { $this->db_port = "5432"; }
|
||||
if (strlen($this->db_host) > 0) {
|
||||
$this->dbh = new PDO("pgsql:host={$this->db_host} port={$this->db_port} user={".$this->db_create_username."} password={".$this->db_create_password."} dbname=template1");
|
||||
} else {
|
||||
$this->dbh = new PDO("pgsql:host=localhost port={$this->db_port} user={".$this->db_create_username."} password={".$this->db_create_password."} dbname=template1");
|
||||
}
|
||||
} catch (PDOException $error) {
|
||||
throw new Exception("error connecting to database: " . $error->getMessage());
|
||||
}
|
||||
|
||||
//create the database, user, grant perms
|
||||
$this->dbh->exec("CREATE DATABASE {$this->db_name}");
|
||||
$this->dbh->exec("CREATE USER {$this->db_username} WITH PASSWORD '{$this->db_password}'");
|
||||
$this->dbh->exec("GRANT ALL ON {$this->db_name} TO {$this->db_username}");
|
||||
|
||||
//close database connection_aborted
|
||||
$this->dbh = null;
|
||||
}
|
||||
|
||||
//open database connection with $this->db_name
|
||||
try {
|
||||
if (strlen($this->db_port) == 0) { $this->db_port = "5432"; }
|
||||
if (strlen($this->db_host) > 0) {
|
||||
$this->dbh = new PDO("pgsql:host={$this->db_host} port={$this->db_port} dbname={$this->db_name} user={$this->db_username} password={$this->db_password}");
|
||||
} else {
|
||||
$this->dbh = new PDO("pgsql:host=localhost port={$this->db_port} user={$this->db_username} password={$this->db_password} dbname={$this->db_name}");
|
||||
}
|
||||
}
|
||||
catch (PDOException $error) {
|
||||
throw new Exception("error connecting to database: " . $error->getMessage());
|
||||
}
|
||||
|
||||
//add the database structure
|
||||
require_once "resources/classes/schema.php";
|
||||
$schema = new schema;
|
||||
$schema->db = $this->dbh;
|
||||
$schema->db_type = $this->db_type;
|
||||
$schema->sql();
|
||||
$schema->exec();
|
||||
|
||||
//get the contents of the sql file
|
||||
if (file_exists('/usr/share/examples/fusionpbx/resources/install/sql/pgsql.sql')){
|
||||
$filename = "/usr/share/examples/fusionpbx/resources/install/sql/pgsql.sql";
|
||||
}
|
||||
else {
|
||||
$filename = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/resources/install/sql/pgsql.sql';
|
||||
}
|
||||
$file_contents = file_get_contents($filename);
|
||||
|
||||
//replace \r\n with \n then explode on \n
|
||||
$file_contents = str_replace("\r\n", "\n", $file_contents);
|
||||
|
||||
//loop line by line through all the lines of sql code
|
||||
$string_array = explode("\n", $file_contents);
|
||||
$x = 0;
|
||||
foreach($string_array as $sql) {
|
||||
if (strlen($sql) > 3) {
|
||||
try {
|
||||
$this->dbh->query($sql);
|
||||
}
|
||||
catch (PDOException $error) {
|
||||
throw new Exception("error creating database: " . $error->getMessage() . "\n" . $sql );
|
||||
}
|
||||
}
|
||||
$x++;
|
||||
}
|
||||
unset ($file_contents, $sql);
|
||||
}
|
||||
|
||||
protected function create_database_mysql() {
|
||||
//database connection
|
||||
try {
|
||||
if (strlen($this->db_host) == 0 && strlen($this->db_port) == 0) {
|
||||
//if both host and port are empty use the unix socket
|
||||
if (strlen($this->db_create_username) == 0) {
|
||||
$this->dbh = new PDO("mysql:host=$this->db_host;unix_socket=/var/run/mysqld/mysqld.sock;", $this->db_username, $this->db_password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
|
||||
}
|
||||
else {
|
||||
$this->dbh = new PDO("mysql:host=$this->db_host;unix_socket=/var/run/mysqld/mysqld.sock;", $this->db_create_username, $this->db_create_password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (strlen($this->db_port) == 0) {
|
||||
//leave out port if it is empty
|
||||
if (strlen($this->db_create_username) == 0) {
|
||||
$this->dbh = new PDO("mysql:host=$this->db_host;", $this->db_username, $this->db_password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
|
||||
}
|
||||
else {
|
||||
$this->dbh = new PDO("mysql:host=$this->db_host;", $this->db_create_username, $this->db_create_password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); }
|
||||
}
|
||||
else {
|
||||
if (strlen($this->db_create_username) == 0) {
|
||||
$this->dbh = new PDO("mysql:host=$this->db_host;port=$this->db_port;", $this->db_username, $this->db_password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
|
||||
}
|
||||
else {
|
||||
$this->dbh = new PDO("mysql:host=$this->db_host;port=$this->db_port;", $this->db_create_username, $this->db_create_password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
$this->dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
|
||||
}
|
||||
catch (PDOException $error) {
|
||||
throw new Exception("error creating database: " . $error->getMessage() . "\n" . $sql );
|
||||
}
|
||||
|
||||
//create the table, user and set the permissions only if the db_create_username was provided
|
||||
if (strlen($this->db_create_username) > 0) {
|
||||
//select the mysql database
|
||||
try {
|
||||
$this->dbh->query("USE mysql;");
|
||||
}
|
||||
catch (PDOException $error) {
|
||||
if ($this->debug) {
|
||||
throw new Exception("error conencting to database: " . $error->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
//create user and set the permissions
|
||||
try {
|
||||
$tmp_sql = "CREATE USER '".$this->db_username."'@'%' IDENTIFIED BY '".$this->db_password."'; ";
|
||||
$this->dbh->query($tmp_sql);
|
||||
}
|
||||
catch (PDOException $error) {
|
||||
if ($this->debug) {
|
||||
print "error: " . $error->getMessage() . "<br/>";
|
||||
}
|
||||
}
|
||||
|
||||
//set account to unlimited use
|
||||
try {
|
||||
if ($this->db_host == "localhost" || $this->db_host == "127.0.0.1") {
|
||||
$tmp_sql = "GRANT USAGE ON * . * TO '".$this->db_username."'@'localhost' ";
|
||||
$tmp_sql .= "IDENTIFIED BY '".$this->db_password."' ";
|
||||
$tmp_sql .= "WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; ";
|
||||
$this->dbh->query($tmp_sql);
|
||||
|
||||
$tmp_sql = "GRANT USAGE ON * . * TO '".$this->db_username."'@'127.0.0.1' ";
|
||||
$tmp_sql .= "IDENTIFIED BY '".$this->db_password."' ";
|
||||
$tmp_sql .= "WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; ";
|
||||
$this->dbh->query($tmp_sql);
|
||||
}
|
||||
else {
|
||||
$tmp_sql = "GRANT USAGE ON * . * TO '".$this->db_username."'@'".$this->db_host."' ";
|
||||
$tmp_sql .= "IDENTIFIED BY '".$this->db_password."' ";
|
||||
$tmp_sql .= "WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; ";
|
||||
$this->dbh->query($tmp_sql);
|
||||
}
|
||||
}
|
||||
catch (PDOException $error) {
|
||||
if ($this->debug) {
|
||||
print "error: " . $error->getMessage() . "<br/>";
|
||||
}
|
||||
}
|
||||
|
||||
//create the database and set the create user with permissions
|
||||
try {
|
||||
$tmp_sql = "CREATE DATABASE IF NOT EXISTS ".$this->db_name."; ";
|
||||
$this->dbh->query($tmp_sql);
|
||||
}
|
||||
catch (PDOException $error) {
|
||||
if ($this->debug) {
|
||||
print "error: " . $error->getMessage() . "<br/>";
|
||||
}
|
||||
}
|
||||
|
||||
//set user permissions
|
||||
try {
|
||||
$this->dbh->query("GRANT ALL PRIVILEGES ON ".$this->db_name.".* TO '".$this->db_username."'@'%'; ");
|
||||
}
|
||||
catch (PDOException $error) {
|
||||
if ($this->debug) {
|
||||
print "error: " . $error->getMessage() . "<br/>";
|
||||
}
|
||||
}
|
||||
|
||||
//make the changes active
|
||||
try {
|
||||
$tmp_sql = "FLUSH PRIVILEGES; ";
|
||||
$this->dbh->query($tmp_sql);
|
||||
}
|
||||
catch (PDOException $error) {
|
||||
if ($this->debug) {
|
||||
print "error: " . $error->getMessage() . "<br/>";
|
||||
}
|
||||
}
|
||||
|
||||
} //if (strlen($this->db_create_username) > 0)
|
||||
|
||||
//select the database
|
||||
try {
|
||||
$this->dbh->query("USE ".$this->db_name.";");
|
||||
}
|
||||
catch (PDOException $error) {
|
||||
if ($this->debug) {
|
||||
print "error: " . $error->getMessage() . "<br/>";
|
||||
}
|
||||
}
|
||||
|
||||
//add the database structure
|
||||
require_once "resources/classes/schema.php";
|
||||
$schema = new schema;
|
||||
$schema->db = $this->dbh;
|
||||
$schema->db_type = $this->db_type;
|
||||
$schema->sql();
|
||||
$schema->exec();
|
||||
|
||||
//add the defaults data into the database
|
||||
//get the contents of the sql file
|
||||
if (file_exists('/usr/share/examples/fusionpbx/resources/install/sql/mysql.sql')){
|
||||
$filename = "/usr/share/examples/fusionpbx/resources/install/sql/mysql.sql";
|
||||
}
|
||||
else {
|
||||
$filename = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/resources/install/sql/mysql.sql';
|
||||
}
|
||||
$file_contents = file_get_contents($filename);
|
||||
|
||||
//replace \r\n with \n then explode on \n
|
||||
$file_contents = str_replace("\r\n", "\n", $file_contents);
|
||||
|
||||
//loop line by line through all the lines of sql code
|
||||
$string_array = explode("\n", $file_contents);
|
||||
$x = 0;
|
||||
foreach($string_array as $sql) {
|
||||
if (strlen($sql) > 3) {
|
||||
try {
|
||||
if ($this->debug) {
|
||||
$this->write_debug( $sql."\n");
|
||||
}
|
||||
$this->dbh->query($sql);
|
||||
}
|
||||
catch (PDOException $error) {
|
||||
//echo "error on line $x: " . $error->getMessage() . " sql: $sql<br/>";
|
||||
//die();
|
||||
}
|
||||
}
|
||||
$x++;
|
||||
}
|
||||
unset ($file_contents, $sql);
|
||||
}
|
||||
|
||||
|
||||
protected function create_domain() {
|
||||
$this->write_progress("checking if domain exists '" . $this->domain_name . "'");
|
||||
$sql = "select count(*) from v_domains ";
|
||||
$sql .= "where domain_name = '".$this->domain_name."' ";
|
||||
|
||||
$this->write_debug($sql);
|
||||
$prep_statement = $this->dbh->prepare(check_sql($sql));
|
||||
$prep_statement->execute();
|
||||
$row = $prep_statement->fetch(PDO::FETCH_ASSOC);
|
||||
unset($sql, $prep_statement);
|
||||
if ($row['num_rows'] == 0) {
|
||||
$this->write_progress("creating domain '" . $this->domain_name . "'");
|
||||
$sql = "insert into v_domains ";
|
||||
$sql .= "(";
|
||||
$sql .= "domain_uuid, ";
|
||||
$sql .= "domain_name, ";
|
||||
$sql .= "domain_description ";
|
||||
$sql .= ") ";
|
||||
$sql .= "values ";
|
||||
$sql .= "(";
|
||||
$sql .= "'".$this->domain_uuid."', ";
|
||||
$sql .= "'".$this->domain_name."', ";
|
||||
$sql .= "'' ";
|
||||
$sql .= ");";
|
||||
|
||||
$this->write_debug($sql);
|
||||
$this->dbh->exec(check_sql($sql));
|
||||
unset($sql);
|
||||
|
||||
//domain settings
|
||||
$x = 0;
|
||||
$tmp[$x]['name'] = 'uuid';
|
||||
$tmp[$x]['value'] = $this->menu_uuid;
|
||||
$tmp[$x]['category'] = 'domain';
|
||||
$tmp[$x]['subcategory'] = 'menu';
|
||||
$tmp[$x]['enabled'] = 'true';
|
||||
$x++;
|
||||
$tmp[$x]['name'] = 'name';
|
||||
$tmp[$x]['category'] = 'domain';
|
||||
$tmp[$x]['subcategory'] = 'time_zone';
|
||||
$tmp[$x]['enabled'] = 'true';
|
||||
$x++;
|
||||
$tmp[$x]['name'] = 'code';
|
||||
$tmp[$x]['value'] = 'en-us';
|
||||
$tmp[$x]['category'] = 'domain';
|
||||
$tmp[$x]['subcategory'] = 'language';
|
||||
$tmp[$x]['enabled'] = 'true';
|
||||
$x++;
|
||||
$tmp[$x]['name'] = 'iso_code';
|
||||
$tmp[$x]['value'] = $this->default_country;
|
||||
$tmp[$x]['category'] = 'domain';
|
||||
$tmp[$x]['subcategory'] = 'country';
|
||||
$tmp[$x]['enabled'] = 'true';
|
||||
$x++;
|
||||
$tmp[$x]['name'] = 'name';
|
||||
$tmp[$x]['value'] = $this->template_name;
|
||||
$tmp[$x]['category'] = 'domain';
|
||||
$tmp[$x]['subcategory'] = 'template';
|
||||
$tmp[$x]['enabled'] = 'true';
|
||||
$x++;
|
||||
|
||||
//switch settings
|
||||
$tmp[$x]['name'] = 'dir';
|
||||
$tmp[$x]['value'] = $switch_bin_dir;
|
||||
$tmp[$x]['category'] = 'switch';
|
||||
$tmp[$x]['subcategory'] = 'bin';
|
||||
$tmp[$x]['enabled'] = 'true';
|
||||
$x++;
|
||||
$tmp[$x]['name'] = 'dir';
|
||||
$tmp[$x]['value'] = $this->detect_switch->base_dir();
|
||||
$tmp[$x]['category'] = 'switch';
|
||||
$tmp[$x]['subcategory'] = 'base';
|
||||
$tmp[$x]['enabled'] = 'true';
|
||||
$x++;
|
||||
$tmp[$x]['name'] = 'dir';
|
||||
$tmp[$x]['value'] = $this->detect_switch->conf_dir();
|
||||
$tmp[$x]['category'] = 'switch';
|
||||
$tmp[$x]['subcategory'] = 'conf';
|
||||
$tmp[$x]['enabled'] = 'true';
|
||||
$x++;
|
||||
$tmp[$x]['name'] = 'dir';
|
||||
$tmp[$x]['value'] = $this->detect_switch->db_dir();
|
||||
$tmp[$x]['category'] = 'switch';
|
||||
$tmp[$x]['subcategory'] = 'db';
|
||||
$tmp[$x]['enabled'] = 'true';
|
||||
$x++;
|
||||
$tmp[$x]['name'] = 'dir';
|
||||
$tmp[$x]['value'] = $this->detect_switch->log_dir();
|
||||
$tmp[$x]['category'] = 'switch';
|
||||
$tmp[$x]['subcategory'] = 'log';
|
||||
$tmp[$x]['enabled'] = 'true';
|
||||
$x++;
|
||||
$tmp[$x]['name'] = 'dir';
|
||||
$tmp[$x]['value'] = $this->detect_switch->mod_dir();
|
||||
$tmp[$x]['category'] = 'switch';
|
||||
$tmp[$x]['subcategory'] = 'mod';
|
||||
$tmp[$x]['enabled'] = 'true';
|
||||
$x++;
|
||||
$tmp[$x]['name'] = 'dir';
|
||||
$tmp[$x]['value'] = $this->detect_switch->script_dir();
|
||||
$tmp[$x]['category'] = 'switch';
|
||||
$tmp[$x]['subcategory'] = 'scripts';
|
||||
$tmp[$x]['enabled'] = 'true';
|
||||
$x++;
|
||||
$tmp[$x]['name'] = 'dir';
|
||||
$tmp[$x]['value'] = $this->detect_switch->grammar_dir();
|
||||
$tmp[$x]['category'] = 'switch';
|
||||
$tmp[$x]['subcategory'] = 'grammar';
|
||||
$tmp[$x]['enabled'] = 'true';
|
||||
$x++;
|
||||
$tmp[$x]['name'] = 'dir';
|
||||
$tmp[$x]['value'] = $this->detect_switch->storage_dir();
|
||||
$tmp[$x]['category'] = 'switch';
|
||||
$tmp[$x]['subcategory'] = 'storage';
|
||||
$tmp[$x]['enabled'] = 'true';
|
||||
$x++;
|
||||
$tmp[$x]['name'] = 'dir';
|
||||
$tmp[$x]['value'] = join( DIRECTORY_SEPARATOR, $this->detect_switch->storage_dir(), 'voicemail');
|
||||
$tmp[$x]['category'] = 'switch';
|
||||
$tmp[$x]['subcategory'] = 'voicemail';
|
||||
$tmp[$x]['enabled'] = 'true';
|
||||
$x++;
|
||||
$tmp[$x]['name'] = 'dir';
|
||||
$tmp[$x]['value'] = $this->detect_switch->recordings_dir();
|
||||
$tmp[$x]['category'] = 'switch';
|
||||
$tmp[$x]['subcategory'] = 'recordings';
|
||||
$tmp[$x]['enabled'] = 'true';
|
||||
$x++;
|
||||
$tmp[$x]['name'] = 'dir';
|
||||
$tmp[$x]['value'] = $this->detect_switch->sounds_dir();
|
||||
$tmp[$x]['category'] = 'switch';
|
||||
$tmp[$x]['subcategory'] = 'sounds';
|
||||
$tmp[$x]['enabled'] = 'true';
|
||||
$x++;
|
||||
$tmp[$x]['name'] = 'dir';
|
||||
$tmp[$x]['value'] = '';
|
||||
$tmp[$x]['category'] = 'switch';
|
||||
$tmp[$x]['subcategory'] = 'provision';
|
||||
$tmp[$x]['enabled'] = 'false';
|
||||
$x++;
|
||||
$tmp[$x]['name'] = 'dir';
|
||||
$tmp[$x]['value'] = join( DIRECTORY_SEPARATOR, $this->detect_switch->conf_dir(), "/directory");
|
||||
$tmp[$x]['category'] = 'switch';
|
||||
$tmp[$x]['subcategory'] = 'extensions';
|
||||
$tmp[$x]['enabled'] = 'false';
|
||||
$x++;
|
||||
$tmp[$x]['name'] = 'dir';
|
||||
$tmp[$x]['value'] = join( DIRECTORY_SEPARATOR, $this->detect_switch->conf_dir(), "/sip_profiles");
|
||||
$tmp[$x]['category'] = 'switch';
|
||||
$tmp[$x]['subcategory'] = 'sip_profiles';
|
||||
$tmp[$x]['enabled'] = 'false';
|
||||
$x++;
|
||||
$tmp[$x]['name'] = 'dir';
|
||||
$tmp[$x]['value'] = join( DIRECTORY_SEPARATOR, $this->detect_switch->conf_dir(), "/dialplan");
|
||||
$tmp[$x]['category'] = 'switch';
|
||||
$tmp[$x]['subcategory'] = 'dialplan';
|
||||
$tmp[$x]['enabled'] = 'false';
|
||||
$x++;
|
||||
|
||||
//server settings
|
||||
$tmp[$x]['name'] = 'dir';
|
||||
$tmp[$x]['value'] = $this->detect_switch->temp_dir();
|
||||
$tmp[$x]['category'] = 'server';
|
||||
$tmp[$x]['subcategory'] = 'temp';
|
||||
$tmp[$x]['enabled'] = 'true';
|
||||
$x++;
|
||||
#throw new Exception("I don't know how to find /etc/init.d for server > startup_scripts");
|
||||
$tmp[$x]['name'] = 'dir';
|
||||
$tmp[$x]['value'] = '';
|
||||
$tmp[$x]['category'] = 'server';
|
||||
$tmp[$x]['subcategory'] = 'startup_script';
|
||||
$tmp[$x]['enabled'] = 'true';
|
||||
$x++;
|
||||
$tmp[$x]['name'] = 'dir';
|
||||
$tmp[$x]['value'] = sys_get_temp_dir();
|
||||
$tmp[$x]['category'] = 'server';
|
||||
$tmp[$x]['subcategory'] = 'backup';
|
||||
$tmp[$x]['enabled'] = 'true';
|
||||
$x++;
|
||||
|
||||
$this->dbh->beginTransaction();
|
||||
foreach($tmp as $row) {
|
||||
$sql = "insert into v_default_settings ";
|
||||
$sql .= "(";
|
||||
$sql .= "default_setting_uuid, ";
|
||||
$sql .= "default_setting_name, ";
|
||||
$sql .= "default_setting_value, ";
|
||||
$sql .= "default_setting_category, ";
|
||||
$sql .= "default_setting_subcategory, ";
|
||||
$sql .= "default_setting_enabled ";
|
||||
$sql .= ") ";
|
||||
$sql .= "values ";
|
||||
$sql .= "(";
|
||||
$sql .= "'".uuid()."', ";
|
||||
$sql .= "'".$row['name']."', ";
|
||||
$sql .= "'".$row['value']."', ";
|
||||
$sql .= "'".$row['category']."', ";
|
||||
$sql .= "'".$row['subcategory']."', ";
|
||||
$sql .= "'".$row['enabled']."' ";
|
||||
$sql .= ");";
|
||||
$this->write_debug($sql);
|
||||
$this->dbh->exec(check_sql($sql));
|
||||
unset($sql);
|
||||
}
|
||||
$this->dbh->commit();
|
||||
unset($tmp);
|
||||
|
||||
//get the list of installed apps from the core and mod directories
|
||||
$config_list = glob($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/*/*/app_config.php");
|
||||
$x=0;
|
||||
foreach ($config_list as $config_path) {
|
||||
include($config_path);
|
||||
$x++;
|
||||
}
|
||||
|
||||
//add the groups
|
||||
$x = 0;
|
||||
$tmp[$x]['group_name'] = 'superadmin';
|
||||
$tmp[$x]['group_description'] = 'Super Administrator Group';
|
||||
$x++;
|
||||
$tmp[$x]['group_name'] = 'admin';
|
||||
$tmp[$x]['group_description'] = 'Administrator Group';
|
||||
$x++;
|
||||
$tmp[$x]['group_name'] = 'user';
|
||||
$tmp[$x]['group_description'] = 'User Group';
|
||||
$x++;
|
||||
$tmp[$x]['group_name'] = 'public';
|
||||
$tmp[$x]['group_description'] = 'Public Group';
|
||||
$x++;
|
||||
$tmp[$x]['group_name'] = 'agent';
|
||||
$tmp[$x]['group_description'] = 'Call Center Agent Group';
|
||||
$this->dbh->beginTransaction();
|
||||
foreach($tmp as $row) {
|
||||
$sql = "insert into v_groups ";
|
||||
$sql .= "(";
|
||||
$sql .= "group_uuid, ";
|
||||
$sql .= "group_name, ";
|
||||
$sql .= "group_description ";
|
||||
$sql .= ") ";
|
||||
$sql .= "values ";
|
||||
$sql .= "(";
|
||||
$sql .= "'".uuid()."', ";
|
||||
$sql .= "'".$row['group_name']."', ";
|
||||
$sql .= "'".$row['group_description']."' ";
|
||||
$sql .= ");";
|
||||
$this->write_debug($sql);
|
||||
$this->dbh->exec(check_sql($sql));
|
||||
unset($sql);
|
||||
}
|
||||
unset($tmp);
|
||||
$this->dbh->commit();
|
||||
//assign the default permissions to the groups
|
||||
$this->dbh->beginTransaction();
|
||||
foreach($apps as $app) {
|
||||
if ($app['permissions']) {
|
||||
foreach ($app['permissions'] as $row) {
|
||||
if ($this->debug) {
|
||||
$this->write_debug( "v_group_permissions\n");
|
||||
$this->write_debug( json_encode($row)."\n\n");
|
||||
}
|
||||
if ($row['groups']) {
|
||||
foreach ($row['groups'] as $group) {
|
||||
//add the record
|
||||
$sql = "insert into v_group_permissions ";
|
||||
$sql .= "(";
|
||||
$sql .= "group_permission_uuid, ";
|
||||
$sql .= "permission_name, ";
|
||||
$sql .= "group_name ";
|
||||
$sql .= ") ";
|
||||
$sql .= "values ";
|
||||
$sql .= "(";
|
||||
$sql .= "'".uuid()."', ";
|
||||
$sql .= "'".$row['name']."', ";
|
||||
$sql .= "'".$group."' ";
|
||||
$sql .= ");";
|
||||
if ($this->debug) {
|
||||
$this->write_debug( $sql."\n");
|
||||
}
|
||||
$this->dbh->exec(check_sql($sql));
|
||||
unset($sql);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->dbh->commit();
|
||||
}
|
||||
}
|
||||
|
||||
protected function create_superuser() {
|
||||
//check if it exists first?
|
||||
$this->write_progress("creating super user '" . $this->admin_username . "'");
|
||||
//add a user and then add the user to the superadmin group
|
||||
//prepare the values
|
||||
$this->admin_uuid = uuid();
|
||||
$contact_uuid = uuid();
|
||||
//set a sessiong variable
|
||||
$_SESSION["user_uuid"] = $user_uuid;
|
||||
//salt used with the password to create a one way hash
|
||||
$salt = generate_password('20', '4');
|
||||
//add the user account
|
||||
$sql = "insert into v_users ";
|
||||
$sql .= "(";
|
||||
$sql .= "domain_uuid, ";
|
||||
$sql .= "user_uuid, ";
|
||||
$sql .= "contact_uuid, ";
|
||||
$sql .= "username, ";
|
||||
$sql .= "password, ";
|
||||
$sql .= "salt, ";
|
||||
$sql .= "add_date, ";
|
||||
$sql .= "add_user ";
|
||||
$sql .= ") ";
|
||||
$sql .= "values ";
|
||||
$sql .= "(";
|
||||
$sql .= "'".$this->domain_uuid."', ";
|
||||
$sql .= "'".$this->admin_uuid."', ";
|
||||
$sql .= "'$contact_uuid', ";
|
||||
$sql .= "'".$this->admin_username."', ";
|
||||
$sql .= "'".md5($salt.$this->admin_password)."', ";
|
||||
$sql .= "'$salt', ";
|
||||
$sql .= "now(), ";
|
||||
$sql .= "'".$this->admin_username."' ";
|
||||
$sql .= ");";
|
||||
$this->write_debug( $sql."\n");
|
||||
$this->dbh->exec(check_sql($sql));
|
||||
unset($sql);
|
||||
|
||||
//add to contacts
|
||||
$sql = "insert into v_contacts ";
|
||||
$sql .= "(";
|
||||
$sql .= "domain_uuid, ";
|
||||
$sql .= "contact_uuid, ";
|
||||
$sql .= "contact_type, ";
|
||||
$sql .= "contact_name_given, ";
|
||||
$sql .= "contact_nickname ";
|
||||
$sql .= ") ";
|
||||
$sql .= "values ";
|
||||
$sql .= "(";
|
||||
$sql .= "'".$this->domain_uuid."', ";
|
||||
$sql .= "'$contact_uuid', ";
|
||||
$sql .= "'user', ";
|
||||
$sql .= "'".$this->admin_username."', ";
|
||||
$sql .= "'".$this->admin_username."' ";
|
||||
$sql .= ")";
|
||||
$this->dbh->exec(check_sql($sql));
|
||||
unset($sql);
|
||||
|
||||
//add the user to the superadmin group
|
||||
$sql = "insert into v_group_users ";
|
||||
$sql .= "(";
|
||||
$sql .= "group_user_uuid, ";
|
||||
$sql .= "domain_uuid, ";
|
||||
$sql .= "user_uuid, ";
|
||||
$sql .= "group_name ";
|
||||
$sql .= ") ";
|
||||
$sql .= "values ";
|
||||
$sql .= "(";
|
||||
$sql .= "'".uuid()."', ";
|
||||
$sql .= "'".$this->domain_uuid."', ";
|
||||
$sql .= "'".$this->admin_uuid."', ";
|
||||
$sql .= "'superadmin' ";
|
||||
$sql .= ");";
|
||||
$this->write_debug( $sql."\n");
|
||||
$this->dbh->exec(check_sql($sql));
|
||||
unset($sql);
|
||||
}
|
||||
|
||||
protected function create_menus() {
|
||||
$this->write_progress("creating menus");
|
||||
//set the defaults
|
||||
$menu_name = 'default';
|
||||
$menu_language = 'en-us';
|
||||
$menu_description = 'Default Menu Set';
|
||||
//add the parent menu
|
||||
$sql = "insert into v_menus ";
|
||||
$sql .= "(";
|
||||
$sql .= "menu_uuid, ";
|
||||
$sql .= "menu_name, ";
|
||||
$sql .= "menu_language, ";
|
||||
$sql .= "menu_description ";
|
||||
$sql .= ") ";
|
||||
$sql .= "values ";
|
||||
$sql .= "(";
|
||||
$sql .= "'".$this->menu_uuid."', ";
|
||||
$sql .= "'$menu_name', ";
|
||||
$sql .= "'$menu_language', ";
|
||||
$sql .= "'$menu_description' ";
|
||||
$sql .= ");";
|
||||
if ($this->debug) {
|
||||
$this->write_debug( $sql."\n");
|
||||
}
|
||||
$this->dbh->exec(check_sql($sql));
|
||||
unset($sql);
|
||||
|
||||
//add the menu items
|
||||
require_once "resources/classes/menu.php";
|
||||
$menu = new menu;
|
||||
$menu->db = $this->dbh;
|
||||
$menu->menu_uuid = $this->menu_uuid;
|
||||
$menu->restore();
|
||||
unset($menu);
|
||||
}
|
||||
|
||||
protected function post_create() {
|
||||
$this->write_progress("running post steps");
|
||||
//login the user account
|
||||
$_SESSION["username"] = $this->admin_username;
|
||||
|
||||
//get the groups assigned to the user and then set the groups in $_SESSION["groups"]
|
||||
$sql = "SELECT * FROM v_group_users ";
|
||||
$sql .= "where domain_uuid=:domain_uuid ";
|
||||
$sql .= "and user_uuid=:user_uuid ";
|
||||
$prep_statement = $this->dbh->prepare(check_sql($sql));
|
||||
$prep_statement->bindParam(':domain_uuid', $this->domain_uuid);
|
||||
$prep_statement->bindParam(':user_uuid', $this->admin_uuid);
|
||||
$prep_statement->execute();
|
||||
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
|
||||
$_SESSION["groups"] = $result;
|
||||
unset($sql, $row_count, $prep_statement);
|
||||
|
||||
//get the permissions assigned to the groups that the user is a member of set the permissions in $_SESSION['permissions']
|
||||
$x = 0;
|
||||
$sql = "select distinct(permission_name) from v_group_permissions ";
|
||||
foreach($_SESSION["groups"] as $field) {
|
||||
if (strlen($field['group_name']) > 0) {
|
||||
if ($x == 0) {
|
||||
$sql .= "where (domain_uuid = '".$this->domain_uuid."' and group_name = '".$field['group_name']."') ";
|
||||
}
|
||||
else {
|
||||
$sql .= "or (domain_uuid = '".$this->domain_uuid."' and group_name = '".$field['group_name']."') ";
|
||||
}
|
||||
$x++;
|
||||
}
|
||||
}
|
||||
$prep_statementsub = $this->dbh->prepare($sql);
|
||||
$prep_statementsub->execute();
|
||||
$_SESSION['permissions'] = $prep_statementsub->fetchAll(PDO::FETCH_NAMED);
|
||||
unset($sql, $prep_statementsub);
|
||||
|
||||
//make sure the database schema and installation have performed all necessary tasks
|
||||
$display_results = false;
|
||||
$display_type = 'none';
|
||||
require_once "resources/classes/schema.php";
|
||||
$obj = new schema;
|
||||
$obj->schema($this->dbh, $this->db_type, $this->db_name, $display_type);
|
||||
|
||||
//run all app_defaults.php files
|
||||
$default_language = $this->install_language;
|
||||
require_once "resources/classes/domains.php";
|
||||
$domain = new domains;
|
||||
$domain->upgrade();
|
||||
|
||||
//synchronize the config with the saved settings
|
||||
save_switch_xml();
|
||||
|
||||
//do not show the apply settings reminder on the login page
|
||||
$_SESSION["reload_xml"] = false;
|
||||
|
||||
//clear the menu
|
||||
$_SESSION["menu"] = "";
|
||||
}
|
||||
|
||||
public function remove_config() {
|
||||
if (file_exists('/bin/rm')) {
|
||||
$this->write_debug('rm -f ' . $this->config_php);
|
||||
exec ('rm -f ' . $this->config_php);
|
||||
}
|
||||
elseif(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'){
|
||||
$this->write_debug("del /S /F /Q '$dir'");
|
||||
exec("del /F /Q '" . $this->config_php . "'");
|
||||
}
|
||||
else {
|
||||
$this->write_debug("delete file: ".$file);
|
||||
unlink($this->config_php);
|
||||
}
|
||||
clearstatcache();
|
||||
}
|
||||
}
|
||||
?>
|
||||
252
core/install/resources/classes/install_switch.php
Normal file
252
core/install/resources/classes/install_switch.php
Normal file
@@ -0,0 +1,252 @@
|
||||
<?php
|
||||
/*
|
||||
FusionPBX
|
||||
Version: MPL 1.1
|
||||
|
||||
The contents of this file are subject to the Mozilla Public License Version
|
||||
1.1 (the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
http://www.mozilla.org/MPL/
|
||||
|
||||
Software distributed under the License is distributed on an "AS IS" basis,
|
||||
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
for the specific language governing rights and limitations under the
|
||||
License.
|
||||
|
||||
The Original Code is FusionPBX
|
||||
|
||||
The Initial Developer of the Original Code is
|
||||
Mark J Crane <markjcrane@fusionpbx.com>
|
||||
Copyright (C) 2010-2015
|
||||
All Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
Mark J Crane <markjcrane@fusionpbx.com>
|
||||
*/
|
||||
include "root.php";
|
||||
|
||||
//define the install class
|
||||
class install_switch {
|
||||
|
||||
protected $domain_uuid;
|
||||
protected $domain_name;
|
||||
protected $detect_switch;
|
||||
|
||||
public $debug = false;
|
||||
|
||||
function __construct($domain_name, $domain_uuid, $detect_switch) {
|
||||
if(!is_a($detect_switch, 'detect_switch')){
|
||||
throw new Exception('The parameter $detect_switch must be a detect_switch object (or a subclass of)');
|
||||
}
|
||||
$this->domain_uuid = $domain_uuid;
|
||||
$this->domain = $domain_name;
|
||||
$this->detect_switch = $detect_switch;
|
||||
}
|
||||
|
||||
//utility Functions
|
||||
|
||||
function write_debug($message) {
|
||||
if($this->debug){
|
||||
echo "$message\n";
|
||||
}
|
||||
}
|
||||
|
||||
function write_progress($message) {
|
||||
echo "$message\n";
|
||||
}
|
||||
|
||||
//$options '-n' --no-clobber
|
||||
protected function recursive_copy($src, $dst, $options = '') {
|
||||
if (file_exists('/bin/cp')) {
|
||||
if (strtoupper(substr(PHP_OS, 0, 3)) === 'SUN') {
|
||||
//copy -R recursive, preserve attributes for SUN
|
||||
$cmd = 'cp -Rp '.$src.'/* '.$dst;
|
||||
} else {
|
||||
//copy -R recursive, -L follow symbolic links, -p preserve attributes for other Posix systemss
|
||||
$cmd = 'cp -RLp '.$options.' '.$src.'/* '.$dst;
|
||||
}
|
||||
$this->write_debug($cmd);
|
||||
exec ($cmd);
|
||||
}
|
||||
elseif(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'){
|
||||
exec("copy /L '$src' '$dst'");
|
||||
}
|
||||
else {
|
||||
$dir = opendir($src);
|
||||
if (!$dir) {
|
||||
if (!mkdir($src, 0755, true)) {
|
||||
throw new Exception("recursive_copy() source directory '".$src."' does not exist.");
|
||||
}
|
||||
}
|
||||
if (!is_dir($dst)) {
|
||||
if (!mkdir($dst, 0755, true)) {
|
||||
throw new Exception("recursive_copy() failed to create destination directory '".$dst."'");
|
||||
}
|
||||
}
|
||||
//This looks wrong, essentially if we can't use /bin/cp it manually fils dirs, not correct
|
||||
$scripts_dir_target = $_SESSION['switch']['scripts']['dir'];
|
||||
$scripts_dir_source = realpath($_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/resources/install/scripts');
|
||||
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($src)) as $file_path_source) {
|
||||
if (
|
||||
substr_count($file_path_source, '/..') == 0 &&
|
||||
substr_count($file_path_source, '/.') == 0 &&
|
||||
substr_count($file_path_source, '/.svn') == 0 &&
|
||||
substr_count($file_path_source, '/.git') == 0
|
||||
) {
|
||||
if ($dst != $src.'/resources/config.lua') {
|
||||
$this->write_debug($file_path_source.' ---> '.$dst);
|
||||
copy($file_path_source, $dst);
|
||||
chmod($dst, 0755);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
while(false !== ($file = readdir($dir))) {
|
||||
if (($file != '.') && ($file != '..')) {
|
||||
if (is_dir($src.'/'.$file)) {
|
||||
$this->recursive_copy($src.'/'.$file, $dst.'/'.$file);
|
||||
}
|
||||
else {
|
||||
//copy only missing files -n --no-clobber
|
||||
if (strpos($options,'-n') !== false) {
|
||||
if (!file_exists($dst.'/'.$file)) {
|
||||
$this->write_debug("copy(".$src."/".$file.", ".$dst."/".$file.")");
|
||||
copy($src.'/'.$file, $dst.'/'.$file);
|
||||
}
|
||||
}
|
||||
else {
|
||||
copy($src.'/'.$file, $dst.'/'.$file);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir($dir);
|
||||
}
|
||||
}
|
||||
|
||||
protected function recursive_delete($dir) {
|
||||
if (file_exists('/bin/rm')) {
|
||||
$this->write_debug('rm -Rf '.$dir.'/*');
|
||||
exec ('rm -Rf '.$dir.'/*');
|
||||
}
|
||||
elseif(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'){
|
||||
$this->write_debug("del /S /F /Q '$dir'");
|
||||
exec("del /S /F /Q '$dir'");
|
||||
}
|
||||
else {
|
||||
foreach (glob($dir) as $file) {
|
||||
if (is_dir($file)) {
|
||||
$this->write_debug("rm dir: ".$file);
|
||||
$this->recursive_delete("$file/*");
|
||||
rmdir($file);
|
||||
} else {
|
||||
$this->write_debug("delete file: ".$file);
|
||||
unlink($file);
|
||||
}
|
||||
}
|
||||
}
|
||||
clearstatcache();
|
||||
}
|
||||
|
||||
protected function backup_dir($dir, $backup_name){
|
||||
if (!is_readable($dir)) {
|
||||
throw new Exception("backup_dir() source directory '".$dir."' does not exist.");
|
||||
}
|
||||
$dst_tar = join( DIRECTORY_SEPARATOR, array(sys_get_temp_dir(), "$backup_name.tar"));
|
||||
//pharData is the correct ay to do it, but it keeps creating incomplete archives
|
||||
//$tar = new PharData($dst_tar);
|
||||
//$tar->buildFromDirectory($dir);
|
||||
$this->write_debug("backingup to $dst_tar");
|
||||
if (file_exists('/bin/tar')) {
|
||||
exec('tar -cvf ' .$dst_tar. ' -C '.$dir .' .');
|
||||
}else{
|
||||
$this->write_debug('WARN: old config could not be compressed');
|
||||
$dst_dir = join( DIRECTORY_SEPARATOR, array(sys_get_temp_dir(), "$backup_name"));
|
||||
recursive_copy($dir, $dst_dir);
|
||||
}
|
||||
}
|
||||
|
||||
function install() {
|
||||
$this->copy_conf();
|
||||
$this->copy_scripts();
|
||||
}
|
||||
|
||||
function upgrade() {
|
||||
$this->copy_scripts();
|
||||
}
|
||||
|
||||
function copy_conf() {
|
||||
$this->write_progress("Copying Config");
|
||||
//make a backup of the config
|
||||
if (file_exists($this->detect_switch->conf_dir())) {
|
||||
$this->backup_dir($this->detect_switch->conf_dir(), 'fusionpbx_switch_config');
|
||||
$this->recursive_delete($this->detect_switch->conf_dir());
|
||||
}
|
||||
//make sure the conf directory exists
|
||||
if (!is_dir($this->detect_switch->conf_dir())) {
|
||||
if (!mkdir($this->detect_switch->conf_dir(), 0774, true)) {
|
||||
throw new Exception("Failed to create the switch conf directory '".$this->detect_switch->conf_dir()."'. ");
|
||||
}
|
||||
}
|
||||
//copy resources/templates/conf to the freeswitch conf dir
|
||||
if (file_exists('/usr/share/examples/fusionpbx/resources/templates/conf')){
|
||||
$src_dir = "/usr/share/examples/fusionpbx/resources/templates/conf";
|
||||
}
|
||||
else {
|
||||
$src_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/resources/templates/conf";
|
||||
}
|
||||
$dst_dir = $this->detect_switch->conf_dir();
|
||||
if (is_readable($dst_dir)) {
|
||||
$this->recursive_copy($src_dir, $dst_dir);
|
||||
unset($src_dir, $dst_dir);
|
||||
}
|
||||
$fax_dir = join( DIRECTORY_SEPARATOR, array($this->detect_switch->storage_dir(), 'fax'));
|
||||
if (!is_readable($fax_dir)) { mkdir($fax_dir,0777,true); }
|
||||
$voicemail_dir = join( DIRECTORY_SEPARATOR, array($this->detect_switch->storage_dir(), 'voicemail'));
|
||||
if (!is_readable($voicemail_dir)) { mkdir($voicemail_dir,0777,true); }
|
||||
|
||||
//create the dialplan/default.xml for single tenant or dialplan/domain.xml
|
||||
if (file_exists($_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/app/dialplan")) {
|
||||
$dialplan = new dialplan;
|
||||
$dialplan->domain_uuid = $this->domain_uuid;
|
||||
$dialplan->domain = $this->domain_name;
|
||||
$dialplan->switch_dialplan_dir = join( DIRECTORY_SEPARATOR, array($this->detect_switch->conf_dir(), "/dialplan"));
|
||||
$dialplan->restore_advanced_xml();
|
||||
if($this->_debug){
|
||||
print_r($dialplan->result, $message);
|
||||
$this->write_debug($message);
|
||||
}
|
||||
}
|
||||
|
||||
//write the xml_cdr.conf.xml file
|
||||
if (file_exists($_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/app/xml_cdr")) {
|
||||
xml_cdr_conf_xml();
|
||||
}
|
||||
|
||||
//write the switch.conf.xml file
|
||||
if (file_exists($this->detect_switch->conf_dir())) {
|
||||
switch_conf_xml();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function copy_scripts() {
|
||||
$this->write_progress("Copying Scripts");
|
||||
if (file_exists($this->detect_switch->script_dir())) {
|
||||
if (file_exists('/usr/share/examples/fusionpbx/resources/install/scripts')){
|
||||
$src_dir = '/usr/share/examples/fusionpbx/resources/install/scripts';
|
||||
}
|
||||
else {
|
||||
$src_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/resources/install/scripts';
|
||||
}
|
||||
$dst_dir = $this->detect_switch->script_dir();
|
||||
if (is_readable($this->detect_switch->script_dir())) {
|
||||
$this->recursive_copy($src_dir, $dst_dir, $_SESSION['scripts']['options']['text']);
|
||||
unset($src_dir, $dst_dir);
|
||||
}
|
||||
chmod($dst_dir, 0774);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
250
core/install/resources/classes/iso_countries.php
Normal file
250
core/install/resources/classes/iso_countries.php
Normal file
@@ -0,0 +1,250 @@
|
||||
<?php
|
||||
$iso_countries = array
|
||||
(
|
||||
'AF' => 'Afghanistan',
|
||||
'AX' => 'Aland Islands',
|
||||
'AL' => 'Albania',
|
||||
'DZ' => 'Algeria',
|
||||
'AS' => 'American Samoa',
|
||||
'AD' => 'Andorra',
|
||||
'AO' => 'Angola',
|
||||
'AI' => 'Anguilla',
|
||||
'AQ' => 'Antarctica',
|
||||
'AG' => 'Antigua And Barbuda',
|
||||
'AR' => 'Argentina',
|
||||
'AM' => 'Armenia',
|
||||
'AW' => 'Aruba',
|
||||
'AU' => 'Australia',
|
||||
'AT' => 'Austria',
|
||||
'AZ' => 'Azerbaijan',
|
||||
'BS' => 'Bahamas',
|
||||
'BH' => 'Bahrain',
|
||||
'BD' => 'Bangladesh',
|
||||
'BB' => 'Barbados',
|
||||
'BY' => 'Belarus',
|
||||
'BE' => 'Belgium',
|
||||
'BZ' => 'Belize',
|
||||
'BJ' => 'Benin',
|
||||
'BM' => 'Bermuda',
|
||||
'BT' => 'Bhutan',
|
||||
'BO' => 'Bolivia',
|
||||
'BA' => 'Bosnia And Herzegovina',
|
||||
'BW' => 'Botswana',
|
||||
'BV' => 'Bouvet Island',
|
||||
'BR' => 'Brazil',
|
||||
'IO' => 'British Indian Ocean Territory',
|
||||
'BN' => 'Brunei Darussalam',
|
||||
'BG' => 'Bulgaria',
|
||||
'BF' => 'Burkina Faso',
|
||||
'BI' => 'Burundi',
|
||||
'KH' => 'Cambodia',
|
||||
'CM' => 'Cameroon',
|
||||
'CA' => 'Canada',
|
||||
'CV' => 'Cape Verde',
|
||||
'KY' => 'Cayman Islands',
|
||||
'CF' => 'Central African Republic',
|
||||
'TD' => 'Chad',
|
||||
'CL' => 'Chile',
|
||||
'CN' => 'China',
|
||||
'CX' => 'Christmas Island',
|
||||
'CC' => 'Cocos (Keeling) Islands',
|
||||
'CO' => 'Colombia',
|
||||
'KM' => 'Comoros',
|
||||
'CG' => 'Congo',
|
||||
'CD' => 'Congo, Democratic Republic',
|
||||
'CK' => 'Cook Islands',
|
||||
'CR' => 'Costa Rica',
|
||||
'CI' => 'Cote D\'Ivoire',
|
||||
'HR' => 'Croatia',
|
||||
'CU' => 'Cuba',
|
||||
'CY' => 'Cyprus',
|
||||
'CZ' => 'Czech Republic',
|
||||
'DK' => 'Denmark',
|
||||
'DJ' => 'Djibouti',
|
||||
'DM' => 'Dominica',
|
||||
'DO' => 'Dominican Republic',
|
||||
'EC' => 'Ecuador',
|
||||
'EG' => 'Egypt',
|
||||
'SV' => 'El Salvador',
|
||||
'GQ' => 'Equatorial Guinea',
|
||||
'ER' => 'Eritrea',
|
||||
'EE' => 'Estonia',
|
||||
'ET' => 'Ethiopia',
|
||||
'FK' => 'Falkland Islands (Malvinas)',
|
||||
'FO' => 'Faroe Islands',
|
||||
'FJ' => 'Fiji',
|
||||
'FI' => 'Finland',
|
||||
'FR' => 'France',
|
||||
'GF' => 'French Guiana',
|
||||
'PF' => 'French Polynesia',
|
||||
'TF' => 'French Southern Territories',
|
||||
'GA' => 'Gabon',
|
||||
'GM' => 'Gambia',
|
||||
'GE' => 'Georgia',
|
||||
'DE' => 'Germany',
|
||||
'GH' => 'Ghana',
|
||||
'GI' => 'Gibraltar',
|
||||
'GR' => 'Greece',
|
||||
'GL' => 'Greenland',
|
||||
'GD' => 'Grenada',
|
||||
'GP' => 'Guadeloupe',
|
||||
'GU' => 'Guam',
|
||||
'GT' => 'Guatemala',
|
||||
'GG' => 'Guernsey',
|
||||
'GN' => 'Guinea',
|
||||
'GW' => 'Guinea-Bissau',
|
||||
'GY' => 'Guyana',
|
||||
'HT' => 'Haiti',
|
||||
'HM' => 'Heard Island & Mcdonald Islands',
|
||||
'VA' => 'Holy See (Vatican City State)',
|
||||
'HN' => 'Honduras',
|
||||
'HK' => 'Hong Kong',
|
||||
'HU' => 'Hungary',
|
||||
'IS' => 'Iceland',
|
||||
'IN' => 'India',
|
||||
'ID' => 'Indonesia',
|
||||
'IR' => 'Iran, Islamic Republic Of',
|
||||
'IQ' => 'Iraq',
|
||||
'IE' => 'Ireland',
|
||||
'IM' => 'Isle Of Man',
|
||||
'IL' => 'Israel',
|
||||
'IT' => 'Italy',
|
||||
'JM' => 'Jamaica',
|
||||
'JP' => 'Japan',
|
||||
'JE' => 'Jersey',
|
||||
'JO' => 'Jordan',
|
||||
'KZ' => 'Kazakhstan',
|
||||
'KE' => 'Kenya',
|
||||
'KI' => 'Kiribati',
|
||||
'KR' => 'Korea',
|
||||
'KW' => 'Kuwait',
|
||||
'KG' => 'Kyrgyzstan',
|
||||
'LA' => 'Lao People\'s Democratic Republic',
|
||||
'LV' => 'Latvia',
|
||||
'LB' => 'Lebanon',
|
||||
'LS' => 'Lesotho',
|
||||
'LR' => 'Liberia',
|
||||
'LY' => 'Libyan Arab Jamahiriya',
|
||||
'LI' => 'Liechtenstein',
|
||||
'LT' => 'Lithuania',
|
||||
'LU' => 'Luxembourg',
|
||||
'MO' => 'Macao',
|
||||
'MK' => 'Macedonia',
|
||||
'MG' => 'Madagascar',
|
||||
'MW' => 'Malawi',
|
||||
'MY' => 'Malaysia',
|
||||
'MV' => 'Maldives',
|
||||
'ML' => 'Mali',
|
||||
'MT' => 'Malta',
|
||||
'MH' => 'Marshall Islands',
|
||||
'MQ' => 'Martinique',
|
||||
'MR' => 'Mauritania',
|
||||
'MU' => 'Mauritius',
|
||||
'YT' => 'Mayotte',
|
||||
'MX' => 'Mexico',
|
||||
'FM' => 'Micronesia, Federated States Of',
|
||||
'MD' => 'Moldova',
|
||||
'MC' => 'Monaco',
|
||||
'MN' => 'Mongolia',
|
||||
'ME' => 'Montenegro',
|
||||
'MS' => 'Montserrat',
|
||||
'MA' => 'Morocco',
|
||||
'MZ' => 'Mozambique',
|
||||
'MM' => 'Myanmar',
|
||||
'NA' => 'Namibia',
|
||||
'NR' => 'Nauru',
|
||||
'NP' => 'Nepal',
|
||||
'NL' => 'Netherlands',
|
||||
'AN' => 'Netherlands Antilles',
|
||||
'NC' => 'New Caledonia',
|
||||
'NZ' => 'New Zealand',
|
||||
'NI' => 'Nicaragua',
|
||||
'NE' => 'Niger',
|
||||
'NG' => 'Nigeria',
|
||||
'NU' => 'Niue',
|
||||
'NF' => 'Norfolk Island',
|
||||
'MP' => 'Northern Mariana Islands',
|
||||
'NO' => 'Norway',
|
||||
'OM' => 'Oman',
|
||||
'PK' => 'Pakistan',
|
||||
'PW' => 'Palau',
|
||||
'PS' => 'Palestinian Territory, Occupied',
|
||||
'PA' => 'Panama',
|
||||
'PG' => 'Papua New Guinea',
|
||||
'PY' => 'Paraguay',
|
||||
'PE' => 'Peru',
|
||||
'PH' => 'Philippines',
|
||||
'PN' => 'Pitcairn',
|
||||
'PL' => 'Poland',
|
||||
'PT' => 'Portugal',
|
||||
'PR' => 'Puerto Rico',
|
||||
'QA' => 'Qatar',
|
||||
'RE' => 'Reunion',
|
||||
'RO' => 'Romania',
|
||||
'RU' => 'Russian Federation',
|
||||
'RW' => 'Rwanda',
|
||||
'BL' => 'Saint Barthelemy',
|
||||
'SH' => 'Saint Helena',
|
||||
'KN' => 'Saint Kitts And Nevis',
|
||||
'LC' => 'Saint Lucia',
|
||||
'MF' => 'Saint Martin',
|
||||
'PM' => 'Saint Pierre And Miquelon',
|
||||
'VC' => 'Saint Vincent And Grenadines',
|
||||
'WS' => 'Samoa',
|
||||
'SM' => 'San Marino',
|
||||
'ST' => 'Sao Tome And Principe',
|
||||
'SA' => 'Saudi Arabia',
|
||||
'SN' => 'Senegal',
|
||||
'RS' => 'Serbia',
|
||||
'SC' => 'Seychelles',
|
||||
'SL' => 'Sierra Leone',
|
||||
'SG' => 'Singapore',
|
||||
'SK' => 'Slovakia',
|
||||
'SI' => 'Slovenia',
|
||||
'SB' => 'Solomon Islands',
|
||||
'SO' => 'Somalia',
|
||||
'ZA' => 'South Africa',
|
||||
'GS' => 'South Georgia And Sandwich Isl.',
|
||||
'ES' => 'Spain',
|
||||
'LK' => 'Sri Lanka',
|
||||
'SD' => 'Sudan',
|
||||
'SR' => 'Suriname',
|
||||
'SJ' => 'Svalbard And Jan Mayen',
|
||||
'SZ' => 'Swaziland',
|
||||
'SE' => 'Sweden',
|
||||
'CH' => 'Switzerland',
|
||||
'SY' => 'Syrian Arab Republic',
|
||||
'TW' => 'Taiwan',
|
||||
'TJ' => 'Tajikistan',
|
||||
'TZ' => 'Tanzania',
|
||||
'TH' => 'Thailand',
|
||||
'TL' => 'Timor-Leste',
|
||||
'TG' => 'Togo',
|
||||
'TK' => 'Tokelau',
|
||||
'TO' => 'Tonga',
|
||||
'TT' => 'Trinidad And Tobago',
|
||||
'TN' => 'Tunisia',
|
||||
'TR' => 'Turkey',
|
||||
'TM' => 'Turkmenistan',
|
||||
'TC' => 'Turks And Caicos Islands',
|
||||
'TV' => 'Tuvalu',
|
||||
'UG' => 'Uganda',
|
||||
'UA' => 'Ukraine',
|
||||
'AE' => 'United Arab Emirates',
|
||||
'GB' => 'United Kingdom',
|
||||
'US' => 'United States',
|
||||
'UM' => 'United States Outlying Islands',
|
||||
'UY' => 'Uruguay',
|
||||
'UZ' => 'Uzbekistan',
|
||||
'VU' => 'Vanuatu',
|
||||
'VE' => 'Venezuela',
|
||||
'VN' => 'Viet Nam',
|
||||
'VG' => 'Virgin Islands, British',
|
||||
'VI' => 'Virgin Islands, U.S.',
|
||||
'WF' => 'Wallis And Futuna',
|
||||
'EH' => 'Western Sahara',
|
||||
'YE' => 'Yemen',
|
||||
'ZM' => 'Zambia',
|
||||
'ZW' => 'Zimbabwe',
|
||||
);
|
||||
?>
|
||||
Reference in New Issue
Block a user