コード例 #1
0
 /**
  * @return Project
  */
 public function createProject()
 {
     $project = new Project('foo');
     $project->setEmailMessage('');
     $project->setPageMessage('');
     $project->setSender('', '');
     return $project;
 }
コード例 #2
0
 public function import(Project $project)
 {
     if ($project->confirmed()) {
         throw new \RuntimeException("Cannot import already confirmed project");
     }
     $authors = array();
     foreach ($project->getRepositories() as $repository) {
         $url = $repository->getUrl();
         if (strpos($url, "https://github.com/") === false) {
             throw new \InvalidArgumentException("Url should be a github repository.");
         }
         if (substr($url, -4) !== ".git") {
             throw new \InvalidArgumentException("Has to be .git repository");
         }
         $name = substr(str_replace("https://github.com/", "", $url), 0, -4);
         $project->markConfirmed();
         $this->entityManager->persist($project);
         $dirName = str_replace("/", "-", $name);
         chdir("/tmp");
         shell_exec("git clone " . $url . " " . $dirName);
         chdir("/tmp/" . $dirName);
         $output = shell_exec('git log --shortstat --format="%H;%an;%ae;%at;%s"');
         $lines = explode("\n", $output);
         $sha1 = $name = $email = $subject = $changeLine = $time = null;
         foreach ($lines as $line) {
             if (substr_count($line, ";") >= 3) {
                 if ($sha1) {
                     if (!isset($authors[$email])) {
                         $authors[$email] = new Author($name, $email, $project);
                         $this->entityManager->persist($authors[$email]);
                     }
                     if ($changeLine) {
                         $commit = new Commit($sha1, $project, $repository, $authors[$email], $changeLine, new \DateTime('@' . $time));
                         $this->entityManager->persist($commit);
                         $changeLine = null;
                     }
                 }
                 list($sha1, $name, $email, $time, $subject) = explode(";", $line, 5);
             } else {
                 if (trim($line) == "") {
                     continue;
                 } else {
                     $changeLine = $line;
                 }
             }
         }
     }
     $this->entityManager->flush();
 }
コード例 #3
0
 /**
  * @Extra\Route("/licenses/projects/create", name="licenses_project_create")
  * @Extra\Method({"GET", "POST"})
  * @Extra\Template
  */
 public function createAction(Request $request)
 {
     $entityManager = $this->container->get('doctrine.orm.default_entity_manager');
     $licenseRepository = $entityManager->getRepository('Doctrine\\Bundle\\LicenseManagerBundle\\Entity\\License');
     $licenses = $licenseRepository->findBy(array(), array('name' => 'ASC'));
     $command = new CreateProject();
     $form = $this->createForm(new CreateProjectType(), $command, array('licenses' => $licenses));
     if ($request->getMethod() === 'POST') {
         $form->bind($request);
         if ($form->isValid()) {
             $createProject = $form->getData();
             $project = new Project($createProject->name);
             foreach ($createProject->url as $url) {
                 $project->addRepository($url);
             }
             $project->setPageMessage($createProject->pageMessage);
             $project->setEmailMessage($createProject->emailMessage);
             $project->setSender($createProject->senderName, $createProject->senderMail);
             $project->setFromLicense($licenseRepository->find($createProject->fromLicense));
             $project->setToLicense($licenseRepository->find($createProject->toLicense));
             $entityManager->persist($project);
             $entityManager->flush();
             $request->getSession()->getFlashBag()->set('success', 'You created a new license switch project. We will evaluate your request and respond timely.');
             $mailer = $this->container->get('doctrine_license_manager.mailer');
             $mailer->sendTextMessage($this->container->getParameter('mailer_sender'), $this->container->getParameter('mailer_admin_email'), 'New License Switch Project registered', sprintf("Hello!\n\nA new project was registered on License Switcher:\n\nName: %s\nURL: %s\nFrom %s To %s\nPage Message:\n\n%s\n\nE-Mail Message:\n\n%s", $createProject->name, implode(", ", $createProject->url), $project->getFromLicense()->getName(), $project->getToLicense()->getName(), $createProject->pageMessage, $createProject->emailMessage));
             return $this->redirect($this->generateUrl('licenses_projects'));
         }
     }
     return array('form' => $form->createView());
 }