BUGFIX Fixed SQL queries with backticks that don't need them, and fixed queries on decorators that require double quote escaping

This commit is contained in:
Sean Harvey 2009-07-13 23:10:00 +00:00
parent 6e1499822f
commit acbfe35f4d
4 changed files with 35 additions and 21 deletions

View File

@ -48,7 +48,12 @@ class FileSubsites extends DataObjectDecorator {
// The foreach is an ugly way of getting the first key :-)
foreach($query->from as $tableName => $info) {
$query->where[] = "`$tableName`.SubsiteID IN (0, $subsiteID)";
$where = "`$tableName`.SubsiteID IN (0, $subsiteID)";
if(defined('Database::USE_ANSI_SQL')) {
$where = "\"$tableName\".\"SubsiteID\" IN (0, $subsiteID)";
}
$query->where[] = $where;
break;
}

View File

@ -77,7 +77,12 @@ class GroupSubsites extends DataObjectDecorator {
// The foreach is an ugly way of getting the first key :-)
foreach($query->from as $tableName => $info) {
$query->where[] = "`$tableName`.SubsiteID IN (0, $subsiteID)";
$where = "`$tableName`.SubsiteID IN (0, $subsiteID)";
if(defined('Database::USE_ANSI_SQL')) {
$where = "\"$tableName\".\"SubsiteID\" IN (0, $subsiteID)";
}
$query->where[] = $where;
break;
}

View File

@ -48,14 +48,19 @@ class SiteTreeSubsites extends DataObjectDecorator {
// If you're querying by ID, ignore the sub-site - this is a bit ugly...
if(!$query->where || (strpos($query->where[0], ".\"ID\" = ") === false && strpos($query->where[0], ".`ID` = ") === false && strpos($query->where[0], ".ID = ") === false && strpos($query->where[0], "ID = ") !== 0)) {
if($context = DataObject::context_obj()) $subsiteID = (int)$context->SubsiteID;
else $subsiteID = (int)Subsite::currentSubsiteID();
if($context = DataObject::context_obj()) $subsiteID = (int) $context->SubsiteID;
else $subsiteID = (int) Subsite::currentSubsiteID();
// The foreach is an ugly way of getting the first key :-)
foreach($query->from as $tableName => $info) {
$where = "`$tableName`.SubsiteID IN ($subsiteID)";
if(defined('Database::USE_ANSI_SQL')) {
$where = "\"$tableName\".\"SubsiteID\" IN ($subsiteID)";
}
// The tableName should be SiteTree or SiteTree_Live...
if(strpos($tableName,'SiteTree') === false) break;
$query->where[] = "`$tableName`.SubsiteID IN ($subsiteID)";
$query->where[] = $where;
break;
}
}

View File

@ -317,13 +317,13 @@ JS;
$subsite = null;
if(self::$use_domain) {
$subsite = DataObject::get_one('Subsite',"`Subdomain` = '$SQL_subdomain' AND `Domain`='$SQL_domain' AND `IsPublic`=1");
$subsite = DataObject::get_one('Subsite', "Subdomain = '$SQL_subdomain' AND Domain = '$SQL_domain' AND IsPublic = 1");
}
if(!$subsite) {
$subsite = DataObject::get_one('Subsite',"`Subdomain` = '$SQL_subdomain' AND `IsPublic`");
$subsite = DataObject::get_one('Subsite', "Subdomain = '$SQL_subdomain' AND IsPublic = 1");
}
if(!$subsite) {
$subsite = DataObject::get_one('Subsite',"`DefaultSite` AND `IsPublic`");
$subsite = DataObject::get_one('Subsite', "DefaultSite = 1 AND IsPublic = 1");
}
if($subsite) {
@ -355,24 +355,23 @@ JS;
*
* @return DataObjectSet Subsite instances
*/
static function getSubsitesForMember( $member = null) {
static function getSubsitesForMember($member = null) {
if(!$member && $member !== FALSE) $member = Member::currentMember();
if(!$member) return false;
if(self::hasMainSitePermission($member)) {
return DataObject::get('Subsite');
} else {
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}",
'',
"LEFT JOIN `Group` ON `Subsite`.`ID` = `SubsiteID`
LEFT JOIN `Group_Members` ON `Group`.`ID` = `Group_Members`.`GroupID`"
);
}
static function hasMainSitePermission($member = null, $permissionCodes = array('ADMIN')) {
if(!is_array($permissionCodes))
user_error('Permissions must be passed to Subsite::hasMainSitePermission as an array', E_USER_ERROR);
@ -426,7 +425,7 @@ JS;
while(count($stack) > 0) {
list($sourceParentID, $destParentID) = array_pop($stack);
$children = Versioned::get_by_stage('Page', 'Live', "`ParentID`=$sourceParentID", '');
$children = Versioned::get_by_stage('Page', 'Live', "ParentID = $sourceParentID", '');
if($children) {
foreach($children as $child) {
@ -545,7 +544,7 @@ class Subsite_Template extends Subsite {
while(count($stack) > 0) {
list($sourceParentID, $destParentID) = array_pop($stack);
$children = Versioned::get_by_stage('SiteTree', 'Live', "`ParentID`=$sourceParentID", '');
$children = Versioned::get_by_stage('SiteTree', 'Live', "ParentID = $sourceParentID", '');
if($children) {
foreach($children as $child) {