/**
  * @param array[] $siteLinks
  * @param Item $item
  *
  * @return ChangeOp[]
  */
 private function getSiteLinksChangeOps(array $siteLinks, Item $item)
 {
     $siteLinksChangeOps = array();
     $sites = $this->siteLinkTargetProvider->getSiteList($this->siteLinkGroups);
     foreach ($siteLinks as $siteId => $arg) {
         $this->checkSiteLinks($arg, $siteId, $sites);
         $globalSiteId = $arg['site'];
         if (!$sites->hasSite($globalSiteId)) {
             $this->errorReporter->dieError("There is no site for global site id '{$globalSiteId}'", 'no-such-site');
         }
         $linkSite = $sites->getSite($globalSiteId);
         $shouldRemove = array_key_exists('remove', $arg) || !isset($arg['title']) && !isset($arg['badges']) || isset($arg['title']) && $arg['title'] === '';
         if ($shouldRemove) {
             $siteLinksChangeOps[] = $this->siteLinkChangeOpFactory->newRemoveSiteLinkOp($globalSiteId);
         } else {
             $badges = isset($arg['badges']) ? $this->parseSiteLinkBadges($arg['badges']) : null;
             if (isset($arg['title'])) {
                 $linkPage = $linkSite->normalizePageName($this->stringNormalizer->trimWhitespace($arg['title']));
                 if ($linkPage === false) {
                     $this->errorReporter->dieMessage('no-external-page', $globalSiteId, $arg['title']);
                 }
             } else {
                 $linkPage = null;
                 if (!$item->getSiteLinkList()->hasLinkWithSiteId($globalSiteId)) {
                     $this->errorReporter->dieMessage('no-such-sitelink', $globalSiteId);
                 }
             }
             $siteLinksChangeOps[] = $this->siteLinkChangeOpFactory->newSetSiteLinkOp($globalSiteId, $linkPage, $badges);
         }
     }
     return $siteLinksChangeOps;
 }
 /**
  * @param array $params
  *
  * @return ChangeOpSiteLink
  */
 private function getChangeOp(array $params)
 {
     if ($this->shouldRemove($params)) {
         $linksite = $this->stringNormalizer->trimToNFC($params['linksite']);
         return $this->siteLinkChangeOpFactory->newRemoveSiteLinkOp($linksite);
     } else {
         $linksite = $this->stringNormalizer->trimToNFC($params['linksite']);
         $sites = $this->siteLinkTargetProvider->getSiteList($this->siteLinkGroups);
         $site = $sites->getSite($linksite);
         if ($site === false) {
             $this->errorReporter->dieError('The supplied site identifier was not recognized', 'not-recognized-siteid');
         }
         if (isset($params['linktitle'])) {
             $page = $site->normalizePageName($this->stringNormalizer->trimWhitespace($params['linktitle']));
             if ($page === false) {
                 $this->errorReporter->dieMessage('no-external-page', $linksite, $params['linktitle']);
             }
         } else {
             $page = null;
         }
         $badges = isset($params['badges']) ? $this->parseSiteLinkBadges($params['badges']) : null;
         return $this->siteLinkChangeOpFactory->newSetSiteLinkOp($linksite, $page, $badges);
     }
 }