Merge pull request #163 from SomarDesignStudios/pulls/fix-lastedited-table

Finds base table to update LastEdited
This commit is contained in:
Marcus 2017-01-30 11:04:28 +11:00 committed by GitHub
commit d0cb616a40
1 changed files with 36 additions and 2 deletions

View File

@ -468,7 +468,16 @@ class GridFieldOrderableRows extends RequestHandler implements
// match to order the objects.
if (!$isVersioned) {
$sortTable = $this->getSortTable($list);
$additionalSQL = (!$list instanceof ManyManyList) ? ', "LastEdited" = NOW()' : '';
$additionalSQL = '';
$baseTable = $sortTable;
if(class_exists($sortTable)) {
$baseTable = singleton($sortTable)->baseTable();
}
$isBaseTable = ($baseTable == $sortTable);
if(!$list instanceof ManyManyList && $isBaseTable){
$additionalSQL = ', "LastEdited" = NOW()';
}
foreach($sortedIDs as $sortValue => $id) {
if($map[$id] != $sortValue) {
DB::query(sprintf(
@ -479,6 +488,14 @@ class GridFieldOrderableRows extends RequestHandler implements
$additionalSQL,
$this->getSortTableClauseForIds($list, $id)
));
if(!$isBaseTable) {
DB::query(sprintf(
'UPDATE "%s" SET "LastEdited" = NOW() WHERE %s',
$baseTable,
$this->getSortTableClauseForIds($list, $id)
));
}
}
}
} else {
@ -503,7 +520,16 @@ class GridFieldOrderableRows extends RequestHandler implements
$field = $this->getSortField();
$table = $this->getSortTable($list);
$clause = sprintf('"%s"."%s" = 0', $table, $this->getSortField());
$additionalSQL = (!$list instanceof ManyManyList) ? ', "LastEdited" = NOW()' : '';
$additionalSQL = '';
$baseTable = $table;
if(class_exists($table)) {
$baseTable = singleton($table)->baseTable();
}
$isBaseTable = ($baseTable == $table);
if(!$list instanceof ManyManyList && $isBaseTable){
$additionalSQL = ', "LastEdited" = NOW()';
}
foreach($list->where($clause)->column('ID') as $id) {
$max = DB::query(sprintf('SELECT MAX("%s") + 1 FROM "%s"', $field, $table));
@ -517,6 +543,14 @@ class GridFieldOrderableRows extends RequestHandler implements
$additionalSQL,
$this->getSortTableClauseForIds($list, $id)
));
if(!$isBaseTable) {
DB::query(sprintf(
'UPDATE "%s" SET "LastEdited" = NOW() WHERE %s',
$baseTable,
$this->getSortTableClauseForIds($list, $id)
));
}
}
}