civicrm_entity-8.x-3.0-beta1/src/Plugin/views/query/CivicrmSql.php

src/Plugin/views/query/CivicrmSql.php
<?php

namespace Drupal\civicrm_entity\Plugin\views\query;

use Drupal\civicrm\Civicrm;
use Drupal\Core\Database\Database;
use Drupal\Core\Database\Query\Select;
use Drupal\views\Plugin\views\display\DisplayPluginBase;
use Drupal\views\Plugin\views\query\Sql;
use Drupal\views\ViewExecutable;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Views query plugin for a CiviCRM Entity SQL query.
 *
 * @ingroup views_query_plugins
 *
 * @ViewsQuery(
 *   id = "civicrm_views_query",
 *   title = @Translation("CiviCRM SQL Query"),
 *   help = @Translation("Query will be generated and run using the Drupal database API against the CiviCRM database.")
 * )
 */
class CivicrmSql extends Sql {

  /**
   * The CiviCRM service.
   *
   * @var \Drupal\civicrm\Civicrm
   */
  protected $civicrm;

  /**
   * Set the CiviCRM service.
   *
   * @param \Drupal\civicrm\Civicrm $civicrm
   *   The CiviCRM service.
   *
   * @note we use this pattern to avoid constructor overrides.
   */
  public function setCivicrm(Civicrm $civicrm) {
    $this->civicrm = $civicrm;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
    assert($instance instanceof self);
    $instance->setCivicrm($container->get('civicrm'));
    return $instance;
  }

  /**
   * {@inheritdoc}
   */
  public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) {
    // Ensure that Drupal is aware of the CiviCRM database connection.
    // This should be added into the settings.php, but we provide a backwards
    // compatibility layer here.
    // @todo can we get this upstream in the CiviCRM module on initialize?
    $this->civicrm->initialize();
    $connection_name = drupal_valid_test_ua() ? 'civicrm_test' : 'civicrm';
    if (!Database::getConnectionInfo($connection_name)) {
      $civicrm_connection_info = Database::convertDbUrlToConnectionInfo(CIVICRM_DSN, DRUPAL_ROOT);
      Database::addConnectionInfo($connection_name, 'default', $civicrm_connection_info);
    }
    parent::init($view, $display, $options);
  }

  /**
   * {@inheritdoc}
   */
  public function query($get_count = FALSE) {
    $query = parent::query($get_count);
    assert($query instanceof Select);
    $connection = Database::getConnection();

    foreach ($query->getTables() as &$table) {
      // If the table is not prefixed with civicrm_, assume it is a Drupal table
      // and convert it to a fully qualified table name. But, make sure it has
      // not already been converted.
      // Also do not convert any drupal custom fields.
      if ((strpos($table['table'], 'civicrm_') !== 0 && strpos($table['table'], '.') === FALSE) || ((strpos($table['table'], 'civicrm_') === 0 && strpos($table['table'], '__') !== FALSE)) || strpos($table['table'], 'civicrm_value_') === 0) {
        $table['table'] = $connection->getFullQualifiedTableName($table['table']);
      }
    }
    return $query;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc