Commit 6a927986 authored by Nic Rodgers's avatar Nic Rodgers Committed by Tyler Struyk
Browse files

Issue #2903567 by zanvidmar, nicrodgers, Rolf van de Krol, friera,...

Issue #2903567 by zanvidmar, nicrodgers, Rolf van de Krol, friera, johnnybgoode, mErilainen, iStryker: Args not working
parent 606c58ef
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -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'],
@@ -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();
@@ -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();

@@ -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'],
      ];
+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);
  }

}