예제 #1
0
        public override Message CreateMessage(Topic topic, string idParentMessage, string owner, string title, string body, Attachment.FileInfo attachment)
        {
            //Check attachment
            if (attachment != null)
            {
                Attachment.FileHelper.CheckFile(attachment, topic.Category.AttachExtensions, topic.Category.AttachMaxSize);
            }

            using (TransactionScope transaction = new TransactionScope(mConfiguration))
            {
                TopicDataStore topicStore = new TopicDataStore(transaction);
                topicStore.Attach(topic);

                MessageDataStore messageStore  = new MessageDataStore(transaction);
                Message          parentMessage = messageStore.FindByKey(idParentMessage);
                if (parentMessage == null)
                {
                    throw new MessageNotFoundException(idParentMessage);
                }

                Message newMessage = new Message(topic, idParentMessage, owner, title, body, attachment);

                messageStore.Insert(newMessage);

                transaction.Commit();

                //Notify user for answer
                NotifyUserReply(parentMessage, newMessage);

                return(newMessage);
            }
        }
예제 #2
0
        /// <summary>
        /// Create the topic and the relative root message.
        /// </summary>
        /// <param name="category"></param>
        /// <param name="owner"></param>
        /// <param name="title"></param>
        /// <param name="body"></param>
        /// <param name="attachment">Use null if you don't have any attachment</param>
        /// <param name="topic">Returns the topic created</param>
        /// <param name="rootMessage">Returns the message created</param>
        public override void CreateTopic(Category category, string owner,
                                         string title, string body, Attachment.FileInfo attachment,
                                         out Topic topic,
                                         out Message rootMessage, string groups)
        {
            //Check attachment
            if (attachment != null)
            {
                Attachment.FileHelper.CheckFile(attachment, category.AttachExtensions, category.AttachMaxSize);
            }

            using (TransactionScope transaction = new TransactionScope(mConfiguration))
            {
                CategoryDataStore forumStore = new CategoryDataStore(transaction);
                forumStore.Attach(category);

                //Insert topic
                TopicDataStore topicStore = new TopicDataStore(transaction);
                topic        = new Topic(category, owner, title);
                topic.Groups = groups;
                topicStore.Insert(topic);

                //Insert root message
                MessageDataStore messageStore = new MessageDataStore(transaction);
                rootMessage = new Message(topic, null, owner, title, body, attachment);

                messageStore.Insert(rootMessage);

                transaction.Commit();
            }
        }
예제 #3
0
 public override void DeleteMessage(Message message)
 {
     using (TransactionScope transaction = new TransactionScope(mConfiguration))
     {
         MessageDataStore store = new MessageDataStore(transaction);
         InternalDeleteMessage(store, transaction, message);
         transaction.Commit();
     }
 }
예제 #4
0
        public override int MessageCountByTopic(Topic topic)
        {
            using (TransactionScope transaction = new TransactionScope(mConfiguration))
            {
                MessageDataStore store = new MessageDataStore(transaction);

                return(store.MessageCountByTopic(topic));
            }
        }
예제 #5
0
        /// <summary>
        /// Get a list of messages for the specified topic ordered by InsertDate
        /// </summary>
        /// <param name="topic"></param>
        /// <returns></returns>
        public override IList <Message> GetMessagesByTopic(Topic topic)
        {
            //TODO Evaluate if is better to returns a light object to don't load all the attachments and the forum data

            using (TransactionScope transaction = new TransactionScope(mConfiguration))
            {
                MessageDataStore store = new MessageDataStore(transaction);

                return(store.FindByTopic(topic));
            }
        }
예제 #6
0
        public override Message GetMessage(string id)
        {
            using (TransactionScope transaction = new TransactionScope(mConfiguration))
            {
                MessageDataStore store = new MessageDataStore(transaction);
                Message          msg   = store.FindByKey(id);
                if (msg == null)
                {
                    throw new MessageNotFoundException(id);
                }

                return(msg);
            }
        }
예제 #7
0
        /// <summary>
        /// Recursively delete all the messages and the relative attachments
        /// </summary>
        protected virtual void InternalDeleteMessage(MessageDataStore store,
                                                     TransactionScope transaction, Message obj)
        {
            //Recursively delete any child message
            IList <Message> children = store.FindByParent(obj.Id);

            foreach (Message childMsg in children)
            {
                InternalDeleteMessage(store, transaction, childMsg);
            }

            obj.Deleted = true;
            store.Update(obj);
        }
예제 #8
0
        public override IList <Message> FindMessages(Filter <string> categoryName,
                                                     Filter <string> searchFor,
                                                     Filter <string> owner,
                                                     Filter <string> tag,
                                                     DateTime?fromDate, DateTime?toDate,
                                                     PagingInfo paging)
        {
            //TODO Evaluate if is better to returns a light object to don't load all the attachments and the forum data

            using (TransactionScope transaction = new TransactionScope(mConfiguration))
            {
                MessageDataStore store = new MessageDataStore(transaction);

                return(store.FindByFields(categoryName, searchFor, owner, tag, fromDate, toDate, paging));
            }
        }