Error executing template "Designs/OlgerdinVefverslun/_parsed/Frontpage_ViteBridge.parsed.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at CompiledRazorTemplates.Dynamic.RazorEngine_ba05f7fc9e3b40fd8cb7034a16bc3581.GetPageStyles() in E:\webcontent\beta.olgerdin.is\Files\Templates\Designs\OlgerdinVefverslun\_parsed\Frontpage_ViteBridge.parsed.cshtml:line 293
at CompiledRazorTemplates.Dynamic.RazorEngine_ba05f7fc9e3b40fd8cb7034a16bc3581.Execute() in E:\webcontent\beta.olgerdin.is\Files\Templates\Designs\OlgerdinVefverslun\_parsed\Frontpage_ViteBridge.parsed.cshtml:line 282
at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
2 @using Advania.FileSystem;
3 @using Advania.Ecommerce.Infrastructure.Vite;
4 @using Advania.Configuration;
5 @using Advania.Custom;
6 @using Dynamicweb;
7 @using Advania.Users.UserManagement;
8 @using Advania.Users.UserManagement.Extensions;
9 @using Dynamicweb.Security.UserManagement;
10
11 @{
12 var vite = new ViteService(new ViteConfig(Files.GetRelativePath(ConfigManager.General.ViteManifestPath))
13 {
14 ModuleSrc = ConfigManager.General.ViteModuleSrc,
15 PublicPath = ConfigManager.General.VitePublicPath
16 });
17
18 var useViteLocalModule = ConfigManager.Env == AppEnvEnum.Development;
19
20 var contextAttributes = new Dictionary<string, object>() {
21 { "area-id", Model.Area.ID },
22 { "area-name", Model.Area.Name },
23 { "shop-id", Dynamicweb.Content.Services.Areas.GetArea(Model.Area.ID).EcomShopId },
24 { "page-id", Model.ID },
25 { "home-page-id", Model.Area.FirstActivePage.ID },
26 { "user-feed-page-id", GetPageIdByNavigationTag("GetUserFeed") },
27 { "cart-feed-page-id", GetPageIdByNavigationTag("CartFeed") },
28 { "my-pages-page-id", GetPageIdByNavigationTag("MyPages") },
29 { "login-page-id", GetPageIdByNavigationTag("LoginPage") },
30 { "register-page-id", GetPageIdByNavigationTag("RegisterPage") },
31 { "register-company-page-id", GetPageIdByNavigationTag("RegisterCompanyPage") },
32 { "product-search-page-id", GetPageIdByNavigationTag("ProductSearch") },
33 { "active-search-context-page-id", null },
34 { "product-typeahead-page-id", GetPageIdByNavigationTag("ProductTypeaheadSearch") },
35 { "company-invite-page-id", GetPageIdByNavigationTag("CompanyInvitePage") },
36 { "secondary-users-feed-page-id", GetPageIdByNavigationTag("SecondaryUsersFeed") },
37 { "customer-center-list-feed-page-id", GetPageIdByNavigationTag("CustomerCenterListFeed") },
38 { "translations-timestamp", new System.IO.FileInfo(Files.GetTemplatePath("OlgerdinVefverslun", "Translations.xml")).LastWriteTimeUtc.ToString("o") }
39 };
40
41 var pageIndex = new Dictionary<string, string>()
42 {
43 { "ProductFeedPage", Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(GetPageIdByNavigationTag("ProductFeedPage")) },
44 { "LiveFeedPage", Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(GetPageIdByNavigationTag("LiveFeedPage")) },
45 { "BrandPage", Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(GetPageIdByNavigationTag("BrandPage")) },
46 { "ProductSearch", Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(GetPageIdByNavigationTag("ProductSearch")) }
47 };
48
49 if (Model.CurrentUser != null)
50 {
51 contextAttributes["current-user-id"] = Model.CurrentUser.ID;
52 }
53
54 if (Model.Cart != null)
55 {
56 contextAttributes["current-cart-id"] = Model.Cart.ID;
57 }
58
59 var subAreaPage = Dynamicweb.Content.Services.Pages.GetPage(Model.TopPage.ID);
60 if (subAreaPage.ItemType == "Advania_Sub_Area")
61 {
62 contextAttributes["sub-area-name"] = subAreaPage.GetDisplayName();
63
64 if (subAreaPage.Item.TryGetValue("Brand_Page", out object brandPage))
65 {
66 var brandPageId = Dynamicweb.Environment.Helpers.LinkHelper.GetInternalPageId(brandPage.ToString());
67 pageIndex["BrandPage"] = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(brandPageId);
68 }
69 /*
70 contextAttributes["active-search-context-page-id"] = Convert.ToInt32(activeSearchContextPage);
71 contextAttributes["product-search-page-id"] = contextSearchPageId.PageId;
72 contextAttributes["product-typeahead-page-id"] = contextTypeaheadSearchPageId.PageId;
73 */
74 }
75
76 /* This loop enables us to have specific page IDs to use for product search & typeahead functionality. It's used to solve */
77 /* Danól being split into 3 departments, each with their own subpage which needs to have its search isolated to their */
78 /* specific products. */
79 if (Dynamicweb.Security.UserManagement.User.GetCurrentFrontendUser() is User user)
80 {
81 var contextSearchPages = Model.Area.Item?.GetItems("Context_Search_Pages");
82
83 if (contextSearchPages != null)
84 {
85 foreach (var item in contextSearchPages)
86 {
87 var userGroupContext = item.GetRawValue("User_Group_Context");
88 if (user.GroupsIds.Contains(Dynamicweb.Core.Converter.ToInt32(userGroupContext)))
89 {
90 var contextSearchPageId = item.GetLink("Search_Page");
91 if (contextSearchPageId != null && contextSearchPageId.PageId != 0)
92 {
93 contextAttributes["active-search-context-page-id"] = contextSearchPageId.PageId;
94 contextAttributes["product-search-page-id"] = contextSearchPageId.PageId;
95 }
96
97 var contextTypeaheadSearchPageId = item.GetLink("Typeahead_Page");
98 if (contextTypeaheadSearchPageId != null && contextTypeaheadSearchPageId.PageId != 0)
99 {
100 contextAttributes["product-typeahead-page-id"] = contextTypeaheadSearchPageId.PageId;
101 }
102 break;
103 }
104 }
105 }
106 }
107
108
109 var myProductsPageId = GetPageIdByNavigationTag("MyProducts");
110 if (myProductsPageId > 0)
111 {
112 var myProductsPage = Dynamicweb.Content.Services.Pages.GetPage(myProductsPageId);
113 if (myProductsPage != null && Dynamicweb.Frontend.SecurityHandler.IsCurrentUserAllowed(myProductsPage))
114 {
115 contextAttributes["my-products-page-id"] = myProductsPageId;
116 }
117 }
118
119 var shopContext = Model.Area.Name.ToLower().Contains("danol") ? ShopContext.Danol : ShopContext.Olgerdin;
120 contextAttributes["repository-name"] = shopContext == ShopContext.Olgerdin ? "Products" : "DanolShop";
121 contextAttributes["query-name"] = "Products";
122
123 if (Model.Area.Item != null)
124 {
125 contextAttributes["service-desk-email"] = Model.Area.Item.GetString("Email");
126 contextAttributes["service-desk-phone"] = Model.Area.Item.GetString("PhoneNumber");
127 }
128
129 var contextAttributesFormatted = string.Join(" ", contextAttributes.Select(attr => string.Format("{0}='{1}'", attr.Key, attr.Value)));
130
131 if (!Model.IsCurrentUserAllowed)
132 {
133 System.Web.HttpContext.Current.Response.Redirect("/Default.aspx?ID=" + GetPageIdByNavigationTag("LoginPage"));
134 }
135
136 var googleTagManagerID = Model.Area.Item?.GetString("Google_Tag_Manager_ID");
137
138
139 /* Restores ability to set background image from Website settings which Ölgerðin & Danól use for Holidaythemes */
140 var layoutStyles = "";
141 if (Model.Area.Item != null)
142 {
143
144 var styles = new Dictionary<string, string>();
145 var image = Model.Area.Item.GetString("Background_Image");
146 if (!string.IsNullOrWhiteSpace(image))
147 {
148 styles.Add("background-image", string.Format("url('{0}')", image));
149 }
150 var backgroundSize = Model.Area.Item.GetString("Background_Image_Size");
151 if (!string.IsNullOrWhiteSpace(backgroundSize))
152 {
153 styles.Add("background-size", backgroundSize);
154 }
155
156 var backgroundRepeat = Model.Area.Item.GetString("Background_Image_Repeat");
157 if (!string.IsNullOrWhiteSpace(backgroundRepeat))
158 {
159 styles.Add("background-repeat", backgroundRepeat);
160 }
161
162 layoutStyles = string.Join(";", styles.Select(prop => string.Format("{0}:{1}", prop.Key, prop.Value)).ToArray());
163 }
164
165 var toast = "";
166 var toastType = "success";
167
168 var janusLoginResults = System.Web.HttpContext.Current.Session["Janus_Activation_Success"];
169 if (janusLoginResults != null && Dynamicweb.Security.UserManagement.User.GetCurrentFrontendUser() != null)
170 {
171 System.Web.HttpContext.Current.Session.Remove("Janus_Activation_Success");
172 toast = Translate("Rafræn skilríki hafa verið virkjuð");
173 }
174
175 var globalPopup = GetPageIdByNavigationTag("GlobalPopup");
176
177 }
178
179 <!DOCTYPE html>
180 <html lang="@Pageview.Area.CultureInfo.TwoLetterISOLanguageName">
181 <head>
182 <meta charset="utf-8" />
183 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
184 <meta name="PageID" value="@Model.ID" />
185 @Model.MetaTags
186
187 @if (!string.IsNullOrWhiteSpace(googleTagManagerID))
188 {
189 <script>
190 (function (w, d, s, l, i) {
191 w[l] = w[l] || []; w[l].push({
192 'gtm.start':
193 new Date().getTime(), event: 'gtm.js'
194 }); var f = d.getElementsByTagName(s)[0],
195 j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true
196 ; j.defer = true; j.src =
197 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f);
198 })(window, document, 'script', 'dataLayer', '@(googleTagManagerID)');
199 </script>
200 }
201 <title>@Model.Title - @(shopContext == ShopContext.Olgerdin ? "Ölgerðin Egill Skallagrímsson" : "Danól") </title>
202 <style>
203 [v-cloak] {
204 display: none;
205 }
206 </style>
207 <link rel="shortcut icon" type="image/x-icon" href="@Model.Area.Item.GetString("Favicon")" />
208
209 @* Legacy scripts *@
210 <script src="/Files/Templates/Designs/OlgerdinVefverslun/JS/Libraries/Prod_Jquery-3.3.1.js" defer></script>
211 <script src="/Files/Templates/Designs/OlgerdinVefverslun/JS/Libraries/owl.carousel.min.js" defer></script>
212 <script src="/Files/Templates/Designs/OlgerdinVefverslun/JS/Libraries/typeahead-0.11.1.js" defer></script>
213 @if (useViteLocalModule)
214 {
215 @vite.RenderModuleAssets()
216 }
217 else
218 {
219 @vite.RenderManifestAssets()
220 }
221
222 @* Enable injecting scripts/styles for further down in DW Template renderer, see Files\Templates\eCom7\CheckoutHandler\Borgun3D\Post\Post.cshtml *@
223 @RenderSnippet("MasterHeadEnd")
224 </head>
225
226 <body class="theme theme--@shopContext.ToString().ToLower() scrollbar scrollbar--thick">
227 @{
228 var cacheHit = System.Runtime.Caching.MemoryCache.Default.Get("RUID");
229 if (cacheHit != null)
230 {
231 var ruidInCache = (string)cacheHit;
232
233 if (!string.IsNullOrWhiteSpace(ruidInCache))
234 {
235 <input type="hidden" id="RUID" value="@ruidInCache" />
236 System.Runtime.Caching.MemoryCache.Default.Remove("RUID");
237 }
238 }
239 if (Model.CurrentUser != null)
240 {
241 <input type="hidden" id="UserId" value="@Model.CurrentUser.ID" />
242 }
243 }
244 @if (!string.IsNullOrWhiteSpace(googleTagManagerID))
245 {
246 <noscript>
247 <iframe src="https://www.googletagmanager.com/ns.html?id=@(googleTagManagerID)"
248 height="0" width="0" style="display:none;visibility:hidden"></iframe>
249 </noscript>
250 }
251 <div id="app" v-cloak>
252 <nav-provider :page-index='@Newtonsoft.Json.JsonConvert.SerializeObject(pageIndex)'>
253 <dynamicweb-context-provider @contextAttributesFormatted>
254 <nav-scroll-top-button></nav-scroll-top-button>
255 <web-chat-button></web-chat-button>
256 @Navigation.RenderNavigation("Navigation/Navbar.cshtml", new Dynamicweb.Frontend.Navigation.NavigationSettings()
257 {
258 StartLevel = 1,
259 StopLevel = 99,
260 ExpandMode = Dynamicweb.Frontend.Navigation.ExpandMode.All
261 })
262
263 @{
264 var topPage = Dynamicweb.Content.Services.Pages.GetPage(Model.TopPage.ID);
265 var renderMegamenu = topPage.NavigationTag.Contains("Megamenu");
266
267 if (renderMegamenu)
268 {
269 <div class="legacy">
270 <div class="megamenu-desktop">
271 @Navigation.RenderNavigation("Navigation/Megamenu.cshtml", new Dynamicweb.Frontend.Navigation.NavigationSettings()
272 {
273 StartLevel = 2,
274 ExpandMode = Dynamicweb.Frontend.Navigation.ExpandMode.All,
275 RootPageId = topPage.ID
276 })
277 </div>
278 </div>
279 }
280 }
281
282 <layout-master @(renderMegamenu ? "megamenu" : "") style="@layoutStyles">
283 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
284
285
286
287 @functions
288 {
289 string GetPageStyles()
290 {
291 var styles = new Dictionary<string, string>();
292
293 var image = Model.PropertyItem.GetString("Background_Image");
294 if (!string.IsNullOrWhiteSpace(image))
295 {
296 styles.Add("background-image", string.Format("url('{0}')", image));
297 }
298 var backgroundSize = Model.PropertyItem.GetString("Background_Image_Size");
299 if (!string.IsNullOrWhiteSpace(backgroundSize))
300 {
301 styles.Add("background-size", backgroundSize);
302 }
303
304 var backgroundRepeat = Model.PropertyItem.GetString("Background_Image_Repeat");
305 if (!string.IsNullOrWhiteSpace(backgroundRepeat))
306 {
307 styles.Add("background-repeat", backgroundRepeat);
308 }
309
310 return string.Join(";", styles.Select(prop => string.Format("{0}:{1}", prop.Key, prop.Value)).ToArray());
311 }
312 }
313
314 <legacy-provider :is-enabled="true" :is-page="true">
315 <div class="frontPage" style="@GetPageStyles()">
316 <div>
317 @Model.Placeholder("bannerPlaceholder", "Banner Placeholder", "sort:2")
318 </div>
319 <div>
320 @Model.Placeholder("mainContentPlaceholder", "Main Content Placeholder", "default:true;sort:1")
321 </div>
322 </div>
323 </legacy-provider>
324 </layout-master>
325 @Navigation.RenderNavigation("Navigation/Footer.cshtml", new Dynamicweb.Frontend.Navigation.NavigationSettings()
326 {
327 StartLevel = 1,
328 StopLevel = 99,
329 ExpandMode = Dynamicweb.Frontend.Navigation.ExpandMode.All,
330 RootNavigationTag = "Footer",
331 Parameters = new Dictionary<string, object>()
332 {
333 {"serviceDeskNumber", Model.Area.Item.GetString("PhoneNumber") },
334 {"serviceDeskText", Model.Area.Item.GetString("Text_1") },
335 {"companyInformation", Model.Area.Item.GetString("Text_2") }
336 }
337 })
338 @{
339 var currentUser = Dynamicweb.Security.UserManagement.User.GetCurrentFrontendUser();
340 var userManagementService = new UserManagementService();
341
342 if (currentUser != null && !currentUser.IsCustomerUser())
343 {
344 IEnumerable<User> usersForSelection = userManagementService.GetCustomerUsersForUser(currentUser.ID, Pageview.Area.EcomShopId).Result;
345 if (usersForSelection.Count() > 0)
346 {
347 <select-account-prompt></select-account-prompt>
348 }
349 else if (Model.Item == null || Model.Item.SystemName != "UserPage")
350 {
351 var userManagementPageId = GetPageIdByNavigationTag("Advania_UserManagement");
352 if (userManagementPageId > 0)
353 {
354 var userManagementItem = Dynamicweb.Content.Services.Items.GetItemByPageId(userManagementPageId, false);
355 if (userManagementItem != null)
356 {
357 int companyAccessAuthParagraphId = -1;
358 object companyAccessAuthObj;
359 if (userManagementItem.TryGetValue("Company_Access_Auth_Paragraph_Id", out companyAccessAuthObj) && companyAccessAuthObj != null)
360 {
361 companyAccessAuthParagraphId = Dynamicweb.Core.Converter.ToInt32(companyAccessAuthObj.ToString());
362 }
363
364 if (companyAccessAuthParagraphId > 0)
365 {
366 <auth-company-access-required-modal>
367 @RenderParagraphContent(companyAccessAuthParagraphId)
368 </auth-company-access-required-modal>
369 }
370 }
371 }
372 }
373 }
374 }
375 <svg-defs></svg-defs>
376 </dynamicweb-context-provider>
377 </nav-provider>
378 <toasts toast="@toast" toast-type="@toastType"></toasts>
379 @if (globalPopup != 0)
380 {
381 @RenderPageContent(globalPopup)
382 }
383 </div>
384 </body>
385 </html>
386 @* Utility snipper if we need to inject code outside of Master HTML context, like html blocks with injected <script> tags. @see Files/Templates/eCom7/CheckoutHandler/Borgun3D/3DS/ThreeDS.cshtml *@
387 @RenderSnippet("MasterEnd")