/**
  * List available sites
  *
  * @return void
  */
 public function listCommand()
 {
     $sites = $this->siteRepository->findAll();
     if ($sites->count() === 0) {
         $this->outputLine('No sites available');
         $this->quit(0);
     }
     $longestSiteName = 4;
     $longestNodeName = 9;
     $longestSiteResource = 17;
     $availableSites = array();
     foreach ($sites as $site) {
         /** @var Site $site */
         array_push($availableSites, array('name' => $site->getName(), 'nodeName' => $site->getNodeName(), 'siteResourcesPackageKey' => $site->getSiteResourcesPackageKey(), 'status' => $site->getState() === SITE::STATE_ONLINE ? 'online' : 'offline'));
         if (strlen($site->getName()) > $longestSiteName) {
             $longestSiteName = strlen($site->getName());
         }
         if (strlen($site->getNodeName()) > $longestNodeName) {
             $longestNodeName = strlen($site->getNodeName());
         }
         if (strlen($site->getSiteResourcesPackageKey()) > $longestSiteResource) {
             $longestSiteResource = strlen($site->getSiteResourcesPackageKey());
         }
     }
     $this->outputLine();
     $this->outputLine(' ' . str_pad('Name', $longestSiteName + 15) . str_pad('Node name', $longestNodeName + 15) . str_pad('Resources package', $longestSiteResource + 15) . 'Status ');
     $this->outputLine(str_repeat('-', $longestSiteName + $longestNodeName + $longestSiteResource + 7 + 15 + 15 + 15 + 2));
     foreach ($availableSites as $site) {
         $this->outputLine(' ' . str_pad($site['name'], $longestSiteName + 15) . str_pad($site['nodeName'], $longestNodeName + 15) . str_pad($site['siteResourcesPackageKey'], $longestSiteResource + 15) . $site['status']);
     }
     $this->outputLine();
 }
 /**
  * Returns the form definitions for the step
  *
  * @param FormDefinition $formDefinition
  * @return void
  */
 protected function buildForm(FormDefinition $formDefinition)
 {
     $page1 = $formDefinition->createPage('page1');
     $page1->setRenderingOption('header', 'Create a new site');
     $introduction = $page1->createElement('introduction', 'Neos.Form:StaticText');
     $introduction->setProperty('text', 'There are two ways of creating a site. Choose between the following:');
     $importSection = $page1->createElement('import', 'Neos.Form:Section');
     $importSection->setLabel('Import a site from an existing site package');
     $sitePackages = array();
     foreach ($this->packageManager->getFilteredPackages('available', null, 'neos-site') as $package) {
         $sitePackages[$package->getPackageKey()] = $package->getPackageKey();
     }
     if (count($sitePackages) > 0) {
         $site = $importSection->createElement('site', 'Neos.Form:SingleSelectDropdown');
         $site->setLabel('Select a site package');
         $site->setProperty('options', $sitePackages);
         $site->addValidator(new NotEmptyValidator());
         $sites = $this->siteRepository->findAll();
         if ($sites->count() > 0) {
             $prune = $importSection->createElement('prune', 'Neos.Form:Checkbox');
             $prune->setLabel('Delete existing sites');
         }
     } else {
         $error = $importSection->createElement('noSitePackagesError', 'Neos.Form:StaticText');
         $error->setProperty('text', 'No site packages were available, make sure you have an active site package');
         $error->setProperty('elementClassAttribute', 'alert alert-warning');
     }
     if ($this->packageManager->isPackageActive('Neos.SiteKickstarter')) {
         $separator = $page1->createElement('separator', 'Neos.Form:StaticText');
         $separator->setProperty('elementClassAttribute', 'section-separator');
         $newPackageSection = $page1->createElement('newPackageSection', 'Neos.Form:Section');
         $newPackageSection->setLabel('Create a new site package with a dummy site');
         $packageName = $newPackageSection->createElement('packageKey', 'Neos.Form:SingleLineText');
         $packageName->setLabel('Package Name (in form "Vendor.DomainCom")');
         $packageName->addValidator(new PackageKeyValidator());
         $siteName = $newPackageSection->createElement('siteName', 'Neos.Form:SingleLineText');
         $siteName->setLabel('Site Name (e.g. "domain.com")');
     } else {
         $error = $importSection->createElement('neosKickstarterUnavailableError', 'Neos.Form:StaticText');
         $error->setProperty('text', 'The Neos Kickstarter package (Neos.SiteKickstarter) is not installed, install it for kickstarting new sites (using "composer require typo3/neos-kickstarter")');
         $error->setProperty('elementClassAttribute', 'alert alert-warning');
     }
     $explanation = $page1->createElement('explanation', 'Neos.Form:StaticText');
     $explanation->setProperty('text', 'Notice the difference between a site package and a site. A site package is a Flow package that can be used for creating multiple site instances.');
     $explanation->setProperty('elementClassAttribute', 'alert alert-info');
     $step = $this;
     $callback = function (FinisherContext $finisherContext) use($step) {
         $step->importSite($finisherContext);
     };
     $this->closureFinisher = new ClosureFinisher();
     $this->closureFinisher->setOption('closure', $callback);
     $formDefinition->addFinisher($this->closureFinisher);
     $formDefinition->setRenderingOption('skipStepNotice', 'You can always import a site using the site:import command');
 }
 /**
  * @return void
  */
 public function indexAction()
 {
     $sitePackagesAndSites = array();
     foreach ($this->packageManager->getFilteredPackages('available', null, 'neos-site') as $sitePackageKey => $sitePackage) {
         /** @var PackageInterface $sitePackage */
         $sitePackagesAndSites[strtolower(str_replace('.', '_', $sitePackageKey))] = array('package' => $sitePackage, 'packageKey' => $sitePackage->getPackageKey(), 'packageIsActive' => $this->packageManager->isPackageActive($sitePackage->getPackageKey()));
     }
     $sites = $this->siteRepository->findAll();
     foreach ($sites as $site) {
         $siteResourcePackageKey = strtolower(str_replace('.', '_', $site->getSiteResourcesPackageKey()));
         if (!isset($sitePackagesAndSites[$siteResourcePackageKey])) {
             $sitePackagesAndSites[$siteResourcePackageKey] = array('packageKey' => $site->getSiteResourcesPackageKey());
         }
         if (!isset($sitePackagesAndSites[$siteResourcePackageKey]['sites'])) {
             $sitePackagesAndSites[$siteResourcePackageKey]['sites'] = array();
         }
         $sitePackagesAndSites[$siteResourcePackageKey]['sites'][] = $site;
     }
     $this->view->assignMultiple(array('sitePackagesAndSites' => $sitePackagesAndSites, 'multipleSites' => count($sites) > 1));
 }
 /**
  * Remove all sites and their respective nodes and domains
  *
  * @return void
  */
 public function pruneAll()
 {
     foreach ($this->siteRepository->findAll() as $site) {
         $this->pruneSite($site);
     }
 }