Fix groups isolation

See #131 for details
This commit is contained in:
Dmitriy Simushev 2015-08-05 14:22:21 +00:00
parent 9d81661cfe
commit 4c9f963aa7
2 changed files with 22 additions and 11 deletions

View File

@ -517,12 +517,15 @@ function get_all_groups()
function get_all_groups_for_operator($operator) function get_all_groups_for_operator($operator)
{ {
$db = Database::getInstance(); $db = Database::getInstance();
$query = "SELECT g.groupid AS groupid, g.parent, g.vclocalname, g.vclocaldescription " $query = "SELECT DISTINCT g.groupid AS groupid, g.parent, g.vclocalname, g.vclocaldescription "
. "FROM {opgroup} g, " . "FROM {opgroup} g, "
. "(SELECT DISTINCT parent FROM {opgroup}, {operatortoopgroup} " . "(SELECT {opgroup}.groupid, {opgroup}.parent FROM {opgroup}, {operatortoopgroup} "
. "WHERE {opgroup}.groupid = {operatortoopgroup}.groupid " . "WHERE {opgroup}.groupid = {operatortoopgroup}.groupid "
. "AND {operatortoopgroup}.operatorid = ?) i " . "AND {operatortoopgroup}.operatorid = ?) i "
. "WHERE g.groupid = i.parent OR g.parent = i.parent " . "WHERE g.groupid = i.parent "
. "OR g.parent = i.groupid "
. "OR (g.parent = i.parent AND g.parent IS NOT NULL) "
. "OR g.groupid = i.groupid "
. "ORDER BY vclocalname"; . "ORDER BY vclocalname";
$groups = $db->query( $groups = $db->query(
@ -590,7 +593,7 @@ function get_groups_($check_away, $operator, $order = null)
$values = array( $values = array(
':now' => time(), ':now' => time(),
); );
$query = "SELECT {opgroup}.groupid AS groupid, " $query = "SELECT DISTINCT {opgroup}.groupid AS groupid, "
. "{opgroup}.parent AS parent, " . "{opgroup}.parent AS parent, "
. "vclocalname, vclocaldescription, iweight, " . "vclocalname, vclocaldescription, iweight, "
. "(SELECT count(*) " . "(SELECT count(*) "
@ -614,12 +617,14 @@ function get_groups_($check_away, $operator, $order = null)
. " FROM {opgroup} "; . " FROM {opgroup} ";
if ($operator) { if ($operator) {
$query .= ", (SELECT DISTINCT parent " $query .= ", (SELECT {opgroup}.groupid, {opgroup}.parent "
. "FROM {opgroup}, {operatortoopgroup} " . "FROM {opgroup}, {operatortoopgroup} "
. "WHERE {opgroup}.groupid = {operatortoopgroup}.groupid " . "WHERE {opgroup}.groupid = {operatortoopgroup}.groupid "
. "AND {operatortoopgroup}.operatorid = :operatorid) i " . "AND {operatortoopgroup}.operatorid = :operatorid) i "
. "WHERE {opgroup}.groupid = i.parent OR {opgroup}.parent = i.parent "; . "WHERE {opgroup}.groupid = i.parent "
. "OR {opgroup}.parent = i.groupid "
. "OR ({opgroup}.parent = i.parent AND {opgroup}.parent IS NOT NULL) "
. "OR {opgroup}.groupid = i.groupid ";
$values[':operatorid'] = $operator['operatorid']; $values[':operatorid'] = $operator['operatorid'];
} }
@ -675,10 +680,13 @@ function get_operators_from_adjacent_groups($operator)
. "WHERE {operator}.operatorid = {operatortoopgroup}.operatorid " . "WHERE {operator}.operatorid = {operatortoopgroup}.operatorid "
. "AND {operatortoopgroup}.groupid IN (" . "AND {operatortoopgroup}.groupid IN ("
. "SELECT g.groupid from {opgroup} g, " . "SELECT g.groupid from {opgroup} g, "
. "(SELECT DISTINCT parent FROM {opgroup}, {operatortoopgroup} " . "(SELECT {opgroup}.groupid, {opgroup}.parent FROM {opgroup}, {operatortoopgroup} "
. "WHERE {opgroup}.groupid = {operatortoopgroup}.groupid " . "WHERE {opgroup}.groupid = {operatortoopgroup}.groupid "
. "AND {operatortoopgroup}.operatorid = :operatorid) i " . "AND {operatortoopgroup}.operatorid = :operatorid) i "
. "WHERE g.groupid = i.parent OR g.parent = i.parent " . "WHERE g.groupid = i.parent "
. "OR g.parent = i.groupid "
. "OR (g.parent = i.parent AND g.parent IS NOT NULL) "
. "OR g.groupid = i.groupid "
. ") ORDER BY vclogin"; . ") ORDER BY vclogin";
return $db->query( return $db->query(

View File

@ -204,10 +204,13 @@ function get_operators_list($options = array())
. "WHERE {operator}.operatorid = {operatortoopgroup}.operatorid " . "WHERE {operator}.operatorid = {operatortoopgroup}.operatorid "
. "AND {operatortoopgroup}.groupid IN (" . "AND {operatortoopgroup}.groupid IN ("
. "SELECT g.groupid FROM {opgroup} g, " . "SELECT g.groupid FROM {opgroup} g, "
. "(SELECT DISTINCT parent FROM {opgroup}, {operatortoopgroup} " . "(SELECT {opgroup}.groupid, {opgroup}.parent FROM {opgroup}, {operatortoopgroup} "
. "WHERE {opgroup}.groupid = {operatortoopgroup}.groupid " . "WHERE {opgroup}.groupid = {operatortoopgroup}.groupid "
. "AND {operatortoopgroup}.operatorid = :operatorid) i " . "AND {operatortoopgroup}.operatorid = :operatorid) i "
. "WHERE g.groupid = i.parent OR g.parent = i.parent " . "WHERE g.groupid = i.parent "
. "OR g.parent = i.groupid "
. "OR (g.parent = i.parent AND g.parent IS NOT NULL) "
. "OR g.groupid = i.groupid "
. ")") . ")")
. " ORDER BY " . $orderby; . " ORDER BY " . $orderby;