public ArrayList LoadBanners(int PortalId, int ModuleId, int BannerTypeId, string GroupName, int Banners)
{
if (GroupName == null)
{
GroupName = Null.NullString;
}
//set cache key
string cacheKey = string.Format(DataCache.BannersCacheKey, PortalId, BannerTypeId, GroupName);
//get list of active banners
var bannersList = CBO.GetCachedObject<List<BannerInfo>>(new CacheItemArgs(cacheKey, DataCache.BannersCacheTimeOut, DataCache.BannersCachePriority, PortalId, BannerTypeId, GroupName),
LoadBannersCallback);
//create return collection
var arReturnBanners = new ArrayList(Banners);
if (bannersList.Count > 0)
{
if (Banners > bannersList.Count)
{
Banners = bannersList.Count;
}
//set Random start index based on the list of banners
int intIndex = new Random().Next(0, bannersList.Count);
//set counter
int intCounter = 1;
while (intCounter <= bannersList.Count && arReturnBanners.Count != Banners)
{
//manage the rotation for the circular collection
intIndex += 1;
if (intIndex > (bannersList.Count - 1))
{
intIndex = 0;
}
//get the banner object
BannerInfo objBanner = bannersList[intIndex];
//add to return collection
arReturnBanners.Add(objBanner);
//update banner attributes
objBanner.Views += 1;
if (Null.IsNull(objBanner.StartDate))
{
objBanner.StartDate = DateTime.Now;
}
if (Null.IsNull(objBanner.EndDate) && objBanner.Views >= objBanner.Impressions && objBanner.Impressions != 0)
{
objBanner.EndDate = DateTime.Now;
}
_dataService.UpdateBannerViews(objBanner.BannerId, objBanner.StartDate, objBanner.EndDate);
//expire cached collection of banners if a banner is no longer active
if (!IsBannerActive(objBanner))
{
DataCache.RemoveCache(cacheKey);
}
intCounter += 1;
}
}
return arReturnBanners;
}