mirror of
https://github.com/silverstripe/silverstripe-subsites
synced 2024-06-26 06:29:31 +02:00
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:
parent
2b70ef13ea
commit
35078375f7
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue
Block a user