mirror of
https://github.com/Mibew/tray.git
synced 2025-01-22 18:10:34 +03:00
Added groups isolation
This commit is contained in:
parent
a5243fa1f3
commit
61c52eb127
@ -695,6 +695,7 @@ $settings = array(
|
|||||||
'forcessl' => '0',
|
'forcessl' => '0',
|
||||||
'usercanchangename' => '1',
|
'usercanchangename' => '1',
|
||||||
'enablegroups' => '0',
|
'enablegroups' => '0',
|
||||||
|
'enablegroupsisolation' => '0',
|
||||||
'enablestatistics' => '1',
|
'enablestatistics' => '1',
|
||||||
'enabletracking' => '0',
|
'enabletracking' => '0',
|
||||||
'enablepresurvey' => '1',
|
'enablepresurvey' => '1',
|
||||||
|
@ -80,6 +80,25 @@ function operator_get_all()
|
|||||||
return $operators;
|
return $operators;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function get_operators_from_adjacent_groups($operator)
|
||||||
|
{
|
||||||
|
global $mysqlprefix;
|
||||||
|
$link = connect();
|
||||||
|
|
||||||
|
$query = "select distinct ${mysqlprefix}chatoperator.operatorid, vclogin, vclocalename, vccommonname, istatus, idisabled, (unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time " .
|
||||||
|
"from ${mysqlprefix}chatoperator, ${mysqlprefix}chatgroupoperator " .
|
||||||
|
" where ${mysqlprefix}chatoperator.operatorid = ${mysqlprefix}chatgroupoperator.operatorid and ${mysqlprefix}chatgroupoperator.groupid in " .
|
||||||
|
"(select g.groupid from ${mysqlprefix}chatgroup g, " .
|
||||||
|
"(select distinct parent from ${mysqlprefix}chatgroup, ${mysqlprefix}chatgroupoperator " .
|
||||||
|
"where ${mysqlprefix}chatgroup.groupid = ${mysqlprefix}chatgroupoperator.groupid and ${mysqlprefix}chatgroupoperator.operatorid = ".$operator['operatorid'].") i " .
|
||||||
|
"where g.groupid = i.parent or g.parent = i.parent " .
|
||||||
|
") order by vclogin";
|
||||||
|
|
||||||
|
$operators = select_multi_assoc($query, $link);
|
||||||
|
close_connection($link);
|
||||||
|
return $operators;
|
||||||
|
}
|
||||||
|
|
||||||
function operator_is_online($operator)
|
function operator_is_online($operator)
|
||||||
{
|
{
|
||||||
global $settings;
|
global $settings;
|
||||||
@ -286,18 +305,23 @@ function logout_operator()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setup_redirect_links($threadid, $token)
|
function setup_redirect_links($threadid, $operator, $token)
|
||||||
{
|
{
|
||||||
global $page, $webimroot, $settings, $mysqlprefix;
|
global $page, $webimroot, $settings, $mysqlprefix;
|
||||||
loadsettings();
|
loadsettings();
|
||||||
$link = connect();
|
|
||||||
|
|
||||||
$operatorscount = db_rows_count("${mysqlprefix}chatoperator", array(), "", $link);
|
$operator_in_isolation = in_isolation($operator);
|
||||||
|
|
||||||
|
$operators = $operator_in_isolation?get_operators_from_adjacent_groups($operator):operator_get_all();
|
||||||
|
$operatorscount = count($operators);
|
||||||
|
|
||||||
|
$link = connect();
|
||||||
|
|
||||||
$groupscount = 0;
|
$groupscount = 0;
|
||||||
$groups = array();
|
$groups = array();
|
||||||
if ($settings['enablegroups'] == "1") {
|
if ($settings['enablegroups'] == "1") {
|
||||||
foreach (get_groups($link, true) as $group) {
|
$groupslist = $operator_in_isolation?get_groups_for_operator($link, $operator, true):get_groups($link, true);
|
||||||
|
foreach ($groupslist as $group) {
|
||||||
if ($group['inumofagents'] == 0) {
|
if ($group['inumofagents'] == 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -305,17 +329,14 @@ function setup_redirect_links($threadid, $token)
|
|||||||
}
|
}
|
||||||
$groupscount = count($groups);
|
$groupscount = count($groups);
|
||||||
}
|
}
|
||||||
|
close_connection($link);
|
||||||
|
|
||||||
prepare_pagination(max($operatorscount, $groupscount), 8);
|
prepare_pagination(max($operatorscount, $groupscount), 8);
|
||||||
$p = $page['pagination'];
|
$p = $page['pagination'];
|
||||||
$limit = $p['limit'];
|
$limit = $p['limit'];
|
||||||
|
|
||||||
$operators = select_multi_assoc(db_build_select(
|
$operators = array_slice($operators, $p['start'], $p['end'] - $p['start']);
|
||||||
"operatorid, vclogin, vclocalename, vccommonname, istatus, (unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time",
|
|
||||||
"${mysqlprefix}chatoperator", array(), "order by vclogin $limit"), $link);
|
|
||||||
|
|
||||||
$groups = array_slice($groups, $p['start'], $p['end'] - $p['start']);
|
$groups = array_slice($groups, $p['start'], $p['end'] - $p['start']);
|
||||||
close_connection($link);
|
|
||||||
|
|
||||||
$agent_list = "";
|
$agent_list = "";
|
||||||
$params = array('thread' => $threadid, 'token' => $token);
|
$params = array('thread' => $threadid, 'token' => $token);
|
||||||
@ -375,6 +396,13 @@ function is_capable($perm, $operator)
|
|||||||
return $perm >= 0 && $perm < 32 && ($permissions & (1 << $perm)) != 0;
|
return $perm >= 0 && $perm < 32 && ($permissions & (1 << $perm)) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function in_isolation($operator)
|
||||||
|
{
|
||||||
|
global $settings, $can_administrate;
|
||||||
|
loadsettings();
|
||||||
|
return (!is_capable($can_administrate, $operator) && $settings['enablegroups'] && $settings['enablegroupsisolation']);
|
||||||
|
}
|
||||||
|
|
||||||
function prepare_menu($operator, $hasright = true)
|
function prepare_menu($operator, $hasright = true)
|
||||||
{
|
{
|
||||||
global $page, $settings, $can_administrate;
|
global $page, $settings, $can_administrate;
|
||||||
@ -395,6 +423,18 @@ function get_all_groups($link)
|
|||||||
return get_sorted_child_groups_(select_multi_assoc($query, $link));
|
return get_sorted_child_groups_(select_multi_assoc($query, $link));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function get_all_groups_for_operator($operator, $link)
|
||||||
|
{
|
||||||
|
global $mysqlprefix;
|
||||||
|
$query = "select g.groupid as groupid, g.parent, g.vclocalname, g.vclocaldescription " .
|
||||||
|
"from ${mysqlprefix}chatgroup g, " .
|
||||||
|
"(select distinct parent from ${mysqlprefix}chatgroup, ${mysqlprefix}chatgroupoperator " .
|
||||||
|
"where ${mysqlprefix}chatgroup.groupid = ${mysqlprefix}chatgroupoperator.groupid and ${mysqlprefix}chatgroupoperator.operatorid = ".$operator['operatorid'].") i " .
|
||||||
|
"where g.groupid = i.parent or g.parent = i.parent " .
|
||||||
|
"order by vclocalname";
|
||||||
|
return get_sorted_child_groups_(select_multi_assoc($query, $link));
|
||||||
|
}
|
||||||
|
|
||||||
function get_sorted_child_groups_($groupslist, $skipgroups = array(), $maxlevel = -1, $groupid = NULL, $level = 0)
|
function get_sorted_child_groups_($groupslist, $skipgroups = array(), $maxlevel = -1, $groupid = NULL, $level = 0)
|
||||||
{
|
{
|
||||||
$child_groups = array();
|
$child_groups = array();
|
||||||
@ -410,10 +450,10 @@ function get_sorted_child_groups_($groupslist, $skipgroups = array(), $maxlevel
|
|||||||
return $child_groups;
|
return $child_groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_groups($link, $checkaway)
|
function get_groups_($link, $operator, $checkaway)
|
||||||
{
|
{
|
||||||
global $mysqlprefix;
|
global $mysqlprefix;
|
||||||
$query = "select ${mysqlprefix}chatgroup.groupid as groupid, parent, vclocalname, vclocaldescription, iweight" .
|
$query = "select ${mysqlprefix}chatgroup.groupid as groupid, ${mysqlprefix}chatgroup.parent as parent, vclocalname, vclocaldescription, iweight" .
|
||||||
", (SELECT count(*) from ${mysqlprefix}chatgroupoperator where ${mysqlprefix}chatgroup.groupid = " .
|
", (SELECT count(*) from ${mysqlprefix}chatgroupoperator where ${mysqlprefix}chatgroup.groupid = " .
|
||||||
"${mysqlprefix}chatgroupoperator.groupid) as inumofagents" .
|
"${mysqlprefix}chatgroupoperator.groupid) as inumofagents" .
|
||||||
", (SELECT min(unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time " .
|
", (SELECT min(unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time " .
|
||||||
@ -427,10 +467,27 @@ function get_groups($link, $checkaway)
|
|||||||
"and ${mysqlprefix}chatgroupoperator.operatorid = ${mysqlprefix}chatoperator.operatorid) as ilastseenaway"
|
"and ${mysqlprefix}chatgroupoperator.operatorid = ${mysqlprefix}chatoperator.operatorid) as ilastseenaway"
|
||||||
: ""
|
: ""
|
||||||
) .
|
) .
|
||||||
" from ${mysqlprefix}chatgroup order by iweight, vclocalname";
|
" from ${mysqlprefix}chatgroup" .
|
||||||
|
($operator
|
||||||
|
? ", (select distinct parent from ${mysqlprefix}chatgroup, ${mysqlprefix}chatgroupoperator " .
|
||||||
|
"where ${mysqlprefix}chatgroup.groupid = ${mysqlprefix}chatgroupoperator.groupid and ${mysqlprefix}chatgroupoperator.operatorid = ".$operator['operatorid'].") i " .
|
||||||
|
"where ${mysqlprefix}chatgroup.groupid = i.parent or ${mysqlprefix}chatgroup.parent = i.parent "
|
||||||
|
: ""
|
||||||
|
) .
|
||||||
|
" order by iweight, vclocalname";
|
||||||
return get_sorted_child_groups_(select_multi_assoc($query, $link));
|
return get_sorted_child_groups_(select_multi_assoc($query, $link));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function get_groups($link, $checkaway)
|
||||||
|
{
|
||||||
|
return get_groups_($link, NULL, $checkaway);
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_groups_for_operator($link, $operator, $checkaway)
|
||||||
|
{
|
||||||
|
return get_groups_($link, $operator, $checkaway);
|
||||||
|
}
|
||||||
|
|
||||||
function get_operator_groupids($operatorid)
|
function get_operator_groupids($operatorid)
|
||||||
{
|
{
|
||||||
global $mysqlprefix;
|
global $mysqlprefix;
|
||||||
|
@ -478,6 +478,8 @@ settings.enableban.description=Using it you can block attacks from specific IPs
|
|||||||
settings.enableban=Enable feature "Malicious Visitors"
|
settings.enableban=Enable feature "Malicious Visitors"
|
||||||
settings.enablegroups.description=Use it to have separate queues for different questions.
|
settings.enablegroups.description=Use it to have separate queues for different questions.
|
||||||
settings.enablegroups=Enable "Groups"
|
settings.enablegroups=Enable "Groups"
|
||||||
|
settings.enablegroupsisolation=Enable "Groups Isolation"
|
||||||
|
settings.enablegroupsisolation.description=Use it to completely isolate groups from each other.
|
||||||
settings.enablepresurvey.description=Forces the user to fill out a special form to start a chat.
|
settings.enablepresurvey.description=Forces the user to fill out a special form to start a chat.
|
||||||
settings.enablepresurvey=Enable "Pre-chat survey"
|
settings.enablepresurvey=Enable "Pre-chat survey"
|
||||||
settings.enablessl.description=Please note that your web server should be configured to support https requests.
|
settings.enablessl.description=Please note that your web server should be configured to support https requests.
|
||||||
|
@ -476,6 +476,8 @@ settings.enableban.description=
|
|||||||
settings.enableban=Включить функцию "Нежелательные посетители"
|
settings.enableban=Включить функцию "Нежелательные посетители"
|
||||||
settings.enablegroups.description=Позволяет объединять операторов в группы и организовывать для них отдельные очереди.
|
settings.enablegroups.description=Позволяет объединять операторов в группы и организовывать для них отдельные очереди.
|
||||||
settings.enablegroups=Включить функцию "Группы"
|
settings.enablegroups=Включить функцию "Группы"
|
||||||
|
settings.enablegroupsisolation=Âêëþ÷èòü ôóíêöèþ "Èçîëÿöèÿ ãðóïï"
|
||||||
|
settings.enablegroupsisolation.description=Ïîçâîëÿåò ïîëíîñòüþ èçîëèðîâàòü ãðóïïû äðóã îò äðóãà.
|
||||||
settings.enablepresurvey.description=Предлагает посетителю заполнить специальную форму перед началом чата.
|
settings.enablepresurvey.description=Предлагает посетителю заполнить специальную форму перед началом чата.
|
||||||
settings.enablepresurvey=Включить "Опрос перед началом диалога"
|
settings.enablepresurvey=Включить "Опрос перед началом диалога"
|
||||||
settings.enablessl.description=Ваш сервер должен быть настроен для обработки https запросов.
|
settings.enablessl.description=Ваш сервер должен быть настроен для обработки https запросов.
|
||||||
|
@ -123,7 +123,7 @@ start_html_output();
|
|||||||
|
|
||||||
$pparam = verifyparam("act", "/^(redirect)$/", "default");
|
$pparam = verifyparam("act", "/^(redirect)$/", "default");
|
||||||
if ($pparam == "redirect") {
|
if ($pparam == "redirect") {
|
||||||
setup_redirect_links($threadid, $token);
|
setup_redirect_links($threadid, $operator, $token);
|
||||||
expand("../styles/dialogs", getchatstyle(), "redirect.tpl");
|
expand("../styles/dialogs", getchatstyle(), "redirect.tpl");
|
||||||
} else {
|
} else {
|
||||||
expand("../styles/dialogs", getchatstyle(), "chat.tpl");
|
expand("../styles/dialogs", getchatstyle(), "chat.tpl");
|
||||||
|
@ -61,7 +61,7 @@ if ($groupid) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$link = connect();
|
$link = connect();
|
||||||
$allgroups = get_all_groups($link);
|
$allgroups = in_isolation($operator)?get_all_groups_for_operator($operator, $link):get_all_groups($link);
|
||||||
close_connection($link);
|
close_connection($link);
|
||||||
$page['groups'] = array();
|
$page['groups'] = array();
|
||||||
$page['groups'][] = array('groupid' => '', 'vclocalname' => getlocal("page.gen_button.default_group"));
|
$page['groups'][] = array('groupid' => '', 'vclocalname' => getlocal("page.gen_button.default_group"));
|
||||||
|
@ -29,7 +29,9 @@ $page = array('agentId' => '');
|
|||||||
$errors = array();
|
$errors = array();
|
||||||
|
|
||||||
$options = array(
|
$options = array(
|
||||||
'enableban', 'usercanchangename', 'enablegroups', 'enablestatistics', 'enabletracking',
|
'enableban', 'usercanchangename',
|
||||||
|
'enablegroups', 'enablegroupsisolation',
|
||||||
|
'enablestatistics', 'enabletracking',
|
||||||
'enablessl', 'forcessl',
|
'enablessl', 'forcessl',
|
||||||
'enablepresurvey', 'surveyaskmail', 'surveyaskgroup', 'surveyaskmessage',
|
'enablepresurvey', 'surveyaskmail', 'surveyaskgroup', 'surveyaskmessage',
|
||||||
'enablepopupnotification', 'showonlineoperators',
|
'enablepopupnotification', 'showonlineoperators',
|
||||||
|
@ -92,7 +92,7 @@ if (isset($_GET['act'])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$page = array();
|
$page = array();
|
||||||
$page['allowedAgents'] = operator_get_all();
|
$page['allowedAgents'] = in_isolation($operator)?get_operators_from_adjacent_groups($operator):operator_get_all();
|
||||||
$page['canmodify'] = is_capable($can_administrate, $operator);
|
$page['canmodify'] = is_capable($can_administrate, $operator);
|
||||||
|
|
||||||
setlocale(LC_TIME, getstring("time.locale"));
|
setlocale(LC_TIME, getstring("time.locale"));
|
||||||
|
@ -36,11 +36,12 @@ function update_operator_groups($operatorid, $newvalue)
|
|||||||
close_connection($link);
|
close_connection($link);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$operator_in_isolation = in_isolation($operator);
|
||||||
|
|
||||||
$opId = verifyparam("op", "/^\d{1,9}$/");
|
$opId = verifyparam("op", "/^\d{1,9}$/");
|
||||||
$page = array('opid' => $opId);
|
$page = array('opid' => $opId);
|
||||||
$link = connect();
|
$link = connect();
|
||||||
$page['groups'] = get_all_groups($link);
|
$page['groups'] = $operator_in_isolation?get_all_groups_for_operator($operator, $link):get_all_groups($link);
|
||||||
close_connection($link);
|
close_connection($link);
|
||||||
$errors = array();
|
$errors = array();
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ if ($show == 'redirect' || $show == 'redirected' || $show == 'agentchat' || $sho
|
|||||||
'operatorid' => ($show == 'agentrochat' ? 2 : 1),
|
'operatorid' => ($show == 'agentrochat' ? 2 : 1),
|
||||||
));
|
));
|
||||||
if ($show == 'redirect') {
|
if ($show == 'redirect') {
|
||||||
setup_redirect_links(0, $show == 'agentrochat' ? 124 : 123);
|
setup_redirect_links(0, $operator, $show == 'agentrochat' ? 124 : 123);
|
||||||
} elseif ($show == 'redirected') {
|
} elseif ($show == 'redirected') {
|
||||||
$page['message'] = getlocal2("chat.redirected.content", array("Administrator"));
|
$page['message'] = getlocal2("chat.redirected.content", array("Administrator"));
|
||||||
}
|
}
|
||||||
|
@ -151,11 +151,11 @@ function print_pending_threads($groupids, $since)
|
|||||||
echo "</threads>";
|
echo "</threads>";
|
||||||
}
|
}
|
||||||
|
|
||||||
function print_operators()
|
function print_operators($operator)
|
||||||
{
|
{
|
||||||
global $webim_encoding;
|
global $webim_encoding, $settings;
|
||||||
echo "<operators>";
|
echo "<operators>";
|
||||||
$operators = operator_get_all();
|
$operators = in_isolation($operator)?get_operators_from_adjacent_groups($operator):operator_get_all();
|
||||||
|
|
||||||
foreach ($operators as $operator) {
|
foreach ($operators as $operator) {
|
||||||
if (!operator_is_online($operator))
|
if (!operator_is_online($operator))
|
||||||
@ -278,7 +278,7 @@ $groupids = $_SESSION["${mysqlprefix}operatorgroups"];
|
|||||||
start_xml_output();
|
start_xml_output();
|
||||||
echo '<update>';
|
echo '<update>';
|
||||||
if ($showonline) {
|
if ($showonline) {
|
||||||
print_operators();
|
print_operators($operator);
|
||||||
}
|
}
|
||||||
print_pending_threads($groupids, $since);
|
print_pending_threads($groupids, $since);
|
||||||
if ($showvisitors) {
|
if ($showvisitors) {
|
||||||
|
@ -45,6 +45,14 @@ function updateSSL() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateGroups(){
|
||||||
|
if($("#enablegroups").is(":checked")) {
|
||||||
|
$(".undergroups").show();
|
||||||
|
} else {
|
||||||
|
$(".undergroups").hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$(function(){
|
$(function(){
|
||||||
$("#enablepresurvey").change(function() {
|
$("#enablepresurvey").change(function() {
|
||||||
updateSurvey();
|
updateSurvey();
|
||||||
@ -52,8 +60,12 @@ $(function(){
|
|||||||
$("#enablessl").change(function() {
|
$("#enablessl").change(function() {
|
||||||
updateSSL();
|
updateSSL();
|
||||||
});
|
});
|
||||||
|
$("#enablegroups").change(function() {
|
||||||
|
updateGroups();
|
||||||
|
});
|
||||||
updateSurvey();
|
updateSurvey();
|
||||||
updateSSL();
|
updateSSL();
|
||||||
|
updateGroups();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<?php
|
<?php
|
||||||
@ -109,10 +121,19 @@ require_once('inc_errors.php');
|
|||||||
<div class="field">
|
<div class="field">
|
||||||
<div class="flabel"><?php echo getlocal('settings.enablegroups') ?></div>
|
<div class="flabel"><?php echo getlocal('settings.enablegroups') ?></div>
|
||||||
<div class="fvalue">
|
<div class="fvalue">
|
||||||
<input type="checkbox" name="enablegroups" value="on"<?php echo form_value_cb('enablegroups') ? " checked=\"checked\"" : "" ?><?php echo $page['canmodify'] ? "" : " disabled=\"disabled\"" ?>/>
|
<input id="enablegroups" type="checkbox" name="enablegroups" value="on"<?php echo form_value_cb('enablegroups') ? " checked=\"checked\"" : "" ?><?php echo $page['canmodify'] ? "" : " disabled=\"disabled\"" ?>/>
|
||||||
</div>
|
</div>
|
||||||
<div class="fdescr"> — <?php echo getlocal('settings.enablegroups.description') ?></div>
|
<div class="fdescr"> — <?php echo getlocal('settings.enablegroups.description') ?></div>
|
||||||
<br clear="all"/>
|
<br clear="all"/>
|
||||||
|
|
||||||
|
<div class="subfield undergroups">
|
||||||
|
<div class="flabel"><?php echo getlocal('settings.enablegroupsisolation') ?></div>
|
||||||
|
<div class="fvalue">
|
||||||
|
<input type="checkbox" name="enablegroupsisolation" value="on"<?php echo form_value_cb('enablegroupsisolation') ? " checked=\"checked\"" : "" ?><?php echo $page['canmodify'] ? "" : " disabled=\"disabled\"" ?>/>
|
||||||
|
</div>
|
||||||
|
<div class="fdescr"> — <?php echo getlocal('settings.enablegroupsisolation.description') ?></div>
|
||||||
|
<br clear="all"/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="field">
|
<div class="field">
|
||||||
|
Loading…
Reference in New Issue
Block a user