コード例 #1
0
    public function testCalculatedScore()
    {
        $bundleWithShortReadme = new Bundle();
        $bundleWithShortReadme->setReadme('This is a very short (and quite useless) readme');
        $bundle = new Bundle();
        $bundle->setReadme(<<<README
# KnpBundles

Open-source code of the [knpbundles.com](http://knpbundles.com)
website, written in Symfony2.

Any ideas are welcome!

[![Build Status](https://secure.travis-ci.org/KnpLabs/KnpBundles.png)](http://travis-ci.org/KnpLabs/KnpBundles)

Please note that this service was previously called Symfony2Bundles but we had
to change the name due to [trademark issues](http://knplabs.com/blog/symfony2bundles-becomes-knpbundle).
README
);
        $tester = new ReadmeListener();
        $tester->updateScore($bundleWithShortReadme);
        $bundleWithShortReadme->recalculateScore();
        $tester->updateScore($bundle);
        $bundle->recalculateScore();
        $this->assertEquals(0, $bundleWithShortReadme->getScore());
        $this->assertEquals(5, $bundle->getScore());
    }
コード例 #2
0
ファイル: SolrIndexer.php プロジェクト: KnpLabs/KnpBundles
 /**
  * Delete all bundles from index
  */
 public function deleteBundlesIndexes(Bundle $bundle = null)
 {
     $delete = $this->solarium->createUpdate();
     $delete->addDeleteQuery(null !== $bundle ? $bundle->getFullName() : '*:*');
     $delete->addCommit();
     $this->solarium->update($delete);
 }
コード例 #3
0
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     /** @var SolrIndexer $indexer */
     $indexer = $this->getContainer()->get('knp_bundles.indexer.solr');
     /** @var EntityManager $em */
     $em = $this->getContainer()->get('doctrine')->getManager();
     /** @var \Solarium_Client $solarium */
     $solarium = $this->getContainer()->get('solarium.client');
     /** @var EntityRepository $repository */
     $repository = $em->getRepository('KnpBundlesBundle:Bundle');
     $query = $solarium->createSelect();
     $query->setFields(array('name', 'ownerName'));
     try {
         $hasMoreResults = true;
         $page = 1;
         while ($hasMoreResults) {
             $paginator = new Pagerfanta(new SolariumAdapter($solarium, $query));
             $paginator->setMaxPerPage(50)->setCurrentPage($page, false, true);
             foreach ($paginator as $bundle) {
                 $entity = $repository->findOneBy(array('name' => $bundle['name']));
                 if (!$entity) {
                     $entity = new Bundle();
                     $entity->setName($bundle['name']);
                     $entity->setOwnerName($bundle['ownerName']);
                     $indexer->deleteBundlesIndexes($entity);
                     $output->writeln(sprintf('The bundle "%s" was deleted from solr index.', $entity->getFullName()));
                 }
             }
             $hasMoreResults = $paginator->getNbResults() == 50;
             $page++;
         }
     } catch (\Solarium_Client_HttpException $e) {
         throw new \Exception('Seems that our search engine is currently offline. Please check later.');
     }
 }
コード例 #4
0
 public function testGlobalScore()
 {
     $dispatcher = new EventDispatcher();
     $testers = array('Activity', 'Composer', 'Followers', 'KnpBundles', 'Readme', 'Travis');
     foreach ($testers as $testerClass) {
         $fqcn = sprintf('\\Knp\\Bundle\\KnpBundlesBundle\\EventListener\\Scoring\\%sListener', $testerClass);
         $tester = new $fqcn();
         $dispatcher->addListener(BundleEvent::UPDATE_SCORE, array($tester, 'onScoreUpdate'));
     }
     $bundle = new Bundle();
     // activity (+4)
     $bundle->setLastCommitAt(new \DateTime('-10days'));
     // composer (+5)
     $bundle->setComposerName('bundle-composer-name');
     // followers (+10)
     $bundle->setNbFollowers(10);
     // recommendation (+5)
     $bundle->addRecommender(new Developer());
     // readme (+5)
     $bundle->setReadme(str_repeat('-', 500));
     // travis (+10)
     $bundle->setUsesTravisCi(true);
     $bundle->setTravisCiBuildStatus(true);
     $dispatcher->dispatch(BundleEvent::UPDATE_SCORE, new BundleEvent($bundle));
     $bundle->recalculateScore();
     $this->assertEquals(39, $bundle->getScore());
 }
コード例 #5
0
 /**
  * @param Bundle  $bundle
  * @param integer $limit
  *
  * @return array
  */
 public function findLastActivitiesForBundle(Bundle $bundle, $limit = 10)
 {
     $query = $this->queryLastActivities(null, $bundle->getId(), null);
     if (null !== $limit) {
         $query->setMaxResults($limit);
     }
     return $query->execute();
 }
コード例 #6
0
ファイル: Repo.php プロジェクト: ruian/KnpBundles
 public function getCommits($nb)
 {
     $commits = $this->getGitRepo()->getCommits(12);
     foreach ($commits as $key => $commit) {
         $commits[$key]['url'] = $this->entity->getGithubUrl() . '/commit/' . $commit['id'];
     }
     return $commits;
 }
コード例 #7
0
ファイル: ScoreRepository.php プロジェクト: ruian/KnpBundles
 /**
  * Finds the Score object for a given date and bundle
  *
  * @param DateTime $date
  * @param Bundle $bundle
  * @return Score or null
  */
 public function findOneByDateAndBundle(\DateTime $date, Bundle $bundle)
 {
     try {
         return $this->createQueryBuilder('s')->where('s.bundle = :bundle_id')->andWhere('s.date = :date')->setParameter('bundle_id', $bundle->getId())->setParameter('date', $date->format('Y-m-d'))->getQuery()->getSingleResult();
     } catch (NoResultException $e) {
         return null;
     }
 }
コード例 #8
0
 /**
  * @dataProvider provideFollowers
  */
 public function testFollowersScoreDetail($followers)
 {
     $bundle = new Bundle();
     $bundle->setNbFollowers($followers);
     $tester = new FollowersListener();
     $tester->updateScore($bundle);
     $bundle->recalculateScore();
     // 1 follower = 1 point
     $this->assertEquals($followers, $bundle->getScore());
 }
コード例 #9
0
 /**
  * @param Bundle          $bundle
  * @param SolrIndexer     $indexer
  * @param OutputInterface $output
  * @param boolean         $verbose
  */
 private function reindex(Bundle $bundle, $indexer, $output, $verbose)
 {
     if ($verbose) {
         $output->writeln('Indexing ' . $bundle->getFullName() . '...');
     }
     try {
         $indexer->indexBundle($bundle);
     } catch (\Exception $e) {
         $output->writeln('<error>Exception: ' . $e->getMessage() . ', skipping bundle ' . $bundle->getFullName() . '.</error>');
     }
 }
コード例 #10
0
ファイル: RepoTest.php プロジェクト: ruian/KnpBundles
 public function testUpdateComposerSuccess()
 {
     $repoEntity = new Bundle('knplabs/KnpMenuBundle');
     $repo = $this->getRepo();
     $gitRepo = $this->getGitRepoMock();
     $gitRepo->expects($this->any())->method('hasFile')->with('composer.json')->will($this->returnValue(true));
     $gitRepo->expects($this->any())->method('getFileContent')->with('composer.json')->will($this->returnValue('{"name": "knplabs/knp-menu-bundle"}'));
     $method = new \ReflectionMethod($repo, 'updateComposerFile');
     $method->setAccessible(true);
     $method->invokeArgs($repo, array($gitRepo, $repoEntity));
     $this->assertEquals($repoEntity->getComposerName(), 'knplabs/knp-menu-bundle');
 }
コード例 #11
0
 /**
  * @test
  */
 public function shouldNotCreateNewRepoWhenExists()
 {
     $bundle = new BundleEntity();
     $bundle->setOwnerName('KnpLabs');
     $bundle->setName('KnpBundles');
     $expectedDir = $this->getExpectedDir();
     $this->createRepoInExpectedLocation();
     $repoManager = $this->getRepoManager();
     $repoManager->expects($this->never())->method('cloneRepo');
     $this->assertTrue(is_dir($expectedDir));
     $this->assertInstanceOf('Knp\\Bundle\\KnpBundlesBundle\\Git\\Repo', $repoManager->getRepo($bundle));
 }
コード例 #12
0
 public function testTravisBuildStatus()
 {
     $bundle = new Bundle();
     $tester = new TravisListener();
     $bundle->setTravisCiBuildStatus(false);
     $tester->updateScore($bundle);
     $bundle->recalculateScore();
     $this->assertEquals(0, $bundle->getScore());
     $bundle->setTravisCiBuildStatus(true);
     $tester->updateScore($bundle);
     $bundle->recalculateScore();
     $this->assertEquals(5, $bundle->getScore());
 }
コード例 #13
0
ファイル: FeatureContext.php プロジェクト: ruian/KnpBundles
 /**
  * @Given /^the site has following bundles:$/
  */
 public function theSiteHasFollowingBundles(TableNode $table)
 {
     $entityManager = $this->getEntityManager();
     foreach ($table->getHash() as $row) {
         $user = $this->users[$row['username']];
         $bundle = new Entity\Bundle();
         $bundle->fromArray(array('name' => $row['name'], 'user' => $user, 'username' => $user->getName(), 'description' => $row['description'], 'lastCommitAt' => new \DateTime($row['lastCommitAt'])));
         $bundle->setScore($row['score']);
         $this->setPrivateProperty($bundle, "trend1", $row['trend1']);
         $entityManager->persist($bundle);
     }
     $entityManager->flush();
 }
コード例 #14
0
 public function testComposerScoreDetail()
 {
     $bundle = new Bundle();
     $bundle->setComposerName(null);
     $tester = new ComposerListener();
     $tester->updateScore($bundle);
     $bundle->recalculateScore();
     $this->assertEquals(0, $bundle->getScore());
     $bundle->setComposerName('composer-name-bundle');
     $tester->updateScore($bundle);
     $bundle->recalculateScore();
     $this->assertEquals(5, $bundle->getScore());
 }
コード例 #15
0
 public function testRecommandationsScoreUpdate()
 {
     $bundle = new Bundle();
     for ($index = 0; $index < 5; ++$index) {
         $user = new Developer();
         $user->setName('Contributor #' . ($index + 1));
         $bundle->addRecommender($user);
     }
     $tester = new KnpBundlesListener();
     $tester->updateScore($bundle);
     $bundle->recalculateScore();
     $this->assertEquals(25, $bundle->getScore());
 }
コード例 #16
0
 public function testActivityScoreDetail()
 {
     $bundle = new Bundle();
     $bundle->setLastCommitAt(new \DateTime('-10days'));
     $tester = new ActivityListener();
     $tester->updateScore($bundle);
     $bundle->recalculateScore();
     $this->assertEquals(4, $bundle->getScore());
     $oldBundle = new Bundle();
     $oldBundle->setLastCommitAt(new \DateTime('-45days'));
     $tester->updateScore($oldBundle);
     $oldBundle->recalculateScore();
     $this->assertEquals(0, $oldBundle->getScore());
 }
コード例 #17
0
ファイル: BundleTest.php プロジェクト: KnpLabs/KnpBundles
 /**
  * @test
  */
 public function shouldNotHaveChangesWithOnlyChangedScore()
 {
     $bundle = new Bundle('knplabs/KnpMenuBundle');
     $bundle->setScore(1000);
     $bundle->setReadme('readme number one');
     $bundle->setLastCommitAt(new \DateTime('-10 day'));
     $bundle->setNbFollowers(100);
     $bundle->setNbForks(10);
     $beforeChange = $bundle->getStatusHash();
     $bundle->setScore(1100);
     $afterChange = $bundle->getStatusHash();
     $this->assertEquals($beforeChange, $afterChange);
 }
コード例 #18
0
 public function setUp()
 {
     $kernel = static::createKernel();
     $kernel->boot();
     if ($kernel->getContainer()->getParameter('database_driver') == 'pdo_sqlite') {
         $this->markTestSkipped("The SQLite does not support joins.");
     }
     $this->em = $kernel->getContainer()->get('knp_bundles.entity_manager');
     $fileLocator = new FileLocator(__DIR__ . '/fixtures/');
     $path = $fileLocator->locate('trending-bundles.yml');
     $data = Yaml::parse($path);
     $developer = new Developer();
     $developer->setName('someName');
     $developer->setScore(0);
     $this->em->persist($developer);
     foreach ($data['bundles'] as $bundleName => $bundleData) {
         $bundle = new Bundle('vendor/' . $bundleName);
         $bundle->setDescription('some description');
         $bundle->setScore(100);
         $bundle->setOwner($developer);
         foreach ($bundleData['scores'] as $scoreData) {
             $bundle->setDescription(md5(time() . serialize($scoreData)));
             $score = new Score();
             $score->setDate(new \DateTime($scoreData['date']));
             $score->setBundle($bundle);
             $score->setValue($scoreData['value']);
             $this->em->persist($score);
         }
         $this->em->persist($bundle);
     }
     $this->em->flush();
 }
コード例 #19
0
ファイル: data.php プロジェクト: ruian/KnpBundles
 public function load($manager)
 {
     $users = array();
     $trilean = array(true, false, null);
     $i = 0;
     foreach ($this->names as $name => $fullName) {
         $i++;
         $user = new Entity\User();
         $user->fromArray(array('name' => $name, 'email' => strtolower(str_replace(' ', '.', $fullName)) . '@foomail.bar', 'fullName' => $fullName, 'company' => $i % 2 ? 'Company ' . $i : null, 'location' => $i % 2 ? 'Location ' . $i : null, 'blog' => $i % 2 ? 'blog' . $i . '.com' : null, 'score' => 0));
         $manager->persist($user);
         $users[] = $user;
     }
     foreach ($users as $i => $user) {
         $contributors = array();
         $contributors[] = isset($users[$i + 1]) ? $users[$i + 1] : $users[0];
         $contributors[] = isset($users[$i - 1]) ? $users[$i - 1] : $users[count($users) - 1];
         $contributor = array_pop($contributors);
         $bundle = new Entity\Bundle();
         $bundle->fromArray(array('name' => ucfirst($user->getName()) . 'FooBundle', 'username' => $user->getName(), 'user' => $user, 'description' => 'Description of my bundle', 'homepage' => $i % 2 ? 'Bundle' . $i . '.com' : null, 'readme' => str_repeat("README of the bundle number " . $i . "\n", 20), 'tags' => $i % 2 ? array('1.0', '1.1') : array(), 'usesTravisCi' => $i % 2 ? false : true, 'composerName' => $i % 2 ? null : 'knplabs/knp-menu-bundle', 'travisCiBuildStatus' => $i % 2 == 0 ? $trilean[$i % 3] : null, 'nbFollowers' => $i * 10, 'nbForks' => $i, 'lastCommitAt' => new \DateTime('-' . $i * 4 . ' day'), 'lastCommits' => array(array('author' => array('name' => $contributor->getFullName(), 'login' => $contributor->getName(), 'email' => $contributor->getEmail()), 'url' => 'http://github.com', 'committed_date' => '2010-05-16T09:58:32-09:00', 'authored_date' => '2010-05-16T09:58:32-09:00', 'message' => 'Fix something on this ' . 'Bundle'), array('author' => array('name' => $user->getFullName(), 'login' => $user->getName(), 'email' => $user->getEmail()), 'url' => 'http://github.com', 'committed_date' => '2010-05-16T09:58:32-07:00', 'authored_date' => '2010-05-16T09:58:32-07:00', 'message' => 'Commit something on this bundle')), 'isFork' => false, 'contributors' => array($contributor)));
         $manager->persist($bundle);
         // Add some scores for bundles
         $today = new \DateTime();
         // We add a various number of scores for a given bundle
         $daysBefore = crc32($bundle->getName() . '-days') % 50;
         $maxScore = crc32($bundle->getName()) % 50;
         $previousScore = $maxScore;
         while ($daysBefore-- > 0) {
             $date = clone $today;
             $date->sub(new \DateInterval('P' . $daysBefore . 'D'));
             $score = new Entity\Score();
             $score->setBundle($bundle);
             $score->setValue($previousScore + $daysBefore);
             $score->setDate($date);
             $manager->persist($score);
             $previousScore = $score->getValue();
         }
     }
     $manager->flush();
 }
コード例 #20
0
ファイル: Travis.php プロジェクト: KnpLabs/KnpBundles
 /**
  * Updates repo based on status from travis.
  *
  * @param  Bundle $bundle
  *
  * @return boolean
  */
 public function update(Bundle $bundle)
 {
     $this->output->write(' Travis status:');
     $response = $this->browser->get('http://travis-ci.org/' . $bundle->getOwnerName() . '/' . $bundle->getName() . '.json');
     $status = json_decode($response->getContent(), true);
     if (JSON_ERROR_NONE === json_last_error()) {
         $lastBuildAt = new \DateTime();
         $lastBuildAt->setTimestamp(strtotime($status['last_build_finished_at']));
         // Only execute if date of last build is older than last update of bundle
         if ($lastBuildAt < $bundle->getUpdatedAt()) {
             $state = Activity::STATE_UNKNOWN;
             if (0 === $status['last_build_status']) {
                 $bundle->setTravisCiBuildStatus(true);
                 $state = Activity::STATE_OPEN;
                 $this->output->write(' success');
             } elseif (1 === $status['last_build_status']) {
                 $bundle->setTravisCiBuildStatus(false);
                 $state = Activity::STATE_CLOSED;
                 $this->output->write(' failed');
             }
             if (Activity::STATE_UNKNOWN !== $state) {
                 $activity = new Activity();
                 $activity->setType(Activity::ACTIVITY_TYPE_TRAVIS_BUILD);
                 $activity->setState($state);
                 $activity->setBundle($bundle);
                 return true;
             }
         } else {
             $this->output->write(' skipped');
             return true;
         }
     }
     $bundle->setTravisCiBuildStatus(null);
     $this->output->write(' error');
     return false;
 }
コード例 #21
0
 /**
  * {@inheritdoc}
  */
 public function updateScore(Bundle $bundle)
 {
     $bundle->addScoreDetail('recommenders', 5 * $bundle->getNbRecommenders());
 }
コード例 #22
0
 /**
  * Removes a specified bundle
  *
  * @param Bundle $bundle
  */
 protected function removeBundle(Bundle $bundle)
 {
     $owner = $bundle->getOwner();
     if ($owner instanceof Owner) {
         $owner->removeBundle($bundle);
     }
     // remove bundle from search index
     $this->indexer->deleteBundlesIndexes($bundle);
     $this->em->remove($bundle);
     $this->em->flush();
     // @todo also delete folder
     if ($this->logger) {
         $this->logger->warn(sprintf('Bundle "%s" was deleted', $bundle->getName()));
     }
 }
コード例 #23
0
ファイル: FeatureContext.php プロジェクト: KnpLabs/KnpBundles
 /**
  * @Given /^the site has following bundles:$/
  */
 public function theSiteHasFollowingBundles(TableNode $table)
 {
     $entityManager = $this->getEntityManager();
     $this->bundles = array();
     foreach ($table->getHash() as $row) {
         if (isset($this->developers[$row['username']])) {
             $owner = $this->developers[$row['username']];
         } elseif (isset($this->organizations[$row['username']])) {
             $owner = $this->organizations[$row['username']];
         } else {
             continue;
         }
         $bundle = new Entity\Bundle();
         $bundle->fromArray(array('name' => $row['name'], 'owner' => $owner, 'ownerName' => $owner->getName(), 'description' => $row['description'], 'readme' => isset($row['readme']) ? $row['readme'] : '', 'state' => isset($row['state']) ? $row['state'] : Entity\Bundle::STATE_UNKNOWN));
         if (isset($row['license'])) {
             $bundle->setLicenseType($row['license']);
         }
         if (isset($row['createdAt'])) {
             $bundle->setCreatedAt(new \DateTime($row['createdAt']));
         }
         if (isset($row['lastCommitAt'])) {
             $bundle->setLastCommitAt(new \DateTime($row['lastCommitAt']));
         }
         $bundle->setScore($row['score']);
         $versionsHistory['dependencies']['dev-master'] = array('name' => 'friendsofsymfony/user-bundle', 'extra' => array('branch-alias' => array('dev-master' => '2.0.x-dev')), 'require' => array('php' => '>=5.3.2'), 'require-dev' => '', 'suggest' => '');
         $bundle->setVersionsHistory($versionsHistory);
         $this->setPrivateProperty($bundle, "trend1", $row['trend1']);
         if (isset($row['recommendedBy'])) {
             $ownerNames = explode(',', $row['recommendedBy']);
             foreach ($ownerNames as $ownerName) {
                 $owner = $this->developers[trim($ownerName)];
                 $bundle->addRecommender($owner);
                 $owner->addRecommendedBundle($bundle);
                 $entityManager->persist($owner);
             }
         }
         $entityManager->persist($bundle);
         $this->bundles[$bundle->getName()] = $bundle;
     }
     $entityManager->flush();
 }
コード例 #24
0
 /**
  * {@inheritdoc}
  */
 public function updateScore(Bundle $bundle)
 {
     $bundle->addScoreDetail('composer', $bundle->getComposerName() ? 5 : 0);
 }
コード例 #25
0
ファイル: Updater.php プロジェクト: KnpLabs/KnpBundles
 /**
  * @param Bundle $bundle
  *
  * @return boolean
  */
 public function removeRepo(Bundle $bundle)
 {
     if ($this->bundleUpdateProducer) {
         // Create a Message object
         $message = array('bundle_id' => $bundle->getId(), 'action' => 'remove');
         // RabbitMQ, publish my message!
         $this->bundleUpdateProducer->publish(json_encode($message));
         return true;
     }
     return false;
 }
コード例 #26
0
ファイル: RepoTest.php プロジェクト: KnpLabs/KnpBundles
 /**
  * @test
  */
 public function shouldNotUpdateVersionsHistoryWithWrongData()
 {
     $json = 'I am wrong json';
     $bundle = new Bundle('KnpLabs/KnpMenuBundle');
     $bundle->setComposerName('knplabs/knp-menu-bundle');
     $httpClient = $this->getMockBuilder('Github\\HttpClient\\HttpClient')->setMethods(array('get'))->disableOriginalConstructor()->getMock();
     $httpClient->expects($this->once())->method('get')->will($this->returnValue($json));
     $githubRepo = $this->getRepo($httpClient);
     $githubRepo->updateVersionsHistory($bundle);
     $this->assertNull($bundle->getVersionsHistory());
 }
コード例 #27
0
ファイル: Repo.php プロジェクト: KnpLabs/KnpBundles
 private function tryToValidateWithComposerFile(Bundle $bundle, Contents $contentApi)
 {
     $validComposer = false;
     try {
         $file = $contentApi->show($bundle->getOwnerName(), $bundle->getName(), 'composer.json');
         $composer = $this->decodeFileContent($file, true);
         if (JSON_ERROR_NONE === json_last_error()) {
             if (isset($composer['type']) && false !== strpos(strtolower($composer['type']), 'symfony')) {
                 $validComposer = true;
             }
             if (isset($composer['autoload']['psr-0'])) {
                 foreach ($composer['autoload']['psr-0'] as $key => $value) {
                     if (preg_match('/\\\\(.*)(\\w*)Bundle$/', $key) > 0) {
                         $validComposer = true;
                     }
                 }
             }
             if (isset($composer['autoload']['psr-4'])) {
                 foreach ($composer['autoload']['psr-4'] as $key => $value) {
                     if (preg_match('/\\\\(.*)(\\w*)Bundle$/', $key) > 0) {
                         $validComposer = true;
                     }
                 }
             }
         }
     } catch (RuntimeException $e) {
         $validComposer = false;
     }
     return $validComposer;
 }
コード例 #28
0
ファイル: Data.php プロジェクト: KnpLabs/KnpBundles
 protected function makeBundle($manager, Entity\Owner $owner, $i, $contributor = null)
 {
     $trilean = array(true, false, null);
     $bundle = new Entity\Bundle();
     $bundle->fromArray(array('name' => ucfirst($owner->getName()) . $i . 'FooBundle', 'description' => $this->descriptions[mt_rand(0, 4)], 'homepage' => $i % 2 ? 'Bundle' . $i . '.com' : null, 'readme' => str_replace('__BUNDLE__', "the bundle number: {$i}", $this->readme), 'usesTravisCi' => $i % 2 ? false : true, 'composerName' => $i % 2 ? null : 'knplabs/knp-menu-bundle', 'versionsHistory' => array('symfony' => array('dev-master' => '2.1.*', '1.2.0' => '2.0.*', '1.1.0' => '2.*'), 'dependencies' => array('dev-master' => array('name' => 'friendsofsymfony/user-bundle', 'extra' => array('branch-alias' => array('dev-master' => '2.0.x-dev')), 'require' => array('php' => '>=5.3.2', 'symfony/framework-bundle' => '>=2.1,<2.3-dev', 'symfony/security-bundle' => '>=2.1,<2.3-dev'), 'require-dev' => array('twig/twig' => '*', 'doctrine/doctrine-bundle' => '*', 'swiftmailer/swiftmailer' => '*', 'willdurand/propel-typehintable-behavior' => 'dev-master', 'symfony/validator' => '2.1.*', 'symfony/yaml' => '2.1.*'), 'suggest' => array('doctrine/couchdb-odm-bundle' => '*', 'doctrine/doctrine-bundle' => '*', 'doctrine/mongodb-odm-bundle' => '*')), '1.2.x-dev' => array('name' => 'friendsofsymfony/user-bundle', 'require' => array('php' => '>=5.3.2', 'symfony/framework-bundle' => '>=2.1,<2.3-dev', 'symfony/security-bundle' => '>=2.1,<2.3-dev'), 'require-dev' => '', 'suggest' => ''))), 'state' => $this->states[mt_rand(0, 3)], 'license' => $i % 4 == 0 ? 'Some pseudo license data' : null, 'licenseType' => $i % 3 == 0 ? $this->licenses[mt_rand(0, 2)] : null, 'travisCiBuildStatus' => $i % 2 == 0 ? $trilean[$i % 3] : null, 'nbFollowers' => $i * 10, 'nbForks' => $i, 'isFork' => false, 'contributors' => $contributor ? array($contributor) : array(), 'canonicalConfig' => $i % 2 == 0 ? $this->canonicalConfigDump : null, 'nbRecommenders' => rand(0, 90)));
     $commits = array(array('date' => '2010-05-16T09:58:32-09:00', 'author' => $owner instanceof Entity\Developer ? $owner->getName() : 'Random Person', 'message' => 'Fix something on this Bundle'), array('date' => '2010-05-16T09:58:32-07:00', 'author' => 'Fake Name', 'message' => 'Commit something on this bundle'));
     foreach ($commits as $commit) {
         $lastCommitAt = new \DateTime();
         $lastCommitAt->setTimestamp(strtotime($commit['date']));
         $bundle->setLastCommitAt($lastCommitAt);
         $activity = new Entity\Activity();
         $activity->setType(Entity\Activity::ACTIVITY_TYPE_COMMIT);
         $activity->setMessage(strtok($commit['message'], "\n\r"));
         $activity->setCreatedAt($lastCommitAt);
         $activity->setBundle($bundle);
         if ($owner->getName() == $commit['author']) {
             $owner->setLastCommitAt($lastCommitAt);
             $activity->setDeveloper($owner);
             $activity->setBundleOwnerName(strtolower($owner->getName()));
         } else {
             $activity->setAuthor($commit['author']);
             $activity->setBundleOwnerName(strtolower($commit['author']));
         }
         $manager->persist($activity);
     }
     $owner->addBundle($bundle);
     return $bundle;
 }
コード例 #29
0
 /**
  * {@inheritdoc}
  */
 public function updateScore(Bundle $bundle)
 {
     $bundle->addScoreDetail('followers', $bundle->getNbFollowers());
 }
コード例 #30
0
ファイル: BundleManager.php プロジェクト: KnpLabs/KnpBundles
 /**
  * @param string $name
  *
  * @return Bundle
  */
 private function createEmptyBundle($name)
 {
     $bundle = new Bundle();
     $bundle->setName($name);
     return $bundle;
 }