src/AdminSections/Transactions/TransactionsVoter.php line 10

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace PPAdmin\AdminSections\Transactions;
  3. use PlnaPenezenka\PPSDKBundle\Doctrine\Entity\Administrator;
  4. use PlnaPenezenka\PPSDKBundle\Doctrine\Entity\Common\DefaultEntity;
  5. use PlnaPenezenka\PPSDKBundle\Doctrine\Entity\Transaction;
  6. use PPAdmin\AdminSections\AdminSectionsList;
  7. use PPAdmin\Security\AbstractAdminGridSectionVoter;
  8. class TransactionsVoter extends AbstractAdminGridSectionVoter
  9. {
  10.     const SECTION_PERMISSION_CONFIRM_TRANSACTION '.confirm-transaction';
  11.     const SECTION_PERMISSION_REVERT_TRANSACTION_CONFIRM '.revert-transaction-confirm';
  12.     const SECTION_PERMISSION_ABORT_TRANSACTION '.abort-transaction';
  13.     const SECTION_PERMISSION_REVERT_TRANSACTION_ABORT '.revert-transaction-abort';
  14.     public static function getSectionIdentifier(): string
  15.     {
  16.         return AdminSectionsList::TRANSACTIONS;
  17.     }
  18.     function canDeleteRecord(Administrator $adminDefaultEntity $record): bool
  19.     {
  20.         if(!parent::canDeleteRecord($admin$record)){
  21.             return false;
  22.         }
  23.         /** @var $record Transaction */
  24.         if(!$record->created_by_admin || $record->confirmed){
  25.             // only human-created may be deleted before confirmed
  26.             return false;
  27.         }
  28.         return true;
  29.     }
  30.     protected function voteOnSectionPermission(Administrator $adminstring $section_permission$subject null): bool
  31.     {
  32.         return match($section_permission) {
  33.             self::SECTION_PERMISSION_CONFIRM_TRANSACTION => $this->canConfirmTransaction($admin$subject),
  34.             self::SECTION_PERMISSION_REVERT_TRANSACTION_CONFIRM => $this->canRevertTransactionConfirm($admin$subject),
  35.             self::SECTION_PERMISSION_ABORT_TRANSACTION => $this->canAbortTransaction($admin$subject),
  36.             self::SECTION_PERMISSION_REVERT_TRANSACTION_ABORT => $this->canRevertTransactionAbort($admin$subject),
  37.             default => parent::voteOnSectionPermission($admin$section_permission$subject)
  38.         };
  39.     }
  40.     function canEditRecord(Administrator $adminDefaultEntity $record): bool
  41.     {
  42.         /** @var Transaction $record */
  43.         if(!parent::canEditRecord($admin$record)){
  44.             return false;
  45.         }
  46.         return !$record->confirmed && !$record->aborted && !$record->paid;
  47.     }
  48.     function canConfirmTransaction(Administrator $adminTransaction $transaction): bool
  49.     {
  50.         return parent::canEditRecord($admin$transaction) && !$transaction->confirmed && !$transaction->aborted;
  51.     }
  52.     function canRevertTransactionConfirm(Administrator $adminTransaction $transaction): bool
  53.     {
  54.         return parent::canEditRecord($admin$transaction) && $transaction->confirmed && !$transaction->paid;
  55.     }
  56.     function canAbortTransaction(Administrator $adminTransaction $transaction): bool
  57.     {
  58.         return parent::canEditRecord($admin$transaction) && !$transaction->confirmed && !$transaction->aborted;
  59.     }
  60.     function canRevertTransactionAbort(Administrator $adminTransaction $transaction): bool
  61.     {
  62.         return parent::canEditRecord($admin$transaction) && $transaction->aborted;
  63.     }
  64. }