Exemplo n.º 1
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                var patron = Session[SessionKey.Patron] as DAL.Patron;
                if (patron == null)
                {
                    return;
                }

                var program = DAL.Programs.FetchObject(patron.ProgID);
                if (program == null ||
                    !program.IsOpen ||
                    !program.DisplayDailyImage ||
                    DateTime.Now < program.LoggingStart ||
                    DateTime.Now > program.LoggingEnd)
                {
                    return;
                }

                string imagePath = string.Format(DailyImagePath,
                                                 program.PID,
                                                 (DateTime.Now - program.LoggingStart).Days + 1);

                if (System.IO.File.Exists(Server.MapPath(imagePath)))
                {
                    DailyImageButton.HRef    = Page.ResolveUrl(imagePath);
                    DailyImageButton.Visible = true;
                }
                else
                {
                    var sessionTools = new SessionTools(Session);
                    var cached       = sessionTools.GetCache(Cache, "LoggedAboutDailyImage");
                    if (cached == null)
                    {
                        this.Log().Warn("Unable to show daily image - file doesn't exist: {0}",
                                        Server.MapPath(imagePath));
                        sessionTools.SetCache(Cache, "LoggedAboutDailyImage", true);
                    }
                }
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                var patron = Session[SessionKey.Patron] as DAL.Patron;
                if (patron == null)
                {
                    return;
                }

                var program = DAL.Programs.FetchObject(patron.ProgID);
                if (program == null
                    || !program.IsOpen
                    || !program.DisplayDailyImage
                    || DateTime.Now < program.LoggingStart
                    || DateTime.Now > program.LoggingEnd)
                {
                    return;
                }

                string imagePath = string.Format(DailyImagePath,
                    program.PID,
                    (DateTime.Now - program.LoggingStart).Days + 1);

                if (System.IO.File.Exists(Server.MapPath(imagePath)))
                {
                    DailyImageButton.HRef = Page.ResolveUrl(imagePath);
                    DailyImageButton.Visible = true;
                }
                else
                {
                    var sessionTools = new SessionTools(Session);
                    var cached = sessionTools.GetCache(Cache, "LoggedAboutDailyImage");
                    if (cached == null)
                    {
                        this.Log().Warn("Unable to show daily image - file doesn't exist: {0}",
                            Server.MapPath(imagePath));
                        sessionTools.SetCache(Cache, "LoggedAboutDailyImage", true);
                    }
                }
            }
        }
Exemplo n.º 3
0
        public int UnreadCrMail(HttpContext context)
        {
            if (context.Session == null)
            {
                return(0);
            }
            var tenant   = context.Session[GRA.SRP.ControlRoom.CRSessionKey.TenantID];
            int tenantId = tenant as int? ?? -1;

            if (tenantId == -1)
            {
                return(0);
            }

            var sessionTool = new SessionTools(context.Session);
            var cachedFeed  = sessionTool.GetCache(context.Cache,
                                                   GRA.SRP.ControlRoom.CRSessionKey.UnreadMail,
                                                   tenantId) as int?;

            if (cachedFeed != null)
            {
                return((int)cachedFeed);
            }
            else
            {
                var unread = SRP.DAL.Notifications.GetAllUnreadToPatron(0);
                if (unread != null && unread.Tables.Count > 0)
                {
                    int unreadMessages = unread.Tables[0].Rows.Count;
                    sessionTool.SetCache(context.Cache,
                                         GRA.SRP.ControlRoom.CRSessionKey.UnreadMail,
                                         unreadMessages,
                                         tenantId,
                                         60);
                    return(unreadMessages);
                }
                return(0);
            }
        }
Exemplo n.º 4
0
        public int UnreadCrMail(HttpContext context)
        {
            if (context.Session == null)
            {
                return 0;
            }
            var tenant = context.Session[GRA.SRP.ControlRoom.CRSessionKey.TenantID];
            int tenantId = tenant as int? ?? -1;
            if (tenantId == -1)
            {
                return 0;
            }

            var sessionTool = new SessionTools(context.Session);
            var cachedFeed = sessionTool.GetCache(context.Cache,
                GRA.SRP.ControlRoom.CRSessionKey.UnreadMail,
                tenantId) as int?;
            if (cachedFeed != null)
            {
                return (int)cachedFeed;
            }
            else
            {
                var unread = SRP.DAL.Notifications.GetAllUnreadToPatron(0);
                if (unread != null && unread.Tables.Count > 0)
                {
                    int unreadMessages = unread.Tables[0].Rows.Count;
                    sessionTool.SetCache(context.Cache,
                        GRA.SRP.ControlRoom.CRSessionKey.UnreadMail,
                        unreadMessages,
                        tenantId,
                        60);
                    return unreadMessages;
                }
                return 0;
            }
        }
Exemplo n.º 5
0
        public void ProcessRequest(HttpContext context)
        {
            var tenant   = context.Session["TenantID"];
            int tenantId = tenant as int? ?? -1;

            if (tenantId == -1)
            {
                tenantId = Core.Utilities.Tenant.GetMasterID();
            }

            var sessionTool  = new SessionTools(context.Session);
            var cachedStatus = sessionTool.GetCache(context.Cache, CacheKey.Status, tenantId) as JsonStatus;

            try
            {
                if (cachedStatus != null)
                {
                    context.Response.ContentType = "application/json";
                    context.Response.Write(JsonConvert.SerializeObject(cachedStatus));
                    return;
                }
            }
            catch (Exception ex)
            {
                this.Log().Error("Error looking up status data in cache: {0}", ex.Message);
            }

            var jsonResponse = new JsonStatus();

            try
            {
                var result = new TenantStatus(tenantId).CurrentStatus();
                jsonResponse.RegisteredPatrons    = result.RegisteredPatrons;
                jsonResponse.PointsEarned         = result.PointsEarned;
                jsonResponse.PointsEarnedReading  = result.PointsEarnedReading;
                jsonResponse.ChallengesCompleted  = result.ChallengesCompleted;
                jsonResponse.SecretCodesRedeemed  = result.SecretCodesRedeemed;
                jsonResponse.AdventuresCompleted  = result.AdventuresCompleted;
                jsonResponse.BadgesAwarded        = result.BadgesAwarded;
                jsonResponse.RedeemedProgramCodes = result.RedeemedProgramCodes;
                jsonResponse.Since   = "All Participants";
                jsonResponse.Success = true;
            }
            catch (Exception ex)
            {
                this.Log().Error("Status update error: {0}", ex.Message);
                jsonResponse.Success = false;
            }

            if (jsonResponse.Success)
            {
                try
                {
                    DateTime cacheUntil = DateTime.UtcNow.AddSeconds(30);
                    if (sessionTool.GetCache(context.Cache, CacheKey.Status, tenantId) == null)
                    {
                        //this.Log().Debug("Caching status data until {0}",
                        //                 cacheUntil.ToLocalTime().ToLongTimeString());
                        string tenantCacheKey = sessionTool.GetTenantCacheKey(CacheKey.Status, tenantId);
                        context.Cache.Insert(tenantCacheKey,
                                             jsonResponse,
                                             null,
                                             cacheUntil,
                                             System.Web.Caching.Cache.NoSlidingExpiration,
                                             System.Web.Caching.CacheItemPriority.Default,
                                             null);
                    }
                }
                catch (Exception ex)
                {
                    this.Log().Error("Error caching status response: {0}", ex.Message);
                }
            }

            context.Response.ContentType = "application/json";
            context.Response.Write(JsonConvert.SerializeObject(jsonResponse));
        }
        public void ProcessRequest(HttpContext context)
        {
            var tenant = context.Session["TenantID"];
            int tenantId = tenant as int? ?? -1;
            if (tenantId == -1)
            {
                tenantId = Core.Utilities.Tenant.GetMasterID();
            }

            var sessionTool = new SessionTools(context.Session);
            var cachedStatus = sessionTool.GetCache(context.Cache, CacheKey.Feed, tenantId) as JsonStatus;

            try
            {
                if (cachedStatus != null)
                {
                    context.Response.ContentType = "application/json";
                    context.Response.Write(JsonConvert.SerializeObject(cachedStatus));
                    return;
                }
            }
            catch (Exception ex)
            {
                this.Log().Error("Error looking up status data in cache: {0}", ex.Message);
            }

            var jsonResponse = new JsonStatus();
            try
            {
                TenantStatusReport result = null;
                result = new TenantStatus(tenantId).CurrentStatus();

                jsonResponse.PointsEarned = result.PointsEarned;
                jsonResponse.BadgesAwarded = result.BadgesAwarded;
                jsonResponse.ChallengesCompleted = result.ChallengesCompleted;
                jsonResponse.Since = "All Participants";
                jsonResponse.Success = true;
            }
            catch (Exception ex)
            {
                this.Log().Error("Status update error: {0}", ex.Message);
                jsonResponse.Success = false;
            }

            if (jsonResponse.Success)
            {
                try
                {
                    DateTime cacheUntil = DateTime.UtcNow.AddSeconds(30);
                    if (sessionTool.GetCache(context.Cache, CacheKey.Feed, tenantId) == null)
                    {
                        //this.Log().Debug("Caching status data until {0}",
                        //                 cacheUntil.ToLocalTime().ToLongTimeString());
                        string tenantCacheKey = sessionTool.GetTenantCacheKey(CacheKey.Status, tenantId);
                        context.Cache.Insert(tenantCacheKey,
                                             jsonResponse,
                                             null,
                                             cacheUntil,
                                             System.Web.Caching.Cache.NoSlidingExpiration,
                                             System.Web.Caching.CacheItemPriority.Default,
                                             null);
                    }
                }
                catch (Exception ex)
                {
                    this.Log().Error("Error caching status response: {0}", ex.Message);
                }
            }

            context.Response.ContentType = "application/json";
            context.Response.Write(JsonConvert.SerializeObject(jsonResponse));
        }
        protected void Page_Load(object sender, EventArgs e)
        {

            if (!IsPostBack)
            {
                if (Session["Patron"] == null)
                {
                    Response.Redirect("~");
                }
                var patron = (Patron)Session[SessionKey.Patron];
                var program = Programs.FetchObject(patron.ProgID);

                ViewState[RequireBookDetailsKey] = program.RequireBookDetails;
                ViewState[PatronCanReviewKey] = program.PatronReviewFlag;

                if (program == null || !program.IsOpen)
                {
                    readingLogControlPanel.Visible = false;
                    return;
                }

                ViewState[ProgramGameIdKey] = program.PID.ToString();

                if (Request.Cookies[CookieKey.LogBookDetails] != null)
                {
                    enterBookDetails.Checked = true;
                }

                foreach (ActivityType activityTypeValue in Enum.GetValues(typeof(ActivityType)))
                {
                    int activityTypeId = (int)activityTypeValue;
                    var sessionTool = new SessionTools(Session);

                    string lookupString = string.Format("{0}.{1}.{2}",
                                                        CacheKey.PointGameConversionStub,
                                                        patron.ProgID,
                                                        activityTypeId);
                    var pgc = sessionTool.GetCache(Cache, lookupString) as ProgramGamePointConversion;
                    if (pgc == null)
                    {
                        this.Log().Debug("Cache miss looking up {0}", lookupString);
                        pgc = ProgramGamePointConversion.FetchObjectByActivityId(patron.ProgID,
                                                                                 activityTypeId);
                        sessionTool.SetCache(Cache, lookupString, pgc);
                    }


                    if (pgc != null && pgc.PointCount > 0)
                    {
                        activityTypeSelector.Items.Add(new ListItem(activityTypeValue.ToString(),
                                                                    activityTypeId.ToString()));
                    }
                }

                if (activityTypeSelector.Items.Count == 1)
                {
                    var singleOption = activityTypeSelector.Items[0];

                    if (int.Parse(singleOption.Value) == (int)ActivityType.Books)
                    {
                        countSubmittedLabel.Visible = false;
                        readingActivityField.Text = "1";
                        readingActivityField.Attributes.Remove("style");
                        readingActivityField.Attributes.Add("style", "display: none;");
                        activityTypeSelector.Attributes.Remove("style");
                        activityTypeSelector.Attributes.Add("style", "display: none;");
                        activityTypeSingleLabel.Visible = false;
                        submitButton.Text = StringResources.getString("readinglog-read-a-book");
                    }
                    else {
                        activityTypeSelector.Attributes.Remove("style");
                        activityTypeSelector.Attributes.Add("style", "display: none;");
                        activityTypeSingleLabel.Text = singleOption.Text;
                        activityTypeSingleLabel.Visible = true;
                    }
                }
                else {
                    activityTypeSingleLabel.Visible = false;
                }
            }

        }
        protected void DoFilter(EventSearchCriteria criteria)
        {
            StringBuilder sb = new StringBuilder();
            if (!string.IsNullOrEmpty(criteria.StartDate))
            {
                sb.Append("Start Date: ");
                sb.Append("<strong>");
                sb.Append(criteria.StartDate);
                sb.Append("</strong>");
            }
            if (!string.IsNullOrEmpty(criteria.EndDate))
            {
                if (sb.Length > 0)
                {
                    sb.Append(" / ");
                }
                sb.Append("End date: ");
                sb.Append("<strong>");
                sb.Append(criteria.EndDate);
                sb.Append("</strong>");
            }
            if (criteria.SystemId > 0)
            {
                if (sb.Length > 0)
                {
                    sb.Append(" / ");
                }
                sb.Append("System: ");
                sb.Append("<strong>");
                sb.Append(SystemId.Items.FindByValue(criteria.SystemId.ToString()).Text);
                sb.Append("</strong>");
            }
            if (criteria.BranchId > 0)
            {
                if (sb.Length > 0)
                {
                    sb.Append(" / ");
                }
                sb.Append("Branch/library: ");
                sb.Append("<strong>");
                sb.Append(criteria.BranchName);
                sb.Append("</strong>");
            }
            if (!string.IsNullOrWhiteSpace(criteria.SearchText))
            {
                if (sb.Length > 0)
                {
                    sb.Append(" / ");
                }
                sb.Append("Search text: ");
                sb.Append("<strong>");
                sb.Append(criteria.SearchText);
                sb.Append("</strong>");
            }

            WhatsShowing.Text = WhatsShowingPrint.Text = sb.ToString();
            WhatsShowingPanel.Visible = Filtered = !string.IsNullOrEmpty(WhatsShowing.Text);

            if (string.IsNullOrEmpty(WhatsShowing.Text))
            {
                // no filter criteria, use cache if possible
                var st = new SessionTools(Session);
                var cachedEvents = st.GetCache(Cache, CacheKey.AllEvents) as System.Data.DataSet;
                if (cachedEvents != null)
                {
                    rptr.DataSource = cachedEvents;
                }
                else
                {
                    var allEvents = Event.GetUpcomingDisplay(
                        criteria.StartDate,
                        criteria.EndDate,
                        criteria.SystemId,
                        criteria.BranchId,
                        criteria.SearchText);
                    rptr.DataSource = allEvents;

                    string tenantCacheKey = st.GetTenantCacheKey(CacheKey.AllEvents);
                    Cache.Insert(tenantCacheKey,
                        allEvents,
                        null,
                        DateTime.UtcNow.AddHours(2),
                        System.Web.Caching.Cache.NoSlidingExpiration,
                        System.Web.Caching.CacheItemPriority.Default,
                        null);
                }
            }
            else
            {
                rptr.DataSource = Event.GetUpcomingDisplay(
                    criteria.StartDate,
                    criteria.EndDate,
                    criteria.SystemId,
                    criteria.BranchId,
                    criteria.SearchText);
            }
            rptr.DataBind();

            var wt = new WebTools();
            if (Filtered)
            {
                StartDate.CssClass = wt.CssEnsureClass(StartDate.CssClass, "gra-search-active");
                EndDate.CssClass = wt.CssEnsureClass(EndDate.CssClass, "gra-search-active");
                BranchId.CssClass = wt.CssEnsureClass(BranchId.CssClass, "gra-search-active");
                SystemId.CssClass = wt.CssEnsureClass(SystemId.CssClass, "gra-search-active");
                SearchText.CssClass = wt.CssEnsureClass(SearchText.CssClass, "gra-search-active");
            }
            else
            {
                StartDate.CssClass = wt.CssRemoveClass(StartDate.CssClass, "gra-search-active");
                EndDate.CssClass = wt.CssRemoveClass(EndDate.CssClass, "gra-search-active");
                BranchId.CssClass = wt.CssRemoveClass(BranchId.CssClass, "gra-search-active");
                SystemId.CssClass = wt.CssRemoveClass(SystemId.CssClass, "gra-search-active");
                SearchText.CssClass = wt.CssRemoveClass(SearchText.CssClass, "gra-search-active");
            }
        }
        protected void DoFilter(EventSearchCriteria criteria)
        {
            StringBuilder sb = new StringBuilder();

            if (!string.IsNullOrEmpty(criteria.StartDate))
            {
                sb.Append("Start Date: ");
                sb.Append("<strong>");
                sb.Append(criteria.StartDate);
                sb.Append("</strong>");
            }
            if (!string.IsNullOrEmpty(criteria.EndDate))
            {
                if (sb.Length > 0)
                {
                    sb.Append(" / ");
                }
                sb.Append("End date: ");
                sb.Append("<strong>");
                sb.Append(criteria.EndDate);
                sb.Append("</strong>");
            }
            if (criteria.SystemId > 0)
            {
                if (sb.Length > 0)
                {
                    sb.Append(" / ");
                }
                sb.Append("System: ");
                sb.Append("<strong>");
                sb.Append(SystemId.Items.FindByValue(criteria.SystemId.ToString()).Text);
                sb.Append("</strong>");
            }
            if (criteria.BranchId > 0)
            {
                if (sb.Length > 0)
                {
                    sb.Append(" / ");
                }
                sb.Append("Branch/library: ");
                sb.Append("<strong>");
                sb.Append(criteria.BranchName);
                sb.Append("</strong>");
            }
            if (!string.IsNullOrWhiteSpace(criteria.SearchText))
            {
                if (sb.Length > 0)
                {
                    sb.Append(" / ");
                }
                sb.Append("Search text: ");
                sb.Append("<strong>");
                sb.Append(criteria.SearchText);
                sb.Append("</strong>");
            }

            WhatsShowing.Text         = WhatsShowingPrint.Text = sb.ToString();
            WhatsShowingPanel.Visible = Filtered = !string.IsNullOrEmpty(WhatsShowing.Text);

            if (string.IsNullOrEmpty(WhatsShowing.Text))
            {
                // no filter criteria, use cache if possible
                var st           = new SessionTools(Session);
                var cachedEvents = st.GetCache(Cache, CacheKey.AllEvents) as System.Data.DataSet;
                if (cachedEvents != null)
                {
                    rptr.DataSource = cachedEvents;
                }
                else
                {
                    var allEvents = Event.GetUpcomingDisplay(
                        criteria.StartDate,
                        criteria.EndDate,
                        criteria.SystemId,
                        criteria.BranchId,
                        criteria.SearchText);
                    rptr.DataSource = allEvents;

                    string tenantCacheKey = st.GetTenantCacheKey(CacheKey.AllEvents);
                    Cache.Insert(tenantCacheKey,
                                 allEvents,
                                 null,
                                 DateTime.UtcNow.AddHours(2),
                                 System.Web.Caching.Cache.NoSlidingExpiration,
                                 System.Web.Caching.CacheItemPriority.Default,
                                 null);
                }
            }
            else
            {
                rptr.DataSource = Event.GetUpcomingDisplay(
                    criteria.StartDate,
                    criteria.EndDate,
                    criteria.SystemId,
                    criteria.BranchId,
                    criteria.SearchText);
            }
            rptr.DataBind();

            var wt = new WebTools();

            if (Filtered)
            {
                StartDate.CssClass  = wt.CssEnsureClass(StartDate.CssClass, "gra-search-active");
                EndDate.CssClass    = wt.CssEnsureClass(EndDate.CssClass, "gra-search-active");
                BranchId.CssClass   = wt.CssEnsureClass(BranchId.CssClass, "gra-search-active");
                SystemId.CssClass   = wt.CssEnsureClass(SystemId.CssClass, "gra-search-active");
                SearchText.CssClass = wt.CssEnsureClass(SearchText.CssClass, "gra-search-active");
            }
            else
            {
                StartDate.CssClass  = wt.CssRemoveClass(StartDate.CssClass, "gra-search-active");
                EndDate.CssClass    = wt.CssRemoveClass(EndDate.CssClass, "gra-search-active");
                BranchId.CssClass   = wt.CssRemoveClass(BranchId.CssClass, "gra-search-active");
                SystemId.CssClass   = wt.CssRemoveClass(SystemId.CssClass, "gra-search-active");
                SearchText.CssClass = wt.CssRemoveClass(SearchText.CssClass, "gra-search-active");
            }
        }
        public void ProcessRequest(HttpContext context)
        {
            var tenant = context.Session["TenantID"];
            int tenantId = tenant as int? ?? -1;
            if (tenantId == -1)
            {
                tenantId = Core.Utilities.Tenant.GetMasterID();
            }

            var sessionTool = new SessionTools(context.Session);
            var cachedFeed = sessionTool.GetCache(context.Cache, CacheKey.Feed, tenantId) as JsonFeed;

            try
            {
                if (cachedFeed != null)
                {
                    context.Response.ContentType = "application/json";
                    context.Response.Write(JsonConvert.SerializeObject(cachedFeed));
                    return;
                }
            }
            catch (Exception ex)
            {
                this.Log().Error("Error looking up feed data in cache: {0}", ex.Message);
            }

            var jsonResponse = new JsonFeed();
            var entries = new List<JsonFeedEntry>();

            int after = 0;
            int.TryParse(context.Request.QueryString["after"], out after);

            try
            {
                var feed = new ActivityFeed().Latest(after, tenantId);
                foreach (DataRow dataRow in feed.Rows)
                {
                    var entry = new JsonFeedEntry
                    {
                        ID = (int)dataRow["PPID"],
                        PatronId = (int)dataRow["PID"],
                        Username = (string)dataRow["Username"],
                        AwardedAt = ((DateTime)dataRow["AwardDate"]).ToString(),
                        AwardReasonId = (int)dataRow["AwardReasonCd"],
                        BadgeId = (int)dataRow["BadgeId"],
                        ChallengeId = dataRow["BLID"] == DBNull.Value ? 0 : (int)dataRow["BLID"],
                        ChallengeProgramId = dataRow["BLProgID"] == DBNull.Value ? 0 : (int)dataRow["BLProgID"],
                        AvatarState = dataRow["AvatarState"] == DBNull.Value ? string.Empty : (string)dataRow["AvatarState"]
                    };

                    if (entry.ID > jsonResponse.Latest)
                    {
                        jsonResponse.Latest = entry.ID;
                    }

                    switch (entry.AwardReasonId)
                    {
                        case 1:
                            // got badge
                            entry.AchievementName = (string)dataRow["BadgeName"];
                            break;
                        case 2:
                            // completed challenge
                            entry.AchievementName = (string)dataRow["ListName"];
                            break;
                        case 4:
                            entry.AchievementName = (string)dataRow["GameName"];
                            break;
                    }
                    entries.Add(entry);
                }

                jsonResponse.Entries = entries.ToArray();
                jsonResponse.Success = true;
            }
            catch (Exception ex)
            {
                this.Log().Error("Error loading feed: {0}", ex.Message);
                jsonResponse.Success = false;
            }

            if (jsonResponse.Success)
            {
                try
                {
                    DateTime cacheUntil = DateTime.UtcNow.AddSeconds(30);
                    if (sessionTool.GetCache(context.Cache, CacheKey.Feed, tenantId) == null)
                    {
                        //this.Log().Debug("Caching feed data until {0}",
                        //                 cacheUntil.ToLocalTime().ToLongTimeString());
                        string tenantCacheKey = sessionTool.GetTenantCacheKey(CacheKey.Feed, tenantId);
                        context.Cache.Insert(tenantCacheKey,
                                             jsonResponse,
                                             null,
                                             cacheUntil,
                                             System.Web.Caching.Cache.NoSlidingExpiration,
                                             System.Web.Caching.CacheItemPriority.Default,
                                             null);
                    }
                }
                catch (Exception ex)
                {
                    this.Log().Error("Error caching feed response: {0}", ex.Message);
                }
            }

            context.Response.ContentType = "application/json";
            context.Response.Write(JsonConvert.SerializeObject(jsonResponse));
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Session["Patron"] == null)
                {
                    Response.Redirect("~");
                }
                var patron  = (Patron)Session[SessionKey.Patron];
                var program = Programs.FetchObject(patron.ProgID);

                ViewState[RequireBookDetailsKey] = program.RequireBookDetails;
                ViewState[PatronCanReviewKey]    = program.PatronReviewFlag;

                if (program == null || !program.IsOpen)
                {
                    readingLogControlPanel.Visible = false;
                    return;
                }

                ViewState[ProgramGameIdKey] = program.PID.ToString();

                if (Request.Cookies[CookieKey.LogBookDetails] != null)
                {
                    enterBookDetails.Checked = true;
                }

                foreach (ActivityType activityTypeValue in Enum.GetValues(typeof(ActivityType)))
                {
                    int activityTypeId = (int)activityTypeValue;
                    var sessionTool    = new SessionTools(Session);

                    string lookupString = string.Format("{0}.{1}.{2}",
                                                        CacheKey.PointGameConversionStub,
                                                        patron.ProgID,
                                                        activityTypeId);
                    var pgc = sessionTool.GetCache(Cache, lookupString) as ProgramGamePointConversion;
                    if (pgc == null)
                    {
                        this.Log().Debug("Cache miss looking up {0}", lookupString);
                        pgc = ProgramGamePointConversion.FetchObjectByActivityId(patron.ProgID,
                                                                                 activityTypeId);
                        sessionTool.SetCache(Cache, lookupString, pgc);
                    }


                    if (pgc != null && pgc.PointCount > 0)
                    {
                        activityTypeSelector.Items.Add(new ListItem(activityTypeValue.ToString(),
                                                                    activityTypeId.ToString()));
                    }
                }

                if (activityTypeSelector.Items.Count == 1)
                {
                    var singleOption = activityTypeSelector.Items[0];

                    if (int.Parse(singleOption.Value) == (int)ActivityType.Books)
                    {
                        countSubmittedLabel.Visible = false;
                        readingActivityField.Text   = "1";
                        readingActivityField.Attributes.Remove("style");
                        readingActivityField.Attributes.Add("style", "display: none;");
                        activityTypeSelector.Attributes.Remove("style");
                        activityTypeSelector.Attributes.Add("style", "display: none;");
                        activityTypeSingleLabel.Visible = false;
                        submitButton.Text = StringResources.getString("readinglog-read-a-book");
                    }
                    else
                    {
                        activityTypeSelector.Attributes.Remove("style");
                        activityTypeSelector.Attributes.Add("style", "display: none;");
                        activityTypeSingleLabel.Text    = singleOption.Text;
                        activityTypeSingleLabel.Visible = true;
                    }
                }
                else
                {
                    activityTypeSingleLabel.Visible = false;
                }
            }
        }
        public void ProcessRequest(HttpContext context)
        {
            var tenant   = context.Session["TenantID"];
            int tenantId = tenant as int? ?? -1;

            if (tenantId == -1)
            {
                tenantId = Core.Utilities.Tenant.GetMasterID();
            }

            var sessionTool = new SessionTools(context.Session);
            var cachedFeed  = sessionTool.GetCache(context.Cache, CacheKey.Feed, tenantId) as JsonFeed;

            try
            {
                if (cachedFeed != null)
                {
                    context.Response.ContentType = "application/json";
                    context.Response.Write(JsonConvert.SerializeObject(cachedFeed));
                    return;
                }
            }
            catch (Exception ex)
            {
                this.Log().Error("Error looking up feed data in cache: {0}", ex.Message);
            }

            var jsonResponse = new JsonFeed();
            var entries      = new List <JsonFeedEntry>();

            int after = 0;

            int.TryParse(context.Request.QueryString["after"], out after);

            try
            {
                var feed = new ActivityFeed().Latest(after, tenantId);
                foreach (DataRow dataRow in feed.Rows)
                {
                    var entry = new JsonFeedEntry
                    {
                        ID                 = (int)dataRow["PPID"],
                        PatronId           = (int)dataRow["PID"],
                        Username           = (string)dataRow["Username"],
                        AwardedAt          = ((DateTime)dataRow["AwardDate"]).ToString(),
                        AwardReasonId      = (int)dataRow["AwardReasonCd"],
                        BadgeId            = (int)dataRow["BadgeId"],
                        ChallengeId        = dataRow["BLID"] == DBNull.Value ? 0 : (int)dataRow["BLID"],
                        ChallengeProgramId = dataRow["BLProgID"] == DBNull.Value ? 0 : (int)dataRow["BLProgID"],
                        AvatarState        = dataRow["AvatarState"] == DBNull.Value ? string.Empty : (string)dataRow["AvatarState"]
                    };

                    if (entry.ID > jsonResponse.Latest)
                    {
                        jsonResponse.Latest = entry.ID;
                    }

                    switch (entry.AwardReasonId)
                    {
                    case 1:
                        // got badge
                        entry.AchievementName = (string)dataRow["BadgeName"];
                        break;

                    case 2:
                        // completed challenge
                        entry.AchievementName = (string)dataRow["ListName"];
                        break;

                    case 4:
                        entry.AchievementName = (string)dataRow["GameName"];
                        break;
                    }
                    entries.Add(entry);
                }

                jsonResponse.Entries = entries.ToArray();
                jsonResponse.Success = true;
            }
            catch (Exception ex)
            {
                this.Log().Error("Error loading feed: {0}", ex.Message);
                jsonResponse.Success = false;
            }

            if (jsonResponse.Success)
            {
                try
                {
                    DateTime cacheUntil = DateTime.UtcNow.AddSeconds(30);
                    if (sessionTool.GetCache(context.Cache, CacheKey.Feed, tenantId) == null)
                    {
                        //this.Log().Debug("Caching feed data until {0}",
                        //                 cacheUntil.ToLocalTime().ToLongTimeString());
                        string tenantCacheKey = sessionTool.GetTenantCacheKey(CacheKey.Feed, tenantId);
                        context.Cache.Insert(tenantCacheKey,
                                             jsonResponse,
                                             null,
                                             cacheUntil,
                                             System.Web.Caching.Cache.NoSlidingExpiration,
                                             System.Web.Caching.CacheItemPriority.Default,
                                             null);
                    }
                }
                catch (Exception ex)
                {
                    this.Log().Error("Error caching feed response: {0}", ex.Message);
                }
            }

            context.Response.ContentType = "application/json";
            context.Response.Write(JsonConvert.SerializeObject(jsonResponse));
        }