Skip to content
This repository was archived by the owner on Jan 19, 2021. It is now read-only.

Commit e062ec4

Browse files
Merge pull request #2325 from SharePoint/dev
October 2019 Intermediate Release 1
2 parents 0e128ea + dd0ee53 commit e062ec4

13 files changed

+280
-27
lines changed
-16.5 KB
Binary file not shown.

Binaries/SharePointPnP.Modernization.Framework.xml

Lines changed: 8 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
-1.5 KB
Binary file not shown.

Binaries/release/SharePointPnP.Modernization.Framework.xml

Lines changed: 8 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

CHANGELOG.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,26 @@ All notable changes to this project will be documented in this file.
55

66
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
77

8+
## [Unreleased]
9+
10+
### Added
11+
12+
### Changed
13+
14+
### Contributors
15+
16+
## [3.14.1910.1]
17+
18+
### Added
19+
20+
- ConvertTo-PnPClientSidePage: Added support for logging to console via `-LogType Console`
21+
- Copy-PnPFile: Fixes (#2300)
22+
- ConvertTo-PnPClientSidePage: Added support for controlling the target page name is any cross site transformation (so wiki, web part, blog in addition the already existing option for publishing pages) via the `-TargetPageName` parameter
23+
24+
### Changed
25+
26+
### Contributors
27+
828
## [3.14.1910.0]
929

1030
### Added
@@ -18,6 +38,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
1838

1939
### Changed
2040

41+
- Several documentation fixes
2142
- Add-PnPClientSideWebPart now also works for SP2019
2243
- Added -List parameter to Get-PnPFolder to retrieve all folders in a list
2344
- Added owner paramter to New-PnPSite when create Communications site
@@ -28,11 +49,13 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
2849

2950
### Contributors
3051

52+
- Aleksandr SaPozhkov [shurick81]
3153
- Garry Trinder [garrytrinder]
3254
- Koen Zomers [KoenZomers]
3355
- Gautam Sheth [gautamdsheth]
3456
- Giacomo Pozzoni [jackpoz]
3557
- Paul Bullock [pkbullock]
58+
- Andres Mariano Gorzelany [get-itips]
3659

3760
## [3.13.1909.0]
3861

Commands/ClientSidePages/ClientSidePageTransformatorLogType.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ public enum ClientSidePageTransformatorLogType
66
None = 0,
77
File = 1,
88
SharePoint = 2,
9+
Console = 3,
910
}
1011
}
1112
#endif

Commands/ClientSidePages/ConvertToClientSidePage.cs

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,19 @@ namespace SharePointPnP.PowerShell.Commands.ClientSidePages
2323
Category = CmdletHelpCategory.ClientSidePages, SupportedPlatform = CmdletSupportedPlatform.Online)]
2424
[CmdletExample(
2525
Code = @"PS:> ConvertTo-PnPClientSidePage -Identity ""somepage.aspx"" -Overwrite",
26-
Remarks = "Converts a wiki page named 'somepage' to a client side page",
26+
Remarks = "Converts a wiki/web part page named 'somepage' to a client side page",
2727
SortOrder = 1)]
2828
[CmdletExample(
2929
Code = @"PS:> ConvertTo-PnPClientSidePage -Identity ""somepage.aspx"" -Overwrite -WebPartMappingFile c:\contoso\webpartmapping.xml",
30-
Remarks = "Converts a wiki page named 'somepage' to a client side page using a custom provided mapping file",
30+
Remarks = "Converts a wiki/web part page named 'somepage' to a client side page using a custom provided mapping file",
3131
SortOrder = 2)]
3232
[CmdletExample(
3333
Code = @"PS:> ConvertTo-PnPClientSidePage -Identity ""somepage.aspx"" -Overwrite -AddPageAcceptBanner",
34-
Remarks = "Converts a wiki page named 'somepage' to a client side page and adds the page accept banner web part on top of the page. This requires that the SPFX solution holding the web part (https://github.com/SharePoint/sp-dev-modernization/blob/master/Solutions/PageTransformationUI/assets/sharepointpnp-pagetransformation-client.sppkg?raw=true) has been installed to the tenant app catalog",
34+
Remarks = "Converts a wiki/web part page named 'somepage' to a client side page and adds the page accept banner web part on top of the page. This requires that the SPFX solution holding the web part (https://github.com/SharePoint/sp-dev-modernization/blob/master/Solutions/PageTransformationUI/assets/sharepointpnp-pagetransformation-client.sppkg?raw=true) has been installed to the tenant app catalog",
3535
SortOrder = 3)]
3636
[CmdletExample(
3737
Code = @"PS:> ConvertTo-PnPClientSidePage -Identity ""somepage.aspx"" -Overwrite -CopyPageMetadata",
38-
Remarks = "Converts a wiki page named 'somepage' to a client side page, including the copying of the page metadata (if any)",
38+
Remarks = "Converts a wiki/web part page named 'somepage' to a client side page, including the copying of the page metadata (if any)",
3939
SortOrder = 4)]
4040
[CmdletExample(
4141
Code = @"PS:> ConvertTo-PnPClientSidePage -Identity ""somepage.aspx"" -PublishingPage -Overwrite -TargetWebUrl https://contoso.sharepoint.com/sites/targetmodernsite",
@@ -55,16 +55,20 @@ namespace SharePointPnP.PowerShell.Commands.ClientSidePages
5555
SortOrder = 8)]
5656
[CmdletExample(
5757
Code = @"PS:> ConvertTo-PnPClientSidePage -Identity ""somepage.aspx"" -Overwrite -TargetWebUrl https://contoso.sharepoint.com/sites/targetmodernsite",
58-
Remarks = "Converts a wiki page named 'somepage' to a client side page in the https://contoso.sharepoint.com/sites/targetmodernsite site",
58+
Remarks = "Converts a wiki/web part page named 'somepage' to a client side page in the https://contoso.sharepoint.com/sites/targetmodernsite site",
5959
SortOrder = 9)]
6060
[CmdletExample(
6161
Code = @"PS:> ConvertTo-PnPClientSidePage -Identity ""somepage.aspx"" -LogType File -LogFolder c:\temp -LogVerbose -Overwrite",
62-
Remarks = "Converts a web part page named 'somepage' and creates a log file in c:\\temp using verbose logging",
62+
Remarks = "Converts a wiki/web part page named 'somepage' and creates a log file in c:\\temp using verbose logging",
6363
SortOrder = 10)]
6464
[CmdletExample(
6565
Code = @"PS:> ConvertTo-PnPClientSidePage -Identity ""somepage.aspx"" -LogType SharePoint -LogSkipFlush",
66-
Remarks = "Converts a web part page named 'somepage' and creates a log file in SharePoint but skip the actual write. Use this option to make multiple ConvertTo-PnPClientSidePage invocations create a single log",
66+
Remarks = "Converts a wiki/web part page named 'somepage' and creates a log file in SharePoint but skip the actual write. Use this option to make multiple ConvertTo-PnPClientSidePage invocations create a single log",
6767
SortOrder = 11)]
68+
[CmdletExample(
69+
Code = @"PS:> ConvertTo-PnPClientSidePage -Identity ""My post title"" -BlogPage -LogType Console -Overwrite -TargetWebUrl https://contoso.sharepoint.com/sites/targetmodernsite",
70+
Remarks = "Converts a blog page with a title starting with 'my post title' to a client side page in the https://contoso.sharepoint.com/sites/targetmodernsite site",
71+
SortOrder = 12)]
6872
public class ConvertToClientSidePage : PnPWebCmdlet
6973
{
7074
private static string rootFolder = "<root>";
@@ -165,6 +169,9 @@ public class ConvertToClientSidePage : PnPWebCmdlet
165169
[Parameter(Mandatory = false, HelpMessage = "Name for the target page (only applies to publishing page transformation)")]
166170
public string PublishingTargetPageName = "";
167171

172+
[Parameter(Mandatory = false, HelpMessage = "Name for the target page (only applies when doing cross site page transformation)")]
173+
public string TargetPageName = "";
174+
168175
[Parameter(Mandatory = false, HelpMessage = "Optional connection to be used by the cmdlet. Retrieve the value for this parameter by either specifying -ReturnConnection on Connect-PnPOnline or by executing Get-PnPConnection.")] // do not remove '#!#99'
169176
public SPOnlineConnection TargetConnection = null;
170177

@@ -246,6 +253,8 @@ protected override void ExecuteCmdlet()
246253
throw new Exception($"Provided pagelayout mapping file {this.PageLayoutMapping} does not exist");
247254
}
248255

256+
bool crossSiteTransformation = TargetConnection != null || !string.IsNullOrEmpty(TargetWebUrl);
257+
249258
// Create target client context (when needed)
250259
ClientContext targetContext = null;
251260
if (TargetConnection == null)
@@ -337,6 +346,17 @@ protected override void ExecuteCmdlet()
337346
pageTransformator.RegisterObserver(new MarkdownToSharePointObserver(targetContext ?? this.ClientContext, includeVerbose: this.LogVerbose, includeDebugEntries: this.LogVerbose));
338347
}
339348
}
349+
else if (this.LogType == ClientSidePageTransformatorLogType.Console)
350+
{
351+
if (this.PublishingPage)
352+
{
353+
publishingPageTransformator.RegisterObserver(new ConsoleObserver(includeDebugEntries: this.LogVerbose));
354+
}
355+
else
356+
{
357+
pageTransformator.RegisterObserver(new ConsoleObserver(includeDebugEntries: this.LogVerbose));
358+
}
359+
}
340360

341361
// Clear the client side component cache
342362
if (this.ClearCache)
@@ -356,7 +376,7 @@ protected override void ExecuteCmdlet()
356376
KeepPageCreationModificationInformation = this.KeepPageCreationModificationInformation,
357377
PostAsNews = this.PostAsNews,
358378
DisablePageComments = this.DisablePageComments,
359-
TargetPageName = this.PublishingTargetPageName,
379+
TargetPageName = !string.IsNullOrEmpty(this.PublishingTargetPageName) ? this.PublishingTargetPageName : this.TargetPageName,
360380
SkipUrlRewrite = this.SkipUrlRewriting,
361381
SkipDefaultUrlRewrite = this.SkipDefaultUrlRewriting,
362382
UrlMappingFile = this.UrlMappingFile,
@@ -374,7 +394,7 @@ protected override void ExecuteCmdlet()
374394
finally
375395
{
376396
// Flush log
377-
if (this.LogType != ClientSidePageTransformatorLogType.None && !this.LogSkipFlush)
397+
if (this.LogType != ClientSidePageTransformatorLogType.None && this.LogType != ClientSidePageTransformatorLogType.Console && !this.LogSkipFlush)
378398
{
379399
publishingPageTransformator.FlushObservers();
380400
}
@@ -406,6 +426,7 @@ protected override void ExecuteCmdlet()
406426
SetAuthorInPageHeader = this.SetAuthorInPageHeader,
407427
PostAsNews = this.PostAsNews,
408428
DisablePageComments = this.DisablePageComments,
429+
TargetPageName = crossSiteTransformation ? this.TargetPageName : "",
409430
SkipUrlRewrite = this.SkipUrlRewriting,
410431
SkipDefaultUrlRewrite = this.SkipDefaultUrlRewriting,
411432
UrlMappingFile = this.UrlMappingFile,
@@ -427,7 +448,7 @@ protected override void ExecuteCmdlet()
427448
finally
428449
{
429450
// Flush log
430-
if (this.LogType != ClientSidePageTransformatorLogType.None && !this.LogSkipFlush)
451+
if (this.LogType != ClientSidePageTransformatorLogType.None && this.LogType != ClientSidePageTransformatorLogType.Console && !this.LogSkipFlush)
431452
{
432453
pageTransformator.FlushObservers();
433454
}

Commands/ClientSidePages/ExportClientSidePage.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ protected override void ProcessRecord()
7272
private void ExtractTemplate(string dirName, string fileName, ExtractConfiguration configuration)
7373
{
7474
var outputTemplate = new ProvisioningTemplate();
75-
outputTemplate.Id = Guid.NewGuid().ToString("N");
75+
outputTemplate.Id = $"TEMPLATE-{Guid.NewGuid():N}".ToUpper();
7676
var helper = new OfficeDevPnP.Core.Framework.Provisioning.ObjectHandlers.Utilities.ClientSidePageContentsHelper();
7777
ProvisioningTemplateCreationInformation ci = null;
7878
if (configuration != null)

Commands/Files/CopyFile.cs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ protected override void ExecuteCmdlet()
128128
file = _sourceContext.Web.GetFileByServerRelativePath(ResourcePath.FromDecodedUrl(SourceUrl));
129129
#endif
130130
file.EnsureProperties(f => f.Name, f => f.Exists);
131+
isFile = file.Exists;
131132
}
132133
catch
133134
{
@@ -168,17 +169,17 @@ protected override void ExecuteCmdlet()
168169

169170
_targetContext = ClientContext.Clone(targetWebUri.AbsoluteUri);
170171
var dstWeb = _targetContext.Web;
171-
dstWeb.EnsureProperty(s => s.Url);
172+
dstWeb.EnsureProperties(s => s.Url, s => s.ServerRelativeUrl);
172173
if (srcWeb.Url == dstWeb.Url)
173174
{
174175
try
175176
{
176-
var targetFile = UrlUtility.Combine(TargetUrl, file.Name);
177+
var targetFile = UrlUtility.Combine(TargetUrl, file?.Name);
177178
// If src/dst are on the same Web, then try using CopyTo - backwards compability
178179
#if ONPREMISES
179-
file.CopyTo(targetFile, OverwriteIfAlreadyExists);
180+
file?.CopyTo(targetFile, OverwriteIfAlreadyExists);
180181
#else
181-
file.CopyToUsingPath(ResourcePath.FromDecodedUrl(targetFile), OverwriteIfAlreadyExists);
182+
file?.CopyToUsingPath(ResourcePath.FromDecodedUrl(targetFile), OverwriteIfAlreadyExists);
182183
#endif
183184
_sourceContext.ExecuteQueryRetry();
184185
return;
@@ -196,11 +197,15 @@ protected override void ExecuteCmdlet()
196197
bool targetFolderExists = false;
197198
try
198199
{
200+
#if ONPREMISES
199201
targetFolder = _targetContext.Web.GetFolderByServerRelativeUrl(TargetUrl);
202+
#else
203+
targetFolder = _targetContext.Web.GetFolderByServerRelativePath(ResourcePath.FromDecodedUrl(TargetUrl));
204+
#endif
200205
#if !SP2013
201206
targetFolder.EnsureProperties(f => f.Name, f => f.Exists);
202207
if (!targetFolder.Exists) throw new Exception("TargetUrl is an existing file, not folder");
203-
targetFolderExists = true;
208+
targetFolderExists = true;
204209
#else
205210
targetFolder.EnsureProperties(f => f.Name);
206211
try
@@ -226,8 +231,12 @@ protected override void ExecuteCmdlet()
226231
foreach (List targetList in lists)
227232
{
228233
if (!TargetUrl.StartsWith(targetList.RootFolder.ServerRelativeUrl, StringComparison.InvariantCultureIgnoreCase)) continue;
229-
fileOrFolderName = Regex.Replace(TargetUrl, targetList.RootFolder.ServerRelativeUrl, "", RegexOptions.IgnoreCase).Trim('/');
230-
targetFolder = srcIsFolder ? targetList.RootFolder.EnsureFolder(fileOrFolderName) : targetList.RootFolder;
234+
fileOrFolderName = Regex.Replace(TargetUrl, _targetContext.Web.ServerRelativeUrl, "", RegexOptions.IgnoreCase).Trim('/');
235+
targetFolder = srcIsFolder
236+
? _targetContext.Web.EnsureFolderPath(fileOrFolderName)
237+
: targetList.RootFolder;
238+
//fileOrFolderName = Regex.Replace(TargetUrl, targetList.RootFolder.ServerRelativeUrl, "", RegexOptions.IgnoreCase).Trim('/');
239+
//targetFolder = srcIsFolder ? targetList.RootFolder.EnsureFolder(fileOrFolderName) : targetList.RootFolder;
231240
break;
232241
}
233242
}
@@ -310,7 +319,7 @@ private File UploadFileWithSpecialCharacters(Folder folder, string fileName, Sys
310319
{
311320
throw new ArgumentException("Filename is required");
312321
}
313-
322+
314323
// Create the file
315324
var newFileInfo = new FileCreationInformation()
316325
{

Commands/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,6 @@
4848
// You can specify all the values or you can default the Build and Revision Numbers
4949
// by using the '*' as shown below:
5050
// [assembly: AssemblyVersion("1.0.*")]
51-
[assembly: AssemblyVersion("3.14.1910.0")]
52-
[assembly: AssemblyFileVersion("3.14.1910.0")]
51+
[assembly: AssemblyVersion("3.14.1910.1")]
52+
[assembly: AssemblyFileVersion("3.14.1910.1")]
5353
[assembly: InternalsVisibleTo("SharePointPnP.PowerShell.Tests")]

0 commit comments

Comments
 (0)