예제 #1
0
    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;
        }
    }
예제 #2
0
    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;
        }
    }
예제 #3
0
    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;
    }
예제 #4
0
    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;
    }