BUGFIX Fixed SQL queries that don't work when ANSI SQL is enabled

BUGFIX Fixed MySQL specific query in SubsiteAdmin and replaced with ORM operations instead to work independent of the database used
This commit is contained in:
Sean Harvey 2009-07-14 01:41:51 +00:00
parent 2b70ef13ea
commit 35078375f7
3 changed files with 72 additions and 21 deletions

View File

@ -74,7 +74,7 @@ class LeftAndMainSubsites extends Extension {
$mainSiteTitle = "Groups accessing all sites"; break;
case "CMSMain":
// If there's a default site then main site has no meaning
if(!DataObject::get_one('Subsite',"`DefaultSite` AND `IsPublic`")) {
if(!DataObject::get_one('Subsite', "DefaultSite = 1 AND IsPublic = 1")) {
$mainSiteTitle = "Main site";
}
break;

View File

@ -340,6 +340,17 @@ JS;
$SQL_permissionCodes = join("','", $SQL_permissionCodes);
if(defined('Database::USE_ANSI_SQL')) {
return DataObject::get(
'Member',
"\"Group\".\"SubsiteID\" = $this->ID AND \"Permission\".\"Code\" IN ('$SQL_permissionCodes')",
'',
"LEFT JOIN \"Group_Members\" ON \"Member\".\"ID\" = \"Group_Members\".\"MemberID\"
LEFT JOIN \"Group\" ON \"Group\".\"ID\" = \"Group_Members\".\"GroupID\"
LEFT JOIN \"Permission\" ON \"Permission\".\"GroupID\" = \"Group\".\"ID\""
);
}
return DataObject::get(
'Member',
"`Group`.`SubsiteID` = $this->ID AND `Permission`.`Code` IN ('$SQL_permissionCodes')",
@ -363,6 +374,16 @@ JS;
return DataObject::get('Subsite');
}
if(defined('Database::USE_ANSI_SQL')) {
return DataObject::get(
'Subsite',
"\"MemberID\" = {$member->ID}",
'',
"LEFT JOIN \"Group\" ON \"Subsite\".\"ID\" = \"SubsiteID\"
LEFT JOIN \"Group_Members\" ON \"Group\".\"ID\" = \"Group_Members\".\"GroupID\""
);
}
return DataObject::get(
'Subsite',
"MemberID = {$member->ID}",
@ -388,18 +409,27 @@ JS;
$SQL_perms = join("','", $SQLa_perm);
$memberID = (int)$member->ID;
$groupCount = DB::query("
SELECT COUNT(`Permission`.`ID`)
FROM `Permission`
INNER JOIN `Group` ON `Group`.`ID` = `Permission`.`GroupID` AND `Group`.`SubsiteID` = 0
INNER JOIN `Group_Members` USING(`GroupID`)
WHERE
`Permission`.`Code` IN ('$SQL_perms')
AND `MemberID` = {$memberID}
")->value();
if(defined('Database::USE_ANSI_SQL')) {
$groupCount = DB::query("
SELECT COUNT(\"Permission\".\"ID\")
FROM \"Permission\"
INNER JOIN \"Group\" ON \"Group\".\"ID\" = \"Permission\".\"GroupID\" AND \"Group\".\"SubsiteID\" = 0
INNER JOIN \"Group_Members\" USING(\"GroupID\")
WHERE \"Permission\".\"Code\" IN ('$SQL_perms') AND \"MemberID\" = {$memberID}
")->value();
} else {
$groupCount = DB::query("
SELECT COUNT(`Permission`.`ID`)
FROM `Permission`
INNER JOIN `Group` ON `Group`.`ID` = `Permission`.`GroupID` AND `Group`.`SubsiteID` = 0
INNER JOIN `Group_Members` USING(`GroupID`)
WHERE
`Permission`.`Code` IN ('$SQL_perms')
AND `MemberID` = {$memberID}
")->value();
}
return ($groupCount > 0);
}
function createInitialRecords() {
@ -463,7 +493,20 @@ JS;
$templateClassList = "'" . implode("', '", ClassInfo::subclassesFor("Subsite_Template")) . "'";
$subsites = DataObject::get(
if(defined('Database::USE_ANSI_SQL')) {
return DataObject::get(
'Subsite',
"\"Group_Members\".\"MemberID\" = $member->ID
AND \"Permission\".\"Code\" IN ($SQL_codes, 'ADMIN')
AND (\"Subdomain\" IS NOT NULL OR \"Subsite\".\"ClassName\" IN ($templateClassList)) AND \"Subsite\".\"Title\" != ''",
'',
"LEFT JOIN \"Group\" ON (\"SubsiteID\" = \"Subsite\".\"ID\" OR \"SubsiteID\" = 0)
LEFT JOIN \"Group_Members\" ON \"Group_Members\".\"GroupID\" = \"Group\".\"ID\"
LEFT JOIN \"Permission\" ON \"Group\".\"ID\" = \"Permission\".\"GroupID\""
);
}
return DataObject::get(
'Subsite',
"`Group_Members`.`MemberID` = $member->ID
AND `Permission`.`Code` IN ($SQL_codes, 'ADMIN')
@ -473,8 +516,6 @@ JS;
LEFT JOIN `Group_Members` ON `Group_Members`.`GroupID`=`Group`.`ID`
LEFT JOIN `Permission` ON `Group`.`ID`=`Permission`.`GroupID`"
);
return $subsites;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -38,15 +38,25 @@ class SubsiteAdmin extends GenericDataAdmin {
$where = '';
if(isset($data['Name']) && $data['Name']) {
$SQL_name = Convert::raw2sql($data['Name']);
$where = "`Title` LIKE '%$SQL_name%'";
$where = "Title LIKE '%$SQL_name%'";
} else {
$where = "`Title` != ''";
$where = "Title != ''";
}
$intranets = DataObject::get('Subsite', $where, "if(ClassName = 'Subsite_Template',0,1), Title");
if(!$intranets)
return null;
$intranets = null;
$intranets = DataObject::get('Subsite_Template', $where, 'Title');
$subsites = DataObject::get('Subsite', $where, 'Title');
if($intranets) {
$intranets->merge($subsites);
} else {
$intranets = $subsites;
}
if(!$intranets) return null;
$intranets->removeDuplicates();
$html = "<table class=\"ResultTable\"><thead><tr><th>Name</th><th>Domain</th></tr></thead><tbody>";
$numIntranets = 0;