BUG Remove handwritten SQL and use the ORM.

The custom SQL does not take subsites into account and breaks the CMS
on certain pages - under some circumstances the custom count will return
1 or more, while the set will be in fact empty because of augmentation.
This commit is contained in:
Mateusz Uzdowski 2012-12-05 10:27:12 +13:00
parent e5f206065e
commit c0751df54e

View File

@ -1709,27 +1709,15 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
/** /**
* Return the number of {@link DependentPages()} * Return the number of {@link DependentPages()}
* *
* @deprecated 3.1 Use DependentPages()->Count() instead.
*
* @param $includeVirtuals Set to false to exlcude virtual pages. * @param $includeVirtuals Set to false to exlcude virtual pages.
*/ */
public function DependentPagesCount($includeVirtuals = true) { public function DependentPagesCount($includeVirtuals = true) {
$links = DB::query("SELECT COUNT(*) FROM \"SiteTree_LinkTracking\" Deprecation::notice('3.1', 'Use SiteTree->DependentPages()->Count() instead.');
INNER JOIN \"SiteTree\" ON \"SiteTree\".\"ID\" = \"SiteTree_LinkTracking\".\"SiteTreeID\" return $this->DependentPages($includeVirtuals)->Count();
WHERE \"ChildID\" = $this->ID ")->value();
if($includeVirtuals && class_exists('VirtualPage')) {
$virtuals = DB::query("SELECT COUNT(*) FROM \"VirtualPage\"
INNER JOIN \"SiteTree\" ON \"SiteTree\".\"ID\" = \"VirtualPage\".\"ID\"
WHERE \"CopyContentFromID\" = $this->ID")->value();
} else {
$virtuals = 0;
}
$redirectors = DB::query("SELECT COUNT(*) FROM \"RedirectorPage\"
INNER JOIN \"SiteTree\" ON \"SiteTree\".\"ID\" = \"RedirectorPage\".\"ID\"
WHERE \"RedirectionType\" = 'Internal' AND \"LinkToID\" = $this->ID")->value();
return 0 + $links + $virtuals + $redirectors;
} }
/** /**
* Return all virtual pages that link to this page * Return all virtual pages that link to this page
*/ */
@ -1803,7 +1791,8 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
$dependentTable = new LiteralField('DependentNote', '<p></p>'); $dependentTable = new LiteralField('DependentNote', '<p></p>');
// Create a table for showing pages linked to this one // Create a table for showing pages linked to this one
$dependentPagesCount = $this->DependentPagesCount(); $dependentPages = $this->DependentPages();
$dependentPagesCount = $dependentPages->Count();
if($dependentPagesCount) { if($dependentPagesCount) {
$dependentColumns = array( $dependentColumns = array(
'Title' => $this->fieldLabel('Title'), 'Title' => $this->fieldLabel('Title'),
@ -1816,7 +1805,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
$dependentTable = GridField::create( $dependentTable = GridField::create(
'DependentPages', 'DependentPages',
false, false,
$this->DependentPages() $dependentPages
); );
$dependentTable->getConfig()->getComponentByType('GridFieldDataColumns') $dependentTable->getConfig()->getComponentByType('GridFieldDataColumns')
->setFieldFormatting(array( ->setFieldFormatting(array(