using System;
using System.Web;
using Telligent.Evolution.Extensibility;
using Telligent.Evolution.Extensibility.Api.Version1;
using Telligent.Evolution.Extensibility.Urls.Version1;
using Telligent.Evolution.Extensibility.Version1;
namespace Telligent.Evolution.Examples
{
public class CustomPageExamples : INavigable, ITranslatablePlugin
{
private ITranslatablePluginController _translationController;
void INavigable.RegisterUrls(IUrlController controller)
{
object userNameConstraints = new { UserName = @"^[a-zA-Z0-9\-\._]+$" };
controller.AddPage("page-members-custom", "members/{UserName}/custompage", null, userNameConstraints, "page-members-custom", new PageDefinitionOptions()
{
DefaultPageXml = @"
",
TitleFunction = () => _translationController.GetLanguageResourceValue("page-members-custom"),
DescriptionFunction = () => _translationController.GetLanguageResourceValue("page-members-custom-description"),
ParseContext = ParseUserContext
});
}
private void ParseUserContext(PageContext context)
{
var userName = context.GetTokenValue("UserName");
if (userName != null)
{
var usersApi = Apis.Get();
string decodedUserName = PublicApi.Url.DecodeFileComponent(userName.ToString());
var user = usersApi.Get(new UsersGetOptions() { Username = decodedUserName });
ContextItem contextItem = null;
if (user != null && !user.HasErrors())
{
contextItem = new ContextItem()
{
TypeName = "User",
ApplicationId = user.ContentId,
ApplicationTypeId = usersApi.ContentTypeId,
ContainerId = user.ContentId,
ContainerTypeId = usersApi.ContentTypeId,
ContentId = user.ContentId,
ContentTypeId = usersApi.ContentTypeId,
Id = user.Id.ToString()
};
}
else
{
if (usersApi.AccessingUser.IsSystemAccount.Value)
{
var url = Apis.Get().LogIn(new CoreUrlLoginOptions() { ReturnToCurrentUrl = true });
HttpContext.Current.Response.Redirect(url);
}
else
{
throw new CustomException(String.Format(_translationController.GetLanguageResourceValue("UserNotFoundException"), decodedUserName));
}
}
if (contextItem != null)
context.ContextItems.Put(contextItem);
}
}
Translation[] ITranslatablePlugin.DefaultTranslations
{
get
{
var t = new Translation("en-us");
t.Set("page-members-custom", "Sample User Page");
t.Set("page-members-custom-description", "Shows a page at the url members/{username}/custompage.");
t.Set("UserNotFoundException", "User {0} not found.");
return new Translation[] { t };
}
}
public void SetController(ITranslatablePluginController controller)
{
_translationController = controller;
}
public string Description
{
get { return "Define a custom user page"; }
}
public void Initialize()
{
}
public string Name
{
get { return "Custom User Page Example"; }
}
}
public class CustomException : Exception, Telligent.Evolution.Extensibility.Version1.IUserRenderableException
{
public CustomException() { }
public CustomException(string message) : base(message) { }
public string GetUserRenderableMessage()
{
return this.Message;
}
}
}