public function DraggableViewsSort::query in DraggableViews 2.0.x
Called to add the sort to a query.
Overrides SortPluginBase::query
File
- src/
Plugin/ views/ sort/ DraggableViewsSort.php, line 76
Class
- DraggableViewsSort
- Basic sort handler for Draggableviews Weight.
Namespace
Drupal\draggableviews\Plugin\views\sortCode
public function query() {
// We should variablise these somehow??
$base = 'draggableviews_structure';
$base_field = "entity_id";
// Grab our view/plugin reference.
list($view_id, $view_display_id) = $this
->splitViewSortDataOptions($this->options['draggable_views_reference']);
$def = $this->definition;
$def['table'] = $base;
$def['field'] = $base_field;
$def['left_table'] = $this->query->view->storage
->get('base_table');
$def['left_field'] = $this->query->view->storage
->get('base_field');
$def['adjusted'] = TRUE;
$def['extra'][] = [
'field' => 'view_name',
'value' => $view_id,
];
$def['extra'][] = [
'field' => 'view_display',
'value' => $view_display_id,
];
if (!empty($this->definition['extra'])) {
$def['extra'] = $this->definition['extra'];
}
if (!empty($def['join_id'])) {
$id = $def['join_id'];
}
else {
$id = 'draggableviews_with_args';
}
$join = Views::pluginManager('join')
->createInstance($id, $def);
// Use a short alias for this:
$alias = $def['table'];
$this->alias = $this->query
->addRelationship($alias, $join, $this->query->view->storage
->get('base_table'), $this->relationship);
if ($this->options['draggable_views_null_order'] == "before") {
$formula = "!ISNULL({$this->alias}.{$this->realField})";
}
else {
$formula = "ISNULL({$this->alias}.{$this->realField})";
}
// We add both to handle ordering of NULL values.
$this->query
->addOrderBy(NULL, $formula, $this->options['order'], $this->alias . "_" . $this->realField);
$this->query
->addOrderBy($this->alias, $this->realField, $this->options['order']);
}