예제 #1
0
        public static long GetUnseenNotificationCount(Core core)
        {
            if (core == null)
            {
                throw new NullCoreException();
            }

            List<Notification> notificationItems = new List<Notification>();

            SelectQuery query = new SelectQuery(GetTable(typeof(Notification)));
            query.AddFields("COUNT(*) as total");
            query.AddCondition("notification_read", false);
            query.AddCondition("notification_seen", false);
            query.AddCondition("notification_primitive_id", core.LoggedInMemberId);
            query.AddCondition("notification_primitive_type_id", ItemKey.GetTypeId(core, typeof(User)));
            query.AddSort(SortOrder.Descending, "notification_time_ut");

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

            long newNotifications = 0;

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

                newNotifications = (long)notificationsReader["total"];
            }

            notificationsReader.Close();
            notificationsReader.Dispose();

            return newNotifications;
        }
예제 #2
0
        public List<NetworkMember> GetMembers(int page, int perPage, string filter)
        {
            List<NetworkMember> members = new List<NetworkMember>();

            SelectQuery query = new SelectQuery(NetworkMember.GetTable(typeof(NetworkMember)));
            query.AddFields(NetworkMember.GetFieldsPrefixed(core, typeof(NetworkMember)));
            query.AddCondition("network_id", networkId);
            query.AddSort(SortOrder.Ascending, "member_join_date_ut");
            if (!string.IsNullOrEmpty(filter))
            {
                query.AddCondition(new DataField("user_keys", "user_name_first"), filter[0]);
            }
            query.LimitStart = (page - 1) * perPage;
            query.LimitCount = perPage;

            DataTable membersTable = db.Query(query);

            List<long> memberIds = new List<long>();

            foreach (DataRow dr in membersTable.Rows)
            {
                memberIds.Add((long)dr["user_id"]);
            }

            core.LoadUserProfiles(memberIds);

            foreach (DataRow dr in membersTable.Rows)
            {
                members.Add(new NetworkMember(core, dr));
            }

            return members;
        }
예제 #3
0
        public List<Fan> GetFans(int page, int perPage, string filter)
        {
            List<Fan> fans = new List<Fan>();

            SelectQuery query = new SelectQuery(typeof(Fan));
            query.AddJoin(JoinTypes.Inner, "user_keys", "user_id", "user_id");
            query.AddFields(Fan.GetFieldsPrefixed(core, typeof(Fan)));
            query.AddCondition("musician_id", musicianId);
            if (!string.IsNullOrEmpty(filter))
            {
                query.AddCondition("user_keys.user_name_first", filter);
            }
            query.AddSort(SortOrder.Ascending, "fan_date_ut");
            query.LimitStart = (page - 1) * perPage;
            query.LimitCount = perPage;

            DataTable fansTable = db.Query(query);

            List<long> fanIds = new List<long>();

            foreach (DataRow dr in fansTable.Rows)
            {
                fanIds.Add((long)dr["user_id"]);
            }

            core.LoadUserProfiles(fanIds);

            foreach (DataRow dr in fansTable.Rows)
            {
                fans.Add(new Fan(core, dr));
            }

            return fans;
        }
예제 #4
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="m">Page with message id#</param>
        /// <param name="perPage"></param>
        /// <returns></returns>
        public List<TopicPost> GetPosts(long m, int perPage)
        {
            int p = 1; // currentPage

            if (m > 0)
            {
                SelectQuery query = new SelectQuery(TopicPost.GetTable(typeof(TopicPost)));
                query.AddFields("COUNT(*) AS total");
                query.AddCondition("topic_id", topicId);
                query.AddCondition("post_id", ConditionEquality.LessThan, m);

                query.AddSort(SortOrder.Ascending, "post_time_ut");

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

                long before = 0;
                long after = 0;

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

                    before = (long)postsReader["total"];
                    after = Posts - before;
                }

                postsReader.Close();
                postsReader.Dispose();

                /*if (item.CommentSortOrder == SortOrder.Ascending)
                {*/
                    p = (int)(before / perPage + 1);
                /*}
                else
                {
                    p = (int)(after / perPage + 1);
                }*/
            }

            return GetPosts(p, perPage);
        }
예제 #5
0
        public void DisplayComments(Template template, Primitive owner, ICommentableItem item, List<User> commenters, int page, long commentCount, DisplayCommentHookHandler hook)
        {
            Mysql db = core.Db;

            long c = core.Functions.RequestLong("c", 0);

            if (c > 0)
            {
                SelectQuery query = new SelectQuery("comments");
                query.AddFields("COUNT(*) AS total");
                query.AddCondition("comment_item_id", item.Id);
                query.AddCondition("comment_item_type_id", item.ItemKey.TypeId);
                query.AddCondition("comment_id", ConditionEquality.LessThanEqual, c);

                if (commenters != null)
                {
                    if (commenters.Count == 2)
                    {
                        if (item.Namespace == "USER")
                        {
                            QueryCondition qc1 = query.AddCondition("c.comment_item_id", commenters[0].Id);
                            qc1.AddCondition("user_id", commenters[1].Id);

                            QueryCondition qc2 = query.AddCondition(ConditionRelations.Or, "c.comment_item_id", commenters[1].Id);
                            qc2.AddCondition("user_id", commenters[0].Id);

                            query.AddCondition("c.comment_item_type_id", item.ItemKey.TypeId);
                        }
                        else
                        {
                            query.AddCondition("comment_item_id", item.Id);
                            query.AddCondition("comment_item_type_id", item.ItemKey.TypeId);
                        }
                    }
                    else
                    {
                        query.AddCondition("comment_item_id", item.Id);
                        query.AddCondition("comment_item_type_id", item.ItemKey.TypeId);
                    }
                }
                else
                {
                    query.AddCondition("comment_item_id", item.Id);
                    query.AddCondition("comment_item_type_id", item.ItemKey.TypeId);
                }

                query.AddSort(SortOrder.Ascending, "comment_time_ut");

                DataRow commentsRow = db.Query(query).Rows[0];

                long before = (long)commentsRow["total"];
                long after = item.Comments - before - 1;

                if (item.CommentSortOrder == SortOrder.Ascending)
                {
                    page = (int)(before / item.CommentsPerPage + 1);
                }
                else
                {
                    page = (int)(after / item.CommentsPerPage + 1);
                }
            }

            if (core.Session.IsLoggedIn && core.Session.LoggedInMember != null)
            {
                template.Parse("LOGGED_IN", "TRUE");
                template.Parse("LOGGED_IN_USER_DISPLAY_NAME", core.Session.LoggedInMember.DisplayName);
                template.Parse("LOGGED_IN_USER_ICON", core.Session.LoggedInMember.Icon);
                template.Parse("LOGGED_IN_USER_TILE", core.Session.LoggedInMember.Tile);
                template.Parse("LOGGED_IN_USER_SQUARE", core.Session.LoggedInMember.Square);
            }

            List<Comment> comments = Comment.GetComments(core, item.ItemKey, item.CommentSortOrder, page, item.CommentsPerPage, commenters);
            Comment.LoadUserInfoCache(core, comments);

            if (commentCount >= 0)
            {
                template.Parse("COMMENTS", commentCount.ToString());
            }
            else if (((NumberedItem)item).Info.Comments >= 0)
            {
                template.Parse("COMMENTS", ((NumberedItem)item).Info.Comments.ToString());
            }
            else
            {
                template.Parse("COMMENTS", comments.Count.ToString());
            }

            template.Parse("ITEM_ID", item.Id.ToString());
            template.Parse("ITEM_TYPE", item.ItemKey.TypeId.ToString());

            if (item.CommentSortOrder == SortOrder.Ascending)
            {
                template.Parse("COMMENTS_ASC", "TRUE");
                template.Parse("COMMENT_SORT", "asc");
            }
            else
            {
                template.Parse("COMMENTS_DESC", "TRUE");
                template.Parse("COMMENT_SORT", "desc");
            }

            foreach (Comment comment in comments)
            {
                core.PrimitiveCache.LoadUserProfile(comment.UserId);
            }

            long lastId = 0;

            foreach (Comment comment in comments)
            {
                VariableCollection commentsVariableCollection = template.CreateChild("comment-list");

                //commentsVariableCollection.ParseRaw("COMMENT", Bbcode.Parse(HttpUtility.HtmlEncode(comment.Body), core.session.LoggedInMember));
                /*if ((!core.IsMobile) && (!string.IsNullOrEmpty(comment.BodyCache)))
                {
                    core.Display.ParseBbcodeCache(commentsVariableCollection, "COMMENT", comment.BodyCache);
                }
                else*/
                {
                    core.Display.ParseBbcode(commentsVariableCollection, "COMMENT", comment.Body, true, null, null);
                }

                try
                {
                    User commentPoster = core.PrimitiveCache[comment.UserId];

                    lastId = comment.Id;

                    commentsVariableCollection.Parse("ID", comment.Id.ToString());
                    commentsVariableCollection.Parse("TYPE_ID", ItemKey.GetTypeId(core, typeof(Comment)));
                    commentsVariableCollection.Parse("USERNAME", commentPoster.DisplayName);
                    commentsVariableCollection.Parse("USER_ID", commentPoster.Id.ToString());
                    commentsVariableCollection.Parse("USER_DISPLAY_NAME", commentPoster.DisplayName);
                    commentsVariableCollection.Parse("U_PROFILE", commentPoster.ProfileUri);
                    commentsVariableCollection.Parse("U_QUOTE", core.Hyperlink.BuildCommentQuoteUri(comment.Id));
                    commentsVariableCollection.Parse("U_REPORT", core.Hyperlink.BuildCommentReportUri(comment.Id));
                    commentsVariableCollection.Parse("U_DELETE", core.Hyperlink.BuildCommentDeleteUri(comment.Id));
                    commentsVariableCollection.Parse("U_LIKE", core.Hyperlink.BuildLikeItemUri(comment.ItemTypeId, comment.Id));
                    commentsVariableCollection.Parse("TIME", core.Tz.DateTimeToString(comment.GetTime(core.Tz)));
                    commentsVariableCollection.Parse("USER_ICON", commentPoster.Icon);
                    commentsVariableCollection.Parse("USER_TILE", commentPoster.Tile);
                    commentsVariableCollection.Parse("USER_SQUARE", commentPoster.Square);

                    if (comment.Info.Likes > 0)
                    {
                        commentsVariableCollection.Parse("LIKES", string.Format("{0:d} ", comment.Info.Likes));
                    }

                    if (comment.Info.Dislikes > 0)
                    {
                        commentsVariableCollection.Parse("DISLIKES", string.Format(" {0:d}", comment.Info.Dislikes));
                    }

                    if (comment.Info.SharedTimes > 0)
                    {
                        commentsVariableCollection.Parse("SHARES", string.Format(" ({0:d})", comment.Info.SharedTimes));
                    }

                    if (hook != null)
                    {
                        hook(new DisplayCommentHookEventArgs(core, owner, commentPoster, commentsVariableCollection));
                    }

                    if (core.Session.IsLoggedIn)
                    {
                        if (owner.CanModerateComments(core.Session.LoggedInMember))
                        {
                            commentsVariableCollection.Parse("MODERATE", "TRUE");
                        }
                    }

                    if (owner.IsItemOwner(commentPoster))
                    {
                        commentsVariableCollection.Parse("OWNER", "TRUE");
                        commentsVariableCollection.Parse("NORMAL", "FALSE");
                    }
                    else
                    {
                        commentsVariableCollection.Parse("OWNER", "FALSE");
                        commentsVariableCollection.Parse("NORMAL", "TRUE");
                    }

                    if (comment.SpamScore >= 10)
                    {
                        commentsVariableCollection.Parse("IS_SPAM", "TRUE");
                    }
                }
                catch
                {
                    // if userid is 0, anonymous
                    commentsVariableCollection.Parse("USERNAME", "Anonymous");
                    commentsVariableCollection.Parse("TIME", core.Tz.DateTimeToString(comment.GetTime(core.Tz)));

                    commentsVariableCollection.Parse("OWNER", "FALSE");
                    commentsVariableCollection.Parse("NORMAL", "TRUE");
                }
            }

            template.Parse("LAST_ID", "lastId");
        }
예제 #6
0
        public List<GroupMember> GetMembers(int page, int perPage, string filter)
        {
            List<GroupMember> members = new List<GroupMember>();

            SelectQuery query = new SelectQuery("group_members");
            query.AddFields(UserInfo.GetFieldsPrefixed(core, typeof(User)));
            query.AddJoin(JoinTypes.Inner, UserInfo.GetTable(typeof(User)), "user_id", "user_id");
            query.AddFields(GroupMember.GetFieldsPrefixed(core, typeof(GroupMember)));
            query.AddField(new DataField("group_operators", "user_id", "user_id_go"));
            TableJoin tj = query.AddJoin(JoinTypes.Left, new DataField("group_members", "user_id"), new DataField("group_operators", "user_id"));
            tj.AddCondition(new DataField("group_members", "group_id"), new DataField("group_operators", "group_id"));
            query.AddCondition("`group_members`.`group_id`", groupId);
            query.AddCondition("group_member_approved", true);
            if (!string.IsNullOrEmpty(filter))
            {
                query.AddCondition(new DataField("user_keys", "user_name_first"), filter[0]);
            }
            query.AddSort(SortOrder.Ascending, "group_member_date_ut");
            query.LimitStart = (page - 1) * perPage;
            query.LimitCount = perPage;

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

            while (membersReader.Read())
            {
                members.Add(new GroupMember(core, membersReader));
            }

            membersReader.Close();
            membersReader.Dispose();

            return members;
        }
예제 #7
0
파일: User.cs 프로젝트: smithydll/boxsocial
        public List<Friend> GetFriends(int page, int perPage, string filter, bool sortOnline)
        {
            List<Friend> friends = new List<Friend>();

            SelectQuery query = new SelectQuery("user_relations");
            query.AddFields(User.GetFieldsPrefixed(core, typeof(User)));
            query.AddFields(UserInfo.GetFieldsPrefixed(core, typeof(UserInfo)));
            query.AddFields(UserProfile.GetFieldsPrefixed(core, typeof(UserProfile)));
            query.AddFields(UserRelation.GetFieldsPrefixed(core, typeof(UserRelation)));
            query.AddField(new DataField("gallery_items", "gallery_item_uri"));
            query.AddField(new DataField("gallery_items", "gallery_item_parent_path"));
            query.AddFields(ItemInfo.GetFieldsPrefixed(core, typeof(ItemInfo)));
            query.AddJoin(JoinTypes.Inner, User.GetTable(typeof(User)), "relation_you", "user_id");
            query.AddJoin(JoinTypes.Inner, UserInfo.GetTable(typeof(UserInfo)), "relation_you", "user_id");
            query.AddJoin(JoinTypes.Inner, UserProfile.GetTable(typeof(UserProfile)), "relation_you", "user_id");
            query.AddJoin(JoinTypes.Left, new DataField("user_profile", "profile_country"), new DataField("countries", "country_iso"));
            query.AddJoin(JoinTypes.Left, new DataField("user_profile", "profile_religion"), new DataField("religions", "religion_id"));
            query.AddJoin(JoinTypes.Left, new DataField("user_info", "user_icon"), new DataField("gallery_items", "gallery_item_id"));

            TableJoin join = query.AddJoin(JoinTypes.Left, new DataField(typeof(UserRelation), "relation_you"), new DataField(typeof(ItemInfo), "info_item_id"));
            join.AddCondition(new DataField(typeof(ItemInfo), "info_item_type_id"), ItemKey.GetTypeId(core, typeof(User)));

            query.AddCondition("relation_me", userId);
            query.AddCondition("relation_type", "FRIEND");
            if ((!string.IsNullOrEmpty(filter)) && filter.Length == 1)
            {
                query.AddCondition(new DataField(typeof(User), "user_name_first"), filter);
            }
            if (sortOnline)
            {
                query.AddSort(SortOrder.Descending, "user_last_visit_ut");
                query.AddSort(SortOrder.Ascending, new QueryCondition("relation_order", ConditionEquality.Equal, 0));
            }
            else
            {
                query.AddSort(SortOrder.Ascending, new QueryCondition("relation_order", ConditionEquality.Equal, 0));
            }
            query.LimitStart = (page - 1) * perPage;
            query.LimitCount = perPage;
            if (sortOnline)
            {
                query.LimitOrder = SortOrder.Descending;
            }

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

            while (friendsReader.Read())
            {
                friends.Add(new Friend(core, friendsReader, UserLoadOptions.All));
            }

            friendsReader.Close();
            friendsReader.Dispose();

            return friends;
        }
예제 #8
0
파일: User.cs 프로젝트: smithydll/boxsocial
        public List<long> GetFriendsWithMeIds(int count)
        {
            List<long> friendIds = new List<long>();

            SelectQuery query = new SelectQuery("user_relations uf");
            query.AddFields("uf.relation_me");
            query.AddCondition("uf.relation_you", userId);
            query.AddCondition("uf.relation_type", "FRIEND");
            query.AddSort(SortOrder.Ascending, "(uf.relation_order - 1)");
            query.AddSort(SortOrder.Ascending, "relation_time_ut");
            query.LimitCount = count;

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

            while (friendsReader.Read())
            {
                friendIds.Add((long)friendsReader["relation_me"]);
            }

            friendsReader.Close();
            friendsReader.Dispose();

            return friendIds;
        }
예제 #9
0
파일: User.cs 프로젝트: smithydll/boxsocial
        public List<Friend> GetFriends(string namePart)
        {
            List<Friend> friends = new List<Friend>();

            SelectQuery query = new SelectQuery("user_relations");
            query.AddFields(User.GetFieldsPrefixed(core, typeof(User)));
            query.AddFields(UserInfo.GetFieldsPrefixed(core, typeof(UserInfo)));
            query.AddFields(UserProfile.GetFieldsPrefixed(core, typeof(UserProfile)));
            query.AddFields(UserRelation.GetFieldsPrefixed(core, typeof(UserRelation)));
            query.AddField(new DataField("gallery_items", "gallery_item_uri"));
            query.AddField(new DataField("gallery_items", "gallery_item_parent_path"));
            query.AddFields(ItemInfo.GetFieldsPrefixed(core, typeof(ItemInfo)));
            query.AddJoin(JoinTypes.Inner, User.GetTable(typeof(User)), "relation_you", "user_id");
            query.AddJoin(JoinTypes.Inner, UserInfo.GetTable(typeof(UserInfo)), "relation_you", "user_id");
            query.AddJoin(JoinTypes.Inner, UserProfile.GetTable(typeof(UserProfile)), "relation_you", "user_id");
            query.AddJoin(JoinTypes.Left, new DataField("user_info", "user_icon"), new DataField("gallery_items", "gallery_item_id"));

            TableJoin join = query.AddJoin(JoinTypes.Left, new DataField(typeof(UserRelation), "relation_you"), new DataField(typeof(ItemInfo), "info_item_id"));
            join.AddCondition(new DataField(typeof(ItemInfo), "info_item_type_id"), ItemKey.GetTypeId(core, typeof(User)));

            query.AddCondition("relation_me", userId);
            query.AddCondition("relation_type", "FRIEND");
            QueryCondition qc1 = query.AddCondition(new DataField("user_info", "user_name"), ConditionEquality.Like, namePart + "%");
            qc1.AddCondition(ConditionRelations.Or, new DataField("user_profile", "profile_name_first"), ConditionEquality.Like, namePart + "%");
            qc1.AddCondition(ConditionRelations.Or, new DataField("user_info", "user_name_display"), ConditionEquality.Like, namePart + "%");
            query.AddSort(SortOrder.Ascending, "(relation_order - 1)");
            query.LimitCount = 10;

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

            while (friendsReader.Read())
            {
                friends.Add(new Friend(core, friendsReader, UserLoadOptions.All));
            }

            friendsReader.Close();
            friendsReader.Dispose();

            return friends;
        }
예제 #10
0
        public List<SubGroupMember> GetMembersWaitingApproval()
        {
            List<SubGroupMember> members = new List<SubGroupMember>();

            SelectQuery query = new SelectQuery("sub_group_members");
            query.AddJoin(JoinTypes.Inner, "user_keys", "user_id", "user_id");
            query.AddFields(GroupMember.GetFieldsPrefixed(core, typeof(SubGroupMember)));
            query.AddCondition("`sub_group_members`.`sub_group_id`", subGroupId);
            query.AddCondition("sub_group_member_is_leader", false);
            query.AddCondition("sub_group_member_approved", false);
            query.AddSort(SortOrder.Ascending, "sub_group_member_date_ut");

            DataTable membersTable = db.Query(query);

            List<long> memberIds = new List<long>();

            foreach (DataRow dr in membersTable.Rows)
            {
                memberIds.Add((long)dr["user_id"]);
            }

            core.LoadUserProfiles(memberIds);

            foreach (DataRow dr in membersTable.Rows)
            {
                members.Add(new SubGroupMember(core, dr));
            }

            return members;
        }
예제 #11
0
        public List<SubGroupMember> GetMembers(int page, int perPage, string filter)
        {
            List<SubGroupMember> members = new List<SubGroupMember>();

            SelectQuery query = new SelectQuery("sub_group_members");
            query.AddJoin(JoinTypes.Inner, "user_keys", "user_id", "user_id");
            query.AddFields(GroupMember.GetFieldsPrefixed(core, typeof(SubGroupMember)));
            query.AddCondition("`sub_group_members`.`sub_group_id`", subGroupId);
            query.AddCondition("sub_group_member_is_leader", false);
            query.AddCondition("sub_group_member_approved", true);
            if (!string.IsNullOrEmpty(filter))
            {
                query.AddCondition(new DataField("user_keys", "user_name_first"), filter[0]);
            }
            query.AddSort(SortOrder.Ascending, "sub_group_member_date_ut");
            query.LimitStart = (page - 1) * perPage;
            query.LimitCount = perPage;

            DataTable membersTable = db.Query(query);

            List<long> memberIds = new List<long>();

            foreach (DataRow dr in membersTable.Rows)
            {
                memberIds.Add((long)dr["user_id"]);
            }

            core.LoadUserProfiles(memberIds);

            foreach (DataRow dr in membersTable.Rows)
            {
                members.Add(new SubGroupMember(core, dr));
            }

            return members;
        }
예제 #12
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="core"></param>
        /// <param name="parent"></param>
        /// <param name="title"></param>
        /// <param name="description"></param>
        /// <param name="rules"></param>
        /// <param name="permissions"></param>
        /// <param name="isCategory"></param>
        /// <returns></returns>
        /// <exception cref="NullCoreException"></exception>
        /// <exception cref="InvalidForumException"></exception>
        /// <exception cref="UnauthorisedToCreateItemException"></exception>
        public static Forum Create(Core core, Forum parent, string title, string description, string rules, ushort permissions, bool isCategory)
        {
            string parents;
            int order = 0;
            int level = 0;

            //core.db.BeginTransaction();

            if (core == null)
            {
                throw new NullCoreException();
            }

            if (parent == null)
            {
                throw new InvalidForumException();
            }

            level = parent.Level + 1;

            if (parent.Owner is UserGroup)
            {
                if (!((UserGroup)parent.Owner).IsGroupOperator(core.Session.LoggedInMember.ItemKey))
                {
                    // todo: throw new exception
                    throw new UnauthorisedToCreateItemException();
                }
            }

            SelectQuery query = new SelectQuery(GetTable(typeof(Forum)));
            query.AddFields("forum_order");
            query.AddCondition("forum_order", ConditionEquality.GreaterThan, parent.Order);
            query.AddCondition("forum_item_id", parent.Owner.Id);
            query.AddCondition("forum_item_type_id", parent.Owner.TypeId);
            query.AddCondition("forum_parent_id", parent.Id);
            query.AddSort(SortOrder.Descending, "forum_order");
            query.LimitCount = 1;

            DataTable orderTable = core.Db.Query(query);

            if (orderTable.Rows.Count == 1)
            {
                order = (int)orderTable.Rows[0]["forum_order"] + 1;
            }
            else
            {
                order = parent.Order + 1;
            }

            // increment all items below in the order
            UpdateQuery uQuery = new UpdateQuery(GetTable(typeof(Forum)));
            uQuery.AddField("forum_order", new QueryOperation("forum_order", QueryOperations.Addition, 1));
            uQuery.AddCondition("forum_order", ConditionEquality.GreaterThanEqual, order);
            uQuery.AddCondition("forum_item_id", parent.Owner.Id);
            uQuery.AddCondition("forum_item_type_id", parent.Owner.TypeId);

            core.Db.Query(uQuery);

            ParentTree parentTree = new ParentTree();

            if (parent.Parents != null)
            {
                foreach (ParentTreeNode ptn in parent.Parents.Nodes)
                {
                    parentTree.Nodes.Add(new ParentTreeNode(ptn.ParentTitle, ptn.ParentId));
                }
            }

            if (parent.Id > 0)
            {
                parentTree.Nodes.Add(new ParentTreeNode(parent.Title, parent.Id));
            }

            XmlSerializer xs = new XmlSerializer(typeof(ParentTree));
            StringBuilder sb = new StringBuilder();
            StringWriter stw = new StringWriter(sb);

            xs.Serialize(stw, parentTree);
            stw.Flush();
            stw.Close();

            parents = sb.ToString();

            InsertQuery iquery = new InsertQuery(GetTable(typeof(Forum)));
            iquery.AddField("forum_parent_id", parent.Id);
            iquery.AddField("forum_title", title);
            iquery.AddField("forum_description", description);
            iquery.AddField("forum_rules", rules);
            iquery.AddField("forum_order", order);
            iquery.AddField("forum_level", level);
            iquery.AddField("forum_category", isCategory);
            iquery.AddField("forum_locked", false);
            iquery.AddField("forum_topics", 0);
            iquery.AddField("forum_posts", 0);
            iquery.AddField("forum_item_id", parent.Owner.Id);
            iquery.AddField("forum_item_type_id", parent.Owner.TypeId);
            iquery.AddField("forum_parents", parents);
            iquery.AddField("forum_last_post_id", 0);
            iquery.AddField("forum_last_post_time_ut", UnixTime.UnixTimeStamp());

            long forumId = core.Db.Query(iquery);

            Forum forum = new Forum(core, forumId);

            /* LOAD THE DEFAULT ITEM PERMISSIONS */
            //Access.CreateAllGrantsForOwner(core, forum);

            if (parent.Owner is UserGroup)
            {
                Access.CreateGrantForPrimitive(core, forum, UserGroup.GetGroupMembersGroupKey(core), "VIEW");
                Access.CreateGrantForPrimitive(core, forum, UserGroup.GetGroupMembersGroupKey(core), "VIEW_TOPICS");
                Access.CreateGrantForPrimitive(core, forum, UserGroup.GetGroupMembersGroupKey(core), "LIST_TOPICS");
                Access.CreateGrantForPrimitive(core, forum, UserGroup.GetGroupMembersGroupKey(core), "REPLY_TOPICS");
                Access.CreateGrantForPrimitive(core, forum, UserGroup.GetGroupMembersGroupKey(core), "CREATE_TOPICS");
                Access.CreateGrantForPrimitive(core, forum, UserGroup.GetGroupMembersGroupKey(core), "REPORT_POSTS");
                Access.CreateGrantForPrimitive(core, forum, UserGroup.GetGroupOperatorsGroupKey(core), "CREATE_STICKY");
                Access.CreateGrantForPrimitive(core, forum, UserGroup.GetGroupOfficersGroupKey(core), "CREATE_STICKY");
                Access.CreateGrantForPrimitive(core, forum, UserGroup.GetGroupOperatorsGroupKey(core), "CREATE_ANNOUNCEMENT");
            }

            return forum;
        }
예제 #13
0
        void AccountProfileInfo_Show(object sender, EventArgs e)
        {
            SetTemplate("account_profile");

            RadioList genderRadioList = new RadioList("gender");
            genderRadioList.Add(new RadioListItem(genderRadioList.Name, ((byte)Gender.Undefined).ToString(), core.Prose.GetString("NONE_SPECIFIED")));
            genderRadioList.Add(new RadioListItem(genderRadioList.Name, ((byte)Gender.Male).ToString(), core.Prose.GetString("MALE")));
            genderRadioList.Add(new RadioListItem(genderRadioList.Name, ((byte)Gender.Female).ToString(), core.Prose.GetString("FEMALE")));
            genderRadioList.Add(new RadioListItem(genderRadioList.Name, ((byte)Gender.Intersex).ToString(), core.Prose.GetString("INTERSEX")));
            genderRadioList.SelectedKey = ((byte)LoggedInMember.Profile.GenderRaw).ToString();
            genderRadioList.Layout = Layout.Horizontal;

            TextBox heightTextBox = new TextBox("height");
            heightTextBox.MaxLength = 3;
            heightTextBox.Width = new StyleLength(3F, LengthUnits.Em);
            heightTextBox.Value = LoggedInMember.Profile.Height.ToString();

            SelectBox dobYearsSelectBox = new SelectBox("dob-year");

            for (int i = DateTime.Now.AddYears(-110).Year; i < DateTime.Now.AddYears(-13).Year; i++)
            {
                dobYearsSelectBox.Add(new SelectBoxItem(i.ToString(), i.ToString()));
            }

            if (LoggedInMember.Profile.DateOfBirth != null)
            {
                dobYearsSelectBox.SelectedKey = LoggedInMember.Profile.DateOfBirth.Year.ToString();
            }

            SelectBox dobMonthsSelectBox = new SelectBox("dob-month");

            for (int i = 1; i < 13; i++)
            {
                dobMonthsSelectBox.Add(new SelectBoxItem(i.ToString(), core.Functions.IntToMonth(i)));
            }

            if (LoggedInMember.Profile.DateOfBirth != null)
            {
                dobMonthsSelectBox.SelectedKey = LoggedInMember.Profile.DateOfBirth.Month.ToString();
            }

            SelectBox dobDaysSelectBox = new SelectBox("dob-day");

            for (int i = 1; i < 32; i++)
            {
                dobDaysSelectBox.Add(new SelectBoxItem(i.ToString(), i.ToString()));
            }

            if (LoggedInMember.Profile.DateOfBirth != null)
            {
                dobDaysSelectBox.SelectedKey = LoggedInMember.Profile.DateOfBirth.Day.ToString();
            }

            SelectBox countriesSelectBox = new SelectBox("country");

            SelectQuery query = new SelectQuery("countries");
            query.AddFields("*");
            query.AddSort(SortOrder.Ascending, "country_name");

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

            countriesSelectBox.Add(new SelectBoxItem("", "Unspecified"));

            while (countriesReader.Read())
            {
                countriesSelectBox.Add(new SelectBoxItem((string)countriesReader["country_iso"], (string)countriesReader["country_name"]));
            }

            countriesReader.Close();
            countriesReader.Dispose();

            if (LoggedInMember.Profile.CountryIso != null)
            {
                countriesSelectBox.SelectedKey = LoggedInMember.Profile.CountryIso;
            }

            template.Parse("S_GENDER", genderRadioList);

            template.Parse("S_DOB_YEAR", dobYearsSelectBox);
            template.Parse("S_DOB_MONTH", dobMonthsSelectBox);
            template.Parse("S_DOB_DAY", dobDaysSelectBox);
            template.Parse("S_COUNTRY", countriesSelectBox);
            template.Parse("S_HEIGHT", heightTextBox);

            template.Parse("S_AUTO_BIOGRAPHY", LoggedInMember.Profile.Autobiography);

            Save(new EventHandler(AccountProfileInfo_Save));
        }