/*
Kooboo is a content management system based on ASP.NET MVC framework. Copyright 2009 Yardi Technology Limited.
This program is free software: you can redistribute it and/or modify it under the terms of the
GNU General Public License version 3 as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program.
If not, see http://www.kooboo.com/gpl3/.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Everest.CmsServices.Models;
using Everest.CmsServices.MvcHelper;
using Everest.Library.ExtensionMethod;
namespace Everest.CmsServices.DataRule{
public class ReferencingCountEvaluator : IDataRuleValueEvaluator
{
#region IDataRuleValueEvaluator Members
public Everest.CmsServices.Models.DataRuleValueType RuleType
{
get { return DataRuleValueType.GetContentCountByCategory; }
}
public object Evaluate(DataRuleContext context, Everest.CmsServices.Models.Cms_DataRule dataRule, TimeSpan? cacheTime)
{
var contentKey = ReferenceEvaluatorHelper.GetContentKey(dataRule.ReferencingContentId, context.QueryString);
if (string.IsNullOrEmpty(contentKey))
{
throw new ArgumentNullException("Reference ContentKey");
}
var folder = CachedData.GetLocalizedFolder(context.Application.ApplicationName, dataRule.FolderUUIDFromReference.Value);
int contentId;
if (int.TryParse(contentKey, out contentId))
{
return context.ContentService.GetContentCountByCategoryAndFolder(contentId, folder.FolderName, dataRule.ValueRule, context.QueryString,
cacheTime);
}
Guid guid;
if (GuidHelper.TryParseGuid(contentKey, out guid))
{
return context.ContentService.GetContentCountByCategoryAndFolder(guid,
folder.FolderName, dataRule.ValueRule, context.QueryString, cacheTime);
}
var content = context.ContentService.GetContentByUserKey(contentKey, null);
if (content == null)
{
throw new NullReferenceException(Resources.ContentByKeyNull);
}
return context.ContentService.GetContentCountByCategoryAndFolder((Guid)content["UUID"],
folder.FolderName, dataRule.ValueRule, context.QueryString, cacheTime);
}
#endregion
}
}
|