LICENSE: AGPLv2 # # this screen manages the optional language tables in ViciDial # # changes: # 141203-2126 - First Build # 141205-0641 - Added option to allow for more matches in the help.php file # 141212-0923 - Added active setting # 141227-1041 - Added flags next to country code and active column on list # 141229-1531 - Added code for on-the-fly language translations display # 160330-1553 - navigation changes and fixes # 160404-0935 - design changes # 160429-1124 - Added admin_row_click option # 160508-0210 - Added screen colors feature # 161120-0919 - Added CHAT option # 170409-1547 - Added IP List validation code # 180502-2215 - Added new help display # 200828-1628 - Fix for early permissions message, Issue #1227 # 220222-0949 - Added allow_web_debug system setting # $admin_version = '2.14-13'; $build = '220222-0949'; require("dbconnect_mysqli.php"); require("functions.php"); if (isset($_GET["ADD"])) {$ADD=$_GET["ADD"];} elseif (isset($_POST["ADD"])) {$ADD=$_POST["ADD"];} if (isset($_GET["DB"])) {$DB=$_GET["DB"];} elseif (isset($_POST["DB"])) {$DB=$_POST["DB"];} if (isset($_GET["stage"])) {$stage=$_GET["stage"];} elseif (isset($_POST["stage"])) {$stage=$_POST["stage"];} if (isset($_GET["user_group"])) {$user_group=$_GET["user_group"];} elseif (isset($_POST["user_group"])) {$user_group=$_POST["user_group"];} if (isset($_GET["action"])) {$action=$_GET["action"];} elseif (isset($_POST["action"])) {$action=$_POST["action"];} if (isset($_GET["session_name"])) {$session_name=$_GET["session_name"];} elseif (isset($_POST["session_name"])) {$session_name=$_POST["session_name"];} if (isset($_GET["user"])) {$user=$_GET["user"];} elseif (isset($_POST["user"])) {$user=$_POST["user"];} if (isset($_GET["pass"])) {$pass=$_GET["pass"];} elseif (isset($_POST["pass"])) {$pass=$_POST["pass"];} if (isset($_GET["language_id"])) {$language_id=$_GET["language_id"];} elseif (isset($_POST["language_id"])) {$language_id=$_POST["language_id"];} if (isset($_GET["language_code"])) {$language_code=$_GET["language_code"];} elseif (isset($_POST["language_code"])) {$language_code=$_POST["language_code"];} if (isset($_GET["language_description"])) {$language_description=$_GET["language_description"];} elseif (isset($_POST["language_description"])) {$language_description=$_POST["language_description"];} if (isset($_GET["source_language_id"])) {$source_language_id=$_GET["source_language_id"];} elseif (isset($_POST["source_language_id"])) {$source_language_id=$_POST["source_language_id"];} if (isset($_GET["english_text"])) {$english_text=$_GET["english_text"];} elseif (isset($_POST["english_text"])) {$english_text=$_POST["english_text"];} if (isset($_GET["translated_text"])) {$translated_text=$_GET["translated_text"];} elseif (isset($_POST["translated_text"])) {$translated_text=$_POST["translated_text"];} if (isset($_GET["phrase_id"])) {$phrase_id=$_GET["phrase_id"];} elseif (isset($_POST["phrase_id"])) {$phrase_id=$_POST["phrase_id"];} if (isset($_GET["import_data"])) {$import_data=$_GET["import_data"];} elseif (isset($_POST["import_data"])) {$import_data=$_POST["import_data"];} if (isset($_GET["active"])) {$active=$_GET["active"];} elseif (isset($_POST["active"])) {$active=$_POST["active"];} if (isset($_GET["copy_option"])) {$copy_option=$_GET["copy_option"];} elseif (isset($_POST["copy_option"])) {$copy_option=$_POST["copy_option"];} if (isset($_GET["ConFiRm"])) {$ConFiRm=$_GET["ConFiRm"];} elseif (isset($_POST["ConFiRm"])) {$ConFiRm=$_POST["ConFiRm"];} if (isset($_GET["SUBMIT"])) {$SUBMIT=$_GET["SUBMIT"];} elseif (isset($_POST["SUBMIT"])) {$SUBMIT=$_POST["SUBMIT"];} if ($ADD=='AJAXtranslateSUBMIT') { $PHP_AUTH_USER=$user; $PHP_AUTH_PW=$pass; } else { $PHP_AUTH_USER=$_SERVER['PHP_AUTH_USER']; $PHP_AUTH_PW=$_SERVER['PHP_AUTH_PW']; } $PHP_SELF=$_SERVER['PHP_SELF']; $PHP_SELF = preg_replace('/\.php.*/i','.php',$PHP_SELF); $DB=preg_replace("/[^0-9a-zA-Z]/","",$DB); ############################################# ##### START SYSTEM_SETTINGS LOOKUP ##### $stmt = "SELECT use_non_latin,auto_dial_limit,user_territories_active,allow_custom_dialplan,callcard_enabled,admin_modify_refresh,nocache_admin,webroot_writable,allow_emails,active_modules,sounds_central_control_active,qc_features_active,contacts_enabled,enable_languages,language_method,admin_web_directory,admin_screen_colors,enable_auto_reports,campaign_cid_areacodes_enabled,allow_web_debug FROM system_settings;"; $rslt=mysql_to_mysqli($stmt, $link); #if ($DB) {echo "$stmt\n";} $qm_conf_ct = mysqli_num_rows($rslt); if ($qm_conf_ct > 0) { $row=mysqli_fetch_row($rslt); $non_latin = $row[0]; $SSauto_dial_limit = $row[1]; $SSuser_territories_active = $row[2]; $SSallow_custom_dialplan = $row[3]; $SScallcard_enabled = $row[4]; $SSadmin_modify_refresh = $row[5]; $SSnocache_admin = $row[6]; $SSwebroot_writable = $row[7]; $SSemail_enabled = $row[8]; $SSactive_modules = $row[9]; $sounds_central_control_active =$row[10]; $SSqc_features_active = $row[11]; $SScontacts_enabled = $row[12]; $SSenable_languages = $row[13]; $SSlanguage_method = $row[14]; $SSadmin_web_directory = $row[15]; $SSadmin_screen_colors = $row[16]; $SSenable_auto_reports = $row[17]; $SScampaign_cid_areacodes_enabled = $row[18]; $SSallow_web_debug = $row[19]; } if ($SSallow_web_debug < 1) {$DB=0;} ##### END SETTINGS LOOKUP ##### ########################################### if (strlen($DB) < 1) {$DB=0;} $modify_refresh_set=0; $import_with_missing_periods=1; $gif='.gif'; $DB = preg_replace('/[^0-9]/','',$DB); $rank = preg_replace('/[^0-9]/','',$rank); $level = preg_replace('/[^0-9]/','',$level); $parent_rank = preg_replace('/[^0-9]/','',$parent_rank); $phrase_id = preg_replace('/[^0-9]/','',$phrase_id); $active = preg_replace('/[^NY]/','',$active); $ConFiRm = preg_replace('/[^0-9a-zA-Z]/','',$ConFiRm); $copy_option = preg_replace('/[^_0-9a-zA-Z]/','',$copy_option); $stage = preg_replace('/[^-_0-9a-zA-Z]/', '',$stage); $import_data = preg_replace("/\\\\|;|\r/","",$import_data); $english_text = preg_replace("/\\\\|;|\n|\r/","",$english_text); $translated_text = preg_replace("/\\\\|;|\n|\r/","",$translated_text); $ADD = preg_replace('/[^-_0-9a-zA-Z]/', '',$ADD); $action = preg_replace('/[^-_0-9a-zA-Z]/', '',$action); $session_name = preg_replace('/[^-_0-9a-zA-Z]/', '',$session_name); $SUBMIT = preg_replace('/[^-_0-9a-zA-Z]/', '',$SUBMIT); if ($non_latin < 1) { $PHP_AUTH_USER = preg_replace('/[^-_0-9a-zA-Z]/','',$PHP_AUTH_USER); $PHP_AUTH_PW = preg_replace('/[^-_0-9a-zA-Z]/','',$PHP_AUTH_PW); $user = preg_replace('/[^-_0-9a-zA-Z]/','',$user); $pass = preg_replace('/[^-_0-9a-zA-Z]/','',$pass); $language_id = preg_replace('/[^-_0-9a-zA-Z]/','',$language_id); $source_language_id = preg_replace('/[^-_0-9a-zA-Z]/','',$source_language_id); $language_code = preg_replace('/[^-_0-9a-zA-Z]/','',$language_code); $language_description = preg_replace('/[^- _0-9a-zA-Z]/','',$language_description); $user_group = preg_replace('/[^-_0-9a-zA-Z]/', '',$user_group); } # end of non_latin else { $PHP_AUTH_USER = preg_replace('/[^-_0-9\p{L}]/u', '', $PHP_AUTH_USER); $PHP_AUTH_PW = preg_replace('/[^-_0-9\p{L}]/u', '', $PHP_AUTH_PW); $user = preg_replace('/[^-_0-9\p{L}]/u','',$user); $pass = preg_replace('/[^-_0-9\p{L}]/u','',$pass); $language_id = preg_replace('/[^-_0-9\p{L}]/u','',$language_id); $source_language_id = preg_replace('/[^-_0-9\p{L}]/u','',$source_language_id); $language_code = preg_replace('/[^-_0-9\p{L}]/u','',$language_code); $language_description = preg_replace('/[^- _0-9\p{L}]/u','',$language_description); $user_group = preg_replace('/[^-_0-9\p{L}]/u', '',$user_group); } $STARTtime = date("U"); $TODAY = date("Y-m-d"); $NOW_TIME = date("Y-m-d H:i:s"); $FILE_TIME = date("Ymd-His"); $date = date("r"); $ip = getenv("REMOTE_ADDR"); $browser = getenv("HTTP_USER_AGENT"); if (strlen($user)<2) {$user = $PHP_AUTH_USER;} $US='_'; $DS='-----'; if (file_exists('options.php')) {require('options.php');} $stmt="SELECT selected_language from vicidial_users where user='$PHP_AUTH_USER';"; if ($DB) {echo "|$stmt|\n";} $rslt=mysql_to_mysqli($stmt, $link); $sl_ct = mysqli_num_rows($rslt); if ($sl_ct > 0) { $row=mysqli_fetch_row($rslt); $VUselected_language = $row[0]; } $auth=0; $auth_message = user_authorization($PHP_AUTH_USER,$PHP_AUTH_PW,'',1,0); if ( ($auth_message == 'GOOD') or ($auth_message == '2FA') ) { $auth=1; if ($auth_message == '2FA') { header ("Content-type: text/html; charset=utf-8"); echo _QXZ("Your session is expired").". "._QXZ("Click here to log in").".\n"; exit; } } if ($auth < 1) { $VDdisplayMESSAGE = _QXZ("Login incorrect, please try again"); if ($auth_message == 'LOCK') { $VDdisplayMESSAGE = _QXZ("Too many login attempts, try again in 15 minutes"); Header ("Content-type: text/html; charset=utf-8"); echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$auth_message|\n"; exit; } if ($auth_message == 'IPBLOCK') { $VDdisplayMESSAGE = _QXZ("Your IP Address is not allowed") . ": $ip"; Header ("Content-type: text/html; charset=utf-8"); echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$auth_message|\n"; exit; } Header("WWW-Authenticate: Basic realm=\"CONTACT-CENTER-ADMIN\""); Header("HTTP/1.0 401 Unauthorized"); echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$PHP_AUTH_PW|$auth_message|\n"; exit; } $stmt="SELECT full_name,modify_scripts,user_level,user_group,qc_enabled,modify_languages from vicidial_users where user='$PHP_AUTH_USER';"; if ($DB) {echo "$stmt\n";} $rslt=mysql_to_mysqli($stmt, $link); $row=mysqli_fetch_row($rslt); $LOGfullname = $row[0]; $LOGmodify_scripts = $row[1]; $LOGuser_level = $row[2]; $LOGuser_group = $row[3]; $qc_auth = $row[4]; $modify_languages = $row[5]; $stmt="SELECT allowed_campaigns,allowed_reports,admin_viewable_groups,admin_viewable_call_times from vicidial_user_groups where user_group='$LOGuser_group';"; if ($DB) {echo "$stmt\n";} $rslt=mysql_to_mysqli($stmt, $link); $row=mysqli_fetch_row($rslt); $LOGallowed_campaigns = $row[0]; $LOGallowed_reports = $row[1]; $LOGadmin_viewable_groups = $row[2]; $LOGadmin_viewable_call_times = $row[3]; $SSmenu_background='015B91'; $SSframe_background='D9E6FE'; $SSstd_row1_background='9BB9FB'; $SSstd_row2_background='B9CBFD'; $SSstd_row3_background='8EBCFD'; $SSstd_row4_background='B6D3FC'; $SSstd_row5_background='A3C3D6'; $SSalt_row1_background='BDFFBD'; $SSalt_row2_background='99FF99'; $SSalt_row3_background='CCFFCC'; if ($SSadmin_screen_colors != 'default') { $stmt = "SELECT menu_background,frame_background,std_row1_background,std_row2_background,std_row3_background,std_row4_background,std_row5_background,alt_row1_background,alt_row2_background,alt_row3_background FROM vicidial_screen_colors where colors_id='$SSadmin_screen_colors';"; $rslt=mysql_to_mysqli($stmt, $link); if ($DB) {echo "$stmt\n";} $colors_ct = mysqli_num_rows($rslt); if ($colors_ct > 0) { $row=mysqli_fetch_row($rslt); $SSmenu_background = $row[0]; $SSframe_background = $row[1]; $SSstd_row1_background = $row[2]; $SSstd_row2_background = $row[3]; $SSstd_row3_background = $row[4]; $SSstd_row4_background = $row[5]; $SSstd_row5_background = $row[6]; $SSalt_row1_background = $row[7]; $SSalt_row2_background = $row[8]; $SSalt_row3_background = $row[9]; } } $Mhead_color = $SSstd_row5_background; $Mmain_bgcolor = $SSmenu_background; $Mhead_color = $SSstd_row5_background; ################################################################################ ##### BEGIN update translation from AJAX request processing ##### if ($ADD=='AJAXtranslateSUBMIT') { if ( (strlen($session_name)<2) or (strlen($stage)<3) ) { echo _QXZ("ERROR: incomplete input")."\n"; } else { $phrase_ary = explode('-----',$stage); $language_id = $phrase_ary[1]; $phrase_id = $phrase_ary[2]; $translated_text = addslashes($translated_text); $stmt="SELECT count(*) from vicidial_languages where language_id='$language_id';"; if ($DB) {echo "$stmt\n";} $rslt=mysql_to_mysqli($stmt, $link); $row=mysqli_fetch_row($rslt); if ($row[0] < 1) {echo _QXZ("LANGUAGE ENTRY DOES NOT EXIST").": $language_id";} else { $stmt="SELECT count(*) from vicidial_language_phrases where language_id='$language_id' and phrase_id='$phrase_id';"; if ($DB) {echo "$stmt\n";} $rslt=mysql_to_mysqli($stmt, $link); $row=mysqli_fetch_row($rslt); if ($row[0] < 1) {echo _QXZ("LANGUAGE PHRASE ENTRY DOES NOT EXIST").": $language_id $phrase_id";} else { $stmt="UPDATE vicidial_language_phrases set translated_text='$translated_text',source='$user' where language_id='$language_id' and phrase_id='$phrase_id';"; if ($DB) {echo "$stmt\n";} $rslt=mysql_to_mysqli($stmt, $link); $stmtA="UPDATE vicidial_languages SET modify_date=NOW() where language_id='$language_id';"; if ($DB) {echo "$stmtA\n";} $rslt=mysql_to_mysqli($stmtA, $link); echo _QXZ("LANGUAGE PHRASE ENTRY MODIFIED").": $language_id $phrase_id\n"; ### LOG INSERTION Admin Log Table ### $SQL_log = "$stmt|$stmtA|"; $SQL_log = preg_replace('/;/', '', $SQL_log); $SQL_log = addslashes($SQL_log); $stmt="INSERT INTO vicidial_admin_log set event_date=NOW(), user='$PHP_AUTH_USER', ip_address='$ip', event_section='LANGUAGES', event_type='MODIFY', record_id='$language_id', event_code='ADMIN MODIFY LANGUAGE PHRASE', event_sql=\"$SQL_log\", event_notes='';"; if ($DB) {echo "|$stmt|\n";} $rslt=mysql_to_mysqli($stmt, $link); } } } exit; } ##### END update translation from AJAX request ##### ################################################################################ ###################### # ADD=263411111111 export language phrases ###################### if ($ADD==263411111111) { if ($modify_languages==1) { if ($stage == 'ONLY_UNTRANSLATED') { $TXTfilename = "LANGUAGE_UNTRANSLATED_$language_id$US$FILE_TIME.txt"; $stmt="SELECT english_text,translated_text from vicidial_language_phrases where language_id='$language_id' and ( (translated_text='') or (translated_text is NULL) );"; } elseif ($stage == 'ONLY_TRANSLATED') { $TXTfilename = "LANGUAGE_TRANSLATED_$language_id$US$FILE_TIME.txt"; $stmt="SELECT english_text,translated_text from vicidial_language_phrases where language_id='$language_id' and ( (translated_text!='') and (translated_text is not NULL) );"; } else { $TXTfilename = "LANGUAGE_ALL_$language_id$US$FILE_TIME.txt"; $stmt="SELECT english_text,translated_text from vicidial_language_phrases where language_id='$language_id';"; } // We'll be outputting a TXT file header('Content-type: application/octet-stream'); // It will be called LANGUAGE_101_20141203-121212.txt header("Content-Disposition: attachment; filename=\"$TXTfilename\""); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); ob_clean(); flush(); $rslt=mysql_to_mysqli($stmt, $link); $phrases_to_print = mysqli_num_rows($rslt); $o=0; while ($phrases_to_print > $o) { $row=mysqli_fetch_row($rslt); $english_text = $row[0]; $translated_text = $row[1]; if ($stage == 'ONLY_UNTRANSLATED') {echo "$english_text\n";} else {echo "$english_text|$translated_text||\n";} $o++; } ### LOG INSERTION Admin Log Table ### $SQL_log = "$stmt|$stmtA|"; $SQL_log = preg_replace('/;/', '', $SQL_log); $SQL_log = addslashes($SQL_log); $stmt="INSERT INTO vicidial_admin_log set event_date=NOW(), user='$PHP_AUTH_USER', ip_address='$ip', event_section='LANGUAGES', event_type='EXPORT', record_id='$language_id', event_code='ADMIN EXPORT LANGUAGE PHRASES', event_sql=\"$SQL_log\", event_notes='$TXTfilename|$stage|$o records';"; $rslt=mysql_to_mysqli($stmt, $link); } exit; } ##### END ADD=263411111111 export language phrases ##### ################################################################################ ?>
1) and (preg_match("/^3/",$ADD)) ) { $modify_refresh_set=1; if (preg_match("/^3/",$ADD)) {$modify_url = "$PHP_SELF?$QUERY_STRING";} echo "\n"; } ?>|
- - - - - - - - - - |