From 0f02c4b5be789934119eec3e2d53dd5e855020a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=91cze=20Bence?= Date: Sun, 23 Apr 2023 19:58:33 +0200 Subject: [PATCH] RVRNEXT-5 update CommunityController with currency operations --- src/Controller/CommunityController.php | 90 +++++++++++++++++++++++++- 1 file changed, 88 insertions(+), 2 deletions(-) diff --git a/src/Controller/CommunityController.php b/src/Controller/CommunityController.php index 101b5c0..baa182d 100644 --- a/src/Controller/CommunityController.php +++ b/src/Controller/CommunityController.php @@ -3,9 +3,11 @@ use DateTime; use RVR\PersistentData\Model\Community; use RVR\PersistentData\Model\CommunityMember; +use RVR\PersistentData\Model\Currency; use RVR\PersistentData\Model\User; use RVR\Repository\CommunityRepository; use RVR\Repository\CommunityMemberRepository; +use RVR\Repository\CurrencyRepository; use RVR\Repository\UserRepository; use SokoWeb\Interfaces\Authentication\IAuthenticationRequired; use SokoWeb\Interfaces\Response\IContent; @@ -20,11 +22,14 @@ class CommunityController implements IAuthenticationRequired private CommunityMemberRepository $communityMemberRepository; + private CurrencyRepository $currencyRepository; + public function __construct() { $this->userRepository = new UserRepository(); $this->communityRepository = new CommunityRepository(); $this->communityMemberRepository = new CommunityMemberRepository(); + $this->currencyRepository = new CurrencyRepository(); } public function isAuthenticationRequired(): bool @@ -38,10 +43,15 @@ class CommunityController implements IAuthenticationRequired return null; } + $currencyCodes = []; + foreach ($this->getCurrencies($community) as $currency) { + $currencyCodes[] = $currency->getCode(); + } + return new HtmlContent('communities/community', [ 'community' => $community, 'members' => $this->getMembers($community), - 'currencyNames' => [], + 'currencyCodes' => $currencyCodes, 'upcomingEvents' => [], 'editPermission' => $ownCommunityMember->getOwner() ]); @@ -84,7 +94,6 @@ class CommunityController implements IAuthenticationRequired return $members; } - public function newMember(): ?IContent { if (!$this->checkPermission(\Container::$request->query('communityId'), true, $community, $ownCommunityMember)) { @@ -139,6 +148,83 @@ class CommunityController implements IAuthenticationRequired return new JsonContent(['success' => true]); } + public function getCurrenciesEdit(): ?IContent + { + if (!$this->checkPermission(\Container::$request->query('communityId'), true, $community, $ownCommunityMember)) { + return null; + } + + return new HtmlContent('communities/community_currencies', [ + 'community' => $community, + 'currencies' => $this->getCurrencies($community) + ]); + } + + private function getCurrencies(Community $community): array + { + $currencies = iterator_to_array($this->currencyRepository->getAllByCommunity($community)); + usort($currencies, function($a, $b) { + return strnatcmp($a->getCode(), $b->getCode()); + }); + return $currencies; + } + + public function newCurrency(): ?IContent + { + if (!$this->checkPermission(\Container::$request->query('communityId'), true, $community, $ownCommunityMember)) { + return null; + } + + $code = \Container::$request->post('code'); + $roundDigits = (int)\Container::$request->post('round_digits'); + if (strlen($code) === 0 || strlen($code) > 3 || $roundDigits < 0 || $roundDigits > 9) { + return new JsonContent([ + 'error' => ['errorText' => 'Please fill all required fields!'] + ]); + } + + $existingCurrency = $this->currencyRepository->getByCommunityAndCurrencyCode($community, $code); + if ($existingCurrency !== null) { + return new JsonContent([ + 'error' => ['errorText' => 'A currency with the same code exists for this community.'] + ]); + } + + $currency = new Currency(); + $currency->setCommunity($community); + $currency->setCode($code); + $currency->setRoundDigits($roundDigits); + \Container::$persistentDataManager->saveToDb($currency); + + return new JsonContent(['success' => true]); + } + + public function editCurrency(): ?IContent + { + if (!$this->checkPermission(\Container::$request->query('communityId'), true, $community, $ownCommunityMember)) { + return null; + } + + $currency = $this->currencyRepository->getById(\Container::$request->query('currency_id')); + $currency->setCode(\Container::$request->post('code')); + $currency->setRoundDigits((int)\Container::$request->post('round_digits')); + \Container::$persistentDataManager->saveToDb($currency); + + return new JsonContent(['success' => true]); + } + + public function deleteCurrency(): ?IContent + { + if (!$this->checkPermission(\Container::$request->query('communityId'), true, $community, $ownCommunityMember)) { + return null; + } + + $currency = $this->currencyRepository->getById(\Container::$request->query('currency_id')); + \Container::$persistentDataManager->deleteFromDb($currency); + + return new JsonContent(['success' => true]); + } + public function saveCommunity(): ?IContent { $communityId = \Container::$request->query('communityId');