pnp / PnP-Sites-Core

Microsoft 365 Dev PnP Core component (.NET) targeted for increasing developer productivity with CSOM based solutions.
Other
415 stars 642 forks source link

-IncludeAllClientSidePages -PersistBrandingFiles does not persist images from image and quick links webpart #2335

Open heinrich-ulbricht opened 5 years ago

heinrich-ulbricht commented 5 years ago

Category

Environment

Expected or Desired Behavior

This should properly export images linked to by modern pages:

Get-PnPProvisioningTemplate -Out "template.xml" -IncludeAllClientSidePages -PersistBrandingFiles -Handlers PageContents

Observed Behavior

Above command fails to export certain images. Observed for:

Steps to Reproduce

ghost commented 5 years ago

Thank you for reporting this issue. We will be triaging your incoming issue as soon as possible.

heinrich-ulbricht commented 5 years ago

Quick Links web part handling

This is the JsonControlData when setting a web image to a quick links web part:

{
    "id": "c70391ea-0b10-4ee9-b2b4-006d3fcad0cd",
    "instanceId": "f6c7801c-01b0-4d89-a765-f222afd27327",
    "title": "Quick links",
    "description": "Quick links",
    "dataVersion": "2.2",
    "properties": {
        "items": [
            {
                "sourceItem": {
                    "guids": {
                        "siteId": "{sitecollectionid}",
                        "webId": "{siteid}",
                        "listId": "{listid:Websiteseiten}",
                        "uniqueId": "{viewid:Websiteseiten,Nach Autor}"
                    },
                    "itemType": 2,
                    "fileExtension": "",
                    "progId": ""
                },
                "thumbnailType": 2,
                "id": 1
            },
            {
                "sourceItem": {
                    "guids": {
                        "siteId": "{sitecollectionid}",
                        "webId": "{siteid}",
                        "listId": "{listid:Websiteseiten}",
                        "uniqueId": "{viewid:Websiteseiten,Nach Autor}"
                    },
                    "itemType": 2,
                    "fileExtension": "",
                    "progId": ""
                },
                "thumbnailType": 1,
                "id": 2,
                "image": {
                    "guids": {
                        "listId": "{listid:Websiteobjekte}",
                        "uniqueId": "a1ea6159-e823-4eec-b204-dbea1f22eca1",
                        "webId": "{siteid}",
                        "siteId": "{sitecollectionid}"
                    },
                    "imageFit": 2
                }
            },
            {
                "sourceItem": {
                    "guids": {
                        "siteId": "{sitecollectionid}",
                        "webId": "{siteid}",
                        "listId": "{listid:Websiteseiten}",
                        "uniqueId": "{viewid:Websiteseiten,Nach Autor}"
                    },
                    "itemType": 2,
                    "fileExtension": "",
                    "progId": ""
                },
                "thumbnailType": 3,
                "id": 3
            },
            {
                "sourceItem": {
                    "guids": {
                        "siteId": "{sitecollectionid}",
                        "webId": "{siteid}",
                        "listId": "{listid:Websiteseiten}",
                        "uniqueId": "{viewid:Websiteseiten,Nach Autor}"
                    },
                    "itemType": 2,
                    "fileExtension": "",
                    "progId": ""
                },
                "thumbnailType": 3,
                "id": 4
            }
        ],
        "isMigrated": true,
        "layoutId": "List",
        "shouldShowThumbnail": true,
        "buttonLayoutOptions": {
            "showDescription": false,
            "buttonTreatment": 2,
            "iconPositionType": 2,
            "textAlignmentVertical": 2,
            "textAlignmentHorizontal": 2,
            "linesOfText": 2
        },
        "listLayoutOptions": {
            "showDescription": true,
            "showIcon": true
        },
        "waffleLayoutOptions": {
            "iconSize": 1,
            "onlyShowThumbnail": false
        },
        "hideWebPartWhenEmpty": true,
        "dataProviderId": "QuickLinks",
        "webId": "{siteid}",
        "siteId": "{sitecollectionid}"
    },
    "serverProcessedContent": {
        "htmlStrings": {},
        "searchablePlainTexts": {
            "title": "",
            "items[0].title": "Service-Center",
            "items[1].title": "Kundendienst",
            "items[2].title": "Modernisierung",
            "items[3].title": "Fragen & Ideen",
            "items[0].description": "Schnelle Online-Hilfe",
            "items[1].description": "Alles zum Kundendienst",
            "items[2].description": "Alles zum Modernisierungs Service",
            "items[3].description": "Sie haben Fragen oder Ideen zum Service-Portal ?",
            "items[0].altText": "",
            "items[1].altText": "",
            "items[2].altText": "",
            "items[3].altText": ""
        },
        "imageSources": {
            "items[1].image.url": "{site}/SiteAssets/SitePages/English2/File-Yercaud-scenery-jpg---Wikipedia.jpeg",
            "items[0].rawPreviewImageUrl": "{site}/_layouts/15/getpreview.ashx?guidFile=%7bpageuniqueid%3aSitePages/Forms/ByAuthor.aspx%7d&guidWeb={siteid}&guidSite={sitecollectionid}",
            "items[1].rawPreviewImageUrl": "{site}/_layouts/15/getpreview.ashx?guidFile=%7bpageuniqueid%3aSitePages/Forms/ByAuthor.aspx%7d&guidWeb={siteid}&guidSite={sitecollectionid}",
            "items[2].rawPreviewImageUrl": "{site}/_layouts/15/getpreview.ashx?guidFile=%7bpageuniqueid%3aSitePages/Forms/ByAuthor.aspx%7d&guidWeb={siteid}&guidSite={sitecollectionid}",
            "items[3].rawPreviewImageUrl": "{site}/_layouts/15/getpreview.ashx?guidFile=%7bpageuniqueid%3aSitePages/Forms/ByAuthor.aspx%7d&guidWeb={siteid}&guidSite={sitecollectionid}"
        },
        "links": {
            "baseUrl": "{hosturl}{site}",
            "items[0].sourceItem.url": "{site}/SitePages/Forms/ByAuthor.aspx",
            "items[1].sourceItem.url": "{site}/SitePages/Forms/ByAuthor.aspx",
            "items[2].sourceItem.url": "{site}/SitePages/Forms/ByAuthor.aspx",
            "items[3].sourceItem.url": "{site}/SitePages/Forms/ByAuthor.aspx"
        },
        "componentDependencies": {
            "layoutComponentId": "706e33c8-af37-4e7b-9d22-6e5694d92a6f"
        }
    },
    "dynamicDataPaths": {},
    "dynamicDataValues": {}
}

The pull request contains a handler for this kind of JSON and extracts the URL: "items[1].image.url": "{site}/SiteAssets/SitePages/English2/File-Yercaud-scenery-jpg---Wikipedia.jpeg",

It is implemented as rather generic regex search for URLs with /SiteAssets/SitePages/ in them.

heinrich-ulbricht commented 5 years ago

Header/image web part handling

JSON:

{
    "id": "d1d91016-032f-456d-98a4-721247c305e8",
    "instanceId": "74611c7f-0042-4249-a5d8-80c8dba8cccb",
    "title": "Bild",
    "description": "Anzeigen eines Bilds auf Ihrer Seite.",
    "dataVersion": "1.8",
    "properties": {
        "imageSourceType": 2,
        "altText": "a building that has a sign on a fence",
        "overlayText": "",
        "siteId": "{sitecollectionid}",
        "webId": "{siteid}",
        "listId": "{listid:Websiteobjekte}",
        "uniqueId": "{20D4676D-2743-48E0-8946-10850FFD0FA6}",
        "imgWidth": 2560,
        "imgHeight": 1440,
        "isFullWidth": true,
        "cropX": 0,
        "cropY": 427,
        "cropWidth": 2560,
        "cropHeight": 420,
        "fixAspectRatio": false
    },
    "serverProcessedContent": {
        "htmlStrings": {},
        "searchablePlainTexts": {
            "captionText": ""
        },
        "imageSources": {
            "imageSource": "{site}/SiteAssets/SitePages/Deutsch/23776-getpreview.ashx.jpg"
        },
        "links": {},
        "customMetadata": {
            "imageSource": {
                "siteId": "{sitecollectionid}",
                "webId": "{siteid}",
                "listId": "{listid:Websiteobjekte}",
                "uniqueId": "{20D4676D-2743-48E0-8946-10850FFD0FA6}",
                "width": 2560,
                "height": 1440,
                "cropX": 0,
                "cropY": 427,
                "cropWidth": 2560,
                "cropHeight": 420
            }
        }
    },
    "dynamicDataPaths": {},
    "dynamicDataValues": {}
}

This needed to be detected: "uniqueId": "{20D4676D-2743-48E0-8946-10850FFD0FA6}",