Loading draggableviews.module +4 −2 Original line number Diff line number Diff line Loading @@ -68,7 +68,7 @@ function draggableviews_views_data_alter(&$data) { // Explain to every entity how to join with draggableviews_structure // table. $data['draggableviews_structure']['table']['join'][$base_table] = [ 'handler' => 'draggableviews_join_handler', 'join_id' => 'draggableviews_with_args', // Because this is a direct link it could be left out. 'left_table' => $base_table, 'left_field' => $entity_keys['id'], Loading Loading @@ -169,6 +169,7 @@ function draggableviews_views_submit(&$form, FormStateInterface $form_state) { $view = $form_state->getBuildInfo()['args'][0]; $view_name = $view->id(); $view_display = $view->current_display; $view_args = !empty($view->args) ? json_encode($view->args) : '[]'; $connection = Database::getConnection(); $transaction = $connection->startTransaction(); Loading @@ -178,6 +179,7 @@ function draggableviews_views_submit(&$form, FormStateInterface $form_state) { $connection->delete('draggableviews_structure') ->condition('view_name', $view_name) ->condition('view_display', $view_display) ->condition('args', $view_args) ->condition('entity_id', $item['id']) ->execute(); Loading @@ -185,7 +187,7 @@ function draggableviews_views_submit(&$form, FormStateInterface $form_state) { $record = [ 'view_name' => $view_name, 'view_display' => $view_display, 'args' => '[]', 'args' => $view_args, 'entity_id' => $item['id'], 'weight' => $item['weight'], ]; Loading src/Plugin/views/join/WithArgs.php 0 → 100644 +50 −0 Original line number Diff line number Diff line <?php namespace Drupal\draggableviews\Plugin\views\join; use Drupal\views\Plugin\views\join\JoinPluginBase; /** * Defines a join handler with arguments. * * @ingroup views_join_handlers * * @ViewsJoin("draggableviews_with_args") */ class WithArgs extends JoinPluginBase { /** * {@inheritdoc} */ public function buildJoin($select_query, $table, $view_query) { $view_args = !empty($view_query->view->args) ? $view_query->view->args : []; $context = [ 'select_query' => &$select_query, 'table' => &$table, 'view_query' => &$view_query, ]; \Drupal::moduleHandler()->alter('draggableviews_join_withargs', $view_args, $context); $view_args = json_encode($view_args); if (!isset($this->extra)) { $this->extra = []; } if (is_array($this->extra)) { $found = FALSE; foreach ($this->extra as $info) { if (empty(array_diff(array_keys($info), ['field', 'value'])) && $info['field'] == 'args' && $info['value'] == $view_args) { $found = TRUE; break; } } if (!$found) { $this->extra[] = ['field' => 'args', 'value' => $view_args]; } } parent::buildJoin($select_query, $table, $view_query); } } Loading
draggableviews.module +4 −2 Original line number Diff line number Diff line Loading @@ -68,7 +68,7 @@ function draggableviews_views_data_alter(&$data) { // Explain to every entity how to join with draggableviews_structure // table. $data['draggableviews_structure']['table']['join'][$base_table] = [ 'handler' => 'draggableviews_join_handler', 'join_id' => 'draggableviews_with_args', // Because this is a direct link it could be left out. 'left_table' => $base_table, 'left_field' => $entity_keys['id'], Loading Loading @@ -169,6 +169,7 @@ function draggableviews_views_submit(&$form, FormStateInterface $form_state) { $view = $form_state->getBuildInfo()['args'][0]; $view_name = $view->id(); $view_display = $view->current_display; $view_args = !empty($view->args) ? json_encode($view->args) : '[]'; $connection = Database::getConnection(); $transaction = $connection->startTransaction(); Loading @@ -178,6 +179,7 @@ function draggableviews_views_submit(&$form, FormStateInterface $form_state) { $connection->delete('draggableviews_structure') ->condition('view_name', $view_name) ->condition('view_display', $view_display) ->condition('args', $view_args) ->condition('entity_id', $item['id']) ->execute(); Loading @@ -185,7 +187,7 @@ function draggableviews_views_submit(&$form, FormStateInterface $form_state) { $record = [ 'view_name' => $view_name, 'view_display' => $view_display, 'args' => '[]', 'args' => $view_args, 'entity_id' => $item['id'], 'weight' => $item['weight'], ]; Loading
src/Plugin/views/join/WithArgs.php 0 → 100644 +50 −0 Original line number Diff line number Diff line <?php namespace Drupal\draggableviews\Plugin\views\join; use Drupal\views\Plugin\views\join\JoinPluginBase; /** * Defines a join handler with arguments. * * @ingroup views_join_handlers * * @ViewsJoin("draggableviews_with_args") */ class WithArgs extends JoinPluginBase { /** * {@inheritdoc} */ public function buildJoin($select_query, $table, $view_query) { $view_args = !empty($view_query->view->args) ? $view_query->view->args : []; $context = [ 'select_query' => &$select_query, 'table' => &$table, 'view_query' => &$view_query, ]; \Drupal::moduleHandler()->alter('draggableviews_join_withargs', $view_args, $context); $view_args = json_encode($view_args); if (!isset($this->extra)) { $this->extra = []; } if (is_array($this->extra)) { $found = FALSE; foreach ($this->extra as $info) { if (empty(array_diff(array_keys($info), ['field', 'value'])) && $info['field'] == 'args' && $info['value'] == $view_args) { $found = TRUE; break; } } if (!$found) { $this->extra[] = ['field' => 'args', 'value' => $view_args]; } } parent::buildJoin($select_query, $table, $view_query); } }