Skip to content
This repository has been archived by the owner on Nov 25, 2020. It is now read-only.

Commit

Permalink
getUsersCount auth.sql: use dibi ... again
Browse files Browse the repository at this point in the history
Signed-off-by: Etienne CHAMPETIER <etienne.champetier@fiducial.net>
  • Loading branch information
Etienne CHAMPETIER committed Apr 24, 2014
1 parent ff93826 commit 36c3aab
Showing 1 changed file with 17 additions and 33 deletions.
50 changes: 17 additions & 33 deletions core/src/plugins/auth.sql/class.sqlAuthDriver.php
Expand Up @@ -70,22 +70,22 @@ public function listUsersPaginated($baseGroup, $regexp, $offset, $limit)
$pairs = $res->fetchPairs('login', 'password');
return $pairs;
}

public function getUsersCount($baseGroup = "/", $regexp = "", $filterProperty = null, $filterValue = null)
{
// WITH PARENT
// SELECT * FROM ajxp_users INNER JOIN ajxp_user_rights ON ajxp_user_rights.login=ajxp_users.login WHERE ajxp_users.groupPath LIKE '/%' AND ajxp_user_rights.repo_uuid = 'ajxp.parent_user'
// SELECT COUNT(*) FROM ajxp_users AS u, ajxp_user_rights AS r WHERE u.groupPath LIKE '/%' AND r.login=u.login AND r.repo_uuid = 'ajxp.parent_user'
// WITH SPECIFIC PARENT 'username'
// SELECT * FROM ajxp_users INNER JOIN ajxp_user_rights ON ajxp_user_rights.login=ajxp_users.login WHERE ajxp_users.groupPath LIKE '/%' AND ajxp_user_rights.repo_uuid = 'ajxp.parent_user' AND ajxp_user_rights.rights = 'username'
// SELECT COUNT(*) FROM ajxp_users AS u, ajxp_user_rights AS r WHERE u.groupPath LIKE '/%' AND r.login=u.login AND r.repo_uuid = 'ajxp.parent_user' AND r.rights = 'username'
// WITHOUT PARENT
// SELECT * FROM ajxp_users WHERE NOT EXISTS (SELECT rid FROM ajxp_user_rights WHERE ajxp_user_rights.login=ajxp_users.login AND ajxp_user_rights.repo_uuid='ajxp.parent_user')
$select = "SELECT COUNT(*) FROM [ajxp_users]";
$inner = "INNER JOIN [ajxp_user_rights] ON [ajxp_user_rights].[login]=[ajxp_users].[login]";
// SELECT COUNT(*) FROM ajxp_users AS u WHERE NOT EXISTS (SELECT * FROM ajxp_user_rights AS c WHERE c.login=u.login AND c.repo_uuid='ajxp.parent_user')
$ands = array();
$select = "SELECT COUNT(*) FROM [ajxp_users] AS u WHERE %and";

$wheres = array();
if(!empty($regexp)){
$wheres[] = "[ajxp_users].[login] ".AJXP_Utils::regexpToLike($regexp);
$ands[] = array("[u.login] ".AJXP_Utils::regexpToLike($regexp), AJXP_Utils::cleanRegexp($regexp));
}
$wheres[] = "[ajxp_users].[groupPath] LIKE %like~";
$ands[] = array("[u.groupPath] LIKE %like~", $baseGroup);

if($filterProperty !== null && $filterValue !== null){
if($filterProperty == "parent"){
Expand All @@ -94,36 +94,20 @@ public function getUsersCount($baseGroup = "/", $regexp = "", $filterProperty =
$filterProperty = "ajxp.admin";
}
if($filterValue == AJXP_FILTER_EMPTY){
$wheres[] = "NOT EXISTS (SELECT rid FROM [ajxp_user_rights] WHERE [ajxp_user_rights].[login]=[ajxp_users].login AND [ajxp_user_rights].[repo_uuid]='$filterProperty')";
$userCond = implode(" AND ", $wheres);
$q = $select." WHERE ".$userCond;
$ands[] = array("NOT EXISTS (SELECT * FROM [ajxp_user_rights] AS c WHERE [c.login]=[u.login] AND [c.repo_uuid] = %s)",$filterProperty);
}else if($filterValue == AJXP_FILTER_NOT_EMPTY){
$wheres[] = "[ajxp_user_rights].[repo_uuid] = '$filterProperty'";
$userCond = implode(" AND ", $wheres);
$q = $select." ".$inner." WHERE ".$userCond;
$select = "SELECT COUNT(*) FROM [ajxp_users] AS u, [ajxp_user_rights] AS r WHERE %and";
$ands[] = array("[r.login]=[u.login]");
$ands[] = array("[ajxp_user_rights].[repo_uuid] = %s", $filterProperty);
}else{
$wheres[] = "[ajxp_user_rights].[repo_uuid] = '$filterProperty'";
if(strpos($filterValue, "%")!= false){
$wheres[] = "[ajxp_user_rights].[rights] LIKE '$filterValue'";
}else{
$wheres[] = "[ajxp_user_rights].[rights] = '$filterValue'";
}
$userCond = implode(" AND ", $wheres);
$q = $select." ".$inner." WHERE ".$userCond;
$select = "SELECT COUNT(*) FROM [ajxp_users] AS u, [ajxp_user_rights] AS r WHERE %and";
$ands[] = array("[r.login]=[u.login]");
$ands[] = array("[r.repo_uuid] = %s", $filterProperty);
$ands[] = array("[r.rights] ".AJXP_Utils::likeToLike($filterValue), AJXP_Utils::cleanLike($filterValue));
}
}else{
$userCond = implode(" AND ", $wheres);
$q = $select." WHERE ".$userCond;
}


if (!empty($regexp)) {
$res = dibi::query($q, AJXP_Utils::cleanRegexp($regexp), $baseGroup);
//$res = dibi::query("SELECT COUNT(*) FROM [ajxp_users] WHERE [login] ".AJXP_Utils::regexpToLike($regexp)." AND [groupPath] LIKE %like~", AJXP_Utils::cleanRegexp($regexp), $baseGroup) ;
} else {
$res = dibi::query($q, $baseGroup);
//$res = dibi::query("SELECT COUNT(*) FROM [ajxp_users] WHERE [groupPath] LIKE %like~", $baseGroup);
}
$res = dibi::query($select, $ands);
return $res->fetchSingle();
}

Expand Down

0 comments on commit 36c3aab

Please sign in to comment.