BUGFIX Don't call LinkTracking/ImageTracking relationships in HTMLEditorField->saveInto() unless we have internal links/files to save. This helps to improve CMS saving times on records with many HTMLEditorField instances

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@114139 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
Ingo Schommer 2010-11-24 06:23:51 +00:00
parent 19f7484144
commit eeed9ce189

View File

@ -138,26 +138,33 @@ class HtmlEditorField extends TextareaField {
} }
// Save file & link tracking data. // Save file & link tracking data.
if($record->ID && $record->many_many('LinkTracking') && $tracker = $record->LinkTracking()) {
$filter = sprintf('"FieldName" = \'%s\' AND "SiteTreeID" = %d', $this->name, $record->ID);
DB::query("DELETE FROM \"$tracker->tableName\" WHERE $filter");
if($linkedPages) foreach($linkedPages as $item) { if($record->ID && $record->many_many('LinkTracking')) {
$filter = sprintf('"FieldName" = \'%s\' AND "SiteTreeID" = %d', $this->name, $record->ID);
DB::query("DELETE FROM \"SiteTree_LinkTracking\" WHERE $filter");
if($linkedPages) {
$tracker = $record->LinkTracking();
foreach($linkedPages as $item) {
$SQL_fieldName = Convert::raw2sql($this->name); $SQL_fieldName = Convert::raw2sql($this->name);
DB::query("INSERT INTO \"SiteTree_LinkTracking\" (\"SiteTreeID\",\"ChildID\", \"FieldName\") DB::query("INSERT INTO \"SiteTree_LinkTracking\" (\"SiteTreeID\",\"ChildID\", \"FieldName\")
VALUES ($record->ID, $item, '$SQL_fieldName')"); VALUES ($record->ID, $item, '$SQL_fieldName')");
} }
} }
}
if($record->ID && $record->many_many('ImageTracking') && $tracker = $record->ImageTracking()) { if($record->ID && $record->many_many('ImageTracking')) {
$filter = sprintf('"FieldName" = \'%s\' AND "SiteTreeID" = %d', $this->name, $record->ID); $filter = sprintf('"FieldName" = \'%s\' AND "SiteTreeID" = %d', $this->name, $record->ID);
DB::query("DELETE FROM \"$tracker->tableName\" WHERE $filter"); DB::query("DELETE FROM \"SiteTree_ImageTracking\" WHERE $filter");
$fieldName = $this->name; $fieldName = $this->name;
if($linkedFiles) foreach($linkedFiles as $item) { if($linkedFiles) {
$tracker = $record->ImageTracking();
foreach($linkedFiles as $item) {
$tracker->add($item, array('FieldName' => $this->name)); $tracker->add($item, array('FieldName' => $this->name));
} }
} }
}
$record->{$this->name} = $htmlValue->getContent(); $record->{$this->name} = $htmlValue->getContent();
} }