Example #1
0
 /**
  * Process Entity arranges
  * @param Project $project
  * @param bool $remove
  * @return mixed
  */
 protected function processProjectDeletionFinalize(Project $project, $remove = true)
 {
     $returnValues['slot_name'] = 'proc';
     try {
         // Finalizing process
         if (!$remove) {
             // Unset Local DB VCS related datas
             $project->setGitLabProjectId(null);
             $project->setGitLabHttpUrlToRepo(null);
             $project->setGitLabSshUrlToRepo(null);
             $project->setGitLabWebUrl(null);
             $project->setGitLabNamespace(null);
             $project->setGitNbCommits(null);
             $project->setGitCommitLastUpdate(null);
             // Unset Local DB PM related datas
             $project->setRedmineProjectId(null);
             $project->setRedmineProjectIdentifier(null);
             $project->setRedmineWebUrl(null);
             // Unser local DB QA related datas
             $project->setSonarProjectId(null);
             $project->setSonarProjectKey(null);
             $project->setSonarProjectUrl(null);
             // Other
             $project->setActive(false);
             // Remove project CIs
             $cis = $this->em->getRepository('SpiritDevDBoxPortalBundle:ContinuousIntegration')->findBy(array('project' => $project));
             foreach ($cis as $ci) {
                 $this->em->remove($ci);
             }
         } else {
             // Removing project
             $this->em->remove($project);
         }
         // Updating datas
         $this->em->flush();
         $returnValues['data'][] = $this->setRetVal('Entity updated', 'bool', true);
         // Send user mail + team mail ?
         $this->mailer->processProjectDeletionSendMail($project);
         $returnValues['data'][] = $this->setRetVal('Mail sent', 'bool', true);
         $this->session->getFlashBag()->set('success', 'flashbag.demand.processing_deletion_project.success');
     } catch (\Exception $e) {
         $returnValues['data'][] = $this->setRetVal('Entity updated', 'bool', false);
         //            $returnValues['data'][] = $this->setRetVal('Mail sent', 'bool', false);
         $this->session->getFlashBag()->set('error', 'flashbag.demand.processing_deletion_project.error');
     }
     return $returnValues;
 }
 /**
  * @param InputInterface $input
  * @param OutputInterface $output
  * @return null
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     // Get inputs
     $from = $input->getArgument('from');
     $pjtname = $input->getArgument('pjtname');
     // Important vars
     $container = $this->getContainer();
     $router = $container->get('router');
     $selfBaseUrl = $container->getParameter('spirit_dev_d_box_portal.app.self_base_url');
     $em = $container->get('doctrine')->getManager();
     $io = new SymfonyStyle($input, $output);
     //        // API's
     $apiPM = $container->get('spirit_dev_dbox_portal_bundle.api.redmine');
     $apiVCS = $container->get('spirit_dev_dbox_portal_bundle.api.gitlab');
     $io->title(sprintf('Import project     -- %s --     from     -- %s --', $pjtname, $from));
     $pmProject = null;
     $vcsProject = null;
     $dbProject = null;
     // Import values from PM if requested
     if ($from == 'pm' || $from == 'both') {
         $io->section('PM Check');
         $pmProjectId = $apiPM->getProjectIdByName($pjtname);
         if (intval($pmProjectId)) {
             $tmpPjt = new Project();
             $tmpPjt->setRedmineProjectId($pmProjectId);
             $pmProject = $apiPM->showProject($tmpPjt);
             $io->success('Project -- ' . $pjtname . ' -- found in PM');
             $io->table(array('Name', 'Id', 'Identifier', 'description'), array(array($pmProject['project']['name'], $pmProject['project']['id'], $pmProject['project']['identifier'], empty($pmProject['project']['description']) ? "none" : $pmProject['project']['description'])));
         } else {
             $io->error('This project does not exists in PM, check value case');
             if ($from != "both") {
                 exit(0);
             }
         }
     }
     // Import values from VCS if requested
     if ($from == 'vcs' || $from == 'both') {
         $io->section('VCS Check');
         $vcsProjectId = $apiVCS->getProjectIdByName($pjtname);
         if (intval($vcsProjectId)) {
             $vcsProject = $apiVCS->getProject($vcsProjectId);
             $io->success('Project -- ' . $pjtname . ' -- found in VCS');
             $io->table(array('Name', 'Id', 'description', 'SSH Url', 'HTTP Url', 'WEB Url', 'Namespace', 'Issues', 'Wiki', 'Snippets'), array(array($vcsProject['name'], $vcsProject['id'], $vcsProject['description'], $vcsProject['ssh_url_to_repo'], $vcsProject['http_url_to_repo'], $vcsProject['web_url'], $vcsProject['path_with_namespace'], $vcsProject['issues_enabled'], $vcsProject['wiki_enabled'], $vcsProject['snippets_enabled'])));
         } else {
             $io->error('This project does not exists in VCS, check value case');
             exit(0);
         }
     }
     // Check if project exists in db
     $io->section('DB Check');
     $dbProject = $em->getRepository('SpiritDevDBoxPortalBundle:Project')->findOneBy(array('canonicalName' => strtolower($pjtname)));
     if ($dbProject) {
         $io->note('Project -- ' . $pjtname . ' -- already exists in database!');
         $io->caution('Local DB Project will be update');
     } else {
         $io->note('Project -- ' . $pjtname . ' -- does not exists in database!');
         $io->note('A local DB Project will be created');
     }
     // Starting import
     $io->section('Starting Importation');
     if ($dbProject) {
         // Updating entity
         if ($input->getOption('force-update') && $io->confirm('Do you want to continue ?', true)) {
             // Import PM Values
             if ($from == "pm" || $from == "both") {
                 $io->writeln('Importing from PM');
                 $dbProject->setRedmineProjectId($pmProject['project']['id']);
                 $dbProject->setRedmineProjectIdentifier($pmProject['project']['identifier']);
                 $dbProject->setRedmineWebUrl($apiPM->getProjectWebUrl($dbProject));
                 $io->writeln('Updating PM remote project');
                 $dbProject->setName($pjtname);
                 $update = $apiPM->updateProject($dbProject);
             }
             // Import VCS Values
             if ($from == "vcs" || $from == "both") {
                 $io->writeln('Importing from VCS');
                 $dbProject->setGitLabIssueEnabled($vcsProject['issues_enabled']);
                 $dbProject->setGitLabWikiEnabled($vcsProject['wiki_enabled']);
                 $dbProject->setGitLabSnippetsEnabled($vcsProject['snippets_enabled']);
                 $dbProject->setGitLabProjectId($vcsProject['id']);
                 $dbProject->setGitLabSshUrlToRepo($vcsProject['ssh_url_to_repo']);
                 $dbProject->setGitLabHttpUrlToRepo($vcsProject['http_url_to_repo']);
                 $dbProject->setGitLabWebUrl($vcsProject['web_url']);
                 $dbProject->setGitLabNamespace($vcsProject['path_with_namespace']);
                 $io->writeln('Updating VCS remote project');
                 // Create hooks
                 $nbCommitHookUrl = $selfBaseUrl != 'none' ? $selfBaseUrl . "web_hook/update/nb_commit/" . $dbProject->getId() : $router->generate('spirit_dev_dbox_portal_bundle_webhook_pjt_update_nbcommits', array('pjt_id' => $dbProject->getId()), true);
                 // var_dump($nbCommitHookUrl);
                 $apiVCS->setProjectWebHook($dbProject, $nbCommitHookUrl);
                 // Push hook to ci server
                 $processor = $container->get('spirit_dev_dbox_admin_bundle.admin.processor');
                 $jenkinsUrl = $processor->defineJenkinsProjectUrl($dbProject);
                 $apiVCS->setProjectWebHook($dbProject, $jenkinsUrl);
             }
             $io->writeln('Updating entity');
             $dbProject->setName($pjtname);
             $dbProject->setActive(true);
             $em->flush();
             $io->success('Done');
         } else {
             $io->error('You may reload the command with the --force-update option');
             $io->note('php app/console dbox:portal:pmvcs:import ' . $from . ' ' . $pjtname . ' --force-update');
             exit(0);
         }
     } else {
         // Creating entity
         if ($input->getOption('force') && $io->confirm('Do you want to continue ?', true)) {
             $project = new Project();
             // Import PM Values
             if ($from == "pm" || $from == "both") {
                 $io->writeln('Importing from PM');
                 $project->setRedmineProjectId($pmProject['project']['id']);
                 $project->setRedmineProjectIdentifier($pmProject['project']['identifier']);
                 $project->setRedmineWebUrl($apiPM->getProjectWebUrl($project));
                 $io->writeln('Updating PM remote project');
                 $project->setName($pjtname);
                 $update = $apiPM->updateProject($project);
                 //                    dump($update);
             }
             // Import VCS Values
             if ($from == "vcs" || $from == "both") {
                 $io->writeln('Importing from VCS');
                 $project->setGitLabIssueEnabled($vcsProject['issues_enabled']);
                 $project->setGitLabWikiEnabled($vcsProject['wiki_enabled']);
                 $project->setGitLabSnippetsEnabled($vcsProject['snippets_enabled']);
                 $project->setGitLabProjectId($vcsProject['id']);
                 $project->setGitLabSshUrlToRepo($vcsProject['ssh_url_to_repo']);
                 $project->setGitLabHttpUrlToRepo($vcsProject['http_url_to_repo']);
                 $project->setGitLabWebUrl($vcsProject['web_url']);
                 $project->setGitLabNamespace($vcsProject['path_with_namespace']);
                 $io->writeln('Updating VCS remote project');
                 // Create hooks
                 $nbCommitHookUrl = $selfBaseUrl != 'none' ? $selfBaseUrl . "web_hook/update/nb_commit/" . $project->getId() : $router->generate('spirit_dev_dbox_portal_bundle_webhook_pjt_update_nbcommits', array('pjt_id' => $project->getId()), true);
                 $apiVCS->setProjectWebHook($project, $nbCommitHookUrl);
                 // Push hook to ci server
                 $processor = $container->get('spirit_dev_dbox_admin_bundle.admin.processor');
                 $jenkinsUrl = $processor->defineJenkinsProjectUrl($project);
                 $apiVCS->setProjectWebHook($project, $jenkinsUrl);
             }
             $io->writeln('Creating entity');
             $project->setName($pjtname);
             $project->setActive(true);
             $em->persist($project);
             $em->flush();
             $io->success('Done');
         } else {
             $io->error('You may reload the command with the --force option');
             $io->note('php app/console dbox:portal:pmvcs:import ' . $from . ' ' . $pjtname . ' --force');
             exit(0);
         }
     }
 }