InformationArchitecture.ps1
<#
.SYNOPSIS Converts a simplified information architecture json file into a Valo compatible information architecture. .DESCRIPTION Converts a simplified information architecture json file into a Valo compatible information architecture. .LINK Nexus Innovations : http://www.nexusinno.com #> function global:ConvertFrom-SimplifiedArchitecture { [CmdletBinding()] Param ( [ValidateScript( { Test-Path $_ -PathType Leaf })] [Parameter(Mandatory = $true)] [string]$SimplifiedIAPath, [Parameter(Mandatory = $true)] [string]$GenesisPath ) $defaultTemplateCollection = ( @{ templateName = "ValoLocationsPage.xml" }, @{ templateName = "ValoPeopleDirectory.xml" postExecutionScripts = ( @{ script = "Fix-ConnectedWebParts" parameters = ( @{ parameterValue = "People-Directory" } ) } ) }, @{ templateName = "ValoNewsHub.xml" postExecutionScripts = ( @{ script = "Fix-ConnectedWebParts" parameters = ( @{ parameterValue = "News-Hub" } ) } ) }, @{ templateName = "ValoSearchHub.xml" postExecutionScripts = ( @{ script = "Fix-ConnectedWebParts" parameters = ( @{ parameterValue = "Search-Hub" } ) } ) }, @{ templateName = "ValoSocialHub.xml" }, @{ templateName = "ValoFAQ.xml" }, @{ templateName = "ValoPeopleMeta.xml" } ) $defaultPageTemplate = "SingleColumn.Template.xml" $simpleSiteCollection = @{ } # Is input file's json valid? try { $simpleSiteCollection = Get-Content -Path $SimplifiedIAPath -Raw -Encoding UTF8 | ConvertFrom-Json } catch { throw $_.Exception.Message } $valoSiteCollection = @() $valoNavigationStructure = @() foreach ($site in $simpleSiteCollection.Sites) { $siteTitle = $site.Site if ($siteTitle.length -eq 0) { throw "Input json is not a valid json." } $siteSimplifiedTitle = $siteTitle | ConvertTo-SafeString $valoNavigationNodes = @() $valoSitePageCollection = @() foreach ($sitePage in $site.SitePages) { $sitePageTitle = $sitePage.PageTitle $sitePageSimplifiedTitle = $sitePageTitle | ConvertTo-SafeString $valoSitePageCollection += @{ title = $sitePageTitle fileName = "$($sitePageSimplifiedTitle).aspx" templateName = $defaultPageTemplate } $valoNavigationNodeItems = @() foreach ($subPage in $sitePage.SubPages) { $subPageTitle = $subPage.PageTitle $subPageSimplifiedTitle = $subPageTitle | ConvertTo-SafeString $valoSitePageCollection += @{ title = $subPageTitle fileName = "$($subPageSimplifiedTitle).aspx" templateName = $defaultPageTemplate } $valoNavigationNodeItems += @{ url = "{prefix}$($siteSimplifiedTitle){suffix}/SitePages/$($subPageSimplifiedTitle).aspx" title = $subPageTitle } } $valoNavigationNodes += @{ url = "{prefix}$($siteSimplifiedTitle){suffix}/SitePages/$($sitePageSimplifiedTitle).aspx" title = $sitePageTitle navigationNodes = $valoNavigationNodeItems } } foreach ($sitePage in $site.NonNavSitePages) { $valoSitePageCollection += @{ title = $sitePage fileName = $sitePage | ConvertTo-SafeString templateName = $defaultPageTemplate } } $valoSiteCollection += @{ url = "{prefix}$($siteSimplifiedTitle){suffix}" title = $siteTitle basetemplate = "CommunicationSite" valoPnpTemplates = $defaultTemplateCollection pages = $valoSitePageCollection } $valoNavigationStructure += @{ url = "{prefix}$($siteSimplifiedTitle){suffix}" title = $siteTitle navigationNodes = $valoNavigationNodes customProperties = @() } } # TODO: Don't create a new file for the output. Instead, load the valo config file, modify the target fields, and save changes. $valoGenesisConfigFile = Get-Content -Path $GenesisPath -Raw -Encoding UTF8 -ErrorAction SilentlyContinue | ConvertFrom-Json $valoGenesisConfigFile.valoSite.associatedSites = $valoSiteCollection $valoGenesisConfigFile.navigationStructure = $valoNavigationStructure $valoGenesisConfigFile | ` ConvertTo-Json -Depth 8 | ` ForEach-Object { [System.Text.RegularExpressions.Regex]::Unescape($_) } | ` Out-File $GenesisPath -Encoding utf8 } function script:Remove-LatinCharacters { Param ( [string]$InputString ) return [Text.Encoding]::UTF8.GetString([Text.Encoding]::GetEncoding("Cyrillic").GetBytes($InputString)) } function script:ConvertTo-SafeString { Param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [string]$InputString ) return Remove-LatinCharacters($InputString -replace " ", "-" -replace "'", "-" ` -replace "\(", "-" -replace "\)", "-" -replace ",", "-").ToLowerInvariant() } |