public List<MusicianMember> GetMembers() { List<MusicianMember> members = new List<MusicianMember>(); SelectQuery query = new SelectQuery(typeof(MusicianMember)); query.AddField(new DataField(typeof(MusicianMember), "user_id")); query.AddCondition("musician_id", musicianId); 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 MusicianMember(core, dr)); } return members; }
public UserGroup(Core core, long groupId, UserGroupLoadOptions loadOptions) : base(core) { ItemLoad += new ItemLoadHandler(UserGroup_ItemLoad); bool containsInfoData = false; bool containsIconData = false; if (loadOptions == UserGroupLoadOptions.Key) { try { LoadItem(groupId); } catch (InvalidItemException) { throw new InvalidGroupException(); } } else { SelectQuery query = new SelectQuery(UserGroup.GetTable(typeof(UserGroup))); query.AddFields(UserGroup.GetFieldsPrefixed(core, typeof(UserGroup))); query.AddCondition("`group_keys`.`group_id`", groupId); if ((loadOptions & UserGroupLoadOptions.Info) == UserGroupLoadOptions.Info) { containsInfoData = true; query.AddJoin(JoinTypes.Inner, UserGroupInfo.GetTable(typeof(UserGroupInfo)), "group_id", "group_id"); query.AddFields(UserGroupInfo.GetFieldsPrefixed(core, typeof(UserGroupInfo))); if ((loadOptions & UserGroupLoadOptions.Icon) == UserGroupLoadOptions.Icon) { containsIconData = true; query.AddJoin(JoinTypes.Left, new DataField("group_info", "group_icon"), new DataField("gallery_items", "gallery_item_id")); query.AddField(new DataField("gallery_items", "gallery_item_uri")); query.AddField(new DataField("gallery_items", "gallery_item_parent_path")); } } DataTable groupTable = db.Query(query); if (groupTable.Rows.Count > 0) { loadItemInfo(typeof(UserGroup), groupTable.Rows[0]); if (containsInfoData) { groupInfo = new UserGroupInfo(core, groupTable.Rows[0]); } if (containsIconData) { loadUserGroupIcon(groupTable.Rows[0]); } } else { throw new InvalidGroupException(); } } }
public static SelectQuery GetSelectQueryStub(Core core, MusicianLoadOptions loadOptions) { SelectQuery query = new SelectQuery(GetTable(typeof(Musician))); query.AddFields(Musician.GetFieldsPrefixed(core, typeof(Musician))); if ((loadOptions & MusicianLoadOptions.Icon) == MusicianLoadOptions.Icon) { query.AddJoin(JoinTypes.Left, new DataField(typeof(Musician), "musician_icon"), new DataField("gallery_items", "gallery_item_id")); query.AddField(new DataField("gallery_items", "gallery_item_uri")); query.AddField(new DataField("gallery_items", "gallery_item_parent_path")); } return query; }
public List<GroupMember> GetOperators(int page, int perPage) { List<GroupMember> operators = new List<GroupMember>(); SelectQuery query = new SelectQuery("group_operators"); query.AddFields(GroupMember.GetFieldsPrefixed(core, typeof(GroupMember))); query.AddFields(UserInfo.GetFieldsPrefixed(core, typeof(User))); query.AddJoin(JoinTypes.Inner, UserInfo.GetTable(typeof(User)), "user_id", "user_id"); query.AddField(new DataField("group_operators", "user_id")); TableJoin tj = query.AddJoin(JoinTypes.Left, new DataField("group_operators", "user_id"), new DataField("group_members", "user_id")); tj.AddCondition(new DataField("group_members", "group_id"), groupId); query.AddCondition(new DataField("group_operators", "group_id"), groupId); System.Data.Common.DbDataReader membersReader = db.ReaderQuery(query); while(membersReader.Read()) { operators.Add(new GroupMember(core, membersReader)); } membersReader.Close(); membersReader.Dispose(); return operators; }
public bool IsGroupOperator(ItemKey member) { if (member != null) { if (groupOperatorCache.ContainsKey(member)) { return groupOperatorCache[member]; } else { SelectQuery query = new SelectQuery(typeof(GroupOperator)); query.AddField(new DataField(typeof(GroupOperator), "user_id")); query.AddCondition(new DataField(typeof(GroupOperator), "group_id"), groupId); query.AddCondition(new DataField(typeof(GroupOperator), "user_id"), member.Id); System.Data.Common.DbDataReader operatorReader = db.ReaderQuery(query); /* string.Format("SELECT user_id FROM group_operators WHERE group_id = {0} AND user_id = {1}", groupId, member.Id) */ if (operatorReader.HasRows) { operatorReader.Close(); operatorReader.Dispose(); groupOperatorCache.Add(member, true); return true; } else { operatorReader.Close(); operatorReader.Dispose(); groupOperatorCache.Add(member, false); return false; } } } return false; }
private bool canNotify(Core core, User owner) { SelectQuery query = new SelectQuery("notifications"); query.AddField(new QueryFunction("notification_id", QueryFunctions.Count, "twentyfour")); //"COUNT(notification_id) as twentyfour"); query.AddCondition("notification_primitive_id", owner.Id); query.AddCondition("notification_primitive_type_id", owner.TypeId); query.AddCondition("notification_application", applicationId); query.AddCondition("notification_time_ut", ConditionEquality.GreaterThan, UnixTime.UnixTimeStamp() - 60 * 60 * 24); // maximum ten per application per day // TODO: change this if ((long)core.Db.Query(query).Rows[0]["twentyfour"] < 20) { // this used to return true only if e-mail notifications which is should be checked separately return true; } return false; }
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; }
public static SelectQuery GetSelectQueryStub(Core core, UserGroupLoadOptions loadOptions) { SelectQuery query = new SelectQuery(UserGroup.GetTable(typeof(UserGroup))); query.AddFields(UserGroup.GetFieldsPrefixed(core, typeof(UserGroup))); query.AddFields(ItemInfo.GetFieldsPrefixed(core, typeof(ItemInfo))); TableJoin join = query.AddJoin(JoinTypes.Left, new DataField(typeof(UserGroup), "group_id"), new DataField(typeof(ItemInfo), "info_item_id")); join.AddCondition(new DataField(typeof(ItemInfo), "info_item_type_id"), ItemKey.GetTypeId(core, typeof(UserGroup))); if ((loadOptions & UserGroupLoadOptions.Info) == UserGroupLoadOptions.Info) { query.AddJoin(JoinTypes.Inner, UserGroupInfo.GetTable(typeof(UserGroupInfo)), "group_id", "group_id"); query.AddFields(UserGroupInfo.GetFieldsPrefixed(core, typeof(UserGroupInfo))); if ((loadOptions & UserGroupLoadOptions.Icon) == UserGroupLoadOptions.Icon) { query.AddJoin(JoinTypes.Left, new DataField("group_info", "group_icon"), new DataField("gallery_items", "gallery_item_id")); query.AddField(new DataField("gallery_items", "gallery_item_uri")); query.AddField(new DataField("gallery_items", "gallery_item_parent_path")); } } return query; }
public UserGroup(Core core, string groupName, UserGroupLoadOptions loadOptions) : base(core) { ItemLoad += new ItemLoadHandler(UserGroup_ItemLoad); bool containsInfoData = false; bool containsIconData = false; if (loadOptions == UserGroupLoadOptions.Key) { try { LoadItem("group_name", groupName); } catch (InvalidItemException) { throw new InvalidGroupException(); } } else { SelectQuery query = new SelectQuery(UserGroup.GetTable(typeof(UserGroup))); query.AddFields(UserGroup.GetFieldsPrefixed(core, typeof(UserGroup))); query.AddCondition("`group_keys`.`group_name`", groupName); if ((loadOptions & UserGroupLoadOptions.Info) == UserGroupLoadOptions.Info) { containsInfoData = true; query.AddJoin(JoinTypes.Inner, UserGroupInfo.GetTable(typeof(UserGroupInfo)), "group_id", "group_id"); query.AddFields(UserGroupInfo.GetFieldsPrefixed(core, typeof(UserGroupInfo))); if ((loadOptions & UserGroupLoadOptions.Icon) == UserGroupLoadOptions.Icon) { containsIconData = true; query.AddJoin(JoinTypes.Left, new DataField("group_info", "group_icon"), new DataField("gallery_items", "gallery_item_id")); query.AddField(new DataField("gallery_items", "gallery_item_uri")); query.AddField(new DataField("gallery_items", "gallery_item_parent_path")); } } System.Data.Common.DbDataReader groupReader = db.ReaderQuery(query); if (groupReader.HasRows) { groupReader.Read(); loadItemInfo(typeof(UserGroup), groupReader); if (containsInfoData) { groupInfo = new UserGroupInfo(core, groupReader); } if (containsIconData) { loadUserGroupIcon(groupReader); } groupReader.Close(); groupReader.Dispose(); } else { groupReader.Close(); groupReader.Dispose(); throw new InvalidGroupException(); } } }
public Relation GetRelations(ItemKey member) { Relation returnValue = Relation.None; if (member == null) { return Relation.None; } if (member.Id == userId) { return Relation.Owner; } SelectQuery query = new SelectQuery(typeof(UserRelation)); query.AddField(new DataField(typeof(UserRelation), "relation_type")); query.AddField(new DataField(typeof(UserRelation), "relation_order")); query.AddCondition(new DataField(typeof(UserRelation), "relation_me"), userId); query.AddCondition(new DataField(typeof(UserRelation), "relation_you"), member.Id); System.Data.Common.DbDataReader relationReader = db.ReaderQuery(query); /*string.Format("SELECT relation_type, relation_order FROM user_relations WHERE relation_me = {0} AND relation_you = {1};", userId, member.Id)*/ while (relationReader.Read()) { if ((string)relationReader["relation_type"] == "FRIEND") { returnValue |= Relation.Friend; } if ((string)relationReader["relation_type"] == "FAMILY") { returnValue |= Relation.Family; } if ((string)relationReader["relation_type"] == "BLOCKED") { returnValue |= Relation.Blocked; } } relationReader.Close(); relationReader.Dispose(); return returnValue; }
/// <summary> /// Gets a list of entries in the blog fullfilling a given criteria. /// </summary> /// <param name="category">Category to select</param> /// <param name="post">Post id to select</param> /// <param name="year">Year to select</param> /// <param name="month">Month to select</param> /// <param name="currentPage">Current page</param> /// <param name="perPage">Number to show on each page</param> /// <param name="drafts">Flag to select draft posts or published posts (true for drafts)</param> /// <returns>A list of blog entries</returns> /// <remarks>A number of conditions may be omitted. Integer values can be omitted by passing -1. String values by passing a null or empty string.</remarks> private List<BlogEntry> GetEntries(string category, string tag, long post, int year, int month, int currentPage, int perPage, long currentOffset, bool drafts, bool future, out bool moreContent) { double pessimism = 1.2; List<BlogEntry> entries = new List<BlogEntry>(); moreContent = false; long loggedIdUid = core.LoggedInMemberId; SelectQuery query = null; if (string.IsNullOrEmpty(category) && string.IsNullOrEmpty(tag)) { query = Item.GetSelectQueryStub(core, typeof(BlogEntry)); query.AddField(new DataField(typeof(BlogEntry), "post_id")); if (post > 0) { query.AddCondition("post_id", post); } if (year > 0) { query.AddCondition("YEAR(FROM_UNIXTIME(post_published_ut))", year); } if (month > 0) { query.AddCondition("MONTH(FROM_UNIXTIME(post_published_ut))", month); } } else if (string.IsNullOrEmpty(tag)) { query = Item.GetSelectQueryStub(core, typeof(BlogEntry)); query.AddField(new DataField(typeof(BlogEntry), "post_id")); query.AddCondition("category_path", category); query.AddJoin(JoinTypes.Inner, "global_categories", "post_category", "category_id"); } else { query = Item.GetSelectQueryStub(core, typeof(ItemTag)); query.AddFields(Item.GetFieldsPrefixed(core, typeof(BlogEntry))); query.AddJoin(JoinTypes.Inner, new DataField(typeof(ItemTag), "item_id"), new DataField(typeof(BlogEntry), "post_id")); query.AddCondition("item_type_id", ItemType.GetTypeId(core, typeof(BlogEntry))); query.AddCondition("tag_text_normalised", tag); } // Include blog entries from the past only if future is false if (!future) { query.AddCondition(new DataField(typeof(BlogEntry), "post_published_ut"), ConditionEquality.LessThanEqual, UnixTime.UnixTimeStamp()); } int bpage = currentPage; if (post > 0) { bpage = 1; } int limitStart = (bpage - 1) * perPage; PublishStatuses status = (drafts) ? PublishStatuses.Draft : ((future) ? PublishStatuses.Queued : PublishStatuses.Published); query.AddCondition("post_status", (byte)status); query.AddCondition("user_id", UserId); query.AddSort(SortOrder.Descending, "post_published_ut"); /*query.LimitStart = (bpage - 1) * perPage;*/ if ((currentOffset > 0 && currentPage > 1) || currentOffset == 0) { long lastId = 0; long lastPostTime = 0; QueryCondition qc1 = null; QueryCondition qc2 = null; SelectQuery offsetQuery = new SelectQuery(typeof(BlogEntry)); offsetQuery.AddField(new DataField(typeof(BlogEntry), "post_published_ut")); offsetQuery.AddCondition("post_id", currentOffset); if (currentOffset > 0) { qc1 = query.AddCondition("post_published_ut", ConditionEquality.LessThan, offsetQuery); } query.LimitCount = (int)(perPage * pessimism); while (entries.Count <= perPage) { List<IPermissibleItem> tempBlogEntries = new List<IPermissibleItem>(); /*DataTable blogEntriesTable = db.Query(query); if (blogEntriesTable.Rows.Count == 0) { break; } foreach (DataRow row in blogEntriesTable.Rows) { BlogEntry entry = new BlogEntry(core, this, owner, row); tempBlogEntries.Add(entry); }*/ System.Data.Common.DbDataReader blogReader = core.Db.ReaderQuery(query); if (!blogReader.HasRows) { blogReader.Close(); blogReader.Dispose(); break; } while (blogReader.Read()) { BlogEntry entry = new BlogEntry(core, this, owner, blogReader); tempBlogEntries.Add(entry); } blogReader.Close(); blogReader.Dispose(); core.AcessControlCache.CacheGrants(tempBlogEntries); foreach (IPermissibleItem entry in tempBlogEntries) { if (entry.Access.Can("VIEW")) { if (entries.Count == perPage) { moreContent = true; break; } else { entries.Add((BlogEntry)entry); } } lastId = entry.Id; lastPostTime = ((BlogEntry)entry).PublishedDateRaw; } //query.LimitStart += query.LimitCount; if (qc1 == null) { SelectQuery oQuery = new SelectQuery(typeof(BlogEntry)); oQuery.AddField(new DataField(typeof(BlogEntry), "post_published_ut")); oQuery.AddCondition("post_id", currentOffset); qc1 = query.AddCondition("post_published_ut", ConditionEquality.LessThan, oQuery); } else { qc1.Value = lastId; } if (qc2 == null) { qc2 = query.AddCondition("post_published_ut", ConditionEquality.LessThanEqual, lastPostTime); } else { qc2.Value = lastPostTime; } query.LimitCount = (int)(query.LimitCount * pessimism); if (moreContent || post > 0) { break; } } } else { DataTable blogEntriesTable = db.Query(query); /* Check ACLs, not the most efficient, but will only check mostly newer content which should be viewed first. */ int offset = 0; int i = 0; while (i < limitStart + perPage + 1 && offset < blogEntriesTable.Rows.Count) { List<IPermissibleItem> tempBlogEntries = new List<IPermissibleItem>(); int j = 0; for (j = offset; j < Math.Min(offset + perPage * 2, blogEntriesTable.Rows.Count); j++) { BlogEntry entry = new BlogEntry(core, this, owner, blogEntriesTable.Rows[j]); tempBlogEntries.Add(entry); } if (tempBlogEntries.Count > 0) { core.AcessControlCache.CacheGrants(tempBlogEntries); foreach (IPermissibleItem entry in tempBlogEntries) { if (entry.Access.Can("VIEW")) { if (i >= limitStart + perPage) { moreContent = true; break; } if (i >= limitStart) { entries.Add((BlogEntry)entry); } i++; } } } else { break; } offset = j; } } return entries; }
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; }
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; }
public static void LoadAssemblies(Mysql db) { string assemblyPath = null; SelectQuery query = new SelectQuery("applications"); query.AddField(new DataField("applications", "application_id")); query.AddField(new DataField("applications", "application_assembly_name")); query.AddField(new DataField("applications", "application_locked")); query.AddField(new DataField("applications", "application_update")); query.AddField(new DataField("applications", "application_primitive")); query.AddCondition("application_type", (byte)ApplicationType.Native); System.Data.Common.DbDataReader applicationReader = db.ReaderQuery(query); while (applicationReader.Read()) { long applicationId = (long)applicationReader["application_id"]; string assemblyName = (string)applicationReader["application_assembly_name"]; bool isPrimitive = false; if (applicationReader["application_primitive"] is bool) { isPrimitive = (bool)applicationReader["application_primitive"]; } else if (applicationReader["application_primitive"] is byte) { isPrimitive = ((byte)applicationReader["application_primitive"] > 0) ? true : false; } else if (applicationReader["application_primitive"] is sbyte) { isPrimitive = ((sbyte)applicationReader["application_primitive"] > 0) ? true : false; } else { isPrimitive = false; } if (isPrimitive) { if (Directory.Exists(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin"))) { assemblyPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin", assemblyName + ".dll"); } else { assemblyPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, assemblyName + ".dll"); } } else { if (Directory.Exists(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin"))) { assemblyPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin", "applications", assemblyName + ".dll"); } else { assemblyPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "applications", assemblyName + ".dll"); } } if (!string.IsNullOrEmpty(assemblyPath)) { Assembly assembly = Assembly.LoadFrom(assemblyPath); LoadedAssemblies[applicationId] = assembly; AssemblyNames[assemblyName] = applicationId; } } applicationReader.Close(); applicationReader.Dispose(); }
private static ItemViewDiscountedReason VerifyView(Core core, ItemView view) { ItemViewDiscountedReason returnValue = ItemViewDiscountedReason.None; if (SessionState.IsBotUserAgent(view.HttpUserAgent) != null) { return ItemViewDiscountedReason.BotDetected; } // Select the number of views within 24 hours of the view SelectQuery query = new SelectQuery(typeof(ItemView)); query.AddField(new QueryFunction("view_id", QueryFunctions.Count, "real_views")); query.AddCondition("view_item_id", view.ViewKey.Id); query.AddCondition("view_item_type_id", view.ViewKey.TypeId); //query.AddCondition("view_processed", true); QueryCondition qc1 = query.AddCondition("view_ip", view.viewIp); QueryCondition qc2 = qc1.AddCondition("view_time_ut", ConditionEquality.GreaterThan, view.viewTimeRaw - 60 * 60 * 24); // last 24 hours qc2.AddCondition("view_time_ut", ConditionEquality.LessThan, view.viewTimeRaw + 60 * 5); // any in the next 5 minutes discounts the whole set qc1.AddCondition(ConditionRelations.Or, "view_session_id", view.viewSessionId); if (view.userId > 0) { qc1.AddCondition(ConditionRelations.Or, "user_id", view.userId); } if ((long)core.Db.Query(query).Rows[0]["real_views"] > 1) { returnValue = returnValue | ItemViewDiscountedReason.RateLimited; } if ((!view.viewHttpUserAgent.ToLower().Contains("mozilla/") && !view.viewHttpUserAgent.ToLower().Contains("gecko")) || view.viewHttpUserAgent.Length < 32) { returnValue = returnValue | ItemViewDiscountedReason.BadUserAgent; } // query = new SelectQuery(typeof(ItemView)); query.AddField(new QueryFunction("view_id", QueryFunctions.Count, "real_views")); query.AddCondition("view_ip", view.viewIp); query.AddCondition("view_time_ut", ConditionEquality.GreaterThan, view.viewTimeRaw - 10); query.AddCondition("view_time_ut", ConditionEquality.LessThan, view.viewTimeRaw + 10); if ((long)core.Db.Query(query).Rows[0]["real_views"] > 8) { returnValue = returnValue | ItemViewDiscountedReason.RateLimited; } // ensure that the session is only used by ONE browser, no session hijacking query = new SelectQuery(typeof(ItemView)); query.AddField(new DataField(typeof(ItemView), "view_http_user_agent")); query.AddCondition("view_session_id", view.viewSessionId); query.AddCondition("view_time_ut", ConditionEquality.GreaterThan, view.viewTimeRaw - 3600); query.AddCondition("view_time_ut", ConditionEquality.LessThan, view.viewTimeRaw + 3600); query.Distinct = true; if ((long)core.Db.Query(query).Rows.Count > 1) { returnValue = returnValue | ItemViewDiscountedReason.BotDetected; } long viewQuality = 0; if (view.viewTimespan > 60) { viewQuality += 3; } else if (view.viewTimespan > 30) { viewQuality += 2; } else if (view.viewTimespan > 5) { viewQuality++; } if (view.viewJavascript) { viewQuality++; } if (view.viewCookies) { viewQuality++; } else { // cookies can't be detected on the landing page, but a legit IP with a cookie is unlikely to go bad even if shared query = new SelectQuery(typeof(ItemView)); query.AddField(new QueryFunction("view_id", QueryFunctions.Count, "real_views")); query.AddCondition("view_ip", view.viewIp); query.AddCondition("view_cookies", true); if ((long)core.Db.Query(query).Rows[0]["real_views"] > 0) { viewQuality++; } } if (IsRecentBrowser(view.viewHttpUserAgent)) { viewQuality += 2; } else { returnValue = returnValue | ItemViewDiscountedReason.OldUserAgent; } if (!string.IsNullOrEmpty(view.viewHttpReferer)) { viewQuality++; } if (viewQuality < 3) { returnValue = returnValue | ItemViewDiscountedReason.LowQuality; } return returnValue; }
public bool CheckSubGroupNameUnique(string groupName) { SelectQuery query = new SelectQuery(typeof(SubUserGroup)); query.AddField(new DataField(typeof(SubUserGroup), "sub_group_name")); query.AddCondition(new QueryFunction("sub_group_name", QueryFunctions.ToLowerCase), groupName); query.AddCondition("sub_group_parent_id", Id); if (Query(query).Rows.Count > 0) { return false; } return true; }
// TODO: use user public static void Show(Core core, UPage page, string user) { core.Template.SetTemplate("GuestBook", "viewguestbook"); page.User.LoadProfileInfo(); if (!page.User.Access.Can("VIEW")) { core.Functions.Generate403(); return; } /* pages */ core.Display.ParsePageList(page.Owner, true); core.Template.Parse("PAGE_TITLE", string.Format(core.Prose.GetString("USERS_GUEST_BOOK"), page.Owner.DisplayNameOwnership)); if (core.Session.IsLoggedIn) { if (page.User.Access.Can("COMMENT")) { core.Template.Parse("CAN_COMMENT", "TRUE"); } } core.Template.Parse("IS_USER_GUESTBOOK", "TRUE"); long userId = core.LoadUserProfile(user); List<User> commenters = new List<User>(); commenters.Add(page.User); commenters.Add(core.PrimitiveCache[userId]); List<string[]> breadCrumbParts = new List<string[]>(); breadCrumbParts.Add(new string[] { "profile", core.Prose.GetString("PROFILE") }); breadCrumbParts.Add(new string[] { "comments", core.Prose.GetString("COMMENTS") }); breadCrumbParts.Add(new string[] {core.PrimitiveCache[userId].Key, core.PrimitiveCache[userId].DisplayName}); // Load the comment count long comments = 0; SelectQuery query = new SelectQuery("guestbook_comment_counts"); query.AddField(new QueryFunction("comment_comments", QueryFunctions.Sum, "comments")); QueryCondition qc1 = query.AddCondition("owner_id", commenters[0].Id); qc1.AddCondition("user_id", commenters[1].Id); QueryCondition qc2 = query.AddCondition(ConditionRelations.Or, "owner_id", commenters[1].Id); qc2.AddCondition("user_id", commenters[0].Id); DataTable commentCountDataTable = core.Db.Query(query); if (commentCountDataTable.Rows.Count > 0) { if (!(commentCountDataTable.Rows[0]["comments"] is DBNull)) { comments = (long)(Decimal)commentCountDataTable.Rows[0]["comments"]; } } core.Display.DisplayComments(core.Template, page.User, page.User, commenters, comments, UserGuestBookHook); core.Display.ParsePagination("COMMENT_PAGINATION", core.Hyperlink.BuildGuestBookUri(page.User, core.PrimitiveCache[userId]), 10, comments); page.User.ParseBreadCrumbs(breadCrumbParts); }
public void PublishToFeed(Core core, User owner, IActionableItem item, List<NumberedItem> subItems, string description) { core.Console.AppendLine("0x0000"); ItemKey itemKey = item.ItemKey; List<ItemKey> subItemKeys = new List<Internals.ItemKey>(); foreach (NumberedItem i in subItems) { subItemKeys.Add(i.ItemKey); } core.Console.AppendLine("0x0001"); SelectQuery query = new SelectQuery(typeof(Action)); query.AddField(new QueryFunction("action_id", QueryFunctions.Count, "twentyfour")); query.AddCondition("action_primitive_id", owner.ItemKey.Id); query.AddCondition("action_primitive_type_id", owner.ItemKey.TypeId); query.AddCondition("action_application", applicationId); query.AddCondition("action_time_ut", ConditionEquality.GreaterThan, UnixTime.UnixTimeStamp() - 60 * 60 * 24); core.Console.AppendLine("0x0002"); // maximum 48 per application per day if ((long)core.Db.Query(query).Rows[0]["twentyfour"] < 48) { core.Console.AppendLine("0x0003"); /* Post to Twitter, Facebook, individual */ string sharePrefix = (core.Http != null ? core.Http.Form["share"] : null); // Either the share prefix has been set XOR fallback to the default share settings if ((!string.IsNullOrEmpty(sharePrefix)) || ((owner.UserInfo.TwitterSyndicate && owner.UserInfo.TwitterAuthenticated) || (owner.UserInfo.FacebookSyndicate && owner.UserInfo.FacebookAuthenticated) || (owner.UserInfo.TumblrSyndicate && owner.UserInfo.TumblrAuthenticated))) { core.Console.AppendLine("0x0004"); ItemInfo info = item.Info; IActionableItem sharedItem = item; ItemKey sharedItemKey = item.ItemKey; core.Console.AppendLine("0x0005"); if (subItems.Count == 1) { sharedItemKey = subItems[0].ItemKey; try { info = new ItemInfo(core, subItems[0]); } catch (InvalidIteminfoException) { info = ItemInfo.Create(core, subItems[0]); } if (subItems[0] is IActionableItem) { sharedItem = (IActionableItem)subItems[0]; } } core.Console.AppendLine("0x0006"); if (sharedItemKey.GetType(core).Shareable) { bool publicItem = true; string debug = string.Empty; IPermissibleItem pitem = item as IPermissibleItem; if (pitem != null) { publicItem = pitem.Access.IsPublic(); //debug += ":p+" + item.ItemKey.ToString(); } IPermissibleSubItem psitem = item as IPermissibleSubItem; if (psitem != null) { publicItem = psitem.PermissiveParent.Access.IsPublic(); //debug += ":ps+" + publicItem.ToString(); } core.Console.AppendLine("0x0007"); if (publicItem) { core.Console.AppendLine("0x0008"); if (owner.UserInfo.TwitterAuthenticated) { core.Console.AppendLine("0x0009"); int maxLength = 140; if (!string.IsNullOrEmpty(sharedItem.DataContentType)) { maxLength -= 24; // twitter now considers the image link as part of the tweet } string twitterDescription = Functions.TrimStringToWord(description, maxLength - 7 - Hyperlink.Domain.Length - 3 - 11 - 1, true); core.Console.AppendLine("0x0010"); string twitterShare = (core.Http != null ? core.Http.Form[sharePrefix + "-share-twitter"] : string.Empty); core.Console.AppendLine("0x0011"); if ((sharePrefix == null && owner.UserInfo.TwitterSyndicate) || ((!string.IsNullOrEmpty(sharePrefix)) && (!string.IsNullOrEmpty(twitterShare)))) { core.Console.AppendLine("0x0012"); core.Queue.PushJob(new Job(core.Settings.QueueDefaultPriority, 0, core.LoggedInMemberId, sharedItemKey.TypeId, sharedItemKey.Id, "publishTweet", twitterDescription + debug)); } } if (owner.UserInfo.TumblrAuthenticated) { Uri shareUri = new Uri(info.ShareUri); string tumblrShare = (core.Http != null ? core.Http.Form[sharePrefix + "-share-tumblr"] : string.Empty); if ((sharePrefix == null && owner.UserInfo.TumblrSyndicate) || ((!string.IsNullOrEmpty(sharePrefix)) && (!string.IsNullOrEmpty(tumblrShare)))) { core.Queue.PushJob(new Job(core.Settings.QueueDefaultPriority, 0, core.LoggedInMemberId, sharedItemKey.TypeId, sharedItemKey.Id, "publishTumblr", core.Bbcode.Parse(HttpUtility.HtmlEncode(sharedItem.PostType == ActionableItemType.Photo ? sharedItem.Caption : sharedItem.GetActionBody(subItemKeys)), owner, true, string.Empty, string.Empty) + "<p><a href=\"" + info.ShareUri + "\">" + shareUri.Authority + shareUri.PathAndQuery + "</a></p>")); } } if (owner.UserInfo.FacebookAuthenticated) { string facebookShare = (core.Http != null ? core.Http.Form[sharePrefix + "-share-facebook"] : string.Empty); if ((sharePrefix == null && owner.UserInfo.FacebookSyndicate) || ((!string.IsNullOrEmpty(sharePrefix)) && (!string.IsNullOrEmpty(facebookShare)))) { core.Queue.PushJob(new Job(core.Settings.QueueDefaultPriority, 0, core.LoggedInMemberId, sharedItemKey.TypeId, sharedItemKey.Id, "publishFacebook", description)); } } } } } core.Console.AppendLine("0x0013"); /* Post to Box Social feed, coalesce */ SelectQuery query2 = Action.GetSelectQueryStub(core, typeof(Action)); query2.AddCondition("action_primitive_id", owner.ItemKey.Id); query2.AddCondition("action_primitive_type_id", owner.ItemKey.TypeId); query2.AddCondition("action_item_id", itemKey.Id); query2.AddCondition("action_item_type_id", itemKey.TypeId); query2.AddCondition("action_application", applicationId); query2.AddCondition("action_time_ut", ConditionEquality.GreaterThan, UnixTime.UnixTimeStamp() - 60 * 60 * 24); query2.AddSort(SortOrder.Descending, "action_time_ut"); DataTable actionDataTable = core.Db.Query(query2); if (actionDataTable.Rows.Count > 0) { List<ItemKey> subItemsShortList = new List<ItemKey>(); Action action = new Action(core, owner, actionDataTable.Rows[0]); SelectQuery query3 = ActionItem.GetSelectQueryStub(core, typeof(ActionItem)); query3.AddCondition("action_id", action.Id); query3.LimitCount = 3; DataTable actionItemDataTable = core.Db.Query(query3); if (actionItemDataTable.Rows.Count < 3) { for (int i = 0; i < actionItemDataTable.Rows.Count; i++) { subItemsShortList.Add(new ItemKey((long)actionItemDataTable.Rows[i]["item_id"], (long)actionItemDataTable.Rows[i]["item_type_id"])); } for (int i = 0; i < subItems.Count; i++) { if (subItemsShortList.Count == 3) break; subItemsShortList.Add(subItemKeys[i]); } string body = item.GetActionBody(subItemsShortList); string bodyCache = string.Empty; if (!body.Contains("[user") && !body.Contains("sid=true]")) { bodyCache = Bbcode.Parse(HttpUtility.HtmlEncode(body), null, owner, true, string.Empty, string.Empty); } UpdateQuery uquery = new UpdateQuery(typeof(Action)); uquery.AddField("action_time_ut", UnixTime.UnixTimeStamp()); uquery.AddField("action_title", item.Action); uquery.AddField("action_body", body); uquery.AddField("action_body_cache", bodyCache); if (subItemsShortList != null && subItemsShortList.Count == 1) { uquery.AddField("interact_item_id", subItemsShortList[0].Id); uquery.AddField("interact_item_type_id", subItemsShortList[0].TypeId); } else { uquery.AddField("interact_item_id", itemKey.Id); uquery.AddField("interact_item_type_id", itemKey.TypeId); } uquery.AddCondition("action_id", action.Id); core.Db.Query(uquery); if (subItems != null) { foreach (ItemKey subItem in subItemKeys) { InsertQuery iquery = new InsertQuery(typeof(ActionItem)); iquery.AddField("action_id", action.Id); iquery.AddField("item_id", subItem.Id); iquery.AddField("item_type_id", subItem.TypeId); core.Db.Query(iquery); } } } } else { string body = item.GetActionBody(subItemKeys); string bodyCache = string.Empty; if (!body.Contains("[user") && !body.Contains("sid=true]")) { bodyCache = Bbcode.Parse(HttpUtility.HtmlEncode(body), null, owner, true, string.Empty, string.Empty); } InsertQuery iquery = new InsertQuery(typeof(Action)); iquery.AddField("action_primitive_id", owner.ItemKey.Id); iquery.AddField("action_primitive_type_id", owner.ItemKey.TypeId); iquery.AddField("action_item_id", itemKey.Id); iquery.AddField("action_item_type_id", itemKey.TypeId); iquery.AddField("action_title", item.Action); iquery.AddField("action_body", body); iquery.AddField("action_body_cache", bodyCache); iquery.AddField("action_application", applicationId); iquery.AddField("action_time_ut", UnixTime.UnixTimeStamp()); if (subItems != null && subItems.Count == 1) { iquery.AddField("interact_item_id", subItemKeys[0].Id); iquery.AddField("interact_item_type_id", subItemKeys[0].TypeId); } else { iquery.AddField("interact_item_id", itemKey.Id); iquery.AddField("interact_item_type_id", itemKey.TypeId); } long actionId = core.Db.Query(iquery); if (subItems != null) { foreach (ItemKey subItem in subItemKeys) { iquery = new InsertQuery(typeof(ActionItem)); iquery.AddField("action_id", actionId); iquery.AddField("item_id", subItem.Id); iquery.AddField("item_type_id", subItem.TypeId); core.Db.Query(iquery); } } } } }