mutual_credit-5.0.x-dev/modules/signatures/src/Plugin/TransactionRelative/Signatory.php

modules/signatures/src/Plugin/TransactionRelative/Signatory.php
<?php

namespace Drupal\mcapi_signatures\Plugin\TransactionRelative;

use Drupal\mcapi\Entity\TransactionInterface;
use Drupal\mcapi\Plugin\TransactionRelativeInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Plugin\PluginBase;
use Drupal\Core\Database\Query\SelectInterface;
use Drupal\Core\Database\Query\Condition;

/**
 * Defines a payee relative to a Transaction entity.
 *
 * @TransactionRelative(
 *   id = "signatory",
 *   label = @Translation("Any signatory, (may cause duplicate results in views)"),
 *   description = @Translation("Users whose signature was required")
 * )
 */
class Signatory extends PluginBase implements TransactionRelativeInterface {

  /**
   * {@inheritdoc}
   */
  public function isRelative(TransactionInterface $transaction, AccountInterface $account) : bool {
    return isset($transaction->signatures[$account->id()]);
  }

  /**
   * {@inheritdoc}
   */
  public function queryCondition(SelectInterface $query, Condition $or_group, $uid) {
    $query->join(
      'mcapi_wallet',
      'signature_wallets',
      'mcapi_transaction.payer = signature_wallets.wid OR mcapi_transaction.payee = signature_wallets.wid'
    );
    $query->join(
      'mcapi_wallet__holder',
      'wallet_holder',
      "wallet_holder.entity_id = signature_wallets.wid AND wallet_holder.holder_target_type = 'user'"
    );
    $query->join(
      'users',
      'holder_users',
      "holder_users.uid = wallet_holder.holder_target_id"
    );
    $query->join(
      'mcapi_signatures',
      'signatories',
      'signatories.uid = holder_users.uid'
    );
    $or_group->condition('signatories.uid', $uid);
  }

  /**
   * {@inheritdoc}
   */
  public function queryConditionIndex(SelectInterface $query, Condition $or_group, $uid) {
    $query->join(
      'mcapi_wallet',
      'signature_wallets',
      'mcapi_transactions_index.wallet_id = signature_wallets.wid'
    );
    $query->join(
      'mcapi_wallet__holder',
      'wallet_holder',
      "wallet_holder.entity_id = signature_wallets.wid AND wallet_holder.holder_target_type = 'user'"
    );
    $query->
    $query->join(
      'users',
      'holder_users',
      "holder_users.uid = wallet_holder.holder_target_id"
    );
    $query->join(
      'mcapi_signatures',
      'signatories',
      'signatories.uid = holder_users.uid'
    );
    $or_group->condition('signatories.uid', $uid);
  }

  /**
   * {@inheritdoc}
   */
  public function getUsers(TransactionInterface $transaction) : array {
    return $this->database->select('mcapi_signatures', 's')->fields('s', ['uid'])
      ->condition('serial', $transaction->serial->value)
      ->execute()->fetchCol();
  }

}

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

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