mirror of
				https://github.com/Mibew/i18n.git
				synced 2025-11-04 02:35:07 +03:00 
			
		
		
		
	Add an ability to start chat with specified operator
This commit is contained in:
		
							parent
							
								
									b89e838625
								
							
						
					
					
						commit
						e01a75faea
					
				@ -92,6 +92,14 @@ if( !isset($_GET['token']) || !isset($_GET['thread']) ) {
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Get operator code
 | 
			
		||||
		$operator_code = empty($_GET['operator_code'])
 | 
			
		||||
			? ''
 | 
			
		||||
			: $_GET['operator_code'];
 | 
			
		||||
		if (! preg_match("/^[A-z0-9_]+$/", $operator_code)) {
 | 
			
		||||
			$operator_code = false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Get visitor info
 | 
			
		||||
		$visitor = visitor_from_request();
 | 
			
		||||
		$info = getgetparam('info');
 | 
			
		||||
@ -132,8 +140,17 @@ if( !isset($_GET['token']) || !isset($_GET['thread']) ) {
 | 
			
		||||
			$visitor_is_invited = false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Get operator info
 | 
			
		||||
		$requested_operator = false;
 | 
			
		||||
		if ($operator_code) {
 | 
			
		||||
			$requested_operator = operator_by_code($operator_code);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Check if survey should be displayed
 | 
			
		||||
		if(Settings::get('enablepresurvey') == '1' && !$visitor_is_invited) {
 | 
			
		||||
		if(Settings::get('enablepresurvey') == '1'
 | 
			
		||||
			&& !$visitor_is_invited
 | 
			
		||||
			&& !$requested_operator
 | 
			
		||||
		) {
 | 
			
		||||
			// Display prechat survey
 | 
			
		||||
			$page = array_merge_recursive(
 | 
			
		||||
				setup_logo($group),
 | 
			
		||||
@ -145,7 +162,7 @@ if( !isset($_GET['token']) || !isset($_GET['thread']) ) {
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Start chat thread
 | 
			
		||||
		$thread = chat_start_for_user($groupid, $visitor['id'], $visitor['name'], $referrer, $info);
 | 
			
		||||
		$thread = chat_start_for_user($groupid, $requested_operator, $visitor['id'], $visitor['name'], $referrer, $info);
 | 
			
		||||
	}
 | 
			
		||||
	$threadid = $thread->id;
 | 
			
		||||
	$token = $thread->lastToken;
 | 
			
		||||
 | 
			
		||||
@ -128,6 +128,8 @@ $dbtables = array(
 | 
			
		||||
		"iperm" => "int DEFAULT 0", /* Do not grant all privileges by default */
 | 
			
		||||
		"dtmrestore" => "int NOT NULL DEFAULT 0",
 | 
			
		||||
		"vcrestoretoken" => "varchar(64)",
 | 
			
		||||
		// Use to start chat with specified operator
 | 
			
		||||
		"code" => "varchar(64) DEFAULT ''"
 | 
			
		||||
	),
 | 
			
		||||
 | 
			
		||||
	"${mysqlprefix}chatoperatorstatistics" => array(
 | 
			
		||||
@ -249,7 +251,7 @@ $dbtables_can_update = array(
 | 
			
		||||
	"${mysqlprefix}requestbuffer" => array("requestid", "requestkey", "request"),
 | 
			
		||||
	"${mysqlprefix}chatmessage" => array("agentId"),
 | 
			
		||||
	"${mysqlprefix}indexedchatmessage" => array(),
 | 
			
		||||
	"${mysqlprefix}chatoperator" => array("vcavatar", "vcjabbername", "iperm", "istatus", "idisabled", "vcemail", "dtmrestore", "vcrestoretoken"),
 | 
			
		||||
	"${mysqlprefix}chatoperator" => array("vcavatar", "vcjabbername", "iperm", "istatus", "idisabled", "vcemail", "dtmrestore", "vcrestoretoken", "code"),
 | 
			
		||||
	"${mysqlprefix}chatoperatorstatistics" => array("sentinvitations", "acceptedinvitations", "rejectedinvitations", "ignoredinvitations"),
 | 
			
		||||
	"${mysqlprefix}chatban" => array(),
 | 
			
		||||
	"${mysqlprefix}chatgroup" => array("vcemail", "iweight", "parent", "vctitle", "vcchattitle", "vclogo", "vchosturl"),
 | 
			
		||||
 | 
			
		||||
@ -184,6 +184,10 @@ if ($act == "silentcreateall") {
 | 
			
		||||
			runsql("ALTER TABLE ${mysqlprefix}chatoperator ADD vcrestoretoken varchar(64)", $link);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (in_array("${mysqlprefix}chatoperator.code", $absent_columns)) {
 | 
			
		||||
			runsql("ALTER TABLE ${mysqlprefix}chatoperator ADD code varchar(64) DEFAULT ''", $link);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (in_array("${mysqlprefix}chatoperatorstatistics.sentinvitations", $absent_columns)) {
 | 
			
		||||
			runsql("ALTER TABLE ${mysqlprefix}chatoperatorstatistics ADD sentinvitations int NOT NULL DEFAULT 0", $link);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@ -625,12 +625,13 @@ function get_remote_host()
 | 
			
		||||
 *
 | 
			
		||||
 * @global string $current_locale Current locale code
 | 
			
		||||
 * @param int $group_id Id of group related to thread
 | 
			
		||||
 * @param array $requested_operator Array of requested operator info
 | 
			
		||||
 * @param string $visitor_id Id of the visitor
 | 
			
		||||
 * @param string $visitor_name Name of the visitor
 | 
			
		||||
 * @param string $referrer Page user came from
 | 
			
		||||
 * @param string $info User info
 | 
			
		||||
 */
 | 
			
		||||
function chat_start_for_user($group_id, $visitor_id, $visitor_name, $referrer, $info) {
 | 
			
		||||
function chat_start_for_user($group_id, $requested_operator, $visitor_id, $visitor_name, $referrer, $info) {
 | 
			
		||||
	global $current_locale;
 | 
			
		||||
 | 
			
		||||
	// Get user info
 | 
			
		||||
@ -651,6 +652,14 @@ function chat_start_for_user($group_id, $visitor_id, $visitor_name, $referrer, $
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Get info about requested operator
 | 
			
		||||
	$requested_operator_online = false;
 | 
			
		||||
	if ($requested_operator) {
 | 
			
		||||
		$requested_operator_online = is_operator_online(
 | 
			
		||||
			$requested_operator['operatorid']
 | 
			
		||||
		);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Get thread object
 | 
			
		||||
	if ($is_invited) {
 | 
			
		||||
		// Get thread from invitation
 | 
			
		||||
@ -663,6 +672,9 @@ function chat_start_for_user($group_id, $visitor_id, $visitor_name, $referrer, $
 | 
			
		||||
		// Create thread
 | 
			
		||||
		$thread = Thread::create();
 | 
			
		||||
		$thread->state = Thread::STATE_LOADING;
 | 
			
		||||
		if ($requested_operator && $requested_operator_online) {
 | 
			
		||||
			$thread->nextAgent = $requested_operator['operatorid'];
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Update thread fields
 | 
			
		||||
@ -695,8 +707,17 @@ function chat_start_for_user($group_id, $visitor_id, $visitor_name, $referrer, $
 | 
			
		||||
				getstring2('chat.came.from',array($referrer))
 | 
			
		||||
			);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$thread->postMessage(Thread::KIND_INFO, getstring('chat.wait'));
 | 
			
		||||
		if ($requested_operator && !$requested_operator_online) {
 | 
			
		||||
			$thread->postMessage(
 | 
			
		||||
				Thread::KIND_INFO,
 | 
			
		||||
				getstring2(
 | 
			
		||||
					'chat.requested_operator.offline',
 | 
			
		||||
					array(get_operator_name($requested_operator))
 | 
			
		||||
				)
 | 
			
		||||
			);
 | 
			
		||||
		} else {
 | 
			
		||||
			$thread->postMessage(Thread::KIND_INFO, getstring('chat.wait'));
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// TODO: May be move sending this message somewhere else?
 | 
			
		||||
 | 
			
		||||
@ -479,6 +479,7 @@ class ThreadProcessor extends ClientSideProcessor {
 | 
			
		||||
		// Initialize dialog
 | 
			
		||||
		$thread = chat_start_for_user(
 | 
			
		||||
			$group_id,
 | 
			
		||||
			false,
 | 
			
		||||
			$visitor['id'],
 | 
			
		||||
			$visitor['name'],
 | 
			
		||||
			$referrer,
 | 
			
		||||
 | 
			
		||||
@ -15,7 +15,7 @@
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
function generate_button($title, $locale, $style, $invitationstyle, $group, $inner, $showhost, $forcesecure, $modsecurity)
 | 
			
		||||
function generate_button($title, $locale, $style, $invitationstyle, $group, $inner, $showhost, $forcesecure, $modsecurity, $operator_code)
 | 
			
		||||
{
 | 
			
		||||
	global $visitorcookie;
 | 
			
		||||
	$app_location = get_app_location($showhost, $forcesecure);
 | 
			
		||||
@ -29,8 +29,23 @@ function generate_button($title, $locale, $style, $invitationstyle, $group, $inn
 | 
			
		||||
 | 
			
		||||
	$modsecfix = $modsecurity ? ".replace('http://','').replace('https://','')" : "";
 | 
			
		||||
	$jslink = append_query("'" . $link, "url='+escape(document.location.href$modsecfix)+'&referrer='+escape(document.referrer$modsecfix)");
 | 
			
		||||
	$popup_options = "toolbar=0,scrollbars=0,location=0,status=1,menubar=0,width=640,height=480,resizable=1";
 | 
			
		||||
 | 
			
		||||
	// Generate operator code field
 | 
			
		||||
	if ($operator_code) {
 | 
			
		||||
		$form_on_submit = "if(navigator.userAgent.toLowerCase().indexOf('opera') != -1 " .
 | 
			
		||||
			"&& window.event.preventDefault) window.event.preventDefault();" .
 | 
			
		||||
			"this.newWindow = window.open({$jslink} + '&operator_code=' + document.getElementById('mibewOperatorCodeField').value, 'webim', '{$popup_options}');" .
 | 
			
		||||
			"this.newWindow.focus();this.newWindow.opener=window;return false;";
 | 
			
		||||
		$temp = '<form action="" onsubmit="' . $form_on_submit . '" id="mibewOperatorCodeForm">' .
 | 
			
		||||
			'<input type="text" id="mibewOperatorCodeField" />' .
 | 
			
		||||
			'</form>';
 | 
			
		||||
		return "<!-- mibew operator code field -->" . $temp . "<!-- / mibew operator code field -->";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Generate button
 | 
			
		||||
	$temp = get_popup($link, "$jslink",
 | 
			
		||||
					  $inner, $title, "webim", "toolbar=0,scrollbars=0,location=0,status=1,menubar=0,width=640,height=480,resizable=1");
 | 
			
		||||
					$inner, $title, "webim", $popup_options);
 | 
			
		||||
	if (Settings::get('enabletracking')) {
 | 
			
		||||
		$widget_data = array();
 | 
			
		||||
 | 
			
		||||
@ -55,7 +70,7 @@ function generate_button($title, $locale, $style, $invitationstyle, $group, $inn
 | 
			
		||||
		$widget_data['visitorCookieName'] = $visitorcookie;
 | 
			
		||||
 | 
			
		||||
		// Build additional button code
 | 
			
		||||
	    $temp = preg_replace('/^(<a )/', '\1id="mibewAgentButton" ', $temp) .
 | 
			
		||||
		$temp = preg_replace('/^(<a )/', '\1id="mibewAgentButton" ', $temp) .
 | 
			
		||||
			'<div id="mibewinvitation"></div>' .
 | 
			
		||||
			'<script type="text/javascript" src="' .
 | 
			
		||||
				$app_location .	'/js/compiled/widget.js' .
 | 
			
		||||
 | 
			
		||||
@ -96,6 +96,21 @@ function operator_by_id($id)
 | 
			
		||||
	);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Load operator info by specified operators code
 | 
			
		||||
 * @param string $code Operators code
 | 
			
		||||
 * @return array|boolean Operators info array or boolean false if there is no
 | 
			
		||||
 * operator with specified code.
 | 
			
		||||
 */
 | 
			
		||||
function operator_by_code($code) {
 | 
			
		||||
	$db = Database::getInstance();
 | 
			
		||||
	return $db->query(
 | 
			
		||||
		"select * from {chatoperator} where code = ?",
 | 
			
		||||
		array($code),
 | 
			
		||||
		array('return_rows' => Database::RETURN_ONE_ROW)
 | 
			
		||||
	);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get list of operators taking into account $options
 | 
			
		||||
 * @param array $options Associative array of options. It can contains following keys:
 | 
			
		||||
@ -134,7 +149,7 @@ function get_operators_list($options)
 | 
			
		||||
		$orderby = "vclogin";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	$query = "select distinct {chatoperator}.operatorid, vclogin, vclocalename, vccommonname, istatus, idisabled, (:now - dtmlastvisited) as time " .
 | 
			
		||||
	$query = "select distinct {chatoperator}.operatorid, vclogin, vclocalename, vccommonname, code, istatus, idisabled, (:now - dtmlastvisited) as time " .
 | 
			
		||||
		 "from {chatoperator}" .
 | 
			
		||||
		 (
 | 
			
		||||
		 empty($options['isolated_operator_id']) ? "" :
 | 
			
		||||
@ -165,11 +180,10 @@ function get_operators_list($options)
 | 
			
		||||
	return $operators;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function operator_get_all()
 | 
			
		||||
{
 | 
			
		||||
function operator_get_all() {
 | 
			
		||||
	$db = Database::getInstance();
 | 
			
		||||
	return $operators = $db->query(
 | 
			
		||||
		"select operatorid, vclogin, vclocalename, vccommonname, istatus, idisabled, " .
 | 
			
		||||
		"select operatorid, vclogin, vclocalename, vccommonname, istatus, code, idisabled, " .
 | 
			
		||||
		"(:now - dtmlastvisited) as time " .
 | 
			
		||||
		"from {chatoperator} order by vclogin",
 | 
			
		||||
		array(':now' => time()),
 | 
			
		||||
@ -181,7 +195,7 @@ function get_operators_from_adjacent_groups($operator)
 | 
			
		||||
{
 | 
			
		||||
	$db = Database::getInstance();
 | 
			
		||||
	$query = "select distinct {chatoperator}.operatorid, vclogin, vclocalename,vccommonname, " .
 | 
			
		||||
		"istatus, idisabled, " .
 | 
			
		||||
		"istatus, idisabled, code, " .
 | 
			
		||||
		"(:now - dtmlastvisited) as time " .
 | 
			
		||||
		"from {chatoperator}, {chatgroupoperator} " .
 | 
			
		||||
		"where {chatoperator}.operatorid = {chatgroupoperator}.operatorid " .
 | 
			
		||||
@ -224,8 +238,22 @@ function operator_is_disabled($operator)
 | 
			
		||||
	return $operator['idisabled'] == '1';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function update_operator($operatorid, $login, $email, $password, $localename, $commonname)
 | 
			
		||||
{
 | 
			
		||||
/**
 | 
			
		||||
 * Update existing operator's info.
 | 
			
		||||
 *
 | 
			
		||||
 * If $password argument is empty operators password will not be changed.
 | 
			
		||||
 *
 | 
			
		||||
 * @param int $operatorid ID of operator to update
 | 
			
		||||
 * @param string $login Operator's login
 | 
			
		||||
 * @param string $email Operator's
 | 
			
		||||
 * @param string $password Operator's password
 | 
			
		||||
 * @param string $localename Operator's local name
 | 
			
		||||
 * @param string $commonname Operator's international name
 | 
			
		||||
 * @param string $avatar Operator's avatar
 | 
			
		||||
 * @param string $code Operator's code which use to start chat with specified
 | 
			
		||||
 * operator
 | 
			
		||||
 */
 | 
			
		||||
function update_operator($operatorid, $login, $email, $password, $localename, $commonname, $code) {
 | 
			
		||||
	$db = Database::getInstance();
 | 
			
		||||
	$values = array(
 | 
			
		||||
		':login' => $login,
 | 
			
		||||
@ -233,7 +261,8 @@ function update_operator($operatorid, $login, $email, $password, $localename, $c
 | 
			
		||||
		':commonname' => $commonname,
 | 
			
		||||
		':email' => $email,
 | 
			
		||||
		':jabbername' => '',
 | 
			
		||||
		':operatorid' => $operatorid
 | 
			
		||||
		':operatorid' => $operatorid,
 | 
			
		||||
		':code' => $code
 | 
			
		||||
	);
 | 
			
		||||
	if ($password) {
 | 
			
		||||
		$values[':password'] = md5($password);
 | 
			
		||||
@ -242,7 +271,7 @@ function update_operator($operatorid, $login, $email, $password, $localename, $c
 | 
			
		||||
		"update {chatoperator} set vclogin = :login, " .
 | 
			
		||||
		($password ? " vcpassword=:password, " : "") .
 | 
			
		||||
		"vclocalename = :localname, vccommonname = :commonname, " .
 | 
			
		||||
		"vcemail = :email, vcjabbername= :jabbername " .
 | 
			
		||||
		"vcemail = :email, code = :code, vcjabbername= :jabbername " .
 | 
			
		||||
		"where operatorid = :operatorid",
 | 
			
		||||
		$values
 | 
			
		||||
 | 
			
		||||
@ -267,23 +296,29 @@ function update_operator_avatar($operatorid, $avatar)
 | 
			
		||||
 * @param string $localename Operator's local name
 | 
			
		||||
 * @param string $commonname Operator's international name
 | 
			
		||||
 * @param string $avatar Operator's avatar
 | 
			
		||||
 * @param string $code Operator's code which use to start chat with specified
 | 
			
		||||
 * operator
 | 
			
		||||
 * @return array Operator's array
 | 
			
		||||
 */
 | 
			
		||||
function create_operator($login, $email, $password, $localename, $commonname, $avatar)
 | 
			
		||||
{
 | 
			
		||||
function create_operator($login, $email, $password, $localename, $commonname, $avatar, $code) {
 | 
			
		||||
	$db = Database::getInstance();
 | 
			
		||||
	$db->query(
 | 
			
		||||
		"insert into {chatoperator} " .
 | 
			
		||||
		"(vclogin,vcpassword,vclocalename,vccommonname,vcavatar,vcemail,vcjabbername) " .
 | 
			
		||||
		"values (?, ?, ?, ?, ?, ?, ?)",
 | 
			
		||||
		"INSERT INTO {chatoperator} (" .
 | 
			
		||||
			"vclogin, vcpassword, vclocalename, vccommonname, vcavatar, " .
 | 
			
		||||
			"vcemail, code, vcjabbername " .
 | 
			
		||||
		") VALUES (" .
 | 
			
		||||
			":login, :pass, :localename, :commonname, :avatar, " .
 | 
			
		||||
			":email, :code, :jabber".
 | 
			
		||||
		")",
 | 
			
		||||
		array(
 | 
			
		||||
			$login,
 | 
			
		||||
			md5($password),
 | 
			
		||||
			$localename,
 | 
			
		||||
			$commonname,
 | 
			
		||||
			$avatar,
 | 
			
		||||
			$email,
 | 
			
		||||
			''
 | 
			
		||||
			':login' => $login,
 | 
			
		||||
			':pass' => md5($password),
 | 
			
		||||
			':localename' => $localename,
 | 
			
		||||
			':commonname' => $commonname,
 | 
			
		||||
			':avatar' => $avatar,
 | 
			
		||||
			':email' => $email,
 | 
			
		||||
			':code' => $code,
 | 
			
		||||
			':jabber' => ''
 | 
			
		||||
		)
 | 
			
		||||
	);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -63,6 +63,7 @@ chat.redirected.closewindow=Click to close the window
 | 
			
		||||
chat.redirected.content=The visitor has been placed in the priorty queue of the operator {0}.
 | 
			
		||||
chat.redirected.group.content=The visitor has been placed in a priorty queue of the group {0}.
 | 
			
		||||
chat.redirected.title=The visitor has been redirected to another operator
 | 
			
		||||
chat.requested_operator.offline=Thank you for contacting us. We are sorry, but requested operator <strong>{0}</strong> is offline. Another operator will be with you shortly.
 | 
			
		||||
chat.status.operator.changed=Operator <strong>{0}</strong> changed operator <strong>{1}</strong>
 | 
			
		||||
chat.status.operator.dead=Your operator has connection issues. We have moved you to a priorty position in the queue. Sorry for keeping you waiting.
 | 
			
		||||
chat.status.operator.joined=Operator {0} joined the chat
 | 
			
		||||
@ -138,6 +139,8 @@ error.no_password.visit_profile=Visit your <a href="{0}">Profile Page</a>.
 | 
			
		||||
features.saved=Features activated
 | 
			
		||||
form.field.address.description=Ex: 12.23.45.123 or todo.com
 | 
			
		||||
form.field.address=Visitor's Address
 | 
			
		||||
form.field.agent_code.description=Use to start chat with determined operator
 | 
			
		||||
form.field.agent_code=Code
 | 
			
		||||
form.field.agent_commonname.description=This name will be seen by your visitors.
 | 
			
		||||
form.field.agent_commonname=International name (Latin)
 | 
			
		||||
form.field.agent_name.description=This name will be seen by your visitors.
 | 
			
		||||
@ -278,17 +281,20 @@ page.chat.old_browser.close=Close...
 | 
			
		||||
page.chat.old_browser.list=<ul>\n<li>Internet Explorer 5.5+</li>\n<li>Firefox 1.0+</li>\n<li>Opera 8.0+</li>\n<li>Mozilla 1.4+</li>\n<li>Netscape 7.1+</li>\n<li>Safari 1.2+</li>\n</ul>\n<p>Also, we support some old browsers:</p>\n<ul>\n<li>Internet Explorer 5.0</li>\n<li>Opera 7.0</li>\n</ul>
 | 
			
		||||
page.chat.old_browser.problem=<p>Your web browser is not fully supported. \nPlease, use one of the following web browsers:</p>
 | 
			
		||||
page.chat.old_browser.title=Please use a more recent browser
 | 
			
		||||
page.gen_button.button=button
 | 
			
		||||
page.gen_button.choose_group=Code for group
 | 
			
		||||
page.gen_button.choose_image=Choose image
 | 
			
		||||
page.gen_button.choose_invitationstyle=Invitation style
 | 
			
		||||
page.gen_button.choose_locale=Code for language
 | 
			
		||||
page.gen_button.choose_style=Chat window style
 | 
			
		||||
page.gen_button.choose_type=Generating code type
 | 
			
		||||
page.gen_button.code.description=<strong>Caution!</strong> Please don't change<br/> the code manually because<br/> we don't guarantee that<br/> it will work!
 | 
			
		||||
page.gen_button.code=HTML code
 | 
			
		||||
page.gen_button.default_group=-all operators-
 | 
			
		||||
page.gen_button.include_site_name=Include host name into the code
 | 
			
		||||
page.gen_button.intro=You can generate HTML code to place at your site here.
 | 
			
		||||
page.gen_button.modsecurity=Compatibility with mod_security (modsecurity.org), turn on only if you have problems with it
 | 
			
		||||
page.gen_button.operator_code=operator code field
 | 
			
		||||
page.gen_button.sample=Example
 | 
			
		||||
page.gen_button.secure_links=Use secure links (https)
 | 
			
		||||
page.gen_button.title=Button HTML code generation
 | 
			
		||||
@ -343,6 +349,7 @@ page_agent.create_new=You can create a new operator here.
 | 
			
		||||
page_agent.error.duplicate_login=Please choose another login because an operator with that login is already registered in the system.
 | 
			
		||||
page_agent.error.forbidden_create=You are not allowed to create operators.
 | 
			
		||||
page_agent.error.wrong_login=Login should contain only latin characters, numbers and underscore symbol.
 | 
			
		||||
page_agent.error.wrong_agent_code=Code should contain only latin characters, numbers and underscore symbol.
 | 
			
		||||
page_agent.intro=Edit general operator settings.
 | 
			
		||||
page_agent.tab.avatar=Photo
 | 
			
		||||
page_agent.tab.groups=Groups
 | 
			
		||||
 | 
			
		||||
@ -63,6 +63,7 @@ chat.redirected.closewindow=
 | 
			
		||||
chat.redirected.content=Посетитель помещен в привелегированную очередь оператора {0}.
 | 
			
		||||
chat.redirected.group.content=Посетитель помещен в привелегированную очередь группы {0}.
 | 
			
		||||
chat.redirected.title=Посетитель переведен другому оператору
 | 
			
		||||
chat.requested_operator.offline=Нам очень жаль, но запрошенный оператор <strong>{0}</strong> сейчас недоступен. Пожалуйста, подождите немного, к Вам присоединится другой оператор...
 | 
			
		||||
chat.status.operator.changed=Оператор <strong>{0}</strong> сменил оператора <strong>{1}</strong>
 | 
			
		||||
chat.status.operator.dead=У оператора возникли проблемы со связью, мы временно перевели Вас в приоритетную очередь. Приносим извинения за Ваше ожидание.
 | 
			
		||||
chat.status.operator.joined=Оператор {0} включился в разговор
 | 
			
		||||
@ -138,6 +139,8 @@ errors.wrong_field=
 | 
			
		||||
features.saved=Набор сервисов изменен
 | 
			
		||||
form.field.address.description=Например: 12.23.45.123 или relay.info.ru
 | 
			
		||||
form.field.address=Адрес посетителя
 | 
			
		||||
form.field.agent_code.description=Используется для начала диалога с определенным оператором
 | 
			
		||||
form.field.agent_code=Код
 | 
			
		||||
form.field.agent_commonname.description=Под этим именем Вас увидят ваши посетители из других стран.
 | 
			
		||||
form.field.agent_commonname=Интернациональное имя (латиницей)
 | 
			
		||||
form.field.agent_name.description=Под этим именем Вас увидят ваши посетители, по нему же к <br/>Вам будет обращаться система.
 | 
			
		||||
@ -278,17 +281,20 @@ page.chat.old_browser.close=
 | 
			
		||||
page.chat.old_browser.list=<ul>\n<li>Internet Explorer 5.5+</li>\n<li>Firefox 1.0+</li>\n<li>Opera 8.0+</li>\n<li>Mozilla 1.4+</li>\n<li>Netscape 7.1+</li>\n<li>Safari 1.2+</li>\n</ul>\n<p>Также поддерживаются некоторые старые браузеры:</p>\n<ul>\n<li>Internet Explorer 5.0</li>\n<li>Opera 7.0</li>\n</ul>
 | 
			
		||||
page.chat.old_browser.problem=<p>К сожалению, для работы этой страницы необходим более новый браузер. Для лучшего просмотра используйте:</p>
 | 
			
		||||
page.chat.old_browser.title=Используйте более новый browser
 | 
			
		||||
page.gen_button.button=кнопка
 | 
			
		||||
page.gen_button.choose_group=Для группы
 | 
			
		||||
page.gen_button.choose_image=Выбор картинки
 | 
			
		||||
page.gen_button.choose_invitationstyle=Стиль приглашения
 | 
			
		||||
page.gen_button.choose_locale=Для какой локали создавать кнопку
 | 
			
		||||
page.gen_button.choose_style=Стиль чат-окна
 | 
			
		||||
page.gen_button.choose_type=Тип генерируемого кода
 | 
			
		||||
page.gen_button.code.description=<strong>Внимание!</strong> При внесении<br/> каких-либо изменений<br/> в этот код работоспособность<br/> кнопки не гарантируется!
 | 
			
		||||
page.gen_button.code=HTML-код
 | 
			
		||||
page.gen_button.default_group=-все операторы-
 | 
			
		||||
page.gen_button.include_site_name=Включать имя сайта в код
 | 
			
		||||
page.gen_button.intro=На этой странице Вы можете получить HTML-код кнопки "Веб Мессенджера" для размещения на своем сайте.
 | 
			
		||||
page.gen_button.modsecurity=Совместимость с mod_security (modsecurity.org), включите если окно с чатом открывается с http ошибкой
 | 
			
		||||
page.gen_button.operator_code=поле для ввода кода оператора
 | 
			
		||||
page.gen_button.sample=Пример
 | 
			
		||||
page.gen_button.secure_links=Использовать защищенное соединение (https)
 | 
			
		||||
page.gen_button.title=Получение HTML-кода кнопки
 | 
			
		||||
@ -343,6 +349,7 @@ page_agent.create_new=
 | 
			
		||||
page_agent.error.duplicate_login=Выберите другой логин, т.к. оператор с введенным логином уже зарегистрирован в системе.
 | 
			
		||||
page_agent.error.forbidden_create=Вы не можете создавать операторов.
 | 
			
		||||
page_agent.error.wrong_login=Логин должен состоять из латинских символов, цифр и знака подчеркивания.
 | 
			
		||||
page_agent.error.wrong_agent_code=Код должен состоять из латинских символов, цифр и знака подчеркивания.
 | 
			
		||||
page_agent.intro=На этой странице вы можете просмотреть детали оператора и отредактировать их.
 | 
			
		||||
page_agent.tab.avatar=Фотография
 | 
			
		||||
page_agent.tab.groups=Группы
 | 
			
		||||
 | 
			
		||||
@ -52,6 +52,9 @@ $showhost = verifyparam("hostname", "/^on$/", "") == "on";
 | 
			
		||||
$forcesecure = verifyparam("secure", "/^on$/", "") == "on";
 | 
			
		||||
$modsecurity = verifyparam("modsecurity", "/^on$/", "") == "on";
 | 
			
		||||
 | 
			
		||||
$code_type = verifyparam("codetype", "/^(button|operator_code)$/", "button");
 | 
			
		||||
$operator_code = ($code_type == "operator_code");
 | 
			
		||||
 | 
			
		||||
$lang = verifyparam("lang", "/^[\w-]{2,5}$/", "");
 | 
			
		||||
if (!$lang || !in_array($lang, $image_locales))
 | 
			
		||||
	$lang = in_array($current_locale, $image_locales) ? $current_locale : $image_locales[0];
 | 
			
		||||
@ -66,13 +69,18 @@ if ($groupid) {
 | 
			
		||||
$message = get_image($imagehref, $size[0], $size[1]);
 | 
			
		||||
 | 
			
		||||
$page = array();
 | 
			
		||||
$page['buttonCode'] = generate_button("", $lang, $style, $invitationstyle, $groupid, $message, $showhost, $forcesecure, $modsecurity);
 | 
			
		||||
$page['buttonCode'] = generate_button("", $lang, $style, $invitationstyle, $groupid, $message, $showhost, $forcesecure, $modsecurity, $operator_code);
 | 
			
		||||
$page['availableImages'] = array_keys($imageLocales);
 | 
			
		||||
$page['availableLocales'] = $image_locales;
 | 
			
		||||
$page['availableChatStyles'] = $stylelist;
 | 
			
		||||
$page['availableInvitationStyles'] = $invitationstylelist;
 | 
			
		||||
$page['groups'] = get_groups_list();
 | 
			
		||||
 | 
			
		||||
$page['availableCodeTypes'] = array(
 | 
			
		||||
	'button' => getlocal('page.gen_button.button'),
 | 
			
		||||
	'operator_code' => getlocal('page.gen_button.operator_code')
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
$page['formgroup'] = $groupid;
 | 
			
		||||
$page['formstyle'] = $style;
 | 
			
		||||
$page['forminvitationstyle'] = $invitationstyle;
 | 
			
		||||
@ -81,8 +89,10 @@ $page['formlang'] = $lang;
 | 
			
		||||
$page['formhostname'] = $showhost;
 | 
			
		||||
$page['formsecure'] = $forcesecure;
 | 
			
		||||
$page['formmodsecurity'] = $modsecurity;
 | 
			
		||||
$page['formcodetype'] = $code_type;
 | 
			
		||||
 | 
			
		||||
$page['enabletracking'] = Settings::get('enabletracking');
 | 
			
		||||
$page['operator_code'] = $operator_code;
 | 
			
		||||
 | 
			
		||||
prepare_menu($operator);
 | 
			
		||||
start_html_output();
 | 
			
		||||
 | 
			
		||||
@ -38,6 +38,7 @@ if ((isset($_POST['login']) || !is_capable(CAN_ADMINISTRATE, $operator)) && isse
 | 
			
		||||
	$passwordConfirm = getparam('passwordConfirm');
 | 
			
		||||
	$localname = getparam('name');
 | 
			
		||||
	$commonname = getparam('commonname');
 | 
			
		||||
	$code = getparam('code');
 | 
			
		||||
 | 
			
		||||
	if (!$localname)
 | 
			
		||||
		$errors[] = no_field("form.field.agent_name");
 | 
			
		||||
@ -54,6 +55,10 @@ if ((isset($_POST['login']) || !is_capable(CAN_ADMINISTRATE, $operator)) && isse
 | 
			
		||||
	if ($email != '' && !is_valid_email($email))
 | 
			
		||||
		$errors[] = wrong_field("form.field.mail");
 | 
			
		||||
 | 
			
		||||
	if ($code != '' && (! preg_match("/^[A-z0-9_]+$/", $code))) {
 | 
			
		||||
		$errors[] = getlocal("page_agent.error.wrong_agent_code");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!$opId && !$password)
 | 
			
		||||
		$errors[] = no_field("form.field.password");
 | 
			
		||||
 | 
			
		||||
@ -73,11 +78,11 @@ if ((isset($_POST['login']) || !is_capable(CAN_ADMINISTRATE, $operator)) && isse
 | 
			
		||||
 | 
			
		||||
	if (count($errors) == 0) {
 | 
			
		||||
		if (!$opId) {
 | 
			
		||||
			$newop = create_operator($login, $email, $password, $localname, $commonname, "");
 | 
			
		||||
			$newop = create_operator($login, $email, $password, $localname, $commonname, "", $code);
 | 
			
		||||
			header("Location: $webimroot/operator/avatar.php?op=" . $newop['operatorid']);
 | 
			
		||||
			exit;
 | 
			
		||||
		} else {
 | 
			
		||||
			update_operator($opId, $login, $email, $password, $localname, $commonname);
 | 
			
		||||
			update_operator($opId, $login, $email, $password, $localname, $commonname, $code);
 | 
			
		||||
			// update the session password
 | 
			
		||||
			if (!empty($password) && $opId == $operator['operatorid']) {
 | 
			
		||||
				$toDashboard = $operator['vcpassword'] == md5('') && $password != '';
 | 
			
		||||
@ -95,6 +100,7 @@ if ((isset($_POST['login']) || !is_capable(CAN_ADMINISTRATE, $operator)) && isse
 | 
			
		||||
		$page['formname'] = topage($localname);
 | 
			
		||||
		$page['formemail'] = topage($email);
 | 
			
		||||
		$page['formcommonname'] = topage($commonname);
 | 
			
		||||
		$page['formcode'] = topage($code);
 | 
			
		||||
		$page['opid'] = topage($opId);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -116,6 +122,7 @@ if ((isset($_POST['login']) || !is_capable(CAN_ADMINISTRATE, $operator)) && isse
 | 
			
		||||
		$page['formname'] = topage($op['vclocalename']);
 | 
			
		||||
		$page['formemail'] = topage($op['vcemail']);
 | 
			
		||||
		$page['formcommonname'] = topage($op['vccommonname']);
 | 
			
		||||
		$page['formcode'] = topage($op['code']);
 | 
			
		||||
		$page['opid'] = topage($op['operatorid']);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -107,6 +107,14 @@ require_once('inc_errors.php');
 | 
			
		||||
			<br clear="all"/>
 | 
			
		||||
		</div>
 | 
			
		||||
 | 
			
		||||
		<div class="field">
 | 
			
		||||
			<div class="flabel"><?php echo getlocal('form.field.agent_code') ?></div>
 | 
			
		||||
			<div class="fvalue">
 | 
			
		||||
				<input type="text" name="code" size="40" value="<?php echo form_value('code') ?>" class="formauth"<?php echo $page['canmodify'] ? "" : " disabled=\"disabled\"" ?>/>
 | 
			
		||||
			</div>
 | 
			
		||||
			<div class="fdescr"> — <?php echo getlocal('form.field.agent_code.description') ?></div>
 | 
			
		||||
			<br clear="all"/>
 | 
			
		||||
		</div>
 | 
			
		||||
<?php if($page['canmodify']) { ?>
 | 
			
		||||
		<div class="fbutton">
 | 
			
		||||
			<input type="image" name="save" value="" src='<?php echo $webimroot.getlocal("image.button.save") ?>' alt='<?php echo getlocal("button.save") ?>'/>
 | 
			
		||||
 | 
			
		||||
@ -41,19 +41,26 @@ require_once('inc_errors.php');
 | 
			
		||||
		</div>
 | 
			
		||||
 | 
			
		||||
		<div class="fieldinrow">
 | 
			
		||||
			<div class="flabel"><?php echo getlocal("page.gen_button.choose_image") ?></div>
 | 
			
		||||
			<div class="flabel"><?php echo getlocal("page.gen_button.choose_style") ?></div>
 | 
			
		||||
			<div class="fvaluenodesc">
 | 
			
		||||
				<select name="i" onchange="this.form.submit();"><?php foreach($page['availableImages'] as $k) { echo "<option value=\"".$k."\"".($k == form_value("image") ? " selected=\"selected\"" : "").">".$k."</option>"; } ?></select>
 | 
			
		||||
				<select name="style" onchange="this.form.submit();"><?php foreach($page['availableChatStyles'] as $k => $v) { echo "<option value=\"".$k."\"".($k == form_value("style") ? " selected=\"selected\"" : "").">".$v."</option>"; } ?></select>
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
		<br clear="all"/>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		<div class="fieldinrow">
 | 
			
		||||
			<div class="flabel"><?php echo getlocal("page.gen_button.choose_style") ?></div>
 | 
			
		||||
			<div class="flabel"><?php echo getlocal("page.gen_button.choose_type") ?></div>
 | 
			
		||||
			<div class="fvaluenodesc">
 | 
			
		||||
				<select name="style" onchange="this.form.submit();"><?php foreach($page['availableChatStyles'] as $k => $v) { echo "<option value=\"".$k."\"".($k == form_value("style") ? " selected=\"selected\"" : "").">".$v."</option>"; } ?></select>
 | 
			
		||||
				<select name="codetype" onchange="this.form.submit();"><?php foreach($page['availableCodeTypes'] as $k => $v) { echo "<option value=\"".$k."\"".($k == form_value("codetype") ? " selected=\"selected\"" : "").">".$v."</option>"; } ?></select>
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
		<br clear="all"/>
 | 
			
		||||
 | 
			
		||||
<?php if(! $page['operator_code']) { ?>
 | 
			
		||||
		<div class="fieldinrow">
 | 
			
		||||
			<div class="flabel"><?php echo getlocal("page.gen_button.choose_image") ?></div>
 | 
			
		||||
			<div class="fvaluenodesc">
 | 
			
		||||
				<select name="i" onchange="this.form.submit();"><?php foreach($page['availableImages'] as $k) { echo "<option value=\"".$k."\"".($k == form_value("image") ? " selected=\"selected\"" : "").">".$k."</option>"; } ?></select>
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
 | 
			
		||||
@ -66,6 +73,7 @@ require_once('inc_errors.php');
 | 
			
		||||
		</div>
 | 
			
		||||
<?php } ?>
 | 
			
		||||
		<br clear="all"/>
 | 
			
		||||
<?php } ?>
 | 
			
		||||
 | 
			
		||||
		<div class="fieldinrow">
 | 
			
		||||
			<div class="flabel"><?php echo getlocal("page.gen_button.choose_group") ?></div>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user