Skip to content

Instantly share code, notes, and snippets.

@davidknipe
davidknipe / DamAltTextHelper.cs
Last active March 28, 2024 11:00
Optimizely DAM alt text helper for Optimizely CMS 12
using EPiServer.Cms.WelcomeIntegration.Core;
using EPiServer.Cms.WelcomeIntegration.Core.Internal;
using EPiServer.Cms.WelcomeIntegration.UI;
using EPiServer.Cms.WelcomeIntegration.UI.Internal;
namespace OptimzelyDamHelpers;
// Add following to Startup.cs in ConfigureServices(IServiceCollection services)
//
// services.AddSingleton<IDamAltTextHelper, DamAltTextHelper>();
EPiServer.Cms.WelcomeIntegration.Core.IDAMAssetIdentityResolver _damAssetIdentityResolver;
var damUrl = "https://images2.welcomesoftware.com/assets/UrlOfImageFromOptimizely.com";
DAMMetadata damMetadata = new DAMMetadata("Title of the asset", DAMAssetType.Image); // Swap to .Video if appropriate
var mappedIdentity = _damAssetIdentityResolver.Get(new Uri(damUrl), JsonSerializer.Serialize<DAMMetadata>(damMetadata), true);
var contentLinkToSave = mappedIdentity.ContentLink;
@davidknipe
davidknipe / Startup.cs
Created May 2, 2023 14:04
How to configure the Optimizely DAM picker to allow videos
// Omitted for brevity
namespace YourApplication
{
public class Startup
{
// Omitted for brevity
public Startup(IWebHostEnvironment webHostingEnvironment, IConfiguration configuration)
{
@davidknipe
davidknipe / OdpOrderConfirmationTrackingInit.cs
Last active May 27, 2021 10:59
Starter code to send order confirmation events to Optimizely Data Platform
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Text;
using System.Web;
using EPiServer.Commerce.Order;
using EPiServer.Framework;
using EPiServer.Framework.Initialization;
using EPiServer.ServiceLocation;
@davidknipe
davidknipe / odp-tracking.js
Last active June 1, 2021 08:08
Optimizely Data Platform tracking script for Foundation sites
// This pops up a modal form when a certain element is clicked (element with id of 'joinButton' in this case)
if (document.getElementById('joinButton')) {
var joinButton = document.getElementById('joinButton');
joinButton.addEventListener("click",
function (event) {
zaius.dispatch(
'web',
'showContent', {
contentId: 'mosey_club_modal_form_message_a_web_modal', // this is the id of the modal from ODP > Campaigns > edit campaign > Content Id
target: {
using System;
using System.Collections.Generic;
using EPiServer.Core;
using EPiServer.Framework;
using EPiServer.Framework.Initialization;
using EPiServer.Shell.ObjectEditing;
namespace Foundation.Features
{
public class ReadonlyBlockMetadataExtender : IMetadataExtender
using System;
using System.Collections.Generic;
using System.Linq;
using EPiServer;
using EPiServer.Core;
using EPiServer.Data.Entity;
using EPiServer.DataAbstraction;
using EPiServer.DataAccess;
using EPiServer.Framework;
using EPiServer.Framework.Initialization;
using EPiServer.Commerce.Order;
using EPiServer.Framework;
using EPiServer.Framework.Initialization;
namespace Foundation._EuromonitorExample
{
[InitializableModule]
[ModuleDependency(typeof(EPiServer.Web.InitializationModule))]
public class OrderEventsInit : IInitializableModule
{
@davidknipe
davidknipe / CreateGetaCategoriesFromEpiserverCategoriesJob.cs
Created October 10, 2019 15:39
Create Geta Categories based on existing Episerver category structure
using System.Collections.Generic;
using System.Linq;
using EPiServer;
using EPiServer.Core;
using EPiServer.DataAbstraction;
using EPiServer.PlugIn;
using EPiServer.Scheduler;
using Foundation.Cms.Categories;
using Geta.EpiCategories;
using Geta.EpiCategories.Extensions;
@davidknipe
davidknipe / MigrateContentToGetaCategoriesJob.cs
Last active October 13, 2019 23:31
Migrates content to use Geta Categories. Note will only migrate categories that exist in the Geta Categories structure.
using System.Collections.Generic;
using System.Linq;
using EPiServer;
using EPiServer.Core;
using EPiServer.DataAbstraction;
using EPiServer.PlugIn;
using EPiServer.Scheduler;
using EPiServer.Security;
using Foundation.Cms.Categories;
using Geta.EpiCategories;