/**
  * A convenience wrapper to a RevisionSaver.
  * @param string $title The title of the new page.
  * @param string $content The wikitext to save to the page.
  * @return Page The saved Page.
  */
 protected function savePage($title, $content)
 {
     $pageIdentifier = new PageIdentifier(new Title($title));
     $revision = new Revision(new Content($content), $pageIdentifier);
     $this->factory->newRevisionSaver()->save($revision);
     return $this->factory->newPageGetter()->getFromPageIdentifier($pageIdentifier);
 }
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $wiki = $input->getOption('wiki');
     $user = $input->getOption('user');
     $revids = $input->getArgument('revid');
     $userDetails = $this->appConfig->offsetGet('users.' . $user);
     $wikiDetails = $this->appConfig->offsetGet('wikis.' . $wiki);
     if ($userDetails === null) {
         throw new RuntimeException('User not found in config');
     }
     if ($wikiDetails === null) {
         throw new RuntimeException('Wiki not found in config');
     }
     $api = new MediawikiApi($wikiDetails['url']);
     $loggedIn = $api->login(new ApiUser($userDetails['username'], $userDetails['password']));
     if (!$loggedIn) {
         $output->writeln('Failed to log in');
         return -1;
     }
     $mwFactory = new MediawikiFactory($api);
     $getter = $mwFactory->newPageGetter();
     $saver = $mwFactory->newRevisionSaver();
     foreach ($revids as $revid) {
         $revid = intval($revid);
         $page = $getter->getFromRevisionId($revid);
         $page = $getter->getFromPage($page);
         $goodText = $page->getRevisions()->get($revid)->getContent()->getData();
         $currentRevision = $page->getRevisions()->getLatest();
         $currentText = $currentRevision->getContent()->getData();
         if ($goodText === $currentText) {
             $output->writeln('Page already has same content as revision: ' . $revid);
             return null;
         }
         if ($input->getOption('asheader')) {
             if (strstr($currentText, $goodText)) {
                 $goodText = $goodText . "\n\n" . trim(str_replace($goodText, '', $currentText));
             } else {
                 $goodText = $goodText . "\n\n" . $currentText;
             }
         }
         $newRevision = new Revision(new Content($goodText), $page->getPageIdentifier());
         $success = $saver->save($newRevision, new EditInfo($this->getEditSummary($input->getOption('summary'), $revid), boolval($input->getOption('minor')), boolval($input->getOption('bot'))));
         if ($success) {
             $output->writeln('Restored revision: ' . $revid);
         } else {
             $output->writeln('Failed to restore revision: ' . $revid);
         }
     }
     return null;
 }