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; } } }