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"