/** * 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); } } }