LICENSE: AGPLv2
#
# Other scripts that this application depends on:
# - vdc_db_query.php: Updates information in the database
# - manager_send.php: Sends manager actions to the DB for execution
# - conf_exten_check.php: time sync and status updater, calls in queue
# - vdc_script_display.php: displays script with variables
# - vdc_form_display.php: display custom fields form
# - vdc_email_display.php: display email interface
# - vdc_chat_display.php: display chat interface
# - agc_agent_manager_chat_interface.php: display internal chats
#
# CHANGELOG
# 50607-1426 - First Build of VICIDIAL web client basic login process finished
# 50628-1620 - Added some basic formatting and worked on process flow
# 50628-1715 - Startup variables mapped to javascript variables
# 50629-1303 - Added Login Closer in-groups selection box and vla update
# 50629-1530 - Rough layout for customer info form section and button links
# 50630-1453 - Rough Manual Dial/Hangup with customer info displayed
# 50701-1450 - Added vicidial_log entries on dial and hangup
# 50701-1634 - Added Logout function
# 50705-1259 - Added call disposition functionality
# 50705-1432 - Added lead info DB update function
# 50705-1658 - Added web form functionality
# 50706-1043 - Added call park and pickup functions
# 50706-1234 - Added Start/Stop Recording functionality
# 50706-1614 - Added conference channels display option
# 50711-1333 - Removed call check redundancy and fixed a span bug
# 50727-1424 - Added customer channel and participant present sensing/alerts
# 50804-1057 - Added SendDTMF function and reconfigured the transfer span
# 50804-1224 - Added Local and Internal Closer transfer functions
# 50804-1628 - Added Blind transfer, activated LIVE CALL image and fixed bugs
# 50804-1808 - Added button images for left buttons
# 50815-1151 - Added 3Way calling functions to Transfer-conf frame
# 50815-1602 - Added images and buttons for xfer functions
# 50816-1813 - Added basic autodial outbound call pickup functions
# 50817-1113 - Fixes to auto_dialing call receipt
# 50817-1234 - Added inbound call receipt capability
# 50817-1541 - Added customer time display
# 50818-1327 - Added stop-all-recordings-after-each-vicidial-call option
# 50818-1703 - Added pretty login section
# 50825-1200 - Modified form field lengths, added double-click dispositions
# 50831-1603 - Fixed customer time bug and fronter display bug for CLOSER
# 50901-1314 - Fixed CLOSER IN-GROUP Web Form bug
# 50903-0904 - Added preview-lead code for manual dialing
# 50904-0016 - Added ability to hangup manual dials before pickup
# 50906-1319 - Added override for filters on xfer calls, fixed login display bug
# 50909-1243 - Added hotkeys functionality for quick dispoing in auto-dial mode
# 50912-0958 - Modified hotkeys function, agent must have user_level >= 5 to use
# 50913-1212 - Added campaign_cid to 3rd party calls
# 50923-1546 - Modified to work with language translation
# 50926-1656 - Added campaign pull-down at login of active campaigns
# 50928-1633 - Added manual dial alternate number dial option
# 50930-1538 - Added session_id empty login failure and fixed 2 minor bugs
# 51004-1656 - Fixed recording filename bug and new Spanish translation
# 51020-1103 - Added campaign-specific recording control abilities
# 51020-1352 - Added Basic vicidial_agent_log framework
# 51021-1050 - Fixed custtime display and disable Enter/Return keypresses
# 51021-1718 - Allows for multi-line comments (changes \n to !N in database)
# 51110-1432 - Fixed non-standard http port issue
# 51111-1047 - Added vicidial_agent_log lead_id earlier for manual dial
# 51118-1305 - Activate multi-line comments from $multi_line_comments var
# 51118-1313 - Move Transfer DIV to a floating span to preserve 800x600 view
# 51121-1506 - Small PHP optimizations in many scripts and disabled globalize
# 51129-1010 - Added ability to accept calls from other VICIDIAL servers
# 51129-1254 - Fixed Hangups of other agents channels when customer hangs up
# 51208-1732 - Created user-first login that looks for default phone info
# 51219-1526 - Added variable framework for campaign and in-group scripts
# 51221-1200 - Added SCRIPT tab, layout and functionality
# 51221-1714 - Added auto-switch-to-SCRIPT-tab and auto-webform-popup
# 51222-1605 - Added VMail message blind transfer button to xfer-conf frame
# 51229-1028 - Added checks on web_form_address to allow for var in the DB value
# 60117-1312 - Added Transfer-conf frame toggle on button press
# 60208-1152 - Added DTMF-xfernumber preset links to xfer-conf frame
# 60213-1129 - Added vicidial_users.hotkeys_active for any user hotkeys
# 60213-1210 - Added ability to sort routing of calls by user_level
# 60214-0932 - Initial Callback calendar display framework
# 60214-1407 - Added ability to minimize the dispo screen to see info below
# 60215-1104 - Added ANYONE scheduled callbacks functionality
# 60410-1116 - Added persistant pause after dispo option and change dispo text
# - Added web form submit that opens new window with dispo on submit
# - Added PREVIOUS CALLBACK in customer info to flag callbacks
# - Added link to try to hangup the call again in the dispo screen
# - Added link noone-in-session screen to call agent phone again
# - Added link customer-hungup screen to go straight to dispo screen
# 60410-1532 - Added agent status and campaign calls dialing display option
# 60411-1547 - Add ability to set callback as USERONLY and some basic formatting
# 60413-1752 - Add basic USERONLY callback frame and listings
# 60414-1039 - Changed manual dial preview and alt dial checkboxes to spans
# - Added beta-level USERONLY callback functionality
# - Added beta-level manual dialing with lead insertion functionality
# 60415-1534 - Fixed manual dial lead preview and fixed manuald dial override bug
# 60417-1108 - Added capability to do alt-number-dialing in auto-dial mode
# - Changed several permissions to database-defined
# 60419-1529 - Prevent manual dial or callbacks when alt-dial lead not finished
# 60420-1647 - Fixed DiaLDiaLAltPhonE error, Call Agent Again DialControl error
# 60421-1229 - Check GET/POST vars lines with isset to not trigger PHP NOTICES
# 60424-1005 - Fixed Alt phone disabled bug for callbacks and manual dials
# 60426-1058 - Added vicidial_user setting for default blended check for CLOSER
# 60501-1008 - Added option to manual dial screen to manually lookup phone number
# 60503-1653 - Fixed agentonly_callback not-defined bug in scheduled callbacks screen
# 60504-1032 - Fixed manual dial display bug and transfer dispo alert bug
# - Fixed recording filename display to not overrun 25 characters
# 60510-1051 - Added Wrapup timer and wrapup message on wrapup screen after dispo
# 60608-1453 - Added CLOSER campaign allowable in-groups limitations
# 60609-1123 - Added add-number-to-DNC-list function and manual dial check DNC
# 60619-1047 - Added variable filters to close security holes for login form
# 60804-1710 - fixed scheduled CALLBK for other languages build
# 60808-1145 - Added consultative transfers with customer data
# 60808-2232 - Added campaign name to pulldown for login screen
# 60809-1603 - Added option to locally transfer consult xfers
# 60809-1732 - Added recheck of transferred channels before customer gone mesg
# 60810-1011 - Fixed CXFER leave 3way call bugs
# 60816-1602 - Added ALLCALLS recording delay option allcalls_delay
# 60816-1716 - Fixed customer time display bug and client DST setting
# 60821-1555 - Added option to omit phone_code on dialout of leads
# 60821-1628 - Added ALLFORCE recording option
# 60821-1643 - Added no_delete_sessions option to not delete sessions
# 60822-0512 - Changed phone number fields to be maxlength of 12
# 60829-1531 - Made compatible with WeBRooTWritablE setting in dbconnect.php
# 60906-1152 - Added Previous CallBack info display span
# 60906-1715 - Allow for Local phone extension conferences
# 61004-1729 - Add ability to control volume per channel in "calls in this session"
# 61122-1341 - Added vicidial_user_groups allowed_campaigns restrictions
# 61122-1523 - Added more SCRIPT variables
# 61128-2229 - Added vicidial_live_agents and vicidial_auto_calls manual dial entries
# 61130-1617 - Added lead_id to MonitorConf for recording_log
# 61221-1212 - Changed width to 760 to better fit 800x600 screens, widened SCRIPT
# 70109-1128 - Fixed wrapup timer bug
# 70109-1635 - Added option for HotKeys automatically dialing next number in manual mode
# - Added option for alternate number dialing with hotkeys
# 70111-1600 - Added ability to use BLEND/INBND/*_C/*_B/*_I as closer campaigns
# 70118-1517 - Added vicidial_agent_log and vicidial_user_log logging of user_group
# 70201-1249 - Added FAST DIAL option for manually dialing, added UTF8 compatible code
# 70201-1703 - Fixed cursor bug for most text input fields
# 70202-1453 - Added first portions of Agent Pause Codes
# 70203-0108 - Finished Agent Pause Codes functionality
# 70203-0930 - Added dialed_number to webform output
# 70203-1010 - Added dialed_label to webform output
# 70206-1201 - Fixed allow_closers bug
# 70206-1332 - Added vicidial_recording_override users setting function
# 70212-1252 - Fixed small issue with CXFER
# 70213-1018 - Changed CXFER and AXFER to update customer information before transfer
# 70214-1233 - Added queuemetrics_log_id field for server_id in queue_log
# 70215-1240 - Added queuemetrics_log_id field for server_id in queue_log
# 70222-1617 - Changed queue_log PAUSE/UNPAUSE to PAUSEALL/UNPAUSEALL
# 70226-1252 - Added Mute/UnMute to agent screen
# 70309-1035 - Allow amphersands and questions marks in comments to pass through
# 70313-1052 - Allow pound signs(hash) in comments to pass through
# 70316-1406 - Moved the MUTE button to be accessible during a transfer/conf
# 70319-1446 - Added agent-deactive-display and disable customer info update functions
# 70319-1626 - Added option to allow agent logins to campaigns with no leads in the hopper
# 70320-1501 - Added option to allow retry of leave-3way-call from dispo screen
# 70322-1545 - Added sipsak display ability
# 70510-1319 - Added onUnload force Logout
# 70806-1530 - Added Presets Dial links above agent mute button
# 70823-2118 - Fixed XMLHTTPRequest, HotKeys and Scheduled Callbacks issues with MSIE
# 70828-1443 - Added source_id to output of SCRIPTtab-IFRAME and WEBFORM
# 71022-1427 - Added formatting of the customer phone number in the main status bar
# 71029-1848 - Changed CLOSER-type campaign to not use campaign_id restrictions
# 71101-1204 - Fixed bug in callback calendar with DST
# 71116-0957 - Added campaign_weight and calls_today to the vla table insertion
# 71120-1719 - Added XMLHTPRequest lookup of allowable campaigns for agents during login
# 71122-0256 - Added auto-pause notification
# 71125-1751 - Changed Transfer section to allow for selection of in-groups to send calls to
# 71127-0408 - Added height and width settings for easier modification of screen size
# 71129-2025 - restricted callbacks count and list to campaign only
# 71223-0318 - changed logging of closer calls
# 71226-1117 - added option to kick all calls from conference upon logout
# 80109-1510 - added gender select list
# 80116-1032 - added option on CLOSER-type campaigns to change in-groups when paused
# 80317-2106 - added recording override options for inbound group calls
# 80331-1433 - Added second transfer try for VICIDIAL transfers/hangups on manual dial calls
# 80402-0121 - Fixes for manual dial transfers on some systems
# 80407-2112 - Work on adding phone login load balancing across servers
# 80416-0559 - Added ability to log computer_ip at login, set the $PhonESComPIP variable
# 80428-0413 - UTF8 changes and testing
# 80505-0054 - Added multi-phones load-balanced alias option
# 80507-0932 - Fixed Script display bug (+ instead of space)
# 80519-1425 - Added calls in queue display
# 80523-1630 - Added Timeclock links
# 80625-0047 - Added U option for gender, added date/phone display options
# 80630-2210 - Added queue_log entries for Manual Dial
# 80703-0139 - Added alter customer phone permissions
# 80703-1106 - Added API functionality for Hangup and Dispo, added Agent Display Queue Count
# 80707-2325 - Added vicidial_id to recording_log for tracking of vicidial or closer log to recording
# 80709-0358 - Added Default alt phone dial hard-code option
# 80719-1147 - Changed recording and senddtmf conf prefix
# 80815-1014 - Added manual dial list restriction option
# 80823-2123 - Fixed form scroll for IE, added copy to clipboard(IE-only feature)
# 80831-0548 - Added Extended alt-dial-phone display information for non-manual calls
# 80909-1717 - Added support for campaign-specific DNC lists
# 80915-1754 - Rewrote leave-3way functions for external calling
# 81002-1908 - Fixed double-login bug in some conditions
# 81007-0945 - Added three_way_call_cid option for outbound 3way calls
# 81010-1047 - Fixed conf calling prefix to use settings, other 3way improvements
# 81011-1403 - Fixed bugs in leave3way when transferring a manual dial call
# 81012-1729 - Added INBOUND_MAN dial method to allow manual list dialing and inbound calls
# 81013-1644 - Fixed bug in leave 3way for manual dial fronters
# 81015-0405 - Fixed bug related to hangups on 3way calls
# 81016-0703 - Changed leave 3way to allow function at any time transfer-conf is available
# 81020-1501 - Fixed bugs in queue_log logging
# 81023-0411 - Added compatibility for dial-in agents using AGI, bug fixes
# 81030-0403 - Added option to force Pause Codes on PAUSE
# 81103-1427 - Added 3way call dial prefix
# 81104-0140 - Added mysql error logging capability
# 81104-1618 - Changed MySQL queries logging
# 81106-0411 - Changedthe campaign login list behaviour
# 81110-0057 - Changed Pause time to start new vicidial_agent_log on every pause
# 81110-1514 - Added hangup_all_non_reserved to fix non-Hangup bug
# 81119-1811 - webform backslash fix
# 81124-2213 - Fixes blind transfer bug
# 81209-1617 - Added campaign web form target option and web form address variables
# 81211-0422 - Fixed Manual dial agent_log bug
# 90102-1402 - Added time sync check notification
# 90115-0619 - Added ability to send Local Closer to AGENTDIRECT agent_only
# 90120-1719 - Added API pause/resume and number dial functionality
# 90126-2302 - Added Vtiger login option and agent alert option
# 90128-0230 - Added vendor_lead_code to API dial and manuald dial with lookup
# 90202-0148 - Added option to disable BLENDED checkbox
# 90209-0132 - Changed tab images and color scheme
# 90303-1145 - Fixed rare manual dial live hangup bug
# 90304-1333 - Added user-specific web vars option
# 90305-0917 - Added prefix-choice and group-alias options for calls coming from API
# 90307-1736 - Added Shift enforcement and manager override features
# 90315-1009 - Changed revision for new trunk 2.2.0
# 90320-0309 - Fixed agent log bug when using wrapup time
# 90323-1555 - Initial call to agent phone now has campaign callerIDnumber
# 90408-0104 - Added Vtiger callback record ability
# 90508-0727 - Changed to PHP long tags
# 90511-1018 - Added restriction not allowing dialing into agent sessions from manual dial
# 90519-0635 - Fixed manual dial status and logging bug
# 90525-1012 - Fixed transfer issue of auto-received call after manual dial call
# 90529-0741 - Added nophone agent phone login that will not show any empty session alerts
# 90531-0635 - Added option to hide customer phone number
# 90611-1422 - Fixed multiple logging bugs
# 90628-0655 - Added Quick Transfer button and Preset Prepopulate option
# 90705-1400 - Added Agent view sidebar option
# 90706-1432 - Added Agent view transfer selection
# 90709-1649 - Fixed alt-number transfers and dispo variable reset for webform
# 90712-2304 - Added ADD-ALL group selection, view calls in queue, grab call from queue, requeue button
# 90717-0640 - Added dialed_label and dialed_number to script variables
# 90721-1114 - Added rank and owner as vicidial_list fields
# 90726-2012 - Added allow_alerts option
# 90729-0647 - Added agent_display_dialable_leads option
# 90730-0145 - Fixed bugs in re-queue and INBOUND_MAN with blended selected
# 90808-0117 - Fixed manual dial calls today bug, added last_state_change to vicidial_live_agents
# 90812-0046 - Added no-delete-sessions = 1 as default, unused sessions cleared out at timeclock end of day
# 90814-0829 - Moved mute button next to hotkeys button
# 90827-0133 - Reworked Script display code
# 90827-1549 - Added list script override option, original_phone_login variable
# 90831-1456 - Added active_agent_login_server option for servers
# 90908-1038 - Added DEAD call display
# 90909-0921 - Fixed park issues
# 90916-1144 - Added Second web form button, Answering Machine Message change
# 90917-1325 - Fixed script loading bug with customer webform at the same time
# 90920-2108 - Changed web forms to use window.open instead of traditional links(IE7 compatibility issue)
# 90923-1310 - Rolled back last change
# 90928-1955 - Added lead update before closer transfer
# 90930-2243 - Added Territory selection functions
# 91108-2118 - Added QM pause code entry
# 91111-1433 - Fixed Gender pulldown list display for IE, remove links for recording channels in SHOW CHANNELS
# 91123-1801 - Added code for outbound_autodial field
# 91130-2021 - Added code for manager override of in-group selection
# 91204-1638 - Added recording_filename and recording_id script variables and script refresh link
# 91205-2055 - Added CONSULTATIVE checkbox in a redesigned Transfer-Conf frame
# 91206-2020 - Fixed vicidial_agent_log logging bug on logout when not paused
# 91211-1412 - Added User custom variables and CRM login popup
# 91219-0657 - Set pause code automatically on ReQueue and INBOUND_MAN Dial-Next-Number
# 91228-1339 - Added API "fields update" functions and "timer action" functions
# 100103-1250 - Added 3 more conf-presets, list ID override presets and call start/dispo URLs
# 100107-0108 - Added dynamic screen size based on login screen browser dimensions
# 100109-0801 - Added ALTNUM alt number status, fixed alt number dialing from setting
# 100109-1338 - Fixed Manual dial live call detection
# 100116-0709 - Added presets to script and web form variables
# 100123-0954 - changes to AGENTDIRECT selection span
# 100131-2233 - Added functions to allow for a webphone loaded in a separate IFRAME
# 100203-0639 - Fixed logging issues related to INBOUND_MAN dial method
# 100207-1103 - Changed Pause Codes function to allow for multiple pause codes per pause period
# 100220-1040 - Added Call Log View and Customer Info View and fixed HotKeys position
# 100221-1107 - Added Custom CID compatibility
# 100301-1330 - Changed AGENTDIRECT user selection launching to AGENTS link next to number-to-dial field
# 100302-2145 - Added scheduled callbacks alert feature
# 100306-0852 - Added options.php optional file for setting interface options that will survive upgrade
# 100309-0525 - Added queuemetrics_loginout option
# 100313-0053 - Added display options for transfer/conf buttons
# 100315-1148 - fix for rare recording_log uniqueid issue on manual dial calls to same number
# 100317-1301 - Added agent_fullscreen User Group option
# 100327-0901 - fix for manual dial answering machine message
# 100331-1220 - Added human-readable hangup codes for manual dial
# 100401-0019 - Added agent_choose_blended option
# 100413-1349 - Various small logging fixes and extended alt-dial fixes
# 100420-1009 - Added scheduled_callbacks_count option
# 100423-1156 - Added more user logging data and manual_dial_override, blind monitor warnings, uniqueid display and codec features
# 100428-0544 - Added uniqueid display option for PRESERVE
# 100513-0714 - Added options.php option to hide the timeclock link
# 100513-2337 - Changed user_login_first to attempt full login if phone_login/pass are filled in
# 100527-2212 - Added API send_dtmf, transfer_conference and park_call functions
# 100616-1622 - Allowed longer manual dial numbers
# 100622-2209 - Added field labels
# 100625-1118 - Added poor-network-connection-mitigating code
# 100629-1158 - Added initial code for custom list fields
# 100702-1315 - Custom List Fields functionality enabled
# 100712-1441 - Added entry_list_id field to vicidial_list to preserve link to custom fields if any
# 100723-1522 - Added LOCKED options for quick transfer button feature
# 100726-1233 - Added HANGUP, CALLMENU, EXTENSION, IN_GROUP timer actions
# 100803-2324 - Cleanup of URLDecode (issue #375)
# 100811-0810 - Added webphone_url_override option from user Groups
# 100813-0554 - Added Campaign presets
# 100815-1015 - Added manual_dial_prefix campaign option
# 100823-1605 - Added DID variables for webform and scripting
# 100827-1436 - Added webphone dialpad options
# 100902-0046 - Added initial loading screen
# 100902-1349 - Added closecallid, xfercallid, agent_log_id as webform and script variables
# 100908-0955 - Added customer 3way hangup
# 100912-1304 - Changed Dispo screen phone number display to dialed_number
# 100927-1616 - Added custom fields ability to web forms and optimized related code
# 101004-1322 - Added "IVR Park Call" button in agent interface
# 101006-1358 - Raised limits on several dynamic items from the database
# 101008-0356 - Added manual_preview_dial and two new variables for recording filenames
# 101012-1656 - Added scroll command at dispo submission to for scrolling to the top of the screen
# 101024-1639 - Added parked call counter
# 101108-0110 - Added ADDMEMBER option for queue_log
# 101124-0436 - Added manual dial queue and manual dial call time check features
# 101125-2151 - Changed CIDname for 3way calls
# 101128-0102 - Added list webform override options
# 101207-1621 - Added scroll to the top after in-group, pause code, etc... selections, and added focus blur to several functions
# 101208-1210 - Fixed focus/blur coding to work after Dispo
# 101216-1758 - Added the ability to hide fields if the label is set to ---HIDE--- in System Settings
# 101227-1645 - Added dialplan off toggle options, and settings and code changes for top bar webphone
# 110109-1205 - Added queuemetrics_loginout NONE option
# 110112-1254 - Added options.php option for focus/blur/enter functions
# 110129-1050 - Changed to XHTML compliant formatting, issue #444
# 110208-1202 - Made scheduled callbacks notice move when on script/form tabs
# 110212-2206 - Added scheduled callback custom statuses compatibility
# 110215-1412 - Added my_callback_option and per_call_notes options
# 110218-1522 - Added agent_lead_search feature
# 110221-1251 - Changed statuses display to keep track of non-selectable statuses
# 110224-1713 - Added compatibility with QM phone environment logging, QM pause code last call logging and active server twin check
# 110225-1231 - Changed scheduled callbacks list to allow clicking to see lead info without dialing, and separate dial link
# 110303-2321 - Added notice of on-hook phone use, and ability to click 'ring' to call into session, minor queue_log fix
# 110304-1623 - Added callback count notification defer options
# 110310-0331 - Added auto-pause/resume functions in auto-dial mode for pre-call work
# 110310-1627 - Changed most browser alerts to HTML alerts, other bug fixes
# 110322-0923 - Allowed hiding of gender pulldown
# 110413-1244 - Added ALT dialing from scheduled callback list, and other formatting changes
# 110420-1211 - Added web_vars variable
# 110428-1549 - Added use of manual_dial_cid setting
# 110430-1126 - Added ability to use external_dial API function with lead_id and alt_dial options
# 110430-1924 - Added post_phone_time_diff_alert campaign feature
# 110506-1612 - Added custom_3way_button_transfer button feature
# 110510-1637 - Added number validation to custom_3way_button_transfer function
# 110526-1723 - Added webphone_auto_answer option
# 110528-1033 - Added waiting_on_dispo manual dial check
# 110531-2158 - Added callback_days_limit campaign feature
# 110619-2005 - Added disable_dispo_ options
# 110624-2311 - Added screen labels option and status display fields option
# 110626-2234 - Added queuemetrics_pe_phone_append
# 110707-1412 - Added last_inbound_call_time and finish compatibility
# 110713-0048 - Allow for full hiding of the phone number field label
# 110718-1159 - Added logging of skipped leads
# 110719-0854 - Removed debug output and small display alignment changes
# 110723-2308 - Complete hiding of phone numbers in logs when alter phone is set to HIDE
# 110730-2240 - Added option to hide dispo statuses, only to be used with API
# 110802-0122 - Added call_id variable
# 110911-1604 - Added API logout function
# 110916-1514 - Fixed dial timeout to check for dial_timeout setting and greater than 49 seconds
# 110919-1603 - Added Phone login load balancing grouping options
# 111015-2037 - Added contact search functions
# 111018-1528 - Added more contact fields, added code to prevent API transfer duplicates
# 111021-1623 - Fix for rare stuck vac issue with manual alt dial
# 111024-1237 - Added callback_list_calltime option
# 111114-0039 - Added scheduled callback and qm-dispo-code fields to API
# 111202-1444 - Added grade-random next-agent-call options
# 111227-1940 - Added Timer Action for Dx_DIAL_QUIET options
# 120213-2029 - Changed consultative transfer with custom fields behavior for better data updating
# 120223-2119 - Removed logging of good login passwords if webroot writable is enabled
# 120308-1617 - Added compatibility for DAHDI phones using asterisk version for server > 1.4.21.2
# 120403-1204 - Fixed issue with MANUAL dial method hotkeys, added 1 second delay
# 120420-1621 - Forked 2.4 to branches, changing trunk to 2.6
# 120427-1718 - Fixed 3-way logging issue
# 120512-0849 - Added In-Group Manual Dial functions
# 120518-1225 - Added transfer call to answering machine message with hotkey (LTMG or XFTAMM)
# 120810-0056 - Added recording api function
# 120819-1747 - Added vicidial_session_data logging for webphone api function
# 120914-1357 - Added group_alias to transfer_conference function
# 121025-2335 - Do not allow AGENTDIRECT transfers without a user defined
# 121029-0122 - Added pause_after_next_call and owner_populate campaign options
# 121114-1759 - Fixed manual dial lead preview script variable issue
# 121114-1937 - Added INGROUP recording option
# 121116-1407 - Added QC functionality
# 121129-2149 - Corrected hotkeys activation conditions
# 121130-0734 - Fixed call notes amphersand issue #612
# 121206-0634 - Added inbound lead search feature
# 121222-2315 - Added inbound email features
# 130220-1214 - Fixed issue with 3-way call dial timeout
# 130328-0006 - Converted ereg to preg functions
# 130328-0934 - Applied changes from Issue #655
# 130328-1017 - Added validation for agent manual dial permission on DIAL links
# 130402-2250 - Added user_group variable in scripts, forms and webforms
# 130412-1359 - Added SIP message for failed calls
# 130417-1937 - Changed locked agent choose in-group/closer/territories to auto-close
# 130508-2223 - Cleanup for other language builds
# 130508-2307 - Branched 2.7, trunk becomes 2.8
# 130603-2209 - Added login lockout for 15 minutes after 10 failed logins, and other security fixes
# 130615-1125 - Added recording_id to dispo url
# 130625-0841 - Added more user log data on login
# 130705-1439 - Added optional encrypted passwords compatibility
# 130718-0745 - Added recording_filename to dispo_call_url
# 130802-1134 - Changed to PHP mysqli functions
# 130822-0656 - Changed all require to require_once in agc directory for PHP backward compatibility
# 130903-1920 - Added security check for browser window name, see launch.php for more information
# 130925-2119 - Fixed span order issue
# 131007-1348 - Added mrglock_ig_select_ct options.php setting
# 131010-2149 - Added option to allow manual dial by lead_id
# 131208-2331 - Added campaign options for max dead, dispo and pause time. Changed CB blink to CSS
# 131209-1604 - Addded called_count logging
# 131210-1354 - Fixed manual dial CID choice issue with AC-CID settings
# 140107-2034 - Added webserver/url login logging
# 140126-0741 - Added pause code API function
# 140204-1230 - Added check for valid date in call log view
# 140214-1851 - Added preview_dial_action API function
# 140301-2059 - Added API functions options for SEARCH for phone within lead_id and Dial Next Number
# 140302-1018 - Changes to allow for & and + in standard fields
# 140312-2109 - Added CALLID as recording filename variable
# 140403-1731 - Added recording filename API append option
# 140418-0937 - Added max inbound calls feature
# 140423-1728 - Added campaign options manual_dial_search_checkbox and hide_call_log_info
# 140428-1514 - Added pause_type
# 140429-2040 - Added called_count and call notes display option as script and form variables
# 140519-1011 - Fixed calls in this session to not count monitoring channels
# 140521-2147 - Added manual alt dial options and more agent login error messages
# 140609-2246 - Fixed issue with webform2 button after manual alt-dial
# 140612-2152 - branched 2.9 version, raised trunk to 2.10
# 140617-1041 - Fixed issue with non-latin, issue #773
# 140617-2015 - Added vicidial_users wrapup_seconds_override option
# 140621-1557 - Added update_settings call to grab selected user and campaign settings more frequently
# 140623-1710 - Added wrapup_bypass setting
# 140626-0757 - Added wrapup_after_hotkey setting
# 140630-0921 - Added the FSCREEN option to Wrapup message to allow for message only display
# 140703-1658 - Several logging fixes, mostly related to manual dial calls
# 140706-0932 - Added callback_time_24hour for callback setting screen
# 140811-1219 - Changed to use QXZ function for echoing text
# 140822-0900 - Fixed issue with phone alias login
# 140902-0826 - Added callback_active_limit and callback_active_limit_override
# 140918-1606 - Fixed manual dial pause warning issue
# 141105-1153 - Fixed issue with AGENTDIRECT transfers to agents with IDs over 7 characters long
# 141113-1431 - Added admin_test option to allow login on active_agent=N servers
# 141116-1805 - Fixed issue #801
# 141118-1229 - Formatting changes for QXZ output
# 141118-1439 - Added agent_email as webform and script variable
# 141121-1005 - Added new QC and comments campaign options
# 141124-1144 - Added new Callback Comments campaign option
# 141124-2146 - Added show_previous_callback campaign option
# 141124-2217 - Fix for issue #798
# 141124-2234 - Added clear_script campaign option
# 141125-0100 - Added parked_hangup code
# 141125-1235 - Fixed issue with lead info not being updated when Max Dead time is triggered
# 141128-0848 - Code cleanup for QXZ functions
# 141204-1211 - Added more error checking on login
# 141207-1155 - Added pause_trigger to logout to force pause before running logout process
# 141216-1859 - Added agent choose language option
# 141222-2035 - Fix for issue #811
# 141223-2109 - Fix for hide_gender issue
# 141227-1759 - Found missing phrase for QXZ
# 141229-1429 - Changed single-quote QXZ arguments to double-quotes
# 150101-1516 - Updated for 2015
# 150108-1725 - Added more validation for API transfer commands
# 150111-1545 - Added manual_dial_search_filter campaign option(Issue #812)
# 150114-2052 - Added list_name web url variable
# 150117-1445 - Added NAME as status display variable
# 150117-1524 - Changed Pause/Resume buttons to single button(Issue #814)
# 150122-0629 - Fixed issue with double dispo warning, Fixed issue with alt-dial/preview-dial custom form reset
# 150123-1505 - Fixed issue with manual dial hotkey usage and agent logs
# 150129-0828 - Added confirmation if agent tries to leave the page without logging out, issue #821
# 150202-0829 - Reconfigured hotkeys and auto-manual-dial for less delay
# 150203-1331 - Small changes to improve manual dial hotkey use
# 150204-1911 - Changed Manual hotkey auto-manual-dial to a variable delay depending on dispo processing time
# 150210-1225 - Added LOCK options for manual_dial_search_checkbox, fixed missing QXZ tags(issue #827)
# 150212-0034 - Added case-sensitive user validation(issue #682)
# 150218-1356 - Fixes for QXZ enclosed in single-quotes
# 150220-1533 - Fix for leave page confirmation after logout and QXZ fixes
# 150302-0950 - Release of 2.11 stable branch and raising trunk to 2.12
# 150309-0315 - Added custom agent login prompt option
# 150405-1410 - Fixed issue with API dialing and preview
# 150418-2206 - Fixed issue with manual dial with hotkeys in RATIO method, issue #836
# 150428-1735 - Added web form three
# 150522-1254 - Fixed issue #859
# 150608-1126 - Added campaign option to disable the manual dial override field
# 150609-1736 - Added status_display_ingroup option
# 150609-1917 - Added list_description web url variable
# 150610-0940 - Added customer_gone_seconds campaign option
# 150701-1211 - Modified mysqli_error() to mysqli_connect_error() where appropriate
# 150704-0005 - Changed disposubmit to be blocking before resume, Issue #863
# 150712-2045 - Changed dispo call url to operate through a separate AJAX process
# 150723-1741 - Created method for logging agent button/link clicks
# 150725-1744 - Added Agent Display Fields campaign option
# 150727-0908 - Added default_language
# 150808-1439 - Added compatibility for custom fields data option
# 150909-0212 - Fixed MDlogEPOCH variable issue #882
# 150917-0926 - Added dynamic default field maxlengths based on DB schema
# 150923-1952 - Added DID custum fields as web and form variables
# 150928-1205 - Fixed issue with API transfers and dial_override flag
# 151022-0004 - Added audio alert when email arrives, issue #899
# 151028-1458 - Added status groups statuses feature with min/max seconds qualifiers for statuses
# 151119-1925 - Fixed issue with scheduled callbacks and status groups
# 151125-0942 - Fixed manual call only logging bug
# 151212-0922 - Added all chat functionality
# 151218-1200 - Fixes for chat security and language translation
# 151229-2240 - Fixed issue #907, script reload after canceling manual 3way call
# 151229-2331 - Added campaign setting for manual_dial_timeout, Issue #903
# 151230-0911 - Fixed transfer of parked call logging issue #901
# 160101-1131 - Added code to handle routing initiated recordings
# 160104-1237 - Added images for live chat and email, and dead chat
# 160106-2215 - Deactivated several call action buttons while Email/Chat handling
# 160306-1019 - Added more webphone options
# 160326-0941 - Fixed issue #933, variables
# 160326-1001 - Fixed issue #934, phone_login
# 160331-2129 - Fixed missing start and dispo call url variables, issue #938
# 160414-0922 - Added default_phone_code system settings option
# 160420-1342 - Fixed text link overlaps with other languages
# 160428-1826 - Fixed user_authorization bug
# 160706-1438 - Redesign for loading, login and logout screens. Added Screen Colors. Logging of browser width/height
# 160731-1102 - Added option to automatically dial the next number after X seconds in a manual dial mode
# 160901-1728 - Added last_local_call_time display field
# 160915-0955 - Added ---READONLY--- option for most screen labels
# 161019-0031 - Added ---REQUIRED--- option for most screen labels
# 161029-0858 - Added option to park xfer channel
# 161102-1121 - Fixed QM partition problem
# 161106-2221 - Changed to screen colors for main tab logo, other small style changes
# 161117-1532 - Changed default main screen logo background color to white(screen color standard row 5)
# 161126-2152 - Release of 2.13 stable branch and raising trunk to 2.14
# 161217-0826 - Added debug logging of dead call trigger
# 161222-0727 - Fixed issue with Scheduled Callbacks with tilde'~' in text fields
# 161222-1111 - Added more debug logging of events
# 170201-2215 - Fixes for pause-while-call-coming-in issues
# 170207-1314 - Added user option api_only_user
# 170217-1359 - Added dead_to_dispo campaign option
# 170220-1306 - Added external_lead_id trigger for switch_lead API function
# 170223-2122 - Fixed rare recording issue
# 170301-0839 - Added functionality for required custom fields
# 170303-1206 - Expanded required custom fields types
# 170309-0705 - Small fix for INBOUND_MAN agent logging issue
# 170309-1215 - Added agent_xfer_validation option
# 170317-2342 - Fix for script tab ignore list script override
# 170331-2255 - Assure that custom field form submitted after standard field submit
# 170409-1601 - Added IP List validation code
# 170411-1158 - Added called_count as a webform variable
# 170416-1640 - Added ready_max_logout option
# 170429-0851 - Added callback_display_days option
# 170430-1005 - Added three_way_record_stop and hangup_xfer_record_start campaign options
# 170513-1527 - Added debug logging of all alert boxes
# 170531-0937 - Added Agent Events Push function
# 170601-2017 - Added more agent events
# 170609-1711 - Added 'commit' function to force immediate submission of Customer Information changes to database
# 170629-1831 - Added some new agent_events entries
# 170709-1116 - Added Xfer Hung Up notification
# 170710-1802 - Added logging of clicks on webform buttons
# 170725-2147 - Added counter(aec) to agent_events calls
# 170808-1014 - Added more qualifiers for Hungup Xfer function to be triggered
# 170816-2336 - Added ask post-call survey feature for in-group calls
# 170912-1619 - Fix for no-hopper dnc dialing issue
# 170913-1747 - Small change for two agent events
# 170914-0708 - Fix for script tab issue
# 170923-1336 - Small change to hangup customer process
# 171011-1524 - Added webphone_layout options
# 171026-0109 - Small change for email queue_log logging
# 171115-0713 - Hide preview call if preview campaign option is disabled
# 171124-1057 - Added max_inbound_calls_outcome options
# 171124-1459 - Added manual_auto_next_options options
# 171126-1140 - Added ability to use EMAILinbound_message script variable
# 171130-0226 - Added agent_screen_time_display option
# 171214-2018 - Added PREVIEW_ get_call_launch options
# 171224-1244 - Added List default_xfer_group override
# 180105-1543 - Small javascript fixes, and more debug logging, change to 2018
# 180126-0855 - Added more agent api pause debug output
# 180204-2304 - Added API dial_ingroup option to external_dial
# 180210-0001 - Added flag for WebRTC webphone compatibility in iframe
# 180215-1105 - Changes for CID Groups functionality
# 180216-1349 - Fix for callback alt dial isssue #1066
# 180217-0915 - Added pause_max_dispo, fix for issue #1030
# 180223-1150 - Fix for rare webform VAR url issue
# 180224-1433 - Added LOGINvar variables, and options.php $INSERT_ variables
# 180302-1704 - Fix for pause code issue
# 180306-1717 - Added script_top_dispo feature
# 180314-2222 - Fix for lead search screen hidden fields, issue #1079
# 180323-2228 - Added more logging for notices
# 180327-1355 - Added code for LOCALFQDN conversion to browser-used server URL for webform and script iframes
# 180405-0913 - Fix for API Hangup after dial timeout
# 180410-1629 - Added Pause Code manager approval feature, Added switch_lead logging
# 180421-0754 - Moved AGENT TIME link and Dialable Leads display to not overlap
# 180425-2036 - Added INSERT_first_onload variable
# 180506-2222 - Added SWITCH custom field type
# 180512-2226 - Added support for users-max_hopper_calls feature
# 180522-1921 - Added Routing Initiated Recording ability for manual dial calls
# 180606-0024 - Fixed email transfers bugs, modified transfer-conf panel for same
# 180610-2305 - Added dead_trigger_ features
# 180727-2044 - Small fix for pause code issue
# 180807-1703 - Added agent_logout_link credentials system setting
# 180809-1649 - Added scheduled_callbacks_force_dial campaign feature
# 180827-1224 - Added scheduled_callbacks_timezones_... features
# 180924-0002 - Added three_way_volume_buttons campaign feature
# 180926-1757 - Fix for rare webform URL issue
# 181003-1737 - Added external_web_socket_url option
# 181005-1909 - Added SYSTEM manual_dial_filter option
# 190108-0833 - Added manual_dial_validation option, updated dates for 2019
# 190222-1316 - Added recent session per-call logging
# 190310-2017 - Added mute_recordings system/campaign/user option
# 190330-0815 - Added logged_in_refresh_link option
# 190406-1615 - Added agent next_dial_my_callbacks override
# 190529-2144 - Fix for shift enforcement dispo-call-url issue
# 190617-1116 - Fix for script variable issue
# 190627-2134 - Added new options for campaign agent_screen_time_display feature
# 190723-1655 - Fix for script tab custom fields
# 190730-0925 - Added campaign SIP Actions processing
# 190901-0956 - Added cid_choice option to API transfer_conference function
# 190902-0914 - Fix for PHP 7.2
# 190925-1346 - Changes for more SIP Event Action features
# 191018-0904 - Added User Inbound Filtered features
# 191101-1150 - Added VM Message Groups features, second script tab
# 191104-1759 - Fixes for translations
# 191105-0824 - Fix for issue #1177
# 191107-0935 - Added $webphone_call_seconds option
# 191107-1011 - Fix for issue #1180, hide phone number in callback list
# 191111-0837 - Added LTMGAD/XAMMAD Hotkey options
# 191111-1619 - Added user additional status groups
# 191114-0949 - Added options for enable_first_webform and recording_buttons
# 191227-1227 - Fix for translation phrases gathering process
# 200123-1554 - PHP7 fix for array
# 200310-1116 - Added manual_dial_cid AGENT_PHONE_OVERRIDE option
# 200403-1539 - Added Manual Dial API outbound_cid function
# 200406-0949 - Fix for manual dial box with no phone number, Issue #1188
# 200406-1205 - Fix for gender custom field population, Issue #1205
# 200407-1822 - Added Agent Browser Call Alert Sounds
# 200408-0952 - Small fix for Issue #1188, allow dial override
# 200425-0948 - Added 2nd option for agentcall_manual to disable FAST DIAL
# 200512-1005 - Added hide_relogin_fields URL variable feature
# 200515-1352 - Disable volume controls for Asterisk 13 servers, added options.php override setting(ast13_volume_override)
# 200524-1021 - Fix for agentchannel not populating while volumecontrol_active disabled
# 200528-2239 - Added three_way_record_stop_exception campaign setting
# 200909-0952 - Fix for script_top_dispo issue #1228
# 200912-1426 - Added more get_call_launch PREVIEW_ options
# 200913-0817 - Added UNSELECTED options for campaign alt_number_dialing
# 200922-0948 - Added manual_dial_phone_strip system setting feature
# 201004-1112 - Added pause_max_exceptions campaign feature
# 201010-2223 - Added force change password feature
# 201026-0143 - Fix for pause_max_exceptions issue
# 201107-2236 - Change for parked call logging
# 201112-1110 - Added better QueueMetrics misconfiguration error handling
# 201117-0818 - Changes for better compatibility with non-latin data input
# 201123-1436 - Added Daily call count limit features
# 201201-2015 - Added transfer_button_launch feature
# 210222-0819 - Fixes for manual dial agent-state issues and a translation issue
# 210312-1520 - Force clearing of webphone panel upon logout
# 210315-2102 - Added CALLBACK manual dial filter option, Issue #1139
# 210317-1207 - Fixes for better consistency in password change process, Issue #1261
# 210318-0236 - Added agent browser visibility logging and Agent Hidden Browser Sounds
# 210319-1500 - Small change for agent screen visibility logging on logout
# 210320-2348 - Added additional update_fields options: scriptreload,script2reload
# 210322-1301 - Fixed issue with agent_hidden_sound
# 210324-1604 - Added leave_3way_start_recording campaign options
# 210327-2058 - Added system setting(agent_screen_timer) for selection of JavaScript timer: setTimeout or EventSource
# 210330-2254 - Fixed issues with dashes as custom fields values throwing off delimiters
# 210417-1109 - Added calls_waiting_vl_ campaign options
# 210421-2110 - Added more screen labels
# 210606-0955 - Cleanup of debugbottomspan, testing of TILTX features
# 210609-0942 - Added in_man_dial_next_ready_seconds campaign options
# 210615-0959 - Default security fix, CVE-2021-28854
# 210616-1852 - Added optional CORS support, see options.php for details
# 210623-0912 - Fix for Leave 3-Way Start Recording issue
# 210623-0930 - Fix for WebForm 3 after API update fields issue
# 210702-0945 - Added transfer_no_dispo campaign setting
# 210705-0949 - Fixes for a couple of small issues(script two, manual dial ready timer)
# 210705-1038 - Added User override for campaign manual_dial_filter setting
# 210705-1626 - Added user_pass_webform and phone_login_webform options.php settings
# 210706-0114 - Added display of Call Time Holidays to the Scheduled Callbacks calendar
# 210715-1215 - Added 24-Hour Call Count Limit features
# 210719-0907 - Added new state override options for 24-Hour Call Count Limits
# 210720-0850 - Fixes for inconsistent hangup_xfer_record_start behavior
# 210913-0831 - Fix for alternate number auto-dial logging issues
# 211223-0824 - Fix for API hangup post-call survey issue #1338
# 211223-0906 - Fix for API transfer if AGENTDIRECT selected, issue #1330
# 220128-0030 - Added more logging of dial alerts, force PauseCode MDSKIP when skipping previewed lead
# 220212-0813 - Added pause_max_url triggering
# 220217-1938 - Added agent_hide_hangup campaign feature
# 220219-0133 - Added allow_web_debug system setting
# 220303-2018 - Changes to some input variable filters
# 220309-2215 - Fix for issue with pausing when calling agent phone again while already paused
# 220310-0935 - Added more time-sync detailed logging
# 220506-0902 - Added ig_xfer_list_sort campaign setting
# 220510-1625 - Added script_tab_frame_size campaign setting
# 220518-2209 - Small fix for encrypted auth
# 220524-1846 - Fix for rare Dead audio trigger and blind monitor trigger issue #1361
# 220623-0911 - Added max_logged_in_agents campaign setting and list dial_prefix override
# 220725-0839 - Fix for rare Agent Pause Max issue with previewed manual dial calls that don't answer
# 220901-0853 - Added user_group_script campaign user_group_script option
# 220901-1330 - Fix for issues with manager validation where manager has a long password
# 220908-0819 - Small change for user_group_script override
# 220916-0906 - Added INSERT_before_body_close options.php setting, Issue #1375
# 220922-1032 - Fix for loading internal chat while agent screen is still loading
# 221012-1723 - Fix for webform URLs updates with correct recording variables
# 221020-1651 - Added login_kickall system setting
# 221021-1022 - Added webphone_settings phones option
# 221112-1638 - Fix for dispo timer issue #1387
# 221116-1059 - Fix for long in-group dialstring extensions
# 221116-2159 - Fix for recording buttons ALLFORCE issue #1389
# 221206-1520 - Added login form multi-submit prevention ($login_submit_once), Added dialRegExten_enabled webphone option
# 230118-0947 - Added agent_hangup_route features
# 230131-0826 - Added filtering of 3-way number to dial to remove non-diable characters
# 230220-1802 - Fix for In-Group manual dial issue
# 230304-0806 - Fix for AgentHangupCallRoute on ringing calls
# 230306-1335 - Added 20Hz_tone browser sound, Issue #1448
# 230306-2034 - Added setTimeoutAudioLoop agent_screen_timer option, Issue #1448
# 230407-1839 - Fix for input variable filter issue
# 230412-1018 - Added code for send_notification API function
# 230418-1425 - Added vicidial_user_dial_log logging
# 230420-2015 - Added latency calculation and logging, Issue #1457
# 230424-1754 - Changed phone login to readonly when password is forced to change
# 230513-2010 - Fix for manual dial call error handling
# 230518-0912 - Added in-group and campaign custom fields 1-5, for script/webform/dispo-call-url use, chat fixes
# 230523-0826 - Added User inbound_credits feature
# 230615-0842 - Added dead_stop_recording feature
# 230810-1652 - Added force_per_call_notes campaign setting
# 230927-2036 - Added agent_search_ingroup_list campaign and agent_search_list ingroup options
# 231108-0820 - Added several fields to update_settings related to manual dial calls
# 231109-0827 - Added 2FA for agent screen logins
# 231115-1618 - Added default_consultative options.php setting
# 231129-0952 - Added phone number daily call limits
# 231129-1359 - Fix for Dial-In-Group user-group issue #1493
# 231129-1540 - Added refresh_panel agent API function
# 240214-0400 - Added state_descriptions banners
# 240220-0245 - Added daily_limit for user/in-group parameter
# 240221-0317 - Small changes for state_descriptions Banner
# 240322-0034 - Added input filtering
# 240409-2053 - Fix for Dead Trigger issue
# 240415-1852 - Added script_tab_height campaign option
# 240416-1750 - Fix for HotKey issue #1518
# 240420-2228 - ConfBridge code added
# 240429-2237 - Added PARK_XFER|GRAB_XFER options for park_call API function
# 240624-1357 - Added SWAP_PARK_CUSTOMER|SWAP_PARK_XFER|HANGUP_XFER_GRAB_CUSTOMER options for park_call API function
# 240627-1937 - Added leave_3way_stop_recording campaign option
# 240630-0920 - Fix for Group Alias issue #1515
# 240830-1112 - Added campaign manual_minimum_... settings
# 250207-1821 - Fix for JavaScript error if chat disabled
# 250326-2032 - Added agent_hide_dial_fail system_setting
# 250806-0859 - Added manual_dial_lead_id 'ONLY' option and user override setting
# 250808-1322 - Added agent_man_dial_filter & agent_3way_dial_filter system settings
# 250916-2055 - Added stereo recording features
# 250924-0953 - Added Talk Seconds URLs features
# 251002-1353 - Added call_count_limit_restrict campaign option
# 251020-0849 - Added code for recording_dtmf_muting, fix for Stereo Call Recording
# 251124-0936 - Added lead status display for callbacks list
# 260106-1418 - Fixes for PHP8
#
$version = '2.14-720c';
$build = '260106-1418';
$php_script = 'vicidial.php';
$mel=1; # Mysql Error Log enabled = 1
$mysql_log_count=108;
$one_mysql_log=0;
$DB=0;
$conf_table = "vicidial_conferences";
require_once("dbconnect_mysqli.php");
require_once("functions.php");
if (isset($_GET["DB"])) {$DB=$_GET["DB"];}
elseif (isset($_POST["DB"])) {$DB=$_POST["DB"];}
if (isset($_GET["JS_browser_width"])) {$JS_browser_width=$_GET["JS_browser_width"];}
elseif (isset($_POST["JS_browser_width"])) {$JS_browser_width=$_POST["JS_browser_width"];}
if (isset($_GET["JS_browser_height"])) {$JS_browser_height=$_GET["JS_browser_height"];}
elseif (isset($_POST["JS_browser_height"])) {$JS_browser_height=$_POST["JS_browser_height"];}
if (isset($_GET["phone_login"])) {$phone_login=$_GET["phone_login"];}
elseif (isset($_POST["phone_login"])) {$phone_login=$_POST["phone_login"];}
if (isset($_GET["phone_pass"])) {$phone_pass=$_GET["phone_pass"];}
elseif (isset($_POST["phone_pass"])) {$phone_pass=$_POST["phone_pass"];}
if (isset($_GET["VD_login"])) {$VD_login=$_GET["VD_login"];}
elseif (isset($_POST["VD_login"])) {$VD_login=$_POST["VD_login"];}
if (isset($_GET["VD_pass"])) {$VD_pass=$_GET["VD_pass"];}
elseif (isset($_POST["VD_pass"])) {$VD_pass=$_POST["VD_pass"];}
if (isset($_GET["VD_campaign"])) {$VD_campaign=$_GET["VD_campaign"];}
elseif (isset($_POST["VD_campaign"])) {$VD_campaign=$_POST["VD_campaign"];}
if (isset($_GET["VD_language"])) {$VD_language=$_GET["VD_language"];}
elseif (isset($_POST["VD_language"])) {$VD_language=$_POST["VD_language"];}
if (isset($_GET["relogin"])) {$relogin=$_GET["relogin"];}
elseif (isset($_POST["relogin"])) {$relogin=$_POST["relogin"];}
if (isset($_GET["MGR_override"])) {$MGR_override=$_GET["MGR_override"];}
elseif (isset($_POST["MGR_override"])) {$MGR_override=$_POST["MGR_override"];}
if (isset($_GET["admin_test"])) {$admin_test=$_GET["admin_test"];}
elseif (isset($_POST["admin_test"])) {$admin_test=$_POST["admin_test"];}
if (isset($_GET["LOGINvarONE"])) {$LOGINvarONE=$_GET["LOGINvarONE"];}
elseif (isset($_POST["LOGINvarONE"])) {$LOGINvarONE=$_POST["LOGINvarONE"];}
if (isset($_GET["LOGINvarTWO"])) {$LOGINvarTWO=$_GET["LOGINvarTWO"];}
elseif (isset($_POST["LOGINvarTWO"])) {$LOGINvarTWO=$_POST["LOGINvarTWO"];}
if (isset($_GET["LOGINvarTHREE"])) {$LOGINvarTHREE=$_GET["LOGINvarTHREE"];}
elseif (isset($_POST["LOGINvarTHREE"])) {$LOGINvarTHREE=$_POST["LOGINvarTHREE"];}
if (isset($_GET["LOGINvarFOUR"])) {$LOGINvarFOUR=$_GET["LOGINvarFOUR"];}
elseif (isset($_POST["LOGINvarFOUR"])) {$LOGINvarFOUR=$_POST["LOGINvarFOUR"];}
if (isset($_GET["LOGINvarFIVE"])) {$LOGINvarFIVE=$_GET["LOGINvarFIVE"];}
elseif (isset($_POST["LOGINvarFIVE"])) {$LOGINvarFIVE=$_POST["LOGINvarFIVE"];}
if (isset($_GET["hide_relogin_fields"])) {$hide_relogin_fields=$_GET["hide_relogin_fields"];}
elseif (isset($_POST["hide_relogin_fields"])) {$hide_relogin_fields=$_POST["hide_relogin_fields"];}
if (isset($_GET["set_pass"])) {$set_pass=$_GET["set_pass"];}
elseif (isset($_POST["set_pass"])) {$set_pass=$_POST["set_pass"];}
if (isset($_GET["new_pass1"])) {$new_pass1=$_GET["new_pass1"];}
elseif (isset($_POST["new_pass1"])) {$new_pass1=$_POST["new_pass1"];}
if (isset($_GET["new_pass2"])) {$new_pass2=$_GET["new_pass2"];}
elseif (isset($_POST["new_pass2"])) {$new_pass2=$_POST["new_pass2"];}
if (isset($_GET["stage"])) {$stage=$_GET["stage"];}
elseif (isset($_POST["stage"])) {$stage=$_POST["stage"];}
if (isset($_GET["rank"])) {$rank=$_GET["rank"];}
elseif (isset($_POST["rank"])) {$rank=$_POST["rank"];}
if (isset($_GET["auth_entry"])) {$auth_entry=$_GET["auth_entry"];}
elseif (isset($_POST["auth_entry"])) {$auth_entry=$_POST["auth_entry"];}
if (!isset($phone_login))
{
if (isset($_GET["pl"])) {$phone_login=$_GET["pl"];}
elseif (isset($_POST["pl"])) {$phone_login=$_POST["pl"];}
}
if (!isset($phone_pass))
{
if (isset($_GET["pp"])) {$phone_pass=$_GET["pp"];}
elseif (isset($_POST["pp"])) {$phone_pass=$_POST["pp"];}
}
if (isset($VD_campaign))
{
$VD_campaign = mb_strtoupper($VD_campaign,'utf-8');
$VD_campaign = preg_replace("/\s/i",'',$VD_campaign);
}
if (!isset($flag_channels))
{
$flag_channels=0;
$flag_string='';
}
$DB=preg_replace("/[^0-9a-z]/","",$DB);
$VD_login = preg_replace('/[^-_0-9\p{L}]/u','',$VD_login);
$stage = preg_replace('/[^-_0-9\p{L}]/u','',$stage);
$rank = preg_replace('/[^-_0-9\p{L}]/u','',$rank);
$auth_entry = preg_replace('/[^-_0-9\p{L}]/u','',$auth_entry);
$forever_stop=0;
$isdst = date("I");
$StarTtimE = date("U");
$NOW_TIME = date("Y-m-d H:i:s");
$NOW_DATE = date("Y-m-d");
$tsNOW_TIME = date("YmdHis");
$FILE_TIME = date("Ymd-His");
$loginDATE = date("Ymd");
$CIDdate = date("ymdHis");
$month_old = mktime(11, 0, 0, date("m"), date("d")-2, date("Y"));
$past_month_date = date("Y-m-d H:i:s",$month_old);
$minutes_old = mktime(date("H"), date("i")-2, date("s"), date("m"), date("d"), date("Y"));
$past_minutes_date = date("Y-m-d H:i:s",$minutes_old);
$JS_date = $StarTtimE."000"; # milliseconds since epoch or "16,3,31,8,56,1,0" year,month,day,hour,minute,second,millisecond
$webphone_width = 460;
$webphone_height = 500;
$VUselected_language = '';
$session_name='';
$server_ip='';
$random = (rand(1000000, 9999999) + 10000000);
#############################################
##### START SYSTEM_SETTINGS AND USER LANGUAGE LOOKUP #####
$stmt = "SELECT use_non_latin,vdc_header_date_format,vdc_customer_date_format,vdc_header_phone_format,webroot_writable,timeclock_end_of_day,vtiger_url,enable_vtiger_integration,outbound_autodial_active,enable_second_webform,user_territories_active,static_agent_url,custom_fields_enabled,pllb_grouping_limit,qc_features_active,allow_emails,callback_time_24hour,enable_languages,language_method,meetme_enter_login_filename,meetme_enter_leave3way_filename,enable_third_webform,default_language,active_modules,allow_chats,chat_url,default_phone_code,agent_screen_colors,manual_auto_next,agent_xfer_park_3way,admin_web_directory,agent_script,agent_push_events,agent_push_url,agent_logout_link,agentonly_callback_campaign_lock,manual_dial_validation,mute_recordings,enable_second_script,enable_first_webform,recording_buttons,outbound_cid_any,browser_call_alerts,manual_dial_phone_strip,require_password_length,pass_hash_enabled,agent_hidden_sound_seconds,agent_hidden_sound,agent_hidden_sound_volume,agent_screen_timer,agent_hide_hangup,allow_web_debug,max_logged_in_agents,login_kickall,agent_notifications,inbound_credits,two_factor_auth_agent_hours,two_factor_container,sip_event_logging,stereo_recording,agent_hide_dial_fail,agent_man_dial_filter,agent_3way_dial_filter,recording_dtmf_detection,recording_dtmf_muting FROM system_settings;";
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'01001',$VD_login,$server_ip,$session_name,$one_mysql_log);}
#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];
$vdc_header_date_format = $row[1];
$vdc_customer_date_format = $row[2];
$vdc_header_phone_format = $row[3];
$WeBRooTWritablE = $row[4];
$timeclock_end_of_day = $row[5];
$vtiger_url = $row[6];
$enable_vtiger_integration = $row[7];
$outbound_autodial_active = $row[8];
$enable_second_webform = $row[9];
$user_territories_active = $row[10];
$static_agent_url = $row[11];
$custom_fields_enabled = $row[12];
$SSpllb_grouping_limit = $row[13];
$qc_enabled = $row[14];
$email_enabled = $row[15];
$callback_time_24hour = $row[16];
$SSenable_languages = $row[17];
$SSlanguage_method = $row[18];
$meetme_enter_login_filename = $row[19];
$meetme_enter_leave3way_filename = $row[20];
$enable_third_webform = $row[21];
$default_language = $row[22];
$active_modules = $row[23];
$chat_enabled = $row[24];
$chat_URL = $row[25];
$default_phone_code = $row[26];
$agent_screen_colors = $row[27];
$SSmanual_auto_next = $row[28];
$SSagent_xfer_park_3way = $row[29];
$admin_web_directory = $row[30];
$SSagent_script = $row[31];
$agent_push_events = $row[32];
$agent_push_url = $row[33];
$agent_logout_link = $row[34];
$agentonly_callback_campaign_lock = $row[35];
$SSmanual_dial_validation = $row[36];
$SSmute_recordings = $row[37];
$SSenable_second_script = $row[38];
$SSenable_first_webform = $row[39];
$SSrecording_buttons = $row[40];
$SSoutbound_cid_any = $row[41];
$SSbrowser_call_alerts = $row[42];
$SSmanual_dial_phone_strip = $row[43];
$SSrequire_password_length = $row[44];
$SSpass_hash_enabled = $row[45];
$SSagent_hidden_sound_seconds = $row[46];
$SSagent_hidden_sound = $row[47];
$SSagent_hidden_sound_volume = $row[48];
$SSagent_screen_timer = $row[49];
$SSagent_hide_hangup = $row[50];
$SSallow_web_debug = $row[51];
$SSmax_logged_in_agents = $row[52];
$SSlogin_kickall = $row[53];
$SSagent_notifications = $row[54];
$SSinbound_credits = $row[55];
$SStwo_factor_auth_hours = $row[56];
$SStwo_factor_container = $row[57];
$SSsip_event_logging = $row[58];
$SSstereo_recording = $row[59];
$SSagent_hide_dial_fail = $row[60];
$SSagent_man_dial_filter = $row[61];
$SSagent_3way_dial_filter = $row[62];
$SSrecording_dtmf_detection = $row[63];
$SSrecording_dtmf_muting = $row[64];
if ( ($SSagent_hidden_sound == '---NONE---') or ($SSagent_hidden_sound == '') ) {$SSagent_hidden_sound_seconds=0;}
}
else
{
echo _QXZ("ERROR: System Settings missing")."\n";
exit;
}
if ($SSallow_web_debug < 1) {$DB=0;}
$stmt="SELECT user,selected_language,force_change_password from vicidial_users where user='$VD_login';";
if ($DB) {echo "|$stmt|\n";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'01081',$VD_login,$server_ip,$session_name,$one_mysql_log);}
$sl_ct = mysqli_num_rows($rslt);
if ($sl_ct > 0)
{
$row=mysqli_fetch_row($rslt);
$VUuser = $row[0];
$VUselected_language = $row[1];
$VUforce_change_password = $row[2];
}
##### END SETTINGS LOOKUP #####
###########################################
$VD_login=preg_replace("/\<|\>|\'|\"|\\\\|;| /","",$VD_login);
$VD_pass=preg_replace("/\<|\>|\'|\"|\\\\|;| /","",$VD_pass);
$VD_language = preg_replace("/\<|\>|\'|\"|\\\\|;| /","",$VD_language);
$set_pass=preg_replace("/\<|\>|\'|\"|\\\\|;| /","",$set_pass);
$new_pass1=preg_replace("/\<|\>|\'|\"|\\\\|;| /","",$new_pass1);
$new_pass2=preg_replace("/\<|\>|\'|\"|\\\\|;| /","",$new_pass2);
$JS_browser_width=preg_replace("/[^0-9a-z]/","",$JS_browser_width);
$JS_browser_height=preg_replace("/[^0-9a-z]/","",$JS_browser_height);
$relogin=preg_replace("/[^0-9a-zA-Z]/","",$relogin);
$MGR_override=preg_replace("/[^0-9a-zA-Z]/","",$MGR_override);
if ($non_latin < 1)
{
$VD_login=preg_replace("/[^-_0-9a-zA-Z]/","",$VD_login);
$VD_pass=preg_replace("/[^-\.\+\/\=_0-9a-zA-Z]/","",$VD_pass);
$new_pass1=preg_replace("/[^-_0-9a-zA-Z]/","",$new_pass1);
$new_pass2=preg_replace("/[^-_0-9a-zA-Z]/","",$new_pass2);
$phone_login=preg_replace("/[^\,0-9a-zA-Z]/","",$phone_login);
$phone_pass=preg_replace("/[^-_0-9a-zA-Z]/","",$phone_pass);
$VD_campaign = preg_replace("/[^-_0-9a-zA-Z]/","",$VD_campaign);
$admin_test = preg_replace("/[^0-9a-zA-Z]/","",$admin_test);
$LOGINvarONE=preg_replace("/[^-_0-9a-zA-Z]/","",$LOGINvarONE);
$LOGINvarTWO=preg_replace("/[^-_0-9a-zA-Z]/","",$LOGINvarTWO);
$LOGINvarTHREE=preg_replace("/[^-_0-9a-zA-Z]/","",$LOGINvarTHREE);
$LOGINvarFOUR=preg_replace("/[^-_0-9a-zA-Z]/","",$LOGINvarFOUR);
$LOGINvarFIVE=preg_replace("/[^-_0-9a-zA-Z]/","",$LOGINvarFIVE);
$hide_relogin_fields=preg_replace("/[^-_0-9a-zA-Z]/","",$hide_relogin_fields);
}
else
{
$VD_login = preg_replace('/[^-_0-9\p{L}]/u','',$VD_login);
$VD_pass = preg_replace('/[^-\.\+\/\=_0-9\p{L}]/u','',$VD_pass);
$new_pass1=preg_replace("/[^-_0-9\p{L}]/u","",$new_pass1);
$new_pass2=preg_replace("/[^-_0-9\p{L}]/u","",$new_pass2);
$phone_login=preg_replace("/[^\,0-9\p{L}]/u","",$phone_login);
$phone_pass=preg_replace("/[^-_0-9\p{L}]/u","",$phone_pass);
$VD_campaign = preg_replace("/[^-_0-9\p{L}]/u","",$VD_campaign);
$admin_test = preg_replace("/[^0-9\p{L}]/u","",$admin_test);
$LOGINvarONE=preg_replace("/[^-_0-9\p{L}]/u","",$LOGINvarONE);
$LOGINvarTWO=preg_replace("/[^-_0-9\p{L}]/u","",$LOGINvarTWO);
$LOGINvarTHREE=preg_replace("/[^-_0-9\p{L}]/u","",$LOGINvarTHREE);
$LOGINvarFOUR=preg_replace("/[^-_0-9\p{L}]/u","",$LOGINvarFOUR);
$LOGINvarFIVE=preg_replace("/[^-_0-9\p{L}]/u","",$LOGINvarFIVE);
$hide_relogin_fields=preg_replace("/[^-_0-9\p{L}]/u","",$hide_relogin_fields);
}
if ($force_logout)
{
echo _QXZ("You have now logged out. Thank you")."\n";
exit;
}
##### DEFINABLE SETTINGS AND OPTIONS
###########################################
# set defaults for hard-coded variables
$conf_silent_prefix = '5'; # vicidial_conferences prefix to enter silently and muted for recording
$dtmf_silent_prefix = '7'; # vicidial_conferences prefix to enter silently
$HKuser_level = '1'; # minimum vicidial user_level for HotKeys
$campaign_login_list = '1'; # show drop-down list of campaigns at login
$manual_dial_preview = '1'; # allow preview lead option when manual dial
$multi_line_comments = '1'; # set to 1 to allow multi-line comment box
$user_login_first = '0'; # set to 1 to have the vicidial_user login before the phone login
$view_scripts = '1'; # set to 1 to show the SCRIPTS tab
$dispo_check_all_pause = '0'; # set to 1 to allow for persistent pause after dispo
$callholdstatus = '1'; # set to 1 to show calls on hold count
$agentcallsstatus = '0'; # set to 1 to show agent status and call dialed count
$campagentstatctmax = '3'; # Number of seconds for campaign call and agent stats
$show_campname_pulldown = '1'; # set to 1 to show campaign name on login pulldown
$webform_sessionname = '1'; # set to 1 to include the session_name in webform URL
$local_consult_xfers = '1'; # set to 1 to send consultative transfers from original server
$clientDST = '1'; # set to 1 to check for DST on server for agent time
$no_delete_sessions = '1'; # set to 1 to not delete sessions at logout
$volumecontrol_active = '1'; # set to 1 to allow agents to alter volume of channels
$ast13_volume_override = '0'; # set to 1 to allow agent to use volume controls even on Asterisk 13 servers
$PreseT_DiaL_LinKs = '0'; # set to 1 to show a DIAL link for Dial Presets
$LogiNAJAX = '1'; # set to 1 to do lookups on campaigns for login
$HidEMonitoRSessionS = '1'; # set to 1 to hide remote monitoring channels from "session calls"
$hangup_all_non_reserved= '1'; # set to 1 to force hangup all non-reserved channels upon Hangup Customer
$LogouTKicKAlL = '1'; # set to 1 to hangup all calls in session upon agent logout
$PhonESComPIP = '1'; # set to 1 to log computer IP to phone if blank, set to 2 to force log each login
$DefaulTAlTDiaL = '0'; # set to 1 to enable ALT DIAL by default if enabled for the campaign
$AgentAlert_allowed = '1'; # set to 1 to allow Agent alert option
$disable_blended_checkbox='0'; # set to 1 to disable the BLENDED checkbox from the in-group chooser screen
$hide_timeclock_link = '0'; # set to 1 to hide the timeclock link on the agent login screen
$conf_check_attempts = '3'; # number of attempts to try before loosing webserver connection, for bad network setups
$focus_blur_enabled = '0'; # set to 1 to enable the focus/blur enter key blocking(some IE instances have issues)
$consult_custom_delay = '2'; # number of seconds to delay consultative transfers when customfields are active
$mrglock_ig_select_ct = '4'; # number of seconds to leave in-group select screen open if agent select is disabled
$link_to_grey_version = '0'; # show link to old grey version of agent screen at login screen, next to timeclock link
$no_empty_session_warnings=0; # set to 1 to disable empty session warnings on agent screen
$logged_in_refresh_link = '0'; # set to 1 to allow clickable "Logged in as..." link at top to force Javascript refresh
$webphone_call_seconds = '0'; # set to 1 or higher to have the agent phone(if set to webphone) called X seconds after login
$user_pass_webform = '0'; # set to 1 or 2 to return to default of including the 'user'(1) and 'pass'(2) by default in webform URLs
$phone_login_webform = '0'; # set to 1 or 2 to return to default of including the 'phone_login'(1) and 'phone_pass'(2) by default in webform URLs
$login_submit_once = '1'; # set to 0 to remove the "disable the login submit button after submitting" feature
$default_consultative = '0'; # set the CONSULTATIVE checkbox on the transfer panel be checked by default
$TEST_all_statuses = '0'; # TEST variable allows all statuses in dispo screen, FOR DEBUG ONLY
$stretch_dimensions = '1'; # sets the vicidial screen to the size of the browser window
$BROWSER_HEIGHT = 500; # set to the minimum browser height, default=500
$BROWSER_WIDTH = 770; # set to the minimum browser width, default=770
$webphone_width = 460; # set the webphone frame width
$webphone_height = 500; # set the webphone frame height
$webphone_pad = 0; # set the table cellpadding for the webphone
$webphone_location = 'right'; # set the location on the agent screen 'right' or 'bar'
$banner_height = 15; # state description banner
$MAIN_COLOR = '#CCCCCC'; # old default is E0C2D6
$SCRIPT_COLOR = '#E6E6E6'; # old default is FFE7D0
$FORM_COLOR = '#EFEFEF';
$SIDEBAR_COLOR = '#F6F6F6';
$window_validation = 0; # set to 1 to disallow direct logins to vicidial.php
$win_valid_name = 'subwindow_launch'; # only window name to allow if validation enabled
$INSERT_head_script = ''; # inserted right above the
';
echo "\n";
echo "\n";
if ($campaign_login_list > 0)
{
$camp_form_code = "\n";
}
else
{
$camp_form_code = "\n";
}
if ($LogiNAJAX > 0)
{
?>
\n";
$LoginLoadingBox .= "
\n"._QXZ("Logging in")."...\n";
$LoginLoadingBox .= "
\n";
$LoginLoadingBox .= "
\n\n";
}
else
{
$LOGINformSUBtrigger='';
$LoginLoadingBox='';
?>
// -->
0)
{$grey_link = " | "._QXZ("Old Agent Screen")."";}
if ($relogin == 'YES')
{
echo "
| \n"; echo "\n"; echo " |