Skip to content

Instantly share code, notes, and snippets.

@sreekrishnan1993
Last active September 6, 2020 05:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sreekrishnan1993/1ab6781023cfdfac3021167ba4b0e94a to your computer and use it in GitHub Desktop.
Save sreekrishnan1993/1ab6781023cfdfac3021167ba4b0e94a to your computer and use it in GitHub Desktop.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="VersionedMediaCreateLanguageVersion.aspx.cs" Inherits="MyProject.sitecore.Admin.VersionedMediaCreateLanguageVersion" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Enter the Media folder ID or Media ID"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
<asp:Label ID="Label2" runat="server" Text="Enter the Source Language"></asp:Label>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<br />
<asp:Label ID="Label3" runat="server" Text="Enter the Target Language"></asp:Label>
<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</div>
</form>
</body>
</html>
using DocumentFormat.OpenXml.Drawing.Diagrams;
using Sitecore.Data;
using Sitecore.Data.Items;
using Sitecore.Data.Managers;
using Sitecore.Globalization;
using Sitecore.Resources.Media;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace MyProject.sitecore.Admin
{
public partial class VersionedMediaCreateLanguageVersion : System.Web.UI.Page
{
Database db = Sitecore.Configuration.Factory.GetDatabase("master");
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
var itemID = TextBox1.Text; //Either Specify the mparent media folder item ID or for single media item ID
var sourceLanguage = TextBox2.Text; // Source language in which langauge version is present
var targetLanguage = TextBox3.Text; //Target Language to which we need to create new langauge version if not exists
var item = db.GetItem(new Sitecore.Data.ID(itemID), Language.Parse(sourceLanguage));
if (item.TemplateID.Equals(new ID("{FE5DD826-48C6-436D-B87A-7C4210C7413B}"))) //If template is media folder
{
Sitecore.Diagnostics.Log.Info("If Loop", this);
var childItems = item.Axes.GetDescendants();
foreach (Item childItem in childItems)
{
if (!item.TemplateID.Equals(new ID("{FE5DD826-48C6-436D-B87A-7C4210C7413B}"))) //If template is versioned media item
{
var mediaItem = new MediaItem(childItem);
Stream stream = ConvertMediaItemToByteArray(mediaItem);
AddMediaItem(stream, mediaItem, Language.Parse(targetLanguage));
}
}
}
else
{
var mediaItem = new MediaItem(item);
Stream stream = ConvertMediaItemToByteArray(mediaItem);
AddMediaItem(stream, mediaItem, Language.Parse(targetLanguage));
}
}
public Stream ConvertMediaItemToByteArray(MediaItem mediaItem)
{
var blobField = mediaItem.InnerItem.Fields["blob"];
Stream stream = blobField.GetBlobStream();
return stream;
}
public Item AddMediaItem(Stream stream, MediaItem mediaItem, Language language)
{
try
{
var mediaExtension = mediaItem.Extension;
var fullMediaPath = mediaItem.InnerItem.Paths.FullPath;
var title = !string.IsNullOrEmpty(mediaItem.Title) ? mediaItem.Title : mediaItem.Name;
var creator = new MediaCreator();
var item = db.GetItem(mediaItem.ID, language);
if (!HasLanguageVersion(item, language))
{
var newItemVersion = item.Versions.AddVersion();
var newMediaItem = new MediaItem(newItemVersion);
var media = MediaManager.GetMedia(newMediaItem);
media.SetStream(stream, mediaExtension);
newItemVersion.Editing.BeginEdit();
newItemVersion.Fields["Title"].Value = title;
newItemVersion.Fields["Width"].Value = mediaItem.InnerItem["Width"];
newItemVersion.Fields["Height"].Value = mediaItem.InnerItem["Height"];
newItemVersion.Fields["Alt"].Value = mediaItem.InnerItem["Alt"];
newItemVersion.Editing.EndEdit();
return newItemVersion;
}
return null;
}
catch (Exception ex)
{
return null;
}
}
private bool HasLanguageVersion(Item item, Language targetLanguage)
{
var versionCount = ItemManager.GetVersions(item, targetLanguage).Count;
return versionCount > 0;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment