function Aastra_is_daynight_notify_allowed_Asterisk($user, $index = 'ALL') { global $array_config_daynight; # No by default $return = False; # One or all index? if ($index == 'ALL') { # Retrieve status for all configured indexes $array_night = Aastra_manage_daynight_Asterisk('get_all', ''); # Test all indexes foreach ($array_night as $index => $value) { # Depending on the configuration switch ($array_config_daynight[$index]['notify']) { case 'ALL': $return = True; break; case '': break; default: $array = explode(',', $array_config_daynight[$index]['notify']); if (in_array($user, $array)) { $return = True; } else { if (Aastra_is_daynight_appli_allowed_Asterisk($user, $index)) { $return = True; } } break; } if ($return) { break; } } } else { # Depending on the configuration switch ($array_config_daynight[$index]['notify']) { case 'ALL': $return = True; break; case '': break; default: $array = explode(',', $array_config_daynight[$index]['notify']); if (in_array($user, $array)) { $return = True; } else { if (Aastra_is_daynight_appli_allowed_Asterisk($user, $index)) { $return = True; } } break; } } # Return result return $return; }
function create_mac($mac, $extension, $username, $secret, $callerid, $model, $profile, $tz_name, $tz_code, $lang_code, $lang) { global $AA_XML_SERVER; global $AA_PROXY_SERVER; global $AA_REGISTRAR_SERVER; global $AA_XMLDIRECTORY; global $AA_PRESENCE_STATE; global $AA_SPEEDDIAL_STATE; global $AA_ASK_TZ; global $AA_FREEPBX_MODE; global $language; # So far so good $return = True; # Read profile file if ($AA_FREEPBX_MODE == '1') { $array_profile = Aastra_readCFGfile($profile . '-user.prf', '#', ':'); } else { $array_profile = Aastra_readCFGfile($profile . '-device-nouser.prf', '#', ':'); } if (count($array_profile) == 0) { Aastra_debug('Profile file ' . $profile . ' not available'); return False; } # Check if model is available if (count($array_profile[$model]) == 0) { Aastra_debug('Phone model ' . $model . ' not configured in the Profile file (' . $profile . ')'); return False; } # Get park configuration $park = Aastra_get_park_config_Asterisk(); # Get polling value $polling = Aastra_get_polling_interval_Asterisk(); # Prepare replace strings $search = array('/\\$\\$AA_SIPAUTHNAME_AA\\$\\$/', '/\\$\\$AA_SIPSECRET_AA\\$\\$/', '/\\$\\$AA_SIPUSERNAME_AA\\$\\$/', '/\\$\\$AA_SIPCALLERID_AA\\$\\$/', '/\\$\\$AA_TZ_NAME_AA\\$\\$/', '/\\$\\$AA_TZ_CODE_AA\\$\\$/', '/\\$\\$AA_XML_SERVER_AA\\$\\$/', '/\\$\\$AA_PROXY_SERVER_AA\\$\\$/', '/\\$\\$AA_REGISTRAR_SERVER_AA\\$\\$/', '/\\$\\$AA_PARKINGLOT_AA\\$\\$/', '/\\$\\$AA_XMLDIRECTORY_AA\\$\\$/', '/\\$\\$AA_INTERCOM_CODE_AA\\$\\$/', '/\\$\\$AA_POLLING_INT_AA\\$\\$/'); $replace = array(quotemeta($username), $secret, quotemeta($extension), quotemeta($callerid), $tz_name, $tz_code, $AA_XML_SERVER, $AA_PROXY_SERVER, $AA_REGISTRAR_SERVER, $park['parkext'], $AA_XMLDIRECTORY, Aastra_get_intercom_config_Asterisk(), $polling); # Also use the core piece for device and user if ($AA_FREEPBX_MODE == '2') { foreach ($array_profile['Core'] as $key => $value) { $line = preg_replace($search, $replace, $value); if (stristr($line, '$$AA_KEYPRESS_AA$$')) { $pieces = explode(' ', $key); $line = preg_replace('/\\$\\$AA_KEYPRESS_AA\\$\\$/', $pieces[0], $line); } $array_config[$key] = $line; } } # Use the common piece foreach ($array_profile['Common'] as $key => $value) { $line = preg_replace($search, $replace, $value); if (stristr($line, '$$AA_KEYPRESS_AA$$')) { $pieces = explode(' ', $key); $line = preg_replace('/\\$\\$AA_KEYPRESS_AA\\$\\$/', $pieces[0], $line); } $array_config[$key] = $line; } # Model exists if ($array_profile[$model] != NULL) { # Check if full template if (key_exists('template', $array_profile[$model])) { $template = $array_profile[$model]['template']; } else { $template = $model; } # Use the template foreach ($array_profile[$template] as $key => $value) { if ($key != 'template') { $line = preg_replace($search, $replace, $value); if (stristr($line, '$$AA_KEYPRESS_AA$$')) { $pieces = explode(' ', $key); $line = preg_replace('/\\$\\$AA_KEYPRESS_AA\\$\\$/', $pieces[0], $line); } $array_config[$key] = $line; } } # Use the add-ons if ($template != $model) { foreach ($array_profile[$model] as $key => $value) { if ($key != 'template') { $line = preg_replace($search, $replace, $value); $array_config[$key] = $line; } } } } # Read user custom configuration $array_user = Aastra_readCFGfile('user-custom.prf', '#', ':'); # User/Device exists if ($array_user[$extension] != NULL) { # Use the user configuration additions foreach ($array_user[$extension] as $key => $value) { $line = preg_replace($search, $replace, $value); if (stristr($line, '$$AA_KEYPRESS_AA$$')) { $pieces = explode(' ', $key); $line = preg_replace('/\\$\\$AA_KEYPRESS_AA\\$\\$/', $pieces[0], $line); } $array_config[$key] = $line; } } # Remove TZ if not needed if (!$AA_ASK_TZ) { unset($array_config['time zone name']); unset($array_config['time zone code']); } # Process language if ($lang_code != '') { $array_config['language'] = $lang_code; if (Aastra_test_phone_version('2.0.1.', '1') == 0) { $array_config['web language'] = $lang_code; $array_wl = array('fr' => 'French', 'it' => 'Italian', 'es' => 'Spanish', 'en' => 'English', 'de' => 'German', 'pt' => 'Portuguese'); if ($array_wl[substr($lang, 0, 2)] != '') { $array_config['input language'] = $array_wl[substr($lang, 0, 2)]; } } } # User mode if ($AA_FREEPBX_MODE == '1') { # Retrieve user keys $keys = Aastra_get_user_context($username, 'keys'); # User has existing keys if (count($keys[$model]) != 0) { # Remove all profile keys foreach ($array_config as $key => $value) { if (stristr($key, 'key')) { unset($array_config[$key]); } } # Add user keys foreach ($keys[$model] as $key => $value) { $array_config[$key] = $value; } } # Process day/night keys foreach ($array_config as $key => $value) { if (strstr($value, 'daynight.php')) { $pieces = explode(' ', $key); if (stristr($pieces[0], 'expmod')) { $appli = $pieces[0] . ' ' . $pieces[1]; } else { $appli = $pieces[0]; } $url = parse_url($value); parse_str($url['query'], $parse); if ($parse['index'] != '') { $index = $parse['index']; } else { $index = ''; } if (!Aastra_is_daynight_appli_allowed_Asterisk($username, $index)) { unset($array_config[$appli . ' type']); unset($array_config[$appli . ' label']); unset($array_config[$appli . ' value']); unset($array_config[$appli . ' states']); } } } # Process presence if (!$AA_PRESENCE_STATE) { foreach ($array_config as $key => $value) { if (strstr($value, 'away.php')) { $pieces = explode(' ', $key); if (stristr($pieces[0], 'expmod')) { $appli = $pieces[0] . ' ' . $pieces[1]; } else { $appli = $pieces[0]; } break; } } if ($appli != '') { unset($array_config[$appli . ' type']); unset($array_config[$appli . ' label']); unset($array_config[$appli . ' value']); unset($array_config[$appli . ' states']); } } # Process speed dial if (!$AA_SPEEDDIAL_STATE) { foreach ($array_config as $key => $value) { if (strstr($value, 'speed.php')) { $pieces = explode(' ', $key); if (stristr($pieces[0], 'expmod')) { $appli = $pieces[0] . ' ' . $pieces[1]; } else { $appli = $pieces[0]; } break; } } if ($appli != '') { unset($array_config[$appli . ' type']); unset($array_config[$appli . ' label']); unset($array_config[$appli . ' value']); unset($array_config[$appli . ' states']); } } } # Translate the needed parameters foreach ($array_config as $key => $value) { $test = False; if (stristr($key, 'key') and stristr($key, 'label')) { $test = True; } if (stristr($key, 'xml application title')) { $test = True; } if ($test) { $array_config[$key] = Aastra_get_label($value, $language); } } # Config file $write = @fopen(AASTRA_TFTP_DIRECTORY . '/' . $mac . '.cfg', 'w'); # No problem with the file if ($write) { # Dump the config file foreach ($array_config as $key => $value) { fputs($write, $key . ': ' . $value . "\n"); } # Close the MAC.cfg file fclose($write); } else { # Trace Aastra_debug('Cannot write MAC.cfg (' . AASTRA_TFTP_DIRECTORY . '/' . $mac . '.cfg )'); $return = False; } # Return result return $return; }
Aastra_test_phone_versions(array('1' => '1.4.2.', '2' => '1.4.2.', '3' => '2.5.3.', '4' => '2.5.3.', '5' => '3.0.1.'), '0'); # Get language $language = Aastra_get_language(); # Global compatibility $nb_softkeys = Aastra_number_softkeys_supported(); $is_icons = Aastra_is_icons_supported(); # Initial action if ($action == '') { # Set mode if ($index == '') { $mode = 'ALL'; } else { $mode = 'SINGLE'; } # Test if application is allowed if (!Aastra_is_daynight_appli_allowed_Asterisk(Aastra_get_userdevice_Asterisk($user), $index)) { # Display error $action = 'error'; $err_title = Aastra_get_label('Error', $language); $err_text = Aastra_get_label('You are not allowed to use this application with the current configuration. Please contact your administrator.', $language); } else { # Retrieve status for all configured indexes $array_night = Aastra_manage_daynight_Asterisk('get_all', ''); # Depending on mode if ($mode != 'ALL') { # Check requested index configured if (!$array_night[$index]) { # Display error $action = 'error'; $err_title = Aastra_get_label('Configuration Error', $language); $err_text = Aastra_get_label('The requested day/night index is not configured. Please contact your administrator.', $language);
function generate_user_config($device, $user, $last_user) { global $AA_XML_SERVER; global $AA_XMLDIRECTORY; global $AA_PRESENCE_STATE; global $AA_SPEEDDIAL_STATE; global $language; # Get type of phone $header = Aastra_decode_HTTP_header(); $model = $header['model']; # Read profile file if ($user != '') { $profile = Aastra_get_startup_profile_Asterisk($user); } else { $profile = Aastra_get_startup_profile_Asterisk($device); } $array_user = Aastra_readCFGfile($profile . '-device-user.prf', '#', ':'); $array_nouser = Aastra_readCFGfile($profile . '-device-nouser.prf', '#', ':'); $array_custom = Aastra_readCFGfile('user-custom.prf', '#', ':'); # Language $code = Aastra_ask_language_Asterisk(); $ask_language = $code[0]; # Retrieve user information $device_info = Aastra_get_device_info_Asterisk($device); # There is a user if ($user != '') { # Retrieve user information $user_info = Aastra_get_user_info_Asterisk($user); # Get park configuration $park = Aastra_get_park_config_Asterisk(); # Get polling value $polling = Aastra_get_polling_interval_Asterisk(); # Prepare replace strings $search = array('/\\$\\$AA_SIPUSERNAME_AA\\$\\$/', '/\\$\\$AA_SIPCALLERID_AA\\$\\$/', '/\\$\\$AA_XML_SERVER_AA\\$\\$/', '/\\$\\$AA_PARKINGLOT_AA\\$\\$/', '/\\$\\$AA_XMLDIRECTORY_AA\\$\\$/', '/\\$\\$AA_INTERCOM_CODE_AA\\$\\$/', '/\\$\\$AA_POLLING_INT_AA\\$\\$/'); $replace = array($user_info['cidnum'], $user_info['cidname'], $AA_XML_SERVER, $park['parkext'], $AA_XMLDIRECTORY, Aastra_get_intercom_config_Asterisk(), $polling); # Use the common piece foreach ($array_user['Common'] as $key => $value) { if (!array_key_exists($key, $array_nouser['Core'])) { $line = preg_replace($search, $replace, $value); if (stristr($line, '$$AA_KEYPRESS_AA$$')) { $pieces = explode(' ', $key); $line = preg_replace('/\\$\\$AA_KEYPRESS_AA\\$\\$/', $pieces[0], $line); } $array_out[$key] = $line; } } # Model exists if ($array_user[$model] != NULL) { # Check if full template if (key_exists('template', $array_user[$model])) { $template = $array_user[$model]['template']; } else { $template = $model; } # Use the template foreach ($array_user[$template] as $key => $value) { if ($key != 'template' and !array_key_exists($key, $array_nouser['Core'])) { $line = preg_replace($search, $replace, $value); if (stristr($line, '$$AA_KEYPRESS_AA$$')) { $pieces = explode(' ', $key); $line = preg_replace('/\\$\\$AA_KEYPRESS_AA\\$\\$/', $pieces[0], $line); } $array_out[$key] = $line; } } # Use the add-ons if ($template != $model) { foreach ($array_user[$model] as $key => $value) { if ($key != 'template') { $line = preg_replace($search, $replace, $value); $array_out[$key] = $line; } } } } # User customization exists if ($array_custom[$user] != NULL) { # Use the user configuration additions foreach ($array_custom[$user] as $key => $value) { $line = preg_replace($search, $replace, $value); if (stristr($line, '$$AA_KEYPRESS_AA$$')) { $pieces = explode(' ', $key); $line = preg_replace('/\\$\\$AA_KEYPRESS_AA\\$\\$/', $pieces[0], $line); } $array_out[$key] = $line; } } # Language if ($ask_language) { $array_language = Aastra_get_user_context($device, 'language'); $array_out['language'] = $array_language['code']; $array_out['web language'] = $array_language['code']; $array_out['input language'] = $array_language['clear']; $language = $array_language['language']; } } else { # Use the common piece foreach ($array_user['Common'] as $key => $value) { if (!array_key_exists($key, $array_nouser['Core'])) { $array_out[$key] = ''; } } # Model exists for the user if ($array_user[$model] != NULL) { # Check if full template if (key_exists('template', $array_user[$model])) { $template = $array_user[$model]['template']; } else { $template = $model; } # Use the template foreach ($array_user[$template] as $key => $value) { if ($key != 'template' and !array_key_exists($key, $array_nouser['Core'])) { $array_out[$key] = ''; } } # Use the add-ons if ($template != $model) { foreach ($array_user[$model] as $key => $value) { if ($key != 'template') { $array_out[$key] = ''; } } } } # Device customization exists if ($array_custom[$last_user] != NULL) { foreach ($array_custom[$last_user] as $key => $value) { if (!array_key_exists($key, $array_nouser['Core'])) { $array_out[$key] = ''; } } } # Prepare replace strings $search = array('/\\$\\$AA_SIPUSERNAME_AA\\$\\$/', '/\\$\\$AA_SIPCALLERID_AA\\$\\$/', '/\\$\\$AA_XML_SERVER_AA\\$\\$/', '/\\$\\$AA_PARKINGLOT_AA\\$\\$/', '/\\$\\$AA_XMLDIRECTORY_AA\\$\\$/'); $replace = array($device, Aastra_get_callerid_Asterisk($device), $AA_XML_SERVER, $park['parkext'], $AA_XMLDIRECTORY); # Use the common piece foreach ($array_nouser['Common'] as $key => $value) { $line = preg_replace($search, $replace, $value); if (stristr($line, '$$AA_KEYPRESS_AA$$')) { $pieces = explode(' ', $key); $line = preg_replace('/\\$\\$AA_KEYPRESS_AA\\$\\$/', $pieces[0], $line); } $array_out[$key] = $line; } # Model exists for the device if ($array_nouser[$model] != NULL) { # Check if full template if (key_exists('template', $array_nouser[$model])) { $template = $array_nouser[$model]['template']; } else { $template = $model; } # Use the template foreach ($array_nouser[$template] as $key => $value) { if ($key != 'template') { $line = preg_replace($search, $replace, $value); if (stristr($line, '$$AA_KEYPRESS_AA$$')) { $pieces = explode(' ', $key); $line = preg_replace('/\\$\\$AA_KEYPRESS_AA\\$\\$/', $pieces[0], $line); } $array_out[$key] = $line; } } # Use the add-ons if ($template != $model) { foreach ($array_nouser[$model] as $key => $value) { if ($key != 'template') { $line = preg_replace($search, $replace, $value); $array_out[$key] = $line; } } } } # Language if ($ask_language) { $array_out['language'] = ''; $array_out['web language'] = ''; $array_out['input language'] = ''; $language = $code[1][$code[2]]; } } # Process day/night keys foreach ($array_out as $key => $value) { if (strstr($value, 'daynight.php')) { $pieces = explode(' ', $key); if (stristr($pieces[0], 'expmod')) { $appli = $pieces[0] . ' ' . $pieces[1]; } else { $appli = $pieces[0]; } $url = parse_url($value); parse_str($url['query'], $parse); if ($parse['index'] != '') { $index = $parse['index']; } else { $index = 'ALL'; } if (!Aastra_is_daynight_appli_allowed_Asterisk($username, $index)) { unset($array_out[$appli . ' type']); unset($array_out[$appli . ' label']); unset($array_out[$appli . ' value']); unset($array_out[$appli . ' states']); } } } # Process presence if (!$AA_PRESENCE_STATE) { foreach ($array_out as $key => $value) { if (strstr($value, 'away.php')) { $pieces = explode(' ', $key); if (stristr($pieces[0], 'expmod')) { $appli = $pieces[0] . ' ' . $pieces[1]; } else { $appli = $pieces[0]; } break; } } if ($appli != '') { unset($array_out[$appli . ' type']); unset($array_out[$appli . ' label']); unset($array_out[$appli . ' value']); unset($array_out[$appli . ' states']); } } # Process speed dial if (!$AA_SPEEDDIAL_STATE) { foreach ($array_out as $key => $value) { if (strstr($value, 'speed.php')) { $pieces = explode(' ', $key); if (stristr($pieces[0], 'expmod')) { $appli = $pieces[0] . ' ' . $pieces[1]; } else { $appli = $pieces[0]; } break; } } if ($appli != '') { unset($array_out[$appli . ' type']); unset($array_out[$appli . ' label']); unset($array_out[$appli . ' value']); unset($array_out[$appli . ' states']); } } # Remove 'logout' if device is fixed if ($user != '' and $device_info['type'] == 'fixed') { foreach ($array_out as $key => $value) { if (strstr($value, 'logout.php')) { $pieces = explode(' ', $key); if (stristr($pieces[0], 'expmod')) { $appli = $pieces[0] . ' ' . $pieces[1]; } else { $appli = $pieces[0]; } break; } } if ($appli != '') { unset($array_out[$pieces[0] . ' type']); unset($array_out[$pieces[0] . ' label']); unset($array_out[$pieces[0] . ' value']); unset($array_out[$pieces[0] . ' states']); } } # Find the special keys if ($user != '') { init_special_keys($device, $array_out); } # Translate labels foreach ($array_out as $key => $value) { $test = False; if (stristr($key, 'key') and stristr($key, 'label')) { $test = True; } if (stristr($key, 'xml application title')) { $test = True; } if ($test) { $array_out[$key] = Aastra_get_label($value, $language); } } # Return result return $array_out; }