Beispiel #1
0
        private void LoadDiscussion()
        {
            if (discussionLoaded) return;
            discussionLoaded = true;

            IDiscussable container = Control.GetCurrentScope<IDiscussable>(this.Parent);
            if (container != null && container.Discussion != null)
            {
                discussion = container.Discussion;
            }
        }
Beispiel #2
0
        public static void QueueForCreation(Discussion d)
        {
            CreateQueue.Enqueue(d.ID);

            lock (threadLock)
            {
                if (worker == null || worker.ThreadState != ThreadState.Running)
                {
                    worker = new Thread(new ThreadStart(WatchQueue));
                    worker.IsBackground = false;
                    worker.Priority = ThreadPriority.BelowNormal;
                    worker.Start();
                }
            }
        }
Beispiel #3
0
        public override object GetValue(DataManager manager)
        {
            if (discussion == null && manager.PrimaryKeyValue is Guid)
            {
                discussion = Discussion.FindFirst(
                    manager.Settings.BaseActiveObjectType.FullName,
                    (Guid)manager.PrimaryKeyValue
                );
            }
            if (discussion == null)
            {
                discussion = new Discussion();
                discussion.Status = DiscussionStatus.NotCreated;
            }

            return discussion;
        }
Beispiel #4
0
        public override bool Save(DataManager dm)
        {
            if (dm["IgnoreDiscussionPlz"] != null && dm["IgnoreDiscussionPlz"] is bool)
            {
                return true;
            }
            Discussion d = this.GetValue(dm) as Discussion;

            if (d != null && d.DiscussionProviderID == Guid.Empty)
            {
                d = null;
            }

            if (d == null && dm["DiscussionProviderID"] is Guid && dm.PrimaryKeyValue is Guid)
            {
                d = new Discussion();
                d.DiscussionProviderID = (Guid)dm["DiscussionProviderID"];
                d.Status = this.DefaultStatus;
                d.CommentCount = 0;
            }

            if (d == null && this.CloneFromField != null && dm.PrimaryKeyValue is Guid)
            {
                IActiveObject obj = dm[this.CloneFromField] as IActiveObject;
                if (obj != null)
                {
                    HasDiscussion hd = obj.DataManager.ActsAs(this.GetType()) as HasDiscussion;

                    if (hd != null)
                    {
                        Discussion sourced = obj.DataManager[hd.FieldName] as Discussion;
                        if (sourced != null && sourced.ID != Guid.Empty)
                        {
                            d = new Discussion();
                            d.DiscussionProviderID = sourced.DiscussionProviderID;
                            d.Status = this.DefaultStatus;
                            d.CommentCount = 0;
                        }
                    }
                }
            }

            if (d != null && dm.PrimaryKeyValue is Guid)
            {
                d.ActiveObjectID = (Guid)dm.PrimaryKeyValue;
                d.ActiveObjectType = dm.Settings.BaseActiveObjectType.FullName;

                d.Title = (this.TitleField != null) ? dm[this.TitleField] as string : null;
                d.Excerpt = (this.ExcerptField != null) ? dm[this.ExcerptField] as string : null;

                if (this.PublishDateField != null && dm[this.PublishDateField] is DateTime)
                {
                    d.PublishDate = (DateTime)dm[this.PublishDateField];
                }
                if (this.PublishStatusField != null && dm[this.PublishStatusField] is int)
                {
                    PublishStatus status = (PublishStatus)dm[this.PublishStatusField];
                    if (status == PublishStatus.Draft || d.PublishDate > DateTime.Now)
                    {
                        d.PublishDate = DateTime.MaxValue;
                        if (d.Status == DiscussionStatus.PendingCreation || d.Status == DiscussionStatus.CreationException)
                        {
                            d.Status = DiscussionStatus.NotCreated;
                        }
                    }
                    else if (status == PublishStatus.Published && d.Status == DiscussionStatus.NotCreated && d.PublishDate <= DateTime.Now)
                    {
                        d.Status = DiscussionStatus.PendingCreation;
                    }
                }
                if (d.DataManager.IsDirty)
                {
                    d.Save();
                }

                if (d.Status == DiscussionStatus.PendingCreation)
                {
                    Discussion.QueueForCreation(d);
                }
            }
            return true;
        }