public function preDeploy()
 {
     $siteArray = $this->site;
     if (empty($siteArray)) {
         throw new Exception('Site array could not be loaded');
     }
     $site = URLUtils::resolveSiteFromArray($siteArray, !empty($siteArray['matched_alias']) ? $siteArray['matched_alias'] : false);
     //
     //        $site = new Site();
     //        $site->Slug = $siteArray['slug'];
     //        $site->Name = isset($siteArray['name'])?$siteArray['name']:$site->Slug;
     //        $site->Description = isset($siteArray['description'])?$siteArray['description']:'';
     //
     //        if(isset($siteArray['domain']))
     //            $site->Domain = $siteArray['domain'];
     //        if(isset($siteArray['domain_base_uri']))
     //            $site->DomainBaseURI = $siteArray['domain_base_uri'];
     //        if(isset($siteArray['domain_aliases']))
     //            $site->DomainAliases = $siteArray['domain_aliases'];
     //        if(isset($siteArray['domain_redirects']))
     //            $site->DomainRedirects = $siteArray['domain_redirects'];
     //
     //        $site->BaseURL = 'http'.($site->isSSL()?'s':'').'://'.rtrim($domain.$site->DomainBaseURI,'/');
     $this->RequestContext->setSite($site);
     //        if(isset($siteArray['storagefacilities']))
     //        {
     //
     //            $sfs = $siteArray['storagefacilities'];
     //            foreach($sfs as $key => $sfArray)
     //            {
     //
     //                if(empty($sfArray['for']))
     //                    throw new Exception('storage_facility property "for" is missing');
     //
     //                if(empty($sfArray['ref']))
     //                    throw new Exception('storage_facility property "ref" is missing');
     //
     //                $info = new StorageFacilityInfo();
     //                $info->For = $sfArray['for'];
     //                $info->GenerateRewriteRules = isset($sfArray['generate_rewrite_rules'])?StringUtils::strToBool($sfArray['generate_rewrite_rules']):false;
     //                $info->ObjectRef = $sfArray['ref'];
     //
     //                $params = new StorageFacilityParams();
     //                $params->BaseURI = $sfArray['base_uri'];
     //                $params->BaseStoragePath = $sfArray['base_storage_path'];
     //                $params->Domain = $sfArray['domain'];
     //
     //                $info->StorageFacilityParams = $params;
     //
     //                $this->RequestContext->setStorageFacilityInfo($info->For, $info);
     //            }
     //        }
     foreach ($site->getStorageFacilityInfo() as $slug => $sf) {
         $this->RequestContext->setStorageFacilityInfo($slug, $sf);
     }
 }
 protected function parse()
 {
     if ($this->changed) {
         return;
     }
     if ($this->parsed != true) {
         $this->cmsNavItems = array();
         $this->plugins = array();
         $this->aspects = array();
         $this->elements = array();
         $this->site = null;
         $xml = $this->SimpleXMLParser->parseXMLFile($this->environmentsXMLFile);
         foreach ($xml as $ename => $enode) {
             switch ((string) $ename) {
                 case 'environment':
                     foreach ($enode->attributes() as $name => $value) {
                         $environment[$name] = (string) $value;
                     }
                     if (!empty($environment['slug']) && strtolower($environment['slug']) != strtolower($_SERVER['ENVIRONMENT'])) {
                         continue;
                     }
                     $this->rewriteBase = strval($enode->rewrite_base);
                     $this->publicFilesBaseURI = strval($enode->public_files_base_uri);
                     foreach ($enode as $name => $node) {
                         switch ((string) $name) {
                             case 'context':
                                 $context = array('sites' => array());
                                 foreach ($node->attributes() as $name => $value) {
                                     $context[$name] = (string) $value;
                                 }
                                 foreach ($node as $childNode) {
                                     if ($childNode->getName() == 'sites') {
                                         foreach ($childNode as $siteNode) {
                                             $site = array();
                                             foreach ($siteNode->attributes() as $name => $value) {
                                                 $site[$name] = (string) $value;
                                             }
                                             // By default if a site is not specified as enabled, it is enabled.
                                             if (!array_key_exists('enabled', $site)) {
                                                 $site['enabled'] = true;
                                             }
                                             // If the context that contains the site is disabled
                                             // The site within it should always be disabled.
                                             if (!StringUtils::strToBool($context['enabled'])) {
                                                 $site['enabled'] = false;
                                             }
                                             foreach ($siteNode as $siteChildNode) {
                                                 if ((string) $siteChildNode->getName() == 'storage_facility') {
                                                     $sf = array();
                                                     foreach ($siteChildNode->attributes() as $name => $value) {
                                                         $sf[$name] = (string) $value;
                                                     }
                                                     foreach ($siteChildNode as $sfChildNode) {
                                                         $sf[(string) $sfChildNode->getName()] = (string) $sfChildNode;
                                                     }
                                                     if (isset($sf['for'])) {
                                                         $site['storagefacilities'][$sf['for']] = $sf;
                                                     }
                                                 } else {
                                                     $site[(string) $siteChildNode->getName()] = (string) $siteChildNode;
                                                 }
                                             }
                                             $this->siteContext = $context;
                                             $this->site = $site;
                                             break;
                                         }
                                     } else {
                                         if ($childNode->getName() == 'storage_facility') {
                                             $sf = array();
                                             foreach ($childNode->attributes() as $name => $value) {
                                                 $sf[$name] = (string) $value;
                                             }
                                             foreach ($childNode as $sfChildNode) {
                                                 $sf[(string) $sfChildNode->getName()] = (string) $sfChildNode;
                                             }
                                             if (isset($sf['for'])) {
                                                 $context['storagefacilities'][$sf['for']] = $sf;
                                             }
                                         } else {
                                             $context[(string) $childNode->getName()] = (string) $childNode;
                                         }
                                     }
                                 }
                                 if (empty($context['sites'])) {
                                     unset($context['sites']);
                                 }
                                 $contextObject = URLUtils::resolveContextFromArray($context, $this->isAliasDomain);
                                 $contextObject->ContextID = count($this->contexts) + 1;
                                 $this->contexts[] = $contextObject;
                                 break;
                         }
                     }
                     break;
             }
         }
         $xml = $this->SimpleXMLParser->parseXMLFile($this->systemXMLFile);
         foreach ($xml as $name => $node) {
             $array = array();
             $sort_array = array();
             $sort_array2 = array();
             switch ((string) $name) {
                 case 'plugins':
                     foreach ($node as $pluginNode) {
                         if ($pluginNode->getName() == 'plugin') {
                             $item = $this->SystemXMLConverter->xmlToPlugin(new Plugin(), $pluginNode);
                             $sort_array[] = $item->Slug;
                             $array[] = $item;
                         }
                     }
                     array_multisort($sort_array, SORT_ASC, $array);
                     $this->plugins = $array;
                     break;
                 case 'elements':
                     foreach ($node as $elementNode) {
                         if ($elementNode->getName() == 'element') {
                             $item = $this->SystemXMLConverter->xmlToElement(new Element(), $elementNode);
                             $sort_array[] = $item->Slug;
                             $array[] = $item;
                         }
                     }
                     array_multisort($sort_array, SORT_ASC, $array);
                     $this->elements = $array;
                     break;
                 case 'aspects':
                     foreach ($node as $aspectNode) {
                         if ($aspectNode->getName() == 'aspect') {
                             $item = $this->SystemXMLConverter->xmlToAspect(new Aspect(), $aspectNode);
                             $sort_array[] = $item->Slug;
                             $array[] = $item;
                         }
                     }
                     array_multisort($sort_array, SORT_ASC, $array);
                     $this->aspects = $array;
                     break;
                 case 'cmsnavitems':
                     foreach ($node as $cmsNavNode) {
                         if ($cmsNavNode->getName() == 'item') {
                             $item = $this->SystemXMLConverter->xmlToCMSNavItem(new CMSNavItem(), $cmsNavNode);
                             $sort_array[] = $item->SortOrder;
                             $sort_array2[] = $item->Slug;
                             $array[] = $item;
                         }
                     }
                     array_multisort($sort_array, SORT_ASC, $sort_array2, SORT_ASC, $array);
                     $this->cmsNavItems = $array;
                     break;
             }
         }
         $contextArray = $this->siteContext;
         $site2 = array_merge($contextArray, $this->site);
         if (isset($contextArray['storagefacilities'])) {
             foreach ($contextArray['storagefacilities'] as $key => $sf) {
                 $site2['storagefacilities'][$key] = $sf;
             }
         }
         if (isset($site['storagefacilities'])) {
             foreach ($site['storagefacilities'] as $key => $sf) {
                 $site2['storagefacilities'][$key] = $sf;
             }
         }
         $site2['context'] = $contextArray['slug'];
         unset($site2['sites']);
         $siteArray = $site2;
         $site = URLUtils::resolveSiteFromArray($siteArray, $this->isAliasDomain);
         $site->SiteID = 1;
         $this->sites[$site->Slug] = $site;
         $this->parsed = true;
     }
 }