From f3fb485ffbe2b2b0e943f4f508a9bf4a6b8215da Mon Sep 17 00:00:00 2001 From: Daniel Subiabre Date: Fri, 5 Sep 2025 20:50:39 +0200 Subject: [PATCH] Pump ProjectSupports along with invests --- src/Benzina/CheckoutsPump.php | 69 +++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/src/Benzina/CheckoutsPump.php b/src/Benzina/CheckoutsPump.php index 6a77c70..a68e6f6 100644 --- a/src/Benzina/CheckoutsPump.php +++ b/src/Benzina/CheckoutsPump.php @@ -8,6 +8,7 @@ use App\Entity\Gateway\Checkout; use App\Entity\Gateway\Tracking; use App\Entity\Money; use App\Entity\Project\Project; +use App\Entity\Project\Support; use App\Entity\Tipjar; use App\Entity\User\User; use App\Gateway\ChargeStatus; @@ -20,6 +21,7 @@ use App\Gateway\Paypal\PaypalGateway; use App\Gateway\Stripe\StripeGateway; use App\Gateway\Wallet\WalletGateway; use App\Repository\Project\ProjectRepository; +use App\Repository\Project\SupportRepository; use App\Repository\TipjarRepository; use App\Repository\User\UserRepository; use App\Service\Gateway\CheckoutService; @@ -30,6 +32,7 @@ use Goteo\Benzina\Pump\PumpInterface; class CheckoutsPump implements PumpInterface { use ArrayPumpTrait; + use DatabasePumpTrait; use DoctrinePumpTrait; use CheckoutsPumpTrait; @@ -51,6 +54,7 @@ class CheckoutsPump implements PumpInterface public function __construct( private UserRepository $userRepository, private ProjectRepository $projectRepository, + private SupportRepository $supportRepository, private TipjarRepository $tipjarRepository, private CheckoutService $checkoutService, ) {} @@ -145,6 +149,17 @@ class CheckoutsPump implements PumpInterface $charge->addTransaction($transaction); + if ($project) { + $support = $this->getSupport($charge); + $support->setProject($project); + $support->setOrigin($checkout->getOrigin()); + $support->addTransaction($transaction); + $support->setAnonymous($this->getSupportAnon($record, $support)); + $support->setMessage($this->getSupportMessage($record, $support, $context)); + + $this->entityManager->persist($support); + } + if ($charge->getStatus() !== ChargeStatus::Refunded) { continue; } @@ -175,6 +190,49 @@ class CheckoutsPump implements PumpInterface return $this->projectRepository->findOneBy(['migratedId' => $record['project']]); } + private function getSupport(Charge $charge): Support + { + $support = $this->supportRepository->findOneBy([ + 'origin' => $charge->getCheckout()->getOrigin()->getId(), + 'project' => $charge->getTarget()->getOwner()->getId(), + ]); + + if ($support) { + return $support; + } + + return new Support(); + } + + private function getSupportAnon(array $record, Support $support): bool + { + if ($record['anonymous'] === 1) { + return true; + } + + if ($support->isAnonymous()) { + return true; + } + + return false; + } + + private function getSupportMessage(array $record, Support $support, array $context): ?string + { + $message = $support->getMessage(); + $msg = $this->getInvestMsg($record, $context); + + if (!$msg || empty($msg['msg'])) { + return $message; + } + + if (!$message) { + return $msg['msg']; + } + + return \sprintf("\n***\n%s", $msg['msg']); + } + private function getPlatformTipjar(): Tipjar { $tipjar = $this->tipjarRepository->findOneBy(['name' => self::PLATFORM_TIPJAR_NAME]); @@ -192,6 +250,17 @@ class CheckoutsPump implements PumpInterface return $tipjar; } + private function getInvestMsg(array $record, array $context) + { + $query = $this->getDbConnection($context)->prepare( + 'SELECT * FROM `invest_msg` m WHERE m.invest = :invest' + ); + + $query->execute(['invest' => $record['id']]); + + return $query->fetch(\PDO::FETCH_ASSOC); + } + private function getChargeType(array $record): ChargeType { if (\in_array($record['method'], ['stripe_subscription'])) {