/** * Action to show an overview of the sites * @param \ride\web\cms\Cms $cms Facade of the CMS * @param string $locale Code of the locale * @return null */ public function indexAction(Cms $cms, $locale = null) { if (!$locale) { $locale = $this->getContentLocale(); } else { $this->setContentLocale($locale); } $defaultRevision = $cms->getDefaultRevision(); $draftRevision = $cms->getDraftRevision(); $sites = $cms->getSites(); if ($sites) { foreach ($sites as $siteId => $site) { $availableLocales = $site->getAvailableLocales(); if ($availableLocales == Node::LOCALES_ALL || isset($availableLocales[$locale])) { $siteLocale = $locale; } else { $siteLocale = reset($availableLocales); } if ($site->hasRevision($draftRevision)) { $revision = $draftRevision; } elseif ($site->hasRevision($defaultRevision)) { $revision = $defaultRevision; } else { $revision = $site->getRevision(); } $sites[$siteId] = array('name' => $site->getName($locale), 'url' => $this->getUrl('cms.site.detail.locale', array('site' => $site->getId(), 'revision' => $revision, 'locale' => $siteLocale)), 'data' => $site); } // When only 1 site is available, redirect to the site instead of // showing a dropdown with a single option. if (count($sites) == 1) { $site = array_shift($sites); $this->response->setRedirect($site['url']); return; } } $this->setTemplateView('cms/backend/site', array('sites' => $sites, 'locale' => $locale)); }