Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }