Esempio n. 1
0
 public function getPackageMaintainersQueryBuilder(Package $package, User $excludeUser = null)
 {
     $qb = $this->createQueryBuilder('u')->select('u')->innerJoin('u.packages', 'p', 'WITH', 'p.id = :packageId')->setParameter(':packageId', $package->getId())->orderBy('u.username', 'ASC');
     if ($excludeUser) {
         $qb->andWhere('u.id <> :userId')->setParameter(':userId', $excludeUser->getId());
     }
     return $qb;
 }
 private function updateDocumentFromPackage(\Solarium_Document_ReadWrite $document, Package $package)
 {
     $document->id = $package->getId();
     $document->name = $package->getName();
     $document->description = $package->getDescription();
     $tags = array();
     foreach ($package->getVersions() as $version) {
         foreach ($version->getTags() as $tag) {
             $tags[mb_strtolower($tag->getName(), 'UTF-8')] = true;
         }
     }
     $document->tags = array_keys($tags);
 }
Esempio n. 3
0
 public function findOneByNameAndPackage($author, Package $package)
 {
     $qb = $this->createQueryBuilder('a');
     $qb->select('a')->leftJoin('a.versions', 'v')->leftJoin('v.package', 'p')->where('p.id = :packageId')->andWhere('a.name = :author')->setMaxResults(1)->setParameters(array('author' => $author, 'packageId' => $package->getId()));
     return $qb->getQuery()->getOneOrNullResult();
 }
Esempio n. 4
0
 public function isMarked(UserInterface $user, Package $package)
 {
     return null !== $this->redis->zrank('usr:'******':fav', $package->getId());
 }
Esempio n. 5
0
 private function updateDocumentFromPackage(Solarium_Document_ReadWrite $document, Package $package, array $tags, $redis, DownloadManager $downloadManager, FavoriteManager $favoriteManager)
 {
     $document->setField('id', $package->getId());
     $document->setField('name', $package->getName());
     $document->setField('package_name', $package->getPackageName());
     $document->setField('description', preg_replace('{[\\x00-\\x1f]+}u', '', $package->getDescription()));
     $document->setField('type', $package->getType());
     $document->setField('trendiness', $redis->zscore('downloads:trending', $package->getId()));
     $document->setField('downloads', $downloadManager->getTotalDownloads($package));
     $document->setField('favers', $favoriteManager->getFaverCount($package));
     $document->setField('repository', $package->getRepository());
     $document->setField('language', $package->getLanguage());
     if ($package->isAbandoned()) {
         $document->setField('abandoned', 1);
         $document->setField('replacementPackage', $package->getReplacementPackage() ?: '');
     } else {
         $document->setField('abandoned', 0);
         $document->setField('replacementPackage', '');
     }
     $tags = array_map(function ($tag) {
         return mb_strtolower(preg_replace('{[\\x00-\\x1f]+}u', '', $tag), 'UTF-8');
     }, $tags);
     $document->setField('tags', $tags);
 }
Esempio n. 6
0
 private function createDatePoints(DateTimeImmutable $from, DateTimeImmutable $to, $average, Package $package, Version $version = null)
 {
     $interval = $this->getStatsInterval($average);
     $dateKey = $average === 'monthly' ? 'Ym' : 'Ymd';
     $dateFormat = $average === 'monthly' ? 'Y-m' : 'Y-m-d';
     $dateJump = $average === 'monthly' ? '+1month' : '+1day';
     if ($average === 'monthly') {
         $to = new DateTimeImmutable('last day of ' . $to->format('Y-m'));
     }
     $nextDataPointLabel = $from->format($dateFormat);
     $nextDataPoint = $from->modify($interval);
     $datePoints = [];
     while ($from <= $to) {
         $datePoints[$nextDataPointLabel][] = 'dl:' . $package->getId() . ($version ? '-' . $version->getId() : '') . ':' . $from->format($dateKey);
         $from = $from->modify($dateJump);
         if ($from >= $nextDataPoint) {
             $nextDataPointLabel = $from->format($dateFormat);
             $nextDataPoint = $from->modify($interval);
         }
     }
     return $datePoints;
 }
 private function updateDocumentFromPackage(\Solarium_Document_ReadWrite $document, Package $package, $redis)
 {
     $document->setField('id', $package->getId());
     $document->setField('name', $package->getName());
     $document->setField('description', $package->getDescription());
     $document->setField('type', $package->getType());
     $document->setField('trendiness', $redis->zscore('downloads:trending', $package->getId()));
     $document->setField('repository', $package->getRepository());
     if ($package->isAbandoned()) {
         $document->setField('abandoned', 1);
         $document->setField('replacementPackage', $package->getReplacementPackage() ?: '');
     } else {
         $document->setField('abandoned', 0);
         $document->setField('replacementPackage', '');
     }
     $tags = array();
     foreach ($package->getVersions() as $version) {
         foreach ($version->getTags() as $tag) {
             $tags[mb_strtolower($tag->getName(), 'UTF-8')] = true;
         }
     }
     $document->setField('tags', array_keys($tags));
 }
Esempio n. 8
0
 private function createDeletePackageForm(Package $package)
 {
     if (!($user = $this->getUser())) {
         return;
     }
     // super admins bypass additional checks
     if (!$this->get('security.context')->isGranted('ROLE_DELETE_PACKAGES')) {
         // non maintainers can not delete
         if (!$package->getMaintainers()->contains($user)) {
             return;
         }
         try {
             /** @var $redis \Snc\RedisBundle\Client\Phpredis\Client */
             $redis = $this->get('snc_redis.default');
             $downloads = $redis->get('dl:' . $package->getId());
         } catch (\Exception $e) {
             return;
         }
         // more than 50 downloads = established package, do not allow deletion by maintainers
         if ($downloads > 50) {
             return;
         }
     }
     return $this->createFormBuilder(array())->getForm();
 }