auctions-1.0.x-dev/modules/auctions_core/src/Plugin/Validation/Constraint/CurbBidsValidator.php
modules/auctions_core/src/Plugin/Validation/Constraint/CurbBidsValidator.php
<?php namespace Drupal\auctions_core\Plugin\Validation\Constraint; use Drupal\auctions_core\AuctionToolsTrait; use Drupal\Core\Datetime\DrupalDateTime; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintValidator; /** * Validates the Order Number constraint. */ class CurbBidsValidator extends ConstraintValidator { use AuctionToolsTrait; /** * Validator 2.5 and upwards compatible execution context. * * @var \Symfony\Component\Validator\Context\ExecutionContextInterface */ protected $context; /** * {@inheritdoc} */ public function validate($entity, Constraint $constraint) { if ($entity->hasField('amount') && $entity->hasField('item') && !$entity->get('item')->isEmpty()) { $item = $entity->getItemEntity(); $itemRelist = $item->getRelistCount(); $currentBids = $item->getBids($itemRelist, 3); $processBids = $item->summarizeBids($currentBids); $amount = floatval($entity->getAmount()); if (!empty($processBids[0]) && $processBids[0]['uid'] == $entity->getOwnerId()) { $this->context ->buildViolation($constraint->lastBidIsYours) ->atPath('amount') ->addViolation(); // Since this is the heaviest rule: check for it first, thenreturn. return NULL; } $itemPriceStarting = $item->getPriceStarting(); $itemWorkflow = $item->getWorkflow(); // Check if the value is an number. if ($itemWorkflow == 3 || $itemWorkflow == 4) { $this->context ->buildViolation($constraint->auctionFinished) ->atPath('amount') ->addViolation(); } if ($itemWorkflow == 0) { $this->context ->buildViolation($constraint->auctionNew) ->atPath('amount') ->addViolation(); } // If is past end time. @page load vs submit post. $now = new DrupalDateTime('now'); $auctionDates = $item->getDate(); $getUserTimezone = date_default_timezone_get(); $userTimezone = new \DateTimeZone($getUserTimezone); $auctionEnds = DrupalDateTime::createFromFormat('Y-m-d\TH:i:s', $auctionDates['end'], $this->auctionDefaultTimeZone())->setTimezone($userTimezone)->format('U'); if ($now->format('U') > $auctionEnds) { $this->context ->buildViolation($constraint->auctionHasExpired, ['%value' => $auctionDates['end']]) ->atPath('amount') ->addViolation(); } // If isn't higher than last/threshold. if (!empty($processBids[0]) && $amount < $processBids[0]['amount']) { $this->context ->buildViolation($constraint->higherThanLastBid, ['%value' => $thresholdDiff]) ->atPath('amount') ->addViolation(); } } } }