Cumulus Image Provider
Teknisk information för utvecklare
Se även redaktörsguiden för information om hur tillägget används i redaktörsgränssnittet.
Konfiguration
Grundläggande inställningar
Följande inställningar anges genom exempelvis web.config eller Azure-portalen:
<appSettings>
<add key="Cumulus.Api.BaseUrl" value="http://Cumulus.local/CIP/" />
<add key="Cumulus.Api.AuthenticationHeader" value="Basic [Base64-encoded username and password]" />
<add key="Cumulus.Api.ProxyUrl" value="http://proxy01.ica.se:8080" />
<add key="Cumulus.Api.MaxUploadSize" value="500000000" />
</appSettings>
Dynamiska inställningar
Detta event används för att justera Cumulus-inställningar när de laddas (kan ske många gånger, eventuella uppslag bör cachas om möjligt:
CumulusSettingsFactory.LoadSettings += CumulusSettings_LoadSettings;
Följande exempel anger katalog- och vynamn i Cumulus och lägger till relevanta kategorier baserat på nuvarande användare:
private void CumulusSettings_LoadSettings(object sender, CumulusSettingsEventArgs e)
{
e.View = "fields"; // Namn på Cumulus-vy som ska användas
e.PrimaryCatalog = "Reklamproduktion"; // Primärkatalog, exempelvis för att exkludera specifikt prefix från Cloudinary-URL:er
e.SquareSearchResultThumbnails = true; // Fyrkantiga tumnaglar i sökresultat, skulle kunna vara en användarspecifik inställning
// Filtrera på aktuell användares butikstillhörighet, om någon
var store = GetStore();
// Instans för att hämta översättningar av kategorinamn
var localization = LocalizationService.Current;
if (store != null) // Lägg till kategori för aktuell användares butik
{
e.Categories.Add(new CategoryOption("Episerver", $"Rotkategori:Handlarbilder:{store.name} [{store.id}]", localization.GetString("/Cumulus/Categories/OwnStore"), true));
}
else // Ingen butikstillhörighet, så vi antar att det rör en central webbredaktör som ska ha tillgång till webbspecifika bilder och samtliga butiker
{
// Eftersom vi hämtar butikskategorier från Cumulus så cachar vi resultatet för att undvika anrop varje gång en Cumulus-klient instantieras
// Vi cachar per språk eftersom vi använder språkspecifika kategorinamn
var cacheKey = $"CumulusCategories-{Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName}";
var categories = CacheManager.Get(cacheKey) as IList<ICategoryOption>;
if (categories == null) // Inga kategorier cachade
{
categories = new List<ICategoryOption>();
var client = e.Client; // Vi använder CumulusClient-instans baserad på aktuella inställningar för att undvika oändlig loop när inställningar hämtas (eftersom det triggar denna event handler)
// Hämta alla underkategorier under rotkategorin för butiksbilder
var storesRootCategory = Task.Run(() => client.GetCategory("Episerver", "Rotkategori:Handlarbilder")).Result;
// Lägg till kategori för webbspecifika bilder (blir en radioknapp i gränssnittet)
categories.Add(new CategoryOption("Episerver", "Rotkategori:Episerver", localization.GetString("/Cumulus/Categories/Website"), true));
// Lägg till kategorigrupp som innehåller alla butiker (blir en dropdown i gränssnittet)
categories.Add(new CategoryOptionGroup(localization.GetString("/Cumulus/Categories/AllStores"), storesRootCategory.SubCategories.Select(c => new CategoryOption("Episerver", $"Rotkategori:Handlarbilder:{c.CategoryName}", c.CategoryName, true))));
// Lägg till kategori för produktbilder
categories.Add(new CategoryOption("Reklamproduktion", "$Categories", localization.GetString("/Cumulus/Categories/Products"), false));
CacheManager.Insert(cacheKey, categories, new CacheEvictionPolicy(TimeSpan.FromMinutes(5), CacheTimeoutType.Absolute));
}
e.Categories = categories;
}
// Lägg till gemensam kategori som är tillgänglig för samtliga redaktörer
e.Categories.Add(new CategoryOption("Episerver", "Rotkategori:Gemensamma", localization.GetString("/Cumulus/Categories/Shared"), false));
}
Notera: Eftersom ovan kommer att köras varje gång inställningar hämtas, är det viktigt att hålla nere exekveringstiden till ett minimum för att undvika försämrad prestanda. Använd cache där det är lämpligt.
Anpassa hur bilder sparas
Detta event används för att anpassa hur bilder sparas till Cumulus vid uppladdning:
CumulusClient.Saving += CumulusClient_Saving;
Följande exempel lägger på ett prefix på alla bilders filnamn, om aktuell användare tillhör en specifik butik:
private void CumulusClient_Saving(object sender, CumulusUploadEventArgs e)
{
var store = GetStore();
// Bilder som laddas upp av butik ska ha butikens ID som prefix i namnet
if(store != null)
{
e.Name = $"{store.id}__{e.Name}";
}
}
Filtrera sökresultat
Följande event kan användas för att filtrera sökresultat innan de visas för användaren:
CumulusClient.SearchCompleted += CumulusClient_SearchCompleted;
private void CumulusClient_SearchCompleted(object sender, CumulusSearchEventArgs e)
{
// Exempel: inkludera som mest 5 sökträffar
e.SearchResult = e.SearchResult.Take(5).ToList();
}