Example #1
0
        public static MailFolder GetFolder(Core core, FolderTypes folder, MessageRecipient user)
        {
            SelectQuery query = MailFolder.GetSelectQueryStub(core, typeof(MailFolder));
            query.AddCondition("folder_type", (byte)folder);
            query.AddCondition("owner_id", user.UserId);

            System.Data.Common.DbDataReader inboxReader = core.Db.ReaderQuery(query);

            if (inboxReader.HasRows)
            {
                inboxReader.Read();

                MailFolder newFolder = new MailFolder(core, inboxReader);

                inboxReader.Close();
                inboxReader.Dispose();

                return newFolder;
            }
            else
            {
                inboxReader.Close();
                inboxReader.Dispose();

                throw new InvalidMailFolderException();
            }
        }
Example #2
0
        public static void Create(Core core, Message message, MessageRecipient recipient, RecipientType type, MailFolder folder)
        {
            if (core == null)
            {
                throw new NullCoreException();
            }

            Item.Create(core, typeof(MessageRecipient), true,
                new FieldValuePair("message_id", message.Id),
                new FieldValuePair("sender_id", message.SenderId),
                new FieldValuePair("user_id", recipient.UserId),
                new FieldValuePair("message_folder_id", folder.Id),
                new FieldValuePair("recipient_type", (byte)type),
                new FieldValuePair("is_read", type == RecipientType.Sender));
        }
Example #3
0
        public static MailFolder Create(Core core, MailFolder parent, string title)
        {
            if (core == null)
            {
                throw new NullCoreException();
            }

            /* TODO: Fix */
            Item item = Item.Create(core, typeof(MailFolder), new FieldValuePair("owner_id", parent.ownerId),
                new FieldValuePair("folder_parent", parent.Id),
                new FieldValuePair("folder_name", title));

            return (MailFolder)item;
        }
Example #4
0
        void AccountMailInbox_Show(object sender, EventArgs e)
        {
            SetTemplate("account_mailbox");

            if (LoggedInMember.UserInfo.UnseenMail > 0)
            {
                UpdateQuery query = new UpdateQuery(typeof(UserInfo));
                query.AddField("user_unseen_mail", new QueryOperation("user_unseen_mail", QueryOperations.Subtraction, LoggedInMember.UserInfo.UnseenMail));
                query.AddCondition("user_id", LoggedInMember.Id);

                db.Query(query);

                core.Template.Parse("UNSEEN_MAIL", "FALSE");
            }

            /*List<MailFolder> folders = MailFolder.GetFolders(core, core.Session.LoggedInMember);

            foreach (MailFolder f in folders)
            {
                if (f.FolderType == FolderTypes.Inbox) continue;

                VariableCollection modulesVariableCollection = core.Template.CreateChild("account_links");
                ParentModulesVariableCollection.CreateChild("account_links", modulesVariableCollection);

                Dictionary<string, string> args = new Dictionary<string, string>();
                args.Add("folder", f.FolderName);

                switch (f.FolderType)
                {
                    case FolderTypes.Draft:
                        modulesVariableCollection.Parse("TITLE", core.Prose.GetString("DRAFTS"));
                        break;
                    case FolderTypes.Outbox:
                        modulesVariableCollection.Parse("TITLE", core.Prose.GetString("OUTBOX"));
                        break;
                    case FolderTypes.SentItems:
                        modulesVariableCollection.Parse("TITLE", core.Prose.GetString("SENT_ITEMS"));
                        break;
                    default:
                        modulesVariableCollection.Parse("TITLE", f.FolderName);
                        break;
                }
                modulesVariableCollection.Parse("SUB", Key);
                modulesVariableCollection.Parse("MODULE", ModuleKey);
                modulesVariableCollection.Parse("URI", BuildUri(args));
            }*/

            string folder = "Inbox";
            if (!string.IsNullOrEmpty(core.Http.Query["folder"]))
            {
                folder = core.Http.Query["folder"];
            }

            MailFolder mailFolder = null;
            try
            {
                mailFolder = new MailFolder(core, core.Session.LoggedInMember, folder);
            }
            catch (InvalidMailFolderException)
            {
                if (folder == "Inbox")
                {
                    mailFolder = MailFolder.Create(core, FolderTypes.Inbox, folder);
                    MailFolder.Create(core, FolderTypes.Draft, core.Prose.GetString("DRAFTS"));
                    MailFolder.Create(core, FolderTypes.Outbox, core.Prose.GetString("OUTBOX"));
                    MailFolder.Create(core, FolderTypes.SentItems, core.Prose.GetString("SENT_ITEMS"));
                }
                else
                {
                    core.Functions.Generate404();
                    return;
                }
            }

            List<Message> messages = mailFolder.GetThreads(core.TopLevelPageNumber, 20);

            List<long> messageIds = new List<long>();
            List<long> lastMessageIds = new List<long>();
            Dictionary<long, MessageRecipient> readStatus = new Dictionary<long, MessageRecipient>();

            if (messages.Count > 0)
            {
                foreach (Message message in messages)
                {
                    messageIds.Add(message.Id);
                    if (message.LastId > 0)
                    {
                        lastMessageIds.Add(message.LastId);
                    }
                    else
                    {
                        lastMessageIds.Add(message.Id);
                    }
                }

                SelectQuery query = MessageRecipient.GetSelectQueryStub(core, typeof(MessageRecipient));
                query.AddCondition("user_id", core.Session.LoggedInMember.Id);
                query.AddCondition("message_id", ConditionEquality.In, lastMessageIds);

                System.Data.Common.DbDataReader recipientReader = db.ReaderQuery(query);

                while(recipientReader.Read())
                {
                    MessageRecipient recipient = new MessageRecipient(core, recipientReader);
                    readStatus.Add(recipient.MessageId, recipient);
                }

                recipientReader.Close();
                recipientReader.Dispose();
            }

            foreach (Message message in messages)
            {
                VariableCollection messageVariableCollection = template.CreateChild("mail_item");

                bool isRead = false;

                long lastId = message.LastId;
                if (lastId == 0)
                {
                    lastId = message.Id;
                }

                if (readStatus.ContainsKey(lastId))
                {
                    if (readStatus[lastId].IsRead)
                    {
                        isRead = true;
                    }
                }

                if (isRead)
                {
                    messageVariableCollection.Parse("IS_NORMAL_READ", "TRUE");
                }
                else
                {
                    messageVariableCollection.Parse("IS_NORMAL_UNREAD", "TRUE");
                }

                messageVariableCollection.Parse("SUBJECT", message.Subject);
                messageVariableCollection.Parse("URI", message.Uri);
                messageVariableCollection.Parse("U_DELETE", BuildUri("message", "delete", message.Id));

                List<MessageRecipient> recipients = message.GetRecipients();

                for (int i = 0; i < recipients.Count; i++)
                {
                    core.PrimitiveCache.LoadUserProfile(recipients[i].UserId);
                }

                switch (mailFolder.FolderType)
                {
                    case FolderTypes.Inbox:
                    case FolderTypes.Custom:
                        // INBOX show sender
                        if (message.SenderId > 0)
                        {
                            messageVariableCollection.Parse("SENDER", message.Sender.DisplayName);
                            messageVariableCollection.Parse("U_SENDER", message.Sender.Uri);
                        }
                        for (int i = 0; i < recipients.Count; i++)
                        {
                            if (recipients[i].UserId != LoggedInMember.Id)
                            {
                                VariableCollection recipientVariableCollection = messageVariableCollection.CreateChild("recipients");

                                recipientVariableCollection.Parse("DISPLAY_NAME", core.PrimitiveCache[recipients[i].UserId].DisplayName);
                            }
                        }

                        template.Parse("INBOX", "TRUE");
                        break;
                    case FolderTypes.Draft:
                    case FolderTypes.Outbox:
                    case FolderTypes.SentItems:
                        {
                            int i = 0;
                            while (recipients.Count > i)
                            {
                                if (recipients[i].RecipientType == RecipientType.To)
                                {
                                    messageVariableCollection.Parse("SENDER", core.PrimitiveCache[recipients[i].UserId].DisplayName);
                                    messageVariableCollection.Parse("U_SENDER", core.PrimitiveCache[recipients[i].UserId].Uri);
                                    break;
                                }
                                i++;
                            }
                        }
                        break;
                }
                messageVariableCollection.Parse("DATE", core.Tz.DateTimeToString(message.GetSentDate(core.Tz)));
                messageVariableCollection.Parse("LAST_DATE", core.Tz.DateTimeToString(message.GetLastMessageDate(core.Tz)));
            }

            Dictionary<string, string> a = new Dictionary<string,string>();
            a.Add("folder", mailFolder.FolderName);

            core.Display.ParsePagination(template, BuildUri(a), 20, mailFolder.MessageCount);
        }