| 
									
										
										
										
											2016-04-19 15:54:03 +02:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace NoccyLabs\Hotfix\Command; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use Symfony\Component\Console\Command\Command; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use Symfony\Component\Console\Input\InputInterface; | 
					
						
							|  |  |  | use Symfony\Component\Console\Input\InputArgument; | 
					
						
							|  |  |  | use Symfony\Component\Console\Input\InputOption; | 
					
						
							|  |  |  | use Symfony\Component\Console\Output\OutputInterface; | 
					
						
							|  |  |  | use Symfony\Component\Console\Question\ConfirmationQuestion; | 
					
						
							|  |  |  | use NoccyLabs\Hotfix\Hotfix\Loader; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ApplyCommand extends Command | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     protected function configure() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->setName("apply"); | 
					
						
							|  |  |  |         $this->setDescription("Apply a hotfix from a file or the Internet"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->addOption("insecure", "I", InputOption::VALUE_NONE, "Disable signature checks. Don't use unless you know what you are doing!"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->addArgument("hotfix", InputArgument::OPTIONAL, "The identifier, path or filename of the hotfix"); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     protected function execute(InputInterface $input, OutputInterface $output) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->output = $output; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $fix = $input->getArgument("hotfix"); | 
					
						
							|  |  |  |         $insecure = $input->getOption("insecure"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $output->writeln("Reading hotfix <comment>{$fix}</comment>..."); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $loader = new Loader(); | 
					
						
							|  |  |  |         try { | 
					
						
							|  |  |  |             $hotfix = $loader->load($fix, $insecure); | 
					
						
							|  |  |  |         } catch (\Exception $e) { | 
					
						
							|  |  |  |             $output->writeln("<error>Error: ".$e->getMessage()."</error>"); | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2016-04-19 16:37:31 +02:00
										 |  |  |         if (!$hotfix) { | 
					
						
							|  |  |  |             $output->writeln("<error>Could not load hotfix</error>"); | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2016-04-19 15:54:03 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $output->writeln(""); | 
					
						
							|  |  |  |         if (($signer = $hotfix->getSignedBy())) { | 
					
						
							|  |  |  |             $output->writeln("<info>Hotfix has good signature by {$signer}</info>"); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $output->writeln("<fg=red;options=bold>Warning: Hotfix is not signed or signature not valid!</fg=red;options=bold>"); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $output->writeln(""); | 
					
						
							|  |  |  |         $output->writeln("  Hotfix:  <comment>".$hotfix->getName()."</comment>"); | 
					
						
							|  |  |  |         $output->writeln("  Author:  <comment>".$hotfix->getAuthor()."</comment>"); | 
					
						
							|  |  |  |         $output->writeln("  Info:"); | 
					
						
							|  |  |  |         $info = explode("\n",wordwrap(trim($hotfix->getInfo()), 70)); | 
					
						
							|  |  |  |         foreach ($info as $line) { | 
					
						
							|  |  |  |             $output->writeln("  |   <info>{$line}</info>"); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $output->writeln(""); | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         $helper = $this->getHelper("question"); | 
					
						
							|  |  |  |         $question = new ConfirmationQuestion("Do you want to apply this hotfix? [y/N] ", false); | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         if (!$helper->ask($input, $output, $question)) { | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         $output->writeln("\n<info>Applying hotfix...</info>\n"); | 
					
						
							|  |  |  |         try { | 
					
						
							|  |  |  |             $hotfix->apply(); | 
					
						
							|  |  |  |         } catch (\Exception $e) { | 
					
						
							|  |  |  |             $output->writeln("\n<error>Error: ".$e->getMessage()."</error>"); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $output->writeln("\n<info>Hotfix applied successfully</info>"); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |