gifts = $gifts; $this->users = $users; } function renderUserGifts(int $user): void { $this->assertUserLoggedIn(); $user = $this->users->get($user); if(!$user || $user->isServiceAccount()) $this->notFound(); $this->template->user = $user; $this->template->page = $page = (int) ($this->queryParam("p") ?? 1); $this->template->count = $user->getGiftCount(); $this->template->iterator = $user->getGifts($page); $this->template->hideInfo = $this->user->id !== $user->getId(); } function renderGiftMenu(): void { $user = $this->users->get((int) ($this->queryParam("user") ?? 0)); if(!$user || $user->isServiceAccount()) $this->notFound(); $this->template->page = $page = (int) ($this->queryParam("p") ?? 1); $cats = $this->gifts->getCategories($page, NULL, $this->template->count); $this->template->user = $user; $this->template->iterator = $cats; $this->template->_template = "Gifts/Menu.xml"; } function renderGiftList(): void { $user = $this->users->get((int) ($this->queryParam("user") ?? 0)); $cat = $this->gifts->getCat((int) ($this->queryParam("pack") ?? 0)); if(!$user || !$cat) $this->flashFail("err", "Не удалось подарить", "Пользователь или набор не существуют."); $this->template->page = $page = (int) ($this->queryParam("p") ?? 1); $gifts = $cat->getGifts($page, null, $this->template->count); $this->template->user = $user; $this->template->cat = $cat; $this->template->gifts = iterator_to_array($gifts); $this->template->_template = "Gifts/Pick.xml"; } function renderConfirmGift(): void { $user = $this->users->get((int) ($this->queryParam("user") ?? 0)); $gift = $this->gifts->get((int) ($this->queryParam("elid") ?? 0)); $cat = $this->gifts->getCat((int) ($this->queryParam("pack") ?? 0)); if(!$user || !$cat || !$gift || !$cat->hasGift($gift) || $user->isServiceAccount()) $this->flashFail("err", "Не удалось подарить", "Не удалось подтвердить права на подарок."); if(!$gift->canUse($this->user->identity)) $this->flashFail("err", "Не удалось подарить", "У вас больше не осталось таких подарков."); $coinsLeft = $this->user->identity->getCoins() - $gift->getPrice(); if($coinsLeft < 0) $this->flashFail("err", "Не удалось подарить", "Ору нищ не пук."); $this->template->_template = "Gifts/Confirm.xml"; if($_SERVER["REQUEST_METHOD"] !== "POST") { $this->template->user = $user; $this->template->cat = $cat; $this->template->gift = $gift; return; } $comment = empty($c = $this->postParam("comment")) ? NULL : $c; $notification = new GiftNotification($user, $this->user->identity, $gift, $comment); $notification->emit(); $this->user->identity->setCoins($coinsLeft); $this->user->identity->save(); $user->gift($this->user->identity, $gift, $comment, !is_null($this->postParam("anonymous"))); $gift->used(); $this->flash("succ", "Подарок отправлен", "Вы отправили подарок " . $user->getFirstName() . " за " . $gift->getPrice() . " голосов."); $this->redirect($user->getURL()); } function renderStub(): void { $this->assertUserLoggedIn(); $act = $this->queryParam("act"); switch($act) { case "pick": $this->renderGiftMenu(); break; case "menu": $this->renderGiftList(); break; case "confirm": $this->renderConfirmGift(); break; default: $this->notFound(); } } function renderGiftImage(int $id, int $timestamp): void { $gift = $this->gifts->get($id); if(!$gift) $this->notFound(); $image = $gift->getImage(); header("Cache-Control: no-transform, immutable"); header("Content-Length: " . strlen($image)); header("Content-Type: image/png"); exit($image); } function onStartup(): void { if(!OPENVK_ROOT_CONF["openvk"]["preferences"]["commerce"]) $this->flashFail("err", tr("error"), tr("feature_disabled")); parent::onStartup(); } }