Skip to content

Commit ecfd797

Browse files
committed
Embedding forms using iFrame or script, helper methods and option to use own rendering view.
1 parent 1d0a0a6 commit ecfd797

File tree

15 files changed

+201
-39
lines changed

15 files changed

+201
-39
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
@using Umbraco.Cms.Integrations.Crm.Dynamics.Models.ViewModels;
2+
3+
@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage<FormViewModel>
4+
5+
@{
6+
var id = Guid.NewGuid();
7+
}
8+
9+
@if (Model.IFrameEmbedded)
10+
{
11+
<iframe frameBorder="0" style="width:100%" id=@id></iframe>
12+
<script>
13+
var sandboxSrc = "https://@(Model.Hostname)/t/formsandbox/@(Model.WebsiteId)/@(Model.FormBlockId)?ad="
14+
+ encodeURIComponent(document.location.toString()); document.getElementById('@id').setAttribute('src', sandboxSrc);
15+
</script>
16+
}
17+
else
18+
{
19+
<div data-form-block-id="@Model.FormBlockId"></div>
20+
<script src="https://mktdplp102cdn.azureedge.net/public/latest/js/form-loader.js?v=1.84.2007"></script>
21+
<div id="@Model.ContainerId"></div>
22+
<script src="https://mktdplp102cdn.azureedge.net/public/latest/js/ws-tracking.js?v=1.84.2007"></script>
23+
<div class="@Model.ContainerClass" style="display:none"
24+
data-website-id="@Model.WebsiteId" data-hostname="@Model.Hostname"></div>
25+
}

src/Umbraco.Cms.Integrations.Crm.Dynamics/App_Plugins/UmbracoCms.Integrations/Crm/Dynamics/Render/DynamicsFormV8.cshtml

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,24 @@
22

33
@inherits Umbraco.Web.Mvc.UmbracoViewPage<FormViewModel>
44

5-
@Html.Raw(Model.EmbedCode)
5+
@{
6+
var id = Guid.NewGuid();
7+
}
8+
9+
@if (Model.IFrameEmbedded)
10+
{
11+
<iframe frameBorder="0" style="width:100%" id=@id></iframe>
12+
<script>
13+
var sandboxSrc = "https://@(Model.Hostname)/t/formsandbox/@(Model.WebsiteId)/@(Model.FormBlockId)?ad="
14+
+ encodeURIComponent(document.location.toString()); document.getElementById('@id').setAttribute('src', sandboxSrc);
15+
</script>
16+
}
17+
else
18+
{
19+
<div data-form-block-id="@Model.FormBlockId"></div>
20+
<script src="https://mktdplp102cdn.azureedge.net/public/latest/js/form-loader.js?v=1.84.2007"></script>
21+
<div id="@Model.ContainerId"></div>
22+
<script src="https://mktdplp102cdn.azureedge.net/public/latest/js/ws-tracking.js?v=1.84.2007"></script>
23+
<div class="@Model.ContainerClass" style="display:none"
24+
data-website-id="@Model.WebsiteId" data-hostname="@Model.Hostname"></div>
25+
}

src/Umbraco.Cms.Integrations.Crm.Dynamics/App_Plugins/UmbracoCms.Integrations/Crm/Dynamics/Render/DynamicsFormV9.cshtml

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/Umbraco.Cms.Integrations.Crm.Dynamics/App_Plugins/UmbracoCms.Integrations/Crm/Dynamics/js/formpicker.controller.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
vm.loading = false;
66
vm.dynamicsFormsList = [];
77
vm.searchTerm = "";
8+
vm.iFrameEmbedded = false;
89

910
umbracoCmsIntegrationsCrmDynamicsResource.checkOAuthConfiguration().then(function (response) {
1011
if (response.isAuthorized) {
@@ -30,14 +31,21 @@
3031
$scope.model.value = null;
3132
}
3233

34+
vm.toggleRenderMode = function () {
35+
vm.iFrameEmbedded = !vm.iFrameEmbedded;
36+
}
37+
3338
vm.openDynamicsFormPickerOverlay = function () {
3439

3540
var options = {
3641
title: "Dynamics - Marketing Forms",
3742
subtitle: "Select a form",
3843
view: "/App_Plugins/UmbracoCms.Integrations/Crm/Dynamics/views/formpickereditor.html",
3944
size: "medium",
40-
selectForm: function (form) {
45+
selectForm: function (form, iFrameEmbedded) {
46+
47+
form.iFrameEmbedded = iFrameEmbedded;
48+
4149
vm.saveForm(form);
4250

4351
editorService.close();
@@ -57,7 +65,8 @@
5765
vm.dynamicsFormsList.push({
5866
id: item.msdyncrm_marketingformid,
5967
name: item.msdyncrm_name,
60-
embedCode: ""
68+
embedCode: "",
69+
iFrameEmbedded: vm.iFrameEmbedded
6170
});
6271
});
6372
}

src/Umbraco.Cms.Integrations.Crm.Dynamics/App_Plugins/UmbracoCms.Integrations/Crm/Dynamics/views/formpickereditor.html

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,25 @@
1212
</div>
1313
<div class="dynOverlayGroup">
1414
<ul class="dynFormsList">
15-
<li ng-repeat="form in vm.dynamicsFormsList | orderBy:'name' | filter:vm.searchTerm" ng-click="model.selectForm(form)" class="ng-scope" role="button" tabindex="0">
15+
<li ng-repeat="form in vm.dynamicsFormsList | orderBy:'name' | filter:vm.searchTerm" ng-click="model.selectForm(form, vm.iFrameEmbedded)"
16+
class="ng-scope" role="button" tabindex="0">
1617
<a href="" ng-attr-title="form.name">
1718
<i class="icon-umb-contour"></i>
1819
<span class="formLine">{{form.name}}</span>
1920
</a>
2021
</li>
2122
</ul>
2223
</div>
24+
<div class="dynOverlayGroup">
25+
<umb-toggle checked="vm.iFrameEmbedded"
26+
on-click="vm.toggleRenderMode()"
27+
show-labels="true"
28+
label-on="Render with iFrame"
29+
label-off="Render with Script"
30+
label-position="right"
31+
hide-icons="true">
32+
</umb-toggle>
33+
</div>
2334
</umb-box-content>
2435
</umb-box>
2536
</umb-editor-container>

src/Umbraco.Cms.Integrations.Crm.Dynamics/Configuration/DynamicsSettings.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,12 @@ public DynamicsSettings() { }
99
public DynamicsSettings(NameValueCollection appSettings)
1010
{
1111
InstanceUrl = appSettings[Constants.UmbracoCmsIntegrationsCrmDynamicsInstanceUrlKey];
12+
13+
InstanceWebApiUrl = appSettings[Constants.UmbracoCmsIntegrationsCrmDynamicsInstanceWebApiUrlKey];
1214
}
1315

1416
public string InstanceUrl { get; set; }
17+
18+
public string InstanceWebApiUrl { get; set; }
1519
}
1620
}

src/Umbraco.Cms.Integrations.Crm.Dynamics/Constants.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,30 @@ public class Constants
1111

1212
public const string UmbracoCmsIntegrationsCrmDynamicsInstanceUrlKey = "Umbraco.Cms.Integrations.Crm.Dynamics.InstanceUrl";
1313

14+
public const string UmbracoCmsIntegrationsCrmDynamicsInstanceWebApiUrlKey = "Umbraco.Cms.Integrations.Crm.Dynamics.InstanceWebApiUrl";
15+
16+
public const string AppPluginFolderPath = "~/App_Plugins/UmbracoCms.Integrations/Crm/Dynamics";
17+
18+
public static class RenderingComponent
19+
{
20+
public const string DefaultViewPath = AppPluginFolderPath + "/Render/DynamicsForm.cshtml";
21+
22+
public const string DefaultV8ViewPath = AppPluginFolderPath + "/Render/DynamicsFormV8.cshtml";
23+
}
24+
25+
public static class EmbedAttribute
26+
{
27+
public const string DataFormBlockId = "data-form-block-id";
28+
29+
public const string ContainerId = "id";
30+
31+
public const string ContainerClass = "class";
32+
33+
public const string DataWebsiteId = "data-website-id";
34+
35+
public const string DataHostname = "data-hostname";
36+
}
37+
1438
public static class Configuration
1539
{
1640
public const string Settings = "Umbraco:Cms:Integrations:Crm:Dynamics:Settings";

src/Umbraco.Cms.Integrations.Crm.Dynamics/Controllers/FormsController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ public async Task<ResponseDto<FormDto>> GetForms()
138138
var requestMessage = new HttpRequestMessage
139139
{
140140
Method = HttpMethod.Get,
141-
RequestUri = new Uri($"{_settings.InstanceUrl}msdyncrm_marketingforms")
141+
RequestUri = new Uri($"{_settings.InstanceWebApiUrl}msdyncrm_marketingforms")
142142
};
143143
requestMessage.Headers.Authorization =
144144
new AuthenticationHeaderValue("Bearer", oauthConfiguration.AccessToken);

src/Umbraco.Cms.Integrations.Crm.Dynamics/Editors/DynamicsFormPickerValueConverter.cs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
using Newtonsoft.Json;
22
using Newtonsoft.Json.Linq;
3-
43
using System;
5-
4+
using Umbraco.Cms.Integrations.Crm.Dynamics.Helpers;
65
using Umbraco.Cms.Integrations.Crm.Dynamics.Models.ViewModels;
7-
using Umbraco.Cms.Integrations.Crm.Dynamics.Services;
86

97
#if NETCOREAPP
108
using Microsoft.Extensions.Options;
@@ -30,7 +28,22 @@ public override object ConvertSourceToIntermediate(IPublishedElement owner, IPub
3028
{
3129
if (source == null) return null;
3230

33-
return JsonConvert.DeserializeObject<FormViewModel>(source.ToString());
31+
var jObject = JObject.Parse(source.ToString());
32+
33+
var embedCode = jObject["embedCode"].ToString();
34+
var iFrameEmbedd = (bool)jObject["iFrameEmbedded"];
35+
36+
var vm = new FormViewModel
37+
{
38+
IFrameEmbedded = iFrameEmbedd,
39+
FormBlockId = embedCode.ParseAttributeValue(Constants.EmbedAttribute.DataFormBlockId),
40+
ContainerId = embedCode.ParseAttributeValue(Constants.EmbedAttribute.ContainerId),
41+
ContainerClass = embedCode.ParseAttributeValue(Constants.EmbedAttribute.ContainerClass),
42+
WebsiteId = embedCode.ParseAttributeValue(Constants.EmbedAttribute.DataWebsiteId),
43+
Hostname = embedCode.ParseAttributeValue(Constants.EmbedAttribute.DataHostname)
44+
};
45+
46+
return vm;
3447
}
3548
}
3649
}

src/Umbraco.Cms.Integrations.Crm.Dynamics/Helpers/DynamicsHtmlExtensions.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,18 @@ namespace Umbraco.Cms.Integrations.Crm.Dynamics.Helpers
1414
public static class DynamicsHtmlExtensions
1515
{
1616
#if NETCOREAPP
17-
public static IHtmlContent RenderDynamicsForm(this IHtmlHelper<dynamic> htmlHelper, FormViewModel formVM)
17+
public static IHtmlContent RenderDynamicsForm(this IHtmlHelper<dynamic> htmlHelper, FormViewModel formVM, string renderingViewPath = "")
1818
{
19-
return htmlHelper.Partial("~/App_Plugins/UmbracoCms.Integrations/Crm/Dynamics/Render/DynamicsFormV9.cshtml", formVM);
19+
return htmlHelper.Partial(string.IsNullOrEmpty(renderingViewPath)
20+
? Constants.RenderingComponent.DefaultViewPath : renderingViewPath,
21+
formVM);
2022
}
2123
#else
22-
public static IHtmlString RenderDynamicsForm(this HtmlHelper helper, FormViewModel formVM)
24+
public static IHtmlString RenderDynamicsForm(this HtmlHelper helper, FormViewModel formVM, string renderingViewPath = "")
2325
{
24-
return helper.Partial("~/App_Plugins/UmbracoCms.Integrations/Crm/Dynamics/Render/DynamicsFormV8.cshtml", formVM);
26+
return helper.Partial(string.IsNullOrEmpty(renderingViewPath)
27+
? Constants.RenderingComponent.DefaultV8ViewPath : renderingViewPath,
28+
formVM);
2529
}
2630
#endif
2731
}

0 commit comments

Comments
 (0)