Example #1
0
        protected override XElement[] Do(WebContext context)
        {
            Account receiver;

            if (context.httprequest.Form.AllKeys.Contains("receiverId"))
            {
                receiver = Account.LoadById(int.Parse(context.httprequest.Form["receiverId"]));
            }
            else if (context.httprequest.Form.AllKeys.Contains("receiverName"))
            {
                receiver = Account.LoadByUser(User.LoadByName(context.httprequest.Form["receiverName"]));
            }
            else
            {
                throw new ApplicationException("receiverId/receiverName not passed");
            }

            if (Config.instance.IsMigrationEnabled && receiver.needsMigration)
            {
                throw new ApplicationException("User is not migrated");
            }

            PMMessage newMessage = PMConversation.SendPMMessage(
                context.account,
                receiver,
                this.getTitle(context),
                this.getBody(context)
                );

            newMessage.conversation.markAsRead(context.session.account, newMessage, newMessage);

            return(new XElement[] { newMessage.exportToXml(context) });
        }
Example #2
0
        override protected IEnumerable <XElement> getSpecificData(WebContext context)
        {
            Account        interlocutor = this.url.interlocutor;
            PMConversation conversation = PMConversation.LoadByAccounts(context.session.account, interlocutor);
            PageOuter      pageOuter    = PageOuter.createFromUrl(
                this.url,
                context.userSettings.postsPerPage,
                new Dictionary <char, Func <string, long> > {
                {
                    'p',
                    s => Config.instance.mainConnection.GetCountByConditions(
                        PMMessage.TableSpec.instance,
                        new ComplexCondition(
                            ConditionsJoinType.AND,
                            new ComparisonCondition(
                                PMMessage.TableSpec.instance.getColumnSpec(PMMessage.TableSpec.FIELD_OWNERID),
                                ComparisonType.EQUAL,
                                context.session.account.id.ToString()
                                ),
                            new ComparisonCondition(
                                PMMessage.TableSpec.instance.getColumnSpec(PMMessage.TableSpec.FIELD_INTERLOCUTORID),
                                ComparisonType.EQUAL,
                                interlocutor.id.ToString()
                                ),
                            new ComparisonCondition(
                                PMMessage.TableSpec.instance.getIdSpec(),
                                ComparisonType.LESSTHAN,
                                int.Parse(s).ToString()
                                )
                            )
                        )
                }
            }
                );
            IEnumerable <PMMessage> messages = conversation.getMessages(pageOuter, context, pageOuter.ascendingDirection);

            XElement[] result = new XElement[] {
                conversation.exportToXml(context, false),
                new XElement("messages",
                             from message in messages select message.exportToXml(context),
                             pageOuter.exportToXml(2, 5, 2)
                             )
            };

            if (messages.Count() > 0)
            {
                conversation.markAsRead(context.session.account, messages.Min(), messages.Max());
            }

            foreach (var message in messages)
            {
                message.MarkAsRead(context.session.account);
            }

            return(result);
        }
        override protected IEnumerable <XElement> getSpecificData(WebContext context)
        {
            PageOuter pageOuter = PageOuter.createFromUrl(this.url, context.userSettings.threadsPerPage);
            IEnumerable <PMConversation> conversations = PMConversation.getConversations(context.session.account, pageOuter, pageOuter.descendingDirection);

            XElement[] result = new XElement[] {
                new XElement("conversations",
                             from conversation in conversations select conversation.exportToXml(context, false),
                             pageOuter.exportToXml(1, 5, 1)
                             )
            };

            return(result);
        }