* @package AgileBill * @version 1.4.93 */ global $VAR, $_SERVER, $HTTP_SERVER_VARS; # get the file path if (is_file($_SERVER["PATH_TRANSLATED"])) { $path = $_SERVER["PATH_TRANSLATED"]; } elseif (is_file($HTTP_SERVER_VARS["SCRIPT_FILENAME"])) { $path = $HTTP_SERVER_VARS["SCRIPT_FILENAME"]; } else { $path = PATH_AGILE; } $path = eregi_replace('index.php', '', $path); $path = eregi_replace("[\\\\]", '/', $path); # Get the current IP & Domain if(isset($_SERVER)) { $site_domain = @$_SERVER['HTTP_HOST']; $site_ip = @$_SERVER['SERVER_ADDR']; } else { $server = getallheaders(); $site_domain = $server['Host']; $site_ip = false; } # req writable files/paths $_FILES = Array ( Array('file', 'config.inc.php'), Array('dir', 'includes/smarty/templates/'), Array('dir', 'includes/files/'), Array('dir', 'includes/images/') ); # Modules to skip over (duplicate tables) $_SKIP_MODULES = Array ( 'account_admin' ); # Core modules needed $_CORE_MODULES = Array ( 'module', 'module_method', 'group_method'); # Base modules needed $_BASE_MODULES = Array ( 'setup', 'account', 'account_memo', 'account_admin', 'account_group', 'account_billing', 'backup', 'blocked_email', 'blocked_ip', 'cart', 'country', 'currency', 'checkout', 'discount', 'email_template', 'email_template_translate', 'group', 'group_method', 'invoice', 'invoice_commission', 'invoice_item', 'invoice_item_tax', 'invoice_item_discount', 'invoice_memo', 'invoice_setup', 'login_lock', 'login_log', 'log_error', 'module', 'module_method', 'newsletter', 'net_term', 'newsletter_subscriber', 'product', 'product_attr', 'product_cat', 'product_cat_translate', 'product_img', 'product_translate', 'search', 'search_saved', 'session', 'session_auth_cache', 'setup_email', 'setup_invoice', 'service', 'service_memo', 'staff', 'staff_department', 'static_relation', 'static_var', 'static_var_record', 'tax', 'task', 'temporary_data' ); # optional modules to check for $_CHK_MODULES = Array ( 'affiliate' => Array ('affiliate', 'affiliate_commission', 'affiliate_template'), 'asset' => Array ('asset', 'asset_pool'), 'campaign' => Array ('campaign'), 'charge' => Array ('charge'), 'db_mapping' => Array ('db_mapping'), 'email_queue' => Array ('email_queue'), 'file' => Array ('file', 'file_category'), 'faq' => Array ('faq', 'faq_category', 'faq_translate'), 'htaccess' => Array ('htaccess', 'htaccess_dir', 'htaccess_exclude'), 'host_server' => Array ('host_server', 'host_registrar_plugin', 'host_tld'), 'import' => Array ('import'), 'login_share' => Array ('login_share'), 'report' => Array ('report'), 'radius' => Array ('radius','radius_service'), 'static_page' => Array ('static_page', 'static_page_category','static_page_translate'), 'ticket' => Array ('ticket', 'ticket_department', 'ticket_message','ticket_attachment'), 'voip' => Array ('voip', 'voip_cdr', 'voip_did', 'voip_did_plugin', 'voip_fax','voip_fax_data', 'voip_in_network','voip_local_lookup','voip_pool','voip_rate','voip_rate_prod', 'voip_sip','voip_iax','voip_vm'), 'voip_prepaid' => Array ('voip_prepaid') ); # description of optional modules $_MODULE_DESC = Array ( 'affiliate' => 'Affiliate Module: manage affiliates and commissions.', 'asset' => 'Asset Management Module: manage asset assignment status.', 'campaign' => 'Campaign Module: manage and track advertising campaigns.', 'charge' => 'Charge Module: manage incremental billing for accounts and services.', 'db_mapping' => 'DB Mapping Module: sync your users to 3rd party databases, such as forums, CMS, etc.', 'email_queue' => 'E-mail Queue: Store e-mails in a queue before sending to improve the speed of the user/admin interface.', 'file' => 'File Module: upload files that users can download based on their groups.', 'faq' => 'FAQ Module: manage a Frequently Asked Questions list and enables canned responses in the ticket module.', 'htaccess' => 'Htaccess Module: protect php files and/or entire directories with htaccess based on groups and sell access.', 'import' => 'Import Module: manage custom imports from other programs.', 'host_server' => 'Hosting Module: sell webhosting services, domains, and automate server provisioning and domain registration.', 'login_share' => 'Login Sharing: automatically detect and ban password sharing.', 'report' => 'Report Module: report generation for account, invoice, and other data.', 'radius' => 'Radius Module: provisioning control over Radius authentication data.', 'static_page' => 'Static Page Module: create and manage static pages on your site from your admin area.', 'ticket' => 'Ticket Module: support ticket management.', 'voip' => 'VoIP Module: the core VoIP specific AgileVoice functionality.', 'voip_prepaid' => 'VoIP Prepaid Module: the added VoIP Prepaid AgileVoice functionality.' ); # define the default group to add all methods to $VAR["module_group"] = Array('1001'); # action handler if (!empty($VAR['do'])) { $do = $VAR['do']; switch ($VAR['do']) { # check file permissions: case 'step1': $files = test_files ($_FILES); $s_file = 'step1.php'; break; # write the new config vars case 'step2': $files = write_config($VAR); $s_file = 'step2.php'; # get the license code $filename = "License.txt"; if(is_file($filename)) { $handle = fopen($filename, "r"); $license_agreement = fread($handle, filesize($filename)); fclose($handle); } # check for available optional modules $i=0; if ($files === true) { while (list($n,$v) = each($_CHK_MODULES)) { if(is_dir('modules/'. $n )) { $modules[$i]['name'] = $n; $modules[$i]['desc'] = $_MODULE_DESC[$n]; $i++; } } } break; # test the database connection & select the modules to install case 'step3': $database = test_connection (); $s_file = 'step3.php'; if($database === true) { require_once('install/install_db_core.inc'); $dbinst = new install_db; $dbinst->core_modules = $_CORE_MODULES; $dbinst->skip_modules = $_SKIP_MODULES; # create core tables for($i=0; $iinstall_sql_tbl($_CORE_MODULES[$i]); # create base modules for($i=0; $iinstall_sql($_BASE_MODULES[$i]); # insert the data $dbinst->add_data($_BASE_MODULES); # check for user-defined modules if(is_array(@$VAR['modules'])) { for($i=0; $iinstall_sql($arr[$ii]); $dbinst->add_data($arr); } } } # insert license key and code into setup table $fields=Array('license_key'=> @$VAR['license_key'], 'license_code'=> @$VAR['license_code']); $db->Execute(sqlUpdate($db,"setup",$fields,"site_id=".DEFAULT_SITE)); } break; # select the database connection case 'step4': $s_file = 'step4.php'; break; } } else { $do = 'step1'; $files = test_files ($_FILES); $s_file = 'step1.php'; } # Load the template include('install/template.inc'); ######################################################################################### # Write the new config file ######################################################################################### function write_config ($VAR) { # get the config template if ($file = fopen('install/config.inc', 'r')) { $data = ''; while (!feof($file)) $data .= fgetc($file); fclose($file); # replace the user vars $data = ereg_replace('%%PATH_AGILE%%', @$VAR['path_agile'], $data); $data = ereg_replace('%%AGILE_DB_TYPE%%', @$VAR['db_type'], $data); $data = ereg_replace('%%AGILE_DB_HOST%%', @$VAR['db_host'], $data); $data = ereg_replace('%%AGILE_DB_DATABASE%%', @$VAR['db_database'], $data); $data = ereg_replace('%%AGILE_DB_USERNAME%%', @$VAR['db_username'], $data); $data = ereg_replace('%%AGILE_DB_PASSWORD%%', @$VAR['db_password'], $data); $data = ereg_replace('%%AGILE_DB_PREFIX%%', @$VAR['db_prefix'], $data); if(!defined("DEFAULT_SITE")) define("DEFAULT_SITE", 1); $data = str_replace('%%AGILE_DEFAULT_SITE%%', DEFAULT_SITE, $data); # write the new config file if ($file = fopen('config.inc.php', 'w')) { fputs($file, $data); return true; } else { return false; } } else { return false; } } ######################################################################################### # Check file/directory permissions ######################################################################################### function test_files ($_arr_perm) { # check each file/dir $_perm_err = false; for($i=0; $i". $_arr_perm[$i][1] . "` must be set set to writable. [ERROR-1]"; } } else { if (!is_dir($_arr_perm[$i][1]) || !is_writable($_arr_perm[$i][1])) { $_perm_err .= "

Directory Permission Problem Detected:
". "The directory `". $_arr_perm[$i][1] . "` must be set set to writable. [ERROR-2]"; } } } if(empty($_perm_err)) return true; else return $_perm_err; } ######################################################################################### # Check database connection ######################################################################################### function test_connection() { if(AGILE_DB_PREFIX=="") { return "

Database Configration Problem Detected:
". "You must return to Step 1 of the installation process and enter a database prefix."; } # Attempt to connect to the database $db = &DB(); $err = @$db->ErrorMsg(); if(!empty($err) ) { if (eregi('No Database Selected', $err) || eregi('Unknown database', $err)) { # attempt to create the database $result = $db->Execute('CREATE DATABASE '.AGILE_DB_DATABASE); if($result === false) return "

Database Problem Detected:
". "The database named `".AGILE_DB_DATABASE."` does not exist on `".AGILE_DB_HOST."`, ". "and the user/pass provided does not have permission to create it. [ERROR-3]"; else $result = true; } elseif (eregi('Access denied', $err)) { return "

Database Problem Detected:
". "The database `".AGILE_DB_DATABASE."` cannot be accessed with the user user/pass provided. [ERROR-4]"; } else { return "

Database Problem Detected:
". $err. " [ERROR-5]"; } } # drop table # $db->Execute('DROP TABLE '. AGILE_DB_DATABASE); if(defined('DEFAULT_SITE') && DEFAULT_SITE == 1) { # attempt table creation: $db = &DB(); $dict = NewDataDictionary($db); $flds = "col1 C(32), col2 C(32)"; $sqlarray = $dict->CreateTableSQL('1st_delete_this', $flds); $result = $db->Execute($sqlarray[0]); if ($result === false) { echo $db->ErrorMsg(); return "

Database Problem Detected:
". "You do not have the correct access to the database; unable to create tables. [ERROR-6]"; } # attempt index creation: $db = &DB(); $idxflds = 'co11, col2'; $sqlarray = $dict->CreateIndexSQL('id', '1st_delete_this', $idxflds); $dict->ExecuteSQLArray($sqlarray); if ($result === false) { return "

Database Problem Detected:
". "You do not have the correct access to the database; unable to create indexes. [ERROR-7]"; } # database tests passed: $db->Execute('DROP TABLE 1st_delete_this'); } return true; } ?>