DevReach site: Implement the code behind

NEW TO SITEFINITY?

You then implement the MySessions widget code behind, by using the following code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI.WebControls;
using Telerik.Sitefinity.Data.ContentLinks;
using Telerik.Sitefinity.DynamicModules;
using Telerik.Sitefinity.DynamicModules.Model;
using Telerik.Sitefinity.Model;
using Telerik.Sitefinity.Model.ContentLinks;
using Telerik.Sitefinity.RelatedData;
using Telerik.Sitefinity.Security;
using Telerik.Sitefinity.Security.Model;
using Telerik.Sitefinity.Utilities.TypeConverters;
using Telerik.Sitefinity.Web.UI;
namespace SitefinityWebApp
{
public class MySessions : SimpleView
{
private const string SessionType = "Telerik.Sitefinity.DynamicTypes.Model.DevReach.Session";
private IList<ContentLink> mySessions = null;
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
var manager = DynamicModuleManager.GetManager();
var repeater = this.Controls.OfType<Repeater>().First();
var clManager = ContentLinksManager.GetManager();
mySessions = clManager.GetContentLinks().Where(link =>
link.ChildItemType == typeof(User).FullName &&
link.ChildItemId == SecurityManager.CurrentUserId &&
link.ParentItemType == SessionType).ToList();
var items = manager.GetDataItems(TypeResolutionService.ResolveType(SessionType)).Where(item => item.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Live);
repeater.DataSource = items;
repeater.DataBind();
}
protected void CommandBtn_Click(Object sender, CommandEventArgs e)
{
var sessionId = Guid.Parse(e.CommandArgument.ToString());
var dynamicModuleManager = DynamicModuleManager.GetManager();
var myType = TypeResolutionService.ResolveType(SessionType);
var masterItem = dynamicModuleManager.GetDataItem(myType, sessionId);
var liveItem = dynamicModuleManager.GetDataItems(myType).FirstOrDefault(item => item.OriginalContentId == sessionId && item.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Live);
if (e.CommandName == "Attend")
{
liveItem.CreateRelation(SecurityManager.CurrentUserId, null, typeof(User).FullName, "Attendees");
var currentAttendeesCount = liveItem.GetValue<decimal>("CurrentAttendees");
liveItem.SetValue("CurrentAttendees", currentAttendeesCount + 1);
masterItem.SetValue("CurrentAttendees", currentAttendeesCount + 1);
}
else
{
liveItem.DeleteRelation(SecurityManager.CurrentUserId, null, typeof(User).FullName, "Attendees");
var currentAttendeesCount = liveItem.GetValue<decimal>("CurrentAttendees");
if (currentAttendeesCount > 0)
{
liveItem.SetValue("CurrentAttendees", currentAttendeesCount - 1);
masterItem.SetValue("CurrentAttendees", currentAttendeesCount - 1);
}
}
dynamicModuleManager.SaveChanges();
}
protected bool CheckIsAttended(object item)
{
DynamicContent data = (DynamicContent)item;
var itemId = data.OriginalContentId;
if (mySessions.Count == 0)
return false;
return mySessions.FirstOrDefault(link => link.ParentItemId == itemId) != null;
}
protected override void InitializeControls(GenericContainer container)
{
// Initialize controls
}
}
}
NOTE:
  • liveItem.CreateRelation(SecurityManager.CurrentUserId, null, typeof(User).FullName, "Attendees") - relates an item to the current live session item. The Attendees is the component property name of the relation. At this point, you create a relation between a dynamic item and current logged in user. The CurrentAttendees property of the dynamic item is used to store the count of the users attending the specified session. 
  • liveItem.DeleteRelation(SecurityManager.CurrentUserId, null, typeof(User).FullName, "Attendees") – relates an item to the current live session item. The Attendees field is not an actual field, as via the Related data field you cannot relate a field to a User content type. In the code above, the  Attendees field is a fictitious field used as a component property name of the relation. The created relation is not be visible in Sitefinity backend. You can only access it is via the Related data API using Attendees as field name. The CurrentAttendees property of the dynamic item is used to store the count of the users attending the specified session.

Want to learn more?

Increase your Sitefinity skills by signing up for our free trainings. Get Sitefinity-certified at Progress Education Community to boost your credentials.

Get started with Integration Hub | Sitefinity Cloud | Sitefinity SaaS

This free lesson teaches administrators, marketers, and other business professionals how to use the Integration hub service to create automated workflows between Sitefinity and other business systems.

Web Security for Sitefinity Administrators

This free lesson teaches administrators the basics about protecting yor Sitefinity instance and its sites from external threats. Configure HTTPS, SSL, allow lists for trusted sites, and cookie security, among others.

Foundations of Sitefinity ASP.NET Core Development

The free on-demand video course teaches developers how to use Sitefinity .NET Core and leverage its decoupled architecture and new way of coding against the platform.

Was this article helpful?