├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── config.yml │ └── feature_request.md ├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── Modernization partner guidance ├── Microsoft Teamwork Transformation Customer Offer Presentation.pptx ├── Microsoft Teamwork Transformation Delivery Guide.pptx ├── Microsoft Teamwork Transformation Workshop.pptx ├── README.md └── Teamwork Transformation - April 2021.pptx ├── README.md ├── Scripts ├── HomePageModernizationOptOut │ ├── HomePageModernizationOptOut.ps1 │ ├── SitesWithUncustomizedHomePages.csv │ └── readme.md ├── ListsAndLibraries │ ├── SetModernListUsage.ps1 │ ├── SitesWithCustomizations.csv │ └── readme.md ├── ModernizeSiteCollection │ ├── ModernizeSiteCollections.ps1 │ ├── ValidateSiteCollectionsInput.ps1 │ ├── readme.md │ └── sitecollections.csv ├── O365GroupConnect │ ├── O365GroupConnectSite.ps1 │ ├── ValidateInput.ps1 │ ├── readme.md │ └── sitecollections.csv ├── PageTransformation │ ├── Convert-BlogPages.ps1 │ ├── Convert-DelveBlogPages.ps1 │ ├── Convert-OnPremisesPublishingPages.ps1 │ ├── Convert-PublishingPages.ps1 │ ├── Convert-WikiAndWebPartPages.ps1 │ ├── TransformPages.ps1 │ └── readme.md └── readme.md ├── Solutions ├── Page transformation UI release notes.md ├── PageTransformationUI │ ├── README.md │ ├── assets │ │ ├── ModernizationFeedbackList.xml │ │ ├── ProvisioningSchema-2018-05.xsd │ │ ├── modernize16x16.png │ │ ├── modernize32x32.png │ │ ├── pnppagetransformationclassicbanner.js │ │ ├── sharepointpnp-pagetransformation-central.sppkg │ │ └── sharepointpnp-pagetransformation-client.sppkg │ ├── docs │ │ ├── deploymentguide.md │ │ ├── images │ │ │ ├── PageTransformationUIarchitecture.png │ │ │ ├── enablepagetransformationwebpart.png │ │ │ ├── pagebannerwebpart.png │ │ │ ├── pagetransformatorwebpart.png │ │ │ ├── troubleshoot_AADST65001.png │ │ │ ├── troubleshoot_AADSTS50001.png │ │ │ └── troubleshoot_ClearPageCache.png │ │ ├── manual setup │ │ │ ├── images │ │ │ │ ├── azure_app_1.png │ │ │ │ ├── azure_app_2.png │ │ │ │ ├── azure_app_3.png │ │ │ │ ├── azure_app_4.png │ │ │ │ ├── azure_app_5.png │ │ │ │ ├── azure_function_1.png │ │ │ │ ├── azure_function_2.png │ │ │ │ ├── azure_function_3.png │ │ │ │ ├── azure_function_4.png │ │ │ │ ├── azure_function_5.png │ │ │ │ ├── azure_multitenant_1.png │ │ │ │ ├── azure_multitenant_2.png │ │ │ │ ├── sharepoint_app_1.png │ │ │ │ ├── sharepoint_app_2.png │ │ │ │ ├── sharepoint_app_3.png │ │ │ │ ├── sharepoint_app_4.png │ │ │ │ ├── sharepoint_site_1.png │ │ │ │ └── sharepoint_site_2.png │ │ │ ├── modernization-ui-manual-azure.md │ │ │ ├── modernization-ui-manual-sharepoint.old.md │ │ │ ├── modernization-ui-multitenant-setup.md │ │ │ ├── modernization-ui-multitenant-use.md │ │ │ └── readme.md │ │ ├── modernization-ui-faq.md │ │ ├── readme.md │ │ ├── troubleshootingguide.md │ │ └── upgradeguide.md │ ├── provisioning │ │ ├── BuildSiteCSV.ps1 │ │ ├── ConfigurePageTransformation.ps1 │ │ ├── Disable-PageTransformation.ps1 │ │ ├── Enable-PageTransformation.ps1 │ │ ├── Provision-AADApplication.ps1 │ │ ├── Provision-ModernizationFramework.ps1 │ │ ├── README.md │ │ ├── Update-ModernizationFramework.ps1 │ │ ├── UpdatingPnPFile.md │ │ ├── Upgrade-ToBeta.ps1 │ │ ├── modernization.pnp │ │ ├── modernization.xml │ │ └── sharepointpnpmodernizationeurope.zip │ ├── services │ │ ├── ModernizationService │ │ │ ├── ModernizationFunction │ │ │ │ ├── .gitignore │ │ │ │ ├── Extensions │ │ │ │ │ └── WebExtensions.cs │ │ │ │ ├── ModernizationFunction.csproj │ │ │ │ ├── ModernizationService.cs │ │ │ │ ├── OAuthTokenResponse.cs │ │ │ │ ├── Telemetry │ │ │ │ │ └── FunctionTelemetry.cs │ │ │ │ ├── host.json │ │ │ │ ├── readme.txt │ │ │ │ └── webpartmapping.xml │ │ │ └── ModernizationService.sln │ │ └── readme.md │ └── spfx │ │ ├── README.md │ │ ├── central │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── .vscode │ │ │ ├── extensions.json │ │ │ ├── launch.json │ │ │ └── settings.json │ │ ├── .yo-rc.json │ │ ├── README.md │ │ ├── config │ │ │ ├── config.json │ │ │ ├── copy-assets.json │ │ │ ├── deploy-azure-storage.json │ │ │ ├── package-solution.json │ │ │ ├── serve.json │ │ │ └── write-manifests.json │ │ ├── gulpfile.js │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── src │ │ │ ├── index.ts │ │ │ └── webparts │ │ │ │ ├── pageTransformator │ │ │ │ ├── PageTransformatorWebPart.manifest.json │ │ │ │ ├── PageTransformatorWebPart.ts │ │ │ │ ├── components │ │ │ │ │ ├── IPageTransformatorProps.ts │ │ │ │ │ ├── IPageTransformatorState.ts │ │ │ │ │ ├── IStorageEntities.ts │ │ │ │ │ ├── IStorageEntity.ts │ │ │ │ │ ├── PageTransformator.module.scss │ │ │ │ │ └── PageTransformator.tsx │ │ │ │ └── loc │ │ │ │ │ ├── en-us.js │ │ │ │ │ └── mystrings.d.ts │ │ │ │ └── pageTransformatorAdmin │ │ │ │ ├── PageTransformatorAdminWebPart.manifest.json │ │ │ │ ├── PageTransformatorAdminWebPart.ts │ │ │ │ ├── components │ │ │ │ ├── IPageTransformatorAdminProps.ts │ │ │ │ ├── PageTransformatorAdmin.module.scss │ │ │ │ └── PageTransformatorAdmin.tsx │ │ │ │ └── loc │ │ │ │ ├── en-us.js │ │ │ │ └── mystrings.d.ts │ │ ├── teams │ │ │ ├── manifest.json │ │ │ ├── tab20x20.png │ │ │ └── tab96x96.png │ │ ├── tsconfig.json │ │ └── tslint.json │ │ ├── package-lock.json │ │ └── user │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── .vscode │ │ ├── extensions.json │ │ ├── launch.json │ │ └── settings.json │ │ ├── .yo-rc.json │ │ ├── README.md │ │ ├── config │ │ ├── config.json │ │ ├── copy-assets.json │ │ ├── deploy-azure-storage.json │ │ ├── package-solution.json │ │ ├── serve.json │ │ └── write-manifests.json │ │ ├── gulpfile.js │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── src │ │ ├── index.ts │ │ └── webparts │ │ │ └── pageBanner │ │ │ ├── PageBannerWebPart.manifest.json │ │ │ ├── PageBannerWebPart.ts │ │ │ ├── components │ │ │ ├── IPageBannerProps.ts │ │ │ ├── IPageBannerState.ts │ │ │ ├── IStorageEntities.ts │ │ │ ├── PageBanner.module.scss │ │ │ ├── PageBanner.tsx │ │ │ └── PostFeedback.tsx │ │ │ └── loc │ │ │ ├── en-us.js │ │ │ └── mystrings.d.ts │ │ ├── teams │ │ ├── manifest.json │ │ ├── tab20x20.png │ │ └── tab96x96.png │ │ ├── tsconfig.json │ │ └── tslint.json └── README.md └── Tools ├── README.md └── SharePoint.Modernization ├── .gitignore ├── Modernization Framework release notes.md ├── Modernization Scanner release notes.md ├── Modernization Scanner.md ├── README.md ├── Releases ├── SharePoint.Modernization.Scanner.exe ├── SharePoint.Modernization.Scanner.exe.SHA512 ├── readme.md └── version.txt ├── SharePointPnP.Modernization.DocsGenerator ├── App.config ├── FunctionAnalyzer.cs ├── Model │ ├── Function.cs │ ├── FunctionParameter.cs │ └── Selector.cs ├── Program.cs ├── Properties │ └── AssemblyInfo.cs ├── SelectorAnalyzer.cs ├── SharePointPnP.Modernization.DocsGenerator.csproj └── packages.config ├── SharePointPnP.Modernization.Framework.Profiler ├── App.config ├── Program.cs ├── Properties │ └── AssemblyInfo.cs ├── SharePointPnP.Modernization.Framework.Profiler.csproj └── packages.config ├── SharePointPnP.Modernization.Framework.SampleAddOn ├── MyCustomFunctions.cs ├── Properties │ └── AssemblyInfo.cs ├── SharePointPnP.Modernization.Framework.SampleAddOn.csproj ├── app.config └── packages.config ├── SharePointPnP.Modernization.Framework.Tests ├── AdHocTests.cs ├── App.config.sample ├── Properties │ └── AssemblyInfo.cs ├── Provision │ ├── ClassicPublishingSite-SampleData.xml │ ├── ClassicTeamSite-SampleData.xml │ ├── Common │ │ ├── Assets │ │ │ └── tonys-chocolate-1-1024x664.jpg │ │ ├── Content │ │ │ └── Tonys Chocolate MS News.md │ │ └── Readme.md │ ├── Documents │ │ └── Contoso_Report.pptx │ ├── Images │ │ ├── Logos │ │ │ ├── contoso-electronics-transp-1200.png │ │ │ ├── contoso-electronics-transp-300.png │ │ │ ├── contoso-electronics-transp-600.png │ │ │ ├── contoso-sale-site.png │ │ │ ├── contoso_logo_twitter.png │ │ │ ├── logo-files.xml │ │ │ ├── logo_IT.png │ │ │ ├── logo_benefits.png │ │ │ ├── logo_data_center_technologies.png │ │ │ ├── logo_design_tools_software.png │ │ │ ├── logo_finance.png │ │ │ ├── logo_graphics_visual_technologies.png │ │ │ ├── logo_hr.png │ │ │ ├── logo_legal.png │ │ │ ├── logo_memory_networking_technologies.png │ │ │ ├── logo_sales_web_site.png │ │ │ ├── logo_technologies.png │ │ │ ├── logo_v_01.png │ │ │ ├── logo_v_03.png │ │ │ ├── logo_v_08.png │ │ │ ├── logo_v_11.png │ │ │ ├── logo_v_14.png │ │ │ ├── logo_v_15.png │ │ │ ├── logo_v_16.png │ │ │ └── logo_v_19.png │ │ └── Photos │ │ │ ├── Allison-Linn_Head-Shot-215x215.png │ │ │ ├── Commercial16_smallmeeting_02.jpg │ │ │ ├── Craig-Mundie-_20-Ann.-768x983.jpg │ │ │ ├── EDU18_Teachers_013-960x640.jpg │ │ │ ├── FN5A5682-683x1024.jpg │ │ │ ├── KLAPSTUK-TU-Delft-Qutech-5-of-113-3.jpg │ │ │ ├── MS-Stories-Station-Q-Freedman-Michael-12-1024x683.jpg │ │ │ ├── MSSurface_Pro4_SMB_Seattle_0578.jpg │ │ │ ├── Security-Feature-Header-rs.jpg │ │ │ ├── Suz-spring-2016_3674-215x215.jpg │ │ │ ├── WCO18_ITHelp_004.jpg │ │ │ ├── WCO18_whiteboard_002.jpg │ │ │ ├── Win17_15021_00_N9.jpg │ │ │ ├── extra.jpg │ │ │ ├── extra2.jpg │ │ │ ├── extra3.jpg │ │ │ ├── extra4.jpg │ │ │ ├── extra5.jpg │ │ │ ├── extra6.jpg │ │ │ ├── extra7.jpg │ │ │ ├── extra8.jpg │ │ │ ├── extra8_500x500.jpg │ │ │ ├── extra9.jpg │ │ │ ├── hero.jpg │ │ │ ├── meeting-rooms.jpg │ │ │ ├── modernOffice_002.jpg │ │ │ ├── modernOffice_007.jpg │ │ │ ├── modernOffice_011.jpg │ │ │ ├── news.jpg │ │ │ ├── news2.jpg │ │ │ ├── news3.jpg │ │ │ ├── news4.png │ │ │ ├── page-faq.jpg │ │ │ ├── page-feedback.jpg │ │ │ ├── page-financial-results.jpg │ │ │ ├── page-hr.jpg │ │ │ ├── page-my-profile.jpg │ │ │ ├── page-people-directory.jpg │ │ │ ├── page-support.jpg │ │ │ ├── page-training.jpg │ │ │ ├── page-travel-instructions.jpg │ │ │ ├── pexels-photo-335907.jpg │ │ │ ├── photo-files.xml │ │ │ ├── wirebonding_qubit.jpg │ │ │ ├── work-life-balance.png │ │ │ └── working-methods.jpg │ ├── Publishing │ │ ├── Article131.aspx │ │ ├── ArticleCustom.aspx │ │ ├── ArticleCustomSP2010.aspx │ │ ├── ArticleCustomSP2013.aspx │ │ └── ArticleTopic.aspx │ ├── Readme.md │ └── SitePages │ │ └── WPP_Blank.aspx ├── SharePointPnP.Modernization.Framework.Tests.csproj ├── TestCategories.cs ├── TestCommon.cs ├── TestExtensions.cs ├── Transform │ ├── AssetTransferTests.cs │ ├── Bullets │ │ ├── BulletTests.cs │ │ └── Bullets_1.html │ ├── CommonTests │ │ ├── CommonSPPublishingPages.cs │ │ ├── CommonSPWebPartPageTests.cs │ │ ├── CommonSPWikiTests.cs │ │ └── Readme.md │ ├── ContextTests.cs │ ├── CrossSiteTests.cs │ ├── Detection │ │ └── DetectionTests.cs │ ├── FixPageProperty.cs │ ├── Headers │ │ ├── HeaderTests.cs │ │ └── header_1.html │ ├── LoggingTests.cs │ ├── Mapping │ │ ├── TermMappingTests.cs │ │ ├── UrlMappingTests.cs │ │ ├── UserMappingTests.cs │ │ ├── term_mapping_paths_sample.csv │ │ ├── term_mapping_sample.csv │ │ ├── termmapping_sample2.csv │ │ ├── urlmapping_sample.csv │ │ ├── usermapping_sample.csv │ │ └── usermapping_sample2.csv │ ├── OnPremises │ │ ├── OnPremisesPublishingPageTests.cs │ │ ├── OnPremisesUtilityTests.cs │ │ └── OnPremisesWebPartPageTests.cs │ ├── Publishing │ │ ├── AdHocTests.cs │ │ ├── PageLayoutAnalyserTests.cs │ │ ├── PublishingFunctionProcessorTests.cs │ │ ├── PublishingPageTests.cs │ │ ├── PublishingPageTransformationInformationTests.cs │ │ ├── custompagelayoutmapping.xml │ │ ├── mappingalltest.xml │ │ ├── mappingtest.xml │ │ └── webpartmapping.xml │ ├── ReportingTests.cs │ ├── RichText │ │ ├── RichTextTests.cs │ │ └── richtext_1.html │ ├── Tables │ │ └── TableTests.cs │ ├── Tests.cs │ ├── Text.cs │ ├── UrlTransformTests.cs │ ├── Utility │ │ ├── StringExtensionTests.cs │ │ └── WebExtensionsTest.cs │ ├── Wp │ │ ├── WpTests.cs │ │ └── wp_1.html │ └── rewrittenhtml.html ├── UnitTestLogObserver.cs └── packages.config ├── SharePointPnP.Modernization.Framework ├── App.config ├── Cache │ ├── CacheManager.cs │ ├── CacheOptions.cs │ ├── Extensions.cs │ ├── FieldData.cs │ └── ICacheOptions.cs ├── Caml │ ├── FieldReference.cs │ ├── FieldReferenceFunctionType.cs │ ├── Internal │ │ ├── Operators │ │ │ ├── ComplexOperator.cs │ │ │ ├── InOperator.cs │ │ │ ├── MembershipOperator.cs │ │ │ └── SimpleOperator.cs │ │ └── Values │ │ │ ├── AnyValue.cs │ │ │ ├── ListPropertyValue.cs │ │ │ ├── MonthValue.cs │ │ │ ├── NowValue.cs │ │ │ ├── TodayValue.cs │ │ │ └── UserIdValue.cs │ ├── ListPropertyValueItem.cs │ ├── LogicalJoin.cs │ ├── LogicalJoinType.cs │ ├── MembershipType.cs │ ├── Operator.cs │ ├── OperatorType.cs │ ├── OrderByFieldOrder.cs │ ├── Query.cs │ ├── Statement.cs │ ├── Value.cs │ ├── ValueType.cs │ └── credits.txt ├── Constants.cs ├── Delve │ ├── DelvePageTransformationInformation.cs │ └── DelvePageTransformator.cs ├── Entities │ ├── AssetTransferredEntity.cs │ ├── AudienceEntity.cs │ ├── ListItemPermission.cs │ ├── ResolvedUser.cs │ ├── TermData.cs │ ├── TermMapping.cs │ ├── TransformationLogAnalysis.cs │ ├── UrlMapping.cs │ ├── UserEntity.cs │ ├── UserMappingEntity.cs │ ├── WebPartEntity.cs │ ├── WebServiceWebPartEntity.cs │ └── WebServiceWebPartProperties.cs ├── Extensions │ ├── AngleSharpExtensions.cs │ ├── FileFolderExtensions.cs │ ├── HttpWebRequestExtensions.cs │ ├── ListItemExtensions.cs │ ├── SiteExtensions.cs │ ├── StringExtensions.cs │ └── WebExtensions.cs ├── Functions │ ├── BaseFunctionProcessor.cs │ ├── BuiltIn.cs │ ├── DocumentationAttributes.cs │ ├── FunctionProcessor.cs │ ├── FunctionsBase.cs │ ├── MediaWebpartConfigurationException.cs │ ├── NotAvailableAtTargetException.cs │ ├── XmlCompare.cs │ └── XmlEqualityResult.cs ├── KQL │ ├── KQLElement.cs │ ├── KQLParser.cs │ ├── KQLPropertyOperator.cs │ └── KQLPropertyType.cs ├── Nuget │ └── webpartmapping.xml ├── Pages │ ├── BasePage.cs │ ├── DelvePage.cs │ ├── PageLayout.cs │ ├── PublishingPage.cs │ ├── PublishingPageOnPremises.cs │ ├── WebPartPage.cs │ ├── WebPartPageOnPremises.cs │ └── WikiPage.cs ├── Properties │ └── AssemblyInfo.cs ├── Publishing │ ├── Layouts │ │ ├── PageLayoutFieldControlEntity.cs │ │ ├── PageLayoutHeaderFieldEntity.cs │ │ ├── PageLayoutMetadataEntity.cs │ │ └── PublishingDefaults.cs │ ├── PageLayoutAnalyser.cs │ ├── PageLayoutManager.cs │ ├── PublishingBuiltIn.cs │ ├── PublishingFunctionProcessor.cs │ ├── PublishingLayoutTransformator.cs │ ├── PublishingMetadataTransformator.cs │ ├── PublishingPageHeaderTransformator.cs │ ├── PublishingPageTransformationInformation.cs │ ├── PublishingPageTransformator.cs │ ├── pagelayoutmapping.cs │ ├── pagelayoutmapping.xml │ └── pagelayoutmapping.xsd ├── PublishingPagesClassDiagram.cd ├── README.md ├── Samples │ ├── pagelayoutmapping_sample.xml │ └── urlmapping_sample.csv ├── SharePointPnP.Modernization.Framework.csproj ├── Telemetry │ ├── ILogObserver.cs │ ├── LogEntry.cs │ ├── LogHelpers.cs │ ├── LogLevel.cs │ ├── LogStrings.cs │ ├── Observers │ │ ├── ConsoleObserver.cs │ │ ├── MarkdownObserver.cs │ │ └── MarkdownToSharePoint.cs │ └── PageTelemetry.cs ├── Transform │ ├── AssetTransfer.cs │ ├── BasePageTransformator.cs │ ├── BaseTransform.cs │ ├── BaseTransformationInformation.cs │ ├── ContentByQuerySearchTransformator.cs │ ├── ContentTransformator.cs │ ├── HtmlTransformator.cs │ ├── IContentTransformator.cs │ ├── IHtmlTransformator.cs │ ├── ILayoutTransformator.cs │ ├── LayoutTransformator.cs │ ├── ModernizationCenterInformation.cs │ ├── PageTransformationInformation.cs │ ├── PageTransformator.cs │ ├── QuickLinksTransformator.cs │ ├── SPVersion.cs │ ├── SummaryLinksHtmlTransformator.cs │ ├── TermTransformator.cs │ ├── TokenParser.cs │ ├── UrlTransformator.cs │ ├── UserTransformator.cs │ └── WikiHtmlTransformator.cs ├── Utilities │ ├── CookieManager.cs │ └── FileManager.cs ├── WebParts.cs ├── packages.config ├── webpartmapping.cs ├── webpartmapping.xml ├── webpartmapping.xsc ├── webpartmapping.xsd ├── webpartmapping.xss └── xsd.txt ├── SharePointPnP.Modernization.Scanner.Core ├── Analyzers │ ├── BaseAnalyzer.cs │ ├── BlogAnalyzer.cs │ ├── CustomizedFormsAnalyzer.cs │ ├── DelveBlogAnalyzer.cs │ ├── IBaseAnalyzer.cs │ ├── InfoPathAnalyzer.cs │ ├── ListAnalyzer.cs │ ├── PageAnalyzer.cs │ ├── PublishingAnalyzer.cs │ ├── SiteAnalyzer.cs │ ├── WebAnalyzer.cs │ └── WorkflowAnalyzer.cs ├── Extensions │ ├── FieldExtensions.cs │ ├── FileExtensions.cs │ ├── ListExtensions.cs │ ├── UserCustomActionCollectionExtensions.cs │ └── WebExtensions.cs ├── LogEventArgs.cs ├── ModernizationScanJob.cs ├── Options.cs ├── Properties │ └── AssemblyInfo.cs ├── Reports │ ├── Generator.cs │ ├── Readme.txt │ ├── ReportStream.cs │ ├── ScanSummary.cs │ ├── blogmaster.xlsx │ ├── groupifymaster.xlsx │ ├── infopathmaster.xlsx │ ├── listmaster.xlsx │ ├── pagemaster.xlsx │ ├── publishingmaster.xlsx │ └── workflowmaster.xlsx ├── Results │ ├── BlogPageScanResult.cs │ ├── BlogWebScanResult.cs │ ├── CustomizedFormsScanResult.cs │ ├── InfoPathScanResult.cs │ ├── ListScanResult.cs │ ├── PageScanResult.cs │ ├── PublishingPageScanResult.cs │ ├── PublishingSiteScanResult.cs │ ├── PublishingWebScanResult.cs │ ├── SiteScanResult.cs │ ├── UserCustomActionResult.cs │ ├── WebScanResult.cs │ ├── WorkflowScanResult.cs │ └── XsltViewWebPartCompatability.cs ├── Scan.cs ├── ScanError.cs ├── ScanJob.cs ├── SharePointPnP.Modernization.Scanner.Core.csproj ├── Telemetry │ ├── ScannerTelemetry.cs │ ├── TelemetryEvents.cs │ └── VersionCheck.cs ├── Utilities │ ├── AppOnlyManager.cs │ ├── PageTransformationManager.cs │ └── WebpartMappingLoader.cs ├── Workflow │ ├── WorkFlowActions.cs │ ├── WorkflowActionAnalysis.cs │ ├── WorkflowManager.cs │ ├── WorkflowTriggerAnalysis.cs │ ├── sp2010wfmodel.cs │ ├── sp2010wfmodel.xml │ ├── sp2010wfmodel.xsd │ ├── sp2013wfmodel.cs │ ├── sp2013wfmodel.xml │ ├── sp2013wfmodel.xsd │ └── xsd.txt ├── app.config ├── packages.config └── webpartmapping.xml ├── SharePointPnP.Modernization.Scanner ├── App.config ├── FodyWeavers.xml ├── Forms │ ├── Wizard.Designer.cs │ ├── Wizard.cs │ └── Wizard.resx ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ └── Resources.resx ├── SharePointPnP.Modernization.Scanner.csproj ├── packages.config └── webpartmapping.xml ├── SharePointPnP.Modernization.sln └── binaries ├── OfficeDevPnP.Core.XML ├── OfficeDevPnP.Core.dll ├── lastrelease-signed ├── OfficeDevPnP.Core.XML └── OfficeDevPnP.Core.dll └── lastrelease-unsigned ├── OfficeDevPnP.Core.XML └── OfficeDevPnP.Core.dll /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | 2 | blank_issues_enabled: false 3 | contact_links: 4 | - name: PnP Modernization Discussions 5 | url: https://github.com/pnp/pnp-modernization/discussions 6 | about: Please ask and answer questions here. 7 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: "[FEATURE]" 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # PnP Changelog 2 | *Please do not commit changes to this file, it is maintained by the repo owner.* 3 | 4 | All notable changes to this project will be documented in this file. 5 | 6 | The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). 7 | 8 | ## Changelog references 9 | 10 | - [Page Transformation](https://github.com/SharePoint/sp-dev-modernization/blob/master/Tools/SharePoint.Modernization/Modernization%20Framework%20release%20notes.md) 11 | - [Page Transformation UI](https://github.com/SharePoint/sp-dev-modernization/blob/master/Solutions/Page%20transformation%20UI%20release%20notes.md) 12 | - [Modernization scanner](https://github.com/SharePoint/sp-dev-modernization/blob/master/Tools/SharePoint.Modernization/Modernization%20Scanner%20release%20notes.md) 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Microsoft Corporation. All rights reserved. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE 22 | -------------------------------------------------------------------------------- /Modernization partner guidance/Microsoft Teamwork Transformation Customer Offer Presentation.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Modernization partner guidance/Microsoft Teamwork Transformation Customer Offer Presentation.pptx -------------------------------------------------------------------------------- /Modernization partner guidance/Microsoft Teamwork Transformation Delivery Guide.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Modernization partner guidance/Microsoft Teamwork Transformation Delivery Guide.pptx -------------------------------------------------------------------------------- /Modernization partner guidance/Microsoft Teamwork Transformation Workshop.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Modernization partner guidance/Microsoft Teamwork Transformation Workshop.pptx -------------------------------------------------------------------------------- /Modernization partner guidance/README.md: -------------------------------------------------------------------------------- 1 | 2 | # Partner modernization guidance 3 | 4 | This folder contains content that partners (and customers) can use to run modernization projects. See https://aka.ms/sppnp-modernization-partnerguidance to learn more. 5 | -------------------------------------------------------------------------------- /Modernization partner guidance/Teamwork Transformation - April 2021.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Modernization partner guidance/Teamwork Transformation - April 2021.pptx -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # The sp-dev-modernization repository 3 | 4 | Welcome to the home of all SharePoint modernization tools and solutions. Modernization means **transforming current "classic" SharePoint usage into "modern" usage**, e.g. using modern site pages instead of classic pages, Office 365 Group connecting of classic sites, modernizing your classic publishing portals,... In this repository you'll find all the SharePoint PnP open source scripts, tools and solutions that will help you modernize your SharePoint environment. To read up on our modernization guidance check https://aka.ms/sppnp-modernize. 5 | 6 | Please use [http://aka.ms/sppnp](http://aka.ms/sppnp) for getting latest information around the *SharePoint Patterns and Practices program*. 7 | 8 | *"Sharing is Caring"* 9 | 10 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. -------------------------------------------------------------------------------- /Scripts/HomePageModernizationOptOut/SitesWithUncustomizedHomePages.csv: -------------------------------------------------------------------------------- 1 | "https://contoso.sharepoint.com/sites/siteA" 2 | "https://contoso.sharepoint.com/sites/siteB" 3 | "https://contoso.sharepoint.com/sites/siteB/subsite1" 4 | "https://contoso.sharepoint.com/sites/siteB/subsite2" -------------------------------------------------------------------------------- /Scripts/HomePageModernizationOptOut/readme.md: -------------------------------------------------------------------------------- 1 | # Modern List and library scripts 2 | 3 | ## Summary 4 | 5 | Uncustomized classic home pages of team sites will be automatically upgraded to a modern home page. Use this script to do a bulk enabling/disabling of a web scoped feature that prevents this automatic upgrade from happening. 6 | 7 | ## Applies to 8 | 9 | - Office 365 Multi-Tenant (MT) 10 | 11 | ## Prerequisites 12 | 13 | - SharePoint PnP PowerShell 14 | 15 | ## Solution 16 | 17 | Solution|Author(s) 18 | --------|--------- 19 | HomePageModernizationOptOut.ps1 | Bert Jansen (**Microsoft**) 20 | 21 | ## Version history 22 | 23 | Version|Date|Comments 24 | -------|----|-------- 25 | 1.0 | January 16th 2020 | Initial commit 26 | 27 | ## Disclaimer 28 | 29 | THIS CODE IS PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANT ABILITY, OR NON-INFRINGEMENT. 30 | 31 | --- 32 | 33 | ## HomePageModernizationOptOut.ps1 34 | 35 | This scripts will enable or disable the automatic upgrade of uncustomized classic home pages to a modern home page. The script can handle a single site or a list of sites provided via a CSV file. To get the CSV file you can run the Modernization Scanner, version 2.8 or higher, and use the "Wiki/Webpart Page transformation readiness (home pages)" mode (see https://aka.ms/sppnp-modernizationscanner) or alternatively create the file yourselves. Simply run the script and provide the needed input on the command prompt. 36 | 37 | ### Structure for the CSV file 38 | 39 | The CSV file is simple list of site URL's without a header as shown in below sample: 40 | 41 | ```Text 42 | "https://contoso.sharepoint.com/sites/siteA" 43 | "https://contoso.sharepoint.com/sites/siteB" 44 | "https://contoso.sharepoint.com/sites/siteB/subsite1" 45 | "https://contoso.sharepoint.com/sites/siteB/subsite2" 46 | ``` 47 | -------------------------------------------------------------------------------- /Scripts/ListsAndLibraries/SitesWithCustomizations.csv: -------------------------------------------------------------------------------- 1 | "https://contoso.sharepoint.com/sites/siteA" 2 | "https://contoso.sharepoint.com/sites/siteB" 3 | "https://contoso.sharepoint.com/sites/siteC" 4 | "https://contoso.sharepoint.com/sites/siteD" -------------------------------------------------------------------------------- /Scripts/ModernizeSiteCollection/sitecollections.csv: -------------------------------------------------------------------------------- 1 | SiteUrl,O365GroupAlias,O365GroupIsPublic,AddTeamsTeam,ModernizePages,ModernizeBranding,TenantTheme,Classification 2 | https://contoso010a.sharepoint.com/sites/bjansen4,bjansen4,false,true,true,true,"Contoso Electronics", 3 | 4 | -------------------------------------------------------------------------------- /Scripts/O365GroupConnect/sitecollections.csv: -------------------------------------------------------------------------------- 1 | Url,Alias,IsPublic,Classification 2 | https://a830edad9050849523e17050400.sharepoint.com/sites/groupify_me_15,groupify_me_ 15,false,Low Impact 3 | https://a830edad9050849523e17050400.sharepoint.com/sites/groupify_me_bb,google,false,Low Impact 4 | https://a830edad9050849523e17050400.sharepoint.com/sites/groupify_me_15,groupify_me_15_new,false,Medium Impact 5 | https://a830edad9050849523e17050400.sharepoint.com/sites/espc2017teamsite1,espcteamsite1alias,true,Low Impact 6 | https://a830edad9050849523e17050400.sharepoint.com/sites/espc2017teamsite3,espcteamsite3alias,true,Wrong Impact 7 | https://a830edad9050849523e17050400.sharepoint.com/sites/espc2017teamsite2,espcteamsite1alias,true 8 | https://a830edad9050849523e17050400.sharepoint.com/sites/espc2017teamsite4,espcteamsite4alias,true,High Impact 9 | 10 | -------------------------------------------------------------------------------- /Scripts/PageTransformation/TransformPages.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .SYNOPSIS 3 | Modernizes the pages of a site. 4 | 5 | IMPORTANT: this requires the PnP PowerShell version 3.16.1912.* (December 2019) or higher to work! 6 | Version: 1.1 7 | 8 | .EXAMPLE 9 | PS C:\> .\modernizesitecollection.ps1 10 | #> 11 | 12 | # Connect to the web holding the pages to modernize 13 | Connect-PnPOnline -Url https://contoso.sharepoint.com/sites/modernizationme 14 | 15 | # Get all the pages in the site pages library. SitePages is the only supported library for using modern pages 16 | # Use paging (-PageSize parameter) to ensure the query works when there are more than 5000 items in the list 17 | $pages = Get-PnPListItem -List sitepages -PageSize 500 18 | 19 | # Iterate over the pages 20 | foreach($page in $pages) 21 | { 22 | # Optionally filter the pages you want to modernize, filtering on FileLeafRef is filterigng on page name. In below 23 | # sample all the classic pages that start with a t are transformed 24 | if ($page.FieldValues["FileLeafRef"].StartsWith(("t"))) 25 | { 26 | # No need to convert modern pages again 27 | if ($page.FieldValues["ClientSideApplicationId"] -eq "b6917cb1-93a0-4b97-a84d-7cf49975d4ec" ) 28 | { 29 | Write-Host "Page " $page.FieldValues["FileLeafRef"] " is modern, no need to modernize it again" 30 | } 31 | else 32 | { 33 | # Create a modern version of this page 34 | Write-Host "Modernizing " $page.FieldValues["FileLeafRef"] "..." 35 | # Use the PageID value instead of the page name in the Identity parameter as that is more performant + it works when there are more than 5000 items in the list 36 | $modernPage = ConvertTo-PnPClientSidePage -Identity $page.FieldValues["ID"] -Overwrite 37 | Write-Host "Done" -ForegroundColor Green 38 | } 39 | } 40 | } 41 | 42 | Disconnect-PnPOnline 43 | 44 | -------------------------------------------------------------------------------- /Scripts/PageTransformation/readme.md: -------------------------------------------------------------------------------- 1 | # Transforming pages using PowerShell 2 | 3 | ## Summary 4 | 5 | The page transformation engine can also be used from PowerShell. This allows it to be integrated in a site modernization script that besides page transformation also does other things like installing solution, connecting the site to an Office 365 group and applying tenant branding. Below samples shows how to get started. 6 | 7 | ## Applies to 8 | 9 | - Office 365 Multi-Tenant (MT) 10 | 11 | ## Prerequisites 12 | 13 | - SharePoint PnP PowerShell version 3.16.1912.0 or higher (December 2019) 14 | 15 | ## Solution 16 | 17 | Solution|Author(s) 18 | --------|--------- 19 | Convert-WikiAndWebPartPages.ps1 | Bert Jansen (**Microsoft**) 20 | Convert-PublishingPages.ps1 | Paul Bullock (CaPa Creative Ltd) 21 | Convert-OnPremisesPublishingPages.ps1 | Paul Bullock (CaPa Creative Ltd) 22 | Convert-BlogPages.ps1 | Bert Jansen (**Microsoft**) 23 | Convert-DelveBlogPages.ps1 | Bert Jansen (**Microsoft**) 24 | 25 | ## Version history 26 | 27 | Version|Date|Comments 28 | -------|----|-------- 29 | 1.0 | November 1st 2018 | Initial commit 30 | 1.1 | June 26th 2019 | Added new sample 31 | 1.2 | August 8th 2019 | Added on-premises sample 32 | 1.3 | October 23rd 2019 | Added blog sample 33 | 1.4 | November 27th 2019 | Added Delve blog sample 34 | 1.5 | January 16th 2020 | Updated wiki/webpart page sample to be inline with the other samples 35 | 36 | ## Disclaimer 37 | 38 | THIS CODE IS PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANT ABILITY, OR NON-INFRINGEMENT. 39 | 40 | --- 41 | 42 | ## Learn more about using PowerShell to modernize pages 43 | 44 | Checkout the [Transforming to modern site pages using PowerShell](https://docs.microsoft.com/en-us/sharepoint/dev/transform/modernize-userinterface-site-pages-powershell) article on docs.microsoft.com. -------------------------------------------------------------------------------- /Scripts/readme.md: -------------------------------------------------------------------------------- 1 | 2 | # Modernization scripts 3 | 4 | Contains scripts that can be used to help with the modernization of your environment. 5 | 6 | Folder | Description 7 | -------|------------ 8 | O365GroupConnect | Contains scripts that show how to perform a bulk Office 365 Group connect. This is useful when you want to group connect multiple site collections instead of leaving group connect as a task for your site owners 9 | PageTransformation | Holds scripts that can be used to modernize classic wiki, web part and publishing pages 10 | ModernizeSiteCollection | End to end modernization scripts that show how to fully modernize a site collection 11 | ListAndLibraries | Scripts to configure modern lists and libraries 12 | -------------------------------------------------------------------------------- /Solutions/Page transformation UI release notes.md: -------------------------------------------------------------------------------- 1 | # Modernization Page Transformation UI release notes 2 | 3 | ## How to get and use 4 | 5 | See https://aka.ms/sppnp-pagetransformationui 6 | 7 | ## [Beta release] 8 | 9 | ### Added 10 | 11 | - Banner on classic pages 12 | - Support for alternative modernization center site collection URL 13 | 14 | ### Changed 15 | 16 | - Improved setup automation + troubleshooting guide 17 | - Correctly supports sub sites 18 | - Performance improvements 19 | 20 | ## [Preview release] 21 | 22 | ### Added 23 | 24 | - First public release 25 | 26 | ### Changed 27 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/assets/modernize16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/assets/modernize16x16.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/assets/modernize32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/assets/modernize32x32.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/assets/sharepointpnp-pagetransformation-central.sppkg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/assets/sharepointpnp-pagetransformation-central.sppkg -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/assets/sharepointpnp-pagetransformation-client.sppkg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/assets/sharepointpnp-pagetransformation-client.sppkg -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/images/PageTransformationUIarchitecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/images/PageTransformationUIarchitecture.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/images/enablepagetransformationwebpart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/images/enablepagetransformationwebpart.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/images/pagebannerwebpart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/images/pagebannerwebpart.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/images/pagetransformatorwebpart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/images/pagetransformatorwebpart.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/images/troubleshoot_AADST65001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/images/troubleshoot_AADST65001.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/images/troubleshoot_AADSTS50001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/images/troubleshoot_AADSTS50001.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/images/troubleshoot_ClearPageCache.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/images/troubleshoot_ClearPageCache.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/manual setup/images/azure_app_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/manual setup/images/azure_app_1.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/manual setup/images/azure_app_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/manual setup/images/azure_app_2.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/manual setup/images/azure_app_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/manual setup/images/azure_app_3.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/manual setup/images/azure_app_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/manual setup/images/azure_app_4.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/manual setup/images/azure_app_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/manual setup/images/azure_app_5.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/manual setup/images/azure_function_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/manual setup/images/azure_function_1.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/manual setup/images/azure_function_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/manual setup/images/azure_function_2.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/manual setup/images/azure_function_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/manual setup/images/azure_function_3.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/manual setup/images/azure_function_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/manual setup/images/azure_function_4.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/manual setup/images/azure_function_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/manual setup/images/azure_function_5.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/manual setup/images/azure_multitenant_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/manual setup/images/azure_multitenant_1.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/manual setup/images/azure_multitenant_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/manual setup/images/azure_multitenant_2.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/manual setup/images/sharepoint_app_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/manual setup/images/sharepoint_app_1.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/manual setup/images/sharepoint_app_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/manual setup/images/sharepoint_app_2.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/manual setup/images/sharepoint_app_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/manual setup/images/sharepoint_app_3.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/manual setup/images/sharepoint_app_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/manual setup/images/sharepoint_app_4.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/manual setup/images/sharepoint_site_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/manual setup/images/sharepoint_site_1.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/manual setup/images/sharepoint_site_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/docs/manual setup/images/sharepoint_site_2.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/manual setup/modernization-ui-multitenant-setup.md: -------------------------------------------------------------------------------- 1 | 2 | # Setting up your created Azure Function as multi-tenant function 3 | 4 | Companies often have multiple (test) tenants and then it makes sense to have only one Azure function app setup for page transformation. This can be done by first configuring you Azure function app for multi-tenant usage: 5 | 6 | ## Azure AD configuration 7 | 8 | - Navigation to https://admin.microsoft.com which will load up the Office 365 Admin Center 9 | - Expand the **Admin centers** dropdown in the left navigation and select **Azure Active Directory** which will load the Azure Active Directory admin center 10 | - Click on **Azure Active Directory** in the left navigation 11 | - Click on **App registrations** in the Manage section 12 | - Enter **SharePointPnP.Modernization** in the filter and select **All apps**. This should find the earlier created Azure AD application 13 | - Open up **Settings** pane and select **Properties** and toggle the **Multi-tenanted** toggle 14 | 15 | ## Azure Function App configuration 16 | 17 | - Navigation to https://portal.azure.com and open the earlier created Azure Function App 18 | - Click on **Platform features** and select **Cors** from the **Api** section 19 | - Remove all URL's and add a star (*) as **Allowed origin** and hit **Save** 20 | 21 | ![multi-tenant setup](images/azure_multitenant_1.png) 22 | 23 | - Click on **Platform features** and select **Application settings** from the **General settings** section 24 | - Scroll down to the **Application settings** section and the following application settings: 25 | 26 | - **AllowedTenants**: this contains a comma delimited list of tenants that you allow to use this function e.g. **bertonline.onmicrosoft.com,officedevpnp.onmicrosoft.com** 27 | 28 | - Press **Save** to persist the changes 29 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/manual setup/modernization-ui-multitenant-use.md: -------------------------------------------------------------------------------- 1 | 2 | # Using a multi-tenant Azure Function app for the Page Transformation UI 3 | 4 | If you've setup a multi-tenant Azure Function App or were allowed to access an existing one then follow these steps. 5 | 6 | ## Azure AD setup 7 | 8 | - Ensure you've received the application ID of the Azure AD application that's used to protect the multi-tenant Azure Function app 9 | - Craft a URL to admin consent this Azure AD application: 10 | 11 | - Use this URL, but replace the client_id guid with the application ID you've received: https://login.microsoftonline.com/common/oauth2/authorize?client_id=99ad0500-1230-4f7a-a5bb-5e83ce9374f4&response_type=code&prompt=admin_consent 12 | - Login with your Azure AD admin credentials and consent the application 13 | 14 | ## SharePoint setup 15 | 16 | - Use [PnP PowerShell](http://aka.ms/sppnp-powershell) to point your setup to the multi-tenant service 17 | 18 | ```PowerShell 19 | Set-PnPStorageEntity -Key "Modernization_AzureADApp" -Value "99ad0500-1230-4f7a-a5bb-5e83ce9374f4" -Description "ID of the multi-tenant Azure AD app is used for page transformation" 20 | Set-PnPStorageEntity -Key "Modernization_FunctionHost" -Value "https://multitenantmodernization.azurewebsites.net" -Description "Host of the multi-tenant SharePoint PnP Modernization service" 21 | ``` -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/manual setup/readme.md: -------------------------------------------------------------------------------- 1 | # Manual setup of the Page Transformation UI 2 | 3 | If you want to manually configure the Page Transformation UI, if you want to get deep understanding of the solution is built then reading the manual setup guide will help you. This setup guide consists out of a mandatory part and an optional part for multi-tenant service usage. 4 | 5 | ## Mandatory steps in setting up the Page Transformation UI 6 | 7 | Since the Page Transformation UI solution depends on Azure and SharePoint the setup is split accordingly. Follow below 2 guides to get up and running: 8 | 9 | 1. [Configure Azure (Azure AD application and Azure Function app)](modernization-ui-manual-azure.md) 10 | 2. [Configure SharePoint (solution deployment, modernization center site and enabling page transformation for your sites)](modernization-ui-manual-sharepoint.md) 11 | 12 | ## Optional steps 13 | 14 | You can also configure the Azure Function app created in previous chapter as a multi-tenant function which will than allow you to share this Azure function app with multiple tenants needing page transformation. 15 | 16 | - [Configure your Azure Function app to be used from multiple tenants](modernization-ui-multitenant-setup.md) 17 | - [Configure your SharePoint tenant to consume a multi-tenant page transformation service](modernization-ui-multitenant-use.md) 18 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/docs/readme.md: -------------------------------------------------------------------------------- 1 | # Documentation 2 | 3 | This section of the repository contains the documentation you need to understand, setup and configure the Page Transformation UI solution. Currently available documentation is: 4 | 5 | - [Automated deployment of the Page Transformation UI solution (recommended)](deploymentguide.md) 6 | - [Upgrading an earlier deployment of the Page Transformation UI solution (recommended)](upgradeguide.md) 7 | - [Manual setup of the Page Transformation UI solution](/Solutions/PageTransformationUI/docs/manual%20setup) 8 | - [Frequently Asked Questions](modernization-ui-faq.md) 9 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/provisioning/BuildSiteCSV.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .SYNOPSIS 3 | Shows how to obtain a list of site collections based upon a filter and then export them to a CSV file 4 | 5 | .EXAMPLE 6 | PS C:\> .\BuildSiteCSV.ps1 7 | #> 8 | 9 | # List of sites that will be exported to CSV 10 | $array = @() 11 | $csvFileName = ".\sites.csv" 12 | 13 | # Get a list of sites, e.g. filter on Template 14 | $sites = get-pnptenantsite | where-object {$_.Template -eq "STS#0" -and $_.Url -like "*espc*"} 15 | 16 | foreach($site in $sites) 17 | { 18 | #if ($site.Url -like "*espctest*") 19 | #{ 20 | $array += New-Object PsObject -property @{'SiteCollectionUrl' = $site.Url } 21 | #} 22 | } 23 | 24 | $array | export-csv -NoTypeInformation -Path $csvFileName -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/provisioning/Disable-PageTransformation.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .SYNOPSIS 3 | Disable page transformation UI integration for the currently connected site collection 4 | 5 | .EXAMPLE 6 | PS C:\> .\Disable-PageTransformation.ps1 7 | #> 8 | 9 | $site = Get-PnPSite -Includes ServerRelativeUrl 10 | Write-Host "Disabling page transformation for $($site.ServerRelativeUrl)" -ForegroundColor White 11 | 12 | Remove-PnPCustomAction -Identity "CA_PnP_Modernize_SitePages_RIBBON" -Scope Site -Force 13 | Remove-PnPCustomAction -Identity "CA_PnP_Modernize_SitePages_ECB" -Scope Site -Force 14 | Remove-PnPCustomAction -Identity "CA_PnP_Modernize_WikiPage_RIBBON" -Scope Site -Force 15 | Remove-PnPCustomAction -Identity "CA_PnP_Modernize_WebPartPage_RIBBON" -Scope Site -Force 16 | Remove-PnPCustomAction -Identity "CA_PnP_Modernize_ClassicBanner" -Scope Site -Force 17 | 18 | Write-Host "Done" -ForegroundColor Green -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/provisioning/README.md: -------------------------------------------------------------------------------- 1 | # Provisioning scripts 2 | 3 | This folder contains the script you need to provision and configure the Page Transformation UI solution. 4 | 5 | Check out the [deployment guide](/Solutions/PageTransformationUI/docs/deploymentguide.md) for the needed instructions. -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/provisioning/UpdatingPnPFile.md: -------------------------------------------------------------------------------- 1 | # Using a .pnp file 2 | 3 | When you use the .xml template you'll also need the assets folder present as the .xml version of the template refers to assets. It's often easier to use the provided .pnp template or package your own version of the .pnp file via: 4 | 5 | ```Powershell 6 | $t = Read-PnPTenantTemplate modernization.xml 7 | Save-PnPTenantTemplate -Template $t -Out modernization.pnp 8 | ``` 9 | 10 | Applying the SharePoint PnP template then works like this: 11 | 12 | ```Powershell 13 | # Deploy SharePoint component 14 | Apply-PnPTenantTemplate -Path .\modernization.pnp -Parameters @{"AzureAppID"="79ad0500-1230-4f7a-a5bb-5e83ce9174f4";"AzureFunction"="https://contosomodernization.azurewebsites.net"} 15 | ``` -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/provisioning/modernization.pnp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/provisioning/modernization.pnp -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/provisioning/sharepointpnpmodernizationeurope.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/provisioning/sharepointpnpmodernizationeurope.zip -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/services/ModernizationService/ModernizationFunction/ModernizationFunction.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | net461 4 | v1 5 | SharePointPnP.ModernizationFunction 6 | 7 | 8 | 9 | 10 | 11 | 12 | Always 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | PreserveNewest 26 | 27 | 28 | PreserveNewest 29 | Never 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/services/ModernizationService/ModernizationFunction/OAuthTokenResponse.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json; 2 | using System; 3 | 4 | namespace SharePointPnP.ModernizationFunction 5 | { 6 | 7 | public class OAuthTokenResponse 8 | { 9 | [JsonProperty("token_type")] 10 | public String TokenType { get; set; } 11 | 12 | [JsonProperty("scope")] 13 | public String Scope { get; set; } 14 | 15 | [JsonProperty("expires_in")] 16 | public Int64 ExpiresIn { get; set; } 17 | 18 | [JsonProperty("ext_expires_in")] 19 | public Int64 ExtExpiresIn { get; set; } 20 | 21 | [JsonProperty("expires_on")] 22 | public Int64 ExpiresOn { get; set; } 23 | 24 | [JsonProperty("not_before")] 25 | public Int64 NotBefore { get; set; } 26 | 27 | [JsonProperty("resource")] 28 | public String Resource { get; set; } 29 | 30 | [JsonProperty("access_token")] 31 | public String AccessToken { get; set; } 32 | 33 | [JsonProperty("refresh_token")] 34 | public String RefreshToken { get; set; } 35 | 36 | [JsonProperty("id_token")] 37 | public String IdToken { get; set; } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/services/ModernizationService/ModernizationFunction/host.json: -------------------------------------------------------------------------------- 1 | { 2 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/services/ModernizationService/ModernizationFunction/readme.txt: -------------------------------------------------------------------------------- 1 | Multi-tenant admin consent url: https://login.microsoftonline.com/common/oauth2/authorize?client_id=79ad0500-1230-4f7a-a5bb-5e83ce9174f4&response_type=code&prompt=admin_consent 2 | Sample URLs to test this demo function: 3 | https://sharepointpnpmodernizationdemo.azurewebsites.net/api/Demo?SiteUrl=https%3A%2F%2Fbertonline.sharepoint.com%2Fsites%2Fpermissive 4 | https://sharepointpnpmodernizationdemo.azurewebsites.net/api/Demo?SiteUrl=https%3A%2F%2Fbertonline.sharepoint.com%2Fsites%2Fpermissive&PageUrl=https%3A%2F%2Fbertonline.sharepoint.com%2Fsites%2Fpermissive%2FSitePages%2FClassicPage.aspx 5 | https://sharepointpnpmodernizationdemo.azurewebsites.net/api/Demo?SiteUrl=https%3A%2F%2Fofficedevpnp.sharepoint.com%2Fsites%2Fmodernizeme5&PageUrl=https%3A%2F%2Fofficedevpnp.sharepoint.com%2Fsites%2Fmodernizeme5%2FSitePages%2Fgiro2018.aspx 6 | 7 | Background: 8 | Multi-tenant Azure Function: https://stackoverflow.com/questions/44720343/connect-azure-function-to-microsoft-graph-as-a-multi-tenant-application-using-az 9 | App Service authentication overview: https://docs.microsoft.com/en-us/azure/app-service/app-service-authentication-overview 10 | 11 | 12 | Host.json details: https://github.com/Azure/azure-functions-host/wiki/host.json 13 | 14 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/services/ModernizationService/ModernizationService.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.28010.2046 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModernizationFunction", "ModernizationFunction\ModernizationFunction.csproj", "{9BC867F7-A151-4A94-8020-D3A0B3E1DF20}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {9BC867F7-A151-4A94-8020-D3A0B3E1DF20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {9BC867F7-A151-4A94-8020-D3A0B3E1DF20}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {9BC867F7-A151-4A94-8020-D3A0B3E1DF20}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {9BC867F7-A151-4A94-8020-D3A0B3E1DF20}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {713A3190-A367-4233-AA7E-4DC9273B1EE1} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/services/readme.md: -------------------------------------------------------------------------------- 1 | # The back end services 2 | 3 | The Page Transformation UI solution does require a backend service that will execute the requests for transforming a page. Checkout the **ModernizationService** Visual Studio solution to see how we've implemented this service. -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/README.md: -------------------------------------------------------------------------------- 1 | # SharePoint Framework solutions 2 | 3 | This folder contains the SharePoint Framework (SPFX) components of the Page Transformation UI solution. Following SharePoint Framework components are used: 4 | 5 | **A PageTransformator web part**: this web part is hosted on a central page (modernize.aspx) in the modernization center site collection. This web part is responsible for calling the Azure AD secured Azure Function on behalf of the current user 6 | 7 | ![page transformator web part](../docs/images/pagetransformatorwebpart.png) 8 | 9 | **A PageAcceptBanner web part**: this web part will be added on the transformed pages and does allow an end users to accept/decline to transformed page 10 | 11 | ![page accept banner web part](../docs/images/pagebannerwebpart.png) 12 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent 2 | # coding styles between different editors and IDEs 3 | # editorconfig.org 4 | 5 | root = true 6 | 7 | 8 | [*] 9 | 10 | # change these settings to your own preference 11 | indent_style = space 12 | indent_size = 2 13 | 14 | # we recommend you to keep these unchanged 15 | end_of_line = lf 16 | charset = utf-8 17 | trim_trailing_whitespace = true 18 | insert_final_newline = true 19 | 20 | [*.md] 21 | trim_trailing_whitespace = false 22 | 23 | [{package,bower}.json] 24 | indent_style = space 25 | indent_size = 2 -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Dependency directories 7 | node_modules 8 | 9 | # Build generated files 10 | dist 11 | lib 12 | solution 13 | temp 14 | *.sppkg 15 | 16 | # Coverage directory used by tools like istanbul 17 | coverage 18 | 19 | # OSX 20 | .DS_Store 21 | 22 | # Visual Studio files 23 | .ntvs_analysis.dat 24 | .vs 25 | bin 26 | obj 27 | 28 | # Resx Generated Code 29 | *.resx.ts 30 | 31 | # Styles Generated Code 32 | *.scss.ts 33 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "msjsdiag.debugger-for-chrome" 4 | ] 5 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | /** 3 | * Install Chrome Debugger Extension for Visual Studio Code to debug your components with the 4 | * Chrome browser: https://aka.ms/spfx-debugger-extensions 5 | */ 6 | "version": "0.2.0", 7 | "configurations": [{ 8 | "name": "Local workbench", 9 | "type": "chrome", 10 | "request": "launch", 11 | "url": "https://localhost:4321/temp/workbench.html", 12 | "webRoot": "${workspaceRoot}", 13 | "sourceMaps": true, 14 | "sourceMapPathOverrides": { 15 | "webpack:///../../../src/*": "${webRoot}/src/*", 16 | "webpack:///../../../../src/*": "${webRoot}/src/*", 17 | "webpack:///../../../../../src/*": "${webRoot}/src/*" 18 | }, 19 | "runtimeArgs": [ 20 | "--remote-debugging-port=9222" 21 | ] 22 | }, 23 | { 24 | "name": "Hosted workbench", 25 | "type": "chrome", 26 | "request": "launch", 27 | "url": "https://enter-your-SharePoint-site/_layouts/workbench.aspx", 28 | "webRoot": "${workspaceRoot}", 29 | "sourceMaps": true, 30 | "sourceMapPathOverrides": { 31 | "webpack:///../../../src/*": "${webRoot}/src/*", 32 | "webpack:///../../../../src/*": "${webRoot}/src/*", 33 | "webpack:///../../../../../src/*": "${webRoot}/src/*" 34 | }, 35 | "runtimeArgs": [ 36 | "--remote-debugging-port=9222", 37 | "-incognito" 38 | ] 39 | } 40 | ] 41 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | // Configure glob patterns for excluding files and folders in the file explorer. 4 | "files.exclude": { 5 | "**/.git": true, 6 | "**/.DS_Store": true, 7 | "**/bower_components": true, 8 | "**/coverage": true, 9 | "**/lib-amd": true, 10 | "src/**/*.scss.ts": true 11 | }, 12 | "typescript.tsdk": ".\\node_modules\\typescript\\lib" 13 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/.yo-rc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@microsoft/generator-sharepoint": { 3 | "isCreatingSolution": true, 4 | "environment": "spo", 5 | "version": "1.7.0", 6 | "libraryName": "sharepointpnp-pagetransformation-central", 7 | "libraryId": "eeca9e77-32ae-43fb-b279-2436ac62a842", 8 | "packageManager": "npm", 9 | "isDomainIsolated": false, 10 | "componentType": "webpart" 11 | } 12 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/README.md: -------------------------------------------------------------------------------- 1 | ## sharepointpnp-pagetransformation-central 2 | 3 | This is where you include your WebPart documentation. 4 | 5 | ### Building the code 6 | 7 | ```bash 8 | git clone the repo 9 | npm i 10 | npm i -g gulp 11 | gulp 12 | ``` 13 | 14 | This package produces the following: 15 | 16 | * lib/* - intermediate-stage commonjs build artifacts 17 | * dist/* - the bundled script, along with other resources 18 | * deploy/* - all resources which should be uploaded to a CDN. 19 | 20 | ### Build options 21 | 22 | gulp clean - TODO 23 | gulp test - TODO 24 | gulp serve - TODO 25 | gulp bundle - TODO 26 | gulp package-solution - TODO 27 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/config/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/config.2.0.schema.json", 3 | "version": "2.0", 4 | "bundles": { 5 | "page-transformator-web-part": { 6 | "components": [ 7 | { 8 | "entrypoint": "./lib/webparts/pageTransformator/PageTransformatorWebPart.js", 9 | "manifest": "./src/webparts/pageTransformator/PageTransformatorWebPart.manifest.json" 10 | } 11 | ] 12 | }, 13 | "page-transformator-admin-web-part" : { 14 | "components": [ 15 | { 16 | "entrypoint": "./lib/webparts/pageTransformatorAdmin/PageTransformatorAdminWebPart.js", 17 | "manifest": "./src/webparts/pageTransformatorAdmin/PageTransformatorAdminWebPart.manifest.json" 18 | } 19 | ] 20 | } 21 | }, 22 | "externals": {}, 23 | "localizedResources": { 24 | "PageTransformatorWebPartStrings": "lib/webparts/pageTransformator/loc/{locale}.js", 25 | "PageTransformatorAdminWebPartStrings": "lib/webparts/pageTransformatorAdmin/loc/{locale}.js" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/config/copy-assets.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/copy-assets.schema.json", 3 | "deployCdnPath": "temp/deploy" 4 | } 5 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/config/deploy-azure-storage.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/deploy-azure-storage.schema.json", 3 | "workingDir": "./temp/deploy/", 4 | "account": "", 5 | "container": "sharepointpnp-pagetransformation-central", 6 | "accessKey": "" 7 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/config/package-solution.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/package-solution.schema.json", 3 | "solution": { 4 | "name": "sharepointpnp-pagetransformation-central-solution", 5 | "id": "eeca9e77-32ae-43fb-b279-2436ac62a842", 6 | "version": "1.0.0.4", 7 | "includeClientSideAssets": true, 8 | "isDomainIsolated": false, 9 | "webApiPermissionRequests": [ 10 | { 11 | "resource": "SharePointPnP.Modernization", 12 | "scope": "user_impersonation" 13 | } 14 | ] 15 | }, 16 | "paths": { 17 | "zippedPackage": "solution/sharepointpnp-pagetransformation-central.sppkg" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/config/serve.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/json-schemas/core-build/serve.schema.json", 3 | "port": 4321, 4 | "https": true, 5 | "initialPage": "https://localhost:5432/workbench", 6 | "api": { 7 | "port": 5432, 8 | "entryPath": "node_modules/@microsoft/sp-webpart-workbench/lib/api/" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/config/write-manifests.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", 3 | "cdnBasePath": "" 4 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/gulpfile.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const gulp = require('gulp'); 4 | const build = require('@microsoft/sp-build-web'); 5 | build.addSuppression(`Warning - [sass] The local CSS class 'ms-Grid' is not camelCase and will not be type-safe.`); 6 | 7 | build.initialize(gulp); 8 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sharepointpnp-pagetransformation-central", 3 | "version": "0.0.3", 4 | "private": true, 5 | "engines": { 6 | "node": ">=0.10.0" 7 | }, 8 | "scripts": { 9 | "build": "gulp bundle", 10 | "clean": "gulp clean", 11 | "test": "gulp test" 12 | }, 13 | "dependencies": { 14 | "@microsoft/gulp-core-build-karma": "^4.6.54", 15 | "@microsoft/sp-core-library": "1.7.0", 16 | "@microsoft/sp-lodash-subset": "1.7.0", 17 | "@microsoft/sp-office-ui-fabric-core": "1.7.0", 18 | "@microsoft/sp-webpart-base": "1.7.0", 19 | "@pnp/common": "^1.2.6", 20 | "@pnp/logging": "^1.2.6", 21 | "@pnp/odata": "^1.2.6", 22 | "@pnp/sp": "^1.2.6", 23 | "@types/es6-promise": "0.0.33", 24 | "@types/react": "16.4.2", 25 | "@types/react-dom": "16.0.5", 26 | "@types/webpack-env": "1.13.1", 27 | "react": "16.3.2", 28 | "react-dom": "16.3.3" 29 | }, 30 | "devDependencies": { 31 | "@microsoft/sp-build-web": "1.7.0", 32 | "@microsoft/sp-tslint-rules": "1.7.0", 33 | "@microsoft/sp-module-interfaces": "1.7.0", 34 | "@microsoft/sp-webpart-workbench": "1.7.0", 35 | "gulp": "~3.9.1", 36 | "@types/chai": "3.4.34", 37 | "@types/mocha": "2.2.38", 38 | "ajv": "~5.2.2" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/src/index.ts: -------------------------------------------------------------------------------- 1 | // A file is required to be in the root of the /src directory by the TypeScript compiler 2 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/src/webparts/pageTransformator/PageTransformatorWebPart.manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/json-schemas/spfx/client-side-web-part-manifest.schema.json", 3 | "id": "c732da60-5eee-4dd0-8879-b89eec6d89df", 4 | "alias": "PageTransformatorWebPart", 5 | "componentType": "WebPart", 6 | 7 | // The "*" signifies that the version should be taken from the package.json 8 | "version": "*", 9 | "manifestVersion": 2, 10 | 11 | // If true, the component can only be installed on sites where Custom Script is allowed. 12 | // Components that allow authors to embed arbitrary script code should set this to true. 13 | // https://support.office.com/en-us/article/Turn-scripting-capabilities-on-or-off-1f2c515f-5d7e-448a-9fd7-835da935584f 14 | "requiresCustomScript": false, 15 | 16 | "preconfiguredEntries": [{ 17 | "groupId": "5c03119e-3074-46fd-976b-c60198311f70", // Other 18 | "group": { "default": "Other" }, 19 | "title": { "default": "pageTransformator" }, 20 | "description": { "default": "Calls the page transformation service on behalf of the user to create a modern version of the page" }, 21 | "officeFabricIconFontName": "Lightbulb", 22 | "properties": { 23 | "description": "pageTransformator" 24 | } 25 | }] 26 | } 27 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/src/webparts/pageTransformator/components/IPageTransformatorProps.ts: -------------------------------------------------------------------------------- 1 | import { AadHttpClient } from '@microsoft/sp-http'; 2 | import { IStorageEntities } from './IStorageEntities'; 3 | 4 | export interface IPageTransformatorProps { 5 | modernizationClient: AadHttpClient; 6 | modernizationApi: string; 7 | siteUrl: string; 8 | pageUrl: string; 9 | editMode: boolean; 10 | storageEntitiesSet: boolean; 11 | storageEntities: IStorageEntities; 12 | } 13 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/src/webparts/pageTransformator/components/IPageTransformatorState.ts: -------------------------------------------------------------------------------- 1 | export interface IPageTransformatorState { 2 | editMode: boolean; 3 | errorString: string; 4 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/src/webparts/pageTransformator/components/IStorageEntities.ts: -------------------------------------------------------------------------------- 1 | export interface IStorageEntities { 2 | azureADApp: string; 3 | functionHost: string; 4 | pageTransformationEndpoint: string; 5 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/src/webparts/pageTransformator/components/IStorageEntity.ts: -------------------------------------------------------------------------------- 1 | export interface IStorageEntity { 2 | '@odata.context': string; 3 | '@odata.type': string; 4 | '@odata.id': string; 5 | '@odata.editLink': string; 6 | Comment: string; 7 | Description: string; 8 | Value: string; 9 | error?: any; 10 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/src/webparts/pageTransformator/components/PageTransformator.module.scss: -------------------------------------------------------------------------------- 1 | @import '~@microsoft/sp-office-ui-fabric-core/dist/sass/SPFabricCore.scss'; 2 | 3 | .pageTransformator { 4 | 5 | .container { 6 | margin: 0px auto; 7 | } 8 | 9 | .centeralign { 10 | text-align: center; 11 | } 12 | 13 | .row { 14 | @include ms-Grid-row; 15 | @include ms-fontColor-white; 16 | background-color: $ms-color-white; 17 | padding: 5px; 18 | } 19 | 20 | .column { 21 | @include ms-Grid-col; 22 | } 23 | 24 | .title { 25 | @include ms-font-xl; 26 | @include ms-fontColor-white; 27 | } 28 | 29 | .subTitle { 30 | @include ms-font-l; 31 | @include ms-fontColor-white; 32 | } 33 | 34 | .description { 35 | @include ms-font-l; 36 | @include ms-fontColor-white; 37 | } 38 | 39 | .button { 40 | // Our button 41 | text-decoration: none; 42 | height: 32px; 43 | 44 | // Primary Button 45 | min-width: 80px; 46 | background-color: $ms-color-themePrimary; 47 | border-color: $ms-color-themePrimary; 48 | color: $ms-color-white; 49 | 50 | // Basic Button 51 | outline: transparent; 52 | position: relative; 53 | font-family: "Segoe UI WestEuropean","Segoe UI",-apple-system,BlinkMacSystemFont,Roboto,"Helvetica Neue",sans-serif; 54 | -webkit-font-smoothing: antialiased; 55 | font-size: $ms-font-size-m; 56 | font-weight: $ms-font-weight-regular; 57 | border-width: 0; 58 | text-align: center; 59 | cursor: pointer; 60 | display: inline-block; 61 | padding: 0 16px; 62 | 63 | .label { 64 | font-weight: $ms-font-weight-semibold; 65 | font-size: $ms-font-size-m; 66 | height: 32px; 67 | line-height: 32px; 68 | margin: 0 4px; 69 | vertical-align: top; 70 | display: inline-block; 71 | } 72 | } 73 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/src/webparts/pageTransformator/loc/en-us.js: -------------------------------------------------------------------------------- 1 | define([], function() { 2 | return { 3 | "PropertyPaneDescription": "Description", 4 | "BasicGroupName": "Group Name", 5 | "DescriptionFieldLabel": "Description Field" 6 | } 7 | }); -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/src/webparts/pageTransformator/loc/mystrings.d.ts: -------------------------------------------------------------------------------- 1 | declare interface IPageTransformatorWebPartStrings { 2 | PropertyPaneDescription: string; 3 | BasicGroupName: string; 4 | DescriptionFieldLabel: string; 5 | } 6 | 7 | declare module 'PageTransformatorWebPartStrings' { 8 | const strings: IPageTransformatorWebPartStrings; 9 | export = strings; 10 | } 11 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/src/webparts/pageTransformatorAdmin/PageTransformatorAdminWebPart.manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/json-schemas/spfx/client-side-web-part-manifest.schema.json", 3 | "id": "d44fe952-072d-4f11-866b-d41185c5e8f2", 4 | "alias": "PageTransformatorAdminWebPart", 5 | "componentType": "WebPart", 6 | 7 | // The "*" signifies that the version should be taken from the package.json 8 | "version": "*", 9 | "manifestVersion": 2, 10 | 11 | // If true, the component can only be installed on sites where Custom Script is allowed. 12 | // Components that allow authors to embed arbitrary script code should set this to true. 13 | // https://support.office.com/en-us/article/Turn-scripting-capabilities-on-or-off-1f2c515f-5d7e-448a-9fd7-835da935584f 14 | "requiresCustomScript": false, 15 | 16 | "preconfiguredEntries": [{ 17 | "groupId": "5c03119e-3074-46fd-976b-c60198311f70", // Other 18 | "group": { "default": "Other" }, 19 | "title": { "default": "PageTransformatorAdmin" }, 20 | "description": { "default": "Allows administrators to enable or disable sites for page transformation" }, 21 | "officeFabricIconFontName": "Page", 22 | "properties": { 23 | "description": "PageTransformatorAdmin" 24 | } 25 | }] 26 | } 27 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/src/webparts/pageTransformatorAdmin/PageTransformatorAdminWebPart.ts: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import * as ReactDom from 'react-dom'; 3 | import { Version } from '@microsoft/sp-core-library'; 4 | import { 5 | BaseClientSideWebPart, 6 | IPropertyPaneConfiguration, 7 | PropertyPaneTextField 8 | } from '@microsoft/sp-webpart-base'; 9 | 10 | import * as strings from 'PageTransformatorAdminWebPartStrings'; 11 | import PageTransformatorAdmin from './components/PageTransformatorAdmin'; 12 | import { IPageTransformatorAdminProps } from './components/IPageTransformatorAdminProps'; 13 | 14 | export interface IPageTransformatorAdminWebPartProps { 15 | description: string; 16 | } 17 | 18 | export default class PageTransformatorAdminWebPart extends BaseClientSideWebPart { 19 | 20 | public render(): void { 21 | const element: React.ReactElement = React.createElement( 22 | PageTransformatorAdmin, 23 | { 24 | description: this.properties.description, 25 | context: this.context 26 | } 27 | ); 28 | 29 | ReactDom.render(element, this.domElement); 30 | } 31 | 32 | protected onDispose(): void { 33 | ReactDom.unmountComponentAtNode(this.domElement); 34 | } 35 | 36 | protected get dataVersion(): Version { 37 | return Version.parse('1.0'); 38 | } 39 | 40 | protected getPropertyPaneConfiguration(): IPropertyPaneConfiguration { 41 | return { 42 | pages: [ 43 | { 44 | header: { 45 | description: strings.PropertyPaneDescription 46 | }, 47 | groups: [ 48 | { 49 | groupName: strings.BasicGroupName, 50 | groupFields: [ 51 | PropertyPaneTextField('description', { 52 | label: strings.DescriptionFieldLabel 53 | }) 54 | ] 55 | } 56 | ] 57 | } 58 | ] 59 | }; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/src/webparts/pageTransformatorAdmin/components/IPageTransformatorAdminProps.ts: -------------------------------------------------------------------------------- 1 | import { WebPartContext } from "@microsoft/sp-webpart-base"; 2 | import { MessageBarType } from "office-ui-fabric-react/lib/MessageBar"; 3 | 4 | export interface IPageTransformatorAdminProps { 5 | description: string; 6 | context: WebPartContext; 7 | } 8 | 9 | export interface IPageTransformatorAdminState { 10 | siteUrl: string; 11 | buttonsDisabled: boolean; 12 | resultMessage :string; 13 | resultMessageType: MessageBarType; 14 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/src/webparts/pageTransformatorAdmin/components/PageTransformatorAdmin.module.scss: -------------------------------------------------------------------------------- 1 | @import '~@microsoft/sp-office-ui-fabric-core/dist/sass/SPFabricCore.scss'; 2 | 3 | .pageTransformatorAdmin { 4 | 5 | .actions { 6 | margin-top: 16px; 7 | 8 | button:first-child { 9 | margin-right: 16px; 10 | } 11 | } 12 | 13 | .messages { 14 | margin-top: 16px; 15 | } 16 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/src/webparts/pageTransformatorAdmin/loc/en-us.js: -------------------------------------------------------------------------------- 1 | define([], function() { 2 | return { 3 | "PropertyPaneDescription": "Description", 4 | "BasicGroupName": "Group Name", 5 | "DescriptionFieldLabel": "Description Field" 6 | } 7 | }); -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/src/webparts/pageTransformatorAdmin/loc/mystrings.d.ts: -------------------------------------------------------------------------------- 1 | declare interface IPageTransformatorAdminWebPartStrings { 2 | PropertyPaneDescription: string; 3 | BasicGroupName: string; 4 | DescriptionFieldLabel: string; 5 | } 6 | 7 | declare module 'PageTransformatorAdminWebPartStrings' { 8 | const strings: IPageTransformatorAdminWebPartStrings; 9 | export = strings; 10 | } 11 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/teams/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.2/MicrosoftTeams.schema.json", 3 | "manifestVersion": "1.2", 4 | "packageName": "PageTransformator", 5 | "id": "c732da60-5eee-4dd0-8879-b89eec6d89df", 6 | "version": "0.1", 7 | "developer": { 8 | "name": "SPFx + Teams Dev", 9 | "websiteUrl": "https://products.office.com/en-us/sharepoint/collaboration", 10 | "privacyUrl": "https://privacy.microsoft.com/en-us/privacystatement", 11 | "termsOfUseUrl": "https://www.microsoft.com/en-us/servicesagreement" 12 | }, 13 | "name": { 14 | "short": "PageTransformator" 15 | }, 16 | "description": { 17 | "short": "Calls the page transformation service on behalf of the user to create a modern version of the page", 18 | "full": "Calls the page transformation service on behalf of the user to create a modern version of the page" 19 | }, 20 | "icons": { 21 | "outline": "tab20x20.png", 22 | "color": "tab96x96.png" 23 | }, 24 | "accentColor": "#004578", 25 | "configurableTabs": [ 26 | { 27 | "configurationUrl": "https://{teamSiteDomain}{teamSitePath}/_layouts/15/TeamsLogon.aspx?SPFX=true&dest={teamSitePath}/_layouts/15/teamshostedapp.aspx%3FopenPropertyPane=true%26teams%26componentId=c732da60-5eee-4dd0-8879-b89eec6d89df", 28 | "canUpdateConfiguration": false, 29 | "scopes": [ 30 | "team" 31 | ] 32 | } 33 | ], 34 | "validDomains": [ 35 | "*.login.microsoftonline.com", 36 | "*.sharepoint.com", 37 | "*.sharepoint-df.com", 38 | "spoppe-a.akamaihd.net", 39 | "spoprod-a.akamaihd.net", 40 | "resourceseng.blob.core.windows.net", 41 | "msft.spoppe.com" 42 | ], 43 | "webApplicationInfo": { 44 | "resource": "https://{teamSiteDomain}", 45 | "id": "00000003-0000-0ff1-ce00-000000000000" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/teams/tab20x20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/spfx/central/teams/tab20x20.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/teams/tab96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/spfx/central/teams/tab96x96.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "forceConsistentCasingInFileNames": true, 5 | "module": "esnext", 6 | "moduleResolution": "node", 7 | "jsx": "react", 8 | "declaration": true, 9 | "sourceMap": true, 10 | "experimentalDecorators": true, 11 | "skipLibCheck": true, 12 | "outDir": "lib", 13 | "typeRoots": [ 14 | "./node_modules/@types", 15 | "./node_modules/@microsoft" 16 | ], 17 | "types": [ 18 | "es6-promise", 19 | "webpack-env" 20 | ], 21 | "lib": [ 22 | "es5", 23 | "dom", 24 | "es2015.collection" 25 | ] 26 | }, 27 | "include": [ 28 | "src/**/*.ts" 29 | ], 30 | "exclude": [ 31 | "node_modules", 32 | "lib" 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/central/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@microsoft/sp-tslint-rules/base-tslint.json", 3 | "rules": { 4 | "class-name": false, 5 | "export-name": false, 6 | "forin": false, 7 | "label-position": false, 8 | "member-access": true, 9 | "no-arg": false, 10 | "no-console": false, 11 | "no-construct": false, 12 | "no-duplicate-variable": true, 13 | "no-eval": false, 14 | "no-function-expression": true, 15 | "no-internal-module": true, 16 | "no-shadowed-variable": true, 17 | "no-switch-case-fall-through": true, 18 | "no-unnecessary-semicolons": true, 19 | "no-unused-expression": true, 20 | "no-use-before-declare": true, 21 | "no-with-statement": true, 22 | "semicolon": true, 23 | "trailing-comma": false, 24 | "typedef": false, 25 | "typedef-whitespace": false, 26 | "use-named-parameter": true, 27 | "variable-name": false, 28 | "whitespace": false 29 | } 30 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "lockfileVersion": 1 3 | } 4 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent 2 | # coding styles between different editors and IDEs 3 | # editorconfig.org 4 | 5 | root = true 6 | 7 | 8 | [*] 9 | 10 | # change these settings to your own preference 11 | indent_style = space 12 | indent_size = 2 13 | 14 | # we recommend you to keep these unchanged 15 | end_of_line = lf 16 | charset = utf-8 17 | trim_trailing_whitespace = true 18 | insert_final_newline = true 19 | 20 | [*.md] 21 | trim_trailing_whitespace = false 22 | 23 | [{package,bower}.json] 24 | indent_style = space 25 | indent_size = 2 -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Dependency directories 7 | node_modules 8 | 9 | # Build generated files 10 | dist 11 | lib 12 | solution 13 | temp 14 | *.sppkg 15 | 16 | # Coverage directory used by tools like istanbul 17 | coverage 18 | 19 | # OSX 20 | .DS_Store 21 | 22 | # Visual Studio files 23 | .ntvs_analysis.dat 24 | .vs 25 | bin 26 | obj 27 | 28 | # Resx Generated Code 29 | *.resx.ts 30 | 31 | # Styles Generated Code 32 | *.scss.ts 33 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "msjsdiag.debugger-for-chrome" 4 | ] 5 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | /** 3 | * Install Chrome Debugger Extension for Visual Studio Code to debug your components with the 4 | * Chrome browser: https://aka.ms/spfx-debugger-extensions 5 | */ 6 | "version": "0.2.0", 7 | "configurations": [{ 8 | "name": "Local workbench", 9 | "type": "chrome", 10 | "request": "launch", 11 | "url": "https://localhost:4321/temp/workbench.html", 12 | "webRoot": "${workspaceRoot}", 13 | "sourceMaps": true, 14 | "sourceMapPathOverrides": { 15 | "webpack:///../../../src/*": "${webRoot}/src/*", 16 | "webpack:///../../../../src/*": "${webRoot}/src/*", 17 | "webpack:///../../../../../src/*": "${webRoot}/src/*" 18 | }, 19 | "runtimeArgs": [ 20 | "--remote-debugging-port=9222" 21 | ] 22 | }, 23 | { 24 | "name": "Hosted workbench", 25 | "type": "chrome", 26 | "request": "launch", 27 | "url": "https://enter-your-SharePoint-site/_layouts/workbench.aspx", 28 | "webRoot": "${workspaceRoot}", 29 | "sourceMaps": true, 30 | "sourceMapPathOverrides": { 31 | "webpack:///../../../src/*": "${webRoot}/src/*", 32 | "webpack:///../../../../src/*": "${webRoot}/src/*", 33 | "webpack:///../../../../../src/*": "${webRoot}/src/*" 34 | }, 35 | "runtimeArgs": [ 36 | "--remote-debugging-port=9222", 37 | "-incognito" 38 | ] 39 | } 40 | ] 41 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | // Configure glob patterns for excluding files and folders in the file explorer. 4 | "files.exclude": { 5 | "**/.git": true, 6 | "**/.DS_Store": true, 7 | "**/bower_components": true, 8 | "**/coverage": true, 9 | "**/lib-amd": true, 10 | "src/**/*.scss.ts": true 11 | }, 12 | "typescript.tsdk": ".\\node_modules\\typescript\\lib" 13 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/.yo-rc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@microsoft/generator-sharepoint": { 3 | "isCreatingSolution": true, 4 | "environment": "spo", 5 | "version": "1.7.0", 6 | "libraryName": "sharepointpnp-pagetransformation-client", 7 | "libraryId": "34abc8e8-c631-4815-8ea5-c3ab783d4175", 8 | "packageManager": "npm", 9 | "isDomainIsolated": false, 10 | "componentType": "webpart" 11 | } 12 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/README.md: -------------------------------------------------------------------------------- 1 | ## sharepointpnp-pagetransformation-client 2 | 3 | This is where you include your WebPart documentation. 4 | 5 | ### Building the code 6 | 7 | ```bash 8 | git clone the repo 9 | npm i 10 | npm i -g gulp 11 | gulp 12 | ``` 13 | 14 | This package produces the following: 15 | 16 | * lib/* - intermediate-stage commonjs build artifacts 17 | * dist/* - the bundled script, along with other resources 18 | * deploy/* - all resources which should be uploaded to a CDN. 19 | 20 | ### Build options 21 | 22 | gulp clean - TODO 23 | gulp test - TODO 24 | gulp serve - TODO 25 | gulp bundle - TODO 26 | gulp package-solution - TODO 27 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/config/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/config.2.0.schema.json", 3 | "version": "2.0", 4 | "bundles": { 5 | "page-banner-web-part": { 6 | "components": [ 7 | { 8 | "entrypoint": "./lib/webparts/pageBanner/PageBannerWebPart.js", 9 | "manifest": "./src/webparts/pageBanner/PageBannerWebPart.manifest.json" 10 | } 11 | ] 12 | } 13 | }, 14 | "externals": {}, 15 | "localizedResources": { 16 | "PageBannerWebPartStrings": "lib/webparts/pageBanner/loc/{locale}.js" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/config/copy-assets.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/copy-assets.schema.json", 3 | "deployCdnPath": "temp/deploy" 4 | } 5 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/config/deploy-azure-storage.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/deploy-azure-storage.schema.json", 3 | "workingDir": "./temp/deploy/", 4 | "account": "", 5 | "container": "sharepointpnp-pagetransformation-client", 6 | "accessKey": "" 7 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/config/package-solution.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/package-solution.schema.json", 3 | "solution": { 4 | "name": "sharepointpnp-pagetransformation-client-solution", 5 | "id": "34abc8e8-c631-4815-8ea5-c3ab783d4175", 6 | "version": "1.0.0.2", 7 | "includeClientSideAssets": true, 8 | "skipFeatureDeployment": true, 9 | "isDomainIsolated": false 10 | }, 11 | "paths": { 12 | "zippedPackage": "solution/sharepointpnp-pagetransformation-client.sppkg" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/config/serve.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/json-schemas/core-build/serve.schema.json", 3 | "port": 4321, 4 | "https": true, 5 | "initialPage": "https://localhost:5432/workbench", 6 | "api": { 7 | "port": 5432, 8 | "entryPath": "node_modules/@microsoft/sp-webpart-workbench/lib/api/" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/config/write-manifests.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", 3 | "cdnBasePath": "" 4 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/gulpfile.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const gulp = require('gulp'); 4 | const build = require('@microsoft/sp-build-web'); 5 | build.addSuppression(`Warning - [sass] The local CSS class 'ms-Grid' is not camelCase and will not be type-safe.`); 6 | 7 | build.initialize(gulp); 8 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sharepointpnp-pagetransformation-client", 3 | "version": "0.0.1", 4 | "private": true, 5 | "engines": { 6 | "node": ">=0.10.0" 7 | }, 8 | "scripts": { 9 | "build": "gulp bundle", 10 | "clean": "gulp clean", 11 | "test": "gulp test" 12 | }, 13 | "dependencies": { 14 | "@microsoft/sp-core-library": "1.7.0", 15 | "@microsoft/sp-dialog": "^1.7.0", 16 | "@microsoft/sp-lodash-subset": "1.7.0", 17 | "@microsoft/sp-office-ui-fabric-core": "1.7.0", 18 | "@microsoft/sp-webpart-base": "1.7.0", 19 | "@pnp/common": "^1.3.1", 20 | "@pnp/logging": "^1.3.1", 21 | "@pnp/odata": "^1.3.1", 22 | "@pnp/sp": "^1.3.1", 23 | "@types/es6-promise": "0.0.33", 24 | "@types/react": "16.4.2", 25 | "@types/react-dom": "16.0.5", 26 | "@types/webpack-env": "1.13.1", 27 | "applicationinsights-js": "^1.0.20", 28 | "react": "16.3.2", 29 | "react-dom": "16.3.3" 30 | }, 31 | "devDependencies": { 32 | "@microsoft/sp-build-web": "1.7.0", 33 | "@microsoft/sp-tslint-rules": "1.7.0", 34 | "@microsoft/sp-module-interfaces": "1.7.0", 35 | "@microsoft/sp-webpart-workbench": "1.7.0", 36 | "gulp": "~3.9.1", 37 | "@types/chai": "3.4.34", 38 | "@types/mocha": "2.2.38", 39 | "ajv": "~5.2.2" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/src/index.ts: -------------------------------------------------------------------------------- 1 | // A file is required to be in the root of the /src directory by the TypeScript compiler 2 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/src/webparts/pageBanner/PageBannerWebPart.manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/json-schemas/spfx/client-side-web-part-manifest.schema.json", 3 | "id": "d462a7c4-b2e1-4e80-867a-7b46d279c161", 4 | "alias": "PageBannerWebPart", 5 | "componentType": "WebPart", 6 | 7 | // The "*" signifies that the version should be taken from the package.json 8 | "version": "*", 9 | "manifestVersion": 2, 10 | 11 | // If true, the component can only be installed on sites where Custom Script is allowed. 12 | // Components that allow authors to embed arbitrary script code should set this to true. 13 | // https://support.office.com/en-us/article/Turn-scripting-capabilities-on-or-off-1f2c515f-5d7e-448a-9fd7-835da935584f 14 | "requiresCustomScript": false, 15 | "hiddenFromToolbox": true, 16 | 17 | "preconfiguredEntries": [{ 18 | "groupId": "5c03119e-3074-46fd-976b-c60198311f70", // Other 19 | "group": { "default": "Other" }, 20 | "title": { "default": "pageBanner" }, 21 | "description": { "default": "This web part allows a user to accept/discard the created modern client side page" }, 22 | "officeFabricIconFontName": "Lightbulb", 23 | "properties": { 24 | "sourcePage": "", 25 | "targetPage": "" 26 | } 27 | }] 28 | } 29 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/src/webparts/pageBanner/components/IPageBannerProps.ts: -------------------------------------------------------------------------------- 1 | import { PageContext } from "@microsoft/sp-page-context"; 2 | 3 | export interface IPageBannerProps { 4 | pageContext: PageContext; 5 | sourcePage: string; 6 | targetPage: string; 7 | modernizationCenterUrl: string; 8 | feedbackList: string; 9 | learnMoreUrl: string; 10 | } 11 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/src/webparts/pageBanner/components/IPageBannerState.ts: -------------------------------------------------------------------------------- 1 | export interface IPageBannerState { 2 | progressMessage: string; 3 | errorString: string; 4 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/src/webparts/pageBanner/components/IStorageEntities.ts: -------------------------------------------------------------------------------- 1 | import { StorageEntity } from "@pnp/sp"; 2 | 3 | export interface IStorageEntities { 4 | modernizationCenterUrl: StorageEntity; 5 | feedbackList: StorageEntity; 6 | learnMoreUrl: StorageEntity; 7 | } -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/src/webparts/pageBanner/loc/en-us.js: -------------------------------------------------------------------------------- 1 | define([], function() { 2 | return { 3 | "PropertyPaneDescription": "Holds the information needed for page transformation", 4 | "BasicGroupName": "Page modernization", 5 | "SourcePageFieldLabel" : "Source Page", 6 | "TargetPageFieldLabel" : "Target Page" 7 | } 8 | }); -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/src/webparts/pageBanner/loc/mystrings.d.ts: -------------------------------------------------------------------------------- 1 | declare interface IPageBannerWebPartStrings { 2 | PropertyPaneDescription: string; 3 | BasicGroupName: string; 4 | SourcePageFieldLabel: string; 5 | TargetPageFieldLabel: string; 6 | } 7 | 8 | declare module 'PageBannerWebPartStrings' { 9 | const strings: IPageBannerWebPartStrings; 10 | export = strings; 11 | } 12 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/teams/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.2/MicrosoftTeams.schema.json", 3 | "manifestVersion": "1.2", 4 | "packageName": "PageBanner", 5 | "id": "d462a7c4-b2e1-4e80-867a-7b46d279c161", 6 | "version": "0.1", 7 | "developer": { 8 | "name": "SPFx + Teams Dev", 9 | "websiteUrl": "https://products.office.com/en-us/sharepoint/collaboration", 10 | "privacyUrl": "https://privacy.microsoft.com/en-us/privacystatement", 11 | "termsOfUseUrl": "https://www.microsoft.com/en-us/servicesagreement" 12 | }, 13 | "name": { 14 | "short": "PageBanner" 15 | }, 16 | "description": { 17 | "short": "This web part allows a user to accept/discard the created modern client side page", 18 | "full": "This web part allows a user to accept/discard the created modern client side page" 19 | }, 20 | "icons": { 21 | "outline": "tab20x20.png", 22 | "color": "tab96x96.png" 23 | }, 24 | "accentColor": "#004578", 25 | "configurableTabs": [ 26 | { 27 | "configurationUrl": "https://{teamSiteDomain}{teamSitePath}/_layouts/15/TeamsLogon.aspx?SPFX=true&dest={teamSitePath}/_layouts/15/teamshostedapp.aspx%3FopenPropertyPane=true%26teams%26componentId=d462a7c4-b2e1-4e80-867a-7b46d279c161", 28 | "canUpdateConfiguration": false, 29 | "scopes": [ 30 | "team" 31 | ] 32 | } 33 | ], 34 | "validDomains": [ 35 | "*.login.microsoftonline.com", 36 | "*.sharepoint.com", 37 | "*.sharepoint-df.com", 38 | "spoppe-a.akamaihd.net", 39 | "spoprod-a.akamaihd.net", 40 | "resourceseng.blob.core.windows.net", 41 | "msft.spoppe.com" 42 | ], 43 | "webApplicationInfo": { 44 | "resource": "https://{teamSiteDomain}", 45 | "id": "00000003-0000-0ff1-ce00-000000000000" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/teams/tab20x20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/spfx/user/teams/tab20x20.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/teams/tab96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Solutions/PageTransformationUI/spfx/user/teams/tab96x96.png -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "forceConsistentCasingInFileNames": true, 5 | "module": "esnext", 6 | "moduleResolution": "node", 7 | "jsx": "react", 8 | "declaration": true, 9 | "sourceMap": true, 10 | "experimentalDecorators": true, 11 | "skipLibCheck": true, 12 | "outDir": "lib", 13 | "typeRoots": [ 14 | "./node_modules/@types", 15 | "./node_modules/@microsoft" 16 | ], 17 | "types": [ 18 | "es6-promise", 19 | "webpack-env" 20 | ], 21 | "lib": [ 22 | "es5", 23 | "dom", 24 | "es2015.collection" 25 | ] 26 | }, 27 | "include": [ 28 | "src/**/*.ts" 29 | ], 30 | "exclude": [ 31 | "node_modules", 32 | "lib" 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /Solutions/PageTransformationUI/spfx/user/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@microsoft/sp-tslint-rules/base-tslint.json", 3 | "rules": { 4 | "class-name": false, 5 | "export-name": false, 6 | "forin": false, 7 | "label-position": false, 8 | "member-access": true, 9 | "no-arg": false, 10 | "no-console": false, 11 | "no-construct": false, 12 | "no-duplicate-variable": true, 13 | "no-eval": false, 14 | "no-function-expression": true, 15 | "no-internal-module": true, 16 | "no-shadowed-variable": true, 17 | "no-switch-case-fall-through": true, 18 | "no-unnecessary-semicolons": true, 19 | "no-unused-expression": true, 20 | "no-use-before-declare": true, 21 | "no-with-statement": true, 22 | "semicolon": true, 23 | "trailing-comma": false, 24 | "typedef": false, 25 | "typedef-whitespace": false, 26 | "use-named-parameter": true, 27 | "variable-name": false, 28 | "whitespace": false 29 | } 30 | } -------------------------------------------------------------------------------- /Solutions/README.md: -------------------------------------------------------------------------------- 1 | 2 | # Modernization solutions 3 | 4 | Contains end-to-end solutions that you can use to perform modernization tasks. 5 | 6 | Folder | Description 7 | -------|------------ 8 | **PageTransformationUI** | This solution provides self-service page transformation (modernizing classic wiki and web part pages) for your end users. ![page transformation setup](PageTransformationUI/docs/images/PageTransformationUIarchitecture.png) 9 | -------------------------------------------------------------------------------- /Tools/README.md: -------------------------------------------------------------------------------- 1 | 2 | # Tools 3 | 4 | This section of the modernization repository holds the tools, scripts and utilities that you use as part of your modernization efforts. To get started with modernization your classic SharePoint sites go to https://aka.ms/sppnp-modernize. 5 | 6 | Folder | Description 7 | -------|------------ 8 | SharePoint.Modernization | Holds the SharePoint Modernization framework. This framework consists out of [SharePoint Modernization Framework](https://aka.ms/sppnp-pagetransformation) and a [SharePoint Modernization scanner](https://aka.ms/sppnp-modernizationscanner). 9 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/README.md: -------------------------------------------------------------------------------- 1 | # SharePoint Modernization tools 2 | 3 | The SharePointPnP.Modernization solution contains tools to help you with modernizing your classic SharePoint sites. 4 | 5 | ## The SharePoint Modernization scanner 6 | 7 | Using the modernization scanner you can prepare your classic sites for modernization via connecting these sites to an Office 365 group, modernizing the pages and in case of a publishing portal designing a modern publishing portal. This scanner is a key tool to use if you want to prepare for modernizing your classic sites. Next to that the scanner will also provide you data about your classic workflow and InfoPath usage as these are candidates to be reworked using Microsoft Flow and PowerApps. 8 | 9 | - [Getting started with the Modernization Scanner](https://aka.ms/sppnp-modernizationscanner) 10 | - [Modernization scanner release notes](Modernization%20Scanner%20release%20notes.md) 11 | 12 | ## Page Transformation (Modernization framework) 13 | 14 | Page Transformation allows you to transform classic wiki, webpart and publishing pages into modern client side pages. When you modernize your sites, being able to also modernize your classic pages is essential and this tool enables you to do so. 15 | 16 | - [Page transformation documentation](https://aka.ms/sppnp-pagetransformation) 17 | - [Getting started with page transformation videos](https://aka.ms/sppnp-pagetransformationvideos) 18 | - [Page transformation release notes](Modernization%20Framework%20release%20notes.md) 19 | 20 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/Releases/SharePoint.Modernization.Scanner.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/Releases/SharePoint.Modernization.Scanner.exe -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/Releases/SharePoint.Modernization.Scanner.exe.SHA512: -------------------------------------------------------------------------------- 1 | 359D9772C5AB035D56732F46668727FE6AF0888CDEC82D693A8AE953BDD3F3DAA630B573373A1365FBA4DA41C83D4A13D8248DDAF162C55F00EAABE84FF959D8 2 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/Releases/readme.md: -------------------------------------------------------------------------------- 1 | # Releases 2 | 3 | This folder contains the latest release of the SharePoint Modernization Scanner. 4 | 5 | ## Verify download via hash 6 | 7 | When you download the SharePoint.Modernization.Scanner.exe you can verify the download was successful by calculating a SHA512 hash from your downloaded version and comparing it with the value stored in the SharePoint.Modernization.Scanner.exe.SHA512 file. 8 | 9 | ```PowerShell 10 | (Get-FileHash -Algorithm SHA512 -Path .\SharePoint.Modernization.Scanner.exe).Hash 11 | ``` 12 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/Releases/version.txt: -------------------------------------------------------------------------------- 1 | 2.19.0.0 2 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.DocsGenerator/Model/Function.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace SharePointPnP.Modernization.DocsGenerator.Model 8 | { 9 | public class Function 10 | { 11 | 12 | public Function() 13 | { 14 | this.Inputs = new List(); 15 | this.Outputs = new List(); 16 | } 17 | 18 | public string Name { get; set; } 19 | public string Description { get; set; } 20 | public string Example { get; set; } 21 | public List Inputs { get; set; } 22 | public List Outputs { get; set; } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.DocsGenerator/Model/FunctionParameter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace SharePointPnP.Modernization.DocsGenerator.Model 8 | { 9 | public class FunctionParameter 10 | { 11 | public string Name { get; set; } 12 | public string Description { get; set; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.DocsGenerator/Model/Selector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace SharePointPnP.Modernization.DocsGenerator.Model 8 | { 9 | public class Selector 10 | { 11 | public Selector() 12 | { 13 | this.Inputs = new List(); 14 | this.Outputs = new List(); 15 | } 16 | 17 | public string Name { get; set; } 18 | public string Description { get; set; } 19 | public string Example { get; set; } 20 | public List Inputs { get; set; } 21 | public List Outputs { get; set; } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.DocsGenerator/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("SharePointPnP.Modernization.DocsGenerator")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("SharePointPnP.Modernization.DocsGenerator")] 13 | [assembly: AssemblyCopyright("Copyright © 2018")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("92b96a1a-f2a3-45f6-b77c-36e4df823bf4")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.DocsGenerator/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Profiler/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("SharePointPnP.Modernization.Framework.Profiler")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("SharePointPnP.Modernization.Framework.Profiler")] 13 | [assembly: AssemblyCopyright("Copyright © 2018")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("184b8275-f8ea-4011-bce6-e44e03ecff01")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.SampleAddOn/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("SharePoint.Modernization.Framework.SampleAddOn")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("SharePoint.Modernization.Framework.SampleAddOn")] 13 | [assembly: AssemblyCopyright("Copyright © 2018")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("7a31933f-bdad-4b95-a774-edd4b0f47908")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | [assembly: AssemblyTitle("SharePoint.Modernization.Framework.Tests")] 6 | [assembly: AssemblyDescription("")] 7 | [assembly: AssemblyConfiguration("")] 8 | [assembly: AssemblyCompany("")] 9 | [assembly: AssemblyProduct("SharePoint.Modernization.Framework.Tests")] 10 | [assembly: AssemblyCopyright("Copyright © 2018")] 11 | [assembly: AssemblyTrademark("")] 12 | [assembly: AssemblyCulture("")] 13 | 14 | [assembly: ComVisible(false)] 15 | 16 | [assembly: Guid("07492d38-21de-4d09-a07d-aa1369819464")] 17 | 18 | // [assembly: AssemblyVersion("1.0.*")] 19 | [assembly: AssemblyVersion("1.0.0.0")] 20 | [assembly: AssemblyFileVersion("1.0.0.0")] 21 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Common/Assets/tonys-chocolate-1-1024x664.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Common/Assets/tonys-chocolate-1-1024x664.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Common/Readme.md: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Documents/Contoso_Report.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Documents/Contoso_Report.pptx -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/contoso-electronics-transp-1200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/contoso-electronics-transp-1200.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/contoso-electronics-transp-300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/contoso-electronics-transp-300.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/contoso-electronics-transp-600.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/contoso-electronics-transp-600.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/contoso-sale-site.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/contoso-sale-site.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/contoso_logo_twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/contoso_logo_twitter.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo-files.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo-files.xml -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_IT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_IT.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_benefits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_benefits.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_data_center_technologies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_data_center_technologies.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_design_tools_software.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_design_tools_software.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_finance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_finance.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_graphics_visual_technologies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_graphics_visual_technologies.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_hr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_hr.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_legal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_legal.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_memory_networking_technologies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_memory_networking_technologies.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_sales_web_site.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_sales_web_site.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_technologies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_technologies.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_v_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_v_01.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_v_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_v_03.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_v_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_v_08.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_v_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_v_11.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_v_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_v_14.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_v_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_v_15.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_v_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_v_16.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_v_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Logos/logo_v_19.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/Allison-Linn_Head-Shot-215x215.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/Allison-Linn_Head-Shot-215x215.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/Commercial16_smallmeeting_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/Commercial16_smallmeeting_02.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/Craig-Mundie-_20-Ann.-768x983.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/Craig-Mundie-_20-Ann.-768x983.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/EDU18_Teachers_013-960x640.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/EDU18_Teachers_013-960x640.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/FN5A5682-683x1024.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/FN5A5682-683x1024.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/KLAPSTUK-TU-Delft-Qutech-5-of-113-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/KLAPSTUK-TU-Delft-Qutech-5-of-113-3.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/MS-Stories-Station-Q-Freedman-Michael-12-1024x683.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/MS-Stories-Station-Q-Freedman-Michael-12-1024x683.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/MSSurface_Pro4_SMB_Seattle_0578.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/MSSurface_Pro4_SMB_Seattle_0578.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/Security-Feature-Header-rs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/Security-Feature-Header-rs.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/Suz-spring-2016_3674-215x215.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/Suz-spring-2016_3674-215x215.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/WCO18_ITHelp_004.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/WCO18_ITHelp_004.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/WCO18_whiteboard_002.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/WCO18_whiteboard_002.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/Win17_15021_00_N9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/Win17_15021_00_N9.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/extra.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/extra.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/extra2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/extra2.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/extra3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/extra3.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/extra4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/extra4.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/extra5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/extra5.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/extra6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/extra6.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/extra7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/extra7.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/extra8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/extra8.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/extra8_500x500.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/extra8_500x500.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/extra9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/extra9.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/hero.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/hero.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/meeting-rooms.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/meeting-rooms.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/modernOffice_002.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/modernOffice_002.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/modernOffice_007.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/modernOffice_007.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/modernOffice_011.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/modernOffice_011.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/news.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/news.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/news2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/news2.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/news3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/news3.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/news4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/news4.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/page-faq.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/page-faq.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/page-feedback.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/page-feedback.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/page-financial-results.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/page-financial-results.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/page-hr.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/page-hr.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/page-my-profile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/page-my-profile.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/page-people-directory.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/page-people-directory.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/page-support.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/page-support.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/page-training.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/page-training.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/page-travel-instructions.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/page-travel-instructions.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/pexels-photo-335907.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/pexels-photo-335907.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/photo-files.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/photo-files.xml -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/wirebonding_qubit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/wirebonding_qubit.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/work-life-balance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/work-life-balance.png -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/working-methods.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Images/Photos/working-methods.jpg -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Provision/Readme.md: -------------------------------------------------------------------------------- 1 | # Unit Testing Provisioning 2 | 3 | This area of unit testing is to provision a lightweight source site in SharePoint in which to transform from. 4 | 5 | ### Applies to ### 6 | 7 | - SharePoint Online 8 | 9 | ## Provision Publishing Site 10 | 11 | The publishing site uses an existing sample from PnP > Business Starter Kit from Franck Cornu @aequos 12 | This serves as a strong base to get started with a publishing portal, additonal page layouts can then be added to serve as scenarios in which to test out the transformation tool. 13 | 14 | For installation please follow these instructions: [https://github.com/SharePoint/PnP/tree/master/Solutions/Business.StarterIntranet#set-up-your-environment](https://github.com/SharePoint/PnP/tree/master/Solutions/Business.StarterIntranet#set-up-your-environment) 15 | 16 | 17 | 18 | ## Provison Team Site 19 | 20 | To provision a team site, we have prepared a sample set of pages using the PnP Provisioning engine. 21 | Please create a new team site and then run the PnP PowerShell command: 22 | 23 | ```powershell 24 | 25 | Connect-PnPOnline https://.sharepoint.com/sites/ 26 | Apply-PnProvisioningTemplate -Path "ClassicTeamSite-SampleData.xml" 27 | 28 | ``` 29 | 30 | ## Assets 31 | 32 | Logos and sample files are used from the PnP-Starter-Kit project, if you need more assets then, these projects can help: 33 | 34 | -[https://github.com/SharePoint/sp-dev-provisioning-templates](https://github.com/SharePoint/sp-dev-provisioning-templates) 35 | -[https://github.com/SharePoint/sp-starter-kit](https://github.com/SharePoint/sp-starter-kit) 36 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/TestCategories.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace SharePointPnP.Modernization.Framework.Tests 8 | { 9 | public class TestCategories 10 | { 11 | public const string SP2010 = "SharePoint 2010"; 12 | public const string SP2013 = "SharePoint 2013"; 13 | public const string SP2016 = "SharePoint 2016"; 14 | public const string SP2019 = "SharePoint 2019"; 15 | public const string SPO = "SharePoint Online"; 16 | 17 | public const string PublishingPage = "Publishing Page"; 18 | public const string WebPartPage = "Web Part Page"; 19 | public const string WikiPage = "Wiki Page"; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/TestExtensions.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.SharePoint.Client; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using Microsoft.VisualStudio.TestTools.UnitTesting; 8 | 9 | namespace SharePointPnP.Modernization.Framework 10 | { 11 | public static class TestExtensions 12 | { 13 | /// 14 | /// Fail test if collection has no items 15 | /// 16 | /// 17 | public static void FailTestIfZero(this ListItemCollection collection) 18 | { 19 | if (collection == null || collection.Count == 0) 20 | { 21 | Assert.Fail("No pages found"); 22 | } 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Transform/CommonTests/Readme.md: -------------------------------------------------------------------------------- 1 | # Common Platform Tests 2 | 3 | These set of unit tests are designed to run on any source version of SharePoint. 4 | This requires an element of consistance with the source content with the following rules: 5 | 6 | * Page File Names MUST be the same in the source system but can be different in target system 7 | * A method is provided that will rename the target to enable easy cross examination e.g. WelcomePage-1.aspx in the source is suffixed with version to become WelcomePage-1-SP2013.aspx 8 | * Content on each source platform must be identically configured see provision folder for assets and content -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Transform/ContextTests.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Microsoft.SharePoint.Client; 3 | using Microsoft.VisualStudio.TestTools.UnitTesting; 4 | 5 | namespace SharePointPnP.Modernization.Framework.Tests.Transform 6 | { 7 | [TestClass] 8 | public class ContextTests 9 | { 10 | [TestMethod] 11 | public void ContextSPO_BasicTest() 12 | { 13 | using (var clientContext = TestCommon.CreateClientContext()) 14 | { 15 | var web = clientContext.Web; 16 | var title = web.EnsureProperty(o => o.Title); 17 | Console.WriteLine(title); 18 | Assert.IsTrue(!string.IsNullOrEmpty(title)); 19 | } 20 | } 21 | 22 | [TestMethod] 23 | public void ContextSPOnPremises_BasicTest() 24 | { 25 | using (var clientContext = TestCommon.CreateOnPremisesClientContext()) 26 | { 27 | var web = clientContext.Web; 28 | var title = web.EnsureProperty(o => o.Title); 29 | Console.WriteLine(title); 30 | Assert.IsTrue(!string.IsNullOrEmpty(title)); 31 | } 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Transform/Mapping/term_mapping_paths_sample.csv: -------------------------------------------------------------------------------- 1 | PnP|Sauce|PnPTransform|On-Premises|Classic Page,PnP|Katchup|PnPTransform|Online|Modern Page 2 | PnP|Sauce|PnPTransform|On-Premises|Publishing Page,PnP|Katchup|PnPTransform|Online|Modern Page 3 | PnP|Sauce|PnPTransform|On-Premises|Site Page,PnP|Katchup|PnPTransform|Online|Modern Page 4 | PnP|Sauce|PnPTransform|On-Premises|Site Page,PnP|Katchup|PnPTransform|From|SharePoint 2013 5 | 6 | PnP|Sauce|PnPTransform|On-Premises|SitePages,PnP|Katchup|PnPTransform|From|NodeDoesNotExist 7 | PnP|Sauce|PnPTransform|On-Premises|NodeDoesNotExist,PnP|Katchup|PnPTransform|From|SharePoint 2013 8 | 9 | DEFAULT|Sauce|Team Site|Wiki Page,PnP|Katchup|PnPTransform|From|SharePoint 2010 10 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Transform/Mapping/term_mapping_sample.csv: -------------------------------------------------------------------------------- 1 | PnP|Sauce|PnPTransform|On-Premises|Classic Page,PnP|Katchup|PnPTransform|Online|Modern Page 2 | PnP|Sauce|PnPTransform|On-Premises|Publishing Page,PnP|Katchup|PnPTransform|Online|Modern Page 3 | PnP|Sauce|PnPTransform|On-Premises|Site Page,PnP|Katchup|PnPTransform|Online|Modern Page 4 | PnP|Sauce|PnPTransform|On-Premises|Site Page,PnP|Katchup|PnPTransform|From|SharePoint 2013 5 | 6 | PnP|Sauce|PnPTransform|On-Premises|SitePages,PnP|Katchup|PnPTransform|From|NodeDoesNotExist 7 | PnP|Sauce|PnPTransform|On-Premises|NodeDoesNotExist,PnP|Katchup|PnPTransform|From|SharePoint 2013 8 | 9 | f0b1b6aa-b00b-4198-b8dd-ef4393e3ad05,fec05391-6a39-4ad5-a2a1-a01020d94efd 10 | 469bf4e8-3f92-4d94-9ebb-034da8917b18,fec05391-6a39-4ad5-a2a1-a01020d94efd 11 | c578cdb1-910d-4809-88a5-c7e3836eeaa7,fec05391-6a39-4ad5-a2a1-a01020d94efd 12 | 13 | 2d42d4fa-1dde-45a0-81cc-0bc19acae8db,6558ed84-4a37-46e8-99df-5de2be42f06c 14 | 69475f27-e66a-49d7-8935-f955a187dae5,9be9c990-2a3e-4f68-8ec0-c1e3326586cc 15 | f6020784-3191-4ae9-993c-e5fd4e2de499,335b95c3-52db-4bda-89be-55e7555fe97b 16 | 17 | ffab27a8-8648-4d28-b140-14834e07f0f6,335b95c3-52db-4bda-89be-55e7555fe97b 18 | f68f4f52-db5c-4a73-a28f-bf129f5931cc,9be9c990-2a3e-4f68-8ec0-c1e3326586cc 19 | 6558ed84-4a37-46e8-99df-5de2be42f06c,6558ed84-4a37-46e8-99df-5de2be42f06c 20 | 21 | 309e0928-7212-48db-9802-d05016971716,6558ed84-4a37-46e8-99df-5de2be42f06c 22 | ac625b0a-0459-4d23-bc96-0970abd1029d,6558ed84-4a37-46e8-99df-5de2be42f06c 23 | 24 | 239d84a1-b03a-4300-9a1b-82f95f560f53,6558ed84-4a37-46e8-99df-5de2be42f06c 25 | abeeb936-3ab9-40ce-aba1-a2e236c915d3,335b95c3-52db-4bda-89be-55e7555fe97b 26 | 04a0448a-e5ed-4476-af89-5e73f25536b1,9be9c990-2a3e-4f68-8ec0-c1e3326586cc 27 | 28 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Transform/Mapping/termmapping_sample2.csv: -------------------------------------------------------------------------------- 1 | Enterprise|Classification|HBI,Enterprise|Classification|LBI 2 | Enterprise|Classification|MBI,Enterprise|Classification|LBI -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Transform/Mapping/urlmapping_sample.csv: -------------------------------------------------------------------------------- 1 | https://aka.ms/sppnp-modernize,https://aka.ms/sppnp-pagetransformation 2 | /sites/modernizationtestportal,/sites/blabla -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Transform/Mapping/usermapping_sample.csv: -------------------------------------------------------------------------------- 1 | ALPHADELTA\SPInstall,AdeleV@capadevtest.onmicrosoft.com 2 | S-1-5-21-2364077317-3999105188-691961326-1103,AdeleV@capadevtest.onmicrosoft.com 3 | c:0+.w|s-1-5-21-2364077317-3999105188-691961326-1129,c:0t.c|tenant|c293ebb4-5999-414f-b0c5-16e7a618db21 4 | s-1-5-21-2364077317-3999105188-691961326-1128,Transform-Group -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Transform/Mapping/usermapping_sample2.csv: -------------------------------------------------------------------------------- 1 | sharepoint\system,bert.jansen@bertonline.onmicrosoft.com 2 | pnp\pnpadmin,kevinc@bertonline.onmicrosoft.com 3 | sp2013\pnpadmin,kevinc@bertonline.onmicrosoft.com 4 | pnp\vesaj,annal@bertonline.onmicrosoft.com 5 | s-1-5-21-3138640143-967965215-2549001177-3604,TestPermissions -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Transform/OnPremises/OnPremisesUtilityTests.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Microsoft.SharePoint.Client; 3 | using Microsoft.VisualStudio.TestTools.UnitTesting; 4 | 5 | namespace SharePointPnP.Modernization.Framework.Tests.Transform.OnPremises 6 | { 7 | [TestClass] 8 | public class OnPremisesUtilityTests 9 | { 10 | [TestMethod] 11 | public void Basic_GetListByNameTest() 12 | { 13 | TestGetListByName("Pages"); 14 | } 15 | 16 | [TestMethod] 17 | public void Basic_GetListByName_UpperCaseTest() 18 | { 19 | TestGetListByName("PAGES"); 20 | } 21 | 22 | [TestMethod] 23 | public void Basic_GetListByName_LowerCaseTest() 24 | { 25 | TestGetListByName("pages"); 26 | } 27 | 28 | private void TestGetListByName(string listName) 29 | { 30 | using (var context = TestCommon.CreateOnPremisesClientContext(TestCommon.AppSetting("SPOnPremDevSiteUrl"))) 31 | { 32 | var list = context.Web.GetListByName(listName); 33 | Assert.IsNotNull(list); 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Transform/Publishing/AdHocTests.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.SharePoint.Client; 2 | using Microsoft.VisualStudio.TestTools.UnitTesting; 3 | using SharePointPnP.Modernization.Framework.Publishing; 4 | 5 | namespace SharePointPnP.Modernization.Framework.Tests.Transform.Publishing 6 | { 7 | [TestClass] 8 | public class AdHocTests 9 | { 10 | 11 | [TestMethod] 12 | public void TestMethod1() 13 | { 14 | using (ClientContext cc = TestCommon.CreateClientContext()) 15 | { 16 | PageLayoutManager m = new PageLayoutManager(null); 17 | var result = m.LoadPageLayoutMappingFile(@"..\..\..\SharePointPnP.Modernization.Framework\Publishing\pagelayoutmapping_sample.xml"); 18 | } 19 | } 20 | 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework.Tests/Transform/Utility/WebExtensionsTest.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Microsoft.SharePoint.Client; 3 | using Microsoft.VisualStudio.TestTools.UnitTesting; 4 | 5 | namespace SharePointPnP.Modernization.Framework.Tests.Transform.Utility 6 | { 7 | [TestClass] 8 | public class WebExtensionsTest 9 | { 10 | [TestMethod] 11 | public void WebExtensions_GetUrl() 12 | { 13 | using (var ctx = TestCommon.CreateClientContext(TestCommon.AppSetting("SPOTargetSiteUrl"))) 14 | { 15 | var expectedUrl = TestCommon.AppSetting("SPOTargetSiteUrl"); 16 | var result = ctx.Web.GetUrl(); 17 | 18 | Assert.AreEqual(expectedUrl, result); 19 | 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Cache/CacheOptions.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.Caching.Distributed; 2 | using Microsoft.Extensions.Caching.Memory; 3 | using Microsoft.Extensions.Options; 4 | 5 | namespace SharePointPnP.Modernization.Framework.Cache 6 | { 7 | /// 8 | /// MemoryDistributedCache options class 9 | /// 10 | /// 11 | /// MemoryDistributedCache options class 12 | /// 13 | public class CacheOptions : MemoryDistributedCacheOptions, IOptions, ICacheOptions 14 | { 15 | public CacheOptions() 16 | { 17 | this.EntryOptions = new DistributedCacheEntryOptions() { }; 18 | } 19 | 20 | MemoryDistributedCacheOptions IOptions.Value => this; 21 | 22 | /// 23 | /// Prefix value that will be prepended to the provided key value 24 | /// 25 | public string KeyPrefix { get; set; } 26 | 27 | /// 28 | /// Default cache entry configuration, will be used to save items to the cache 29 | /// 30 | public DistributedCacheEntryOptions EntryOptions { get; set; } 31 | 32 | /// 33 | /// Returns the key value to use by the caching system, in this case this will mean prepending the KeyPrefix 34 | /// 35 | /// Provided key 36 | /// Key to use by the caching system 37 | public string GetKey(string key) 38 | { 39 | if (!string.IsNullOrEmpty(KeyPrefix)) 40 | { 41 | return $"{KeyPrefix}|{key}"; 42 | } 43 | else 44 | { 45 | return key; 46 | } 47 | } 48 | 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Cache/FieldData.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SharePointPnP.Modernization.Framework.Cache 4 | { 5 | /// 6 | /// Field data used to transfer information about a field 7 | /// 8 | [Serializable] 9 | public class FieldData 10 | { 11 | /// 12 | /// Internal name of the field 13 | /// 14 | public string FieldName { get; set; } 15 | 16 | /// 17 | /// Id of the field 18 | /// 19 | public Guid FieldId { get; set; } 20 | 21 | /// 22 | /// Type of the field 23 | /// 24 | public string FieldType { get; set; } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Cache/ICacheOptions.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.Caching.Distributed; 2 | 3 | namespace SharePointPnP.Modernization.Framework.Cache 4 | { 5 | /// 6 | /// Interface to be implemented by each cache options implementation 7 | /// 8 | public interface ICacheOptions 9 | { 10 | /// 11 | /// Prefix value that will be prepended to the provided key value 12 | /// 13 | string KeyPrefix { get; set; } 14 | 15 | /// 16 | /// Returns the key value to use by the caching system, typically this will mean prepending the KeyPrefix 17 | /// 18 | /// Provided key 19 | /// Key to use by the caching system 20 | string GetKey(string key); 21 | 22 | /// 23 | /// Default cache entry configuration, will be used to save items to the cache 24 | /// 25 | DistributedCacheEntryOptions EntryOptions { get; set; } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Caml/FieldReferenceFunctionType.cs: -------------------------------------------------------------------------------- 1 | namespace CamlBuilder 2 | { 3 | /// 4 | /// Specifies the function that is applied to a totals column or a calculated column. 5 | /// 6 | public enum FieldReferenceFunctionType 7 | { 8 | Average, 9 | Count, 10 | Maximum, 11 | Minimum, 12 | Sum, 13 | StandardDeviation, 14 | Variance 15 | } 16 | } -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Caml/Internal/Operators/ComplexOperator.cs: -------------------------------------------------------------------------------- 1 | namespace CamlBuilder.Internal.Operators 2 | { 3 | internal class ComplexOperator : Operator 4 | { 5 | public Value Value { get; } 6 | 7 | internal ComplexOperator( 8 | OperatorType operatorType, 9 | FieldReference fieldRef, 10 | Value value) 11 | : base(operatorType, fieldRef) 12 | { 13 | Value = value; 14 | } 15 | 16 | public override string GetCaml() 17 | { 18 | return $@"<{OperatorTypeString}>{FieldReference.GetCaml()}{Value.GetCaml()}"; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Caml/Internal/Operators/InOperator.cs: -------------------------------------------------------------------------------- 1 | namespace CamlBuilder.Internal.Operators 2 | { 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | 6 | internal class InOperator : Operator 7 | { 8 | public Value[] Values { get; } 9 | 10 | internal InOperator( 11 | FieldReference fieldRef, 12 | IEnumerable values) 13 | : base(OperatorType.In, fieldRef) 14 | { 15 | Values = values.ToArray(); 16 | } 17 | 18 | public override string GetCaml() 19 | { 20 | return $@"<{OperatorTypeString}>{FieldReference.GetCaml()}{string.Join("\n", Values.Select(v => v.GetCaml()))}"; 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Caml/Internal/Operators/MembershipOperator.cs: -------------------------------------------------------------------------------- 1 | namespace CamlBuilder.Internal.Operators 2 | { 3 | using System; 4 | 5 | internal class MembershipOperator : Operator 6 | { 7 | private readonly MembershipType membershipType; 8 | 9 | public MembershipOperator(FieldReference fieldRef, MembershipType membershipType) 10 | : base(OperatorType.Membership, fieldRef) 11 | { 12 | this.membershipType = membershipType; 13 | } 14 | 15 | private string GetMembershipTypeString() 16 | { 17 | switch (membershipType) 18 | { 19 | case MembershipType.SpWebAllUsers: 20 | return "SPWeb.AllUsers"; 21 | case MembershipType.SpGroup: 22 | return "SPGroup"; 23 | case MembershipType.SpWebGroups: 24 | return "SPWeb.Groups"; 25 | case MembershipType.CurrentUserGroups: 26 | return "CurrentUserGroups"; 27 | case MembershipType.SpWebUsers: 28 | return "SPWeb.Users"; 29 | default: 30 | throw new ArgumentOutOfRangeException(); 31 | } 32 | } 33 | 34 | public override string GetCaml() 35 | { 36 | return $@"<{OperatorTypeString} Type='{GetMembershipTypeString()}'>{FieldReference.GetCaml()}"; 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Caml/Internal/Operators/SimpleOperator.cs: -------------------------------------------------------------------------------- 1 | namespace CamlBuilder.Internal.Operators 2 | { 3 | internal class SimpleOperator : Operator 4 | { 5 | internal SimpleOperator( 6 | OperatorType operatorType, 7 | FieldReference fieldRef) 8 | : base(operatorType, fieldRef) 9 | { 10 | } 11 | 12 | public override string GetCaml() => $@"<{OperatorTypeString}>{FieldReference.GetCaml()}"; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Caml/Internal/Values/AnyValue.cs: -------------------------------------------------------------------------------- 1 | namespace CamlBuilder.Internal.Values 2 | { 3 | internal class AnyValue : Value 4 | { 5 | private readonly object anyValue; 6 | 7 | public AnyValue(ValueType type, bool? includeTimeValue, object anyValue) 8 | : base(type, includeTimeValue) 9 | { 10 | this.anyValue = anyValue; 11 | } 12 | 13 | protected override string GetCamlValue() 14 | { 15 | return anyValue.ToString(); 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Caml/Internal/Values/MonthValue.cs: -------------------------------------------------------------------------------- 1 | namespace CamlBuilder.Internal.Values 2 | { 3 | internal class MonthValue : Value 4 | { 5 | public MonthValue(bool? includeTimeValue) 6 | : base(ValueType.DateTime, includeTimeValue) 7 | { 8 | } 9 | 10 | protected override string GetCamlValue() 11 | { 12 | return ""; 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Caml/Internal/Values/NowValue.cs: -------------------------------------------------------------------------------- 1 | namespace CamlBuilder.Internal.Values 2 | { 3 | internal class NowValue : Value 4 | { 5 | public NowValue(bool? includeTimeValue) 6 | : base(ValueType.DateTime, includeTimeValue) 7 | { 8 | } 9 | 10 | protected override string GetCamlValue() 11 | { 12 | return ""; 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Caml/Internal/Values/TodayValue.cs: -------------------------------------------------------------------------------- 1 | namespace CamlBuilder.Internal.Values 2 | { 3 | internal class TodayValue : Value 4 | { 5 | private readonly int? offset; 6 | 7 | public TodayValue(bool? includeTimeValue, int? offset) 8 | : base(ValueType.DateTime, includeTimeValue) 9 | { 10 | this.offset = offset; 11 | } 12 | 13 | public TodayValue(bool? includeTimeValue) 14 | : this(includeTimeValue, null) 15 | { 16 | } 17 | 18 | protected override string GetCamlValue() 19 | { 20 | return offset.HasValue 21 | ? $"" 22 | : ""; 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Caml/Internal/Values/UserIdValue.cs: -------------------------------------------------------------------------------- 1 | namespace CamlBuilder.Internal.Values 2 | { 3 | internal class UserIdValue : Value 4 | { 5 | public UserIdValue() 6 | : base(ValueType.Integer) 7 | { 8 | } 9 | 10 | protected override string GetCamlValue() 11 | { 12 | return ""; 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Caml/LogicalJoinType.cs: -------------------------------------------------------------------------------- 1 | namespace CamlBuilder 2 | { 3 | /// 4 | /// Specifies logical join types. 5 | /// 6 | public enum LogicalJoinType 7 | { 8 | /// 9 | /// Indicates an Or logical join. 10 | /// 11 | Or, 12 | 13 | /// 14 | /// Indicates an And logical join. 15 | /// 16 | And 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Caml/MembershipType.cs: -------------------------------------------------------------------------------- 1 | namespace CamlBuilder 2 | { 3 | /// 4 | /// Defines membership types used by Membership operator. 5 | /// 6 | /// 7 | public enum MembershipType 8 | { 9 | /// 10 | /// Indicates SPWeb.AllUsers membership. 11 | /// 12 | SpWebAllUsers, 13 | 14 | /// 15 | /// Indicates SPGroup membership. 16 | /// 17 | SpGroup, 18 | 19 | /// 20 | /// Indicates SPWebGroups membership. 21 | /// 22 | SpWebGroups, 23 | 24 | /// 25 | /// Indicates CurrentUserGroups membership. 26 | /// 27 | CurrentUserGroups, 28 | 29 | /// 30 | /// Indicates SPWebUsers membership. 31 | /// 32 | SpWebUsers 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Caml/OrderByFieldOrder.cs: -------------------------------------------------------------------------------- 1 | namespace CamlBuilder 2 | { 3 | /// 4 | /// Specifies the order of query result. 5 | /// 6 | public enum OrderByFieldOrder 7 | { 8 | /// 9 | /// Defines ascending order. 10 | /// 11 | Ascending, 12 | /// 13 | /// Specifies descending order. 14 | /// 15 | Descending 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Caml/Statement.cs: -------------------------------------------------------------------------------- 1 | namespace CamlBuilder 2 | { 3 | /// 4 | /// Defines a CAML statement. It can be a or a . 5 | /// 6 | public abstract class Statement 7 | { 8 | public abstract string GetCaml(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Caml/credits.txt: -------------------------------------------------------------------------------- 1 | Code in this folder is a modified version from https://github.com/joaope/camlbuilder. -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Entities/AssetTransferredEntity.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SharePointPnP.Modernization.Framework.Entities 4 | { 5 | /// 6 | /// Model for asset transfer status for references 7 | /// 8 | [Serializable] 9 | public class AssetTransferredEntity 10 | { 11 | /// 12 | /// Source web part URL reference - for checking if transfer occurred before 13 | /// 14 | public string SourceAssetUrl { get; set; } 15 | 16 | /// 17 | /// Target web part URL reference - for checking if transfer occurred before 18 | /// 19 | public string TargetAssetFolderUrl { get; set; } 20 | 21 | /// 22 | /// Store the final URL for the asset that has been transferred 23 | /// 24 | public string TargetAssetTransferredUrl { get; set; } 25 | 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Entities/AudienceEntity.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace SharePointPnP.Modernization.Framework.Entities 4 | { 5 | /// 6 | /// Holds information about the defined audiences (used by modernization scanner) 7 | /// 8 | public class AudienceEntity 9 | { 10 | /// 11 | /// Default constructor 12 | /// 13 | public AudienceEntity() 14 | { 15 | this.GlobalAudiences = new List(); 16 | this.SecurityGroups = new List(); 17 | this.SharePointGroups = new List(); 18 | } 19 | 20 | /// 21 | /// List of defined global audiences 22 | /// 23 | public List GlobalAudiences { get; set; } 24 | /// 25 | /// List of security group based audiences 26 | /// 27 | public List SecurityGroups { get; set; } 28 | /// 29 | /// List of SharePoint group based audiences 30 | /// 31 | public List SharePointGroups { get; set; } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Entities/ListItemPermission.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.SharePoint.Client; 2 | using System.Collections.Generic; 3 | 4 | namespace SharePointPnP.Modernization.Framework.Entities 5 | { 6 | /// 7 | /// Class used to temporarily hold list item level permissions that need to be re-applied 8 | /// 9 | public class ListItemPermission 10 | { 11 | /// 12 | /// Roles assigned to the list item 13 | /// 14 | public RoleAssignmentCollection RoleAssignments { get; set; } 15 | 16 | /// 17 | /// Resolved principals used in those roles, kept for performance reasons 18 | /// 19 | public Dictionary Principals { get; set; } 20 | 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Entities/ResolvedUser.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SharePointPnP.Modernization.Framework.Entities 4 | { 5 | /// 6 | /// Class used to cache a user that was resolved via EnsureUser 7 | /// 8 | [Serializable] 9 | public class ResolvedUser 10 | { 11 | /// 12 | /// Loginname of the user 13 | /// 14 | public string LoginName { get; set; } 15 | /// 16 | /// Id of the user 17 | /// 18 | public int Id { get; set; } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Entities/TermData.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SharePointPnP.Modernization.Framework.Entities 4 | { 5 | [Serializable] 6 | public class TermData 7 | { 8 | /// 9 | /// Term Guid 10 | /// 11 | public Guid TermGuid { get; set; } 12 | 13 | /// 14 | /// Term Label 15 | /// 16 | public string TermLabel { get; set; } 17 | 18 | /// 19 | /// Term Path 20 | /// 21 | public string TermPath { get; set; } 22 | 23 | /// 24 | /// Term Set ID 25 | /// 26 | public Guid TermSetId { get; set; } 27 | 28 | /// 29 | /// Marks the term data validation against the term store 30 | /// 31 | public bool IsTermResolved { get; set; } 32 | 33 | /// 34 | /// Is the term a source term 35 | /// 36 | public bool IsSourceTerm { get; set; } 37 | 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Entities/TermMapping.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SharePointPnP.Modernization.Framework.Entities 4 | { 5 | [Serializable] 6 | public class TermMapping 7 | { 8 | public string SourceTerm { get; set; } 9 | public string TargetTerm { get; set; } 10 | 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Entities/UrlMapping.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SharePointPnP.Modernization.Framework.Entities 4 | { 5 | /// 6 | /// Url map entry 7 | /// 8 | [Serializable] 9 | public class UrlMapping 10 | { 11 | /// 12 | /// Url to be replaced 13 | /// 14 | public string SourceUrl { get; set; } 15 | 16 | /// 17 | /// Url replacement value 18 | /// 19 | public string TargetUrl { get; set; } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Entities/UserEntity.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json; 2 | using System; 3 | 4 | namespace SharePointPnP.Modernization.Framework.Entities 5 | { 6 | /// 7 | /// Class to hold information about a given user 8 | /// 9 | [Serializable] 10 | public class UserEntity 11 | { 12 | /// 13 | /// Id of the user 14 | /// 15 | [JsonProperty(PropertyName = "id")] 16 | public string Id { get; set; } 17 | 18 | /// 19 | /// Upn of the user 20 | /// 21 | [JsonProperty(PropertyName = "upn")] 22 | public string Upn { get; set; } 23 | 24 | /// 25 | /// Name of the user 26 | /// 27 | [JsonProperty(PropertyName = "name")] 28 | public string Name { get; set; } 29 | 30 | /// 31 | /// Role of the user 32 | /// 33 | [JsonProperty(PropertyName = "role")] 34 | public string Role { get; set; } 35 | 36 | /// 37 | /// Loginname of the user 38 | /// 39 | [JsonIgnore] 40 | public string LoginName { get; set; } 41 | 42 | /// 43 | /// Is this a group? 44 | /// 45 | [JsonIgnore] 46 | public bool IsGroup { get; set; } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Entities/UserMappingEntity.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SharePointPnP.Modernization.Framework.Entities 4 | { 5 | /// 6 | /// Class to hold a mapping between a user in the source site and a user in the target site 7 | /// 8 | [Serializable] 9 | public class UserMappingEntity 10 | { 11 | /// 12 | /// Source user reference 13 | /// 14 | public string SourceUser { get; set; } 15 | 16 | /// 17 | /// Target user reference 18 | /// 19 | public string TargetUser { get; set; } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Extensions/AngleSharpExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace AngleSharp.Dom 4 | { 5 | 6 | /// 7 | /// Extension methods for AngleSharp 8 | /// 9 | public static partial class AngleSharpExtensions 10 | { 11 | /// 12 | /// Performs a partial match on a list of tokens (e.g. classes on an element) 13 | /// 14 | /// List of tokens to search in 15 | /// Partial token to match via an StartsWidth 16 | /// First matching token if found, null if no match 17 | public static string PartialMatch(this ITokenList tokenList, string filter) 18 | { 19 | // No tokens then bail out 20 | if (tokenList.Length == 0) 21 | { 22 | return null; 23 | } 24 | 25 | foreach(var token in tokenList) 26 | { 27 | if (token.StartsWith(filter, StringComparison.InvariantCultureIgnoreCase)) 28 | { 29 | return token; 30 | } 31 | } 32 | 33 | return null; 34 | } 35 | 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Extensions/HttpWebRequestExtensions.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.SharePoint.Client; 2 | using SharePointPnP.Modernization.Framework.Utilities; 3 | 4 | namespace System.Net 5 | { 6 | /// 7 | /// HttpWebRequest extension methods 8 | /// 9 | public static class HttpWebRequestExtensions 10 | { 11 | /// 12 | /// Grabs authenticaiton data from the passed client context and attaches that to the http request 13 | /// 14 | /// http request to update 15 | /// ClientContext object to grab authentication data from 16 | public static void AddAuthenticationData(this HttpWebRequest httpWebRequest, ClientContext cc) 17 | { 18 | if (cc.Credentials != null) 19 | { 20 | // Copy credentials if set 21 | httpWebRequest.Credentials = cc.Credentials; 22 | } 23 | else 24 | { 25 | // If authentication happened via a cookie based approach (e.g. ADFS) then get the cookies that are currently linked to the context and reuse them 26 | httpWebRequest.CookieContainer = new CookieManager().GetCookies(cc); 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Functions/FunctionsBase.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.SharePoint.Client; 2 | using SharePointPnP.Modernization.Framework.Transform; 3 | 4 | namespace SharePointPnP.Modernization.Framework.Functions 5 | { 6 | /// 7 | /// Base class for all function libraries 8 | /// 9 | public abstract class FunctionsBase: BaseTransform 10 | { 11 | protected ClientContext clientContext; 12 | 13 | #region Construction 14 | /// 15 | /// Instantiates a function library class 16 | /// 17 | /// ClientContext object for the site holding the page being transformed 18 | public FunctionsBase(ClientContext clientContext) 19 | { 20 | this.clientContext = clientContext; 21 | } 22 | #endregion 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Functions/MediaWebpartConfigurationException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SharePointPnP.Modernization.Framework.Functions 4 | { 5 | /// 6 | /// Exception class thrown when a SharePoint resource (e.g. file) is not available 7 | /// 8 | public class MediaWebpartConfigurationException: Exception 9 | { 10 | /// 11 | /// Throws a ResourceNotFoundException message 12 | /// 13 | /// Error message 14 | public MediaWebpartConfigurationException(string message) : base(message) { } 15 | 16 | /// 17 | /// Throws a ResourceNotFoundException message 18 | /// 19 | /// Error message 20 | /// Inner exception object 21 | public MediaWebpartConfigurationException(string message, Exception innerException) : base(message, innerException) { } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Functions/NotAvailableAtTargetException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SharePointPnP.Modernization.Framework.Functions 4 | { 5 | /// 6 | /// Exception class thrown when a SharePoint object (e.g. list) is not available at the target site 7 | /// 8 | public class NotAvailableAtTargetException: Exception 9 | { 10 | /// 11 | /// Throws a NotAvailableAtTargetException message 12 | /// 13 | /// Error message 14 | public NotAvailableAtTargetException(string message): base(message) { } 15 | 16 | /// 17 | /// Throws a NotAvailableAtTargetException message 18 | /// 19 | /// Error message 20 | /// Inner exception object 21 | public NotAvailableAtTargetException(string message, Exception innerException) : base(message, innerException) { } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Functions/XmlEqualityResult.cs: -------------------------------------------------------------------------------- 1 | // Eli Algranti Copyright © 2013 2 | // Code taken from http://xmlspecificationcompare.codeplex.com/ 3 | using System.Xml.Linq; 4 | 5 | namespace SharePointPnP.Modernization.Framework.Functions 6 | { 7 | /// 8 | /// The result of an equiality comparison with 9 | /// 10 | public class XmlEqualityResult 11 | { 12 | private const string DefaultError = "Can't find match for subtree."; 13 | private const string SuccessMessage = "Success"; 14 | private string errorMessage; 15 | 16 | /// 17 | /// Gets whether the match was successful 18 | /// 19 | public bool Success 20 | { 21 | get { return FailObject == null; } 22 | } 23 | 24 | /// 25 | /// Gets or sets the object that failed the match 26 | /// 27 | public XObject FailObject { get; set; } 28 | 29 | /// 30 | /// Gets or sets a descriptive error message if the match failed. 31 | /// 32 | /// 33 | /// If set to null or not set the default Error Message is returned. 34 | /// 35 | public string ErrorMessage 36 | { 37 | get 38 | { 39 | return errorMessage ?? (Success ? SuccessMessage : DefaultError); 40 | } 41 | 42 | set 43 | { 44 | errorMessage = value; 45 | } 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/KQL/KQLElement.cs: -------------------------------------------------------------------------------- 1 | namespace SharePointPnP.Modernization.Framework.KQL 2 | { 3 | /// 4 | /// Element in KQL query 5 | /// 6 | public class KQLElement 7 | { 8 | /// 9 | /// Filter attribute name 10 | /// 11 | public string Filter { get; set; } 12 | 13 | /// 14 | /// Value of the filter 15 | /// 16 | public string Value { get; set; } 17 | 18 | /// 19 | /// Type of filter 20 | /// 21 | public KQLFilterType Type { get; set; } 22 | 23 | /// 24 | /// Filter operator 25 | /// 26 | public KQLPropertyOperator Operator { get; set; } 27 | 28 | /// 29 | /// Filter group 30 | /// 31 | public int Group { get; set; } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/KQL/KQLPropertyOperator.cs: -------------------------------------------------------------------------------- 1 | namespace SharePointPnP.Modernization.Framework.KQL 2 | { 3 | /// 4 | /// Operators on KQL property filters 5 | /// 6 | public enum KQLPropertyOperator 7 | { 8 | Matches = 0, 9 | EqualTo = 1, 10 | LesserThan = 2, 11 | GreaterThan = 3, 12 | LesserThanOrEqualTo = 4, 13 | GreaterThanOrEqualTo = 5, 14 | DoesNoEqual = 6, 15 | Restriction = 7, 16 | Undefined = 100 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/KQL/KQLPropertyType.cs: -------------------------------------------------------------------------------- 1 | namespace SharePointPnP.Modernization.Framework.KQL 2 | { 3 | /// 4 | /// KQL filter types 5 | /// 6 | public enum KQLFilterType 7 | { 8 | Text = 0, 9 | KeywordFilter = 1, 10 | PropertyFilter = 2, 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Pages/PageLayout.cs: -------------------------------------------------------------------------------- 1 | namespace SharePointPnP.Modernization.Framework.Pages 2 | { 3 | /// 4 | /// Possible layouts used by wiki or webpart pages 5 | /// 6 | public enum PageLayout 7 | { 8 | Wiki_OneColumn = 0, 9 | Wiki_TwoColumns = 1, 10 | Wiki_TwoColumnsWithSidebar = 2, 11 | Wiki_TwoColumnsWithHeader = 3, 12 | Wiki_TwoColumnsWithHeaderAndFooter = 4, 13 | Wiki_ThreeColumns = 5, 14 | Wiki_ThreeColumnsWithHeader = 6, 15 | Wiki_ThreeColumnsWithHeaderAndFooter = 7, 16 | Wiki_Custom = 8, 17 | WebPart_HeaderFooterThreeColumns = 20, 18 | WebPart_FullPageVertical = 21, 19 | WebPart_HeaderLeftColumnBody = 22, 20 | WebPart_HeaderRightColumnBody = 23, 21 | WebPart_HeaderFooter2Columns4Rows = 24, 22 | WebPart_HeaderFooter4ColumnsTopRow = 25, 23 | WebPart_LeftColumnHeaderFooterTopRow3Columns = 26, 24 | WebPart_RightColumnHeaderFooterTopRow3Columns = 27, 25 | WebPart_Custom = 28, 26 | WebPart_2010_TwoColumnsLeft = 29, 27 | PublishingPage_AutoDetect = 40, 28 | PublishingPage_AutoDetectWithVerticalColumn = 41 29 | 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("SharePointPnP.Modernization.Framework")] 9 | [assembly: AssemblyDescription("SharePoint modernization framework for SharePoint Online")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("SharePointPnP.Modernization.Framework")] 13 | [assembly: AssemblyCopyright("Copyright © Microsoft")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("2c80435c-340a-4e6b-b4e3-f13451abb6c9")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.2012.0")] 36 | [assembly: AssemblyFileVersion("1.0.2012.0")] 37 | 38 | [assembly: InternalsVisibleTo("SharePointPnP.Modernization.Framework.Tests")] -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Publishing/Layouts/PageLayoutFieldControlEntity.cs: -------------------------------------------------------------------------------- 1 | namespace SharePointPnP.Modernization.Framework.Publishing.Layouts 2 | { 3 | /// 4 | /// Class for holding data properties for field to web part mapping 5 | /// 6 | internal class PageLayoutWebPartFieldEntity 7 | { 8 | internal string TargetWebPart { get; set; } 9 | internal string FieldType { get; set; } 10 | internal string Name { get; set; } 11 | internal string Type { get; set; } 12 | internal string Functions { get; set; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Publishing/Layouts/PageLayoutHeaderFieldEntity.cs: -------------------------------------------------------------------------------- 1 | namespace SharePointPnP.Modernization.Framework.Publishing.Layouts 2 | { 3 | /// 4 | /// Class for holding data properties for the fields that will be used in the page header 5 | /// 6 | internal class PageLayoutHeaderFieldEntity 7 | { 8 | internal string Type { get; set; } 9 | internal string Name { get; set; } 10 | internal string HeaderProperty { get; set; } 11 | internal string Functions { get; set; } 12 | internal string Alignment { get; set; } 13 | internal bool ShowPublishedDate { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Publishing/Layouts/PageLayoutMetadataEntity.cs: -------------------------------------------------------------------------------- 1 | namespace SharePointPnP.Modernization.Framework.Publishing.Layouts 2 | { 3 | /// 4 | /// Class that will be used to hold the fields that will be used the field to metadata mapping 5 | /// 6 | internal class PageLayoutMetadataEntity 7 | { 8 | internal string FieldName { get; set; } 9 | internal string TargetFieldName { get; set; } 10 | internal string Functions { get; set; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Samples/urlmapping_sample.csv: -------------------------------------------------------------------------------- 1 | https://aka.ms/sppnp-modernize,https://aka.ms/sppnp-pagetransformation 2 | /sites/modernizationtestportal,/sites/blabla -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Telemetry/ILogObserver.cs: -------------------------------------------------------------------------------- 1 | namespace SharePointPnP.Modernization.Framework.Telemetry 2 | { 3 | /// 4 | /// Interface that needs to be implemented by any logger 5 | /// 6 | public interface ILogObserver 7 | { 8 | /// 9 | /// Log Information 10 | /// 11 | /// LogEntry object 12 | void Info(LogEntry entry); 13 | /// 14 | /// Warning Log 15 | /// 16 | /// LogEntry object 17 | void Warning(LogEntry entry); 18 | /// 19 | /// Error Log 20 | /// 21 | /// LogEntry object 22 | void Error(LogEntry entry); 23 | /// 24 | /// Debug Log 25 | /// 26 | /// LogEntry object 27 | void Debug(LogEntry entry); 28 | 29 | /// 30 | /// Pushes all output to destination and clears the cached log information 31 | /// 32 | void Flush(); 33 | 34 | /// 35 | /// Pushes all output to destination and clears the cached log information if needed 36 | /// 37 | void Flush(bool clearLogData); 38 | 39 | /// 40 | /// Sets the id of the page that's being transformed 41 | /// 42 | /// id of the page 43 | void SetPageId(string pageId); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Telemetry/LogLevel.cs: -------------------------------------------------------------------------------- 1 | namespace SharePointPnP.Modernization.Framework.Telemetry 2 | { 3 | /// 4 | /// Availabe logging levels 5 | /// 6 | public enum LogLevel 7 | { 8 | /// 9 | /// Debug Log Level 10 | /// 11 | Debug, 12 | /// 13 | /// Error Log Level 14 | /// 15 | Error, 16 | /// 17 | /// Warning Log Level 18 | /// 19 | Warning, 20 | /// 21 | /// Information Log Level 22 | /// 23 | Information 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Transform/IContentTransformator.cs: -------------------------------------------------------------------------------- 1 | using SharePointPnP.Modernization.Framework.Entities; 2 | using System.Collections.Generic; 3 | 4 | namespace SharePointPnP.Modernization.Framework.Transform 5 | { 6 | /// 7 | /// Interface implemented by all content transformators 8 | /// 9 | public interface IContentTransformator 10 | { 11 | 12 | /// 13 | /// Transforms the passed web parts into the loaded client side page 14 | /// 15 | /// List of web parts that need to be transformed 16 | void Transform(List webParts); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Transform/IHtmlTransformator.cs: -------------------------------------------------------------------------------- 1 | namespace SharePointPnP.Modernization.Framework.Transform 2 | { 3 | /// 4 | /// Interface implemented by all html transformators 5 | /// 6 | public interface IHtmlTransformator 7 | { 8 | 9 | /// 10 | /// Transforms the passed html to be usable by the client side text part 11 | /// 12 | /// Html to be transformed 13 | /// Insert placeholders for images and iframe tags 14 | /// Html that can be used and edited via the client side text part 15 | string Transform(string text, bool usePlaceHolder); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Transform/ILayoutTransformator.cs: -------------------------------------------------------------------------------- 1 | using SharePointPnP.Modernization.Framework.Entities; 2 | using System; 3 | using System.Collections.Generic; 4 | 5 | namespace SharePointPnP.Modernization.Framework.Transform 6 | { 7 | /// 8 | /// Interface implemented by all layout transformators 9 | /// 10 | public interface ILayoutTransformator 11 | { 12 | /// 13 | /// Transforms a classic wiki/webpart page layout into a modern client side page layout 14 | /// 15 | /// Information about the analyed page 16 | void Transform(Tuple> pageData); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Transform/ModernizationCenterInformation.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SharePointPnP.Modernization.Framework.Transform 4 | { 5 | /// 6 | /// This class defines the page transformation configuration for when there's a ModernizationCenter hooked up 7 | /// 8 | public class ModernizationCenterInformation 9 | { 10 | /// 11 | /// Url to the customer's modernization center site 12 | /// 13 | public Uri ModernizationCenterUri { get; set; } 14 | 15 | /// 16 | /// Add a page accept banner solution on the generated pages 17 | /// 18 | public bool AddPageAcceptBanner { get; set; } 19 | 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/Transform/SPVersion.cs: -------------------------------------------------------------------------------- 1 | namespace SharePointPnP.Modernization.Framework.Transform 2 | { 3 | /// 4 | /// Enum listing the SharePoint versions as used by the transformation engine 5 | /// 6 | public enum SPVersion 7 | { 8 | SPO = 0, 9 | SP2019 = 1, 10 | SP2016 = 2, 11 | SP2016Legacy= 3, 12 | SP2013 = 4, 13 | SP2013Legacy = 5, 14 | SP2010 = 6, 15 | Unknown = 100 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/webpartmapping.xsc: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/webpartmapping.xss: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Framework/xsd.txt: -------------------------------------------------------------------------------- 1 | xsd.exe webpartmapping.xsd /c /n:SharePointPnP.Modernization.Framework 2 | xsd.exe pagelayoutmapping.xsd /c /n:SharePointPnP.Modernization.Framework.Publishing -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Analyzers/IBaseAnalyzer.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.SharePoint.Client; 2 | using System; 3 | 4 | namespace SharePoint.Modernization.Scanner.Core.Analyzers 5 | { 6 | /// 7 | /// Interface that all analyzers need to implement 8 | /// 9 | public interface IBaseAnalyzer 10 | { 11 | 12 | /// 13 | /// Analyzer run 14 | /// 15 | /// ClientContext of the web to be analyzed 16 | /// Duration of the analysis 17 | TimeSpan Analyze(ClientContext cc); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/LogEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SharePointPnP.Modernization.Scanner.Core 4 | { 5 | public enum LogSeverity 6 | { 7 | Information = 0, 8 | Warning = 1, 9 | Error = 2 10 | } 11 | 12 | public class LogEventArgs: EventArgs 13 | { 14 | public string Message { get; set; } 15 | public LogSeverity Severity { get; set; } 16 | public DateTime TriggeredAt { get; set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("SharePointPnP.Modernization.Scanner.Core")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("SharePointPnP.Modernization.Scanner.Core")] 13 | [assembly: AssemblyCopyright("Copyright © Microsoft 2020")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("71316f85-a108-47c4-a115-c16c5b79e46c")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("2.19.0.0")] 36 | [assembly: AssemblyFileVersion("2.19.0.0")] 37 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Reports/Readme.txt: -------------------------------------------------------------------------------- 1 | How to correctly add data to the Excel template 2 | 3 | 1. Go to empty sheet 4 | 2. Data -> From Text/CSV -> Import your CSV file 5 | 3. Name sheet (e.g. PubPages) 6 | 4. Data -> Queries and Connections -> Delete the query that was added due to CSV import 7 | 5. Select created table -> Table Design -> Convert to Range to remove the created table 'name' 8 | 5. Formulas -> Name Manager -> Create 'dynamic' range like shown here: PubPagesData=OFFSET(PubPages!$A$1;0;0;COUNTA(PubPages!$A:$A);COUNTA(PubPages!$1:$1)) 9 | 6. Data -> Get Data -> From Table/Range -> define range as the dynamic name (e.g PubPagesData) 10 | 7. Close Power Query Editor that was opened -> Keep 11 | 8. Delete the added sheet (as it's a duplicate) 12 | 9. Data -> Queries and Connections -> Rename table if needed + "Load to...", check "Add this data to the data model" -> OK 13 | 10. Data -> Manage Data Model -> Add relationships + further data configuration 14 | 11. Data -> Manage Data Model -> Insert PivotCharts and/or PivotTables 15 | 12. Hide the "original" sheet with imported data 16 | 13. Data -> Queries and Connections -> your query -> ... --> Properties --> toggle "Refresh data when opening file" and "Enable fast data load" -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Reports/ReportStream.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | 3 | namespace SharePointPnP.Modernization.Scanner.Core.Reports 4 | { 5 | public class ReportStream 6 | { 7 | public string Source { get; set; } 8 | public string Name { get; set; } 9 | public Stream DataStream { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Reports/ScanSummary.cs: -------------------------------------------------------------------------------- 1 | namespace SharePoint.Modernization.Scanner.Core.Reports 2 | { 3 | public class ScanSummary 4 | { 5 | public int? SiteCollections { get; set; } 6 | public int? Webs { get; set; } 7 | public int? Lists { get; set; } 8 | public string Duration { get; set; } 9 | public string Version { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Reports/blogmaster.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Reports/blogmaster.xlsx -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Reports/groupifymaster.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Reports/groupifymaster.xlsx -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Reports/infopathmaster.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Reports/infopathmaster.xlsx -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Reports/listmaster.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Reports/listmaster.xlsx -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Reports/pagemaster.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Reports/pagemaster.xlsx -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Reports/publishingmaster.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Reports/publishingmaster.xlsx -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Reports/workflowmaster.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Reports/workflowmaster.xlsx -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Results/BlogPageScanResult.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SharePoint.Modernization.Scanner.Core.Results 4 | { 5 | /// 6 | /// Stores information about a found blog page 7 | /// 8 | public class BlogPageScanResult: Scan 9 | { 10 | 11 | public BlogPageScanResult() 12 | { 13 | this.BlogType = BlogType.Classic; 14 | } 15 | 16 | /// 17 | /// Type of blog page 18 | /// 19 | public BlogType BlogType { get; set; } 20 | 21 | /// 22 | /// Web relative Url 23 | /// 24 | public string WebRelativeUrl { get; set; } 25 | 26 | /// 27 | /// page relative Url 28 | /// 29 | public string PageRelativeUrl { get; set; } 30 | 31 | /// 32 | /// Title of the scanned blog page 33 | /// 34 | public string PageTitle { get; set; } 35 | 36 | // Page modification information 37 | public DateTime ModifiedAt { get; set; } 38 | public string ModifiedBy { get; set; } 39 | 40 | /// 41 | /// Blog publishing date 42 | /// 43 | public DateTime PublishedDate { get; set; } 44 | 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Results/BlogWebScanResult.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SharePoint.Modernization.Scanner.Core.Results 4 | { 5 | 6 | /// 7 | /// Blog page types 8 | /// 9 | public enum BlogType 10 | { 11 | Classic, 12 | Delve 13 | } 14 | 15 | /// 16 | /// Stores information about a found blog site 17 | /// 18 | public class BlogWebScanResult: Scan 19 | { 20 | public BlogWebScanResult() 21 | { 22 | this.LastRecentBlogPageChange = DateTime.MinValue; 23 | this.LastRecentBlogPagePublish = DateTime.MinValue; 24 | this.BlogType = BlogType.Classic; 25 | } 26 | 27 | /// 28 | /// Type of blog page 29 | /// 30 | public BlogType BlogType { get; set; } 31 | 32 | /// 33 | /// Web relative Url 34 | /// 35 | public string WebRelativeUrl { get; set; } 36 | 37 | /// 38 | /// Web template (e.g. STS#0) 39 | /// 40 | public string WebTemplate { get; set; } 41 | 42 | /// 43 | /// Language of the used blog site 44 | /// 45 | public uint Language { get; set; } 46 | 47 | /// 48 | /// Number of blog pages in this site 49 | /// 50 | public int BlogPageCount { get; set; } 51 | 52 | /// 53 | /// Most recent blog change date 54 | /// 55 | public DateTime LastRecentBlogPageChange { get; set; } 56 | 57 | /// 58 | /// Most recent blog publish date 59 | /// 60 | public DateTime LastRecentBlogPagePublish { get; set; } 61 | 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Results/CustomizedFormsScanResult.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.SharePoint.Client; 2 | using System; 3 | 4 | namespace SharePoint.Modernization.Scanner.Core.Results 5 | { 6 | public class CustomizedFormsScanResult : Scan 7 | { 8 | /// 9 | /// Type of form page 10 | /// 11 | public PageType FormType { get; set; } 12 | 13 | /// 14 | /// Id of the form page 15 | /// 16 | public Guid PageId { get; set; } 17 | 18 | /// 19 | /// Url of the form page 20 | /// 21 | public string Url { get; set; } 22 | 23 | /// 24 | /// Id of the web part on the form page 25 | /// 26 | public Guid WebpartId { get; set; } 27 | 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Results/InfoPathScanResult.cs: -------------------------------------------------------------------------------- 1 | using OfficeDevPnP.Core.Entities; 2 | using System; 3 | using System.Collections.Generic; 4 | 5 | namespace SharePoint.Modernization.Scanner.Core.Results 6 | { 7 | public class InfoPathScanResult: Scan 8 | { 9 | public string ListUrl { get; set; } 10 | 11 | public string ListTitle { get; set; } 12 | 13 | public Guid ListId { get; set; } 14 | 15 | /// 16 | /// Indicates how InfoPath is used here: form library or customization of the list form pages 17 | /// 18 | public string InfoPathUsage { get; set; } 19 | 20 | public string InfoPathTemplate { get; set; } 21 | 22 | public bool Enabled { get; set; } 23 | 24 | public int ItemCount { get; set; } 25 | 26 | public DateTime LastItemUserModifiedDate { get; set; } 27 | 28 | /// 29 | /// Site administrators 30 | /// 31 | public List Admins { get; set; } 32 | /// 33 | /// Site owners 34 | /// 35 | public List Owners { get; set; } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Results/PageScanResult.cs: -------------------------------------------------------------------------------- 1 | using SharePointPnP.Modernization.Framework.Entities; 2 | using System; 3 | using System.Collections.Generic; 4 | 5 | namespace SharePoint.Modernization.Scanner.Core.Results 6 | { 7 | /// 8 | /// Stores the result of scanned page 9 | /// 10 | public class PageScanResult: Scan 11 | { 12 | public string PageUrl { get; set; } 13 | public string PageType { get; set; } 14 | public string Library { get; set; } 15 | public string Layout { get; set; } 16 | public bool HomePage { get; set; } 17 | public bool UncustomizedHomePage { get; set; } 18 | 19 | // Page modification information 20 | public DateTime ModifiedAt { get; set; } 21 | public String ModifiedBy { get; set; } 22 | public int ViewsRecent { get; set; } 23 | public int ViewsRecentUniqueUsers { get; set; } 24 | public int ViewsLifeTime { get; set; } 25 | public int ViewsLifeTimeUniqueUsers { get; set; } 26 | 27 | // Page web part information 28 | public List WebParts { get; set; } 29 | 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Results/UserCustomActionResult.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.SharePoint.Client; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace SharePoint.Modernization.Scanner.Core.Results 9 | { 10 | public class UserCustomActionResult: Scan 11 | { 12 | public string Title { get; set; } 13 | 14 | public string Name { get; set; } 15 | 16 | public string Location { get; set; } 17 | 18 | public UserCustomActionRegistrationType RegistrationType { get; set; } 19 | 20 | public string RegistrationId { get; set; } 21 | 22 | public string CommandAction { get; set; } 23 | 24 | public string ScriptBlock { get; set; } 25 | 26 | public string ScriptSrc { get; set; } 27 | 28 | public string Problem { get; set; } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Results/XsltViewWebPartCompatability.cs: -------------------------------------------------------------------------------- 1 | namespace SharePoint.Modernization.Scanner.Core.Results 2 | { 3 | public class XsltViewWebPartCompatibility 4 | { 5 | public bool BlockedByJSLink { get; set; } 6 | public string JSLink { get; set; } 7 | public bool BlockedByXslLink { get; set; } 8 | public string XslLink { get; set; } 9 | public bool BlockedByXsl { get; set; } 10 | public bool BlockedByJSLinkField { get; set; } 11 | public string JSLinkFields { get; set; } 12 | public bool BlockedByBusinessDataField { get; set; } 13 | public string BusinessDataFields { get; set; } 14 | public bool BlockedByTaskOutcomeField { get; set; } 15 | public string TaskOutcomeFields { get; set; } 16 | public bool BlockedByPublishingField { get; set; } 17 | public string PublishingFields { get; set; } 18 | public bool BlockedByGeoLocationField { get; set; } 19 | public string GeoLocationFields { get; set; } 20 | public bool BlockedByListCustomAction { get; set; } 21 | public string ListCustomActions { get; set; } 22 | public bool BlockedByManagedMetadataNavFeature { get; set; } 23 | public bool BlockedByViewType { get; set; } 24 | public string ViewType { get; set; } 25 | public bool BlockedByListBaseTemplate { get; set; } 26 | public int ListBaseTemplate { get; set; } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Scan.cs: -------------------------------------------------------------------------------- 1 | namespace SharePoint.Modernization.Scanner.Core 2 | { 3 | /// 4 | /// Base class for scan results 5 | /// 6 | public class Scan 7 | { 8 | public string SiteURL { get; set; } 9 | public string SiteColUrl { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/ScanError.cs: -------------------------------------------------------------------------------- 1 | namespace SharePoint.Modernization.Scanner.Core 2 | { 3 | /// 4 | /// Generic class to hold scan errors 5 | /// 6 | public class ScanError: Scan 7 | { 8 | public string Error { get; set; } 9 | public string Field1 { get; set; } 10 | public string Field2 { get; set; } 11 | public string Field3 { get; set; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Utilities/WebpartMappingLoader.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | 3 | namespace SharePoint.Modernization.Scanner.Core.Utilities 4 | { 5 | /// 6 | /// Class to support the embedded webpartmapping.xml file 7 | /// 8 | public static class WebpartMappingLoader 9 | { 10 | /// 11 | /// Load the webpartmapping file from the embedded resources 12 | /// 13 | /// Fully qualified path to file 14 | /// String contents 15 | public static string LoadFile(string fileName) 16 | { 17 | var fileContent = ""; 18 | using (Stream stream = typeof(WebpartMappingLoader).Assembly.GetManifestResourceStream(fileName)) 19 | { 20 | using (StreamReader reader = new StreamReader(stream)) 21 | { 22 | fileContent = reader.ReadToEnd(); 23 | } 24 | } 25 | 26 | return fileContent; 27 | } 28 | 29 | /// 30 | /// Transforms a string into a stream 31 | /// 32 | /// String to transform 33 | /// Stream 34 | public static Stream GenerateStreamFromString(string s) 35 | { 36 | var stream = new MemoryStream(); 37 | var writer = new StreamWriter(stream); 38 | writer.Write(s); 39 | writer.Flush(); 40 | stream.Position = 0; 41 | return stream; 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Workflow/WorkFlowActions.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace SharePoint.Modernization.Scanner.Core.Workflow 4 | { 5 | 6 | /// 7 | /// Workflow types 8 | /// 9 | public enum WorkflowTypes 10 | { 11 | SP2010, 12 | SP2013 13 | } 14 | 15 | /// 16 | /// Workflow action class 17 | /// 18 | public class WorkflowAction 19 | { 20 | public string ActionName { get; set; } 21 | public string ActionNameShort { get; set; } 22 | } 23 | 24 | /// 25 | /// Class holding the default workflow actions for 2010/2013 SharePoint workflow 26 | /// 27 | public class WorkflowActions 28 | { 29 | public WorkflowActions() 30 | { 31 | SP2010DefaultActions = new List(); 32 | SP2013DefaultActions = new List(); 33 | } 34 | 35 | public List SP2010DefaultActions { get; set; } 36 | public List SP2013DefaultActions { get; set; } 37 | 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Workflow/WorkflowActionAnalysis.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace SharePoint.Modernization.Scanner.Core.Workflow 4 | { 5 | public class WorkflowActionAnalysis 6 | { 7 | 8 | public WorkflowActionAnalysis() 9 | { 10 | this.WorkflowActions = new List(); 11 | this.UnsupportedActions = new List(); 12 | } 13 | 14 | public List WorkflowActions { get; set; } 15 | public int ActionCount { get; set; } 16 | public List UnsupportedActions { get; set; } 17 | public int UnsupportedAccountCount { get; set; } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Workflow/WorkflowTriggerAnalysis.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace SharePoint.Modernization.Scanner.Core.Workflow 8 | { 9 | public class WorkflowTriggerAnalysis 10 | { 11 | public WorkflowTriggerAnalysis() 12 | { 13 | this.WorkflowTriggers = new List(); 14 | this.UnSupportedTriggers = new List(); 15 | } 16 | 17 | public List WorkflowTriggers { get; set; } 18 | public List UnSupportedTriggers { get; set; } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner.Core/Workflow/xsd.txt: -------------------------------------------------------------------------------- 1 | xsd.exe sp2010wfmodel.xsd /c /n:SharePoint.Modernization.Scanner.Core.Workflow.SP2010 2 | xsd.exe sp2013wfmodel.xsd /c /n:SharePoint.Modernization.Scanner.Core.Workflow.SP2013 -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/SharePointPnP.Modernization.Scanner/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | // General Information about an assembly is controlled through the following 5 | // set of attributes. Change these attribute values to modify the information 6 | // associated with an assembly. 7 | [assembly: AssemblyTitle("SharePoint.Modernization.Scanner")] 8 | [assembly: AssemblyDescription("")] 9 | [assembly: AssemblyConfiguration("")] 10 | [assembly: AssemblyCompany("")] 11 | [assembly: AssemblyProduct("SharePoint.Modernization.Scanner")] 12 | [assembly: AssemblyCopyright("Copyright © Microsoft 2020")] 13 | [assembly: AssemblyTrademark("")] 14 | [assembly: AssemblyCulture("")] 15 | 16 | // Setting ComVisible to false makes the types in this assembly not visible 17 | // to COM components. If you need to access a type in this assembly from 18 | // COM, set the ComVisible attribute to true on that type. 19 | [assembly: ComVisible(false)] 20 | 21 | // The following GUID is for the ID of the typelib if this project is exposed to COM 22 | [assembly: Guid("74e4621e-6ed0-4138-80c4-0adf70dfc202")] 23 | 24 | // Version information for an assembly consists of the following four values: 25 | // 26 | // Major Version 27 | // Minor Version 28 | // Build Number 29 | // Revision 30 | // 31 | // You can specify all the values or you can default the Build and Revision Numbers 32 | // by using the '*' as shown below: 33 | // [assembly: AssemblyVersion("1.0.*")] 34 | [assembly: AssemblyVersion("2.19.0.0")] 35 | [assembly: AssemblyFileVersion("2.19.0.0")] 36 | -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/binaries/OfficeDevPnP.Core.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/binaries/OfficeDevPnP.Core.dll -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/binaries/lastrelease-signed/OfficeDevPnP.Core.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/binaries/lastrelease-signed/OfficeDevPnP.Core.dll -------------------------------------------------------------------------------- /Tools/SharePoint.Modernization/binaries/lastrelease-unsigned/OfficeDevPnP.Core.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnp/modernization/7591e0fc98f631ef9730b8c53238ee5fcf074e98/Tools/SharePoint.Modernization/binaries/lastrelease-unsigned/OfficeDevPnP.Core.dll --------------------------------------------------------------------------------