diff --git a/code/Controllers/CMSSiteTreeFilter.php b/code/Controllers/CMSSiteTreeFilter.php index c5b57fc6..fed32335 100644 --- a/code/Controllers/CMSSiteTreeFilter.php +++ b/code/Controllers/CMSSiteTreeFilter.php @@ -8,6 +8,7 @@ use SilverStripe\Core\ClassInfo; use SilverStripe\Core\Object; use SilverStripe\Forms\DateField; use SilverStripe\ORM\DataList; +use SilverStripe\ORM\DataObject; use SilverStripe\ORM\SS_List; use SilverStripe\ORM\Versioning\Versioned; @@ -212,8 +213,9 @@ abstract class CMSSiteTreeFilter extends Object implements LeftAndMain_SearchFil break; default: - if($sng->hasDatabaseField($name)) { - $filter = $sng->dbObject($name)->defaultSearchFilter(); + $field = $sng->dbObject($name); + if($field) { + $filter = $field->defaultSearchFilter(); $filter->setValue($val); $query = $query->alterDataQuery(array($filter, 'apply')); } diff --git a/code/Model/SiteTreeLinkTracking.php b/code/Model/SiteTreeLinkTracking.php index c3459cc9..1a2561c6 100644 --- a/code/Model/SiteTreeLinkTracking.php +++ b/code/Model/SiteTreeLinkTracking.php @@ -4,6 +4,7 @@ namespace SilverStripe\CMS\Model; use SilverStripe\Core\Injector\Injector; use SilverStripe\ORM\DataExtension; +use SilverStripe\ORM\DataObject; use SilverStripe\ORM\FieldType\DBHTMLText; use SilverStripe\ORM\ManyManyList; use SilverStripe\ORM\Versioning\Versioned; @@ -168,7 +169,10 @@ class SiteTreeLinkTracking extends DataExtension { } // Update the "LinkTracking" many_many - if($record->ID && $record->manyManyComponent('LinkTracking') && ($tracker = $record->LinkTracking())) { + if($record->ID + && $record->getSchema()->manyManyComponent(get_class($record), 'LinkTracking') + && ($tracker = $record->LinkTracking()) + ) { $tracker->removeByFilter(array( sprintf('"FieldName" = ? AND "%s" = ?', $tracker->getForeignKey()) => array($fieldName, $record->ID) @@ -180,7 +184,10 @@ class SiteTreeLinkTracking extends DataExtension { } // Update the "ImageTracking" many_many - if($record->ID && $record->manyManyComponent('ImageTracking') && ($tracker = $record->ImageTracking())) { + if($record->ID + && $record->getSchema()->manyManyComponent(get_class($record), 'ImageTracking') + && ($tracker = $record->ImageTracking()) + ) { $tracker->removeByFilter(array( sprintf('"FieldName" = ? AND "%s" = ?', $tracker->getForeignKey()) => array($fieldName, $record->ID) @@ -208,7 +215,7 @@ class SiteTreeLinkTracking extends DataExtension { $this->owner->HasBrokenFile = false; // Build a list of HTMLText fields - $allFields = $this->owner->db(); + $allFields = DataObject::getSchema()->fieldSpecs($this->owner); $htmlFields = array(); foreach($allFields as $field => $fieldSpec) { $fieldObj = $this->owner->dbObject($field); diff --git a/code/Model/VirtualPage.php b/code/Model/VirtualPage.php index a22da5d9..542a33ce 100644 --- a/code/Model/VirtualPage.php +++ b/code/Model/VirtualPage.php @@ -87,7 +87,7 @@ class VirtualPage extends Page { } // Diff db with non-virtual fields - $fields = array_keys($record->db()); + $fields = array_keys(static::getSchema()->fieldSpecs($record)); $nonVirtualFields = $this->getNonVirtualisedFields(); return array_diff($fields, $nonVirtualFields); }