VersionRepository.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. /*
  3. * This file is part of Packagist.
  4. *
  5. * (c) Jordi Boggiano <j.boggiano@seld.be>
  6. * Nils Adermann <naderman@naderman.de>
  7. *
  8. * For the full copyright and license information, please view the LICENSE
  9. * file that was distributed with this source code.
  10. */
  11. namespace Packagist\WebBundle\Entity;
  12. use Doctrine\ORM\EntityRepository;
  13. /**
  14. * @author Jordi Boggiano <j.boggiano@seld.be>
  15. */
  16. class VersionRepository extends EntityRepository
  17. {
  18. protected $supportedLinkTypes = array(
  19. 'require',
  20. 'conflict',
  21. 'provide',
  22. 'replace',
  23. 'devRequire',
  24. 'suggest',
  25. );
  26. public function remove(Version $version)
  27. {
  28. $em = $this->getEntityManager();
  29. $version->getPackage()->getVersions()->removeElement($version);
  30. $version->getPackage()->setCrawledAt(new \DateTime);
  31. $version->getPackage()->setUpdatedAt(new \DateTime);
  32. foreach ($version->getAuthors() as $author) {
  33. /** @var $author Author */
  34. $author->getVersions()->removeElement($version);
  35. }
  36. $version->getAuthors()->clear();
  37. foreach ($version->getTags() as $tag) {
  38. /** @var $tag Tag */
  39. $tag->getVersions()->removeElement($version);
  40. }
  41. $version->getTags()->clear();
  42. foreach ($this->supportedLinkTypes as $linkType) {
  43. foreach ($version->{'get'.$linkType}() as $link) {
  44. $em->remove($link);
  45. }
  46. $version->{'get'.$linkType}()->clear();
  47. }
  48. $em->remove($version);
  49. }
  50. public function getFullVersion($versionId)
  51. {
  52. $qb = $this->getEntityManager()->createQueryBuilder();
  53. $qb->select('v', 't', 'a')
  54. ->from('Packagist\WebBundle\Entity\Version', 'v')
  55. ->leftJoin('v.tags', 't')
  56. ->leftJoin('v.authors', 'a')
  57. ->where('v.id = :id')
  58. ->setParameter('id', $versionId);
  59. return $qb->getQuery()->getSingleResult();
  60. }
  61. /**
  62. * Returns the latest versions released
  63. *
  64. * @param string $vendor optional vendor filter
  65. * @param string $package optional vendor/package filter
  66. * @return \Doctrine\ORM\QueryBuilder
  67. */
  68. public function getQueryBuilderForLatestVersionWithPackage($vendor = null, $package = null)
  69. {
  70. $qb = $this->getEntityManager()->createQueryBuilder();
  71. $qb->select('v')
  72. ->from('Packagist\WebBundle\Entity\Version', 'v')
  73. ->where('v.development = false')
  74. ->orderBy('v.releasedAt', 'DESC');
  75. if ($vendor || $package) {
  76. $qb->innerJoin('v.package', 'p')
  77. ->addSelect('p');
  78. }
  79. if ($vendor) {
  80. $qb->andWhere('p.name LIKE ?0');
  81. $qb->setParameter(0, $vendor.'/%');
  82. } elseif ($package) {
  83. $qb->andWhere('p.name = ?0')
  84. ->setParameter(0, $package);
  85. }
  86. return $qb;
  87. }
  88. public function getLatestReleases($count = 10)
  89. {
  90. $qb = $this->getEntityManager()->createQueryBuilder();
  91. $qb->select('v')
  92. ->from('Packagist\WebBundle\Entity\Version', 'v')
  93. ->where('v.development = false')
  94. ->orderBy('v.releasedAt', 'DESC')
  95. ->setMaxResults($count);
  96. return $qb->getQuery()->useResultCache(true, 900, 'new_releases')->getResult();
  97. }
  98. }