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(); } }