123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- <?php
- /*
- * This file is part of Packagist.
- *
- * (c) Jordi Boggiano <j.boggiano@seld.be>
- * Nils Adermann <naderman@naderman.de>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Packagist\WebBundle\Entity;
- use Doctrine\ORM\EntityRepository;
- /**
- * @author Jordi Boggiano <j.boggiano@seld.be>
- */
- class VersionRepository extends EntityRepository
- {
- protected $supportedLinkTypes = array(
- 'require',
- 'conflict',
- 'provide',
- 'replace',
- 'devRequire',
- 'suggest',
- );
- public function remove(Version $version)
- {
- $em = $this->getEntityManager();
- $version->getPackage()->getVersions()->removeElement($version);
- $version->getPackage()->setCrawledAt(new \DateTime);
- $version->getPackage()->setUpdatedAt(new \DateTime);
- foreach ($version->getAuthors() as $author) {
- /** @var $author Author */
- $author->getVersions()->removeElement($version);
- }
- $version->getAuthors()->clear();
- foreach ($version->getTags() as $tag) {
- /** @var $tag Tag */
- $tag->getVersions()->removeElement($version);
- }
- $version->getTags()->clear();
- foreach ($this->supportedLinkTypes as $linkType) {
- foreach ($version->{'get'.$linkType}() as $link) {
- $em->remove($link);
- }
- $version->{'get'.$linkType}()->clear();
- }
- $em->remove($version);
- }
- public function getFullVersion($versionId)
- {
- $qb = $this->getEntityManager()->createQueryBuilder();
- $qb->select('v', 't', 'a')
- ->from('Packagist\WebBundle\Entity\Version', 'v')
- ->leftJoin('v.tags', 't')
- ->leftJoin('v.authors', 'a')
- ->where('v.id = :id')
- ->setParameter('id', $versionId);
- return $qb->getQuery()->getSingleResult();
- }
- /**
- * Returns the latest versions released
- *
- * @param string $vendor optional vendor filter
- * @param string $package optional vendor/package filter
- * @return \Doctrine\ORM\QueryBuilder
- */
- public function getQueryBuilderForLatestVersionWithPackage($vendor = null, $package = null)
- {
- $qb = $this->getEntityManager()->createQueryBuilder();
- $qb->select('v')
- ->from('Packagist\WebBundle\Entity\Version', 'v')
- ->where('v.development = false')
- ->orderBy('v.releasedAt', 'DESC');
- if ($vendor || $package) {
- $qb->innerJoin('v.package', 'p')
- ->addSelect('p');
- }
- if ($vendor) {
- $qb->andWhere('p.name LIKE ?0');
- $qb->setParameter(0, $vendor.'/%');
- } elseif ($package) {
- $qb->andWhere('p.name = ?0')
- ->setParameter(0, $package);
- }
- return $qb;
- }
- public function getLatestReleases($count = 10)
- {
- $qb = $this->getEntityManager()->createQueryBuilder();
- $qb->select('v')
- ->from('Packagist\WebBundle\Entity\Version', 'v')
- ->where('v.development = false')
- ->orderBy('v.releasedAt', 'DESC')
- ->setMaxResults($count);
- return $qb->getQuery()->useResultCache(true, 900, 'new_releases')->getResult();
- }
- }
|