private static void RebuildMembershipCacheForOrg(int handledOrgId) { Organizations orgs = Organization.FromIdentity(handledOrgId).GetTree(); Memberships ms = Memberships.ForOrganizations(orgs, false); OrgMembershipCacheEntry msc = null; foreach (Activizr.Logic.Pirates.Membership m in ms) { if (!membershipCache.ContainsKey(m.OrganizationId)) { msc = new OrgMembershipCacheEntry(); msc.memberships = new Dictionary <int, Activizr.Logic.Pirates.Membership>(); membershipCache[m.OrganizationId] = msc; } else { msc = membershipCache[m.OrganizationId]; } msc.membershipCacheTime = DateTime.Now; msc.memberships[m.PersonId] = m; msc.orgId = m.OrganizationId; } }
private static void RebuildMembershipCacheForOrg (int handledOrgId) { Organizations orgs = Organization.FromIdentity(handledOrgId).GetTree(); Memberships ms = Memberships.ForOrganizations(orgs, true); OrgMembershipCacheEntry msc = null; foreach (Activizr.Logic.Pirates.Membership m in ms) { if (!membershipCache.ContainsKey(m.OrganizationId)) { msc = new OrgMembershipCacheEntry(); msc.memberships = new Dictionary<int, Activizr.Logic.Pirates.Membership>(); membershipCache[m.OrganizationId] = msc; } else { msc = membershipCache[m.OrganizationId]; } msc.membershipCacheTime = DateTime.Now; msc.memberships[m.PersonId] = m; msc.orgId = m.OrganizationId; } }
protected void ButtonExpiringList_Click(object sender, EventArgs e) { Organization selectedOrg = Organization.FromIdentity(Convert.ToInt32(this.DropOrganizations.SelectedValue)); int days = 0; if (!int.TryParse(this.ExpiryDays.Text, out days)) { this.ExpiryDays.Text = "Error"; return; } DateTime lowerlimit = DateTime.Today; DateTime upperlimit = DateTime.Today; if (days < 0) { lowerlimit = DateTime.Today.AddDays(days); } else { upperlimit = DateTime.Today.AddDays(days + 1); } lock (membershipCacheLock) { if (membershipCache == null) { membershipCache = new Dictionary <int, OrgMembershipCacheEntry>(); } //Tidy up cache to release memory if (membershipCache.Count > 0) { int[] keys = new int[membershipCache.Count]; membershipCache.Keys.CopyTo(keys, 0); foreach (int orgid in keys) { if (DateTime.Now > membershipCache[orgid].membershipCacheTime.AddMinutes(5)) { membershipCache.Remove(orgid); } } } //load cache if (!membershipCache.ContainsKey(selectedOrg.Identity) || DateTime.Now > membershipCache[selectedOrg.Identity].membershipCacheTime.AddMinutes(5)) { RebuildMembershipCacheForOrg(selectedOrg.Identity); } } People results = GetResults(); results = results.Filter(delegate(Person p) { if (membershipCache.ContainsKey(selectedOrg.Identity)) { OrgMembershipCacheEntry msc = membershipCache[selectedOrg.Identity]; if (msc.memberships.ContainsKey(p.Identity)) { Activizr.Logic.Pirates.Membership m = msc.memberships[p.Identity]; if (m.Expires >= lowerlimit && m.Expires < upperlimit) { return(true); } } } return(false); }); PersonList.ShowExpiry = true; PersonList.ListedOrg = selectedOrg.Identity; PersonList.PersonList = results; LabelExpiryHeader.Visible = true; }
protected void ButtonExpiringList_Click(object sender, EventArgs e) { Organization selectedOrg = Organization.FromIdentity(Convert.ToInt32(this.DropOrganizations.SelectedValue)); DateTime lowerlimit = DateTime.Today; DateTime upperlimit = DateTime.Today; int days = 0; if (!int.TryParse(this.ExpiryDays.Text, out days)) { this.ExpiryDays.Text = "Error"; return; } upperlimit = DateTime.Today.AddDays(Math.Abs(days) + 1); days = 0; if (!int.TryParse(this.SinceDays.Text, out days)) { this.SinceDays.Text = "Error"; } days = Math.Abs(days); if (days > Activizr.Logic.Pirates.Membership.GracePeriod) { this.SinceDays.Text = "" + Activizr.Logic.Pirates.Membership.GracePeriod; days = Activizr.Logic.Pirates.Membership.GracePeriod; } lowerlimit = DateTime.Today.AddDays(-Math.Abs(days)); lock (membershipCacheLock) { if (membershipCache == null) { membershipCache = new Dictionary <int, OrgMembershipCacheEntry>(); } //Tidy up cache to release memory if (membershipCache.Count > 0) { int[] keys = new int[membershipCache.Count]; membershipCache.Keys.CopyTo(keys, 0); foreach (int orgid in keys) { if (DateTime.Now > membershipCache[orgid].membershipCacheTime.AddMinutes(5)) { membershipCache.Remove(orgid); } } } //load cache if (!membershipCache.ContainsKey(selectedOrg.Identity) || DateTime.Now > membershipCache[selectedOrg.Identity].membershipCacheTime.AddMinutes(5)) { RebuildMembershipCacheForOrg(selectedOrg.Identity); } } People results = GetResults(true, Activizr.Logic.Pirates.Membership.GracePeriod); lock (membershipCacheLock) { results = results.Filter(delegate(Person p) { if (membershipCache.ContainsKey(selectedOrg.Identity)) { OrgMembershipCacheEntry msc = membershipCache[selectedOrg.Identity]; if (msc.memberships.ContainsKey(p.Identity)) { Activizr.Logic.Pirates.Membership m = msc.memberships[p.Identity]; //expired within search Period AND was not prematurely terminated if (m.Expires >= lowerlimit && m.Expires < upperlimit && (m.DateTerminated < m.MemberSince || m.DateTerminated.AddDays(1) > m.Expires)) { return(true); } } } return(false); }); } PersonList.ShowExpiry = true; PersonList.ListedOrg = selectedOrg.Identity; if (_authority.HasPermission(Permission.CanEditMemberships, selectedOrg.Identity, Convert.ToInt32(DropGeographies.SelectedValue), Authorization.Flag.Default)) { PersonList.ShowStatus = true; } LabelExpiryHeader.Visible = true; PersonList.PersonList = results; }