diff --git a/unicorn/SPE/Scripts/SPE/SPE/Tools/Package Generator/Content Editor/Context Menu/Packaging/Add Item to Package.yml b/unicorn/SPE/Scripts/SPE/SPE/Tools/Package Generator/Content Editor/Context Menu/Packaging/Add Item to Package.yml index 2489cff29..d5118a9fa 100644 --- a/unicorn/SPE/Scripts/SPE/SPE/Tools/Package Generator/Content Editor/Context Menu/Packaging/Add Item to Package.yml +++ b/unicorn/SPE/Scripts/SPE/SPE/Tools/Package Generator/Content Editor/Context Menu/Packaging/Add Item to Package.yml @@ -24,9 +24,7 @@ SharedFields: $parameters = @( @{ Name = "Mode"; Title="Installation Options"; Value = "Merge-Merge"; Options = $installOptions; OptionTooltips = $installOptionsTooltips; Tooltip = "Hover over each option to view a short description."; Hint = "How should the installer behave if the package contains items that already exist?

Item : $($selectedItem.ProviderPath)"; Editor="combo"}) - if($selectedItem.ItemPath.StartsWith("/sitecore/content")) { - $parameters += @{ Name = "IncludeLinkedItems"; Title = "Include Linked Items"; Hint = "Choose one or more options below to include items linked. This relies on the Link Database to determine references."; Options = $linkedItemOptions; OptionTooltips = $linkedItemOptionTooltips; Editor = "checkbox" } - } + $parameters += @{ Name = "IncludeLinkOptions"; Title = "Include linked Items"; Value=0; Tooltip = "Define how linked items will be included in the package"; Options = $linkOptions; OptionTooltips = $linkOptionsTooltips; Editor = "radio" } $result = Read-Variable @defaultProps -Parameters $parameters -Description "Set installation options for this package source." @@ -72,9 +70,27 @@ SharedFields: } } - $LinkedOptions = ($IncludeLinkedItems | Measure-Object -Sum) | Select-Object -ExpandProperty Sum + # Linked items dialog + $itemsToPack = @() + $itemsToPack += Get-ChildrenToInclude $selectedItem $IncludeItems + $linkedItems = @() + $linkedItems += Get-LinkedItems $selectedItem $itemsToPack $IncludeLinkOptions + + if ($linkedItems.Count -gt 0){ + $selectedLinks = Get-SelectedLinks $linkedItems + } - $package = Add-ItemToPackage -Package $package -Item $selectedItem -LinkedOptions $LinkedOptions + # Add selected linked items to package + if ($selectedLinks -AND $selectedLinks.Count -gt 0){ + foreach ($linkId in $selectedLinks) { + $itemsToPack += $linkedItems | Where-Object -FilterScript { $_.ID.ToString() -like $linkId } + } + } + + # Adding items to package + foreach ($itemToPack in $itemsToPack) { + $package = Add-ItemToPackage -Package $package -Item $itemToPack -IncludeDescendants $false + } Close-Window - ID: "ba3f86a2-4a1c-4d78-b63d-91c2779c1b5e" @@ -133,4 +149,4 @@ Languages: Value: 20130919T174300Z - ID: "8cdc337e-a112-42fb-bbb4-4143751e123f" Hint: __Revision - Value: "7d3644ee-b722-4be1-8407-39d56534080c" + Value: "1ffe0387-a7f6-44d7-a382-6ba35afbde2d" diff --git a/unicorn/SPE/Scripts/SPE/SPE/Tools/Package Generator/Content Editor/Context Menu/Packaging/Add Tree to Package.yml b/unicorn/SPE/Scripts/SPE/SPE/Tools/Package Generator/Content Editor/Context Menu/Packaging/Add Tree to Package.yml index 7486cd90d..92a6ddd82 100644 --- a/unicorn/SPE/Scripts/SPE/SPE/Tools/Package Generator/Content Editor/Context Menu/Packaging/Add Tree to Package.yml +++ b/unicorn/SPE/Scripts/SPE/SPE/Tools/Package Generator/Content Editor/Context Menu/Packaging/Add Tree to Package.yml @@ -26,9 +26,7 @@ SharedFields: @{ Name = "Mode"; Title="Installation Options"; Value= "Merge-Merge"; Options = $installOptions; OptionTooltips = $installOptionsTooltips; Tooltip = "Hover over each option to view a short description."; Hint = "How should the installer behave if the package contains items that already exist?"; Editor="combo"} ) - if($selectedItem.ItemPath.StartsWith("/sitecore/content")) { - $parameters += @{ Name = "IncludeLinkedItems"; Title = "Include Linked Items"; Hint = "Choose one or more options below to include items linked. This relies on the Link Database to determine references."; Options = $linkedItemOptions; OptionTooltips = $linkedItemOptionTooltips; Editor = "checkbox" } - } + $parameters += @{ Name = "IncludeLinkOptions"; Title = "Include linked Items"; Value=0; Tooltip = "Define how linked items will be included in the package"; Options = $linkOptions; OptionTooltips = $linkOptionsTooltips; Editor = "radio" } $result = Read-Variable @defaultProps -Parameters $parameters -Description "Set installation options for this package source." @@ -74,21 +72,28 @@ SharedFields: } } - $LinkedOptions = ($IncludeLinkedItems | Measure-Object -Sum) | Select-Object -ExpandProperty Sum + # Linked items dialog + $itemsToPack = @() + $itemsToPack += Get-ChildrenToInclude $selectedItem $IncludeItems + $linkedItems = @() + $linkedItems += Get-LinkedItems $selectedItem $itemsToPack $IncludeLinkOptions - if ($IncludeItems -eq "RootAndDescendants") { - $package = Add-ItemToPackage -Package $package -Item $selectedItem -LinkedOptions $LinkedOptions -IncludeDescendants $true - } else { - if ($IncludeItems -eq "RootAndChildren") { - $package = Add-ItemToPackage -Package $package -Item $selectedItem -LinkedOptions $LinkedOptions -IncludeDescendants $false - } - - # Iterate over the children and either add to include descendants or just themselves - Get-ChildItem -Path . | ForEach-Object { - $package = Add-ItemToPackage -Package $package -Item $_ -LinkedOptions $LinkedOptions -IncludeDescendants ($IncludeItems -eq "DescendantsOnly") + if ($linkedItems.Count -gt 0){ + $selectedLinks = Get-SelectedLinks $linkedItems + } + + # Add selected linked items to package + if ($selectedLinks -AND $selectedLinks.Count -gt 0){ + foreach ($linkId in $selectedLinks) { + $itemsToPack += $linkedItems | Where-Object -FilterScript { $_.ID.ToString() -like $linkId } } } + # Adding items to package + foreach ($itemToPack in $itemsToPack) { + $package = Add-ItemToPackage -Package $package -Item $itemToPack -IncludeDescendants $false + } + Close-Window - ID: "ba3f86a2-4a1c-4d78-b63d-91c2779c1b5e" Hint: __Sortorder @@ -146,4 +151,4 @@ Languages: Value: 20130919T174500Z - ID: "8cdc337e-a112-42fb-bbb4-4143751e123f" Hint: __Revision - Value: "6a920805-c223-47ff-ba1e-976f2b80995c" + Value: "3b647a43-0c50-40c0-a0f5-8f213181ef44" diff --git a/unicorn/SPE/Scripts/SPE/SPE/Tools/Package Generator/Content Editor/Context Menu/Packaging/Quick Download Tree as Package.yml b/unicorn/SPE/Scripts/SPE/SPE/Tools/Package Generator/Content Editor/Context Menu/Packaging/Quick Download Tree as Package.yml index dc18a0fe7..d0eb391ae 100644 --- a/unicorn/SPE/Scripts/SPE/SPE/Tools/Package Generator/Content Editor/Context Menu/Packaging/Quick Download Tree as Package.yml +++ b/unicorn/SPE/Scripts/SPE/SPE/Tools/Package Generator/Content Editor/Context Menu/Packaging/Quick Download Tree as Package.yml @@ -19,7 +19,6 @@ SharedFields: $timestamp = Get-Date -Format "yyyyMMdd.HHss" $selectedItem = Get-Item -Path . - $path = $item.ProviderPath $examplePackageName = "$($timestamp).$($selectedItem.Name)" $includeLinkedItems = 0 @@ -28,16 +27,14 @@ SharedFields: @{ Name = "Author"; Value = [Sitecore.Context]::User.Profile.FullName; Tab="Package Metadata"}, @{ Name = "Publisher"; Value = [Sitecore.SecurityModel.License.License]::Licensee; Tab="Package Metadata"}, @{ Name = "Version"; Value = $selectedItem.Version; Tab="Package Metadata"}, - @{ Name = "Readme"; Title="Readme"; Lines=8; Tab="Package Metadata"}, + @{ Name = "Readme"; Title="Readme"; Lines=7; Tab="Package Metadata"}, @{ Name = "AsXml"; Title="Download Package as XML"; Value=[bool]$False; Editor="bool"; Tab="Package Metadata" }, @{ Name = "LeavePackage"; Title="Leave the package on the server"; Value=[bool]$False; Editor="bool"; Tab="Package Metadata" }, @{ Name = "IncludeItems"; Title="Items to include in package"; Value="RootAndDescendants"; Options=$rootOptions; OptionTooltips = $rootOptionTooltips; Tooltip = "Hover over each option to view a short description."; Hint = "The package will dynamically include the items based on your selection below.

Root : '$($selectedItem.ProviderPath)'"; Editor="combo"; Tab="Installation Options" }, @{ Name = "Mode"; Title="Installation Options"; Value = "Merge-Merge"; Options = $installOptions; OptionTooltips = $installOptionsTooltips; Tooltip = "Hover over each option to view a short description."; Hint = "How should the installer behave if the package contains items that already exist?"; Editor="combo"; Tab="Installation Options"} ) - if($selectedItem.ItemPath.StartsWith("/sitecore/content")) { - $parameters += @{ Name = "IncludeLinkedItems"; Title = "Include Linked Items"; Hint = "Choose one or more options below to include items linked. This relies on the Link Database to determine references."; Options = $linkedItemOptions; OptionTooltips = $linkedItemOptionTooltips; Editor = "checkbox" } - } + $parameters += @{ Name = "IncludeLinkOptions"; Title = "Include linked Items"; Value=0; Tooltip = "Define how linked items will be included in the package"; Options = $linkOptions; OptionTooltips = $linkOptionsTooltips; Editor = "radio" } $props = @{} + $defaultProps $props["Title"] = "Download Tree as Package" @@ -89,21 +86,29 @@ SharedFields: } } - $LinkedOptions = ($IncludeLinkedItems | Measure-Object -Sum) | Select-Object -ExpandProperty Sum + # Linked items dialog + $itemsToPack = @() + $itemsToPack += Get-ChildrenToInclude $selectedItem $IncludeItems + $linkedItems = @() + $linkedItems += Get-LinkedItems $selectedItem $itemsToPack $IncludeLinkOptions - if ($IncludeItems -eq "RootAndDescendants") { - $package = Add-ItemToPackage -Package $package -Item $selectedItem -LinkedOptions $LinkedOptions -IncludeDescendants $true - } else { - if ($IncludeItems -eq "RootAndChildren") { - $package = Add-ItemToPackage -Package $package -Item $selectedItem -LinkedOptions $LinkedOptions -IncludeDescendants $false - } - - # Iterate over the children and either add to include descendants or just themselves - Get-ChildItem -Path . | ForEach-Object { - $package = Add-ItemToPackage -Package $package -Item $_ -LinkedOptions $LinkedOptions -IncludeDescendants ($IncludeItems -eq "DescendantsOnly") + if ($linkedItems.Count -gt 0){ + $selectedLinks = Get-SelectedLinks $linkedItems + } + + # Add selected linked items to package + if ($selectedLinks -AND $selectedLinks.Count -gt 0){ + foreach ($linkId in $selectedLinks) { + $itemsToPack += $linkedItems | Where-Object -FilterScript { $_.ID.ToString() -like $linkId } } } + # Adding items to package + foreach ($itemToPack in $itemsToPack) { + $package = Add-ItemToPackage -Package $package -Item $itemToPack -IncludeDescendants $false + } + + if([string]::IsNullOrEmpty($packageName)) { $packageName = $examplePackageName } @@ -176,4 +181,4 @@ Languages: Value: 20130919T210627Z - ID: "8cdc337e-a112-42fb-bbb4-4143751e123f" Hint: __Revision - Value: "83528095-1837-456a-92ed-a5b18298b957" + Value: "3f313d53-4316-4fe0-8ca3-4f904e862ddb" diff --git a/unicorn/SPE/Scripts/SPE/SPE/Tools/Package Generator/Functions/Setup-PackageGenerator.yml b/unicorn/SPE/Scripts/SPE/SPE/Tools/Package Generator/Functions/Setup-PackageGenerator.yml index 9751e77cd..abea90e46 100644 --- a/unicorn/SPE/Scripts/SPE/SPE/Tools/Package Generator/Functions/Setup-PackageGenerator.yml +++ b/unicorn/SPE/Scripts/SPE/SPE/Tools/Package Generator/Functions/Setup-PackageGenerator.yml @@ -337,6 +337,241 @@ SharedFields: return $package } + + # Advanced Packaging adds + function Get-UniqueLinks { + param( + [item]$Item + ) + + $combined = @() + $combined += Get-UniqueReferrers $Item + $combined += Get-UniqueReferences $Item + return $combined | Sort-Object -Property @{Expression={$_.ID}} -Unique + } + + function Get-UniqueReferrers { + param( + [item]$Item + ) + $items = Get-ItemReferrer -Item $Item + return $items | Sort-Object -Property @{Expression={$_.ID}} -Unique + } + + function Get-UniqueReferences { + param( + [item]$Item + ) + $links = $Item.Links.GetAllLinks($true,$true) + $items = @() + foreach ($link in $links) { + $path = $link.TargetDatabaseName + $path += ":" + $link.TargetPath + try { + $item = Get-Item -Database $link.TargetDatabaseName -Path $path -ErrorAction SilentlyContinue + if ($item -ne $null){ + $items += $item + } + } + catch {} + } + return $items | Sort-Object -Property @{Expression={$_.ID}} -Unique + } + + function Get-OptionsForItems { + param( + [item[]]$Items, + [Item]$baseItem + ) + $options = [ordered]@{} + foreach ($item in $Items) { + $display = $item.Paths.Path.ToString() + if ($baseItem.Database.Name -ne $item.Database.Name){ + $display = $item.Database.Name + ":" + $display + } + + if ($options.Contains($display) -eq $false){ + $options.Add($display, $item.ID.ToString()) + } + } + return $options + } + + function Filter-ByPathContains { + param( + [item[]]$Items, + [string]$path + ) + $filtered = @() + $filtered += $Items | Where-Object -FilterScript { $_.Paths.Path -like $path } + return $filtered + } + + function Get-OtherItems { + param( + [item[]]$coveredItems, + [item[]]$allItems + ) + $others = @() + foreach ($i in $allItems) { + $filtered = $coveredItems | Where-Object -FilterScript { $_.ID -eq $i.ID } + if ($filtered -eq $null -or $filtered.Count -eq 0){ + $others += $i + } + } + return $others + } + + function Get-ChildrenToInclude { + param( + [Item]$baseItem, + [string]$rootOption + ) + $items = @() + + if($rootOption -eq "RootAndDescendants"){ + $items += $baseItem + $items += $baseItem.Axes.GetDescendants() + } + elseif($rootOption -eq "RootAndChildren"){ + $items += $baseItem + $items += $baseItem.Children + } + elseif($rootOption -eq "DescendantsOnly"){ + $items += $baseItem.Axes.GetDescendants() + } + elseif($rootOption -eq "ChildrenOnly"){ + $items += $baseItem.Children + } + + return $items + } + + function Get-LinkedItems { + param( + [Item]$selectedItem, + [Item[]]$itemsToPack, + [int]$IncludeLinkOptions + ) + $linkedItems = @() + + # 1 - Only parent references are added to the package + if ($IncludeLinkOptions -eq 1){ + $parentItem = $itemsToPack | Where-Object -FilterScript { $_.ID -like $selectedItem.ID } + if ($parentItem){ + $linkedItems = Get-UniqueLinks $parentItem + } + } + # 2 - All references are added to the package + elseif ($IncludeLinkOptions -eq 2){ + foreach ($item in $itemsToPack) { + $linkedItems += Get-UniqueLinks $item + } + } + + return $linkedItems + } + + function Get-SelectedLinks { + param( + [Item[]]$linkedItems + ) + $selectedLinks = @() + $parameters = @() + + $linkedItems = $linkedItems|Sort-Object {$_.Paths.Path} + + # Separate items by type + $covered = @() + $content = Filter-ByPathContains $linkedItems -Path "/sitecore/content/*" + if ($content -ne $null){ + $covered += $content + } + $media = Filter-ByPathContains $linkedItems -Path "/sitecore/media library/*" + if ($media -ne $null){ + $covered += $media + } + $layouts = Filter-ByPathContains $linkedItems -Path "/sitecore/layout/*" + if ($layouts -ne $null){ + $covered += $layouts + } + $templates = Filter-ByPathContains $linkedItems -Path "/sitecore/templates/*" + if ($templates -ne $null){ + $covered += $templates + } + $system = Filter-ByPathContains $linkedItems -Path "/sitecore/system/*" + if ($system -ne $null){ + $covered += $system + } + + $others = Get-OtherItems $covered $linkedItems + + foreach ($template in $templates) { + $templateChildren = $template.Axes.GetDescendants() + $templates += $templateChildren + $linkedItems += $templateChildren + } + + $templates = $templates|Sort-Object {$_.Paths.Path} + $linkedItems = $linkedItems|Sort-Object {$_.Paths.Path} + + # Build dialogs for each type + if ($content){ + $options = Get-OptionsForItems $content $selectedItem + $parameters += @{ Name = "IncludedContent"; Title = "Content"; Options = $options; Editor = "checkbox"; Tab="Content ("+$options.Count+")" } + } + if ($media){ + $options = Get-OptionsForItems $media $selectedItem + $parameters += @{ Name = "IncludedMedia"; Title = "Media"; Options = $options; Editor = "checkbox"; Tab="Media ("+$options.Count+")" } + } + if ($layouts){ + $options = Get-OptionsForItems $layouts $selectedItem + $parameters += @{ Name = "IncludedLayouts"; Title = "Layouts"; Options = $options; Editor = "checkbox"; Tab="Layouts ("+$options.Count+")" } + } + if ($system){ + $options = Get-OptionsForItems $system $selectedItem + $parameters += @{ Name = "IncludedSystem"; Title = "System"; Options = $options; Editor = "checkbox"; Tab="System ("+$options.Count+")" } + } + if ($templates){ + $options = Get-OptionsForItems $templates $selectedItem + $parameters += @{ Name = "IncludedTemplates"; Title = "Templates"; Options = $options; Editor = "checkbox"; Tab="Templates ("+$options.Count+")" } + } + if ($others){ + $options = Get-OptionsForItems $others $selectedItem + $parameters += @{ Name = "IncludedOthers"; Title = "Others"; Options = $options; Editor = "checkbox"; Tab="Others ("+$options.Count+")" } + } + + $props = @{} + $defaultProps + $props["Title"] = "Download Tree as Package - Select Linked Items" + $props["Description"] = "Choose the Linked Items that you want to include in the package." + $props["Parameters"] = $parameters + $props["Width"] = 800 + $props["Height"] = 750 + + $result = Read-Variable @props + + Resolve-Error + if($result -ne "ok") { + Close-Window + Exit + } + + $selectedLinks = $IncludedContent + $IncludedMedia + $IncludedLayouts + $IncludedSystem + $IncludedTemplates + $IncludedOthers + + return $selectedLinks + } + + $linkOptions = [ordered]@{ + "Do not include linked items" = 0 + "Include parent links only" = 1 + "Include all linked items" = 2 + } + + $linkOptionsTooltips = [ordered]@{ + 0 = "Linked items are not included in the package" + 1 = "Only items linked to the parent will be included in the package" + 2 = "All linked items will be included in the package" + } Languages: - Language: en Versions: @@ -351,4 +586,4 @@ Languages: sitecore\Admin - ID: "8cdc337e-a112-42fb-bbb4-4143751e123f" Hint: __Revision - Value: "1916c22f-6566-4589-a803-7e601617337e" + Value: "c1188004-4ea5-45c7-9927-02d997c9659f"