" . $_SESSION['ari_error'] . "
";
unset($_SESSION['ari_error']);
}
return $ret;
}
/*
* Checks modules directory, and configuration, and loaded modules
*/
function loadModules() {
global $ARI_ADMIN_MODULES;
global $ARI_DISABLED_MODULES;
global $loaded_modules;
$modules_path = "./modules";
if (is_dir($modules_path)) {
$filter = ".module";
$recursive_max = 1;
$recursive_count = 0;
$files = getFiles($modules_path,$filter,$recursive_max,$recursive_count);
foreach($files as $key => $path) {
// build module object
include_once($path);
$path_parts = pathinfo($path);
list($name,$ext) = split("\.",$path_parts['basename']);
// check for module and get rank
if (class_exists($name)) {
$module = new $name();
// check if admin module
$found = 0;
if ($ARI_ADMIN_MODULES) {
$admin_modules = split(',',$ARI_ADMIN_MODULES);
foreach ($admin_modules as $key => $value) {
if ($name==$value) {
$found = 1;
break;
}
}
}
// check if disabled module
$disabled = 0;
if ($ARI_DISABLED_MODULES) {
$disabled_modules = split(',',$ARI_DISABLED_MODULES);
foreach ($disabled_modules as $key => $value) {
if ($name==$value) {
$disabled = 1;
break;
}
}
}
// if not admin module or admin user add to module name to array
if (!$disabled && (!$found || $_SESSION['ari_user']['admin'])) {
$loaded_modules[$name] = $module;
}
}
}
}
else {
$_SESSION['ari_error'] = _("$path not a directory or not readable");
}
}
/**
* Builds database connections
*/
function databaseLogon() {
global $STANDALONE;
global $ASTERISKMGR_DBHOST;
global $AMP_FUNCTIONS_FILES;
global $AMPORTAL_CONF_FILE;
global $LEGACY_AMP_DBENGINE;
global $LEGACY_AMP_DBFILE;
global $LEGACY_AMP_DBHOST;
global $LEGACY_AMP_DBNAME;
global $ASTERISKCDR_DBENGINE;
global $ASTERISKCDR_DBFILE;
global $ASTERISKCDR_DBHOST;
global $ASTERISKCDR_DBNAME;
global $ARI_DISABLED_MODULES;
global $loaded_modules;
// This variable is a global in the FreePBX function.inc.php but needs to be
// declared here or the is not seen when parse_amprotaconf() is eventually called
// ?php bug?
//
global $amp_conf_defaults;
// get user
if ($STANDALONE['use']) {
$mgrhost = $ASTERISKMGR_DBHOST;
$mgruser = $STANDALONE['asterisk_mgruser'];
$mgrpass = $STANDALONE['asterisk_mgrpass'];
$asteriskcdr_dbengine = $ASTERISKCDR_DBENGINE;
$asteriskcdr_dbfile = $ASTERISKCDR_DBFILE;
$asteriskcdr_dbuser = $STANDALONE['asteriskcdr_dbuser'];
$asteriskcdr_dbpass = $STANDALONE['asteriskcdr_dbpass'];
$asteriskcdr_dbhost = $ASTERISKCDR_DBHOST;
$asteriskcdr_dbname = $ASTERISKCDR_DBNAME;
}
else {
$include = 0;
$files = split(';',$AMP_FUNCTIONS_FILES);
foreach ($files as $file) {
if (is_file($file)) {
include_once($file);
$include = 1;
}
}
if ($include) {
$amp_conf = parse_amportal_conf($AMPORTAL_CONF_FILE);
$mgrhost = $ASTERISKMGR_DBHOST;
$mgruser = $amp_conf['AMPMGRUSER'];
$mgrpass = $amp_conf['AMPMGRPASS'];
$amp_dbengine = isset($amp_conf["AMPDBENGINE"]) ? $amp_conf["AMPDBENGINE"] : $LEGACY_AMP_DBENGINE;
$amp_dbfile = isset($amp_conf["AMPDBFILE"]) ? $amp_conf["AMPDBFILE"] : $LEGACY_AMP_DBFILE;
$amp_dbuser = $amp_conf["AMPDBUSER"];
$amp_dbpass = $amp_conf["AMPDBPASS"];
$amp_dbhost = isset($amp_conf["AMPDBHOST"]) ? $amp_conf["AMPDBHOST"] : $LEGACY_AMP_DBHOST;
$amp_dbname = isset($amp_conf["AMPDBNAME"]) ? $amp_conf["AMPDBNAME"] : $LEGACY_AMP_DBNAME;
$asteriskcdr_dbengine = $ASTERISKCDR_DBENGINE;
$asteriskcdr_dbfile = $ASTERISKCDR_DBFILE;
$asteriskcdr_dbuser = $amp_conf["AMPDBUSER"];
$asteriskcdr_dbpass = $amp_conf["AMPDBPASS"];
$asteriskcdr_dbhost = $ASTERISKCDR_DBHOST;
$asteriskcdr_dbhost = isset($amp_conf["AMPDBHOST"]) ? $amp_conf["AMPDBHOST"] : $ASTERISKCDR_DBHOST;
$asteriskcdr_dbname = $ASTERISKCDR_DBNAME;
unset($amp_conf);
}
}
// asterisk manager interface (berkeley database I think)
global $asterisk_manager_interface;
$asterisk_manager_interface = new AsteriskManagerInterface();
$success = $asterisk_manager_interface->Connect($mgrhost,$mgruser,$mgrpass);
if (!$success) {
$_SESSION['ari_error'] =
_("ARI does not appear to have access to the Asterisk Manager.") . " ($errno)
" .
_("Check the ARI 'main.conf.php' configuration file to set the Asterisk Manager Account.") . "
" .
_("Check /etc/asterisk/manager.conf for a proper Asterisk Manager Account") . "
" .
_("make sure [general] enabled = yes and a 'permit=' line for localhost or the webserver.");
return FALSE;
}
// pear interface databases
$db = new Database();
// AMP asterisk database
if (!$STANDALONE['use']) {
$_SESSION['dbh_asterisk'] = $db->logon($amp_dbengine,
$amp_dbfile,
$amp_dbuser,
$amp_dbpass,
$amp_dbhost,
$amp_dbname);
if (!isset($_SESSION['dbh_asterisk'])) {
$_SESSION['ari_error'] .= _("Cannot connect to the $amp_dbname database") . "
" .
_("Check AMP installation, asterisk, and ARI main.conf");
return FALSE;
}
}
// cdr database
if (in_array('callmonitor',array_keys($loaded_modules))) {
$_SESSION['dbh_cdr'] = $db->logon($asteriskcdr_dbengine,
$asteriskcdr_dbfile,
$asteriskcdr_dbuser,
$asteriskcdr_dbpass,
$asteriskcdr_dbhost,
$asteriskcdr_dbname);
if (!isset($_SESSION['dbh_cdr'])) {
$_SESSION['ari_error'] .= sprintf(_("Cannot connect to the $asteriskcdr_dbname database"),$asteriskcdr_dbname) . "
" .
_("Check AMP installation, asterisk, and ARI main.conf");
return FALSE;
}
}
return TRUE;
}
/**
* Logout if needed for any databases
*/
function databaseLogoff() {
global $asterisk_manager_interface;
$asterisk_manager_interface->Disconnect();
}
/*
* Checks if user is set and sets
*/
function loginBlock() {
$login = new Login();
if (isset($_REQUEST['logout'])) {
$login->Unauth();
}
if (!isset($_SESSION['ari_user'])) {
$login->Auth();
}
if (!isset($_SESSION['ari_user'])) {
// login form
$ret .= $login->GetForm();
return $ret;
}
}
/*
* Main handler for website
*/
function handleBlock() {
global $ARI_NO_LOGIN;
global $loaded_modules;
// check errors here and in login block
$content .= checkErrorMessage();
// check logout
if ($_SESSION['ari_user'] && !$ARI_NO_LOGIN) {
$logout = 1;
}
// if nothing set goto user default page
if (!isset($_REQUEST['m'])) {
$_REQUEST['m'] = $_SESSION['ari_user']['default_page'];
}
// if not function specified then use display page function
if (!isset($_REQUEST['f'])) {
$_REQUEST['f'] = 'display';
}
$m = $_REQUEST['m']; // module
$f = $_REQUEST['f']; // function
$a = $_REQUEST['a']; // action
// set arguments
$args = array();
foreach($_REQUEST as $key => $value) {
$args[$key] = $value;
}
// set rank
$ranked_modules = array();
foreach ($loaded_modules as $module) {
$module_methods = get_class_methods($module); // note that PHP4 returns all lowercase
while (list($index, $value) = each($module_methods)) {
$module_methods[strtolower($index)] = strtolower($value);
}
reset($module_methods);
$rank = 99999;
$rank_function = "rank";
if (in_array(strtolower($rank_function), $module_methods)) {
$rank = $module->$rank_function();
}
$ranked_modules[$rank] = $module;
}
ksort($ranked_modules);
// process modules
foreach ($ranked_modules as $module) {
// process module
$name = get_class($module); // note PHP4 returns all lowercase
$module_methods = get_class_methods($module); // note PHP4 returns all lowercase
while (list($index, $value) = each($module_methods)) {
$module_methods[strtolower($index)] = strtolower($value);
}
reset($module_methods);
// init module
$module->init();
// add nav menu items
$nav_menu_function = "navMenu";
if (in_array(strtolower($nav_menu_function), $module_methods)) {
$nav_menu .= $module->$nav_menu_function($args);
}
if (strtolower($m)==strtolower($name)) {
// build sub menu
$subnav_menu_function = "navSubMenu";
if (in_array(strtolower($subnav_menu_function), $module_methods)) {
$subnav_menu .= $module->$subnav_menu_function($args);
}
// execute function (usually to build content)
if (in_array(strtolower($f), $module_methods)) {
$content .= $module->$f($args);
}
}
}
// add logout link
if ($logout != '') {
$nav_menu .= "