protected function startup() { parent::startup(); if (!($row = $this->addons->find($this->id, $this->auth->isAllowed('addon', 'delete')))) { $this->error('Addon not found!'); } $this->addon = Addon::fromActiveRow($row, $this->addonVotes); $this->addonVersions->rsort($this->addon->versions); }
/** * @param string * @return string|NULL */ public function filterOut($vendor) { $row = $this->addons->findByComposerVendor($vendor)->limit(1)->fetch(); if (!$row) { return NULL; } $addon = Addon::fromActiveRow($row); return $addon->composerVendor; }
/** * @param string */ public function renderSitemap($type = 'html') { $this->template->addons = $this->addons->findAll(); $this->template->vendors = $this->addons->findVendors(); $this->template->categories = $this->tags->findMainTags(); $pages = array(); foreach (Finder::findFiles('*.texy')->from($this->pagesDataPath) as $file) { /** @var \SplFileInfo $file */ $slug = Strings::substring($file->getRealPath(), Strings::length($this->pagesDataPath) + 1, -5); $data = $this->pageProcessor->process(file_get_contents($file->getRealPath())); $createdAt = new \DateTime(); $createdAt->setTimestamp($file->getMTime()); $pages[] = (object) array('slug' => $slug, 'name' => $data['title'], 'createdAt' => $createdAt); } $this->template->pages = $pages; if ($type == 'xml') { $this->setView('sitemap.xml'); } }
protected function startup() { parent::startup(); if ($this->token && $this->addonId) { $this->error('Parameters token and addonId must not be present at the same time.', 409); } if ($this->token) { $this->addon = $this->manager->restoreAddon($this->token); } elseif ($this->addonId) { $deleted = $this->auth->isAllowed('addon', 'delete'); $row = $this->addons->find($this->addonId, $deleted); if (!$row) { $this->error('Addon not found.'); } $this->addon = Addon::fromActiveRow($row); } if ($this->addon && !$this->auth->isAllowed($this->addon, 'manage')) { $this->error('You are not allowed to manage this addon.', 403); } }
/** * Post receive hook, updates addon info */ public function actionPostReceive() { $post = $this->getRequest()->getPost(); if (!isset($post['payload'], $post['username'], $post['apiToken'])) { $this->error('Invalid request.'); } $response = $this->getHttpResponse(); try { $payload = Json::decode($post['payload']); if (!isset($payload->repository->url)) { $response->setCode(IResponse::S400_BAD_REQUEST); $this->sendJson(array('status' => 'error', 'message' => 'Missing or invalid payload')); } } catch (\Nette\Utils\JsonException $e) { $this->error('Invalid request.'); } $username = $post['username']; $token = $post['apiToken']; $user = $this->users->findOneByName($username); if (!$user || $user->apiToken !== $token) { $response->setCode(IResponse::S403_FORBIDDEN); $this->sendJson(array('status' => 'error', 'message' => 'Invalid credentials')); } if (!GitHubImporter::isValid($payload->repository->url)) { $response->setCode(IResponse::S400_BAD_REQUEST); $this->sendJson(array('status' => 'error', 'message' => 'Could not parse payload repository URL')); } $repositoryUrl = GitHubImporter::normalizeUrl($payload->repository->url); $row = $this->addons->findOneBy(array('repository' => $repositoryUrl)); if (!$row) { $this->error('Addon not found.'); } $addon = Addon::fromActiveRow($row); $userIdentity = $this->users->createIdentity($user); $importer = $this->importerManager->createFromUrl($addon->repository); $this->manager->updateVersions($addon, $importer, $userIdentity); $this->sendJson(array('status' => "success")); }
/** * @param string * @return bool */ public function isComposerFullNameUnique($composerFullName) { $addon = $this->addonsRepo->findOneByComposerFullName($composerFullName); return $addon === FALSE; }
public function renderDeleted() { $this->template->addons = $this->addons->findDeleted(); }