Displaying Additional User Information in a Sitefinity Forum Post

November 21, 2013 Digital Experience

In this blog post I will show you how you could display additional user information in a Sitefinity forum post. This user information should be available as a custom field in the users’ profile.


Prerequisites:

Created custom field in the
users’ profile (for example: JobPosition)

Code explanation:

1.  We need to create a class for our custom field and inherit from Literal:

public class CustomField : Literal
{
    // we will implement our logic here
}

2.  Define the necessary variables and properties for post owner and custom field value.

           private string ownerId = null;
        private string myField = null;
 
        public string OwnerId
        {
            get{ return ownerId;}
            set{ ownerId = value;}
        }
 
        public string MyField
        {
            get{ return myField;}
            set{ myField = value;}
        }

3.  E
xtend the CreateChildControl method of Literal to get the post owner and the field value by overriding the standard ones:

protected override void CreateChildControls()
  {
      // get the current identity
      var identity = ClaimsManager.GetCurrentIdentity();
 
      // get information about the user from the properties of the ClaimsIdentityProxy object
      var userId = identity.UserId;
 
    // Get user and profile Manager
      UserProfileManager profileManager = UserProfileManager.GetManager();
      UserManager userManager = UserManager.GetManager();
 
    // Get current user
      User user = userManager.GetUser(userId);
 
    // Get the current user’s profile
      SitefinityProfile profile = null;
 
      if (user != null)
      {
          profile = profileManager.GetUserProfile<SitefinityProfile>(user);
      }
 
    // Get the value we are interested to
      var mySearchedField = profile.GetValue(myField).ToString();
 
    // This text will be displayed when we call the property.
      Text = mySearchedField;
 
    // Call the base method
      base.CreateChildControls();
  }

4. A
dd the create .cs file in the root project directory (in case of a custom folder, you need to update the respective references)

5. Build the project

6.  
Create a copy of your post widget

7. 
Register the new control by adding this code at the Register section of the post widget (or create a new post widget based on the built-in one, in order to have both versions):

<%@ Register TagPrefix=" myTagPrefix " Namespace="SitefinityWebApp" Assembly="SitefinityWebApp" %>

8. 
Add the following markup where you need your custom field:

<myTagPrefix:CustomField Text='<%# Eval("Content") %>' OwnerId='<%# Eval("Owner")%>' MyField='JobPosition' runat="server" />


This example works for a different number of fields in the profile, just replace the 'JobPosition' with the desired one.

You could download the complete code example of CustomField.

Svetoslav Manchev

Svetoslav Manchev is a Technical Support Officer at Telerik since 2013.