using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Web.UI.WebControls;
using Telerik.Cms.Engine;
using Telerik.Cms.Engine.ContentViewFiltering;
using Telerik.Cms.Engine.WebControls;
using Telerik.Libraries;
/// <summary>
/// Summary description for CustomDownloadList
/// </summary>
public class CustomDownloadList: DownloadList
{
//set template path for the control template
public override string ItemListTemplatePath
{
get
{
return "~/CustomControls/ControlTemplates/CustomDonwloadList.ascx";
}
set
{
base.ItemListTemplatePath = value;
}
}
public override string ProviderName
{
get
{
return "Libraries";
}
set
{
base.ProviderName = value;
}
}
//here we populate our libraries repeater with selected libraries
protected override void CreateContentList()
{
ContentFilterBuilder filterBuilder = new ContentFilterBuilder(this);
libraryManager = new LibraryManager();
IList libraries = null;
Guid[] parentIds = filterBuilder.ParseParentsFilter();
if (parentIds.Count()>0)
{
List<ILibrary> libs = new List<ILibrary>();
foreach (Guid id in parentIds)
{
libs.Add(libraryManager.GetLibrary(id));
}
libraries = libs.ToList();
}
else
{
libraries = libraryManager.GetAllLibraries("Image", false);
}
//sort libraries in ascendding order by name
IQueryable<ILibrary> librariesQ = libraries.Cast<ILibrary>().AsQueryable<ILibrary>();
var sortedLibraries = from list in librariesQ
orderby list.Name
select list;
LibrariesRepeater.ItemDataBound+=new RepeaterItemEventHandler(LibrariesRepeater_ItemDataBound);
LibrariesRepeater.DataSource = sortedLibraries.ToList();
LibrariesRepeater.DataBind();
}
//for each seleceted library create the table containing content items
void LibrariesRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
ILibrary library = (ILibrary)e.Item.DataItem;
if (library.ItemsCount > 0)
{
Literal LibraryName = (Literal)e.Item.FindControl("LibraryName");
Repeater ItemsRepeater = (Repeater)e.Item.FindControl("itemsRepeater");
if (ItemsRepeater != null && LibraryName!=null)
{
LibraryName.Text = library.Name;
IList items = library.GetItems();
ItemsRepeater.ItemDataBound += new RepeaterItemEventHandler(ItemsRepeater_ItemDataBound);
ItemsRepeater.DataSource = items;
ItemsRepeater.DataBind();
}
}
}
}
//set meta data for each item displayed in the downloads table
void ItemsRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
HyperLink DownloadLink = (HyperLink)e.Item.FindControl("DownloadLink");
Literal Title = (Literal)e.Item.FindControl("Title");
Literal Description = (Literal)e.Item.FindControl("Description");
Literal Extension = (Literal)e.Item.FindControl("Extension");
Label Author = (Label)e.Item.FindControl("Author");
Literal UploadDate = (Literal)e.Item.FindControl("UploadDate");
Literal Size = (Literal)e.Item.FindControl("Size");
Repeater Tags = (Repeater)e.Item.FindControl("Tags");
HyperLink FileFileDownloadLink = (HyperLink)e.Item.FindControl("FileDownloadLink");
IContent contentItem = (IContent)e.Item.DataItem;
if (contentItem.MimeType.StartsWith("Video", true, CultureInfo.InvariantCulture))
{
DownloadLink.NavigateUrl = base.ResolveUrl(string.Format("{0}?download=true", contentItem.UrlWithExtension));
}
else
{
DownloadLink.NavigateUrl = base.ResolveUrl(contentItem.UrlWithExtension);
}
FileFileDownloadLink.NavigateUrl = base.ResolveUrl(string.Format("{0}?download=true", contentItem.UrlWithExtension));
Title.Text = contentItem.GetMetaData("Name") as string;
Description.Text = contentItem.GetMetaData("Description") as string;
Extension.Text = contentItem.GetMetaData("Extension") as string;
Author.Text = contentItem.GetMetaData("Author") as string;
UploadDate.Text = contentItem.DateCreated.ToShortDateString();
Size.Text = contentItem.GetMetaData("Size").ToString();
long num;
long.TryParse(Size.Text, out num);
Size.Text = LibraryHelper.FormatSizeString(num);
Tags.ItemDataBound += new RepeaterItemEventHandler(Tags_ItemDataBound);
Tags.DataSource = libraryManager.GetTags(contentItem.ID);
Tags.DataBind();
}
}
void Tags_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
{
ITag dataItem = (ITag)e.Item.DataItem;
HyperLink link = (HyperLink)e.Item.FindControl("tagLink");
if (link != null)
{
link.Text = dataItem.TagName;
link.NavigateUrl = this.GetTagUrl(dataItem, this.ItemListUrl);
}
}
}
//get refference to the libraries repeater from control template
public Repeater LibrariesRepeater
{
get
{
return base.ListContainer.GetControl<Repeater>("librariesRepeater", false, Telerik.Framework.Web.TraverseMethod.BreadthFirst);
}
set
{
LibrariesRepeater = value;
}
}
private LibraryManager libraryManager;
}