/**
  * @param InputInterface $input
  * @param OutputInterface $output
  * @return int|null|void
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     parent::bootstrapProcessWire($output);
     $modules = explode(",", $input->getArgument('modules'));
     foreach ($modules as $module) {
         // if module doesn't exist, download the module
         if (!$this->checkIfModuleExists($module)) {
             $output->writeln("<comment>Cannot find '{$module}' locally, trying to download...</comment>");
             $this->passOnToModuleDownloadCommand($module, $output, $input);
         }
         // check whether module is already installed
         if (\ProcessWire\wire('modules')->isInstalled($module)) {
             $output->writeln("<info>Module `{$module}` is already installed.</info>");
             exit(1);
         }
         // install module
         if (\ProcessWire\wire('modules')->getModule($module, array('noPermissionCheck' => true, 'noInit' => true))) {
             $output->writeln("<info>Module `{$module}` installed successfully.</info>");
         } else {
             $output->writeln("<error>Module `{$module}` does not exist.</error>");
         }
     }
 }
 /**
  * @param InputInterface $input
  * @param OutputInterface $output
  * @return int|null|void
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     parent::bootstrapProcessWire($output);
     $this->fs = new Filesystem();
     $this->output = $output;
     $modules = explode(",", $input->getArgument('modules'));
     if (!ini_get('allow_url_fopen')) {
         // check if we have the rights to download files from other domains
         // using copy or file_get_contents
         $this->output->writeln('The php config `allow_url_fopen` is disabled on the server. Enable it then try again.');
     } elseif (!is_writable(wire('config')->paths->siteModules)) {
         // check if module directory is writeable
         $this->output->writeln('Make sure your /site/modules directory is writeable by PHP.');
     } else {
         $github = $input->getOption('github');
         $branch = $input->getOption('branch');
         if (!empty($github)) {
             $branch = !empty($branch) ? $input->getOption('branch') : 'master';
             $github = 'https://github.com/' . $input->getOption('github') . '/archive/' . $branch . '.zip';
         }
         foreach ($modules as $module) {
             $this->output->writeln("\n<bg=yellow;options=bold> - Module '{$module}': </bg=yellow;options=bold>\n");
             if ($this->checkIfModuleExists($module)) {
                 $this->output->writeln(" <error> Module '{$module}' already exists! </error>\n");
             } else {
                 // reset PW modules cache
                 wire('modules')->resetCache();
                 if (isset($github)) {
                     $this->downloadModule($module, $github);
                 } else {
                     $this->downloadModuleIfExists($module);
                 }
             }
         }
         wire('modules')->resetCache();
     }
 }
 /**
  * @param InputInterface $input
  * @param OutputInterface $output
  * @return int|null|void
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     parent::bootstrapProcessWire($output);
     if (!\ProcessWire\wire('config')->moduleServiceKey) {
         throw new \RuntimeException('No module service key was found.');
     }
     if ($input->getArgument('modules') && !$input->getOption('check')) {
         // upgrade specific modules
         $modules = explode(",", $input->getArgument('modules'));
         if ($modules) {
             $this->upgradeModules($modules, $output);
         }
     } else {
         \ProcessWire\wire('modules')->resetCache();
         if ($moduleVersions = parent::getModuleVersions(true, $output)) {
             $output->writeln("<info>An upgrade is available for:</info>");
             foreach ($moduleVersions as $name => $info) {
                 $output->writeln("  - {$name}: {$info['local']} -> {$info['remote']}");
             }
         } else {
             $output->writeln("<info>Your modules are up-to-date.</info>");
         }
     }
 }
 /**
  * @return string
  */
 protected function getModuleDirectory()
 {
     $modDir = getcwd() . parent::getModuleDirectory();
     return $modDir;
 }