Click here to Skip to main content
15,892,737 members
Articles / Web Development / ASP.NET

Parichay (A Simple & Small Asp.Net MVC Social Network Starter)

Rate me:
Please Sign up or sign in to vote.
4.77/5 (20 votes)
22 Feb 2012GPL316 min read 207.2K   7.2K   48  
Parichay (A Simple & Small Asp.Net MVC Social Network Starter)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Parichay.Data.Entity;



namespace Parichay.MVC.Controllers
{
    
    public class GroupController : BaseController
    {

        public ActionResult Index()
        {
            Models.GroupHomeModel model = new Models.GroupHomeModel();

            //to do => add logic to show only publicly visible and my owned groups. right now showing all
            model.allGroups = Data.Helper.NHibernateHelper.ConvertToListOf<MemberGroups>(Data.Helper.NHibernateHelper.Find("select distinct g from MemberGroups g where ((g.Visibility!=0)or(g.Visibility is not null))", null, null, false));

            model.myGroups = Data.Helper.NHibernateHelper.ConvertToListOf<MemberGroups>(Data.Helper.NHibernateHelper.Find("select g from MemberGroups g join g.FKGrpMmbrsGrp gmbr where gmbr.MemberDetails.Id=? order by g.Createdon desc", LoggedInUserKey, NHibernate.NHibernateUtil.Int32,false));


            return View(model);
        }

        //
        // GET: /Group/Details/5

        public ActionResult Details(int id)
        {
            Models.GroupDetailsModel model = new Models.GroupDetailsModel();
            model.groupDetails = Data.Helper.NHibernateHelper.UniqueResult<MemberGroups>(null, "Id", id);
            model.groupMessages = Data.Helper.NHibernateHelper.ConvertToListOf<MemberGroupmessages>(Data.Helper.NHibernateHelper.Find("select m from MemberGroupmessages m where m.Group.Id=? and (m.Parent is null or m.Parent=0)", id, NHibernate.NHibernateUtil.Int32,false));
            model.loggedInUserId = LoggedInUserKey;
            return View(model);
        }

        [HttpPost]
        public ActionResult Post(int id)
        {
            return View("Post", (new MemberGroupmessages() { Group = new MemberGroups() { Id = id } }));
        }

        public ActionResult Reply(int id, int rId, int gId)
        {
            return View(new MemberGroupmessages() { Parent = new MemberGroupmessages() { Id = id }, Recipient = new MemberDetails() { Id = rId }, Group = new MemberGroups() { Id = gId } });
        }

        [HttpPost]
        public ActionResult PostMessage(MemberGroupmessages model)
        {
            try
            {

                MemberGroupmessages grpMsg = new MemberGroupmessages();

                //grpMsg = Models.ModelMapper.Map(model);

                grpMsg.Group = Data.Helper.NHibernateHelper.UniqueResult<MemberGroups>(null, "Id", model.Group.Id);
                grpMsg.Sender = Data.Helper.NHibernateHelper.UniqueResult<MemberDetails>(null, "Id", LoggedInUserKey);
                grpMsg.Recipient = grpMsg.Sender;//Data.Helper.NHibernateHelper.UniqueResult<MemberDetails>(null, "Id", model.Recipient.Id);
                //model.Parentid = 0;
                //model.Isprivate = 0U;
                grpMsg.bIsprivate = false;
                grpMsg.Text = model.Text;
                grpMsg.Type = 0;
                grpMsg.Createdon = DateTime.Now;
                grpMsg.Modifiedon = DateTime.Now;
                grpMsg.Source = "parichay";
                // TODO: Add insert logic here

                if (model.Parent != null)
                {
                    grpMsg.Parent = Data.Helper.NHibernateHelper.UniqueResult<MemberGroupmessages>(null, "Id", model.Parent.Id);

                }
                if (model.Recipient != null)
                {
                    MemberDetails recUsr = Data.Helper.NHibernateHelper.UniqueResult<MemberDetails>(null, "Id", model.Recipient.Id);
                    if (recUsr == null)
                    {
                        throw new Exception("This user do not have profile information. Message cannot be sent.");
                    }
                    else
                    {
                        grpMsg.Recipient = recUsr;
                    }

                    try
                    {
                        if (grpMsg.Sender.Id != grpMsg.Recipient.Id)
                        {
                            string msgUrl = "<a href='" + Url.Action("Details", "Group", new { id = grpMsg.Group.Id }) + "' >reply</a>";
                            Alert(model.Recipient.Id, string.Format("You have received a reply ({0}) to from: {1}", msgUrl, grpMsg.Sender.Givennm));
                        }
                    }
                    catch(Exception ex1)
                    {

                        Data.Helper.NHibernateHelper.Log(new Exception("Error Sending Group Message Alert=>", ex1));
                    }
                   
                }

                Data.Helper.NHibernateHelper.Save<MemberGroupmessages>(grpMsg);
            }
            catch (Exception ex)
            {
                Data.Helper.NHibernateHelper.Log(new Exception("Error Sending Group Message=>", ex));
                TempData["message"] = ex.Message + ex.StackTrace;
            }
            return RedirectToAction("Details", new { id = model.Group.Id });

        }

        public ActionResult RemoveMessage(int id)
        {
            MemberGroupmessages itm = Data.Helper.NHibernateHelper.UniqueResult<MemberGroupmessages>(null, "Id", id);
            try
            {
                if (itm == null)
                {
                    throw new Exception("Invalid Id");
                }

                Data.Helper.NHibernateHelper.Delete<MemberGroupmessages>(Data.Helper.NHibernateHelper.UniqueResult<MemberGroupmessages>(null, "Id", id));
            }
            catch (Exception ex1)
            {
                TempData["message"] = "Unable To Delete Message. Error: " + ex1.Message;
            }
            return RedirectToAction("Details", new { id = itm.Group.Id });
        }

        //
        // GET: /Group/Create
        public ActionResult Create()
        {
            return (View());
        }
        //
        // POST: /Group/Create

        [HttpPost]
        public ActionResult Create(MemberGroups model)
        {
            try
            {
                model.Createdon = DateTime.Now;
                model.Modifiedon = DateTime.Now;
                // TODO: Add insert logic here
                Data.Helper.NHibernateHelper.Save<MemberGroups>(model);

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        public ActionResult Update(int id)
        {
            MemberGroups itm = Data.Helper.NHibernateHelper.UniqueResult<MemberGroups>(null, "Id", id);
            if (itm.OwnerId != LoggedInUserKey)
            {
                TempData["message"] = "You do not have Edit access to the requested group. Activity Logged.";
                Data.Helper.NHibernateHelper.Log(new Exception("Hacking Attempt!!! User: "+LoggedInUserName+", Group Id: "+itm.Id));
                return RedirectToAction("Index");
            }
            return View(itm);
        }

        //
        // POST: /Group/Edit/5
        [HttpPost]
        public ActionResult Update(MemberGroups model)
        {
            try
            {
                // TODO: Add update logic here
                MemberGroups itm = Data.Helper.NHibernateHelper.UniqueResult<MemberGroups>(null, "Id", model.Id);

                if (itm.OwnerId != LoggedInUserKey)
                {
                    TempData["message"] = "You do not have Edit access to the requested group. Activity Logged.";
                    Data.Helper.NHibernateHelper.Log(new Exception("Hacking Attempt!!! User: " + LoggedInUserName + ", Group Id: " + itm.Id));
                    return RedirectToAction("Index");
                }

                itm = AutoMapper.Mapper.Map(model, itm);
                itm.OwnerId = LoggedInUserKey;

                Data.Helper.NHibernateHelper.Update<MemberGroups>(itm);
                TempData["message"] = "The requested group is updated now.";
            }
            catch (Exception excp)
            {
                TempData["message"] = "Error Updating the group: " + excp.Message + excp.StackTrace;
            }
            return RedirectToAction("Index");
        }
        
        [HttpPost]
        public ActionResult vJoinGrp(int id)
        {
            return View(new MemberGroupmembers() { MemberDetails = new MemberDetails() { Id = LoggedInUserKey }, Group = new MemberGroups() { Id = id }, Role = 0 });
        }

        [HttpPost]
        public ActionResult JoinGroup(MemberGroupmembers model)
        {
            try
            {
                MemberGroupmembers itm = new MemberGroupmembers();
                itm = AutoMapper.Mapper.Map(model, itm);

                if (Data.Helper.NHibernateHelper.Count("select m.Id from MemberGroupmembers m where m.MemberDetails.Id=? and m.Group.Id=?", new object[] { itm.MemberDetails, itm.Group }, new NHibernate.Type.IType[] { NHibernate.NHibernateUtil.Int32, NHibernate.NHibernateUtil.Int32 }, false) > 0)
                    throw new Exception("The requested user is already a member of this group.");

                itm.MemberDetails = Data.Helper.NHibernateHelper.UniqueResult<MemberDetails>(null, "Id", model.MemberDetails.Id);
                itm.Group = Data.Helper.NHibernateHelper.UniqueResult<MemberGroups>(null, "Id", model.Group.Id);

                Data.Helper.NHibernateHelper.Save<MemberGroupmembers>(itm);
                TempData["message"] = "Requested Membership is updated now";
            }
            catch (Exception exc)
            {

                TempData["message"] = "Error Joining the requested group: " + exc.Message + exc.StackTrace;
            }
            return RedirectToAction("Index");
        }

        [HttpPost]
        public ActionResult LeaveGroup(int? userId, int groupId)
        {
            try
            {
                MemberGroupmembers itm = Data.Helper.NHibernateHelper.UniqueResult<MemberGroupmembers>(null, new string[] { "MemberDetails.Id", "Group.Id" }, new object[] { userId.HasValue ? userId.Value : LoggedInUserKey, groupId });
                Data.Helper.NHibernateHelper.Delete<MemberGroupmembers>(itm);
            }
            catch (Exception exc)
            {

                TempData["message"] = "Error Leaving the requested group: " + exc.Message + exc.StackTrace;
            }
            return RedirectToAction("Index");
        }

        #region Admin Actions

        [Authorize(Roles = "Super Admin,Admin")]
        public ActionResult Acquire(int id)
        {
            int grpId = 0;

            try
            {
                //object obj11 = m_PersistenceManager.ExecuteUpdateNamedQuery("MemberSessions.AcquireById", new object[] { LoggedInUserKey, id }, new NHibernate.Type.IType[] { NHibernate.NHibernateUtil.Int32, NHibernate.NHibernateUtil.Int32 });
                IList<MemberGroups> usrGroups = Data.Helper.NHibernateHelper.Find<MemberGroups>("Id", id);
                foreach (var usrGrp in usrGroups)
                {
                    grpId = usrGrp.Id;
                    usrGrp.OwnerId = LoggedInUserKey;
                    Data.Helper.NHibernateHelper.Update<MemberGroups>(usrGrp);
                }

                TempData["message"] = "The group is transferred to your name now";

            }
            catch (Exception ex1)
            {

                TempData["message"] = "Cannot Acquire Session. Error: " + ex1.Message;

            }
            return RedirectToAction("Manage", new { id = grpId });
        }

        [Authorize(Roles = "Super Admin,Admin")]
        public ActionResult Manage()
        {
            IList<MemberGroups> lstAllGroups = Data.Helper.NHibernateHelper.Find<MemberGroups>();
            return View(lstAllGroups);
        }

        //
        // POST: /Group/Delete/5
        [Authorize(Roles = "Super Admin,Admin")]
        [HttpPost]
        public ActionResult Destroy(int id)
        {
            try
            {
                MemberGroups itm = Data.Helper.NHibernateHelper.UniqueResult<MemberGroups>(null, "Id", id);
                object obj1 = Data.Helper.NHibernateHelper.Delete("from MemberGroupmessages gms where gms.Group.Id=?", id, NHibernate.NHibernateUtil.Int32);// <IList<MemberGroupmessages>>(Data.Helper.NHibernateHelper.Find<MemberGroupmessages>("Group", itm));
                object obj2 = Data.Helper.NHibernateHelper.Delete("from MemberGroupmembers gmbr where gmbr.Group.Id=?", id, NHibernate.NHibernateUtil.Int32);//<IList<MemberGroupmembers>>(Data.Helper.NHibernateHelper.Find<MemberGroupmembers>("Group", itm));

                // TODO: Add update logic here
                Data.Helper.NHibernateHelper.Delete<MemberGroups>(itm);
                TempData["message"] = "The requested group is deleted now.";
            }
            catch (Exception excp)
            {
                TempData["message"] = "Error deleting the group: " + excp.Message + excp.StackTrace;
            }
            return RedirectToAction("Manage");
        }

        #endregion
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The GNU General Public License (GPLv3)


Written By
Software Developer (Senior)
Singapore Singapore
I love programming, reading, and meditation. I like to explore management and productivity.

Comments and Discussions