public static Discussion Find( ISession session, int accountid, Type type, int objectid, ManagedSecurityContext sec) { DataObject dataobject = ManagedDataObject.FindObject(session, type); Discussion instance = (Discussion) session.CreateCriteria(typeof(Discussion)) .Add(Expression.Eq("DataObject.Id", dataobject.Id)) .Add(Expression.Eq("Account.Id", accountid)) .Add(Expression.Eq("ObjectId", objectid)) .Add(Expression.Eq("Personal", true)) .SetMaxResults(1) .UniqueResult(); if (instance == null) { return(null); } ManagedDiscussion m_instance = new ManagedDiscussion(session, instance); m_instance.GetACL().Check(sec, DataOperation.Retreive); return(instance); }
public override int CreateOrUpdate(TransitDiscussionPost t_instance, ManagedSecurityContext sec) { Nullable <DateTime> lastModified = new Nullable <DateTime>(); if (mInstance != null) { lastModified = mInstance.Modified; } // discussion admin can update stickyness bool fStickyModified = false; if (mInstance != null && mInstance.Sticky != t_instance.Sticky) { fStickyModified = true; } if (mInstance == null && t_instance.Sticky) { fStickyModified = true; } if (fStickyModified) { ManagedDiscussion m_discussion = new ManagedDiscussion(Session, mInstance != null ? mInstance.DiscussionThread.Discussion.Id : t_instance.DiscussionId); m_discussion.GetACL().Check(sec, DataOperation.Update); } int id = base.CreateOrUpdate(t_instance, sec); try { ManagedAccount ra = new ManagedAccount(Session, mInstance.AccountId); ManagedAccount ma = new ManagedAccount(Session, mInstance.DiscussionPostParent != null ? mInstance.DiscussionPostParent.AccountId : mInstance.DiscussionThread.Discussion.Account.Id); // if the author is editing the post, don't notify within 30 minute periods if (ra.Id != ma.Id && (t_instance.Id == 0 || (lastModified.HasValue && lastModified.Value.AddMinutes(30) > DateTime.UtcNow))) { Session.Flush(); ManagedSiteConnector.TrySendAccountEmailMessageUriAsAdmin( Session, ma, string.Format("EmailDiscussionPost.aspx?id={0}", mInstance.Id)); } } catch (ObjectNotFoundException) { // replying to an account that does not exist } return(id); }
public int MoveToDiscussion(ManagedSecurityContext sec, int targetid) { GetACL().Check(sec, DataOperation.Delete); ManagedDiscussion target_discussion = new ManagedDiscussion(Session, targetid); target_discussion.GetACL().Check(sec, DataOperation.Create); // create the target thread DiscussionThread target_thread = new DiscussionThread(); target_thread.Discussion = target_discussion.Instance; target_thread.Modified = mInstance.Modified; target_thread.Created = mInstance.Created; Session.Save(target_thread); if (target_discussion.Instance.Modified < mInstance.Modified) { target_discussion.Instance.Modified = mInstance.Modified; Session.Save(target_discussion.Instance); } // copy the post to a discusison post DiscussionPost target_post = new DiscussionPost(); target_post.AccountId = mInstance.AccountId; target_post.Body = mInstance.Body; target_post.Created = mInstance.Created; target_post.Modified = mInstance.Modified; target_post.Sticky = false; target_post.Subject = mInstance.Title; target_post.DiscussionThread = target_thread; Session.Save(target_post); // set the new post as parent of all replies int comments_discussion_id = ManagedDiscussion.GetOrCreateDiscussionId( Session, typeof(AccountBlogPost).Name, mInstance.Id, sec); Discussion comments_discussion = Session.Load <Discussion>(comments_discussion_id); foreach (DiscussionThread thread in Collection <DiscussionThread> .GetSafeCollection(comments_discussion.DiscussionThreads)) { foreach (DiscussionPost post in thread.DiscussionPosts) { post.DiscussionThread = target_thread; if (post.DiscussionPostParent == null) { post.DiscussionPostParent = target_post; } } Session.Delete(thread); } // delete the current post that became a discussion post Session.Delete(mInstance); return(target_post.Id); }